@cnamts/synapse 1.0.26 → 1.0.27
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/{AutocompleteFilter-BPR-a55G.js → AutocompleteFilter-C9eLKyW8.js} +3 -3
- package/dist/{DateFilter-CknrJWs2.js → DateFilter-y-GLkAkn.js} +8 -8
- package/dist/{NumberFilter-DJ-yNlzv.js → NumberFilter-DN6hIBS7.js} +1 -1
- package/dist/{PeriodFilter-CiB5Oa9Z.js → PeriodFilter-MoUUp9qS.js} +1 -1
- package/dist/{SelectFilter-EiafX97M.js → SelectFilter-bCbrdLmu.js} +1 -1
- package/dist/{TextFilter-BzOmpdxj.js → TextFilter-CvjgEaoM.js} +4 -4
- package/dist/apLightTheme2026-ug4Y23ns.js +611 -0
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2369 -353
- package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +18 -0
- package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +1 -1
- package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +3 -1
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +9 -10
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -0
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +15 -0
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +3 -3
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +3 -3
- package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +20 -38
- package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +6 -6
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +147 -136
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +62 -54
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +27 -24
- package/dist/components/DatePicker/composables/index.d.ts +1 -0
- package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
- package/dist/components/MonthPicker/MonthPicker.d.ts +23 -23
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +23 -23
- package/dist/components/NirField/NirField.d.ts +56 -56
- package/dist/components/PasswordField/PasswordField.d.ts +3 -3
- package/dist/components/PeriodField/PeriodField.d.ts +236 -212
- package/dist/components/PhoneField/PhoneField.d.ts +23 -23
- package/dist/components/SyTextArea/SyTextArea.d.ts +25 -15
- package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
- package/dist/components/SyTextArea/locales.d.ts +1 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +1 -0
- package/dist/components/Tables/SyTable/SyTable.d.ts +1 -0
- package/dist/components/Tables/common/SyTablePagination.d.ts +25 -25
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
- package/dist/composables/unifyValidation/useValidation.d.ts +16 -14
- package/dist/design-system-v3.js +81 -80
- package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
- package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
- package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +53 -100
- package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
- package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
- package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
- package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
- package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -101
- package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
- package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
- package/dist/designTokens/tokens/pa/paLightTheme.d.ts +53 -97
- package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
- package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
- package/dist/main-CI6Q9nmO.js +39234 -0
- package/dist/synapse.css +1 -1
- package/dist/vuetifyConfig.js +208 -72
- package/package.json +4 -2
- package/src/assets/overrides/_icons.scss +5 -4
- package/src/assets/overrides/_otp.scss +4 -4
- package/src/assets/overrides/_typography.scss +2 -1
- package/src/assets/overrides/_utilities.scss +1 -42
- package/src/components/ChipList/ChipList.vue +30 -18
- package/src/components/ChipList/tests/chipList.spec.ts +4 -4
- package/src/components/CopyBtn/CopyBtn.vue +2 -2
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
- package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
- package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +182 -218
- package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +761 -1
- package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
- package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
- package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +1029 -0
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +9 -491
- package/src/components/Customs/Selects/SySelect/SySelect.vue +46 -79
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
- package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +196 -0
- package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1026 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +2 -2
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +8 -8
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
- package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
- package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -200
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +82 -127
- package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
- package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
- package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +773 -0
- package/src/components/Customs/SyTabs/config.ts +3 -3
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
- package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +10 -29
- package/src/components/Customs/SyTextField/SyTextField.vue +23 -15
- package/src/components/DataList/DataList.stories.ts +1 -1
- package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +37 -142
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +47 -66
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +206 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +129 -54
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
- package/src/components/DatePicker/composables/index.ts +1 -0
- package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
- package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
- package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
- package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
- package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
- package/src/components/DialogBox/DialogBox.vue +1 -1
- package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
- package/src/components/FileUpload/FileUpload.vue +2 -2
- package/src/components/FileUpload/FileUploadContent.vue +1 -1
- package/src/components/FilterInline/FilterInline.mdx +2 -2
- package/src/components/FilterSideBar/FilterSideBar.stories.ts +1 -1
- package/src/components/FilterSideBar/FilterSideBar.vue +2 -2
- package/src/components/FooterBar/FooterBar.vue +7 -7
- package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
- package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
- package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
- package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
- package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
- package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
- package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
- package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
- package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
- package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
- package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
- package/src/components/NirField/NirField.vue +3 -3
- package/src/components/NotificationBar/Notification/Notification.vue +12 -12
- package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
- package/src/components/PaginatedTable/Pagination.vue +2 -2
- package/src/components/PasswordField/PasswordField.vue +8 -8
- package/src/components/PasswordField/tests/PasswordField.spec.ts +3 -3
- package/src/components/RangeField/RangeSlider/RangeSlider.vue +2 -2
- package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
- package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
- package/src/components/SubHeader/SubHeader.vue +1 -1
- package/src/components/SyAlert/SyAlert.vue +23 -23
- package/src/components/SyTextArea/SyTextArea.stories.ts +177 -131
- package/src/components/SyTextArea/SyTextArea.vue +235 -83
- package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
- package/src/components/SyTextArea/locales.ts +1 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +449 -1
- package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
- package/src/components/SyTextArea/validation/Validation.stories.ts +856 -0
- package/src/components/TableToolbar/TableToolbar.vue +6 -6
- package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -1
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
- package/src/components/Tables/SyTable/SyTable.vue +2 -1
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
- package/src/components/Tables/common/TableHeader.vue +2 -2
- package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
- package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
- package/src/components/Tables/common/tableStyles.scss +6 -6
- package/src/components/Tables/common/types.ts +2 -0
- package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +2 -0
- package/src/components/index.ts +1 -0
- package/src/composables/date/tests/useDateFormatDayjs.spec.ts +31 -0
- package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
- package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
- package/src/composables/tests/useError.spec.ts +30 -0
- package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
- package/src/composables/unifyValidation/documentationValidationProps.ts +5 -5
- package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
- package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +30 -0
- package/src/composables/unifyValidation/tests/useValidation.spec.ts +6 -2
- package/src/composables/unifyValidation/useCustomValidation.ts +19 -9
- package/src/composables/unifyValidation/useValidation.ts +18 -21
- package/src/composables/useFilterable/useFilterable.spec.ts +42 -0
- package/src/composables/useFilterable/useFilterable.ts +11 -7
- package/src/composables/useFormFieldErrorHandling.ts +2 -2
- package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
- package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
- package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
- package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
- package/src/designTokens/tokens/amelipro/apLightTheme.ts +72 -103
- package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
- package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
- package/src/designTokens/tokens/baseTokens.ts +232 -0
- package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
- package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
- package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -104
- package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
- package/src/designTokens/tokens/pa/paLightTheme.ts +73 -99
- package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
- package/src/designTokens/tokens/semanticTokens.ts +114 -0
- package/src/stories/Components/Components.stories.ts +7 -3
- package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
- package/src/stories/DesignTokens/Colors.mdx +6 -8
- package/src/stories/DesignTokens/colors.stories.ts +244 -1081
- package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
- package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
- package/src/utils/tests/insertAt.spec.ts +44 -0
- package/dist/apLightTheme-DS0Uy44H.js +0 -954
- package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +0 -1
- package/dist/main-BsJ9ec3i.js +0 -38954
- package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
- package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
- package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
- package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
- package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
- package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
- package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
- package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
- package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
- package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
- package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
- package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
- /package/src/components/RatingPicker/tests/{RatingPicker.a11y.spect.ts → RatingPicker.a11y.spec.ts} +0 -0
|
@@ -9,9 +9,9 @@ export const config = {
|
|
|
9
9
|
'show-arrows': true,
|
|
10
10
|
},
|
|
11
11
|
tab: {
|
|
12
|
-
'base-color': 'rgb(var(--v-theme-
|
|
13
|
-
'active-color': 'rgb(var(--v-theme-
|
|
14
|
-
'slider-color': 'rgb(var(--v-theme-
|
|
12
|
+
'base-color': 'rgb(var(--v-theme-primary))',
|
|
13
|
+
'active-color': 'rgb(var(--v-theme-primary))',
|
|
14
|
+
'slider-color': 'rgb(var(--v-theme-primary))',
|
|
15
15
|
'ripple': false,
|
|
16
16
|
},
|
|
17
17
|
}
|
|
@@ -450,6 +450,271 @@ describe('SyTabs', () => {
|
|
|
450
450
|
})
|
|
451
451
|
})
|
|
452
452
|
|
|
453
|
+
// Tests items désactivés avec navigation (branches template lignes 444-504)
|
|
454
|
+
describe('Items désactivés en mode navigation', () => {
|
|
455
|
+
it('rend un <button> désactivé pour un item avec to et disabled', () => {
|
|
456
|
+
const wrapper = createWrapper({
|
|
457
|
+
props: {
|
|
458
|
+
...defaultMountOptions.props,
|
|
459
|
+
items: [
|
|
460
|
+
{ label: 'Nav 1', value: 'nav1', to: '/path-1' },
|
|
461
|
+
{ label: 'Désactivé', value: 'nav2', to: '/path-2', disabled: true },
|
|
462
|
+
],
|
|
463
|
+
},
|
|
464
|
+
})
|
|
465
|
+
|
|
466
|
+
const buttons = wrapper.findAll('.sy-tabs__button')
|
|
467
|
+
const disabledBtn = buttons.find(b => b.attributes('disabled') !== undefined)
|
|
468
|
+
expect(disabledBtn).toBeDefined()
|
|
469
|
+
expect(disabledBtn!.element.tagName).toBe('BUTTON')
|
|
470
|
+
})
|
|
471
|
+
|
|
472
|
+
it('rend un <button> désactivé pour un item avec href et disabled', () => {
|
|
473
|
+
const wrapper = createWrapper({
|
|
474
|
+
props: {
|
|
475
|
+
...defaultMountOptions.props,
|
|
476
|
+
items: [
|
|
477
|
+
{ label: 'Externe', value: 'ext', href: 'https://example.com', disabled: true },
|
|
478
|
+
],
|
|
479
|
+
},
|
|
480
|
+
})
|
|
481
|
+
|
|
482
|
+
const btn = wrapper.find('.sy-tabs__button')
|
|
483
|
+
expect(btn.element.tagName).toBe('BUTTON')
|
|
484
|
+
expect(btn.attributes('disabled')).toBeDefined()
|
|
485
|
+
expect(btn.attributes('aria-disabled')).toBe('true')
|
|
486
|
+
})
|
|
487
|
+
|
|
488
|
+
it('rend un <a> pour un item avec href non désactivé', () => {
|
|
489
|
+
const wrapper = createWrapper({
|
|
490
|
+
props: {
|
|
491
|
+
...defaultMountOptions.props,
|
|
492
|
+
items: [
|
|
493
|
+
{ label: 'Externe', value: 'ext', href: 'https://example.com' },
|
|
494
|
+
],
|
|
495
|
+
},
|
|
496
|
+
})
|
|
497
|
+
|
|
498
|
+
const link = wrapper.find('.sy-tabs__button')
|
|
499
|
+
expect(link.element.tagName).toBe('A')
|
|
500
|
+
expect(link.attributes('href')).toBe('https://example.com')
|
|
501
|
+
})
|
|
502
|
+
|
|
503
|
+
it('ne change pas d\'onglet au clic sur un item désactivé (button)', async () => {
|
|
504
|
+
const wrapper = createWrapper({
|
|
505
|
+
props: {
|
|
506
|
+
...defaultMountOptions.props,
|
|
507
|
+
items: [
|
|
508
|
+
{ label: 'Tab 1', value: 'tab1', content: 'Contenu 1' },
|
|
509
|
+
{ label: 'Désactivé', value: 'tab2', content: '', disabled: true },
|
|
510
|
+
],
|
|
511
|
+
},
|
|
512
|
+
})
|
|
513
|
+
|
|
514
|
+
const vm = wrapper.vm as unknown as { activeItemIndex: number }
|
|
515
|
+
expect(vm.activeItemIndex).toBe(0)
|
|
516
|
+
|
|
517
|
+
const disabledBtn = wrapper.findAll('.sy-tabs__button')[1]!
|
|
518
|
+
await disabledBtn.trigger('click')
|
|
519
|
+
|
|
520
|
+
expect(vm.activeItemIndex).toBe(0)
|
|
521
|
+
})
|
|
522
|
+
})
|
|
523
|
+
|
|
524
|
+
// Tests Escape key (setupAccessibilityFeatures)
|
|
525
|
+
describe('Escape key', () => {
|
|
526
|
+
it('remet focusedItemIndex à -1 sur Escape quand focus >= 0', async () => {
|
|
527
|
+
const wrapper = createWrapper()
|
|
528
|
+
const vm = wrapper.vm as unknown as { focusedItemIndex: number }
|
|
529
|
+
|
|
530
|
+
vm.focusedItemIndex = 1
|
|
531
|
+
|
|
532
|
+
window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }))
|
|
533
|
+
await nextTick()
|
|
534
|
+
|
|
535
|
+
expect(vm.focusedItemIndex).toBe(-1)
|
|
536
|
+
})
|
|
537
|
+
|
|
538
|
+
it('ne fait rien sur Escape quand focusedItemIndex est -1', async () => {
|
|
539
|
+
const wrapper = createWrapper()
|
|
540
|
+
const vm = wrapper.vm as unknown as { focusedItemIndex: number }
|
|
541
|
+
|
|
542
|
+
vm.focusedItemIndex = -1
|
|
543
|
+
window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }))
|
|
544
|
+
await nextTick()
|
|
545
|
+
|
|
546
|
+
expect(vm.focusedItemIndex).toBe(-1)
|
|
547
|
+
})
|
|
548
|
+
|
|
549
|
+
it('retire l\'écouteur keydown au démontage', () => {
|
|
550
|
+
const removeSpy = vi.spyOn(window, 'removeEventListener')
|
|
551
|
+
const wrapper = createWrapper()
|
|
552
|
+
wrapper.unmount()
|
|
553
|
+
|
|
554
|
+
expect(removeSpy).toHaveBeenCalledWith('keydown', expect.any(Function))
|
|
555
|
+
})
|
|
556
|
+
})
|
|
557
|
+
|
|
558
|
+
// Tests lazy prop
|
|
559
|
+
describe('Lazy loading', () => {
|
|
560
|
+
it('ne rend le panneau que quand il devient actif avec lazy=true', async () => {
|
|
561
|
+
const wrapper = createWrapper({
|
|
562
|
+
props: {
|
|
563
|
+
...defaultMountOptions.props,
|
|
564
|
+
lazy: true,
|
|
565
|
+
},
|
|
566
|
+
})
|
|
567
|
+
|
|
568
|
+
const secondTab = wrapper.findAll('.sy-tabs__button')[1]!
|
|
569
|
+
await secondTab.trigger('click')
|
|
570
|
+
await nextTick()
|
|
571
|
+
|
|
572
|
+
expect(wrapper.find('#panel-1').exists()).toBe(true)
|
|
573
|
+
})
|
|
574
|
+
})
|
|
575
|
+
|
|
576
|
+
// Tests onMounted branches
|
|
577
|
+
describe('onMounted — branches', () => {
|
|
578
|
+
it('ne plante pas avec items vides', () => {
|
|
579
|
+
expect(() => createWrapper({
|
|
580
|
+
props: { items: [] },
|
|
581
|
+
})).not.toThrow()
|
|
582
|
+
})
|
|
583
|
+
|
|
584
|
+
it('utilise pathname pour trouver l\'index actif si modelValue est un nombre', async () => {
|
|
585
|
+
Object.defineProperty(window, 'location', {
|
|
586
|
+
value: { ...window.location, pathname: '/tab2' },
|
|
587
|
+
writable: true,
|
|
588
|
+
})
|
|
589
|
+
|
|
590
|
+
const items = [
|
|
591
|
+
{ label: 'Tab 1', value: 'tab1', content: 'C1', to: '/tab1' },
|
|
592
|
+
{ label: 'Tab 2', value: 'tab2', content: 'C2', to: '/tab2' },
|
|
593
|
+
]
|
|
594
|
+
const wrapper = createWrapper({
|
|
595
|
+
props: { items, modelValue: 0 },
|
|
596
|
+
})
|
|
597
|
+
await nextTick()
|
|
598
|
+
|
|
599
|
+
const vm = wrapper.vm as unknown as { activeItemIndex: number }
|
|
600
|
+
expect(vm.activeItemIndex).toBe(1)
|
|
601
|
+
|
|
602
|
+
Object.defineProperty(window, 'location', {
|
|
603
|
+
value: { ...window.location, pathname: '/' },
|
|
604
|
+
writable: true,
|
|
605
|
+
})
|
|
606
|
+
})
|
|
607
|
+
})
|
|
608
|
+
|
|
609
|
+
// Tests find*EnabledTab avec tous désactivés
|
|
610
|
+
describe('Navigation avec tous les onglets désactivés', () => {
|
|
611
|
+
it('findNextEnabledTab retourne -1 si tous désactivés', async () => {
|
|
612
|
+
const allDisabled = [
|
|
613
|
+
{ label: 'A', value: 'a', content: '', disabled: true },
|
|
614
|
+
{ label: 'B', value: 'b', content: '', disabled: true },
|
|
615
|
+
]
|
|
616
|
+
const wrapper = createWrapper({ props: { items: allDisabled } })
|
|
617
|
+
const vm = wrapper.vm as unknown as {
|
|
618
|
+
findNextEnabledTab: (i: number) => number
|
|
619
|
+
}
|
|
620
|
+
expect(vm.findNextEnabledTab(0)).toBe(-1)
|
|
621
|
+
})
|
|
622
|
+
|
|
623
|
+
it('findPreviousEnabledTab retourne -1 si tous désactivés', () => {
|
|
624
|
+
const allDisabled = [
|
|
625
|
+
{ label: 'A', value: 'a', content: '', disabled: true },
|
|
626
|
+
{ label: 'B', value: 'b', content: '', disabled: true },
|
|
627
|
+
]
|
|
628
|
+
const wrapper = createWrapper({ props: { items: allDisabled } })
|
|
629
|
+
const vm = wrapper.vm as unknown as {
|
|
630
|
+
findPreviousEnabledTab: (i: number) => number
|
|
631
|
+
}
|
|
632
|
+
expect(vm.findPreviousEnabledTab(0)).toBe(-1)
|
|
633
|
+
})
|
|
634
|
+
|
|
635
|
+
it('findFirstEnabledTab retourne -1 si tous désactivés', () => {
|
|
636
|
+
const allDisabled = [
|
|
637
|
+
{ label: 'A', value: 'a', content: '', disabled: true },
|
|
638
|
+
]
|
|
639
|
+
const wrapper = createWrapper({ props: { items: allDisabled } })
|
|
640
|
+
const vm = wrapper.vm as unknown as {
|
|
641
|
+
findFirstEnabledTab: () => number
|
|
642
|
+
}
|
|
643
|
+
expect(vm.findFirstEnabledTab()).toBe(-1)
|
|
644
|
+
})
|
|
645
|
+
|
|
646
|
+
it('findLastEnabledTab retourne -1 si tous désactivés', () => {
|
|
647
|
+
const allDisabled = [
|
|
648
|
+
{ label: 'A', value: 'a', content: '', disabled: true },
|
|
649
|
+
]
|
|
650
|
+
const wrapper = createWrapper({ props: { items: allDisabled } })
|
|
651
|
+
const vm = wrapper.vm as unknown as {
|
|
652
|
+
findLastEnabledTab: () => number
|
|
653
|
+
}
|
|
654
|
+
expect(vm.findLastEnabledTab()).toBe(-1)
|
|
655
|
+
})
|
|
656
|
+
|
|
657
|
+
it('handleArrowNavigation ne fait rien si items est vide', () => {
|
|
658
|
+
const wrapper = createWrapper({ props: { items: [] } })
|
|
659
|
+
const vm = wrapper.vm as unknown as {
|
|
660
|
+
handleArrowNavigation: (event: KeyboardEvent, index: number) => void
|
|
661
|
+
}
|
|
662
|
+
const event = new KeyboardEvent('keydown', { key: 'ArrowRight' })
|
|
663
|
+
event.preventDefault = vi.fn()
|
|
664
|
+
expect(() => vm.handleArrowNavigation(event, 0)).not.toThrow()
|
|
665
|
+
})
|
|
666
|
+
|
|
667
|
+
it('handleArrowNavigation ne fait rien pour une touche non gérée', () => {
|
|
668
|
+
const wrapper = createWrapper()
|
|
669
|
+
const vm = wrapper.vm as unknown as {
|
|
670
|
+
handleArrowNavigation: (event: KeyboardEvent, index: number) => void
|
|
671
|
+
}
|
|
672
|
+
const event = new KeyboardEvent('keydown', { key: 'Tab' })
|
|
673
|
+
expect(() => vm.handleArrowNavigation(event, 0)).not.toThrow()
|
|
674
|
+
expect(wrapper.emitted('update:modelValue')).toBeFalsy()
|
|
675
|
+
})
|
|
676
|
+
})
|
|
677
|
+
|
|
678
|
+
// Tests watcher modelValue
|
|
679
|
+
describe('Watcher modelValue', () => {
|
|
680
|
+
it('ne fait rien si newValue est undefined', async () => {
|
|
681
|
+
const wrapper = createWrapper({
|
|
682
|
+
props: { ...defaultMountOptions.props, modelValue: 1 },
|
|
683
|
+
})
|
|
684
|
+
const vm = wrapper.vm as unknown as { activeItemIndex: number }
|
|
685
|
+
|
|
686
|
+
await wrapper.setProps({ modelValue: undefined })
|
|
687
|
+
await nextTick()
|
|
688
|
+
|
|
689
|
+
expect(vm.activeItemIndex).toBe(1)
|
|
690
|
+
})
|
|
691
|
+
|
|
692
|
+
it('met à jour activeItemIndex via watcher modelValue string', async () => {
|
|
693
|
+
const wrapper = createWrapper({
|
|
694
|
+
props: { ...defaultMountOptions.props, modelValue: 'tab1' },
|
|
695
|
+
})
|
|
696
|
+
const vm = wrapper.vm as unknown as { activeItemIndex: number }
|
|
697
|
+
|
|
698
|
+
await wrapper.setProps({ modelValue: 'tab3' })
|
|
699
|
+
await nextTick()
|
|
700
|
+
|
|
701
|
+
expect(vm.activeItemIndex).toBe(2)
|
|
702
|
+
})
|
|
703
|
+
|
|
704
|
+
it('ne change pas activeItemIndex si modelValue string inconnu', async () => {
|
|
705
|
+
const wrapper = createWrapper({
|
|
706
|
+
props: { ...defaultMountOptions.props, modelValue: 'tab1' },
|
|
707
|
+
})
|
|
708
|
+
const vm = wrapper.vm as unknown as { activeItemIndex: number }
|
|
709
|
+
const before = vm.activeItemIndex
|
|
710
|
+
|
|
711
|
+
await wrapper.setProps({ modelValue: 'unknown-value' })
|
|
712
|
+
await nextTick()
|
|
713
|
+
|
|
714
|
+
expect(vm.activeItemIndex).toBe(before)
|
|
715
|
+
})
|
|
716
|
+
})
|
|
717
|
+
|
|
453
718
|
// Tests avec différentes configurations
|
|
454
719
|
describe('Configurations personnalisées', () => {
|
|
455
720
|
it('doit permettre de personnaliser les options', () => {
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
|
|
2
|
+
import { ref, nextTick, defineComponent } from 'vue'
|
|
3
|
+
import { mount } from '@vue/test-utils'
|
|
4
|
+
import { useTabTransition } from '../useTabTransition'
|
|
5
|
+
|
|
6
|
+
function makeTablistEl(activeLeft = 50, activeWidth = 120, containerLeft = 10): HTMLElement {
|
|
7
|
+
const container = document.createElement('div')
|
|
8
|
+
const activeBtn = document.createElement('button')
|
|
9
|
+
activeBtn.classList.add('sy-tabs__button--active')
|
|
10
|
+
|
|
11
|
+
vi.spyOn(activeBtn, 'getBoundingClientRect').mockReturnValue({
|
|
12
|
+
left: activeLeft,
|
|
13
|
+
width: activeWidth,
|
|
14
|
+
top: 0,
|
|
15
|
+
right: activeLeft + activeWidth,
|
|
16
|
+
bottom: 0,
|
|
17
|
+
height: 0,
|
|
18
|
+
x: activeLeft,
|
|
19
|
+
y: 0,
|
|
20
|
+
toJSON: () => ({}),
|
|
21
|
+
} as DOMRect)
|
|
22
|
+
|
|
23
|
+
vi.spyOn(container, 'getBoundingClientRect').mockReturnValue({
|
|
24
|
+
left: containerLeft,
|
|
25
|
+
width: 500,
|
|
26
|
+
top: 0,
|
|
27
|
+
right: containerLeft + 500,
|
|
28
|
+
bottom: 0,
|
|
29
|
+
height: 0,
|
|
30
|
+
x: containerLeft,
|
|
31
|
+
y: 0,
|
|
32
|
+
toJSON: () => ({}),
|
|
33
|
+
} as DOMRect)
|
|
34
|
+
|
|
35
|
+
container.appendChild(activeBtn)
|
|
36
|
+
return container
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function makeComponent(tablistEl: HTMLElement | null, initialIndex = 0) {
|
|
40
|
+
return defineComponent({
|
|
41
|
+
setup() {
|
|
42
|
+
const tablist = ref<HTMLElement | null>(tablistEl)
|
|
43
|
+
const activeItemIndex = ref(initialIndex)
|
|
44
|
+
const result = useTabTransition(tablist, activeItemIndex)
|
|
45
|
+
return { ...result, activeItemIndex, tablist }
|
|
46
|
+
},
|
|
47
|
+
template: '<div />',
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
describe('useTabTransition', () => {
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
vi.useFakeTimers()
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
afterEach(() => {
|
|
57
|
+
vi.restoreAllMocks()
|
|
58
|
+
vi.useRealTimers()
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
describe('positionIndicator — sans activeTab', () => {
|
|
62
|
+
it('remet xPosition et width à 0 si tablist est null', async () => {
|
|
63
|
+
const wrapper = mount(makeComponent(null))
|
|
64
|
+
await nextTick()
|
|
65
|
+
await nextTick()
|
|
66
|
+
|
|
67
|
+
expect(wrapper.vm.xPosition).toBe(0)
|
|
68
|
+
expect(wrapper.vm.width).toBe(0)
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('remet xPosition et width à 0 si aucun bouton actif n\'existe', async () => {
|
|
72
|
+
const container = document.createElement('div')
|
|
73
|
+
vi.spyOn(container, 'getBoundingClientRect').mockReturnValue({
|
|
74
|
+
left: 0, width: 500, top: 0, right: 500, bottom: 0, height: 0, x: 0, y: 0, toJSON: () => ({}),
|
|
75
|
+
} as DOMRect)
|
|
76
|
+
|
|
77
|
+
const wrapper = mount(makeComponent(container))
|
|
78
|
+
await nextTick()
|
|
79
|
+
await nextTick()
|
|
80
|
+
|
|
81
|
+
expect(wrapper.vm.xPosition).toBe(0)
|
|
82
|
+
expect(wrapper.vm.width).toBe(0)
|
|
83
|
+
})
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
describe('positionIndicator — avec activeTab', () => {
|
|
87
|
+
it('calcule xPosition = activeLeft - containerLeft', async () => {
|
|
88
|
+
const el = makeTablistEl(50, 120, 10)
|
|
89
|
+
const wrapper = mount(makeComponent(el))
|
|
90
|
+
await nextTick()
|
|
91
|
+
await nextTick()
|
|
92
|
+
|
|
93
|
+
expect(wrapper.vm.xPosition).toBe(40) // 50 - 10
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('calcule width = activeTab.width', async () => {
|
|
97
|
+
const el = makeTablistEl(50, 120, 10)
|
|
98
|
+
const wrapper = mount(makeComponent(el))
|
|
99
|
+
await nextTick()
|
|
100
|
+
await nextTick()
|
|
101
|
+
|
|
102
|
+
expect(wrapper.vm.width).toBe(120)
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('met à jour la position quand activeItemIndex change', async () => {
|
|
106
|
+
const container = document.createElement('div')
|
|
107
|
+
const btn1 = document.createElement('button')
|
|
108
|
+
const btn2 = document.createElement('button')
|
|
109
|
+
btn1.classList.add('sy-tabs__button--active')
|
|
110
|
+
|
|
111
|
+
vi.spyOn(btn1, 'getBoundingClientRect').mockReturnValue({
|
|
112
|
+
left: 50, width: 100, top: 0, right: 150, bottom: 0, height: 0, x: 50, y: 0, toJSON: () => ({}),
|
|
113
|
+
} as DOMRect)
|
|
114
|
+
vi.spyOn(btn2, 'getBoundingClientRect').mockReturnValue({
|
|
115
|
+
left: 200, width: 150, top: 0, right: 350, bottom: 0, height: 0, x: 200, y: 0, toJSON: () => ({}),
|
|
116
|
+
} as DOMRect)
|
|
117
|
+
vi.spyOn(container, 'getBoundingClientRect').mockReturnValue({
|
|
118
|
+
left: 0, width: 500, top: 0, right: 500, bottom: 0, height: 0, x: 0, y: 0, toJSON: () => ({}),
|
|
119
|
+
} as DOMRect)
|
|
120
|
+
|
|
121
|
+
container.appendChild(btn1)
|
|
122
|
+
container.appendChild(btn2)
|
|
123
|
+
|
|
124
|
+
const wrapper = mount(makeComponent(container, 0))
|
|
125
|
+
await nextTick()
|
|
126
|
+
await nextTick()
|
|
127
|
+
|
|
128
|
+
expect(wrapper.vm.xPosition).toBe(50)
|
|
129
|
+
|
|
130
|
+
btn1.classList.remove('sy-tabs__button--active')
|
|
131
|
+
btn2.classList.add('sy-tabs__button--active')
|
|
132
|
+
wrapper.vm.activeItemIndex = 1
|
|
133
|
+
await nextTick()
|
|
134
|
+
await nextTick()
|
|
135
|
+
|
|
136
|
+
expect(wrapper.vm.xPosition).toBe(200)
|
|
137
|
+
expect(wrapper.vm.width).toBe(150)
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
describe('resize listener', () => {
|
|
142
|
+
it('ajoute un écouteur resize au montage', () => {
|
|
143
|
+
const addSpy = vi.spyOn(window, 'addEventListener')
|
|
144
|
+
const el = makeTablistEl()
|
|
145
|
+
mount(makeComponent(el))
|
|
146
|
+
|
|
147
|
+
expect(addSpy).toHaveBeenCalledWith('resize', expect.any(Function))
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
it('retire l\'écouteur resize au démontage', () => {
|
|
151
|
+
const removeSpy = vi.spyOn(window, 'removeEventListener')
|
|
152
|
+
const el = makeTablistEl()
|
|
153
|
+
const wrapper = mount(makeComponent(el))
|
|
154
|
+
|
|
155
|
+
wrapper.unmount()
|
|
156
|
+
|
|
157
|
+
expect(removeSpy).toHaveBeenCalledWith('resize', expect.any(Function))
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
it('recalcule la position lors d\'un événement resize', async () => {
|
|
161
|
+
const el = makeTablistEl(50, 120, 10)
|
|
162
|
+
const wrapper = mount(makeComponent(el))
|
|
163
|
+
await nextTick()
|
|
164
|
+
await nextTick()
|
|
165
|
+
|
|
166
|
+
const btn = el.querySelector('.sy-tabs__button--active') as HTMLButtonElement
|
|
167
|
+
vi.spyOn(btn, 'getBoundingClientRect').mockReturnValue({
|
|
168
|
+
left: 100, width: 200, top: 0, right: 300, bottom: 0, height: 0, x: 100, y: 0, toJSON: () => ({}),
|
|
169
|
+
} as DOMRect)
|
|
170
|
+
|
|
171
|
+
window.dispatchEvent(new Event('resize'))
|
|
172
|
+
await nextTick()
|
|
173
|
+
await nextTick()
|
|
174
|
+
|
|
175
|
+
expect(wrapper.vm.width).toBe(200)
|
|
176
|
+
})
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
describe('valeurs retournées', () => {
|
|
180
|
+
it('expose xPosition et width comme refs réactives', () => {
|
|
181
|
+
const el = makeTablistEl()
|
|
182
|
+
const wrapper = mount(makeComponent(el))
|
|
183
|
+
|
|
184
|
+
expect(wrapper.vm.xPosition).toBeDefined()
|
|
185
|
+
expect(wrapper.vm.width).toBeDefined()
|
|
186
|
+
})
|
|
187
|
+
})
|
|
188
|
+
})
|
|
@@ -1109,19 +1109,22 @@ Cette story montre l'utilisation de la règle \`matchPattern\` pour valider un f
|
|
|
1109
1109
|
}),
|
|
1110
1110
|
}
|
|
1111
1111
|
|
|
1112
|
+
// Persistent value for WithTooltips
|
|
1113
|
+
const withTooltipsValueMain = ref('')
|
|
1114
|
+
|
|
1112
1115
|
export const WithTooltips: Story = {
|
|
1113
1116
|
args: {
|
|
1114
|
-
modelValue: '',
|
|
1115
1117
|
label: 'Champ avec tooltips',
|
|
1116
1118
|
prependTooltip: 'Information à gauche du champ',
|
|
1117
1119
|
appendTooltip: 'Information à droite du champ',
|
|
1118
1120
|
tooltipLocation: 'top',
|
|
1121
|
+
isClearable: true,
|
|
1122
|
+
disableClickButton: true,
|
|
1119
1123
|
},
|
|
1120
1124
|
render: args => ({
|
|
1121
1125
|
components: { SyTextField },
|
|
1122
1126
|
setup() {
|
|
1123
|
-
|
|
1124
|
-
return { args, value }
|
|
1127
|
+
return { args, value: withTooltipsValueMain }
|
|
1125
1128
|
},
|
|
1126
1129
|
template: `
|
|
1127
1130
|
<div>
|
|
@@ -1398,20 +1401,9 @@ export const FormValidation: Story = {
|
|
|
1398
1401
|
</ul>
|
|
1399
1402
|
</div>
|
|
1400
1403
|
|
|
1401
|
-
|
|
1402
|
-
type="submit"
|
|
1403
|
-
style="
|
|
1404
|
-
background-color: #1976d2;
|
|
1405
|
-
color: white;
|
|
1406
|
-
padding: 8px 16px;
|
|
1407
|
-
border: none;
|
|
1408
|
-
border-radius: 4px;
|
|
1409
|
-
cursor: pointer;
|
|
1410
|
-
font-size: 1rem;
|
|
1411
|
-
"
|
|
1412
|
-
>
|
|
1404
|
+
<VBtn type="submit" color="primary">
|
|
1413
1405
|
Soumettre
|
|
1414
|
-
</
|
|
1406
|
+
</VBtn>
|
|
1415
1407
|
</form>
|
|
1416
1408
|
</div>
|
|
1417
1409
|
`,
|
|
@@ -1479,20 +1471,9 @@ export const FormValidation: Story = {
|
|
|
1479
1471
|
</ul>
|
|
1480
1472
|
</div>
|
|
1481
1473
|
|
|
1482
|
-
|
|
1483
|
-
type="submit"
|
|
1484
|
-
style="
|
|
1485
|
-
background-color: #1976d2;
|
|
1486
|
-
color: white;
|
|
1487
|
-
padding: 8px 16px;
|
|
1488
|
-
border: none;
|
|
1489
|
-
border-radius: 4px;
|
|
1490
|
-
cursor: pointer;
|
|
1491
|
-
font-size: 1rem;
|
|
1492
|
-
"
|
|
1493
|
-
>
|
|
1474
|
+
<VBtn type="submit" color="primary">
|
|
1494
1475
|
Soumettre
|
|
1495
|
-
</
|
|
1476
|
+
</VBtn>
|
|
1496
1477
|
</form>
|
|
1497
1478
|
</div>
|
|
1498
1479
|
</div>
|
|
@@ -851,18 +851,22 @@
|
|
|
851
851
|
}
|
|
852
852
|
|
|
853
853
|
:deep(.v-icon__svg) {
|
|
854
|
-
fill: rgb(var(--v-theme-
|
|
854
|
+
fill: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
855
855
|
}
|
|
856
856
|
|
|
857
|
-
:deep(.v-field) {
|
|
857
|
+
:deep(.v-label.v-field-label) {
|
|
858
858
|
color: rgb(var(--v-theme-borderWarning)) !important;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
:deep(.v-field) {
|
|
862
|
+
color: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
859
863
|
|
|
860
864
|
--v-medium-emphasis-opacity: 1;
|
|
861
865
|
|
|
862
866
|
.v-field__outline {
|
|
863
867
|
--v-field-border-opacity: 1;
|
|
864
868
|
|
|
865
|
-
color: rgb(var(--v-theme-
|
|
869
|
+
color: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
866
870
|
}
|
|
867
871
|
}
|
|
868
872
|
|
|
@@ -870,7 +874,7 @@
|
|
|
870
874
|
opacity: 1 !important;
|
|
871
875
|
|
|
872
876
|
.v-messages__message {
|
|
873
|
-
color: rgb(var(--v-theme-
|
|
877
|
+
color: rgb(var(--v-theme-onWarningVariant)) !important;
|
|
874
878
|
}
|
|
875
879
|
}
|
|
876
880
|
}
|
|
@@ -878,7 +882,7 @@
|
|
|
878
882
|
/* stylelint-disable-next-line selector-class-pattern */
|
|
879
883
|
.text-iconBase {
|
|
880
884
|
:deep(.v-icon__svg) {
|
|
881
|
-
fill: rgb(var(--v-theme-
|
|
885
|
+
fill: rgb(var(--v-theme-primary)) !important;
|
|
882
886
|
}
|
|
883
887
|
}
|
|
884
888
|
|
|
@@ -890,16 +894,16 @@
|
|
|
890
894
|
}
|
|
891
895
|
|
|
892
896
|
:deep(.v-icon__svg) {
|
|
893
|
-
fill: rgb(var(--v-theme-
|
|
897
|
+
fill: rgb(var(--v-theme-error)) !important;
|
|
894
898
|
}
|
|
895
899
|
|
|
896
900
|
:deep(.v-field) {
|
|
897
|
-
color: rgb(var(--v-theme-
|
|
901
|
+
color: rgb(var(--v-theme-error)) !important;
|
|
898
902
|
|
|
899
903
|
.v-field__outline {
|
|
900
904
|
--v-field-border-opacity: 1;
|
|
901
905
|
|
|
902
|
-
color: rgb(var(--v-theme-
|
|
906
|
+
color: rgb(var(--v-theme-error)) !important;
|
|
903
907
|
}
|
|
904
908
|
}
|
|
905
909
|
|
|
@@ -907,7 +911,7 @@
|
|
|
907
911
|
opacity: 1 !important;
|
|
908
912
|
|
|
909
913
|
.v-messages__message {
|
|
910
|
-
color: rgb(var(--v-theme-
|
|
914
|
+
color: rgb(var(--v-theme-error)) !important;
|
|
911
915
|
}
|
|
912
916
|
}
|
|
913
917
|
}
|
|
@@ -920,18 +924,22 @@
|
|
|
920
924
|
}
|
|
921
925
|
|
|
922
926
|
:deep(.v-icon__svg) {
|
|
923
|
-
fill: rgb(var(--v-theme-
|
|
927
|
+
fill: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
924
928
|
}
|
|
925
929
|
|
|
926
|
-
:deep(.v-field) {
|
|
930
|
+
:deep(.v-label.v-field-label) {
|
|
927
931
|
color: rgb(var(--v-theme-borderSuccess)) !important;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
:deep(.v-field) {
|
|
935
|
+
color: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
928
936
|
|
|
929
937
|
--v-medium-emphasis-opacity: 1;
|
|
930
938
|
|
|
931
939
|
.v-field__outline {
|
|
932
940
|
--v-field-border-opacity: 1;
|
|
933
941
|
|
|
934
|
-
color: rgb(var(--v-theme-
|
|
942
|
+
color: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
935
943
|
}
|
|
936
944
|
}
|
|
937
945
|
|
|
@@ -939,7 +947,7 @@
|
|
|
939
947
|
opacity: 1 !important;
|
|
940
948
|
|
|
941
949
|
.v-messages__message {
|
|
942
|
-
color: rgb(var(--v-theme-
|
|
950
|
+
color: rgb(var(--v-theme-onSuccessVariant)) !important;
|
|
943
951
|
}
|
|
944
952
|
}
|
|
945
953
|
}
|
|
@@ -950,13 +958,13 @@
|
|
|
950
958
|
}
|
|
951
959
|
|
|
952
960
|
:deep(.v-field--focused .v-field__outline) {
|
|
953
|
-
color: rgb(var(--v-theme-
|
|
961
|
+
color: rgb(var(--v-theme-primary)) !important;
|
|
954
962
|
opacity: 1 !important;
|
|
955
963
|
}
|
|
956
964
|
|
|
957
965
|
:deep(.v-input__prepend .v-icon:focus-visible),
|
|
958
966
|
:deep(.v-input__append .v-icon:focus-visible) {
|
|
959
|
-
outline: 2px solid rgb(var(--v-theme-
|
|
967
|
+
outline: 2px solid rgb(var(--v-theme-primary));
|
|
960
968
|
outline-offset: 2px;
|
|
961
969
|
opacity: 1;
|
|
962
970
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mount } from '@vue/test-utils'
|
|
2
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
3
3
|
|
|
4
4
|
import DataListItem from '../DataListItem.vue'
|
|
5
5
|
|
|
@@ -59,6 +59,7 @@ describe('DataListItem', () => {
|
|
|
59
59
|
})
|
|
60
60
|
|
|
61
61
|
it('renders correctly a value as plain HTML', () => {
|
|
62
|
+
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
62
63
|
const wrapper = mount(DataListItem, {
|
|
63
64
|
props: {
|
|
64
65
|
label: 'Test',
|
|
@@ -66,6 +67,7 @@ describe('DataListItem', () => {
|
|
|
66
67
|
renderHtmlValue: true,
|
|
67
68
|
},
|
|
68
69
|
})
|
|
70
|
+
warnSpy.mockRestore()
|
|
69
71
|
|
|
70
72
|
const elValue = wrapper.find('.sy-data-list-item-value span')
|
|
71
73
|
|