@cnamts/synapse 1.0.4 → 1.0.6

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 (206) hide show
  1. package/dist/DateFilter-BlOpwEVq.js +98 -0
  2. package/dist/NumberFilter-BPUXE4wY.js +121 -0
  3. package/dist/PeriodFilter-B2yx329_.js +112 -0
  4. package/dist/SelectFilter-CedKn1oV.js +136 -0
  5. package/dist/TextFilter-DkhJjRtR.js +114 -0
  6. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordion.d.ts +103 -0
  7. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.d.ts +105 -0
  8. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +3 -3
  9. package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +132 -0
  10. package/dist/components/Amelipro/AmeliproCaptcha/types.d.ts +5 -0
  11. package/dist/components/Amelipro/AmeliproCard/AmeliproCard.d.ts +3 -3
  12. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +126 -0
  13. package/dist/components/Amelipro/AmeliproCustomSelector/types.d.ts +6 -0
  14. package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +1 -1
  15. package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +3 -3
  17. package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +190 -0
  18. package/dist/components/Amelipro/AmeliproTable/types.d.ts +34 -0
  19. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +3 -3
  20. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +1 -1
  22. package/dist/components/Amelipro/types.d.ts +6 -0
  23. package/dist/components/CookieBanner/CookieBanner.d.ts +1 -1
  24. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +11 -2
  25. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +6 -1
  26. package/dist/components/Customs/SyTextField/SyTextField.d.ts +3 -1
  27. package/dist/components/DataList/DataList.d.ts +9 -0
  28. package/dist/components/DataListGroup/DataListGroup.d.ts +10 -1
  29. package/dist/components/DataListItem/DataListItem.d.ts +1 -1
  30. package/dist/components/DataListItem/config.d.ts +1 -1
  31. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +18 -8
  32. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +16 -6
  33. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +6 -1
  34. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +17 -8
  35. package/dist/components/DatePicker/composables/useKeyboardEvents.d.ts +41 -0
  36. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +4 -9
  37. package/dist/components/DatePicker/utils/dateFormattingUtils.d.ts +72 -0
  38. package/dist/components/DatePicker/utils/validationUtils.d.ts +38 -0
  39. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.d.ts +9 -3
  40. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.d.ts +6 -1
  41. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.d.ts +11 -1
  42. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.d.ts +11 -1
  43. package/dist/components/HeaderBar/HeaderBurgerMenu/locals.d.ts +2 -0
  44. package/dist/components/HeaderBar/HeaderBurgerMenu/useMenuPosition.d.ts +4 -0
  45. package/dist/components/NirField/NirField.d.ts +14 -4
  46. package/dist/components/PeriodField/PeriodField.d.ts +24 -4
  47. package/dist/components/Tables/common/SyTablePagination.d.ts +10 -0
  48. package/dist/components/index.d.ts +4 -0
  49. package/dist/composables/index.d.ts +1 -0
  50. package/dist/composables/usePagination.d.ts +16 -0
  51. package/dist/design-system-v3.js +165 -160
  52. package/dist/design-system-v3.umd.cjs +120 -138
  53. package/dist/directives/lockFocus.d.ts +17 -0
  54. package/dist/{main-BzyNNvHX.js → main-BXPFSAB4.js} +14664 -13282
  55. package/dist/style.css +1 -0
  56. package/package.json +5 -2
  57. package/src/assets/amelipro/apTheme.scss +149 -0
  58. package/src/assets/amelipro/apTokens.scss +0 -148
  59. package/src/assets/overrides/_btns.scss +15 -0
  60. package/src/assets/overrides/_container.scss +36 -0
  61. package/src/assets/overrides/_forms.scss +7 -0
  62. package/src/assets/{_spacers.scss → overrides/_spacers.scss} +0 -7
  63. package/src/assets/overrides/_tables.scss +18 -0
  64. package/src/assets/overrides/_tooltips.scss +10 -0
  65. package/src/assets/overrides/_typography.scss +196 -0
  66. package/src/assets/settings.scss +11 -51
  67. package/src/assets/themes.scss +10 -0
  68. package/src/assets/tokens.scss +9 -156
  69. package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +80 -40
  70. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.mdx +15 -0
  71. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.stories.ts +83 -0
  72. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.vue +86 -0
  73. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +242 -0
  74. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/AmeliproAccordionTemplate.spec.ts +20 -0
  75. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +124 -0
  76. package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +20 -0
  77. package/src/components/Amelipro/AmeliproAccordion/__tests__/__snapshots__/AmeliproAccordion.spec.ts.snap +124 -0
  78. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.mdx +15 -0
  79. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.stories.ts +87 -0
  80. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +233 -0
  81. package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +24 -0
  82. package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +384 -0
  83. package/src/components/Amelipro/AmeliproCaptcha/types.d.ts +5 -0
  84. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.mdx +15 -0
  85. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +143 -0
  86. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +351 -0
  87. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +50 -0
  88. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +186 -0
  89. package/src/components/Amelipro/AmeliproCustomSelector/types.d.ts +6 -0
  90. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  91. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/__snapshots__/AmeliproHeaderBar.spec.ts.snap +1 -1
  92. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +1 -708
  93. package/src/components/Amelipro/AmeliproMenu/tests/__snapshots__/AmeliproMenu.spec.ts.snap +1 -1
  94. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +1 -708
  95. package/src/components/Amelipro/AmeliproTable/AmeliproTable.mdx +22 -0
  96. package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +550 -0
  97. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +421 -0
  98. package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +72 -0
  99. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +427 -0
  100. package/src/components/Amelipro/AmeliproTable/types.d.ts +34 -0
  101. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +12 -1
  102. package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +0 -820
  103. package/src/components/Amelipro/types.ts +8 -0
  104. package/src/components/CollapsibleList/CollapsibleList.vue +0 -2
  105. package/src/components/CookieBanner/CookieBanner.vue +1 -3
  106. package/src/components/CopyBtn/CopyBtn.vue +9 -2
  107. package/src/components/CopyBtn/tests/CopyBtn.spec.ts +3 -1
  108. package/src/components/Customs/Selects/SySelect/Accessibilite.mdx +7 -0
  109. package/src/components/Customs/Selects/SySelect/Accessibilite.stories.ts +4 -1
  110. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +80 -0
  111. package/src/components/Customs/Selects/SySelect/SySelect.vue +280 -34
  112. package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +14 -5
  113. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +129 -12
  114. package/src/components/Customs/SyIcon/SyIcon.spec.ts +3 -0
  115. package/src/components/Customs/SyTextField/Accessibilite.stories.ts +3 -1
  116. package/src/components/Customs/SyTextField/SyTextField.stories.ts +79 -6
  117. package/src/components/Customs/SyTextField/SyTextField.vue +218 -24
  118. package/src/components/DataList/Accessibilite.stories.ts +4 -0
  119. package/src/components/DataList/DataList.vue +19 -12
  120. package/src/components/DataListGroup/Accessibilite.stories.ts +4 -0
  121. package/src/components/DataListGroup/DataListGroup.vue +32 -15
  122. package/src/components/DataListItem/DataListItem.vue +14 -11
  123. package/src/components/DataListItem/config.ts +1 -1
  124. package/src/components/DataListItem/tests/DataListItem.spec.ts +2 -2
  125. package/src/components/DatePicker/CalendarMode/DatePicker.vue +12 -7
  126. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +174 -0
  127. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +27 -5
  128. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +286 -0
  129. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +1 -1
  130. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +29 -31
  131. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +11 -3
  132. package/src/components/DatePicker/composables/useDateInputEditing.ts +73 -209
  133. package/src/components/DatePicker/composables/useKeyboardEvents.ts +149 -0
  134. package/src/components/DatePicker/composables/useManualDateValidation.ts +27 -68
  135. package/src/components/DatePicker/utils/dateFormattingUtils.ts +228 -0
  136. package/src/components/DatePicker/utils/validationUtils.ts +90 -0
  137. package/src/components/DialogBox/Accessibilite.stories.ts +4 -0
  138. package/src/components/DialogBox/DialogBox.stories.ts +10 -10
  139. package/src/components/DialogBox/DialogBox.vue +83 -21
  140. package/src/components/DialogBox/tests/__snapshots__/DialogBox.spec.ts.snap +12 -6
  141. package/src/components/FileUpload/tests/FileUpload.spec.ts +3 -0
  142. package/src/components/FooterBar/FooterBar.vue +1 -0
  143. package/src/components/HeaderBar/Accessibilite.stories.ts +4 -0
  144. package/src/components/HeaderBar/HeaderBar.mdx +47 -22
  145. package/src/components/HeaderBar/HeaderBar.stories.ts +54 -13
  146. package/src/components/HeaderBar/HeaderBar.vue +2 -1
  147. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +4 -0
  148. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.stories.ts +160 -82
  149. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +41 -56
  150. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +10 -3
  151. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +41 -18
  152. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/tests/HeaderMenuSection.spec.ts +7 -2
  153. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.stories.ts +36 -9
  154. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +41 -9
  155. package/src/components/HeaderBar/HeaderBurgerMenu/locals.ts +2 -0
  156. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.spec.ts +1 -1
  157. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/HeaderBurgerMenu.spec.ts.snap +8 -3
  158. package/src/components/HeaderBar/HeaderBurgerMenu/useMenuPosition.ts +50 -0
  159. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +5 -5
  160. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +7 -4
  161. package/src/components/HeaderBar/locales.ts +1 -1
  162. package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +2 -1
  163. package/src/components/HeaderLoading/HeaderLoading.vue +0 -1
  164. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +2 -0
  165. package/src/components/LangBtn/LangBtn.vue +0 -3
  166. package/src/components/LogoBrandSection/Accessibilite.stories.ts +4 -1
  167. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +2 -2
  168. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -8
  169. package/src/components/LogoBrandSection/locales.ts +1 -1
  170. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +1 -1
  171. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +6 -4
  172. package/src/components/NirField/NirField.vue +5 -5
  173. package/src/components/NirField/tests/NirField.spec.ts +78 -12
  174. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +104 -6
  175. package/src/components/Tables/common/TableHeader.vue +10 -7
  176. package/src/components/Tables/common/tableAccessibilityUtils.ts +13 -2
  177. package/src/components/Tables/common/useTableAria.ts +17 -1
  178. package/src/components/UserMenuBtn/tests/UserMenuBtn.spec.ts +2 -1
  179. package/src/components/index.ts +4 -0
  180. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +34 -5
  181. package/src/composables/index.ts +3 -0
  182. package/src/composables/useFilterable/useFilterable.ts +13 -1
  183. package/src/composables/usePagination.ts +103 -0
  184. package/src/directives/lockFocus.ts +48 -0
  185. package/src/main.ts +1 -2
  186. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +1 -8
  187. package/src/stories/Accessibilite/{Aculturation/AuditDesignSystem.mdx → AuditDesignSystem.mdx} +1 -1
  188. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.mdx +102 -0
  189. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +219 -0
  190. package/src/stories/Accessibilite/KitDePreAudit/Outils/{Tanaguru.mdx → Tanaguru/Utilisation.mdx} +1 -1
  191. package/src/stories/DesignTokens/ColorIntegrationExample.vue +43 -0
  192. package/src/stories/DesignTokens/Colors.mdx +2 -0
  193. package/src/stories/DesignTokens/colors.stories.ts +9 -0
  194. package/src/vuetifyConfig.ts +3 -3
  195. package/dist/DateFilter-yrwJv_2R.js +0 -95
  196. package/dist/NumberFilter-BQXtywZI.js +0 -117
  197. package/dist/PeriodFilter-BYXVSzr5.js +0 -108
  198. package/dist/SelectFilter-CJV_mlN3.js +0 -133
  199. package/dist/TextFilter-DN0ejYIs.js +0 -110
  200. package/dist/design-system-v3.css +0 -1
  201. package/dist/directives/letterSpacing.d.ts +0 -27
  202. package/src/assets/_fonts.scss +0 -6
  203. package/src/assets/_typography.scss +0 -157
  204. package/src/directives/letterSpacing.ts +0 -233
  205. /package/src/assets/{_elevations.scss → overrides/_elevations.scss} +0 -0
  206. /package/src/assets/{_radius.scss → overrides/_radius.scss} +0 -0
@@ -1,27 +0,0 @@
1
- import { Directive } from 'vue';
2
- interface LetterSpacingOptions {
3
- /**
4
- * Whether to apply to all typography elements or only specific selectors
5
- * @default true
6
- */
7
- applyToAll?: boolean;
8
- /**
9
- * Specific selectors to target (if applyToAll is false)
10
- */
11
- selectors?: string[];
12
- /**
13
- * Whether to observe DOM changes for dynamic content
14
- * @default true
15
- */
16
- observeChanges?: boolean;
17
- }
18
- /**
19
- * Vue directive to override Vuetify's !important letter-spacing with design token values
20
- *
21
- * Usage:
22
- * - v-letter-spacing (applies to all typography elements)
23
- * - v-letter-spacing="{ applyToAll: false, selectors: ['.text-h1', '.text-h2'] }"
24
- * - v-letter-spacing="{ observeChanges: false }" (disable mutation observer)
25
- */
26
- export declare const vLetterSpacing: Directive<HTMLElement, LetterSpacingOptions | boolean>;
27
- export default vLetterSpacing;
@@ -1,6 +0,0 @@
1
- @use 'vuetify/settings' with (
2
- $body-font-family: Arial
3
- );
4
-
5
- // Forward Vuetify settings
6
- @forward 'vuetify/settings';
@@ -1,157 +0,0 @@
1
- /* Typography styles for CNAM and PA themes */
2
-
3
- .v-application .v-theme--cnam,
4
- .v-application .v-theme--pa {
5
- /* Headings with Vuetify classes */
6
- .text-h1 {
7
- font-size: var(--v-typography-h1-font-size) !important;
8
- font-weight: var(--v-typography-h1-font-weight) !important;
9
- line-height: var(--v-typography-h1-line-height) !important;
10
- letter-spacing: var(--v-typography-h1-letter-spacing);
11
- }
12
-
13
- .text-h2 {
14
- font-size: var(--v-typography-h2-font-size) !important;
15
- font-weight: var(--v-typography-h2-font-weight) !important;
16
- line-height: var(--v-typography-h2-line-height) !important;
17
- letter-spacing: var(--v-typography-h2-letter-spacing);
18
- }
19
-
20
- .text-h3 {
21
- font-size: var(--v-typography-h3-font-size) !important;
22
- font-weight: var(--v-typography-h3-font-weight) !important;
23
- line-height: var(--v-typography-h3-line-height) !important;
24
- letter-spacing: var(--v-typography-h3-letter-spacing);
25
- }
26
-
27
- .text-h4 {
28
- font-size: var(--v-typography-h4-font-size) !important;
29
- font-weight: var(--v-typography-h4-font-weight) !important;
30
- line-height: var(--v-typography-h4-line-height) !important;
31
- letter-spacing: var(--v-typography-h4-letter-spacing);
32
- }
33
-
34
- .text-h5 {
35
- font-size: var(--v-typography-h5-font-size) !important;
36
- font-weight: var(--v-typography-h5-font-weight) !important;
37
- line-height: var(--v-typography-h5-line-height) !important;
38
- letter-spacing: var(--v-typography-h5-letter-spacing);
39
- }
40
-
41
- .text-h6 {
42
- font-size: var(--v-typography-h6-font-size) !important;
43
- font-weight: var(--v-typography-h6-font-weight) !important;
44
- line-height: var(--v-typography-h6-line-height) !important;
45
- letter-spacing: var(--v-typography-h6-letter-spacing);
46
- }
47
-
48
- /* Native HTML heading elements */
49
- h1 {
50
- font-size: var(--v-typography-h1-font-size) !important;
51
- font-weight: var(--v-typography-h1-font-weight) !important;
52
- line-height: var(--v-typography-h1-line-height) !important;
53
- letter-spacing: var(--v-typography-h1-letter-spacing);
54
- margin-bottom: 0.5rem;
55
- }
56
-
57
- h2 {
58
- font-size: var(--v-typography-h2-font-size) !important;
59
- font-weight: var(--v-typography-h2-font-weight) !important;
60
- line-height: var(--v-typography-h2-line-height) !important;
61
- letter-spacing: var(--v-typography-h2-letter-spacing);
62
- margin-bottom: 0.5rem;
63
- }
64
-
65
- h3 {
66
- font-size: var(--v-typography-h3-font-size) !important;
67
- font-weight: var(--v-typography-h3-font-weight) !important;
68
- line-height: var(--v-typography-h3-line-height) !important;
69
- letter-spacing: var(--v-typography-h3-letter-spacing);
70
- margin-bottom: 0.5rem;
71
- }
72
-
73
- h4 {
74
- font-size: var(--v-typography-h4-font-size) !important;
75
- font-weight: var(--v-typography-h4-font-weight) !important;
76
- line-height: var(--v-typography-h4-line-height) !important;
77
- letter-spacing: var(--v-typography-h4-letter-spacing);
78
- margin-bottom: 0.5rem;
79
- }
80
-
81
- h5 {
82
- font-size: var(--v-typography-h5-font-size) !important;
83
- font-weight: var(--v-typography-h5-font-weight) !important;
84
- line-height: var(--v-typography-h5-line-height) !important;
85
- letter-spacing: var(--v-typography-h5-letter-spacing);
86
- margin-bottom: 0.5rem;
87
- }
88
-
89
- h6 {
90
- font-size: var(--v-typography-h6-font-size) !important;
91
- font-weight: var(--v-typography-h6-font-weight) !important;
92
- line-height: var(--v-typography-h6-line-height) !important;
93
- letter-spacing: var(--v-typography-h6-letter-spacing);
94
- margin-bottom: 0.5rem;
95
- }
96
-
97
- /* Body text */
98
- .text-body-1 {
99
- font-size: var(--v-typography-body1-font-size) !important;
100
- font-weight: var(--v-typography-body1-font-weight) !important;
101
- line-height: var(--v-typography-body1-line-height) !important;
102
- letter-spacing: var(--v-typography-body1-letter-spacing);
103
- }
104
-
105
- .text-body-2 {
106
- font-size: var(--v-typography-body2-font-size) !important;
107
- font-weight: var(--v-typography-body2-font-weight) !important;
108
- line-height: var(--v-typography-body2-line-height) !important;
109
- letter-spacing: var(--v-typography-body2-letter-spacing);
110
- }
111
-
112
- /* Subtitle text */
113
- .text-subtitle-1 {
114
- font-size: var(--v-typography-subtitle1-font-size) !important;
115
- font-weight: var(--v-typography-subtitle1-font-weight) !important;
116
- line-height: var(--v-typography-subtitle1-line-height) !important;
117
- letter-spacing: var(--v-typography-subtitle1-letter-spacing);
118
- }
119
-
120
- .text-subtitle-2 {
121
- font-size: var(--v-typography-subtitle2-font-size) !important;
122
- font-weight: var(--v-typography-subtitle2-font-weight) !important;
123
- line-height: var(--v-typography-subtitle2-line-height) !important;
124
- letter-spacing: var(--v-typography-subtitle2-letter-spacing);
125
- }
126
-
127
- /* Other typography */
128
- .text-caption {
129
- font-size: var(--v-typography-caption-font-size) !important;
130
- font-weight: var(--v-typography-caption-font-weight) !important;
131
- line-height: var(--v-typography-caption-line-height) !important;
132
- letter-spacing: var(--v-typography-caption-letter-spacing);
133
- }
134
-
135
- .text-overline {
136
- font-size: var(--v-typography-overline-font-size) !important;
137
- font-weight: var(--v-typography-overline-font-weight) !important;
138
- line-height: var(--v-typography-overline-line-height) !important;
139
- letter-spacing: var(--v-typography-overline-letter-spacing);
140
- text-transform: var(--v-typography-overline-text-transform, uppercase) !important;
141
- }
142
-
143
- /* Display text */
144
- .text-display-1 {
145
- font-size: var(--v-typography-display1-font-size) !important;
146
- font-weight: var(--v-typography-display1-font-weight) !important;
147
- line-height: var(--v-typography-display1-line-height) !important;
148
- letter-spacing: var(--v-typography-display1-letter-spacing);
149
- }
150
-
151
- .text-display-2 {
152
- font-size: var(--v-typography-display2-font-size) !important;
153
- font-weight: var(--v-typography-display2-font-weight) !important;
154
- line-height: var(--v-typography-display2-line-height) !important;
155
- letter-spacing: var(--v-typography-display2-letter-spacing);
156
- }
157
- }
@@ -1,233 +0,0 @@
1
- import type { Directive, DirectiveBinding } from 'vue'
2
-
3
- interface LetterSpacingOptions {
4
- /**
5
- * Whether to apply to all typography elements or only specific selectors
6
- * @default true
7
- */
8
- applyToAll?: boolean
9
- /**
10
- * Specific selectors to target (if applyToAll is false)
11
- */
12
- selectors?: string[]
13
- /**
14
- * Whether to observe DOM changes for dynamic content
15
- * @default true
16
- */
17
- observeChanges?: boolean
18
- }
19
-
20
- /**
21
- * Find and modify Vuetify's CSS rules to remove !important from letter-spacing
22
- */
23
- function modifyVuetifyStylesheets(): void {
24
- try {
25
- // Get all stylesheets
26
- const stylesheets = Array.from(document.styleSheets)
27
-
28
- stylesheets.forEach((stylesheet, index) => {
29
- try {
30
- // Try to access rules (may fail for cross-origin stylesheets)
31
- const rules = Array.from(stylesheet.cssRules || stylesheet.rules || [])
32
-
33
- rules.forEach((rule) => {
34
- if (rule instanceof CSSStyleRule) {
35
- // Check if this rule affects typography classes
36
- const typographyClasses = ['.text-h1', '.text-h2', '.text-h3', '.text-h4', '.text-h5', '.text-h6', '.text-body-1', '.text-body-2', '.text-subtitle-1', '.text-subtitle-2', '.text-caption', '.text-overline', '.text-button']
37
-
38
- const matchesTypography = typographyClasses.some(cls => rule.selectorText?.includes(cls))
39
-
40
- if (matchesTypography && rule.style.letterSpacing) {
41
- // Try to modify the rule
42
- try {
43
- rule.style.setProperty('letter-spacing', '0px', '')
44
- }
45
- catch (modifyError) {
46
- console.log(`Could not modify rule: ${rule.selectorText}`, modifyError)
47
- }
48
- }
49
- }
50
- })
51
- }
52
- catch (accessError: unknown) {
53
- // Stylesheet is cross-origin or inaccessible
54
- const errorMessage = accessError instanceof Error ? accessError.message : String(accessError)
55
- console.log(`Cannot access stylesheet ${index}:`, errorMessage)
56
- }
57
- })
58
- }
59
- catch (error) {
60
- console.error('Error modifying Vuetify stylesheets:', error)
61
- }
62
- }
63
-
64
- /**
65
- * Inject CSS with !important to override Vuetify, but using CSS custom properties
66
- */
67
- function injectOverrideCSS(): void {
68
- const styleId = 'letter-spacing-override-styles'
69
-
70
- // Remove existing style element if it exists
71
- const existingStyle = document.getElementById(styleId)
72
- if (existingStyle) {
73
- existingStyle.remove()
74
- }
75
-
76
- // Create new style element
77
- const styleElement = document.createElement('style')
78
- styleElement.id = styleId
79
- styleElement.type = 'text/css'
80
-
81
- // Use high specificity selectors without !important
82
- const cssRules = `
83
- /* Override Vuetify letter-spacing with high specificity and CSS custom properties */
84
- .v-application .v-application .text-h1 { letter-spacing: var(--v-typography-h1-letter-spacing, 0px); }
85
- .v-application .v-application .text-h2 { letter-spacing: var(--v-typography-h2-letter-spacing, 0px); }
86
- .v-application .v-application .text-h3 { letter-spacing: var(--v-typography-h3-letter-spacing, 0px); }
87
- .v-application .v-application .text-h4 { letter-spacing: var(--v-typography-h4-letter-spacing, 0px); }
88
- .v-application .v-application .text-h5 { letter-spacing: var(--v-typography-h5-letter-spacing, 0px); }
89
- .v-application .v-application .text-h6 { letter-spacing: var(--v-typography-h6-letter-spacing, 0px); }
90
- .v-application .v-application .text-body-1 { letter-spacing: var(--v-typography-body1-letter-spacing, 0px); }
91
- .v-application .v-application .text-body-2 { letter-spacing: var(--v-typography-body2-letter-spacing, 0px); }
92
- .v-application .v-application .text-subtitle-1 { letter-spacing: var(--v-typography-subtitle1-letter-spacing, 0px); }
93
- .v-application .v-application .text-subtitle-2 { letter-spacing: var(--v-typography-subtitle2-letter-spacing, 0px); }
94
- .v-application .v-application .text-caption { letter-spacing: var(--v-typography-caption-letter-spacing, 0px); }
95
- .v-application .v-application .text-overline { letter-spacing: var(--v-typography-overline-letter-spacing, 0px); }
96
- .v-application .v-application .text-button { letter-spacing: var(--v-typography-button-letter-spacing, 0px); }
97
- .v-application .v-application h1 { letter-spacing: var(--v-typography-h1-letter-spacing, 0px); }
98
- .v-application .v-application h2 { letter-spacing: var(--v-typography-h2-letter-spacing, 0px); }
99
- .v-application .v-application h3 { letter-spacing: var(--v-typography-h3-letter-spacing, 0px); }
100
- .v-application .v-application h4 { letter-spacing: var(--v-typography-h4-letter-spacing, 0px); }
101
- .v-application .v-application h5 { letter-spacing: var(--v-typography-h5-letter-spacing, 0px); }
102
- .v-application .v-application h6 { letter-spacing: var(--v-typography-h6-letter-spacing, 0px); }
103
- `
104
-
105
- styleElement.textContent = cssRules
106
-
107
- // Append to head
108
- document.head.appendChild(styleElement)
109
- }
110
-
111
- /**
112
- * Apply design token letter-spacing values using multiple approaches
113
- */
114
- function applyTokenLetterSpacing(element: HTMLElement): void {
115
- // Try to modify existing Vuetify stylesheets first
116
- modifyVuetifyStylesheets()
117
-
118
- // Inject override CSS with !important but using CSS custom properties
119
- injectOverrideCSS()
120
-
121
- // Set CSS variables with design token values
122
- const rootElement = document.documentElement
123
- const rootStyle = getComputedStyle(rootElement)
124
-
125
- // List of all typography CSS variables to set
126
- const typographyVars = [
127
- '--v-typography-h1-letter-spacing',
128
- '--v-typography-h2-letter-spacing',
129
- '--v-typography-h3-letter-spacing',
130
- '--v-typography-h4-letter-spacing',
131
- '--v-typography-h5-letter-spacing',
132
- '--v-typography-h6-letter-spacing',
133
- '--v-typography-body1-letter-spacing',
134
- '--v-typography-body2-letter-spacing',
135
- '--v-typography-subtitle1-letter-spacing',
136
- '--v-typography-subtitle2-letter-spacing',
137
- '--v-typography-caption-letter-spacing',
138
- '--v-typography-overline-letter-spacing',
139
- '--v-typography-button-letter-spacing',
140
- ]
141
-
142
- // Set each CSS variable with design token values
143
- typographyVars.forEach((cssVar) => {
144
- const tokenValue = rootStyle.getPropertyValue(cssVar).trim()
145
- const finalValue = tokenValue || '0px'
146
-
147
- rootElement.style.setProperty(cssVar, finalValue)
148
- })
149
-
150
- // Add debugging attributes
151
- element.setAttribute('data-letter-spacing-override', 'multi-approach')
152
- element.setAttribute('data-letter-spacing-timestamp', Date.now().toString())
153
- }
154
-
155
- /**
156
- * Vue directive to override Vuetify's !important letter-spacing with design token values
157
- *
158
- * Usage:
159
- * - v-letter-spacing (applies to all typography elements)
160
- * - v-letter-spacing="{ applyToAll: false, selectors: ['.text-h1', '.text-h2'] }"
161
- * - v-letter-spacing="{ observeChanges: false }" (disable mutation observer)
162
- */
163
- export const vLetterSpacing: Directive<HTMLElement, LetterSpacingOptions | boolean> = {
164
- mounted(el: HTMLElement, binding: DirectiveBinding<LetterSpacingOptions | boolean>) {
165
- const options: LetterSpacingOptions = typeof binding.value === 'boolean'
166
- ? { applyToAll: binding.value }
167
- : { applyToAll: true, observeChanges: true, ...binding.value }
168
-
169
- // Apply letter-spacing override immediately
170
- applyTokenLetterSpacing(el)
171
-
172
- // Set up mutation observer if enabled
173
- if (options.observeChanges !== false) {
174
- const observer = new MutationObserver((mutations) => {
175
- let shouldReapply = false
176
-
177
- mutations.forEach((mutation) => {
178
- // Check if new nodes were added
179
- if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
180
- shouldReapply = true
181
- }
182
- // Check if class attributes changed
183
- if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
184
- shouldReapply = true
185
- }
186
- })
187
-
188
- if (shouldReapply) {
189
- applyTokenLetterSpacing(el)
190
- }
191
- })
192
-
193
- observer.observe(el, {
194
- childList: true,
195
- subtree: true,
196
- attributes: true,
197
- attributeFilter: ['class'],
198
- })
199
-
200
- // Store observer reference for cleanup
201
- ;(el as HTMLElement & { _letterSpacingObserver?: MutationObserver })._letterSpacingObserver = observer
202
- }
203
- },
204
-
205
- updated(el: HTMLElement) {
206
- // Reapply letter-spacing override when component updates
207
- applyTokenLetterSpacing(el)
208
- },
209
-
210
- beforeUnmount(el: HTMLElement) {
211
- // Clean up mutation observer
212
- const observer = (el as HTMLElement & { _letterSpacingObserver?: MutationObserver })._letterSpacingObserver
213
- if (observer) {
214
- observer.disconnect()
215
- delete (el as HTMLElement & { _letterSpacingObserver?: MutationObserver })._letterSpacingObserver
216
- }
217
-
218
- // Remove override attributes
219
- const elements = el.querySelectorAll('[data-letter-spacing-override]')
220
- elements.forEach((element) => {
221
- element.removeAttribute('data-letter-spacing-override')
222
- element.removeAttribute('data-letter-spacing-timestamp')
223
- })
224
-
225
- // Clean up the main element if it has the override
226
- if (el.hasAttribute('data-letter-spacing-override')) {
227
- el.removeAttribute('data-letter-spacing-override')
228
- el.removeAttribute('data-letter-spacing-timestamp')
229
- }
230
- },
231
- }
232
-
233
- export default vLetterSpacing