@cnamts/synapse 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{DateFilter-BmRuzQ9Z.js → DateFilter-YWOTbfeL.js} +1 -1
- package/dist/{NumberFilter-CnIPDHqx.js → NumberFilter-DMmMgALM.js} +1 -1
- package/dist/{PeriodFilter-CZwZ8CnQ.js → PeriodFilter-Bok5BHcn.js} +1 -1
- package/dist/SelectFilter-BKud2WhN.js +136 -0
- package/dist/{TextFilter-DTxZHJwX.js → TextFilter-DvMf2thH.js} +1 -1
- package/dist/components/Accordion/Accordion.d.ts +2 -1
- package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
- package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
- package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
- package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
- package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1585 -1452
- package/dist/components/DatePicker/DatePicker/DatePicker.d.ts +16 -2
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +3 -1
- package/dist/components/DatePicker/composables/index.d.ts +2 -0
- package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
- package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
- package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +1 -1
- package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +3 -0
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +1 -0
- package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +5 -2
- package/dist/components/NirField/NirField.d.ts +7 -3
- package/dist/components/NirField/nirValidation.d.ts +1 -1
- package/dist/components/PasswordField/PasswordField.d.ts +2 -0
- package/dist/components/PeriodField/PeriodField.d.ts +52 -8
- package/dist/components/PhoneField/PhoneField.d.ts +2 -2
- package/dist/components/RangeField/RangeField.d.ts +2 -0
- package/dist/components/SearchListField/SearchListField.d.ts +9 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +2 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +14 -9
- package/dist/components/Tables/SyTable/SyTable.d.ts +12 -7
- package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
- package/dist/components/Tables/common/TableHeader.d.ts +2 -20
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +5 -5
- package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
- package/dist/components/Tables/common/filters/locales.d.ts +4 -0
- package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
- package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
- package/dist/components/Tables/common/locales.d.ts +21 -0
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
- package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
- package/dist/components/Tables/common/tableFilterUtils.d.ts +1 -0
- package/dist/components/Tables/common/tableStorageUtils.d.ts +41 -1
- package/dist/components/Tables/common/tableUtils.d.ts +42 -5
- package/dist/components/Tables/common/types.d.ts +19 -8
- package/dist/components/Tables/common/usePagination.d.ts +22 -0
- package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
- package/dist/components/Tables/common/useTableItems.d.ts +24 -0
- package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
- package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
- package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
- package/dist/components/index.d.ts +8 -6
- package/dist/design-system-v3.js +58 -56
- package/dist/design-system-v3.umd.cjs +22 -22
- package/dist/main-Cx8qG7YR.js +16344 -0
- package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
- package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
- package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
- package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
- package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
- package/src/components/Accordion/Accordion.vue +48 -76
- package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
- package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
- package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
- package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
- package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
- package/src/components/Accordion/composables/useAccordionState.ts +59 -0
- package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
- package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
- package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
- package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
- package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
- package/src/components/Customs/SySelect/SySelect.vue +291 -32
- package/src/components/Customs/SySelect/tests/SySelect.spec.ts +230 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
- package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +241 -31
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +305 -57
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +4 -2
- package/src/components/DatePicker/DatePicker/DatePicker.stories.ts +259 -137
- package/src/components/DatePicker/DatePicker/DatePicker.vue +153 -25
- package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
- package/src/components/DatePicker/DatePicker/{DatePicker.spec.ts → tests/DatePicker.spec.ts} +1 -15
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +24 -14
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +3 -1
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +200 -5
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +241 -31
- package/src/components/DatePicker/composables/index.ts +2 -0
- package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +182 -4
- package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +105 -80
- package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
- package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
- package/src/components/DatePicker/composables/useDateRangeInput.ts +21 -18
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +13 -1
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +84 -20
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +149 -51
- package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
- package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
- package/src/components/ErrorPage/ErrorPage.vue +12 -6
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
- package/src/components/NirField/NirField.mdx +22 -9
- package/src/components/NirField/NirField.stories.ts +26 -2
- package/src/components/NirField/NirField.vue +209 -22
- package/src/components/NirField/nirValidation.ts +17 -3
- package/src/components/NirField/tests/NirField.spec.ts +2 -2
- package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
- package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
- package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
- package/src/components/PasswordField/PasswordField.stories.ts +4 -0
- package/src/components/PasswordField/PasswordField.vue +3 -0
- package/src/components/PeriodField/PeriodField.vue +2 -0
- package/src/components/PhoneField/PhoneField.stories.ts +15 -15
- package/src/components/PhoneField/PhoneField.vue +1 -1
- package/src/components/RangeField/RangeField.stories.ts +9 -0
- package/src/components/RangeField/RangeField.vue +4 -0
- package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
- package/src/components/SearchListField/SearchListField.vue +5 -0
- package/src/components/SyTextArea/SyTextArea.vue +3 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
- package/src/components/Tables/SyServerTable/FilterRules.stories.ts +632 -15
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +15 -5
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +2844 -1377
- package/src/components/Tables/SyServerTable/SyServerTable.vue +155 -66
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +256 -4
- package/src/components/Tables/SyTable/FilterRules.stories.ts +183 -0
- package/src/components/Tables/SyTable/SyTable.mdx +14 -4
- package/src/components/Tables/SyTable/SyTable.stories.ts +1265 -477
- package/src/components/Tables/SyTable/SyTable.vue +152 -72
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +366 -4
- package/src/components/Tables/common/SyTableFilter.vue +3 -56
- package/src/components/Tables/common/SyTablePagination.vue +375 -0
- package/src/components/Tables/common/TableHeader.vue +10 -26
- package/src/components/Tables/common/filters/SelectFilter.vue +131 -22
- package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
- package/src/components/Tables/common/filters/locales.ts +4 -0
- package/src/components/Tables/common/filters/logics/date.ts +12 -0
- package/src/components/Tables/common/filters/logics/number.ts +48 -0
- package/src/components/Tables/common/filters/logics/period.ts +25 -0
- package/src/components/Tables/common/filters/logics/select.ts +27 -0
- package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
- package/src/components/Tables/common/filters/logics/text.ts +62 -0
- package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +11 -11
- package/src/components/Tables/common/locales.ts +24 -0
- package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
- package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
- package/src/components/Tables/common/tableFilterUtils.ts +43 -295
- package/src/components/Tables/common/tableStorageUtils.ts +27 -2
- package/src/components/Tables/common/tableStyles.scss +26 -0
- package/src/components/Tables/common/tableUtils.ts +3 -16
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
- package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
- package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +0 -14
- package/src/components/Tables/common/tests/tableUtils.spec.ts +7 -51
- package/src/components/Tables/common/types.ts +17 -6
- package/src/components/Tables/common/usePagination.ts +83 -0
- package/src/components/Tables/common/useTableCheckbox.ts +58 -0
- package/src/components/Tables/common/useTableHeaders.ts +88 -0
- package/src/components/Tables/common/useTableItems.ts +87 -0
- package/src/components/Tables/common/useTableOptions.ts +93 -0
- package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
- package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
- package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
- package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
- package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
- package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
- package/src/components/index.ts +8 -6
- package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
- package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
- package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
- package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
- package/src/stories/Accessibilite/Introduction.mdx +258 -18
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
- package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
- package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
- package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
- package/src/stories/Demarrer/Accueil.stories.ts +20 -5
- package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
- package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
- package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
- package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
- package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
- package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
- package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
- package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
- package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
- package/src/stories/GuideDuDev/Theme.mdx +41 -0
- package/dist/SelectFilter-Cj-GW2Cc.js +0 -97
- package/dist/main-WDqeoGM-.js +0 -14788
- package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
- package/src/components/Tables/SyServerTable/tests/__snapshots__/SyServerTable.spec.ts.snap +0 -521
- package/src/components/Tables/SyTable/tests/__snapshots__/SyTable.spec.ts.snap +0 -521
- package/src/stories/DesignTokens/ThemePA.mdx +0 -35
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3'
|
|
2
|
+
import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
|
|
3
|
+
import { ref, watch } from 'vue'
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Composants/Formulaires/SyCheckbox',
|
|
7
|
+
component: SyCheckbox,
|
|
8
|
+
decorators: [
|
|
9
|
+
() => ({
|
|
10
|
+
template: '<div style="padding: 20px;"><story/></div>',
|
|
11
|
+
}),
|
|
12
|
+
],
|
|
13
|
+
parameters: {
|
|
14
|
+
layout: 'fullscreen',
|
|
15
|
+
controls: { exclude: ['modelValue', 'errorMessages', 'warningMessages', 'successMessages'] },
|
|
16
|
+
docs: {
|
|
17
|
+
description: {
|
|
18
|
+
component: `SyCheckbox est un composant de case à cocher tri-état qui étend le composant VCheckbox de Vuetify avec des fonctionnalités supplémentaires comme la validation personnalisée et l'état indéterminé.`,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
argTypes: {
|
|
23
|
+
modelValue: { control: 'boolean' },
|
|
24
|
+
label: {
|
|
25
|
+
description: 'Texte affiché comme label de la case à cocher',
|
|
26
|
+
control: 'text',
|
|
27
|
+
},
|
|
28
|
+
color: {
|
|
29
|
+
control: 'select',
|
|
30
|
+
options: ['primary', 'secondary', 'success', 'error', 'warning'],
|
|
31
|
+
description: 'Couleur de la case à cocher',
|
|
32
|
+
},
|
|
33
|
+
indeterminate: {
|
|
34
|
+
description: 'État indéterminé de la case à cocher',
|
|
35
|
+
control: 'boolean',
|
|
36
|
+
},
|
|
37
|
+
disabled: {
|
|
38
|
+
description: 'Désactive la case à cocher',
|
|
39
|
+
control: 'boolean',
|
|
40
|
+
},
|
|
41
|
+
readonly: {
|
|
42
|
+
description: 'Rend la case à cocher en lecture seule',
|
|
43
|
+
control: 'boolean',
|
|
44
|
+
},
|
|
45
|
+
required: {
|
|
46
|
+
description: 'Rend la case à cocher obligatoire',
|
|
47
|
+
control: 'boolean',
|
|
48
|
+
},
|
|
49
|
+
hideDetails: {
|
|
50
|
+
description: 'Masque les détails (messages d\'erreur, etc.)',
|
|
51
|
+
control: 'boolean',
|
|
52
|
+
},
|
|
53
|
+
density: {
|
|
54
|
+
control: 'select',
|
|
55
|
+
options: ['default', 'comfortable', 'compact'],
|
|
56
|
+
description: 'Densité de la case à cocher',
|
|
57
|
+
},
|
|
58
|
+
customRules: {
|
|
59
|
+
description: 'Règles de validation personnalisées',
|
|
60
|
+
control: 'object',
|
|
61
|
+
},
|
|
62
|
+
customWarningRules: {
|
|
63
|
+
description: 'Règles d\'avertissement personnalisées',
|
|
64
|
+
control: 'object',
|
|
65
|
+
},
|
|
66
|
+
customSuccessRules: {
|
|
67
|
+
description: 'Règles de succès personnalisées',
|
|
68
|
+
control: 'object',
|
|
69
|
+
},
|
|
70
|
+
showSuccessMessages: {
|
|
71
|
+
description: 'Afficher les messages de succès',
|
|
72
|
+
control: 'boolean',
|
|
73
|
+
},
|
|
74
|
+
isValidateOnBlur: {
|
|
75
|
+
description: 'Vérifie la validité lors de la perte de focus',
|
|
76
|
+
control: 'boolean',
|
|
77
|
+
default: true,
|
|
78
|
+
},
|
|
79
|
+
disableErrorHandling: {
|
|
80
|
+
control: 'boolean',
|
|
81
|
+
description: 'Désactive complètement la validation des règles et l\'affichage des erreurs',
|
|
82
|
+
},
|
|
83
|
+
controlsIds: {
|
|
84
|
+
description: 'IDs des éléments contrôlés par cette case à cocher (pour l\'état indéterminé)',
|
|
85
|
+
control: 'object',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
} as Meta<typeof SyCheckbox>
|
|
89
|
+
|
|
90
|
+
export default meta
|
|
91
|
+
|
|
92
|
+
type Story = StoryObj<typeof SyCheckbox>
|
|
93
|
+
|
|
94
|
+
export const Default: Story = {
|
|
95
|
+
parameters: {
|
|
96
|
+
sourceCode: [
|
|
97
|
+
{
|
|
98
|
+
name: 'Template',
|
|
99
|
+
code: `<SyCheckbox v-model="checked" label="Case à cocher" />`,
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
render: args => ({
|
|
104
|
+
components: { SyCheckbox },
|
|
105
|
+
setup() {
|
|
106
|
+
const checked = ref(false)
|
|
107
|
+
return { args, checked }
|
|
108
|
+
},
|
|
109
|
+
template: `<SyCheckbox v-model="checked" v-bind="args" label="Case à cocher" />`,
|
|
110
|
+
}),
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export const Required: Story = {
|
|
114
|
+
args: {
|
|
115
|
+
...Default.args,
|
|
116
|
+
required: true,
|
|
117
|
+
isValidateOnBlur: false,
|
|
118
|
+
},
|
|
119
|
+
render: args => ({
|
|
120
|
+
components: { SyCheckbox },
|
|
121
|
+
setup() {
|
|
122
|
+
const checked = ref(false)
|
|
123
|
+
return { args, checked }
|
|
124
|
+
},
|
|
125
|
+
template: `<SyCheckbox v-model="checked" v-bind="args" label="Case à cocher obligatoire" :is-validate-on-blur="false" />`,
|
|
126
|
+
}),
|
|
127
|
+
parameters: {
|
|
128
|
+
sourceCode: [
|
|
129
|
+
{
|
|
130
|
+
name: 'Template',
|
|
131
|
+
code: `<SyCheckbox v-model="checked" label="Case à cocher obligatoire" required :is-validate-on-blur="false" />`,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
docs: {
|
|
135
|
+
description: {
|
|
136
|
+
story: `
|
|
137
|
+
### Case à cocher obligatoire
|
|
138
|
+
Cette case à cocher est marquée comme obligatoire, ce qui déclenchera une validation si elle n'est pas cochée.
|
|
139
|
+
`,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export const Indeterminate: Story = {
|
|
146
|
+
args: {
|
|
147
|
+
...Default.args,
|
|
148
|
+
indeterminate: true,
|
|
149
|
+
},
|
|
150
|
+
render: args => ({
|
|
151
|
+
components: { SyCheckbox },
|
|
152
|
+
setup() {
|
|
153
|
+
const checked = ref(false)
|
|
154
|
+
const indeterminate = ref(true)
|
|
155
|
+
return { args, checked, indeterminate }
|
|
156
|
+
},
|
|
157
|
+
template: `<SyCheckbox v-model="checked" :indeterminate="indeterminate" v-bind="args" label="Case à cocher indéterminée" />`,
|
|
158
|
+
}),
|
|
159
|
+
parameters: {
|
|
160
|
+
sourceCode: [
|
|
161
|
+
{
|
|
162
|
+
name: 'Template',
|
|
163
|
+
code: `
|
|
164
|
+
<template>
|
|
165
|
+
<SyCheckbox
|
|
166
|
+
v-model="checked"
|
|
167
|
+
:indeterminate="indeterminate"
|
|
168
|
+
label="Case à cocher indéterminée"
|
|
169
|
+
/>
|
|
170
|
+
</template>
|
|
171
|
+
|
|
172
|
+
<script setup>
|
|
173
|
+
import { ref } from 'vue'
|
|
174
|
+
|
|
175
|
+
const checked = ref(false)
|
|
176
|
+
const indeterminate = ref(true)
|
|
177
|
+
</script>`,
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
docs: {
|
|
181
|
+
description: {
|
|
182
|
+
story: `
|
|
183
|
+
### Case à cocher avec état indéterminé
|
|
184
|
+
Cette case à cocher est dans un état indéterminé, généralement utilisé lorsque certains éléments d'un groupe sont sélectionnés mais pas tous.
|
|
185
|
+
`,
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export const WithControlsIds: Story = {
|
|
192
|
+
parameters: {
|
|
193
|
+
sourceCode: [
|
|
194
|
+
{
|
|
195
|
+
name: 'Template',
|
|
196
|
+
code: `
|
|
197
|
+
<template>
|
|
198
|
+
<div>
|
|
199
|
+
<SyCheckbox
|
|
200
|
+
v-model="parentChecked"
|
|
201
|
+
:indeterminate="parentIndeterminate"
|
|
202
|
+
@update:indeterminate="parentIndeterminate = $event"
|
|
203
|
+
:controls-ids="['child-1', 'child-2', 'child-3']"
|
|
204
|
+
label="Parent"
|
|
205
|
+
/>
|
|
206
|
+
<div style="margin-left: 24px;">
|
|
207
|
+
<SyCheckbox v-model="childChecked1" id="child-1" label="Enfant 1" />
|
|
208
|
+
<SyCheckbox v-model="childChecked2" id="child-2" label="Enfant 2" />
|
|
209
|
+
<SyCheckbox v-model="childChecked3" id="child-3" label="Enfant 3" />
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</template>
|
|
213
|
+
|
|
214
|
+
<script setup>
|
|
215
|
+
import { ref, watch } from 'vue'
|
|
216
|
+
|
|
217
|
+
const parentChecked = ref(false)
|
|
218
|
+
const parentIndeterminate = ref(false)
|
|
219
|
+
const childChecked1 = ref(false)
|
|
220
|
+
const childChecked2 = ref(false)
|
|
221
|
+
const childChecked3 = ref(false)
|
|
222
|
+
|
|
223
|
+
// Logique pour gérer l'état indéterminé du parent
|
|
224
|
+
const updateParentState = () => {
|
|
225
|
+
const checkedCount = [childChecked1.value, childChecked2.value, childChecked3.value].filter(Boolean).length
|
|
226
|
+
|
|
227
|
+
if (checkedCount === 0) {
|
|
228
|
+
parentChecked.value = false
|
|
229
|
+
parentIndeterminate.value = false
|
|
230
|
+
} else if (checkedCount === 3) {
|
|
231
|
+
parentChecked.value = true
|
|
232
|
+
parentIndeterminate.value = false
|
|
233
|
+
} else {
|
|
234
|
+
parentChecked.value = false
|
|
235
|
+
parentIndeterminate.value = true
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Observer les changements des enfants
|
|
240
|
+
watch(childChecked1, updateParentState)
|
|
241
|
+
watch(childChecked2, updateParentState)
|
|
242
|
+
watch(childChecked3, updateParentState)
|
|
243
|
+
|
|
244
|
+
// Mettre à jour les enfants lorsque le parent change
|
|
245
|
+
watch(parentChecked, () => {
|
|
246
|
+
if (!parentIndeterminate.value) {
|
|
247
|
+
childChecked1.value = parentChecked.value
|
|
248
|
+
childChecked2.value = parentChecked.value
|
|
249
|
+
childChecked3.value = parentChecked.value
|
|
250
|
+
}
|
|
251
|
+
})
|
|
252
|
+
</script>`,
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: 'Script',
|
|
256
|
+
code: `
|
|
257
|
+
<script setup>
|
|
258
|
+
import { ref, watch } from 'vue'
|
|
259
|
+
|
|
260
|
+
const parentChecked = ref(false)
|
|
261
|
+
const parentIndeterminate = ref(false)
|
|
262
|
+
const childChecked1 = ref(false)
|
|
263
|
+
const childChecked2 = ref(false)
|
|
264
|
+
const childChecked3 = ref(false)
|
|
265
|
+
|
|
266
|
+
// Logique pour gérer l'état indéterminé du parent
|
|
267
|
+
const updateParentState = () => {
|
|
268
|
+
const checkedCount = [childChecked1.value, childChecked2.value, childChecked3.value].filter(Boolean).length
|
|
269
|
+
|
|
270
|
+
if (checkedCount === 0) {
|
|
271
|
+
parentChecked.value = false
|
|
272
|
+
parentIndeterminate.value = false
|
|
273
|
+
} else if (checkedCount === 3) {
|
|
274
|
+
parentChecked.value = true
|
|
275
|
+
parentIndeterminate.value = false
|
|
276
|
+
} else {
|
|
277
|
+
parentChecked.value = false
|
|
278
|
+
parentIndeterminate.value = true
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Observer les changements des enfants
|
|
283
|
+
watch(childChecked1, updateParentState)
|
|
284
|
+
watch(childChecked2, updateParentState)
|
|
285
|
+
watch(childChecked3, updateParentState)
|
|
286
|
+
|
|
287
|
+
// Mettre à jour les enfants lorsque le parent change
|
|
288
|
+
watch(parentChecked, () => {
|
|
289
|
+
if (!parentIndeterminate.value) {
|
|
290
|
+
childChecked1.value = parentChecked.value
|
|
291
|
+
childChecked2.value = parentChecked.value
|
|
292
|
+
childChecked3.value = parentChecked.value
|
|
293
|
+
}
|
|
294
|
+
})
|
|
295
|
+
</script>
|
|
296
|
+
`,
|
|
297
|
+
},
|
|
298
|
+
],
|
|
299
|
+
docs: {
|
|
300
|
+
description: {
|
|
301
|
+
story: `
|
|
302
|
+
### Case à cocher avec contrôle d'éléments enfants
|
|
303
|
+
Cette case à cocher contrôle un groupe d'éléments enfants. Elle utilise la propriété \`controlsIds\` pour établir la relation entre le parent et les enfants.
|
|
304
|
+
Lorsque certains enfants sont cochés mais pas tous, le parent passe automatiquement en état indéterminé.
|
|
305
|
+
|
|
306
|
+
La propriété \`controlsIds\` permet de créer une relation sémantique entre une case à cocher parent et ses enfants, ce qui est important pour l'accessibilité. Cette relation est établie via les attributs \`aria-controls\` et les identifiants des cases à cocher enfants.
|
|
307
|
+
`,
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
render: args => ({
|
|
312
|
+
components: { SyCheckbox },
|
|
313
|
+
setup() {
|
|
314
|
+
const parentChecked = ref(false)
|
|
315
|
+
const parentIndeterminate = ref(false)
|
|
316
|
+
const childChecked1 = ref(false)
|
|
317
|
+
const childChecked2 = ref(false)
|
|
318
|
+
const childChecked3 = ref(false)
|
|
319
|
+
|
|
320
|
+
// Logique pour gérer l'état indéterminé du parent
|
|
321
|
+
function updateParentState() {
|
|
322
|
+
const checkedCount = [
|
|
323
|
+
childChecked1.value,
|
|
324
|
+
childChecked2.value,
|
|
325
|
+
childChecked3.value,
|
|
326
|
+
].filter(Boolean).length
|
|
327
|
+
|
|
328
|
+
if (checkedCount === 0) {
|
|
329
|
+
parentChecked.value = false
|
|
330
|
+
parentIndeterminate.value = false
|
|
331
|
+
}
|
|
332
|
+
else if (checkedCount === 3) {
|
|
333
|
+
parentChecked.value = true
|
|
334
|
+
parentIndeterminate.value = false
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
parentChecked.value = false
|
|
338
|
+
parentIndeterminate.value = true
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Observer les changements des enfants
|
|
343
|
+
const watchChild = () => {
|
|
344
|
+
updateParentState()
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Mettre à jour les enfants lorsque le parent change
|
|
348
|
+
const watchParent = () => {
|
|
349
|
+
if (!parentIndeterminate.value) {
|
|
350
|
+
childChecked1.value = parentChecked.value
|
|
351
|
+
childChecked2.value = parentChecked.value
|
|
352
|
+
childChecked3.value = parentChecked.value
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Configurer les observateurs
|
|
357
|
+
watch(childChecked1, watchChild)
|
|
358
|
+
watch(childChecked2, watchChild)
|
|
359
|
+
watch(childChecked3, watchChild)
|
|
360
|
+
watch(parentChecked, watchParent)
|
|
361
|
+
|
|
362
|
+
return {
|
|
363
|
+
args,
|
|
364
|
+
parentChecked,
|
|
365
|
+
parentIndeterminate,
|
|
366
|
+
childChecked1,
|
|
367
|
+
childChecked2,
|
|
368
|
+
childChecked3,
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
template: `
|
|
372
|
+
<div>
|
|
373
|
+
<SyCheckbox
|
|
374
|
+
v-model="parentChecked"
|
|
375
|
+
:indeterminate="parentIndeterminate"
|
|
376
|
+
@update:indeterminate="parentIndeterminate = $event"
|
|
377
|
+
:controls-ids="['child-1', 'child-2', 'child-3']"
|
|
378
|
+
label="Parent"
|
|
379
|
+
/>
|
|
380
|
+
<div style="margin-left: 24px;">
|
|
381
|
+
<SyCheckbox v-model="childChecked1" id="child-1" label="Enfant 1" />
|
|
382
|
+
<SyCheckbox v-model="childChecked2" id="child-2" label="Enfant 2" />
|
|
383
|
+
<SyCheckbox v-model="childChecked3" id="child-3" label="Enfant 3" />
|
|
384
|
+
</div>
|
|
385
|
+
</div>
|
|
386
|
+
`,
|
|
387
|
+
}),
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
export const ValidationRules: Story = {
|
|
391
|
+
parameters: {
|
|
392
|
+
sourceCode: [
|
|
393
|
+
{
|
|
394
|
+
name: 'Template',
|
|
395
|
+
code: `
|
|
396
|
+
<template>
|
|
397
|
+
<SyCheckbox
|
|
398
|
+
v-model="checked"
|
|
399
|
+
label="J'accepte les conditions générales d'utilisation"
|
|
400
|
+
:custom-rules="rules"
|
|
401
|
+
:is-validate-on-blur="false"
|
|
402
|
+
/>
|
|
403
|
+
</template>
|
|
404
|
+
|
|
405
|
+
<script setup>
|
|
406
|
+
import { ref } from 'vue'
|
|
407
|
+
|
|
408
|
+
const checked = ref(false)
|
|
409
|
+
const rules = [
|
|
410
|
+
{
|
|
411
|
+
type: 'custom',
|
|
412
|
+
options: {
|
|
413
|
+
message: 'Cette case doit être cochée pour continuer.',
|
|
414
|
+
validate: (value) => value === true,
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
]
|
|
418
|
+
</script>`,
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
name: 'Script',
|
|
422
|
+
code: `
|
|
423
|
+
// Composition API
|
|
424
|
+
export default {
|
|
425
|
+
setup() {
|
|
426
|
+
const checked = ref(false)
|
|
427
|
+
const rules = [
|
|
428
|
+
{
|
|
429
|
+
type: 'custom',
|
|
430
|
+
options: {
|
|
431
|
+
message: 'Cette case doit être cochée pour continuer.',
|
|
432
|
+
validate: (value) => value === true,
|
|
433
|
+
},
|
|
434
|
+
},
|
|
435
|
+
]
|
|
436
|
+
|
|
437
|
+
return {
|
|
438
|
+
checked,
|
|
439
|
+
rules,
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}`,
|
|
443
|
+
},
|
|
444
|
+
],
|
|
445
|
+
docs: {
|
|
446
|
+
description: {
|
|
447
|
+
story: `
|
|
448
|
+
### Case à cocher avec règles de validation personnalisées
|
|
449
|
+
Cette case à cocher utilise des règles de validation personnalisées pour vérifier si elle est cochée.
|
|
450
|
+
`,
|
|
451
|
+
},
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
render: args => ({
|
|
455
|
+
components: { SyCheckbox },
|
|
456
|
+
setup() {
|
|
457
|
+
const checked = ref(false)
|
|
458
|
+
return {
|
|
459
|
+
args,
|
|
460
|
+
checked,
|
|
461
|
+
rules: [
|
|
462
|
+
{
|
|
463
|
+
type: 'custom',
|
|
464
|
+
options: {
|
|
465
|
+
message: 'Cette case doit être cochée pour continuer.',
|
|
466
|
+
validate: (value: boolean) => value === true,
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
],
|
|
470
|
+
isValidateOnBlur: false,
|
|
471
|
+
}
|
|
472
|
+
},
|
|
473
|
+
template: `
|
|
474
|
+
<SyCheckbox
|
|
475
|
+
v-model="checked"
|
|
476
|
+
label="J'accepte les conditions générales d'utilisation"
|
|
477
|
+
:custom-rules="rules"
|
|
478
|
+
:is-validate-on-blur="false"
|
|
479
|
+
/>
|
|
480
|
+
`,
|
|
481
|
+
}),
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
export const DisabledState: Story = {
|
|
485
|
+
args: {
|
|
486
|
+
...Default.args,
|
|
487
|
+
disabled: true,
|
|
488
|
+
},
|
|
489
|
+
render: args => ({
|
|
490
|
+
components: { SyCheckbox },
|
|
491
|
+
setup() {
|
|
492
|
+
const checked = ref(true)
|
|
493
|
+
return { args, checked }
|
|
494
|
+
},
|
|
495
|
+
template: `<SyCheckbox v-model="checked" v-bind="args" label="Case à cocher désactivée" />`,
|
|
496
|
+
}),
|
|
497
|
+
parameters: {
|
|
498
|
+
sourceCode: [
|
|
499
|
+
{
|
|
500
|
+
name: 'Template',
|
|
501
|
+
code: `<SyCheckbox v-model="checked" disabled label="Case à cocher désactivée" />`,
|
|
502
|
+
},
|
|
503
|
+
],
|
|
504
|
+
docs: {
|
|
505
|
+
description: {
|
|
506
|
+
story: `
|
|
507
|
+
### Case à cocher désactivée
|
|
508
|
+
Cette case à cocher est désactivée et ne peut pas être modifiée par l'utilisateur.
|
|
509
|
+
`,
|
|
510
|
+
},
|
|
511
|
+
},
|
|
512
|
+
},
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
export const ReadonlyState: Story = {
|
|
516
|
+
args: {
|
|
517
|
+
...Default.args,
|
|
518
|
+
readonly: true,
|
|
519
|
+
},
|
|
520
|
+
render: args => ({
|
|
521
|
+
components: { SyCheckbox },
|
|
522
|
+
setup() {
|
|
523
|
+
const checked = ref(true)
|
|
524
|
+
return { args, checked }
|
|
525
|
+
},
|
|
526
|
+
template: `<SyCheckbox v-model="checked" v-bind="args" label="Case à cocher en lecture seule" />`,
|
|
527
|
+
}),
|
|
528
|
+
parameters: {
|
|
529
|
+
sourceCode: [
|
|
530
|
+
{
|
|
531
|
+
name: 'Template',
|
|
532
|
+
code: `<SyCheckbox v-model="checked" readonly label="Case à cocher en lecture seule" />`,
|
|
533
|
+
},
|
|
534
|
+
],
|
|
535
|
+
docs: {
|
|
536
|
+
description: {
|
|
537
|
+
story: `
|
|
538
|
+
### Case à cocher en lecture seule
|
|
539
|
+
Cette case à cocher est en lecture seule et ne peut pas être modifiée par l'utilisateur, mais elle n'est pas visuellement désactivée comme la version disabled.
|
|
540
|
+
`,
|
|
541
|
+
},
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
export const DifferentDensities: Story = {
|
|
547
|
+
parameters: {
|
|
548
|
+
sourceCode: [
|
|
549
|
+
{
|
|
550
|
+
name: 'Template',
|
|
551
|
+
code: `
|
|
552
|
+
<div>
|
|
553
|
+
<SyCheckbox v-model="checked1" label="Densité par défaut" />
|
|
554
|
+
<SyCheckbox v-model="checked2" label="Densité confortable" density="comfortable" />
|
|
555
|
+
<SyCheckbox v-model="checked3" label="Densité compacte" density="compact" />
|
|
556
|
+
</div>`,
|
|
557
|
+
},
|
|
558
|
+
],
|
|
559
|
+
docs: {
|
|
560
|
+
description: {
|
|
561
|
+
story: `
|
|
562
|
+
### Différentes densités
|
|
563
|
+
Le composant SyCheckbox prend en charge différentes densités pour s'adapter à différents contextes d'interface utilisateur.
|
|
564
|
+
`,
|
|
565
|
+
},
|
|
566
|
+
},
|
|
567
|
+
},
|
|
568
|
+
render: args => ({
|
|
569
|
+
components: { SyCheckbox },
|
|
570
|
+
setup() {
|
|
571
|
+
const checked1 = ref(false)
|
|
572
|
+
const checked2 = ref(false)
|
|
573
|
+
const checked3 = ref(false)
|
|
574
|
+
return { args, checked1, checked2, checked3 }
|
|
575
|
+
},
|
|
576
|
+
template: `
|
|
577
|
+
<div>
|
|
578
|
+
<SyCheckbox v-model="checked1" label="Densité par défaut" />
|
|
579
|
+
<SyCheckbox v-model="checked2" label="Densité confortable" density="comfortable" />
|
|
580
|
+
<SyCheckbox v-model="checked3" label="Densité compacte" density="compact" />
|
|
581
|
+
</div>
|
|
582
|
+
`,
|
|
583
|
+
}),
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
export const CustomColors: Story = {
|
|
587
|
+
parameters: {
|
|
588
|
+
sourceCode: [
|
|
589
|
+
{
|
|
590
|
+
name: 'Template',
|
|
591
|
+
code: `
|
|
592
|
+
<div>
|
|
593
|
+
<SyCheckbox v-model="checked1" label="Couleur primaire (par défaut)" />
|
|
594
|
+
<SyCheckbox v-model="checked2" label="Couleur secondaire" color="secondary" />
|
|
595
|
+
<SyCheckbox v-model="checked3" label="Couleur succès" color="success" />
|
|
596
|
+
<SyCheckbox v-model="checked4" label="Couleur erreur" color="error" />
|
|
597
|
+
<SyCheckbox v-model="checked5" label="Couleur avertissement" color="warning" />
|
|
598
|
+
</div>`,
|
|
599
|
+
},
|
|
600
|
+
],
|
|
601
|
+
docs: {
|
|
602
|
+
description: {
|
|
603
|
+
story: `
|
|
604
|
+
### Couleurs personnalisées
|
|
605
|
+
Le composant SyCheckbox peut être personnalisé avec différentes couleurs pour s'adapter à votre thème.
|
|
606
|
+
`,
|
|
607
|
+
},
|
|
608
|
+
},
|
|
609
|
+
},
|
|
610
|
+
render: args => ({
|
|
611
|
+
components: { SyCheckbox },
|
|
612
|
+
setup() {
|
|
613
|
+
const checked1 = ref(true)
|
|
614
|
+
const checked2 = ref(true)
|
|
615
|
+
const checked3 = ref(true)
|
|
616
|
+
const checked4 = ref(true)
|
|
617
|
+
const checked5 = ref(true)
|
|
618
|
+
return { args, checked1, checked2, checked3, checked4, checked5 }
|
|
619
|
+
},
|
|
620
|
+
template: `
|
|
621
|
+
<div>
|
|
622
|
+
<SyCheckbox v-model="checked1" label="Couleur primaire (par défaut)" />
|
|
623
|
+
<SyCheckbox v-model="checked2" label="Couleur secondaire" color="secondary" />
|
|
624
|
+
<SyCheckbox v-model="checked3" label="Couleur succès" color="success" />
|
|
625
|
+
<SyCheckbox v-model="checked4" label="Couleur erreur" color="error" />
|
|
626
|
+
<SyCheckbox v-model="checked5" label="Couleur avertissement" color="warning" />
|
|
627
|
+
</div>
|
|
628
|
+
`,
|
|
629
|
+
}),
|
|
630
|
+
}
|