@cnamts/synapse 0.0.11-alpha → 0.0.13-alpha
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/dist/design-system-v3.js +5394 -3813
- package/dist/design-system-v3.umd.cjs +1 -1
- package/dist/src/components/Amelipro/types/types.d.ts +38 -0
- package/dist/src/components/CookieBanner/CookieBanner.d.ts +1 -1
- package/dist/src/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
- package/dist/src/components/Customs/SyTextField/SyTextField.d.ts +31 -23
- package/dist/src/components/Customs/SyTextField/types.d.ts +1 -0
- package/dist/src/components/DatePicker/DatePicker.d.ts +105 -102
- package/dist/src/components/DatePicker/DateTextInput.d.ts +82 -74
- package/dist/src/components/ErrorPage/ErrorPage.d.ts +1 -1
- package/dist/src/components/FileList/FileList.d.ts +1 -0
- package/dist/src/components/FileList/UploadItem/UploadItem.d.ts +1 -1
- package/dist/src/components/FilterInline/AccessibiliteItems.d.ts +30 -0
- package/dist/src/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/FilterSideBar/AccessibiliteItems.d.ts +29 -0
- package/dist/src/components/FilterSideBar/FilterSideBar.d.ts +31 -0
- package/dist/src/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/FilterSideBar/locales.d.ts +7 -0
- package/dist/src/components/LangBtn/LangBtn.d.ts +2 -2
- package/dist/src/components/NirField/NirField.d.ts +952 -0
- package/dist/src/components/NotificationBar/NotificationBar.d.ts +6 -6
- package/dist/src/components/PasswordField/PasswordField.d.ts +42 -8
- package/dist/src/components/PeriodField/PeriodField.d.ts +259 -235
- package/dist/src/components/PhoneField/PhoneField.d.ts +33 -3
- package/dist/src/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +1 -1
- package/dist/src/components/RatingPicker/NumberPicker/NumberPicker.d.ts +1 -1
- package/dist/src/components/RatingPicker/StarsPicker/StarsPicker.d.ts +1 -1
- package/dist/src/components/UploadWorkflow/AccessibiliteItems.d.ts +29 -0
- package/dist/src/components/UploadWorkflow/config.d.ts +29 -0
- package/dist/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/UploadWorkflow/locales.d.ts +7 -0
- package/dist/src/components/UploadWorkflow/types.d.ts +19 -0
- package/dist/src/components/UploadWorkflow/useFileList.d.ts +10 -0
- package/dist/src/components/UploadWorkflow/useFileUploadJourney.d.ts +9 -0
- package/dist/src/components/Usages/Usages.d.ts +10 -0
- package/dist/src/components/index.d.ts +5 -0
- package/dist/src/composables/date/tests/useDateFormat.spec.d.ts +1 -0
- package/dist/src/composables/date/tests/useDateInitialization.spec.d.ts +1 -0
- package/dist/src/composables/date/tests/useDatePickerAccessibility.spec.d.ts +1 -0
- package/dist/src/composables/date/useDateFormat.d.ts +26 -0
- package/dist/src/composables/date/useDateInitialization.d.ts +18 -0
- package/dist/src/composables/date/useDatePickerAccessibility.d.ts +8 -0
- package/dist/src/composables/rules/useFieldValidation.d.ts +1 -0
- package/dist/src/composables/useFilterable/useFilterable.d.ts +1 -1
- package/dist/src/composables/validation/tests/useValidation.spec.d.ts +1 -0
- package/dist/src/composables/validation/useValidation.d.ts +40 -0
- package/dist/src/designTokens/index.d.ts +3 -1
- package/dist/src/main.d.ts +1 -0
- package/dist/src/utils/formatDate/index.d.ts +3 -0
- package/dist/src/utils/formatDate/tests/formatDate.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateAfter/index.d.ts +2 -0
- package/dist/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateBefore/index.d.ts +2 -0
- package/dist/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateInRange/index.d.ts +3 -0
- package/dist/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateValid/index.d.ts +9 -0
- package/dist/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isEmailValid/tests/isEmailValid.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isWeekend/index.d.ts +3 -0
- package/dist/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.d.ts +1 -0
- package/dist/src/utils/parseDate/index.d.ts +3 -0
- package/dist/src/utils/parseDate/tests/parseDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/doMatchPattern/index.d.ts +3 -0
- package/dist/src/utils/rules/doMatchPattern/tests/matchPattern.spec.d.ts +1 -0
- package/dist/src/utils/rules/index.d.ts +11 -0
- package/dist/src/utils/rules/isDateValid/index.d.ts +4 -0
- package/dist/src/utils/rules/isDateValid/tests/isDateValid.spec.d.ts +1 -0
- package/dist/src/utils/rules/isExactLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isExactLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isExactLength/tests/exactLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isMaxLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isMaxLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isMaxLength/tests/isMaxLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isMinLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isMinLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isMinLength/tests/isMinLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotAfterDate/index.d.ts +3 -0
- package/dist/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotAfterToday/index.d.ts +4 -0
- package/dist/src/utils/rules/isNotAfterToday/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotBeforeDate/index.d.ts +3 -0
- package/dist/src/utils/rules/isNotBeforeDate/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotBeforeToday/index.d.ts +4 -0
- package/dist/src/utils/rules/isNotBeforeToday/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.d.ts +1 -0
- package/dist/src/utils/rules/isRequired/index.d.ts +4 -0
- package/dist/src/utils/rules/isRequired/locales.d.ts +2 -0
- package/dist/src/utils/rules/isRequired/tests/isRequred.spec.d.ts +1 -0
- package/dist/src/utils/rules/isValidEmail/index.d.ts +4 -0
- package/dist/src/utils/rules/isValidEmail/locales.d.ts +2 -0
- package/dist/src/utils/rules/isValidEmail/tests/isValidEmail.spec.d.ts +1 -0
- package/dist/src/vuetifyConfig.d.ts +81 -0
- package/dist/style.css +1 -1
- package/package.json +3 -1
- package/src/assets/_elevations.scss +89 -0
- package/src/assets/_fonts.scss +6 -0
- package/src/assets/_radius.scss +92 -0
- package/src/assets/_spacers.scss +149 -0
- package/src/assets/settings.scss +15 -3
- package/src/assets/tokens.scss +32 -29
- package/src/components/Amelipro/types/types.ts +40 -0
- package/src/components/ChipList/ChipList.stories.ts +26 -27
- package/src/components/ChipList/ChipList.vue +5 -1
- package/src/components/ChipList/config.ts +1 -0
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -2
- package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +1 -1
- package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +1 -1
- package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +65 -0
- package/src/components/Customs/SyInputSelect/SyInputSelect.vue +13 -3
- package/src/components/Customs/SySelect/SySelect.mdx +1 -1
- package/src/components/Customs/SySelect/SySelect.stories.ts +88 -5
- package/src/components/Customs/SySelect/SySelect.vue +55 -14
- package/src/components/Customs/SySelect/tests/SySelect.spec.ts +135 -2
- package/src/components/Customs/SyTextField/SyTextField.mdx +2 -2
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +809 -79
- package/src/components/Customs/SyTextField/SyTextField.vue +135 -104
- package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +190 -38
- package/src/components/Customs/SyTextField/types.d.ts +1 -0
- package/src/components/DatePicker/DatePicker.stories.ts +177 -5
- package/src/components/DatePicker/DatePicker.vue +302 -233
- package/src/components/DatePicker/DateTextInput.vue +101 -246
- package/src/components/DatePicker/tests/DatePicker.spec.ts +123 -60
- package/src/components/DatePicker/tests/DateTextInput.spec.ts +202 -6
- package/src/components/FileList/Accessibilite.stories.ts +1 -1
- package/src/components/FileList/AccessibiliteItems.ts +22 -0
- package/src/components/FileList/FileList.vue +2 -1
- package/src/components/FileList/UploadItem/UploadItem.vue +10 -0
- package/src/components/FileUpload/FileUpload.stories.ts +93 -7
- package/src/components/FileUpload/FileUpload.vue +1 -0
- package/src/components/FileUpload/tests/FileUpload.spec.ts +4 -4
- package/src/components/FilterInline/Accessibilite.mdx +14 -0
- package/src/components/FilterInline/Accessibilite.stories.ts +216 -0
- package/src/components/FilterInline/AccessibiliteItems.ts +132 -0
- package/src/components/FilterInline/FilterInline.mdx +180 -34
- package/src/components/FilterInline/FilterInline.stories.ts +363 -6
- package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/FilterSideBar/Accessibilite.mdx +14 -0
- package/src/components/FilterSideBar/Accessibilite.stories.ts +216 -0
- package/src/components/FilterSideBar/AccessibiliteItems.ts +153 -0
- package/src/components/FilterSideBar/FilterSideBar.mdx +237 -0
- package/src/components/FilterSideBar/FilterSideBar.stories.ts +798 -0
- package/src/components/FilterSideBar/FilterSideBar.vue +193 -0
- package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/FilterSideBar/locales.ts +8 -0
- package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +305 -0
- package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +39 -0
- package/src/components/HeaderBar/Usages.mdx +1 -1
- package/src/components/NirField/NirField.stories.ts +738 -29
- package/src/components/NirField/NirField.vue +401 -359
- package/src/components/NirField/examples//342/200/257dataset/342/200/257.md +12 -0
- package/src/components/NirField/tests/NirField.spec.ts +88 -52
- package/src/components/NirField/tests/config.spec.ts +65 -0
- package/src/components/NotificationBar/Accessibilite.stories.ts +4 -0
- package/src/components/NotificationBar/NotificationBar.mdx +2 -2
- package/src/components/NotificationBar/NotificationBar.stories.ts +66 -13
- package/src/components/NotificationBar/NotificationBar.vue +42 -114
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +28 -33
- package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +1 -1
- package/src/components/PaginatedTable/PaginatedTable.vue +6 -10
- package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +4 -4
- package/src/components/PasswordField/PasswordField.mdx +129 -47
- package/src/components/PasswordField/PasswordField.stories.ts +1111 -120
- package/src/components/PasswordField/PasswordField.vue +212 -99
- package/src/components/PasswordField/tests/PasswordField.spec.ts +138 -9
- package/src/components/PeriodField/PeriodField.stories.ts +214 -118
- package/src/components/PeriodField/PeriodField.vue +238 -190
- package/src/components/PeriodField/tests/PeriodField.spec.ts +146 -0
- package/src/components/PhoneField/PhoneField.stories.ts +170 -0
- package/src/components/PhoneField/PhoneField.vue +76 -17
- package/src/components/PhoneField/indicatifs.ts +1 -1
- package/src/components/PhoneField/tests/PhoneField.spec.ts +40 -0
- package/src/components/RatingPicker/RatingPicker.stories.ts +7 -7
- package/src/components/SearchListField/SearchListField.stories.ts +1 -1
- package/src/components/UploadWorkflow/Accessibilite.mdx +14 -0
- package/src/components/UploadWorkflow/Accessibilite.stories.ts +216 -0
- package/src/components/UploadWorkflow/AccessibiliteItems.ts +192 -0
- package/src/components/UploadWorkflow/UploadWorkflow.mdx +75 -0
- package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +943 -0
- package/src/components/UploadWorkflow/UploadWorkflow.vue +230 -0
- package/src/components/UploadWorkflow/config.ts +29 -0
- package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/UploadWorkflow/locales.ts +8 -0
- package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +257 -0
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +54 -0
- package/src/components/UploadWorkflow/types.ts +21 -0
- package/src/components/UploadWorkflow/useFileList.ts +84 -0
- package/src/components/UploadWorkflow/useFileUploadJourney.ts +18 -0
- package/src/components/Usages/tests/Usages.spec.ts +183 -0
- package/src/components/index.ts +5 -0
- package/src/composables/date/tests/useDateFormat.spec.ts +67 -0
- package/src/composables/date/tests/useDateInitialization.spec.ts +89 -0
- package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +102 -0
- package/src/composables/date/useDateFormat.ts +94 -0
- package/src/composables/date/useDateInitialization.ts +92 -0
- package/src/composables/date/useDatePickerAccessibility.ts +78 -0
- package/src/composables/rules/tests/useFieldValidation.spec.ts +385 -4
- package/src/composables/rules/useFieldValidation.ts +5 -2
- package/src/composables/useFilterable/useFilterable.ts +5 -4
- package/src/composables/validation/tests/useValidation.spec.ts +154 -0
- package/src/composables/validation/useValidation.ts +180 -0
- package/src/designTokens/index.ts +4 -0
- package/src/main.ts +1 -0
- package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +28 -0
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +2 -2
- package/src/stories/Accessibilite/Audit/RGAA.mdx +6 -6
- package/src/stories/Accessibilite/Introduction.mdx +2 -1
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +8 -11
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +77 -0
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +9 -3
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +2 -2
- package/src/stories/Demarrer/Accueil.mdx +1 -1
- package/src/stories/Demarrer/Introduction.stories.ts +3 -3
- package/src/stories/Demarrer/Releases.mdx +8 -0
- package/src/stories/Demarrer/Releases.stories.ts +66 -0
- package/src/stories/DesignTokens/Conteneurs.stories.ts +3 -3
- package/src/stories/DesignTokens/ThemePA.mdx +4 -30
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +36 -0
- package/src/stories/GuideDuDev/UtiliserLesRules.mdx +321 -78
- package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
- package/src/utils/formatDate/index.ts +6 -0
- package/src/utils/formatDate/tests/formatDate.spec.ts +18 -0
- package/src/utils/functions/validation/isDateAfter/index.ts +9 -0
- package/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.ts +18 -0
- package/src/utils/functions/validation/isDateBefore/index.ts +9 -0
- package/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.ts +23 -0
- package/src/utils/functions/validation/isDateInRange/index.ts +22 -0
- package/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.ts +28 -0
- package/src/utils/functions/validation/isDateValid/index.ts +67 -0
- package/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.ts +46 -0
- package/src/utils/functions/validation/isEmailValid/index.ts +9 -0
- package/src/utils/functions/validation/isWeekend/index.ts +10 -0
- package/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.ts +16 -0
- package/src/utils/parseDate/index.ts +29 -0
- package/src/utils/parseDate/tests/parseDate.spec.ts +52 -0
- package/src/utils/rules/Rules.mdx +16 -0
- package/src/utils/rules/doMatchPattern/DoMachPattern.mdx +66 -0
- package/src/utils/rules/doMatchPattern/DoMatchPattern.stories.ts +106 -0
- package/src/utils/rules/doMatchPattern/index.ts +28 -0
- package/src/utils/rules/doMatchPattern/locales.ts +5 -0
- package/src/utils/rules/doMatchPattern/tests/matchPattern.spec.ts +38 -0
- package/src/utils/rules/index.ts +11 -0
- package/src/utils/rules/isDateValid/IsDateValid.mdx +87 -0
- package/src/utils/rules/isDateValid/IsDateValid.stories.ts +113 -0
- package/src/utils/rules/isDateValid/index.ts +32 -0
- package/src/utils/rules/isDateValid/locales.ts +10 -0
- package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +27 -0
- package/src/utils/rules/isExactLength/IsExactLenght.mdx +68 -0
- package/src/utils/rules/isExactLength/IsExactLength.stories.ts +151 -0
- package/src/utils/rules/{exactLength → isExactLength}/index.ts +2 -4
- package/src/utils/rules/isExactLength/tests/exactLength.spec.ts +48 -0
- package/src/utils/rules/isMaxLength/IsMaxLength.mdx +68 -0
- package/src/utils/rules/isMaxLength/IsMaxLength.stories.ts +152 -0
- package/src/utils/rules/isMaxLength/index.ts +30 -0
- package/src/utils/rules/isMaxLength/locales.ts +6 -0
- package/src/utils/rules/isMaxLength/tests/isMaxLength.spec.ts +42 -0
- package/src/utils/rules/isMinLength/IsMinLength.mdx +68 -0
- package/src/utils/rules/isMinLength/IsMinLength.stories.ts +152 -0
- package/src/utils/rules/isMinLength/index.ts +30 -0
- package/src/utils/rules/isMinLength/locales.ts +6 -0
- package/src/utils/rules/isMinLength/tests/isMinLength.spec.ts +42 -0
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +68 -0
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +109 -0
- package/src/utils/rules/isNotAfterDate/index.ts +25 -0
- package/src/utils/rules/isNotAfterDate/locales.ts +6 -0
- package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +25 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +83 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +110 -0
- package/src/utils/rules/isNotAfterToday/index.ts +28 -0
- package/src/utils/rules/isNotAfterToday/locales.ts +5 -0
- package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +30 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +68 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.stories.ts +114 -0
- package/src/utils/rules/isNotBeforeDate/index.ts +25 -0
- package/src/utils/rules/isNotBeforeDate/locales.ts +6 -0
- package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +25 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +83 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +110 -0
- package/src/utils/rules/isNotBeforeToday/index.ts +28 -0
- package/src/utils/rules/isNotBeforeToday/locales.ts +5 -0
- package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +36 -0
- package/src/utils/rules/isRequired/IsRequired.mdx +81 -0
- package/src/utils/rules/isRequired/IsRequired.stories.ts +101 -0
- package/src/utils/rules/{required → isRequired}/index.ts +3 -3
- package/src/utils/rules/{required/tests/index.spec.ts → isRequired/tests/isRequred.spec.ts} +9 -9
- package/src/utils/rules/isValidEmail/IsValidEmail.mdx +81 -0
- package/src/utils/rules/isValidEmail/IsValidEmail.stories.ts +101 -0
- package/src/utils/rules/{email → isValidEmail}/index.ts +3 -5
- package/src/utils/rules/{email/tests/email.spec.ts → isValidEmail/tests/isValidEmail.spec.ts} +5 -5
- package/src/vuetifyConfig.ts +61 -0
- package/dist/src/utils/rules/email/index.d.ts +0 -4
- package/dist/src/utils/rules/exactLength/index.d.ts +0 -4
- package/dist/src/utils/rules/required/index.d.ts +0 -4
- package/dist/src/utils/rules/required/ruleMessageHelper.d.ts +0 -3
- package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +0 -58
- package/src/composables/useFilterable/__snapshots__/useFilterable.spec.ts.snap +0 -3
- package/src/utils/functions/isEmailValid/index.ts +0 -8
- package/src/utils/rules/required/ruleMessageHelper.ts +0 -14
- package/src/utils/rules/required/tests/rulesMessageHelper.spec.ts +0 -22
- /package/dist/src/{utils/functions/isEmailValid/tests/isEmailValid.spec.d.ts → components/FilterSideBar/tests/FilterSideBar.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/email/tests/email.spec.d.ts → components/NirField/tests/config.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/required/tests/index.spec.d.ts → components/UploadWorkflow/tests/UploadWorkflow.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/required/tests/rulesMessageHelper.spec.d.ts → components/Usages/tests/Usages.spec.d.ts} +0 -0
- /package/dist/src/utils/functions/{isEmailValid → validation/isEmailValid}/index.d.ts +0 -0
- /package/dist/src/utils/rules/{exactLength → doMatchPattern}/locales.d.ts +0 -0
- /package/dist/src/utils/rules/{email → isDateValid}/locales.d.ts +0 -0
- /package/dist/src/utils/rules/{required → isNotAfterDate}/locales.d.ts +0 -0
- /package/src/utils/functions/{isEmailValid → validation/isEmailValid}/tests/isEmailValid.spec.ts +0 -0
- /package/src/utils/rules/{exactLength → isExactLength}/locales.ts +0 -0
- /package/src/utils/rules/{required → isRequired}/locales.ts +0 -0
- /package/src/utils/rules/{email → isValidEmail}/locales.ts +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composable pour améliorer l'accessibilité du DatePicker
|
|
3
|
+
*/
|
|
4
|
+
import { nextTick } from 'vue'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Améliore l'accessibilité du DatePicker en ajoutant des attributs ARIA et des instructions pour les lecteurs d'écran
|
|
8
|
+
* @returns Une fonction pour mettre à jour l'accessibilité du DatePicker
|
|
9
|
+
*/
|
|
10
|
+
export function useDatePickerAccessibility() {
|
|
11
|
+
/**
|
|
12
|
+
* Met à jour les attributs d'accessibilité du DatePicker
|
|
13
|
+
* Ajoute des attributs ARIA et des instructions pour les lecteurs d'écran
|
|
14
|
+
*/
|
|
15
|
+
const updateAccessibility = async (): Promise<void> => {
|
|
16
|
+
await nextTick()
|
|
17
|
+
|
|
18
|
+
// Utiliser des attributs data pour sélectionner les éléments, ce qui est plus stable que les classes CSS
|
|
19
|
+
const datePickerEl = document.querySelector('.v-date-picker')
|
|
20
|
+
if (!datePickerEl) return
|
|
21
|
+
|
|
22
|
+
// Ajouter un attribut role="application" au conteneur principal
|
|
23
|
+
datePickerEl.setAttribute('role', 'application')
|
|
24
|
+
datePickerEl.setAttribute('aria-label', 'Sélecteur de date')
|
|
25
|
+
|
|
26
|
+
// Sélectionner tous les boutons de navigation
|
|
27
|
+
const navigationButtons = datePickerEl.querySelectorAll('button')
|
|
28
|
+
|
|
29
|
+
// Attribuer des labels significatifs basés sur la position ou l'icône
|
|
30
|
+
navigationButtons.forEach((button) => {
|
|
31
|
+
const iconEl = button.querySelector('.v-icon')
|
|
32
|
+
if (!iconEl) return
|
|
33
|
+
|
|
34
|
+
// Utiliser le contenu de l'icône pour déterminer sa fonction
|
|
35
|
+
const iconContent = iconEl.textContent || ''
|
|
36
|
+
const iconClasses = iconEl.className || ''
|
|
37
|
+
|
|
38
|
+
if (iconClasses.includes('mdi-chevron-left') || iconContent.includes('chevron-left')) {
|
|
39
|
+
button.setAttribute('aria-label', 'Mois précédent')
|
|
40
|
+
}
|
|
41
|
+
else if (iconClasses.includes('mdi-chevron-right') || iconContent.includes('chevron-right')) {
|
|
42
|
+
button.setAttribute('aria-label', 'Mois suivant')
|
|
43
|
+
}
|
|
44
|
+
else if (iconClasses.includes('mdi-chevron-down') || iconContent.includes('chevron-down')
|
|
45
|
+
|| iconClasses.includes('mdi-menu-down') || iconContent.includes('menu-down')) {
|
|
46
|
+
button.setAttribute('aria-label', 'Changer de vue')
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
// Ajouter des instructions pour les lecteurs d'écran
|
|
51
|
+
let srOnlyEl = datePickerEl.querySelector('.sr-only-instructions')
|
|
52
|
+
if (!srOnlyEl) {
|
|
53
|
+
srOnlyEl = document.createElement('span')
|
|
54
|
+
srOnlyEl.className = 'sr-only-instructions'
|
|
55
|
+
srOnlyEl.setAttribute('aria-live', 'polite')
|
|
56
|
+
// Utiliser HTMLElement pour accéder aux propriétés de style
|
|
57
|
+
const srOnlyHtmlEl = srOnlyEl as HTMLElement
|
|
58
|
+
srOnlyHtmlEl.style.position = 'absolute'
|
|
59
|
+
srOnlyHtmlEl.style.width = '1px'
|
|
60
|
+
srOnlyHtmlEl.style.height = '1px'
|
|
61
|
+
srOnlyHtmlEl.style.padding = '0'
|
|
62
|
+
srOnlyHtmlEl.style.margin = '-1px'
|
|
63
|
+
srOnlyHtmlEl.style.overflow = 'hidden'
|
|
64
|
+
srOnlyHtmlEl.style.clip = 'rect(0, 0, 0, 0)'
|
|
65
|
+
srOnlyHtmlEl.style.whiteSpace = 'nowrap'
|
|
66
|
+
srOnlyHtmlEl.style.border = '0'
|
|
67
|
+
srOnlyEl.textContent = 'Utilisez les flèches pour naviguer entre les dates et Entrée pour sélectionner une date'
|
|
68
|
+
|
|
69
|
+
datePickerEl.prepend(srOnlyEl)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
updateAccessibility,
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export default useDatePickerAccessibility
|
|
@@ -1,8 +1,37 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { useFieldValidation } from '../useFieldValidation'
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
|
|
2
|
+
import { useFieldValidation, EMAIL_REGEXP } from '../useFieldValidation'
|
|
3
3
|
|
|
4
4
|
describe('useFieldValidation', () => {
|
|
5
|
-
const { generateRules } = useFieldValidation()
|
|
5
|
+
const { generateRules, parseDate } = useFieldValidation()
|
|
6
|
+
|
|
7
|
+
// Mock Date pour les tests liés à la date
|
|
8
|
+
let originalDate: typeof Date
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
// Sauvegarder la Date originale
|
|
12
|
+
originalDate = global.Date
|
|
13
|
+
// Mock de la date actuelle à 2023-01-15
|
|
14
|
+
// Pas besoin de stocker mockDate car nous utilisons directement la classe
|
|
15
|
+
global.Date = class extends Date {
|
|
16
|
+
constructor(...args: unknown[]) {
|
|
17
|
+
if (args.length === 0) {
|
|
18
|
+
super(2023, 0, 15)
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
super(...args as [number, number, number])
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static now() {
|
|
26
|
+
return new Date(2023, 0, 15).getTime()
|
|
27
|
+
}
|
|
28
|
+
} as typeof Date
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
// Restaurer la Date originale
|
|
33
|
+
global.Date = originalDate
|
|
34
|
+
})
|
|
6
35
|
|
|
7
36
|
it('should validate required rule', () => {
|
|
8
37
|
const rules = generateRules([{ type: 'required', options: { message: 'This field is required.' } }])
|
|
@@ -10,6 +39,9 @@ describe('useFieldValidation', () => {
|
|
|
10
39
|
|
|
11
40
|
expect(rule('')).toEqual({ error: 'This field is required.' })
|
|
12
41
|
expect(rule('value')).toEqual({ success: 'Le champ est valide.' })
|
|
42
|
+
expect(rule(new Date())).toEqual({ success: 'Le champ est valide.' })
|
|
43
|
+
expect(rule({ key: 'value' })).toEqual({ success: 'Le champ est valide.' })
|
|
44
|
+
expect(rule(null)).toEqual({ error: 'This field is required.' })
|
|
13
45
|
})
|
|
14
46
|
|
|
15
47
|
it('should validate min rule', () => {
|
|
@@ -18,6 +50,8 @@ describe('useFieldValidation', () => {
|
|
|
18
50
|
|
|
19
51
|
expect(rule(3)).toEqual({ error: 'Value must be at least 5.' })
|
|
20
52
|
expect(rule(5)).toEqual({ success: 'Le champ est valide.' })
|
|
53
|
+
expect(rule(10)).toEqual({ success: 'Le champ est valide.' })
|
|
54
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
21
55
|
})
|
|
22
56
|
|
|
23
57
|
it('should validate max rule', () => {
|
|
@@ -26,6 +60,8 @@ describe('useFieldValidation', () => {
|
|
|
26
60
|
|
|
27
61
|
expect(rule(15)).toEqual({ error: 'Value must be at most 10.' })
|
|
28
62
|
expect(rule(10)).toEqual({ success: 'Le champ est valide.' })
|
|
63
|
+
expect(rule(5)).toEqual({ success: 'Le champ est valide.' })
|
|
64
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
29
65
|
})
|
|
30
66
|
|
|
31
67
|
it('should validate minLength rule', () => {
|
|
@@ -34,6 +70,23 @@ describe('useFieldValidation', () => {
|
|
|
34
70
|
|
|
35
71
|
expect(rule('1234')).toEqual({ error: 'Minimum length is 5.' })
|
|
36
72
|
expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
|
|
73
|
+
expect(rule('123456')).toEqual({ success: 'Le champ est valide.' })
|
|
74
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('should validate minLength rule with ignoreSpace option', () => {
|
|
78
|
+
const rules = generateRules([{
|
|
79
|
+
type: 'minLength',
|
|
80
|
+
options: {
|
|
81
|
+
length: 5,
|
|
82
|
+
message: 'Minimum length is 5.',
|
|
83
|
+
ignoreSpace: true,
|
|
84
|
+
},
|
|
85
|
+
}])
|
|
86
|
+
const rule = rules[0]
|
|
87
|
+
|
|
88
|
+
expect(rule('1 2 3 4')).toEqual({ error: 'Minimum length is 5.' }) // Length without spaces is 4
|
|
89
|
+
expect(rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
|
|
37
90
|
})
|
|
38
91
|
|
|
39
92
|
it('should validate maxLength rule', () => {
|
|
@@ -42,6 +95,23 @@ describe('useFieldValidation', () => {
|
|
|
42
95
|
|
|
43
96
|
expect(rule('123456')).toEqual({ error: 'Maximum length is 5.' })
|
|
44
97
|
expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
|
|
98
|
+
expect(rule('1234')).toEqual({ success: 'Le champ est valide.' })
|
|
99
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('should validate maxLength rule with ignoreSpace option', () => {
|
|
103
|
+
const rules = generateRules([{
|
|
104
|
+
type: 'maxLength',
|
|
105
|
+
options: {
|
|
106
|
+
length: 5,
|
|
107
|
+
message: 'Maximum length is 5.',
|
|
108
|
+
ignoreSpace: true,
|
|
109
|
+
},
|
|
110
|
+
}])
|
|
111
|
+
const rule = rules[0]
|
|
112
|
+
|
|
113
|
+
expect(rule('1 2 3 4 5 6')).toEqual({ error: 'Maximum length is 5.' }) // Length without spaces is 6
|
|
114
|
+
expect(rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
|
|
45
115
|
})
|
|
46
116
|
|
|
47
117
|
it('should validate exactLength rule', () => {
|
|
@@ -49,15 +119,41 @@ describe('useFieldValidation', () => {
|
|
|
49
119
|
const rule = rules[0]
|
|
50
120
|
|
|
51
121
|
expect(rule('1234')).toEqual({ error: 'Length must be exactly 5.' })
|
|
122
|
+
expect(rule('123456')).toEqual({ error: 'Length must be exactly 5.' })
|
|
52
123
|
expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
|
|
124
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
it('should validate exactLength rule with ignoreSpace option', () => {
|
|
128
|
+
const rules = generateRules([{
|
|
129
|
+
type: 'exactLength',
|
|
130
|
+
options: {
|
|
131
|
+
length: 5,
|
|
132
|
+
message: 'Length must be exactly 5.',
|
|
133
|
+
ignoreSpace: true,
|
|
134
|
+
},
|
|
135
|
+
}])
|
|
136
|
+
const rule = rules[0]
|
|
137
|
+
|
|
138
|
+
expect(rule('1 2 3 4')).toEqual({ error: 'Length must be exactly 5.' }) // Length without spaces is 4
|
|
139
|
+
expect(rule('1 2 3 4 5 6')).toEqual({ error: 'Length must be exactly 5.' }) // Length without spaces is 6
|
|
140
|
+
expect(rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
|
|
53
141
|
})
|
|
54
142
|
|
|
55
143
|
it('should validate email rule', () => {
|
|
144
|
+
// Vérifions d'abord que la regex EMAIL_REGEXP fonctionne comme prévu
|
|
145
|
+
expect(EMAIL_REGEXP.test('invalid-email')).toBe(false)
|
|
146
|
+
// Note: La regex actuelle considère test@example comme valide
|
|
147
|
+
expect(EMAIL_REGEXP.test('test@example')).toBe(true)
|
|
148
|
+
expect(EMAIL_REGEXP.test('test@example.com')).toBe(true)
|
|
149
|
+
|
|
56
150
|
const rules = generateRules([{ type: 'email', options: { message: 'Invalid email address.' } }])
|
|
57
151
|
const rule = rules[0]
|
|
58
152
|
|
|
59
153
|
expect(rule('invalid-email')).toEqual({ error: 'Invalid email address.' })
|
|
60
154
|
expect(rule('test@example.com')).toEqual({ success: 'Le champ est valide.' })
|
|
155
|
+
expect(rule('test.name@example.co.uk')).toEqual({ success: 'Le champ est valide.' })
|
|
156
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
61
157
|
})
|
|
62
158
|
|
|
63
159
|
it('should validate matchPattern rule', () => {
|
|
@@ -68,17 +164,302 @@ describe('useFieldValidation', () => {
|
|
|
68
164
|
const rule = rules[0]
|
|
69
165
|
|
|
70
166
|
expect(rule('123')).toEqual({ error: 'Invalid format.' })
|
|
167
|
+
expect(rule('aBc')).toEqual({ error: 'Invalid format.' })
|
|
71
168
|
expect(rule('abc')).toEqual({ success: 'Le champ est valide.' })
|
|
169
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('should validate notWeekend rule', () => {
|
|
173
|
+
const rules = generateRules([{
|
|
174
|
+
type: 'notWeekend',
|
|
175
|
+
options: { message: 'Date cannot be on a weekend.' },
|
|
176
|
+
}])
|
|
177
|
+
const rule = rules[0]
|
|
178
|
+
|
|
179
|
+
// 15 janvier 2023 est un dimanche (jour 0)
|
|
180
|
+
expect(rule(new Date(2023, 0, 15))).toEqual({ error: 'Date cannot be on a weekend.' })
|
|
181
|
+
// 14 janvier 2023 est un samedi (jour 6)
|
|
182
|
+
expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date cannot be on a weekend.' })
|
|
183
|
+
// 13 janvier 2023 est un vendredi (jour 5)
|
|
184
|
+
expect(rule(new Date(2023, 0, 13))).toEqual({ success: 'Le champ est valide.' })
|
|
185
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('should validate notBeforeToday rule', () => {
|
|
189
|
+
const rules = generateRules([{
|
|
190
|
+
type: 'notBeforeToday',
|
|
191
|
+
options: { message: 'Date cannot be before today.' },
|
|
192
|
+
}])
|
|
193
|
+
const rule = rules[0]
|
|
194
|
+
|
|
195
|
+
// 14 janvier 2023 est avant aujourd'hui (15 janvier 2023)
|
|
196
|
+
expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date cannot be before today.' })
|
|
197
|
+
// 15 janvier 2023 est aujourd'hui
|
|
198
|
+
expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
|
|
199
|
+
// 16 janvier 2023 est après aujourd'hui
|
|
200
|
+
expect(rule(new Date(2023, 0, 16))).toEqual({ success: 'Le champ est valide.' })
|
|
201
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
it('should validate notAfterToday rule', () => {
|
|
205
|
+
const rules = generateRules([{
|
|
206
|
+
type: 'notAfterToday',
|
|
207
|
+
options: { message: 'Date cannot be after today.' },
|
|
208
|
+
}])
|
|
209
|
+
const rule = rules[0]
|
|
210
|
+
|
|
211
|
+
// 16 janvier 2023 est après aujourd'hui (15 janvier 2023)
|
|
212
|
+
expect(rule(new Date(2023, 0, 16))).toEqual({ error: 'Date cannot be after today.' })
|
|
213
|
+
// 15 janvier 2023 est aujourd'hui
|
|
214
|
+
expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
|
|
215
|
+
// 14 janvier 2023 est avant aujourd'hui
|
|
216
|
+
expect(rule(new Date(2023, 0, 14))).toEqual({ success: 'Le champ est valide.' })
|
|
217
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
it('should test parseDate function directly', () => {
|
|
221
|
+
// Test with valid date string
|
|
222
|
+
expect(parseDate('15/01/2023')).toEqual(new Date(2023, 0, 15))
|
|
223
|
+
|
|
224
|
+
// Test with Date object
|
|
225
|
+
const dateObj = new Date(2023, 0, 15)
|
|
226
|
+
expect(parseDate(dateObj)).toEqual(dateObj)
|
|
227
|
+
|
|
228
|
+
// Test with different format
|
|
229
|
+
expect(parseDate('2023-01-15', 'YYYY-MM-DD')).toEqual(new Date(2023, 0, 15))
|
|
230
|
+
|
|
231
|
+
// Test with YY format
|
|
232
|
+
expect(parseDate('15/01/23', 'DD/MM/YY')).toEqual(new Date(2023, 0, 15))
|
|
233
|
+
|
|
234
|
+
// Test with invalid date
|
|
235
|
+
expect(parseDate('invalid-date')).toBeNull()
|
|
236
|
+
|
|
237
|
+
// Test with empty string
|
|
238
|
+
expect(parseDate('')).toBeNull()
|
|
239
|
+
|
|
240
|
+
// Test with null
|
|
241
|
+
expect(parseDate(null as unknown as string | Date)).toBeNull()
|
|
242
|
+
|
|
243
|
+
// Test with mismatched format parts
|
|
244
|
+
expect(parseDate('15/01', 'DD/MM/YYYY')).toBeNull()
|
|
245
|
+
|
|
246
|
+
// Test with invalid parts
|
|
247
|
+
expect(parseDate('aa/bb/cccc', 'DD/MM/YYYY')).toBeNull()
|
|
248
|
+
|
|
249
|
+
// Test with invalid month (out of range)
|
|
250
|
+
expect(parseDate('15/13/2023', 'DD/MM/YYYY')).toBeNull()
|
|
251
|
+
|
|
252
|
+
// Test with invalid day (out of range)
|
|
253
|
+
expect(parseDate('32/01/2023', 'DD/MM/YYYY')).toBeNull()
|
|
254
|
+
|
|
255
|
+
// Test with invalid year (out of range)
|
|
256
|
+
expect(parseDate('15/01/1800', 'DD/MM/YYYY')).toBeNull()
|
|
257
|
+
|
|
258
|
+
// Test with invalid date (e.g., 31 February)
|
|
259
|
+
expect(parseDate('31/02/2023', 'DD/MM/YYYY')).toBeNull()
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
it('should validate notBeforeDate rule', () => {
|
|
263
|
+
const rules = generateRules([{
|
|
264
|
+
type: 'notBeforeDate',
|
|
265
|
+
options: {
|
|
266
|
+
date: '10/01/2023', // 10 janvier 2023
|
|
267
|
+
message: 'Date cannot be before reference date.',
|
|
268
|
+
},
|
|
269
|
+
}])
|
|
270
|
+
const rule = rules[0]
|
|
271
|
+
|
|
272
|
+
// 9 janvier 2023 est avant la date de référence
|
|
273
|
+
expect(rule(new Date(2023, 0, 9))).toEqual({ error: 'Date cannot be before reference date.' })
|
|
274
|
+
// 10 janvier 2023 est la date de référence
|
|
275
|
+
expect(rule(new Date(2023, 0, 10))).toEqual({ success: 'Le champ est valide.' })
|
|
276
|
+
// 11 janvier 2023 est après la date de référence
|
|
277
|
+
expect(rule(new Date(2023, 0, 11))).toEqual({ success: 'Le champ est valide.' })
|
|
278
|
+
// Test avec une date invalide
|
|
279
|
+
expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
|
|
280
|
+
// Test sans option date
|
|
281
|
+
const ruleWithoutDate = generateRules([{
|
|
282
|
+
type: 'notBeforeDate',
|
|
283
|
+
options: { message: 'Date cannot be before reference date.' },
|
|
284
|
+
}])[0]
|
|
285
|
+
expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
|
|
286
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
it('should throw when date reference is not a string in notBeforeDate rule', () => {
|
|
290
|
+
expect(() => {
|
|
291
|
+
const invalidRule = generateRules([{
|
|
292
|
+
type: 'notBeforeDate',
|
|
293
|
+
options: {
|
|
294
|
+
date: new Date() as unknown as string, // Date object instead of string
|
|
295
|
+
message: 'Date cannot be before reference date.',
|
|
296
|
+
},
|
|
297
|
+
}])[0]
|
|
298
|
+
invalidRule(new Date())
|
|
299
|
+
}).toThrow('Date reference must be a string in DD/MM/YYYY format')
|
|
300
|
+
})
|
|
301
|
+
|
|
302
|
+
it('should validate notAfterDate rule', () => {
|
|
303
|
+
const rules = generateRules([{
|
|
304
|
+
type: 'notAfterDate',
|
|
305
|
+
options: {
|
|
306
|
+
date: '20/01/2023', // 20 janvier 2023
|
|
307
|
+
message: 'Date cannot be after reference date.',
|
|
308
|
+
},
|
|
309
|
+
}])
|
|
310
|
+
const rule = rules[0]
|
|
311
|
+
|
|
312
|
+
// 21 janvier 2023 est après la date de référence
|
|
313
|
+
expect(rule(new Date(2023, 0, 21))).toEqual({ error: 'Date cannot be after reference date.' })
|
|
314
|
+
// 20 janvier 2023 est la date de référence
|
|
315
|
+
expect(rule(new Date(2023, 0, 20))).toEqual({ success: 'Le champ est valide.' })
|
|
316
|
+
// 19 janvier 2023 est avant la date de référence
|
|
317
|
+
expect(rule(new Date(2023, 0, 19))).toEqual({ success: 'Le champ est valide.' })
|
|
318
|
+
// Test avec une date invalide
|
|
319
|
+
expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
|
|
320
|
+
// Test sans option date
|
|
321
|
+
const ruleWithoutDate = generateRules([{
|
|
322
|
+
type: 'notAfterDate',
|
|
323
|
+
options: { message: 'Date cannot be after reference date.' },
|
|
324
|
+
}])[0]
|
|
325
|
+
expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
|
|
326
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
327
|
+
})
|
|
328
|
+
|
|
329
|
+
it('should throw when date reference is not a string in notAfterDate rule', () => {
|
|
330
|
+
expect(() => {
|
|
331
|
+
const invalidRule = generateRules([{
|
|
332
|
+
type: 'notAfterDate',
|
|
333
|
+
options: {
|
|
334
|
+
date: new Date() as unknown as string, // Date object instead of string
|
|
335
|
+
message: 'Date cannot be after reference date.',
|
|
336
|
+
},
|
|
337
|
+
}])[0]
|
|
338
|
+
invalidRule(new Date())
|
|
339
|
+
}).toThrow('Date reference must be a string in DD/MM/YYYY format')
|
|
340
|
+
})
|
|
341
|
+
|
|
342
|
+
it('should validate dateExact rule', () => {
|
|
343
|
+
const rules = generateRules([{
|
|
344
|
+
type: 'dateExact',
|
|
345
|
+
options: {
|
|
346
|
+
date: '15/01/2023', // 15 janvier 2023
|
|
347
|
+
message: 'Date must be exactly the reference date.',
|
|
348
|
+
},
|
|
349
|
+
}])
|
|
350
|
+
const rule = rules[0]
|
|
351
|
+
|
|
352
|
+
// 14 janvier 2023 n'est pas la date exacte
|
|
353
|
+
expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date must be exactly the reference date.' })
|
|
354
|
+
// 15 janvier 2023 est la date exacte
|
|
355
|
+
expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
|
|
356
|
+
// 16 janvier 2023 n'est pas la date exacte
|
|
357
|
+
expect(rule(new Date(2023, 0, 16))).toEqual({ error: 'Date must be exactly the reference date.' })
|
|
358
|
+
// Test avec une date invalide
|
|
359
|
+
expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
|
|
360
|
+
// Test sans option date
|
|
361
|
+
const ruleWithoutDate = generateRules([{
|
|
362
|
+
type: 'dateExact',
|
|
363
|
+
options: { message: 'Date must be exactly the reference date.' },
|
|
364
|
+
}])[0]
|
|
365
|
+
expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
|
|
366
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
367
|
+
})
|
|
368
|
+
|
|
369
|
+
it('should throw when date reference is not a string in dateExact rule', () => {
|
|
370
|
+
expect(() => {
|
|
371
|
+
const invalidRule = generateRules([{
|
|
372
|
+
type: 'dateExact',
|
|
373
|
+
options: {
|
|
374
|
+
date: new Date() as unknown as string, // Date object instead of string
|
|
375
|
+
message: 'Date must be exactly the reference date.',
|
|
376
|
+
},
|
|
377
|
+
}])[0]
|
|
378
|
+
invalidRule(new Date())
|
|
379
|
+
}).toThrow('Date reference must be a string in DD/MM/YYYY format')
|
|
72
380
|
})
|
|
73
381
|
|
|
74
382
|
it('should validate custom rule', () => {
|
|
75
383
|
const rules = generateRules([{
|
|
76
384
|
type: 'custom',
|
|
77
|
-
options: { validate: value => value === 'valid', message: 'Custom validation failed.' },
|
|
385
|
+
options: { validate: (value: unknown) => value === 'valid', message: 'Custom validation failed.' },
|
|
78
386
|
}])
|
|
79
387
|
const rule = rules[0]
|
|
80
388
|
|
|
81
389
|
expect(rule('invalid')).toEqual({ error: 'Custom validation failed.' })
|
|
82
390
|
expect(rule('valid')).toEqual({ success: 'Le champ est valide.' })
|
|
391
|
+
expect(rule('')).toEqual({}) // Empty string should be ignored
|
|
392
|
+
|
|
393
|
+
// Test avec un message personnalisé
|
|
394
|
+
const customMessageRule = generateRules([{
|
|
395
|
+
type: 'custom',
|
|
396
|
+
options: { validate: (value: unknown) => value === 'valid' ? true : 'Custom error message' },
|
|
397
|
+
}])[0]
|
|
398
|
+
expect(customMessageRule('invalid')).toEqual({ error: 'Custom error message' })
|
|
399
|
+
})
|
|
400
|
+
|
|
401
|
+
it('should handle warning mode instead of error', () => {
|
|
402
|
+
const rules = generateRules([{
|
|
403
|
+
type: 'required',
|
|
404
|
+
options: {
|
|
405
|
+
message: 'This field is required.',
|
|
406
|
+
isWarning: true,
|
|
407
|
+
},
|
|
408
|
+
}])
|
|
409
|
+
const rule = rules[0]
|
|
410
|
+
|
|
411
|
+
expect(rule('')).toEqual({ warning: 'This field is required.' })
|
|
412
|
+
|
|
413
|
+
// Test avec un message d'avertissement personnalisé
|
|
414
|
+
const warningMessageRule = generateRules([{
|
|
415
|
+
type: 'required',
|
|
416
|
+
options: {
|
|
417
|
+
warningMessage: 'Warning: this field should be filled.',
|
|
418
|
+
isWarning: true,
|
|
419
|
+
},
|
|
420
|
+
}])[0]
|
|
421
|
+
expect(warningMessageRule('')).toEqual({ warning: 'Warning: this field should be filled.' })
|
|
422
|
+
})
|
|
423
|
+
|
|
424
|
+
it('should handle custom field identifiers', () => {
|
|
425
|
+
const rules = generateRules([{
|
|
426
|
+
type: 'required',
|
|
427
|
+
options: {
|
|
428
|
+
fieldName: 'Email',
|
|
429
|
+
},
|
|
430
|
+
}])
|
|
431
|
+
const rule = rules[0]
|
|
432
|
+
|
|
433
|
+
expect(rule('')).toEqual({ error: 'Vous devez renseigner Email.' })
|
|
434
|
+
|
|
435
|
+
const fieldIdentifierRule = generateRules([{
|
|
436
|
+
type: 'required',
|
|
437
|
+
options: {
|
|
438
|
+
fieldIdentifier: 'l\'adresse email',
|
|
439
|
+
},
|
|
440
|
+
}])[0]
|
|
441
|
+
expect(fieldIdentifierRule('')).toEqual({ error: 'Vous devez renseigner l\'adresse email.' })
|
|
442
|
+
})
|
|
443
|
+
|
|
444
|
+
it('should handle success messages', () => {
|
|
445
|
+
const rules = generateRules([{
|
|
446
|
+
type: 'required',
|
|
447
|
+
options: {
|
|
448
|
+
successMessage: 'Field is valid!',
|
|
449
|
+
},
|
|
450
|
+
}])
|
|
451
|
+
const rule = rules[0]
|
|
452
|
+
|
|
453
|
+
expect(rule('value')).toEqual({ success: 'Field is valid!' })
|
|
454
|
+
})
|
|
455
|
+
|
|
456
|
+
it('should handle invalid rule types', () => {
|
|
457
|
+
const rules = generateRules([{
|
|
458
|
+
type: 'invalidRuleType',
|
|
459
|
+
options: { message: 'This should show an error.' },
|
|
460
|
+
}])
|
|
461
|
+
const rule = rules[0]
|
|
462
|
+
|
|
463
|
+
expect(rule('any value')).toEqual({ error: 'La règle spécifiée pour ce champ n\'existe pas.' })
|
|
83
464
|
})
|
|
84
465
|
})
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Regular expressions
|
|
2
|
+
export const EMAIL_REGEXP = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
|
|
3
|
+
|
|
1
4
|
export type ValidationResult = {
|
|
2
5
|
success?: string
|
|
3
6
|
error?: string
|
|
@@ -100,7 +103,7 @@ export function useFieldValidation() {
|
|
|
100
103
|
|
|
101
104
|
const baseMessages = {
|
|
102
105
|
success: options.successMessage || 'Le champ est valide.',
|
|
103
|
-
error: options.message || `Validation
|
|
106
|
+
error: options.message || `Validation pour ${identifier}.`,
|
|
104
107
|
warning: options.warningMessage || `Attention : ${identifier} peut contenir une erreur.`,
|
|
105
108
|
}
|
|
106
109
|
|
|
@@ -154,7 +157,7 @@ export function useFieldValidation() {
|
|
|
154
157
|
|
|
155
158
|
case 'email':
|
|
156
159
|
return createValidationResult(
|
|
157
|
-
typeof value === 'string' &&
|
|
160
|
+
typeof value === 'string' && EMAIL_REGEXP.test(value),
|
|
158
161
|
options.message || options.warningMessage || `${identifier} doit être un email valide.`,
|
|
159
162
|
)
|
|
160
163
|
|
|
@@ -28,8 +28,8 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
|
|
|
28
28
|
return slugify(name, { lower: true })
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
function getChips(
|
|
32
|
-
const { value, formatChip } =
|
|
31
|
+
function getChips(filter: FilterItem): ChipItem[] {
|
|
32
|
+
const { value, formatChip } = filter
|
|
33
33
|
|
|
34
34
|
if (value !== undefined && formatChip) {
|
|
35
35
|
return formatChip(value)
|
|
@@ -63,7 +63,7 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
return {
|
|
66
|
-
text: item.text || item.value.toString(),
|
|
66
|
+
text: item.title || item.text || item.value.toString(),
|
|
67
67
|
value: item,
|
|
68
68
|
}
|
|
69
69
|
})
|
|
@@ -92,7 +92,8 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
|
|
|
92
92
|
return Object.keys(typedValue).map((key) => {
|
|
93
93
|
// Use text property if it exists, else use value property or default to key value
|
|
94
94
|
const text
|
|
95
|
-
= typedValue[key].
|
|
95
|
+
= typedValue[key].title
|
|
96
|
+
|| typedValue[key].text
|
|
96
97
|
|| typedValue[key].value?.toString()
|
|
97
98
|
|| typedValue[key].toString()
|
|
98
99
|
|