import { VCard, VCardText, VCardTitle, VRow, VCol, VIcon } from 'vuetify/components' import type { StoryObj } from '@storybook/vue3' import { useTheme } from 'vuetify' export default { title: 'Composants/Vue d\'ensemble', } export const Header: StoryObj = { render: () => { return { template: `

Composants

Découvrez notre collection de composants réutilisables conçus pour créer des interfaces utilisateur cohérentes et accessibles.

`, } }, tags: ['!dev'], } export const ComponentsList: StoryObj = { render: () => { return { components: { VCard, VCardText, VCardTitle, VRow, VCol, VIcon }, setup() { const theme = useTheme() const isAp = theme.global.name.value === 'ap' const components = [ { title: 'HeaderBar', description: 'Utilisé pour afficher l’en-tête d’une page ainsi qu’une barre de navigation.', link: '/?path=/docs/composants-structure-headerbar--docs', img: `/components/header-bar${isAp ? '-ap' : ''}.svg`, category: 'Structure', }, { title: 'HeaderToolbar', description: 'Utilisé pour afficher une barre d\'outils en haut de la page. Il est composé de deux zones customisables.', link: '/?path=/docs/composants-structure-headertoolbar--docs', img: '/components/header-toolbar.svg', category: 'Structure', }, { title: 'HeaderLoading', description: 'Utilisé pour afficher un élément de chargement avec des dimensions personnalisées.', link: '/?path=/docs/composants-structure-headerloading--docs', img: '/components/header-loading.svg', category: 'Structure', }, { title: 'SubHeader', description: 'Utilisé pour afficher un bloc d’informations sous l’en-tête principale.', link: '/?path=/docs/composants-structure-subheader--docs', img: '/components/sub-header.svg', category: 'Structure', }, { title: 'SkeletonLoader', description: 'Utilisé pour améliorer l’expérience utilisateur pendant le chargement des données, affiche une structure visuelle temporaire qui ressemble au contenu final.', link: '/?path=/docs/composants-composants-vuetify-vskeletonloader--docs', img: '/components/v-skeleton-loader.svg', category: 'Structure', }, { title: 'FooterBar', description: 'Utilisé pour afficher une barre de pied de page avec des liens et des informations supplémentaires.', link: '/?path=/docs/composants-structure-footerbar--docs', img: `/components/footer-bar${isAp ? '-ap' : ''}.svg`, category: 'Structure', }, { title: 'PageContainer', description: 'Conteneur transparent utilisé pour afficher une page.', link: '/?path=/docs/composants-layout-pagecontainer--docs', img: '/components/page-container.svg', category: 'Layout', }, { title: 'Card', description: 'Conteneur transparent utilisé pour afficher une page.', link: '/?path=/docs/composants-composants-vuetify-vcard--docs', img: `/components/card${isAp ? '-ap' : ''}.svg`, category: 'Layout', }, { title: 'SyTabs', description: 'Permet de masquer du contenu derrière un élément sélectionnable.', link: '/?path=/docs/composants-navigation-sytabs--docs', img: `/components/sy-tabs${isAp ? '-ap' : ''}.svg`, category: 'Navigation', }, { title: 'ContextualMenu', description: 'Utilisé pour afficher un menu avec une liste d’ancres pour la navigation.', link: '/?path=/docs/composants-navigation-contextualmenu--docs', img: '/components/contextual-menu.svg', category: 'Navigation', }, { title: 'Breadcrumbs', description: 'Utilisé comme un outil d’aide à la navigation et comme une structure hiérarchique pour les pages.', link: '/?path=/docs/composants-composants-vuetify-vbreadcrumbs--docs', img: '/components/breadcrumbs.svg', category: 'Navigation', }, { title: 'ExternalLinks', description: 'Utilisé pour afficher un menu avec une liste vers des liens externes.', link: '/?path=/docs/composants-navigation-externallinks--docs', img: '/components/external-links.svg', category: 'Navigation', }, { title: 'SocialMediaLinks', description: 'Utilisé pour afficher des liens de réseaux sociaux dans le composant Footer.', link: '/?path=/docs/composants-navigation-socialmedialinks--docs', img: '/components/social-media-links.svg', category: 'Navigation', }, { title: 'SkipLink', description: 'Utilisé pour permettre à l\'utilisateur utilisant la navigation au clavier de passer directement à une section de contenu.', link: '/?path=/docs/composants-navigation-skiplink--docs', img: `/components/skip-link${isAp ? '-ap' : ''}.svg`, category: 'Navigation', }, { title: 'SyPagination', description: 'Utilisé pour permettre la navigation entre plusieurs pages de contenu.', link: '/?path=/docs/composants-navigation-sypagination--docs', img: `/components/pagination${isAp ? '-ap' : ''}.svg`, category: 'Navigation', }, { title: 'BackBtn', description: 'Utilisé pour permettre à l’utilisateur de revenir à la page précédente.', link: '/?path=/docs/composants-boutons-backbtn--docs', img: '/components/back-btn.svg', category: 'Boutons', }, { title: 'SyIconBtn', description: 'Utilisé lorsque on a besoin d’un bouton qui sert principalement à afficher une icône.', link: '/?path=/docs/composants-boutons-syiconbutton--docs', img: `/components/sy-icon-button${isAp ? '-ap' : ''}.svg`, category: 'Boutons', }, { title: 'BackToTopBtn', description: 'Utilisé pour afficher un bouton permettant à l’utilisateur de remonter en haut de la page.', link: '/?path=/docs/composants-boutons-backtotopbtn--docs', img: `/components/back-to-top-btn${isAp ? '-ap' : ''}.svg`, category: 'Boutons', }, { title: 'CopyBtn', description: 'Utilisé pour afficher un bouton permettant à l’utilisateur de copier du texte.', link: '/?path=/docs/composants-boutons-copybtn--docs', img: `/components/copy-btn${isAp ? '-ap' : ''}.svg`, category: 'Boutons', }, { title: 'Tooltip', description: 'Utilisé pour transmettre des informations lorsqu’un utilisateur survole un élément.', link: '/?path=/docs/composants-composants-vuetify-vtooltip--docs', img: `/components/tooltip${isAp ? '-ap' : ''}.svg`, category: 'Feedback', }, { title: 'LangBtn', description: 'Utilisé pour permettre à l’utilisateur de choisir la langue de l’application.', link: '/?path=/docs/composants-boutons-langbtn--docs', img: '/components/lang-btn.svg', category: 'Boutons', }, { title: 'DownloadBtn', description: 'Utilisé pour permettre à l’utilisateur de télécharger un document provenant d’une API.', link: '/?path=/docs/composants-boutons-downloadbtn--docs', img: `/components/download-btn${isAp ? '-ap' : ''}.svg`, category: 'Boutons', }, { title: 'FranceConnectBtn', description: 'Utilisé pour afficher un bouton de connexion à FranceConnect.', link: '/?path=/docs/composants-boutons-franceconnectbtn--docs', img: '/components/france-connect-btn.svg', category: 'Boutons', }, { title: 'UserMenuBtn', description: 'Utilisé pour afficher un bouton de menu utilisateur avec un menu déroulant.', link: '/?path=/docs/composants-boutons-usermenubtn--docs', img: '/components/user-menu-btn.svg', category: 'Boutons', }, { title: 'SyTextField', description: 'Utilisé pour proposer une alternative au TextField de Vuetify, conforme au style du Design System et qui respecte les règles d\'accessibilité RGAA.', link: '/?path=/docs/composants-formulaires-sytextfield--docs', img: '/components/sy-text-field.svg', category: 'Formulaires', }, { title: 'SyAutocomplete', description: 'Utilisé pour permettre à l’utilisateur de rechercher et sélectionner une valeur dans une liste d\'options (alternative au v-autocomplete de Vuetify).', link: '/?path=/docs/composants-formulaires-selects-syautocomplete--docs', img: `/components/sy-select${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'Switch', description: 'Utilisé pour permettre à l’utilisateur de choisir entre deux valeurs distinctes. Il est très similaire à un bouton bascule (toggle) ou à un interrupteur marche/arrêt.', link: '/?path=/docs/composants-composants-vuetify-vswitch--docs', img: `/components/switch${isAp ? '-ap' : ''}.svg`, category: 'Boutons', }, { title: 'SySelect', description: 'Utilisé pour proposer une alternative au v-select de Vuetify qui ne respecte pas les règles d\'accessibilité RGAA. Il est basé sur un v-textfield.', link: '/?path=/docs/composants-formulaires-syselect--docs', img: `/components/sy-select${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'SyInputSelect', description: 'Utilisé pour proposer une alternative au v-select de Vuetify qui ne respecte pas les règles RGAA.Il est basé sur un v-input.', link: '/?path=/docs/composants-formulaires-syinputselect--docs', img: '/components/sy-input-select.svg', category: 'Formulaires', }, { title: 'SyBtnMenu', description: 'Utilisé pour proposer une sélection d\'options avec un bouton personnalisé, conforme au style du Design System et qui respecte les règles d\'accessibilité RGAA. Il est basé sur un v-btn.', link: '/?path=/docs/composants-formulaires-sybtnMenu--docs', img: '/components/sy-btn-select.svg', category: 'Formulaires', }, { title: 'OTPInput', description: 'Utilisé pour une procédure MFA d’authentification des utilisateurs via un mot de passe à usage unique.', link: '/?path=/docs/composants-composants-vuetify-votpinput--docs', img: `/components/otp${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'DatePicker', description: 'Utilisé pour permettre à l’utilisateur de sélectionner ou de saisir une date.', link: '/?path=/docs/composants-formulaires-datepicker--docs', img: '/components/date-picker.svg', category: 'Formulaires', }, { title: 'FileUpload', description: 'Utilisé pour permettre à l’utilisateur de sélectionner ou de glisser-déposer des fichiers.', link: '/?path=/docs/composants-formulaires-fileupload--docs', img: '/components/file-upload.svg', category: 'Formulaires', }, { title: 'NirField', description: 'Utilisé pour permettre à l’utilisateur de saisir un numéro de Sécurité sociale (NIR).', link: '/?path=/docs/composants-formulaires-nirfield--docs', img: '/components/nir-field.svg', category: 'Formulaires', }, { title: 'PasswordField', description: 'Utilisé pour afficher un champ de saisie de mot de passe et gérer sa validation.', link: '/?path=/docs/composants-formulaires-passwordfield--docs', img: '/components/password-field.svg', category: 'Formulaires', }, { title: 'PeriodField', description: 'Utilisé pour permettre à l’utilisateur de saisir une période.', link: '/?path=/docs/composants-formulaires-periodfield--docs', img: '/components/period-field.svg', category: 'Formulaires', }, { title: 'PhoneField', description: 'Utilisé pour saisir des numéros de téléphone avec différentes options de formatage.', link: '/?path=/docs/composants-formulaires-phonefield--docs', img: '/components/phone-field.svg', category: 'Formulaires', }, { title: 'RangeField', description: 'Utilisé pour permettre à l\'utilisateur de sélectionner un interval.', link: '/?path=/docs/composants-formulaires-rangefield--docs', img: '/components/range-field.svg', category: 'Formulaires', }, { title: 'SearchListField', description: 'Utilisé pour permettre à l’utilisateur de sélectionner des valeurs dans une liste.', link: '/?path=/docs/composants-formulaires-searchlistfield--docs', img: '/components/search-list-field.svg', category: 'Formulaires', }, { title: 'SelectBtnField', description: 'Utilisé pour permettre à l’utilisateur de sélectionner une valeur dans une liste.', link: '/?path=/docs/composants-formulaires-selectbtnfield--docs', img: `/components/select-btn-field${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'SyCheckBox', description: 'Utilisé pour permettre à l’utilisateur de selectionner une option.', link: '/?path=/docs/composants-formulaires-sycheckbox--docs', img: `/components/sy-checkbox${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'SyCheckBoxGroup', description: 'Utilisé pour permettre à l’utilisateur de selectionner plusieurs options.', link: '/?path=/docs/composants-formulaires-sycheckboxgroup--docs', img: `/components/sy-checkbox-group${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'SyRadioGroup', description: 'Utilisé pour permettre à l\'utilisateur de choisir une option parmi plusieurs.', link: '/?path=/docs/composants-formulaires-syradiogroup--docs', img: `/components/sy-radiogroup${isAp ? '-ap' : ''}.svg`, category: 'Formulaires', }, { title: 'PaginatedTable', description: 'Utilisé pour afficher une VDataTable de Vuetify avec une pagination persistante.', link: '/?path=/docs/composants-tableaux-paginatedtable--docs', img: '/components/paginated-table.svg', category: 'Tableaux', }, { title: 'TableToolbar', description: 'Utilisé pour afficher une barre d\'outils pour les tableaux.', link: '/?path=/docs/composants-tableaux-tabletoolbar--docs', img: `/components/table-toolbar${isAp ? '-ap' : ''}.svg`, category: 'Tableaux', }, { title: 'Logo', description: 'Utilisé pour afficher le logo de l\'application avec différentes options de personnalisation.', link: '/?path=/docs/composants-donn%C3%A9es-logo--docs', img: '/components/logo.svg', category: 'Données', }, { title: 'LogoBrandSection', description: 'Permet d\'afficher le logo de l\'Assurance Maladie avec des logos ou un titre secondaire.', link: '/?path=/docs/composants-donn%C3%A9es-logobrandsection--docs', img: '/components/logo-brand-section.svg', category: 'Données', }, { title: 'CollapsibleList', description: 'Utilisé pour afficher des listes de liens. Les éléments peuvent être dépliés ou repliés.', link: '/?path=/docs/composants-donn%C3%A9es-collapsiblelist--docs', img: '/components/collapsible-list.svg', category: 'Données', }, { title: 'ChipList', description: 'Utilisé pour afficher une liste de puces.', link: '/?path=/docs/composants-donn%C3%A9es-chiplist--docs', img: `/components/chip-list${isAp ? '-ap' : ''}.svg`, category: 'Données', }, { title: 'DataList', description: 'Utilisé pour afficher une liste d’informations.', link: '/?path=/docs/composants-donn%C3%A9es-datalist--docs', img: '/components/data-list.svg', category: 'Données', }, { title: 'Accordion', description: 'Utilisé pour optimiser l’espace vertical lors de l’affichage d’une grande quantité d’informations.', link: '/?path=/docs/composants-donn%C3%A9es-accordion--docs', img: `/components/accordion${isAp ? '-ap' : ''}.svg`, category: 'Données', }, { title: 'DataListGroup', description: 'Utilisé pour afficher une liste de DataList.', link: '/?path=/docs/composants-donn%C3%A9es-datalistgroup--docs', img: '/components/data-list-group.svg', category: 'Données', }, { title: 'FilePreview', description: 'Utilisé pour afficher l\'aperçu d\'un fichier.', link: '/?path=/docs/composants-donn%C3%A9es-filepreview--docs', img: '/components/file-preview.svg', category: 'Données', }, { title: 'FileList', description: 'Utilisé pour afficher une liste de document à téléverser.', link: '/?path=/docs/composants-donn%C3%A9es-filelist--docs', img: '/components/file-list.svg', category: 'Données', }, { title: 'SyAlert', description: 'Utilisé pour afficher une alerte à l’utilisateur.', link: '/?path=/docs/composants-feedback-syalert--docs', img: '/components/sy-alert.svg', category: 'Feedback', }, { title: 'DialogBox', description: 'Utilisé pour afficher une boîte de dialogue avec des boutons d\'action.', link: '/?path=/docs/composants-feedback-dialogbox--docs', img: `/components/dialog-box${isAp ? '-ap' : ''}.svg`, category: 'Feedback', }, { title: 'NotificationBar', description: 'Utilisé pour afficher des notifications à l’utilisateur.', link: '/?path=/docs/composants-feedback-notificationbar--docs', img: `/components/notification-bar${isAp ? '-ap' : ''}.svg`, category: 'Feedback', }, { title: 'CookieBanner', description: 'Utilisé pour afficher une bannière de consentement pour les cookies.', link: '/?path=/docs/composants-feedback-cookiebanner--docs', img: '/components/cookie-banner.svg', category: 'Feedback', }, { title: 'RatingPicker', description: 'Permet de recueillir l’avis d’un utilisateur.', link: '/?path=/docs/composants-feedback-ratingpicker--docs', img: '/components/rating-picker.svg', category: 'Feedback', }, { title: 'FilterSideBar', description: 'Permet de filtrer rapidement les contenus selon plusieurs critères.', link: '/?path=/docs/composants-filtres-filterssidebar--docs', img: `/components/filter-side-bar${isAp ? '-ap' : ''}.svg`, category: 'Filtres', }, ] const categoryOrder = [ 'Structure', 'Layout', 'Navigation', 'Boutons', 'Formulaires', 'Tableaux', 'Données', 'Feedback', 'Filtres', ] const apComponents = [ 'FooterBar', 'HeaderBar', 'HeaderLoading', 'Breadcrumbs', 'PageContainer', 'CopyBtn', 'DownloadBtn', 'SyPagination', 'SkipLink', 'SyCheckBox', 'SyCheckBoxGroup', 'SyAutocomplete', 'SySelect', 'SyRadioGroup', 'SyIconBtn', 'NirField', 'Card', 'FilterSideBar', 'SyTextField', 'Switch', 'Tooltip', 'SkeletonLoader', 'OTPInput', 'DialogBox', 'NotificationBar', 'Accordion', 'ChipList', 'SyTabs', 'SelectBtnField', 'BackToTopBtn', 'TableToolbar', 'PhoneField', ] const shouldDisplayComponent = (component: { category: string, title: string }, category: string) => { if (isAp) { return ( component.category === category && apComponents.some(apComponent => component.title.includes(apComponent)) ) } return component.category === category } const groupedComponents = categoryOrder.map(category => ({ category, components: components .filter(component => shouldDisplayComponent(component, category)) .sort((a, b) => a.title.localeCompare(b.title)), })).filter(group => group.components.length > 0) return { groupedComponents, } }, template: `

{{ group.category }}

{{ component.title }} {{ component.description }}
`, } }, tags: ['!dev'], }