@cnamts/synapse 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/DateFilter-YWOTbfeL.js +98 -0
- package/dist/NumberFilter-DMmMgALM.js +121 -0
- package/dist/PeriodFilter-Bok5BHcn.js +112 -0
- package/dist/SelectFilter-BKud2WhN.js +136 -0
- package/dist/TextFilter-DvMf2thH.js +114 -0
- package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
- package/dist/components/Accordion/Accordion.d.ts +2 -1
- package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
- package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
- package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
- package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
- package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
- package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
- package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
- package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4295 -0
- package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +158 -104
- package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +35 -27
- package/dist/components/DatePicker/composables/index.d.ts +17 -0
- package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
- package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
- package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
- package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
- package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
- package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
- package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
- package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
- package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +19 -0
- package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +31 -0
- package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
- package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +12 -0
- package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
- package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
- package/dist/components/DatePicker/constants/messages.d.ts +29 -0
- package/dist/components/DatePicker/types.d.ts +13 -0
- package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
- package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
- package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
- package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NirField/NirField.d.ts +7 -3
- package/dist/components/NirField/nirValidation.d.ts +1 -1
- package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PasswordField/PasswordField.d.ts +2 -0
- package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PeriodField/PeriodField.d.ts +219 -41
- package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PhoneField/PhoneField.d.ts +2 -2
- package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/RangeField/RangeField.d.ts +2 -0
- package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SearchListField/SearchListField.d.ts +9 -0
- package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SyTextArea/SyTextArea.d.ts +2 -0
- package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +652 -0
- package/dist/components/Tables/SyTable/SyTable.d.ts +671 -0
- package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
- package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
- package/dist/components/Tables/common/TableHeader.d.ts +15 -0
- package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
- package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
- package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
- package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
- package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
- package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
- package/dist/components/Tables/common/filters/locales.d.ts +4 -0
- package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
- package/dist/components/Tables/common/formatters.d.ts +17 -0
- package/dist/components/Tables/common/locales.d.ts +28 -0
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
- package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
- package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
- package/dist/components/Tables/common/tableFilterUtils.d.ts +3 -0
- package/dist/components/Tables/common/tableStorageUtils.d.ts +69 -0
- package/dist/components/Tables/common/tableUtils.d.ts +79 -0
- package/dist/components/Tables/common/types.d.ts +91 -0
- package/dist/components/Tables/common/usePagination.d.ts +22 -0
- package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
- package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
- package/dist/components/Tables/common/useTableItems.d.ts +24 -0
- package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
- package/dist/components/Tables/index.d.ts +2 -0
- package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
- package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
- package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
- package/dist/components/index.d.ts +9 -5
- package/dist/design-system-v3.js +102 -11944
- package/dist/design-system-v3.umd.cjs +22 -4
- package/dist/designTokens/index.d.ts +3 -1
- package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
- package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
- package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
- package/dist/designTokens/utils/index.d.ts +2 -1
- package/dist/main-Cx8qG7YR.js +16344 -0
- package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
- package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
- package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
- package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
- package/dist/style.css +1 -1
- package/dist/utils/rules/isRequired/index.d.ts +1 -1
- package/dist/vite-env.d.ts +12 -0
- package/package.json +3 -3
- package/src/assets/_spacers.scss +37 -1
- package/src/assets/_typography.scss +158 -0
- package/src/assets/settings.scss +7 -0
- package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
- package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
- package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
- package/src/components/Accordion/Accordion.vue +48 -76
- package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
- package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
- package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
- package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
- package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
- package/src/components/Accordion/composables/useAccordionState.ts +59 -0
- package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
- package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
- package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
- package/src/components/ChipList/AccessibiliteItems.ts +1 -1
- package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
- package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
- package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
- package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
- package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
- package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
- package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
- package/src/components/Customs/SySelect/SySelect.vue +292 -39
- package/src/components/Customs/SySelect/tests/SySelect.spec.ts +234 -2
- package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
- package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
- package/src/components/DataList/AccessibiliteItems.ts +1 -1
- package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
- package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1307 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +769 -204
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +943 -0
- package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
- package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +356 -519
- package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +435 -89
- package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
- package/src/components/DatePicker/{tests → DatePicker/tests}/DatePicker.spec.ts +0 -14
- package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
- package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
- package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +320 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
- package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +10 -7
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +1111 -0
- package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +782 -0
- package/src/components/DatePicker/composables/index.ts +24 -0
- package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
- package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
- package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
- package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
- package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
- package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
- package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
- package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
- package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
- package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +456 -0
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
- package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +125 -0
- package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
- package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
- package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
- package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
- package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
- package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
- package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
- package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
- package/src/components/DatePicker/composables/useDateRangeInput.ts +378 -0
- package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
- package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
- package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +70 -0
- package/src/components/DatePicker/composables/useIconState.ts +53 -0
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +165 -0
- package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
- package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +187 -0
- package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
- package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
- package/src/components/DatePicker/constants/messages.ts +50 -0
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
- package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
- package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
- package/src/components/DatePicker/types.ts +15 -0
- package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
- package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
- package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
- package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
- package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
- package/src/components/ErrorPage/ErrorPage.vue +12 -6
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
- package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
- package/src/components/FileList/AccessibiliteItems.ts +1 -1
- package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
- package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
- package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
- package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
- package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
- package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
- package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
- package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
- package/src/components/FooterBar/FooterBar.vue +2 -1
- package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
- package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
- package/src/components/Logo/Accessibilite.stories.ts +4 -0
- package/src/components/Logo/AccessibiliteItems.ts +1 -1
- package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
- package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
- package/src/components/NirField/AccessibiliteItems.ts +1 -1
- package/src/components/NirField/NirField.mdx +22 -9
- package/src/components/NirField/NirField.stories.ts +26 -2
- package/src/components/NirField/NirField.vue +209 -22
- package/src/components/NirField/nirValidation.ts +17 -3
- package/src/components/NirField/tests/NirField.spec.ts +2 -2
- package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
- package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
- package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
- package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
- package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
- package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
- package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
- package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
- package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
- package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
- package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
- package/src/components/PasswordField/PasswordField.stories.ts +4 -0
- package/src/components/PasswordField/PasswordField.vue +3 -0
- package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
- package/src/components/PeriodField/PeriodField.vue +15 -1
- package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
- package/src/components/PhoneField/PhoneField.stories.ts +15 -15
- package/src/components/PhoneField/PhoneField.vue +1 -1
- package/src/components/RangeField/AccessibiliteItems.ts +1 -1
- package/src/components/RangeField/RangeField.stories.ts +9 -0
- package/src/components/RangeField/RangeField.vue +4 -0
- package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
- package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
- package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
- package/src/components/SearchListField/SearchListField.vue +5 -0
- package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
- package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
- package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
- package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
- package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
- package/src/components/SyTextArea/SyTextArea.vue +3 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
- package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
- package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
- package/src/components/Tables/SyServerTable/FilterRules.stories.ts +700 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +170 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +4354 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +391 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +702 -0
- package/src/components/Tables/SyTable/FilterRules.stories.ts +418 -0
- package/src/components/Tables/SyTable/SyTable.mdx +139 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +2754 -0
- package/src/components/Tables/SyTable/SyTable.vue +397 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +707 -0
- package/src/components/Tables/common/SyTableFilter.vue +289 -0
- package/src/components/Tables/common/SyTablePagination.vue +375 -0
- package/src/components/Tables/common/TableHeader.vue +205 -0
- package/src/components/Tables/common/constants/StateEnum.ts +6 -0
- package/src/components/Tables/common/filters/DateFilter.vue +140 -0
- package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
- package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
- package/src/components/Tables/common/filters/SelectFilter.vue +235 -0
- package/src/components/Tables/common/filters/TextFilter.vue +191 -0
- package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
- package/src/components/Tables/common/filters/locales.ts +4 -0
- package/src/components/Tables/common/filters/logics/date.ts +12 -0
- package/src/components/Tables/common/filters/logics/number.ts +48 -0
- package/src/components/Tables/common/filters/logics/period.ts +25 -0
- package/src/components/Tables/common/filters/logics/select.ts +27 -0
- package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
- package/src/components/Tables/common/filters/logics/text.ts +62 -0
- package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
- package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
- package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
- package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
- package/src/components/Tables/common/formatters.ts +72 -0
- package/src/components/Tables/common/locales.ts +31 -0
- package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
- package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
- package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
- package/src/components/Tables/common/tableFilterUtils.ts +75 -0
- package/src/components/Tables/common/tableStorageUtils.ts +127 -0
- package/src/components/Tables/common/tableStyles.scss +80 -0
- package/src/components/Tables/common/tableUtils.ts +102 -0
- package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
- package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
- package/src/components/Tables/common/tests/resize.spec.ts +161 -0
- package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +92 -0
- package/src/components/Tables/common/tests/tableUtils.spec.ts +228 -0
- package/src/components/Tables/common/types.ts +92 -0
- package/src/components/Tables/common/usePagination.ts +83 -0
- package/src/components/Tables/common/useTableCheckbox.ts +58 -0
- package/src/components/Tables/common/useTableFilter.ts +19 -0
- package/src/components/Tables/common/useTableHeaders.ts +88 -0
- package/src/components/Tables/common/useTableItems.ts +87 -0
- package/src/components/Tables/common/useTableOptions.ts +93 -0
- package/src/components/Tables/index.ts +3 -0
- package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
- package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
- package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
- package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
- package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
- package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
- package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
- package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
- package/src/components/index.ts +9 -5
- package/src/composables/date/useDateFormatDayjs.ts +8 -3
- package/src/composables/date/useDateInitializationDayjs.ts +28 -36
- package/src/composables/rules/useFieldValidation.ts +1 -2
- package/src/designTokens/index.ts +4 -0
- package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
- package/src/designTokens/tokens/pa/paFonts.ts +140 -0
- package/src/designTokens/utils/createFontVariables.ts +143 -0
- package/src/designTokens/utils/index.ts +2 -1
- package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
- package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
- package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
- package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
- package/src/stories/Accessibilite/Introduction.mdx +258 -18
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
- package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
- package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
- package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
- package/src/stories/Demarrer/Accueil.stories.ts +32 -8
- package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
- package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
- package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
- package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
- package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
- package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
- package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
- package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
- package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
- package/src/stories/GuideDuDev/Theme.mdx +41 -0
- package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
- package/src/utils/rules/isRequired/index.ts +2 -1
- package/src/vite-env.d.ts +12 -0
- package/src/vuetifyConfig.ts +10 -3
- package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DatePicker/DatePicker.mdx +0 -222
- package/src/components/DatePicker/DateTextInput.vue +0 -504
- package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
- package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/stories/DesignTokens/ThemePA.mdx +0 -35
- /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { onMounted, onBeforeUnmount } from 'vue'
|
|
2
|
+
|
|
3
|
+
export interface AccordionGroupCommunication {
|
|
4
|
+
emitFocusChange: (itemId: string | null) => void
|
|
5
|
+
handleFocusChange: (event: CustomEvent) => void
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export default function useAccordionGroupCommunication(
|
|
9
|
+
instanceId: string,
|
|
10
|
+
groupId: string,
|
|
11
|
+
onFocusChange: (itemId: string | null) => void,
|
|
12
|
+
): AccordionGroupCommunication {
|
|
13
|
+
const ACCORDION_FOCUS_EVENT = 'accordion-focus-changed'
|
|
14
|
+
|
|
15
|
+
const handleFocusChange = (event: CustomEvent) => {
|
|
16
|
+
const { sourceInstanceId, groupId: eventGroupId } = event.detail
|
|
17
|
+
|
|
18
|
+
// Ignore les événements provenant de cette instance
|
|
19
|
+
if (sourceInstanceId === instanceId) return
|
|
20
|
+
|
|
21
|
+
// Ignore les événements d'autres groupes
|
|
22
|
+
if (eventGroupId !== groupId) return
|
|
23
|
+
|
|
24
|
+
// Réinitialise le focus dans cette instance
|
|
25
|
+
onFocusChange(null)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const emitFocusChange = (itemId: string | null) => {
|
|
29
|
+
const event = new CustomEvent(ACCORDION_FOCUS_EVENT, {
|
|
30
|
+
bubbles: true,
|
|
31
|
+
detail: {
|
|
32
|
+
sourceInstanceId: instanceId,
|
|
33
|
+
groupId,
|
|
34
|
+
itemId,
|
|
35
|
+
},
|
|
36
|
+
})
|
|
37
|
+
window.dispatchEvent(event)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
onMounted(() => {
|
|
41
|
+
window.addEventListener(ACCORDION_FOCUS_EVENT, handleFocusChange as unknown as EventListener)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
onBeforeUnmount(() => {
|
|
45
|
+
window.removeEventListener(ACCORDION_FOCUS_EVENT, handleFocusChange as unknown as EventListener)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
emitFocusChange,
|
|
50
|
+
handleFocusChange,
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
export interface AccordionItem {
|
|
4
|
+
id: string
|
|
5
|
+
title: string
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- mock Axios headers
|
|
7
|
+
content: any
|
|
8
|
+
headingLevel?: number
|
|
9
|
+
disabled?: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface AccordionKeyboardNavigation {
|
|
13
|
+
handleKeyNavigation: (event: KeyboardEvent, itemId: string, index: number) => void
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function useAccordionKeyboardNavigation(
|
|
17
|
+
items: Ref<AccordionItem[]> | AccordionItem[],
|
|
18
|
+
setFocus: (itemId: string | null) => void,
|
|
19
|
+
): AccordionKeyboardNavigation {
|
|
20
|
+
// Gestion de la navigation clavier entre les éléments d'accordéon
|
|
21
|
+
const handleKeyNavigation = (event: KeyboardEvent, itemId: string, index: number) => {
|
|
22
|
+
if (event.key === 'ArrowDown') {
|
|
23
|
+
event.preventDefault()
|
|
24
|
+
focusNextHeader(index)
|
|
25
|
+
}
|
|
26
|
+
else if (event.key === 'ArrowUp') {
|
|
27
|
+
event.preventDefault()
|
|
28
|
+
focusPreviousHeader(index)
|
|
29
|
+
}
|
|
30
|
+
else if (event.key === 'Home') {
|
|
31
|
+
event.preventDefault()
|
|
32
|
+
focusFirstHeader()
|
|
33
|
+
}
|
|
34
|
+
else if (event.key === 'End') {
|
|
35
|
+
event.preventDefault()
|
|
36
|
+
focusLastHeader()
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const getItemsArray = (): AccordionItem[] => {
|
|
41
|
+
return 'value' in items ? items.value : items
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const focusNextHeader = (currentIndex: number) => {
|
|
45
|
+
const itemsArray = getItemsArray()
|
|
46
|
+
let nextIndex = (currentIndex + 1) % itemsArray.length
|
|
47
|
+
|
|
48
|
+
// Si le prochain élément est désactivé, on continue à chercher
|
|
49
|
+
let attempts = 0
|
|
50
|
+
while (itemsArray[nextIndex].disabled && attempts < itemsArray.length) {
|
|
51
|
+
nextIndex = (nextIndex + 1) % itemsArray.length
|
|
52
|
+
attempts++
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
focusHeaderByIndex(nextIndex)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const focusPreviousHeader = (currentIndex: number) => {
|
|
59
|
+
const itemsArray = getItemsArray()
|
|
60
|
+
let prevIndex = (currentIndex - 1 + itemsArray.length) % itemsArray.length
|
|
61
|
+
|
|
62
|
+
// Si l'élément précédent est désactivé, on continue à chercher
|
|
63
|
+
let attempts = 0
|
|
64
|
+
while (itemsArray[prevIndex].disabled && attempts < itemsArray.length) {
|
|
65
|
+
prevIndex = (prevIndex - 1 + itemsArray.length) % itemsArray.length
|
|
66
|
+
attempts++
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
focusHeaderByIndex(prevIndex)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const focusFirstHeader = () => {
|
|
73
|
+
const itemsArray = getItemsArray()
|
|
74
|
+
let index = 0
|
|
75
|
+
|
|
76
|
+
// Si le premier élément est désactivé, on cherche le prochain disponible
|
|
77
|
+
while (index < itemsArray.length && itemsArray[index].disabled) {
|
|
78
|
+
index++
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (index < itemsArray.length) {
|
|
82
|
+
focusHeaderByIndex(index)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const focusLastHeader = () => {
|
|
87
|
+
const itemsArray = getItemsArray()
|
|
88
|
+
let index = itemsArray.length - 1
|
|
89
|
+
|
|
90
|
+
// Si le dernier élément est désactivé, on cherche le précédent disponible
|
|
91
|
+
while (index >= 0 && itemsArray[index].disabled) {
|
|
92
|
+
index--
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (index >= 0) {
|
|
96
|
+
focusHeaderByIndex(index)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const focusHeaderByIndex = (index: number) => {
|
|
101
|
+
const itemsArray = getItemsArray()
|
|
102
|
+
const itemId = itemsArray[index].id
|
|
103
|
+
const headerElement = document.getElementById(`accordion-button-${itemId}`)
|
|
104
|
+
headerElement?.focus()
|
|
105
|
+
setFocus(itemId)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
handleKeyNavigation,
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
export interface AccordionState {
|
|
4
|
+
openItems: { value: string[] }
|
|
5
|
+
focusedItemId: { value: string | null }
|
|
6
|
+
toggleItem: (itemId: string) => void
|
|
7
|
+
isItemOpen: (itemId: string) => boolean
|
|
8
|
+
isItemFocused: (itemId: string) => boolean
|
|
9
|
+
setFocus: (itemId: string | null) => void
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default function useAccordionState(): AccordionState {
|
|
13
|
+
const openItems = ref<string[]>([])
|
|
14
|
+
const focusedItemId = ref<string | null>(null)
|
|
15
|
+
|
|
16
|
+
const toggleItem = (itemId: string) => {
|
|
17
|
+
// Si cet élément est déjà focalisé, on le garde en mémoire
|
|
18
|
+
const wasFocused = focusedItemId.value === itemId
|
|
19
|
+
|
|
20
|
+
const index = openItems.value.indexOf(itemId)
|
|
21
|
+
if (index === -1) {
|
|
22
|
+
openItems.value.push(itemId)
|
|
23
|
+
setFocus(itemId)
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
openItems.value.splice(index, 1)
|
|
27
|
+
if (!wasFocused) {
|
|
28
|
+
setFocus(itemId)
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
setFocus(null)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const isItemOpen = (itemId: string) => {
|
|
37
|
+
return openItems.value.includes(itemId)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const isItemFocused = (itemId: string) => {
|
|
41
|
+
return focusedItemId.value === itemId
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Méthode pour définir explicitement le focus sur un élément
|
|
45
|
+
const setFocus = (itemId: string | null) => {
|
|
46
|
+
if (focusedItemId.value === itemId) return
|
|
47
|
+
|
|
48
|
+
focusedItemId.value = itemId
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
openItems,
|
|
53
|
+
focusedItemId,
|
|
54
|
+
toggleItem,
|
|
55
|
+
isItemOpen,
|
|
56
|
+
isItemFocused,
|
|
57
|
+
setFocus,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -11,6 +11,7 @@ exports[`Accordion > renders correctly 1`] = `
|
|
|
11
11
|
">
|
|
12
12
|
<div
|
|
13
13
|
aria-controls="accordion-content-item1"
|
|
14
|
+
aria-disabled="false"
|
|
14
15
|
aria-expanded="false"
|
|
15
16
|
class="sy-accordion-button"
|
|
16
17
|
id="accordion-button-item1"
|
|
@@ -58,6 +59,7 @@ exports[`Accordion > renders correctly 1`] = `
|
|
|
58
59
|
">
|
|
59
60
|
<div
|
|
60
61
|
aria-controls="accordion-content-item2"
|
|
62
|
+
aria-disabled="false"
|
|
61
63
|
aria-expanded="false"
|
|
62
64
|
class="sy-accordion-button"
|
|
63
65
|
id="accordion-button-item2"
|
|
@@ -105,6 +107,7 @@ exports[`Accordion > renders correctly 1`] = `
|
|
|
105
107
|
">
|
|
106
108
|
<div
|
|
107
109
|
aria-controls="accordion-content-item3"
|
|
110
|
+
aria-disabled="false"
|
|
108
111
|
aria-expanded="false"
|
|
109
112
|
class="sy-accordion-button"
|
|
110
113
|
id="accordion-button-item3"
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories } from '@storybook/blocks';
|
|
2
|
+
import * as SyCheckboxStories from './SyCheckbox.stories';
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
4
|
+
|
|
5
|
+
<Meta of={SyCheckboxStories} />
|
|
6
|
+
|
|
7
|
+
<div className="accessibility-guide">
|
|
8
|
+
<Title>Guide d'Accessibilité du Composant SyCheckbox</Title>
|
|
9
|
+
|
|
10
|
+
<div className="intro-section">
|
|
11
|
+
<img
|
|
12
|
+
src={AccessibilityIcon}
|
|
13
|
+
alt="Icône d'accessibilité"
|
|
14
|
+
className="accessibility-icon"
|
|
15
|
+
/>
|
|
16
|
+
<p className="intro-text">
|
|
17
|
+
Le composant SyCheckbox a été conçu en suivant rigoureusement les recommandations d'accessibilité du W3C,
|
|
18
|
+
notamment le modèle <a href="https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/examples/checkbox-mixed/" target="_blank" rel="noopener noreferrer">WAI-ARIA pour les cases à cocher tri-état</a>.
|
|
19
|
+
Ce guide détaille comment notre implémentation respecte ces standards et garantit une expérience utilisateur inclusive.
|
|
20
|
+
</p>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div className="criteria-section">
|
|
24
|
+
<h2>Critères d'accessibilité respectés</h2>
|
|
25
|
+
|
|
26
|
+
<div className="criteria-card">
|
|
27
|
+
<div className="criteria-header">
|
|
28
|
+
<span className="criteria-icon">🔍</span>
|
|
29
|
+
<h3>Structure sémantique</h3>
|
|
30
|
+
</div>
|
|
31
|
+
<ul>
|
|
32
|
+
<li><strong>Rôles ARIA appropriés</strong> : <code>role="checkbox"</code> pour la case à cocher</li>
|
|
33
|
+
<li><strong>État de la case à cocher</strong> : <code>aria-checked</code> avec les valeurs <code>true</code>, <code>false</code> ou <code>mixed</code> pour l'état indéterminé</li>
|
|
34
|
+
<li><strong>Relations entre éléments</strong> : <code>aria-controls</code> pour indiquer les éléments contrôlés par la case à cocher parent</li>
|
|
35
|
+
<li><strong>Étiquetage explicite</strong> : Association claire entre la case à cocher et son label</li>
|
|
36
|
+
</ul>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<div className="criteria-card">
|
|
40
|
+
<div className="criteria-header">
|
|
41
|
+
<span className="criteria-icon">⌨️</span>
|
|
42
|
+
<h3>Navigation clavier complète</h3>
|
|
43
|
+
</div>
|
|
44
|
+
<ul>
|
|
45
|
+
<li><strong>Touche Espace</strong> : Pour activer/désactiver la case à cocher</li>
|
|
46
|
+
<li><strong>Touche Tab</strong> : Navigation séquentielle entre les cases à cocher</li>
|
|
47
|
+
<li><strong>Focus visible</strong> : Indication claire de l'élément actuellement focalisé</li>
|
|
48
|
+
<li><strong>Gestion des états multiples</strong> : Cycle entre les états non coché, coché et indéterminé</li>
|
|
49
|
+
</ul>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div className="criteria-card">
|
|
53
|
+
<div className="criteria-header">
|
|
54
|
+
<span className="criteria-icon">📱</span>
|
|
55
|
+
<h3>États et retours d'information</h3>
|
|
56
|
+
</div>
|
|
57
|
+
<ul>
|
|
58
|
+
<li><strong>État de sélection</strong> : <code>aria-checked</code> indique si la case est cochée, non cochée ou indéterminée</li>
|
|
59
|
+
<li><strong>État de désactivation</strong> : <code>aria-disabled</code> signale les éléments non disponibles</li>
|
|
60
|
+
<li><strong>Indication visuelle</strong> : Symboles distincts pour chaque état (coché, non coché, indéterminé)</li>
|
|
61
|
+
<li><strong>Validation visuelle</strong> : Couleurs et icônes spécifiques pour les états d'erreur, d'avertissement et de succès</li>
|
|
62
|
+
</ul>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div className="criteria-card">
|
|
66
|
+
<div className="criteria-header">
|
|
67
|
+
<span className="criteria-icon">🎨</span>
|
|
68
|
+
<h3>Personnalisation accessible</h3>
|
|
69
|
+
</div>
|
|
70
|
+
<ul>
|
|
71
|
+
<li><strong>Contraste configurable</strong> : Options de couleurs pour garantir un contraste suffisant</li>
|
|
72
|
+
<li><strong>Taille et espacement</strong> : Dimensions adaptées pour faciliter l'interaction tactile</li>
|
|
73
|
+
<li><strong>Compatibilité avec le mode contraste élevé</strong> : Utilisation de <code>currentColor</code> pour s'adapter aux paramètres système</li>
|
|
74
|
+
<li><strong>Densité ajustable</strong> : Options de densité pour s'adapter aux besoins des utilisateurs</li>
|
|
75
|
+
</ul>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div className="tri-state-section">
|
|
80
|
+
<h2>Fonctionnalité tri-état (indéterminé)</h2>
|
|
81
|
+
<p>
|
|
82
|
+
Le composant SyCheckbox prend en charge l'état indéterminé, particulièrement utile pour représenter :
|
|
83
|
+
</p>
|
|
84
|
+
<ul>
|
|
85
|
+
<li>Une sélection partielle d'éléments dans un groupe</li>
|
|
86
|
+
<li>Un état intermédiaire avant que l'utilisateur ne fasse un choix définitif</li>
|
|
87
|
+
<li>Une relation parent-enfant où certains éléments enfants sont sélectionnés</li>
|
|
88
|
+
</ul>
|
|
89
|
+
<p>
|
|
90
|
+
Conformément aux recommandations WAI-ARIA, notre implémentation de l'état indéterminé :
|
|
91
|
+
</p>
|
|
92
|
+
<ul>
|
|
93
|
+
<li>Utilise l'attribut <code>aria-checked="mixed"</code> pour les lecteurs d'écran</li>
|
|
94
|
+
<li>Fournit un indicateur visuel distinct pour l'état indéterminé</li>
|
|
95
|
+
<li>Gère correctement le cycle des états lors de l'interaction utilisateur</li>
|
|
96
|
+
<li>Maintient la cohérence entre l'état parent et les états des enfants</li>
|
|
97
|
+
</ul>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<div className="demo-section">
|
|
101
|
+
<h2>Démonstration interactive</h2>
|
|
102
|
+
<p>
|
|
103
|
+
Explorez ci-dessous un exemple de SyCheckbox entièrement accessible avec état indéterminé.
|
|
104
|
+
Essayez de naviguer en utilisant uniquement votre clavier (Tab pour naviguer, Espace pour activer) pour tester l'accessibilité.
|
|
105
|
+
</p>
|
|
106
|
+
<Primary />
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<div className="parent-child-section">
|
|
110
|
+
<h2>Relation parent-enfant</h2>
|
|
111
|
+
<p>
|
|
112
|
+
Le composant SyCheckbox permet de créer des relations parent-enfant entre les cases à cocher, où :
|
|
113
|
+
</p>
|
|
114
|
+
<ul>
|
|
115
|
+
<li>La case à cocher parent contrôle l'état de toutes les cases à cocher enfants</li>
|
|
116
|
+
<li>L'état de la case à cocher parent reflète l'état collectif des enfants :</li>
|
|
117
|
+
<ul>
|
|
118
|
+
<li>Cochée : tous les enfants sont cochés</li>
|
|
119
|
+
<li>Non cochée : aucun enfant n'est coché</li>
|
|
120
|
+
<li>Indéterminée : certains enfants sont cochés, d'autres non</li>
|
|
121
|
+
</ul>
|
|
122
|
+
</ul>
|
|
123
|
+
<p>
|
|
124
|
+
Cette relation est établie via la propriété <code>controlsIds</code> qui liste les identifiants des cases à cocher enfants.
|
|
125
|
+
</p>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div className="best-practices">
|
|
129
|
+
<h2>Bonnes pratiques d'utilisation</h2>
|
|
130
|
+
<ul>
|
|
131
|
+
<li>Utilisez des libellés clairs et concis pour décrire l'action associée à la case à cocher</li>
|
|
132
|
+
<li>Regroupez les cases à cocher liées dans un fieldset avec une légende explicative</li>
|
|
133
|
+
<li>Évitez de modifier l'état d'une case à cocher automatiquement sans action utilisateur explicite</li>
|
|
134
|
+
<li>Assurez-vous que la taille de la zone cliquable est suffisante (au moins 44×44 pixels pour les interfaces tactiles)</li>
|
|
135
|
+
<li>Utilisez l'état indéterminé uniquement pour indiquer une sélection partielle, pas un troisième état fonctionnel</li>
|
|
136
|
+
<li>Fournissez un retour visuel et textuel clair pour les erreurs de validation</li>
|
|
137
|
+
</ul>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<div className="resources-section">
|
|
141
|
+
<h2>Ressources supplémentaires</h2>
|
|
142
|
+
<ul>
|
|
143
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques d'auteur WAI-ARIA pour les cases à cocher</a></li>
|
|
144
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/examples/checkbox-mixed/" target="_blank" rel="noopener noreferrer">Exemple de case à cocher tri-état WAI-ARIA</a></li>
|
|
145
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
|
|
146
|
+
<li><a href="https://www.w3.org/TR/wai-aria-1.2/#checkbox" target="_blank" rel="noopener noreferrer">Spécification WAI-ARIA 1.2 pour le rôle checkbox</a></li>
|
|
147
|
+
</ul>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
<style>
|
|
152
|
+
{`
|
|
153
|
+
.accessibility-guide {
|
|
154
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
|
155
|
+
max-width: 1200px;
|
|
156
|
+
margin: 0 auto;
|
|
157
|
+
padding: 20px;
|
|
158
|
+
color: #333;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.intro-section {
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
margin-bottom: 30px;
|
|
165
|
+
background-color: #f8f9fa;
|
|
166
|
+
padding: 20px;
|
|
167
|
+
border-radius: 8px;
|
|
168
|
+
border-left: 5px solid #0077cc;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.accessibility-icon {
|
|
172
|
+
width: 60px;
|
|
173
|
+
height: 60px;
|
|
174
|
+
margin-right: 20px;
|
|
175
|
+
flex-shrink: 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.intro-text {
|
|
179
|
+
font-size: 1.1em;
|
|
180
|
+
line-height: 1.6;
|
|
181
|
+
margin: 0;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.criteria-section {
|
|
185
|
+
margin-bottom: 40px;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.criteria-section h2,
|
|
189
|
+
.demo-section h2,
|
|
190
|
+
.tri-state-section h2,
|
|
191
|
+
.parent-child-section h2,
|
|
192
|
+
.best-practices h2,
|
|
193
|
+
.resources-section h2 {
|
|
194
|
+
border-bottom: 2px solid #eaecef;
|
|
195
|
+
padding-bottom: 10px;
|
|
196
|
+
margin-top: 30px;
|
|
197
|
+
margin-bottom: 20px;
|
|
198
|
+
color: #0077cc;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.criteria-card {
|
|
202
|
+
background-color: #fff;
|
|
203
|
+
border-radius: 8px;
|
|
204
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
205
|
+
padding: 20px;
|
|
206
|
+
margin-bottom: 20px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.criteria-header {
|
|
210
|
+
display: flex;
|
|
211
|
+
align-items: center;
|
|
212
|
+
margin-bottom: 15px;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.criteria-icon {
|
|
216
|
+
font-size: 1.8em;
|
|
217
|
+
margin-right: 15px;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.criteria-header h3 {
|
|
221
|
+
margin: 0;
|
|
222
|
+
font-size: 1.3em;
|
|
223
|
+
color: #0077cc;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.criteria-card ul {
|
|
227
|
+
margin: 0;
|
|
228
|
+
padding-left: 20px;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.criteria-card li {
|
|
232
|
+
margin-bottom: 8px;
|
|
233
|
+
line-height: 1.5;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.demo-section {
|
|
237
|
+
background-color: #f8f9fa;
|
|
238
|
+
padding: 20px;
|
|
239
|
+
border-radius: 8px;
|
|
240
|
+
margin-bottom: 40px;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.tri-state-section,
|
|
244
|
+
.parent-child-section {
|
|
245
|
+
background-color: #f0f7ff;
|
|
246
|
+
padding: 20px;
|
|
247
|
+
border-radius: 8px;
|
|
248
|
+
margin-bottom: 30px;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.tri-state-section p,
|
|
252
|
+
.parent-child-section p {
|
|
253
|
+
line-height: 1.6;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.best-practices {
|
|
257
|
+
background-color: #f5f5f5;
|
|
258
|
+
padding: 20px;
|
|
259
|
+
border-radius: 8px;
|
|
260
|
+
margin-bottom: 30px;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.best-practices ul {
|
|
264
|
+
padding-left: 20px;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.best-practices li {
|
|
268
|
+
margin-bottom: 10px;
|
|
269
|
+
line-height: 1.5;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.resources-section {
|
|
273
|
+
background-color: #f8f9fa;
|
|
274
|
+
padding: 20px;
|
|
275
|
+
border-radius: 8px;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.resources-section ul {
|
|
279
|
+
padding-left: 20px;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.resources-section li {
|
|
283
|
+
margin-bottom: 10px;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.resources-section a {
|
|
287
|
+
color: #0077cc;
|
|
288
|
+
text-decoration: none;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.resources-section a:hover {
|
|
292
|
+
text-decoration: underline;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
code {
|
|
296
|
+
background-color: #f0f0f0;
|
|
297
|
+
padding: 2px 5px;
|
|
298
|
+
border-radius: 3px;
|
|
299
|
+
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
|
|
300
|
+
font-size: 0.9em;
|
|
301
|
+
}
|
|
302
|
+
`}
|
|
303
|
+
</style>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Meta, Canvas, Controls, Source } from '@storybook/blocks';
|
|
2
|
+
import * as SyCheckboxStories from "./SyCheckbox.stories";
|
|
3
|
+
|
|
4
|
+
<Meta of={SyCheckboxStories} />
|
|
5
|
+
|
|
6
|
+
# SyCheckbox
|
|
7
|
+
|
|
8
|
+
Le composant `SyCheckbox` est une case à cocher tri-état qui étend le composant `VCheckbox` de Vuetify, conforme au style du Design System et qui respecte les règles d'accessibilité <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr>.
|
|
9
|
+
|
|
10
|
+
Il étend les fonctionnalités de base de Vuetify avec :
|
|
11
|
+
|
|
12
|
+
- Un état indéterminé pour les sélections partielles
|
|
13
|
+
- Un système de validation avancé
|
|
14
|
+
- Des états visuels (erreur, avertissement, succès)
|
|
15
|
+
- Une gestion de la relation parent-enfant via la propriété `controlsIds`
|
|
16
|
+
|
|
17
|
+
<Canvas of={SyCheckboxStories.Default} />
|
|
18
|
+
|
|
19
|
+
# API
|
|
20
|
+
|
|
21
|
+
<Controls of={SyCheckboxStories.Default} />
|
|
22
|
+
|
|
23
|
+
## États
|
|
24
|
+
|
|
25
|
+
Le composant `SyCheckbox` peut avoir trois états :
|
|
26
|
+
- **Coché** : La case est cochée (modelValue = true)
|
|
27
|
+
- **Non coché** : La case est vide (modelValue = false)
|
|
28
|
+
- **Indéterminé** : La case est partiellement cochée (indeterminate = true)
|
|
29
|
+
|
|
30
|
+
L'état indéterminé est généralement utilisé pour représenter une sélection partielle dans un groupe d'éléments.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
Le composant supporte trois types de validation :
|
|
35
|
+
- Règles d'erreur standard (`customRules`)
|
|
36
|
+
- Règles d'avertissement (`customWarningRules`)
|
|
37
|
+
- Règles de succès (`customSuccessRules`)
|
|
38
|
+
|
|
39
|
+
### États visuels :
|
|
40
|
+
|
|
41
|
+
La case à cocher adapte automatiquement son apparence selon son état :
|
|
42
|
+
- Rouge pour les erreurs
|
|
43
|
+
- Orange pour les avertissements
|
|
44
|
+
- Vert pour les succès
|
|
45
|
+
|
|
46
|
+
## Relation parent-enfant
|
|
47
|
+
|
|
48
|
+
La propriété `controlsIds` permet d'établir une relation entre une case à cocher parent et plusieurs cases à cocher enfants. Lorsque certains enfants sont cochés mais pas tous, le parent passe automatiquement en état indéterminé.
|
|
49
|
+
|
|
50
|
+
<Canvas of={SyCheckboxStories.WithControlsIds} />
|