# @malio/layer-ui — Composants Tous les composants sont auto-importés avec le préfixe `Malio`. Utiliser `v-model` pour le binding bidirectionnel sur les composants de formulaire. --- ## MalioInputText Champ texte avec label, icône optionnelle et support de masque de saisie. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `id` | `string` | auto | Identifiant HTML | | `label` | `string` | `''` | Label du champ | | `modelValue` | `string \| null` | `undefined` | Valeur (v-model) | | `disabled` | `boolean` | `false` | Désactive le champ | | `readonly` | `boolean` | `false` | Lecture seule | | `required` | `boolean` | `false` | Champ requis | | `hint` | `string` | `''` | Message d'aide | | `error` | `string` | `''` | Message d'erreur | | `success` | `string` | `''` | Message de succès | | `iconName` | `string` | `''` | Icône Iconify (ex: `mdi:magnify`) | | `iconPosition` | `'left' \| 'right'` | `'right'` | Position de l'icône | | `iconSize` | `string \| number` | `24` | Taille icône | | `iconColor` | `string` | `'text-m-muted'` | Classe couleur icône | | `mask` | `string \| MaskInputOptions` | — | Masque de saisie (maska) | | `maxLength` | `number \| string` | — | Longueur max | | `minLength` | `number \| string` | — | Longueur min | | `inputClass` | `string` | `''` | Classes CSS input | | `labelClass` | `string` | `''` | Classes CSS label | | `groupClass` | `string` | `''` | Classes CSS conteneur | **Events :** `update:modelValue(value: string)` ```vue ``` --- ## MalioInputPassword Champ mot de passe avec toggle visibilité. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| null` | `undefined` | Valeur (v-model) | | `label` | `string` | `''` | Label | | `displayIcon` | `boolean` | `true` | Afficher l'icône toggle | | `disabled` | `boolean` | `false` | Désactivé | | `readonly` | `boolean` | `false` | Lecture seule | | `hint` | `string` | `''` | Message d'aide | | `error` | `string` | `''` | Message d'erreur | | `success` | `string` | `''` | Message de succès | **Events :** `update:modelValue(value: string)` ```vue ``` --- ## MalioInputAmount Champ montant avec icône devise (euro par défaut). | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| null` | `undefined` | Valeur (v-model) | | `label` | `string` | `''` | Label | | `iconName` | `string` | `'mdi:currency-eur'` | Icône devise | | `disabled` | `boolean` | `false` | Désactivé | | `error` | `string` | `''` | Message d'erreur | **Events :** `update:modelValue(value: string)` ```vue ``` --- ## MalioInputNumber Champ numérique avec boutons +/-. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| null` | `undefined` | Valeur (v-model) | | `label` | `string` | `''` | Label | | `min` | `number \| string` | — | Valeur minimum | | `max` | `number \| string` | — | Valeur maximum | | `disabled` | `boolean` | `false` | Désactivé | | `error` | `string` | `''` | Message d'erreur | **Events :** `update:modelValue(value: string)` ```vue ``` --- ## MalioInputTextArea Zone de texte multiligne avec compteur et redimensionnement. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| null` | `undefined` | Valeur (v-model) | | `label` | `string` | `''` | Label | | `size` | `number \| string` | `2` | Nombre de lignes | | `resize` | `'none' \| 'both' \| 'horizontal' \| 'vertical'` | `'both'` | Mode redimensionnement | | `maxLength` | `number` | `800` | Longueur max | | `showCounter` | `boolean` | `false` | Afficher le compteur | | `disabled` | `boolean` | `false` | Désactivé | | `error` | `string` | `''` | Message d'erreur | **Events :** `update:modelValue(value: string)` ```vue ``` --- ## MalioInputUpload Champ d'upload de fichier. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| null` | `undefined` | Nom du fichier (v-model) | | `label` | `string` | `''` | Label | | `accept` | `string` | `''` | Types de fichiers acceptés | | `displayIcon` | `boolean` | `true` | Afficher l'icône | | `disabled` | `boolean` | `false` | Désactivé | | `error` | `string` | `''` | Message d'erreur | **Events :** `update:modelValue(value: string)`, `file-selected(file: File)` ```vue ``` --- ## MalioSelect Liste déroulante. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| number \| null` | **requis** | Valeur sélectionnée (v-model) | | `options` | `{ value: string \| number, text: string }[]` | `[]` | Options disponibles | | `emptyOptionLabel` | `string` | `''` | Placeholder option vide | | `label` | `string` | `''` | Label | | `hint` | `string` | `''` | Message d'aide | | `error` | `string` | `''` | Message d'erreur | | `success` | `string` | `''` | Message de succès | | `disabled` | `boolean` | `false` | Désactivé | | `groupClass` | `string` | `''` | Classes CSS conteneur (twMerge) | | `minWidth` | `string` | `'w-96'` | Classe largeur minimum | | `maxWidth` | `string` | `''` | Classe largeur maximum | | `rounded` | `string` | `'rounded-md'` | Classe border-radius | | `textField` | `string` | `'text-lg'` | Classe taille texte bouton | | `textValue` | `string` | `'text-lg'` | Classe taille texte valeur | | `textLabel` | `string` | `'text-sm'` | Classe taille texte label | **Events :** `update:modelValue(value: string | number | null)` **Slots :** `icon` (icône dropdown custom) ```vue ``` --- ## MalioSelectCheckbox Liste déroulante multi-sélection avec checkboxes. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `(string \| number)[]` | **requis** | Valeurs sélectionnées (v-model) | | `options` | `{ value: string \| number, text: string }[]` | `[]` | Options | | `displayTag` | `boolean` | `false` | Afficher les tags sélectionnés | | `displaySelectAll` | `boolean` | `false` | Afficher "Tout sélectionner" | | `selectAllLabel` | `string` | `'Tout sélectionner'` | Texte du sélecteur global | | `label` | `string` | `''` | Label | | `disabled` | `boolean` | `false` | Désactivé | **Events :** `update:modelValue(value: (string | number)[])` ```vue ``` --- ## MalioCheckbox Case à cocher. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `boolean \| null` | `undefined` | Valeur (v-model) | | `label` | `string` | `''` | Label | | `disabled` | `boolean` | `false` | Désactivé | | `readonly` | `boolean` | `false` | Lecture seule | | `error` | `string` | `''` | Message d'erreur | **Events :** `update:modelValue(value: boolean)` ```vue ``` --- ## MalioRadioButton Bouton radio (à utiliser en groupe avec le même `name`). | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| number \| boolean \| null` | `undefined` | Valeur du groupe (v-model) | | `value` | `string \| number \| boolean \| null` | `undefined` | Valeur de cette option | | `label` | `string` | `''` | Label | | `name` | `string` | `''` | Nom du groupe radio | | `disabled` | `boolean` | `false` | Désactivé | | `readonly` | `boolean` | `false` | Lecture seule | **Events :** `update:modelValue(value: string | number | boolean | null)` ```vue ``` --- ## MalioTime Sélecteur d'heure. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string \| null` | `undefined` | Heure au format HH:mm (v-model) | | `label` | `string` | `''` | Label | | `disabled` | `boolean` | `false` | Désactivé | | `readonly` | `boolean` | `false` | Lecture seule | | `error` | `string` | `''` | Message d'erreur | **Events :** `update:modelValue(value: string)` ```vue ``` --- ## MalioButton Bouton d'action avec 4 variantes visuelles et icône optionnelle. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `label` | `string` | `''` | Texte du bouton (ou slot par défaut) | | `variant` | `'primary' \| 'secondary' \| 'tertiary' \| 'danger'` | `'primary'` | Variante visuelle | | `disabled` | `boolean` | `false` | Désactivé | | `buttonClass` | `string` | `''` | Classes CSS additionnelles (twMerge) | | `iconName` | `string` | `''` | Icône Iconify | | `iconPosition` | `'left' \| 'right'` | `'right'` | Position icône | | `iconSize` | `string \| number` | `16` | Taille icône | **Events :** `click(e: MouseEvent)` **Slots :** `default` (contenu du bouton, remplace `label`) ```vue ``` --- ## MalioButtonIcon Bouton icône seul (sans texte). | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `icon` | `string` | **requis** | Icône Iconify | | `ariaLabel` | `string` | **requis** | Label accessible | | `variant` | `'filled' \| 'ghost'` | `'filled'` | Variante visuelle | | `disabled` | `boolean` | `false` | Désactivé | | `buttonClass` | `string` | `''` | Classes CSS additionnelles | | `iconSize` | `string \| number` | `24` | Taille icône | **Events :** `click(e: MouseEvent)` ```vue ``` --- ## MalioTabList Navigation par onglets avec contenu dynamique. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `string` | `undefined` | Onglet actif (v-model) | | `tabs` | `{ key: string, label: string, icon?: string }[]` | **requis** | Liste des onglets | **Events :** `update:modelValue(value: string)` **Slots :** Un slot nommé par `tab.key` pour le contenu de chaque onglet ```vue Contenu infos Contenu docs ``` --- ## MalioSidebar Barre latérale de navigation rétractable. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `modelValue` | `boolean` | `undefined` | État ouvert/fermé (v-model) | | `sections` | `SidebarSection[]` | **requis** | Sections de navigation | | `sidebarClass` | `string` | `''` | Classes CSS sidebar | | `toggleClass` | `string` | `''` | Classes CSS bouton toggle | **Type SidebarSection :** `{ title?: string, items: { label: string, icon?: string, to?: string, href?: string, active?: boolean }[] }` **Events :** `update:modelValue(value: boolean)` **Slots :** `logo` (sidebar ouverte), `logo-collapsed` (sidebar fermée) ```vue ``` --- ## MalioDrawer Panneau latéral (drawer) qui s'ouvre depuis la droite avec backdrop semi-transparent. | Prop | Type | Défaut | Description | |------|------|--------|-------------| | `id` | `string` | auto | Identifiant HTML | | `modelValue` | `boolean` | `undefined` | État ouvert/fermé (v-model) | | `title` | `string` | `''` | Titre affiché dans le header | | `showClose` | `boolean` | `true` | Afficher le bouton de fermeture (croix) | | `drawerClass` | `string` | `''` | Classes CSS panneau (twMerge) | **Events :** `update:modelValue(value: boolean)` **Slots :** `default` (contenu du drawer) ```vue Contenu du drawer Fermeture uniquement via backdrop Drawer plus large ```
Contenu du drawer
Fermeture uniquement via backdrop
Drawer plus large