feat: first commit
Some checks failed
Release / release (push) Failing after 7s

This commit is contained in:
2026-02-19 10:48:42 +01:00
commit fa507aa850
18 changed files with 365 additions and 0 deletions

12
.editorconfig Normal file
View File

@@ -0,0 +1,12 @@
root = true
[*]
indent_size = 2
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

View File

@@ -0,0 +1,53 @@
name: Release
on:
push:
branches:
- main
- master
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Configure Git Auth
env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
run: |
git config user.name "malio-ci"
git config user.email "ci@gitea.malio.fr"
git remote set-url origin "https://oauth2:${RELEASE_TOKEN}@gitea.malio.fr/MALIO-DEV/malio-layer-ui.git"
- name: Install Dependencies
run: npm ci
- name: Lint
run: |
npm run dev:prepare
npm run lint
- name: Release
env:
GIT_AUTHOR_NAME: malio-ci
GIT_AUTHOR_EMAIL: ci@gitea.malio.fr
GIT_COMMITTER_NAME: malio-ci
GIT_COMMITTER_EMAIL: ci@gitea.malio.fr
GIT_CREDENTIALS: ${{ secrets.RELEASE_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
npx --yes \
-p semantic-release@24 \
-p @semantic-release/commit-analyzer@13 \
-p @semantic-release/release-notes-generator@14 \
-p @semantic-release/npm@12 \
semantic-release

24
.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
node_modules
*.log
.nuxt
nuxt.d.ts
.output
.data
.env
package-lock.json
framework
dist
.DS_Store
# Yarn
.yarn/cache
.yarn/*state*
# Local History
.history
# VSCode
.vscode/
# JetBrains/WebStorm
.idea/

2
.npmrc Normal file
View File

@@ -0,0 +1,2 @@
@malio:registry=https://gitea.malio.fr/api/packages/MALIO-DEV/npm/
//gitea.malio.fr/api/packages/MALIO-DEV/npm/:_authToken=${NPM_TOKEN}

1
.nuxtrc Normal file
View File

@@ -0,0 +1 @@
typescript.includeWorkspace = true

View File

@@ -0,0 +1,5 @@
export default defineAppConfig({
myLayer: {
name: 'My amazing Nuxt layer (overwritten)'
}
})

View File

@@ -0,0 +1,12 @@
import { fileURLToPath } from 'node:url'
export default defineNuxtConfig({
extends: ['..'],
modules: ['@nuxt/eslint'],
eslint: {
config: {
// Use the generated ESLint config for lint root project as well
rootDir: fileURLToPath(new URL('..', import.meta.url))
}
}
})

View File

@@ -0,0 +1,11 @@
<template>
<div class="p-6 space-y-4">
<MalioInput v-model="v" label="Email" placeholder="you@example.com" />
<pre class="text-xs">{{ v }}</pre>
</div>
</template>
<script setup lang="ts">
const v = ref('')
</script>

9
.releaserc.json Normal file
View File

@@ -0,0 +1,9 @@
{
"branches": ["main", "master"],
"repositoryUrl": "https://gitea.malio.fr/MALIO-DEV/malio-layer-ui.git",
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/npm"
]
}

132
README.md Normal file
View File

@@ -0,0 +1,132 @@
# Malio UI Layer (Nuxt)
Layer Nuxt partageable pour centraliser des composants UI et les réutiliser dans plusieurs projets.
Le layer est à la racine du repo.
Le dossier `.playground/` sert à tester localement les composants du layer.
## Commandes utiles
### Installation
```bash
npm install
```
### Développement local (playground)
Préparer les fichiers Nuxt générés du playground (utile pour TypeScript + ESLint) :
```bash
npm run dev:prepare
```
Lancer le playground :
```bash
npm run dev
```
### Qualité
Lancer le linter :
```bash
npm run lint
```
### Build / preview
Build de production du playground :
```bash
npm run build
```
Génération statique du playground :
```bash
npm run generate
```
Prévisualiser le build :
```bash
npm run preview
```
### Livraison / publication du layer
Vérifier le contenu qui sera publié :
```bash
npm pack --dry-run
```
Publier sur le registry NPM configuré :
```bash
npm publish
```
Publier explicitement sur un registry Gitea :
```bash
npm publish --registry https://<gitea-host>/api/packages/<owner>/npm/
```
## Tester un composant dans le playground
Le playground étend déjà le layer via `.playground/nuxt.config.ts`.
Exemple rapide :
1. Créer un composant dans le layer
Fichier `app/components/malio/Badge.vue`
```vue
<template>
<span class="inline-flex rounded-full bg-gray-900 px-2 py-1 text-xs text-white">
{{ label }}
</span>
</template>
<script setup lang="ts">
withDefaults(defineProps<{ label?: string }>(), {
label: 'Badge',
})
</script>
```
2. Lutiliser dans le playground
Fichier `.playground/pages/index.vue`
```vue
<template>
<div class="p-6 space-y-4">
<MalioBadge label="Nouveau composant" />
</div>
</template>
```
3. Lancer le playground
```bash
npm run dev
```
## Utiliser ce layer dans un autre projet Nuxt
Installer le package :
```bash
npm install @malio/layer-ui
```
Étendre le layer dans `nuxt.config.ts` du projet consommateur :
```ts
export default defineNuxtConfig({
extends: ['@malio/layer-ui'],
})
```

14
app.config.ts Normal file
View File

@@ -0,0 +1,14 @@
export default defineAppConfig({
myLayer: {
name: 'Hello from Nuxt layer'
}
})
declare module '@nuxt/schema' {
interface AppConfigInput {
myLayer?: {
/** Project name */
name?: string
}
}
}

5
app/app.vue Normal file
View File

@@ -0,0 +1,5 @@
<template>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>

View File

@@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@@ -0,0 +1,38 @@
<template>
<div class="space-y-1">
<label v-if="label" :for="id" class="text-sm font-medium text-gray-700">{{ label }}</label>
<input
:id="id"
:value="props.modelValue"
:type="props.type"
:placeholder="props.placeholder"
class="w-full rounded-md border border-gray-300 px-3 py-2 text-sm outline-none transition focus:border-gray-500"
@input="onInput"
>
</div>
</template>
<script setup lang="ts">
const props = withDefaults(defineProps<{
modelValue?: string
type?: string
label?: string
placeholder?: string
id?: string
}>(), {
modelValue: '',
type: 'text',
label: '',
placeholder: '',
id: undefined,
})
const emit = defineEmits<{
(e: 'update:modelValue', value: string): void
}>()
function onInput(event: Event) {
const target = event.target as HTMLInputElement
emit('update:modelValue', target.value)
}
</script>

3
eslint.config.js Normal file
View File

@@ -0,0 +1,3 @@
import withNuxt from './.playground/.nuxt/eslint.config.mjs'
export default withNuxt()

9
nuxt.config.ts Normal file
View File

@@ -0,0 +1,9 @@
import { fileURLToPath } from 'node:url'
import { dirname, join } from 'node:path'
const currentDir = dirname(fileURLToPath(import.meta.url))
export default defineNuxtConfig({
modules: ['@nuxtjs/tailwindcss'],
css: [join(currentDir, './app/assets/css/tailwind.css')],
})

29
package.json Normal file
View File

@@ -0,0 +1,29 @@
{
"name": "@malio/layer-ui",
"type": "module",
"version": "0.0.1",
"main": "./nuxt.config.ts",
"files": ["app/**", "nuxt.config.ts", "README.md"],
"scripts": {
"dev": "nuxi dev .playground",
"dev:prepare": "nuxt prepare .playground",
"build": "nuxt build .playground",
"generate": "nuxt generate .playground",
"preview": "nuxt preview .playground",
"lint": "eslint ."
},
"peerDependencies": {
"nuxt": "^4.0.0"
},
"devDependencies": {
"@nuxt/eslint": "latest",
"@types/node": "^24.10.13",
"eslint": "^10.0.0",
"nuxt": "^4.3.1",
"typescript": "^5.9.3",
"vue": "latest"
},
"dependencies": {
"@nuxtjs/tailwindcss": "^6.14.0"
}
}

3
tsconfig.json Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": "./.playground/.nuxt/tsconfig.json"
}