@cnamts/synapse 1.1.0 → 1.1.1

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.
Files changed (202) hide show
  1. package/dist/{AutocompleteFilter-DXd4szWO.js → AutocompleteFilter-CGF33skz.js} +1 -1
  2. package/dist/{DateFilter-BD59Kgwf.js → DateFilter-D7-MsKtx.js} +1 -1
  3. package/dist/{NumberFilter-BSMZE7uw.js → NumberFilter-bjQPPfsj.js} +1 -1
  4. package/dist/{PeriodFilter-keUdSSk0.js → PeriodFilter-B3wJpK8-.js} +1 -1
  5. package/dist/{SelectFilter-Dhvvwazl.js → SelectFilter-BN6DbKAV.js} +1 -1
  6. package/dist/{TextFilter-CU8FpXz0.js → TextFilter-BffP0J2f.js} +1 -1
  7. package/dist/{apLightTheme2026-DbS7BPUf.js → apLightTheme2026-C4ygwMHC.js} +11 -11
  8. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +6 -6
  9. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +6 -6
  10. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +6 -6
  11. package/dist/components/Captcha/Captcha.d.ts +27 -16
  12. package/dist/components/Captcha/CaptchaForm.d.ts +29 -3
  13. package/dist/components/Captcha/types.d.ts +14 -0
  14. package/dist/components/Captcha/useCaptchaValidation.d.ts +37 -0
  15. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +33 -13
  16. package/dist/components/Customs/Selects/SelectBtnField/composables/useSelectBtnFieldValidation.d.ts +23 -0
  17. package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +2 -2
  18. package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +2 -2
  19. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +17 -48
  20. package/dist/components/Customs/SyCheckBoxGroup/composables/useSyCheckBoxGroupValidation.d.ts +29 -0
  21. package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +46 -0
  22. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +16 -51
  23. package/dist/components/Customs/SyCheckbox/composables/useSyCheckboxValidation.d.ts +27 -0
  24. package/dist/components/Customs/SyCheckbox/types.d.ts +49 -0
  25. package/dist/components/Customs/SyTextField/FieldState.d.ts +5 -0
  26. package/dist/components/Customs/SyTextField/useSyTextFieldValidation.d.ts +3 -3
  27. package/dist/components/DialogBox/DialogBox.d.ts +2 -0
  28. package/dist/components/DialogBox/locales.d.ts +1 -0
  29. package/dist/components/FilterSideBar/FilterSideBar.d.ts +4 -0
  30. package/dist/components/LunarCalendar/LunarCalendar.d.ts +43 -14
  31. package/dist/components/LunarCalendar/types.d.ts +35 -0
  32. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +11 -12
  33. package/dist/components/MonthPicker/MonthPicker.d.ts +72 -1747
  34. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +21 -1733
  35. package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +5 -0
  36. package/dist/components/MonthPicker/locales.d.ts +1 -0
  37. package/dist/components/MonthPicker/types.d.ts +11 -0
  38. package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +37 -24
  39. package/dist/components/NirField/NirField.d.ts +6 -4
  40. package/dist/components/NirField/useNirValidation.d.ts +7 -5
  41. package/dist/components/PageContainer/PageContainer.d.ts +8 -0
  42. package/dist/components/PasswordField/PasswordField.d.ts +2 -2
  43. package/dist/components/PasswordField/usePasswordFieldValidation.d.ts +2 -2
  44. package/dist/components/PhoneField/PhoneField.d.ts +960 -1938
  45. package/dist/components/PhoneField/indicatifs.d.ts +715 -8
  46. package/dist/components/PhoneField/locales.d.ts +7 -0
  47. package/dist/components/PhoneField/types.d.ts +29 -0
  48. package/dist/components/PhoneField/usePhoneFieldValidation.d.ts +45 -0
  49. package/dist/components/PhoneField/usePhoneIndicatifs.d.ts +947 -0
  50. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +2 -2
  51. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +1 -1
  52. package/dist/composables/unifyValidation/useValidation.d.ts +4 -5
  53. package/dist/design-system-v3.js +2 -2
  54. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +10 -10
  55. package/dist/designTokens/tokens/baseTokens.d.ts +18 -18
  56. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +10 -10
  57. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +10 -10
  58. package/dist/designTokens/tokens/semanticTokens.d.ts +14 -14
  59. package/dist/{main-D8ryUoS5.js → main-C4wAktOs.js} +13718 -12991
  60. package/dist/synapse.css +1 -1
  61. package/dist/vuetifyConfig.js +1 -1
  62. package/package.json +7 -7
  63. package/src/assets/compat/_legacy-tokens.scss +91 -0
  64. package/src/assets/overrides/_utilities.scss +23 -0
  65. package/src/components/Accordion/Accordion.stories.ts +121 -1
  66. package/src/components/BackBtn/BackBtn.mdx +1 -1
  67. package/src/components/BackToTopBtn/BackToTopBtn.mdx +0 -1
  68. package/src/components/Captcha/Captcha.stories.ts +134 -31
  69. package/src/components/Captcha/Captcha.vue +95 -28
  70. package/src/components/Captcha/CaptchaForm.vue +51 -22
  71. package/src/components/Captcha/tests/Captcha.focus.spec.ts +214 -0
  72. package/src/components/Captcha/tests/Captcha.spec.ts +233 -24
  73. package/src/components/Captcha/tests/CaptchaForm.spec.ts +82 -0
  74. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +16 -42
  75. package/src/components/Captcha/types.ts +15 -0
  76. package/src/components/Captcha/useCaptchaValidation.ts +87 -0
  77. package/src/components/Captcha/validation/validation.stories.ts +1194 -0
  78. package/src/components/ChipList/ChipList.mdx +0 -1
  79. package/src/components/CollapsibleList/CollapsibleList.mdx +0 -1
  80. package/src/components/CookieBanner/CookieBanner.mdx +0 -1
  81. package/src/components/CopyBtn/CopyBtn.mdx +0 -1
  82. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +123 -439
  83. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +147 -41
  84. package/src/components/Customs/Selects/SelectBtnField/Validation/Validation.stories.ts +600 -0
  85. package/src/components/Customs/Selects/SelectBtnField/composables/useSelectBtnFieldValidation.ts +87 -0
  86. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +402 -33
  87. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +52 -38
  88. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +342 -162
  89. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +77 -129
  90. package/src/components/Customs/SyCheckBoxGroup/Validation/Validation.stories.ts +1008 -0
  91. package/src/components/Customs/SyCheckBoxGroup/composables/useSyCheckBoxGroupValidation.ts +107 -0
  92. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +180 -7
  93. package/src/components/Customs/SyCheckBoxGroup/types.ts +49 -0
  94. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +41 -161
  95. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +71 -148
  96. package/src/components/Customs/SyCheckbox/Validation/Validation.stories.ts +654 -0
  97. package/src/components/Customs/SyCheckbox/composables/useSyCheckboxValidation.ts +105 -0
  98. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +106 -0
  99. package/src/components/Customs/SyCheckbox/tests/useSyCheckboxValidation.spec.ts +98 -0
  100. package/src/components/Customs/SyCheckbox/types.ts +51 -0
  101. package/src/components/Customs/SyTextField/FieldState.vue +50 -0
  102. package/src/components/Customs/SyTextField/SyTextField.vue +12 -9
  103. package/src/components/Customs/SyTextField/useSyTextFieldValidation.ts +2 -11
  104. package/src/components/DataList/DataList.mdx +0 -1
  105. package/src/components/DataListGroup/DataListGroup.mdx +0 -1
  106. package/src/components/DiacriticPicker/DiacriticPicker.mdx +0 -1
  107. package/src/components/DialogBox/DialogBox.mdx +0 -1
  108. package/src/components/DialogBox/DialogBox.stories.ts +399 -4
  109. package/src/components/DialogBox/DialogBox.vue +20 -0
  110. package/src/components/DialogBox/locales.ts +1 -0
  111. package/src/components/DialogBox/tests/DialogBox.spec.ts +73 -0
  112. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +24 -0
  113. package/src/components/ErrorPage/ErrorPage.mdx +1 -1
  114. package/src/components/ExternalLinks/ExternalLinks.mdx +0 -1
  115. package/src/components/FileList/FileList.mdx +0 -1
  116. package/src/components/FilterInline/FilterInline.mdx +0 -1
  117. package/src/components/FilterSideBar/FilterSideBar.mdx +8 -1
  118. package/src/components/FilterSideBar/FilterSideBar.stories.ts +133 -1
  119. package/src/components/FilterSideBar/FilterSideBar.vue +19 -2
  120. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +55 -0
  121. package/src/components/FooterBar/FooterBar.mdx +0 -1
  122. package/src/components/FranceConnectBtn/FranceConnectBtn.mdx +0 -1
  123. package/src/components/HeaderBar/HeaderBar.mdx +0 -1
  124. package/src/components/HeaderLoading/HeaderLoading.mdx +0 -1
  125. package/src/components/LangBtn/LangBtn.mdx +0 -1
  126. package/src/components/Logo/Logo.mdx +1 -1
  127. package/src/components/LunarCalendar/LunarCalendar.mdx +6 -9
  128. package/src/components/LunarCalendar/LunarCalendar.stories.ts +243 -46
  129. package/src/components/LunarCalendar/LunarCalendar.vue +61 -26
  130. package/src/components/LunarCalendar/Validation/Validation.stories.ts +717 -0
  131. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +1 -1
  132. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +197 -6
  133. package/src/components/LunarCalendar/tests/useLunarCalendarValidation.spec.ts +287 -0
  134. package/src/components/LunarCalendar/types.ts +39 -0
  135. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +115 -39
  136. package/src/components/MonthPicker/MonthPicker.stories.ts +38 -281
  137. package/src/components/MonthPicker/MonthPicker.vue +66 -17
  138. package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +44 -20
  139. package/src/components/MonthPicker/MonthPickerText/useTextField.ts +5 -0
  140. package/src/components/MonthPicker/Validation/Validation.stories.ts +1117 -0
  141. package/src/components/MonthPicker/locales.ts +1 -0
  142. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +353 -2
  143. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +12 -8
  144. package/src/components/MonthPicker/types.ts +16 -0
  145. package/src/components/MonthPicker/useMonthPickerValidation.ts +64 -27
  146. package/src/components/NirField/NirField.mdx +120 -66
  147. package/src/components/NirField/NirField.stories.ts +216 -0
  148. package/src/components/NirField/useNirValidation.ts +16 -17
  149. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +263 -245
  150. package/src/components/NotificationBar/NotificationBar.mdx +0 -1
  151. package/src/components/PageContainer/PageContainer.mdx +0 -1
  152. package/src/components/PageContainer/PageContainer.stories.ts +170 -2
  153. package/src/components/PageContainer/PageContainer.vue +63 -8
  154. package/src/components/PageContainer/tests/__snapshots__/PageContainer.spec.ts.snap +19 -11
  155. package/src/components/PaginatedTable/PaginatedTable.mdx +0 -1
  156. package/src/components/PeriodField/PeriodField.mdx +0 -1
  157. package/src/components/PhoneField/PhoneField.mdx +2 -3
  158. package/src/components/PhoneField/PhoneField.stories.ts +227 -410
  159. package/src/components/PhoneField/PhoneField.vue +204 -438
  160. package/src/components/PhoneField/indicatifs.ts +1 -1
  161. package/src/components/PhoneField/locales.ts +7 -0
  162. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +0 -1
  163. package/src/components/PhoneField/tests/PhoneField.spec.ts +517 -220
  164. package/src/components/PhoneField/types.ts +30 -0
  165. package/src/components/PhoneField/usePhoneFieldValidation.ts +119 -0
  166. package/src/components/PhoneField/usePhoneIndicatifs.ts +89 -0
  167. package/src/components/PhoneField/validation/validation.stories.ts +717 -0
  168. package/src/components/RangeField/RangeField.mdx +0 -1
  169. package/src/components/RatingPicker/RatingPicker.mdx +0 -1
  170. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +0 -1
  171. package/src/components/StatusPage/StatusPage.vue +1 -0
  172. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +248 -230
  173. package/src/components/SubHeader/SubHeader.mdx +5 -6
  174. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +11 -12
  175. package/src/components/UploadWorkflow/UploadWorkflow.mdx +0 -1
  176. package/src/components/UserMenuBtn/UserMenuBtn.mdx +0 -1
  177. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +177 -0
  178. package/src/composables/unifyValidation/documentationValidationProps.ts +1 -1
  179. package/src/composables/unifyValidation/tests/useValidation.spec.ts +13 -1
  180. package/src/composables/unifyValidation/useValidation.ts +37 -33
  181. package/src/composantsVuetify/VCard/VCard.mdx +4 -0
  182. package/src/composantsVuetify/VCard/v-card.stories.ts +93 -1
  183. package/src/composantsVuetify/VCarousel/VCarousel.mdx +74 -0
  184. package/src/composantsVuetify/VCarousel/v-carousel.stories.ts +531 -0
  185. package/src/composantsVuetify/VNavigationDrawer/VNavgationDrawer.mdx +53 -0
  186. package/src/composantsVuetify/VNavigationDrawer/v-navigation-drawer.stories.ts +310 -0
  187. package/src/composantsVuetify/VSlideGroup/VSlideGroup.mdx +105 -0
  188. package/src/composantsVuetify/VSlideGroup/v-slide-group.stories.ts +463 -0
  189. package/src/designTokens/tokens/baseColors.ts +1 -1
  190. package/src/designTokens/tokens/baseTokens.ts +18 -18
  191. package/src/stories/Components/Components.stories.ts +34 -1
  192. package/src/stories/Demarrer/Releases.stories.ts +16 -2
  193. package/src/stories/DesignTokens/Arrondis.mdx +1 -1
  194. package/src/stories/DesignTokens/Correspondances.mdx +219 -0
  195. package/src/stories/DesignTokens/UtiliserLesTokens.mdx +235 -0
  196. package/src/stories/DesignTokens/colors.stories.ts +569 -569
  197. package/src/stories/GuideDuDev/Amelipro.stories.ts +335 -267
  198. package/dist/components/LunarCalendar/useLunarCalendarRules.d.ts +0 -5
  199. package/dist/components/PhoneField/tests/types.d.ts +0 -18
  200. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +0 -184
  201. package/src/components/LunarCalendar/useLunarCalendarRules.ts +0 -96
  202. package/src/components/PhoneField/tests/types.d.ts +0 -19
@@ -1,13 +1,15 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
2
  import PageContainer from './PageContainer.vue'
3
- import { VCard } from 'vuetify/components'
3
+ import { VCard, VDivider } from 'vuetify/components'
4
+ import HeaderBar from '../HeaderBar/HeaderBar.vue'
5
+ import FooterBar from '../FooterBar/FooterBar.vue'
4
6
 
5
7
  const meta = {
6
8
  title: 'Composants/Layout/PageContainer',
7
9
  component: PageContainer,
8
10
  parameters: {
9
11
  layout: 'fullscreen',
10
- controls: { exclude: ['spacingClass', 'containerSize'] },
12
+ controls: { exclude: ['spacingClass', 'containerSize', 'alignCenter'] },
11
13
  },
12
14
  argTypes: {
13
15
  size: {
@@ -254,3 +256,169 @@ export const WithAriaRole: Story = {
254
256
  }
255
257
  },
256
258
  }
259
+
260
+ export const WithHeaderAndFooter: Story = {
261
+ parameters: {
262
+ layout: 'fullscreen',
263
+ sourceCode: [
264
+ {
265
+ name: 'Template',
266
+ code: `<template>
267
+ <div class="d-flex flex-column" style="min-height: 100vh; width: 100%;">
268
+ <PageContainer style="flex: 1; width: 100%;">
269
+ <template #prepend="{ width }">
270
+ <HeaderBar
271
+ service-title="Mon espace"
272
+ service-subtitle="Service de santé"
273
+ :heading-level-title="1"
274
+ :width="width"
275
+ >
276
+ <template #header-side>
277
+ <div class="d-flex align-center ga-3 text-primary">
278
+ <div class="text-body-2">
279
+ <div class="font-weight-medium">Dr. Jean Dupont</div>
280
+ <div>Cabinet médical</div>
281
+ <div>12 rue de la Paix, 75001 Paris</div>
282
+ </div>
283
+ <VDivider vertical class="mx-2" style="height: 48px;" />
284
+ <div class="text-body-2">
285
+ <div class="font-weight-medium">Contact</div>
286
+ <div>Tel: 01 23 45 67 89</div>
287
+ <div>contact@cabinet.fr</div>
288
+ </div>
289
+ </div>
290
+ </template>
291
+ <template #append>
292
+ <div class="bg-primary" style="width: 100%; min-height: 48px; display: flex; align-items: center; justify-content: center;">
293
+ <div class="text-white font-weight-medium">Mon Espace Personnel</div>
294
+ </div>
295
+ </template>
296
+ </HeaderBar>
297
+ </template>
298
+
299
+ <h2 class="text-h5 mb-4">Bienvenue dans votre espace professionnel</h2>
300
+ <p>
301
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
302
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
303
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
304
+ un texte en faux latin, qui permet de faire office de texte d'attente.
305
+ </p>
306
+ <p class="mt-4">
307
+ L'avantage de le mettre en latin est que l'opérateur sait au premier coup d'œil que la page
308
+ contenant ces lignes n'est pas valide, et surtout l'attention du client n'est pas dérangée
309
+ par le contenu, il demeure concentré seulement sur l'aspect graphique. Ce texte a pour autre
310
+ avantage d'utiliser des mots de longueur variable, essayant de simuler une occupation normale.
311
+ </p>
312
+ <p class="mt-4">
313
+ La méthode simplifiée consiste à ne pas s'embarrasser de prétentions philosophiques,
314
+ et à composer un texte en français présentable. On peut aussi utiliser des générateurs
315
+ de texte automatiques pour obtenir du contenu aléatoire, mais il faut veiller à ce que
316
+ le résultat soit cohérent et agréable à lire.
317
+ </p>
318
+ <p class="mt-4 mb-16">
319
+ Ce contenu supplémentaire permet de bien visualiser l'espacement entre le contenu principal
320
+ et le pied de page. Il est important de prévoir suffisamment d'espace pour que la mise en page
321
+ reste harmonieuse et que le contenu soit facilement lisible. Le texte d'attente peut être remplacé
322
+ par du texte réel dès que celui-ci est disponible.
323
+ </p>
324
+
325
+ <template #append="{ width }">
326
+ <FooterBar
327
+ :width="width"
328
+ version="3.0.0"
329
+ a11y-compliance="partiellement-conforme"
330
+ />
331
+ </template>
332
+ </PageContainer>
333
+ </div>
334
+ </template>
335
+ `,
336
+ },
337
+ {
338
+ name: 'Script',
339
+ code: `<script setup lang="ts">
340
+ import { PageContainer, HeaderBar, FooterBar } from '@cnamts/synapse'
341
+ import { VDivider } from 'vuetify/components'
342
+ </script>
343
+ `,
344
+ },
345
+ ],
346
+ },
347
+ render: (args) => {
348
+ return {
349
+ components: { PageContainer, HeaderBar, FooterBar, VDivider },
350
+ setup() {
351
+ return { args }
352
+ },
353
+ template: `
354
+ <div class="d-flex flex-column" style="min-height: 100vh; width: 100%;">
355
+ <PageContainer :size="args.size" :spacing="args.spacing" :color="args.color" style="flex: 1; width: 100%;">
356
+ <template #prepend="{ width }">
357
+ <HeaderBar
358
+ service-title="Mon espace"
359
+ service-subtitle="Service de santé"
360
+ :heading-level-title="1"
361
+ :width="width"
362
+ >
363
+ <template #header-side v-if="args.size !== 'xs' && args.size !== 'sm'">
364
+ <div class="d-flex align-center ga-3 text-primary mr-4">
365
+ <div class="text-body-2">
366
+ <div class="font-weight-medium">Dr. Jean Dupont</div>
367
+ <div>Cabinet médical</div>
368
+ <div>12 rue de la Paix, 75001 Paris</div>
369
+ </div>
370
+ <VDivider vertical class="mx-2" style="height: 48px;" />
371
+ <div class="text-body-2">
372
+ <div class="font-weight-medium">Contact</div>
373
+ <div>Tel: 01 23 45 67 89</div>
374
+ <div>contact@cabinet.fr</div>
375
+ </div>
376
+ </div>
377
+ </template>
378
+ <template #append>
379
+ <div class="bg-primary" style="width: 100%; min-height: 48px; display: flex; align-items: center; justify-content: center;">
380
+ <div class="text-white font-weight-medium">Mon Espace Personnel</div>
381
+ </div>
382
+ </template>
383
+ </HeaderBar>
384
+ </template>
385
+
386
+ <h2 class="text-h5 mb-4">Bienvenue dans votre espace professionnel</h2>
387
+ <p>
388
+ Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
389
+ à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
390
+ faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
391
+ un texte en faux latin, qui permet de faire office de texte d'attente.
392
+ </p>
393
+ <p class="mt-4">
394
+ L'avantage de le mettre en latin est que l'opérateur sait au premier coup d'œil que la page
395
+ contenant ces lignes n'est pas valide, et surtout l'attention du client n'est pas dérangée
396
+ par le contenu, il demeure concentré seulement sur l'aspect graphique. Ce texte a pour autre
397
+ avantage d'utiliser des mots de longueur variable, essayant de simuler une occupation normale.
398
+ </p>
399
+ <p class="mt-4">
400
+ La méthode simplifiée consiste à ne pas s'embarrasser de prétentions philosophiques,
401
+ et à composer un texte en français présentable. On peut aussi utiliser des générateurs
402
+ de texte automatiques pour obtenir du contenu aléatoire, mais il faut veiller à ce que
403
+ le résultat soit cohérent et agréable à lire.
404
+ </p>
405
+ <p class="mt-4 mb-16">
406
+ Ce contenu supplémentaire permet de bien visualiser l'espacement entre le contenu principal
407
+ et le pied de page. Il est important de prévoir suffisamment d'espace pour que la mise en page
408
+ reste harmonieuse et que le contenu soit facilement lisible. Le texte d'attente peut être remplacé
409
+ par du texte réel dès que celui-ci est disponible.
410
+ </p>
411
+
412
+ <template #append="{ width }">
413
+ <FooterBar
414
+ :width="width"
415
+ version="3.0.0"
416
+ a11y-compliance="partiellement-conforme"
417
+ />
418
+ </template>
419
+ </PageContainer>
420
+ </div>
421
+ `,
422
+ }
423
+ },
424
+ }
@@ -10,6 +10,7 @@
10
10
  uniqueId?: string
11
11
  role?: AriaRole
12
12
  ariaLabelledby?: string
13
+ alignCenter?: boolean
13
14
  }>(), {
14
15
  size: undefined,
15
16
  spacing: undefined,
@@ -17,6 +18,7 @@
17
18
  uniqueId: undefined,
18
19
  role: undefined,
19
20
  ariaLabelledby: undefined,
21
+ alignCenter: false,
20
22
  })
21
23
 
22
24
  const display = useDisplay()
@@ -53,6 +55,8 @@
53
55
  }
54
56
  })
55
57
 
58
+ const containerWidth = computed(() => `${containerSize.value}px`)
59
+
56
60
  defineExpose({
57
61
  spacingClass,
58
62
  containerSize,
@@ -62,17 +66,54 @@
62
66
  <template>
63
67
  <div
64
68
  :id="uniqueId ? `${uniqueId}-container` : undefined"
65
- :class="[spacingClass, 'vd-page-container d-flex justify-center']"
69
+ :class="['vd-page-container d-flex flex-column', { 'align-center': alignCenter }]"
66
70
  :role="role"
67
71
  :aria-labelledby="ariaLabelledby"
68
72
  >
69
- <VSheet
70
- :id="uniqueId ? `${uniqueId}-content` : undefined"
71
- :width="containerSize"
72
- :color="color"
73
+ <!-- Slot prepend avec wrapper de largeur fixe -->
74
+ <div
75
+ v-if="$slots.prepend"
76
+ class="vd-page-container__slot-wrapper"
77
+ >
78
+ <div
79
+ class="vd-page-container__slot-content"
80
+ :style="{ width: containerWidth }"
81
+ >
82
+ <slot
83
+ name="prepend"
84
+ :width="containerWidth"
85
+ />
86
+ </div>
87
+ </div>
88
+
89
+ <div
90
+ :class="spacingClass"
91
+ class="vd-page-container__content"
73
92
  >
74
- <slot />
75
- </VSheet>
93
+ <VSheet
94
+ :id="uniqueId ? `${uniqueId}-content` : undefined"
95
+ :width="containerSize"
96
+ :color="color"
97
+ >
98
+ <slot />
99
+ </VSheet>
100
+ </div>
101
+
102
+ <!-- Slot append avec wrapper de largeur fixe -->
103
+ <div
104
+ v-if="$slots.append"
105
+ class="vd-page-container__slot-wrapper"
106
+ >
107
+ <div
108
+ class="vd-page-container__slot-content"
109
+ :style="{ width: containerWidth }"
110
+ >
111
+ <slot
112
+ name="append"
113
+ :width="containerWidth"
114
+ />
115
+ </div>
116
+ </div>
76
117
  </div>
77
118
  </template>
78
119
 
@@ -80,7 +121,21 @@
80
121
  .vd-page-container {
81
122
  flex: 1;
82
123
  width: 100%;
83
- max-width: 1712px;
124
+ }
125
+
126
+ .vd-page-container__content {
127
+ display: flex;
128
+ justify-content: center;
129
+ width: 100%;
130
+ }
131
+
132
+ .vd-page-container__slot-wrapper {
133
+ width: 100%;
134
+ display: flex;
135
+ justify-content: center;
136
+ }
137
+
138
+ .vd-page-container__slot-content {
84
139
  margin: 0 auto;
85
140
  }
86
141
  </style>
@@ -3,18 +3,26 @@
3
3
  exports[`PageContainer > render correctly 1`] = `
4
4
  <div class="
5
5
  d-flex
6
- justify-center
7
- px-14
8
- py-10
6
+ flex-column
9
7
  vd-page-container
10
8
  ">
11
- <div
12
- class="
13
- bg-transparent
14
- v-sheet
15
- v-theme--light
16
- "
17
- style="width: 800px;"
18
- ></div>
9
+ <!-- Slot prepend avec wrapper de largeur fixe -->
10
+ <!-- v-if -->
11
+ <div class="
12
+ px-14
13
+ py-10
14
+ vd-page-container__content
15
+ ">
16
+ <div
17
+ class="
18
+ bg-transparent
19
+ v-sheet
20
+ v-theme--light
21
+ "
22
+ style="width: 800px;"
23
+ ></div>
24
+ </div>
25
+ <!-- Slot append avec wrapper de largeur fixe -->
26
+ <!-- v-if -->
19
27
  </div>
20
28
  `;
@@ -28,7 +28,6 @@ import * as PaginatedTableStories from "./PaginatedTable.stories.ts";
28
28
  itemsPerPage: 4,
29
29
  sortBy: [{ key: 'calories', order: 'desc' }],
30
30
  })
31
- import '../../stories/styles/shared.css';
32
31
 
33
32
  const headers = reactive([
34
33
  { text: 'Dessert (100g serving)', value: 'name' },
@@ -23,7 +23,6 @@ import * as PeriodFieldStories from "./PeriodField.stories.ts";
23
23
  import { PeriodField } from '@cnamts/synapse'
24
24
 
25
25
  const selectedPeriod = ref({ from: null, to: null })
26
- import '../../stories/styles/shared.css';
27
26
  </script>
28
27
 
29
28
  <template>
@@ -23,14 +23,13 @@ import { PhoneField } from '@cnamts/synapse'
23
23
  import { ref } from 'vue'
24
24
 
25
25
  const value = ref('')
26
- import '../../stories/styles/shared.css';
27
26
 
28
27
  const handleChange = (newValue) => {
29
28
  console.log('Value changed:', newValue)
30
29
  }
31
30
  const customIndicatifs = ref([
32
- { code: '+99', country: 'Utopia', abbreviation: 'UT', mask: '## ## ## ##', phoneLength: 8 },
33
- { code: '+98', country: 'Paradise', abbreviation: 'PA', mask: '## ## ## ##', phoneLength: 18 },
31
+ { code: '+99', country: 'Utopia', abbreviation: 'UT', mask: '## ## ## ##' },
32
+ { code: '+98', country: 'Paradise', abbreviation: 'PA', mask: '## ## ## ##' },
34
33
  ])
35
34
  </script>
36
35