@iqual/nuxt-icms 1.6.1 → 1.6.2-rc.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.
Files changed (260) hide show
  1. package/README.md +86 -0
  2. package/__tests__/anchors.spec.ts +43 -0
  3. package/__tests__/contract/blokkliComponents.spec.ts +59 -0
  4. package/__tests__/contract/componentFragments.spec.ts +24 -0
  5. package/__tests__/contract/languages.spec.ts +63 -0
  6. package/__tests__/contract/project.ts +144 -0
  7. package/__tests__/hreflang.spec.ts +39 -0
  8. package/{tests → __tests__}/pages.spec.ts +14 -5
  9. package/app.config.ts +15 -0
  10. package/app.vue +3 -21
  11. package/assets/css/backend.css +56 -0
  12. package/assets/css/base/base.css +2 -2
  13. package/assets/css/base/typography.css +2 -2
  14. package/assets/css/ckeditor.css +3 -4
  15. package/assets/css/components/decorations.css +1 -1
  16. package/assets/css/components/editor.css +1 -1
  17. package/assets/css/components/grid-container.css +19 -19
  18. package/assets/css/fe-fixes.css +6 -12
  19. package/assets/css/theme/colors/color-primary.css +33 -11
  20. package/assets/css/theme/colors/color-secondary.css +33 -11
  21. package/assets/css/utilities/utilities.css +1 -1
  22. package/assets/symbols/anchor.svg +3 -0
  23. package/blokkli.editAdapter.ts +56 -0
  24. package/bundles.ts +6 -6
  25. package/cache/__tests__/pageCache.spec.ts +540 -0
  26. package/cache/cacheTagRegistry.ts +124 -0
  27. package/cache/enabledForRequest.ts +21 -0
  28. package/cache/multiCache.serverOptions.ts +58 -0
  29. package/cache/pageCache.ts +360 -0
  30. package/components/Blokkli/Anchor/icon.svg +3 -0
  31. package/components/Blokkli/Anchor/index.vue +13 -0
  32. package/components/Blokkli/AnchorNavigation/icon.svg +8 -0
  33. package/components/Blokkli/AnchorNavigation/index.vue +9 -0
  34. package/components/Blokkli/Card/Element/index.vue +0 -1
  35. package/components/Blokkli/Collapsible/Element/index.vue +5 -0
  36. package/components/Blokkli/FAQ/Element/index.vue +0 -1
  37. package/components/Blokkli/Fragment/Separator/icon.svg +4 -0
  38. package/components/Blokkli/Fragment/Separator/index.vue +87 -0
  39. package/components/Blokkli/Gallery/index.vue +1 -3
  40. package/components/Blokkli/IconText/Element/index.vue +0 -1
  41. package/components/Blokkli/Introduction/index.vue +0 -1
  42. package/components/Blokkli/Listing/icon.svg +9 -0
  43. package/components/Blokkli/Listing/index.vue +24 -0
  44. package/components/Blokkli/Logo/Element/index.vue +0 -1
  45. package/components/Blokkli/Table/index.vue +0 -1
  46. package/components/Blokkli/Team/Element/index.vue +0 -1
  47. package/components/Blokkli/Team/Layout/index.vue +0 -1
  48. package/components/Blokkli/Testimonial/Element/index.vue +0 -1
  49. package/components/Blokkli/Text/index.vue +0 -1
  50. package/components/DesignSystem/Atoms/Button.vue +3 -0
  51. package/components/DesignSystem/Atoms/GridRow.vue +3 -1
  52. package/components/DesignSystem/Molecules/ButtonGroup.vue +5 -4
  53. package/components/DesignSystem/Molecules/IconText.vue +6 -6
  54. package/components/DesignSystem/Molecules/MediaLightbox.vue +8 -8
  55. package/components/DesignSystem/Molecules/MediaSlider.vue +9 -11
  56. package/components/DesignSystem/Molecules/Partnership.vue +7 -4
  57. package/components/DesignSystem/Molecules/Table.vue +35 -19
  58. package/components/DesignSystem/Molecules/TitleComposition.vue +46 -15
  59. package/components/DesignSystem/Molecules/iFrame.vue +2 -2
  60. package/components/DesignSystem/Organisms/CallToAction.vue +8 -7
  61. package/components/DesignSystem/Organisms/CallToActionFeature.vue +8 -7
  62. package/components/DesignSystem/Organisms/CallToActionFullwidth.vue +9 -8
  63. package/components/DesignSystem/Organisms/ContentBlock.vue +26 -16
  64. package/components/DesignSystem/Organisms/FacetedListing.vue +38 -17
  65. package/components/DesignSystem/Organisms/FactCard.vue +6 -7
  66. package/components/DesignSystem/Organisms/FeatureCard.vue +14 -14
  67. package/components/DesignSystem/Organisms/FlipTeaser.vue +19 -19
  68. package/components/DesignSystem/Organisms/HeaderHero.vue +11 -11
  69. package/components/DesignSystem/Organisms/HeaderTextImage.vue +10 -10
  70. package/components/DesignSystem/Organisms/LinkList.vue +20 -12
  71. package/components/DesignSystem/Organisms/LogoElement.vue +7 -4
  72. package/components/DesignSystem/Organisms/Map.vue +1 -1
  73. package/components/DesignSystem/Organisms/SearchResults.vue +15 -6
  74. package/components/DesignSystem/Organisms/SpotlightCard.vue +18 -18
  75. package/components/DesignSystem/Organisms/TeamElement.vue +19 -18
  76. package/components/DesignSystem/Organisms/TeaserCard.vue +16 -17
  77. package/components/DesignSystem/Organisms/TeaserSimple.vue +4 -31
  78. package/components/DesignSystem/Organisms/Testimonial.vue +13 -13
  79. package/components/DesignSystem/Organisms/TextCard.vue +10 -10
  80. package/components/DesignSystem/Organisms/TimelineElement.vue +20 -19
  81. package/components/DesignSystem/Organisms/TwoColumnTextElement.vue +5 -5
  82. package/components/DesignSystem/README.md +59 -40
  83. package/components/Drupal/Breadcrumb/index.vue +25 -12
  84. package/components/Drupal/Messages/index.vue +9 -4
  85. package/components/Drupal/Webform/index.vue +271 -51
  86. package/components/Drupal/Webform/mutation.graphql +17 -1
  87. package/components/Form/HiddenInput.vue +1 -4
  88. package/components/Form/SelectInput.vue +1 -1
  89. package/components/Form/SubmitButton.vue +2 -2
  90. package/components/Form/TextAreaInput.vue +3 -3
  91. package/components/Form/TextEmailInput.vue +1 -1
  92. package/components/Form/TextInput.vue +1 -1
  93. package/components/Form/TextPhoneInput.vue +1 -1
  94. package/components/Form/WebformMarkup.vue +1 -1
  95. package/components/Form/composables/useFormDefaultValue.ts +9 -13
  96. package/components/Form/composables/useFormElement.ts +5 -3
  97. package/components/Form/utils/types.ts +3 -3
  98. package/components/Media/Image/fragment.graphql +4 -0
  99. package/components/Media/Image/index.vue +27 -17
  100. package/components/Media/RemoteVideo/index.vue +3 -3
  101. package/components/Media/Video/index.vue +1 -1
  102. package/components/Node/Icms/Page/SearchResult/fragment.graphql +1 -1
  103. package/components/Node/Icms/Page/SearchResult/index.vue +2 -2
  104. package/components/Node/Icms/Page/Teaser/index.vue +1 -1
  105. package/components/Node/Icms/Page/index.vue +8 -2
  106. package/components/Paragraph/Anchor/fragment.graphql +4 -0
  107. package/components/Paragraph/Anchor/index.vue +48 -0
  108. package/components/Paragraph/AnchorNavigation/fragment.graphql +3 -0
  109. package/components/Paragraph/AnchorNavigation/index.vue +154 -0
  110. package/components/Paragraph/BlokkliFragment/fragment.graphql +5 -0
  111. package/components/Paragraph/Button/Element/fragment.graphql +1 -1
  112. package/components/Paragraph/Button/Element/index.vue +13 -8
  113. package/components/Paragraph/Card/Element/index.vue +1 -1
  114. package/components/Paragraph/Card/Layout/index.vue +9 -9
  115. package/components/Paragraph/Collapsible/Element/index.vue +2 -2
  116. package/components/Paragraph/Collapsible/Layout/index.vue +19 -18
  117. package/components/Paragraph/Contact/index.vue +17 -17
  118. package/components/Paragraph/Downloads/fragment.graphql +1 -1
  119. package/components/Paragraph/Downloads/index.vue +13 -13
  120. package/components/Paragraph/FAQ/Element/index.vue +4 -3
  121. package/components/Paragraph/FAQ/Layout/index.vue +42 -21
  122. package/components/Paragraph/FromLibrary/fragment.graphql +17 -0
  123. package/components/Paragraph/Gallery/index.vue +14 -14
  124. package/components/Paragraph/HeroImage/index.vue +26 -19
  125. package/components/Paragraph/IconText/Element/index.vue +4 -4
  126. package/components/Paragraph/IconText/Layout/index.vue +12 -12
  127. package/components/Paragraph/Introduction/index.vue +17 -17
  128. package/components/Paragraph/LinkLists/Element/fragment.graphql +1 -1
  129. package/components/Paragraph/LinkLists/Element/index.vue +5 -5
  130. package/components/Paragraph/LinkLists/Layout/index.vue +9 -9
  131. package/components/Paragraph/Listing/fragment.graphql +14 -0
  132. package/components/Paragraph/Listing/index.vue +91 -0
  133. package/components/Paragraph/Logo/Element/fragment.graphql +1 -1
  134. package/components/Paragraph/Logo/Element/index.vue +7 -4
  135. package/components/Paragraph/Media/index.vue +23 -21
  136. package/components/Paragraph/Partnerships/Element/fragment.graphql +1 -1
  137. package/components/Paragraph/Partnerships/Element/index.vue +10 -7
  138. package/components/Paragraph/Partnerships/Layout/index.vue +13 -13
  139. package/components/Paragraph/SingleTestimonial/index.vue +13 -13
  140. package/components/Paragraph/Table/index.vue +12 -12
  141. package/components/Paragraph/Team/Element/index.vue +16 -14
  142. package/components/Paragraph/Team/Layout/index.vue +9 -9
  143. package/components/Paragraph/Teasers/index.vue +14 -17
  144. package/components/Paragraph/Testimonial/Element/index.vue +19 -18
  145. package/components/Paragraph/Testimonial/Layout/index.vue +24 -18
  146. package/components/Paragraph/Text/fragment.graphql +1 -1
  147. package/components/Paragraph/Text/index.vue +8 -8
  148. package/components/Paragraph/TextMedia/index.vue +22 -22
  149. package/components/Paragraph/Timeline/Element/index.vue +19 -19
  150. package/components/Paragraph/Timeline/Layout/index.vue +51 -20
  151. package/components/Paragraph/TwoColumnText/Element/index.vue +13 -13
  152. package/components/Paragraph/TwoColumnText/Layout/index.vue +1 -1
  153. package/components/Paragraph/iFrame/index.vue +8 -8
  154. package/components/Search/Facets/FacetDropdownUI.vue +25 -31
  155. package/components/Search/Facets/FacetedSearchUI.vue +72 -48
  156. package/components/Search/Facets/fragment.graphql +20 -15
  157. package/components/Section/Footer/index.vue +55 -32
  158. package/components/Section/Header/Buttons.vue +4 -5
  159. package/components/Section/Header/DesktopMainMenu.vue +5 -4
  160. package/components/Section/Header/DesktopMainMenuDropdown.vue +5 -5
  161. package/components/Section/Header/LanguageDropdown.vue +2 -3
  162. package/components/Section/Header/Logo.vue +3 -3
  163. package/components/Section/Header/MainButtons.vue +4 -5
  164. package/components/Section/Header/MetaButtons.vue +5 -6
  165. package/components/Section/Header/MetaMenu.vue +1 -1
  166. package/components/Section/Header/MobileMainMenu.vue +1 -1
  167. package/components/Section/Header/MobileMainMenuItem.vue +2 -2
  168. package/components/Section/Header/index.vue +6 -13
  169. package/composables/__tests__/useImageSources.spec.ts +91 -0
  170. package/composables/breadcrumb.ts +12 -7
  171. package/composables/useAccordionScroll.ts +12 -4
  172. package/composables/useAllowedFragments.ts +14 -0
  173. package/composables/useAnchors.ts +48 -0
  174. package/composables/useChildTitleWeight.ts +1 -1
  175. package/composables/useCurrentLangcodeEnum.ts +1 -1
  176. package/composables/useCurrentNodeId.ts +8 -0
  177. package/composables/useDrupalUrl.ts +15 -0
  178. package/composables/useEnrichFacetLabels.ts +8 -6
  179. package/composables/useEntityRegistry.ts +3 -3
  180. package/composables/useGlobalConfig.ts +1 -2
  181. package/composables/useGraphqlCacheability.ts +12 -1
  182. package/composables/useHreflangLinks.ts +54 -0
  183. package/composables/useImageSources.ts +70 -28
  184. package/composables/useInitData.ts +1 -2
  185. package/composables/useIsHomepage.ts +1 -1
  186. package/composables/useLinkUrl.ts +30 -0
  187. package/composables/useMediaLightbox.ts +62 -50
  188. package/composables/useMenu.ts +1 -3
  189. package/composables/useMessageBus.ts +14 -7
  190. package/composables/useMobileMenuOverlayBus.ts +1 -1
  191. package/composables/useNavigationOffset.ts +49 -6
  192. package/composables/usePageCache.ts +33 -0
  193. package/composables/useSiteShell.ts +11 -0
  194. package/composables/useTheme.ts +17 -13
  195. package/config/__tests__/stubs/nuxt-multi-cache-config.ts +2 -0
  196. package/config/blokkli.ts +7 -13
  197. package/config/easyTexts.ts +1 -1
  198. package/config/graphqlMiddleware.ts +11 -4
  199. package/config/index.ts +5 -2
  200. package/config/languageNegotiation.ts +1 -1
  201. package/config/multiCache.ts +6 -1
  202. package/config/postcss-drupal/postcss.config.cjs +2 -2
  203. package/config/runtimeConfig.ts +7 -2
  204. package/config/svgIconSprite.ts +1 -2
  205. package/config/vuepal.ts +16 -18
  206. package/error.vue +1 -22
  207. package/layouts/default.vue +2 -6
  208. package/layouts/error.vue +7 -15
  209. package/modules/blokkliFragments.ts +76 -0
  210. package/modules/dynamicEntityComponentResolver.ts +47 -47
  211. package/modules/dynamicParagraphResolver.ts +43 -8
  212. package/modules/pageCache.ts +106 -0
  213. package/nuxt.config.ts +62 -33
  214. package/package.json +23 -22
  215. package/pages/[...slug]/index.vue +25 -4
  216. package/pages/index.vue +3 -3
  217. package/pages/node/[nid]/index.vue +2 -3
  218. package/patches/@blokkli+editor+2.0.0-alpha.13.patch +15 -1
  219. package/plugins/currentNode.ts +17 -0
  220. package/plugins/graphqlMiddleware.ts +10 -2
  221. package/plugins/initData.ts +15 -7
  222. package/plugins/registerNodeIcmsPageComponents.ts +6 -2
  223. package/plugins/siteShell.client.ts +94 -0
  224. package/queries/facetTermLabels.graphql +1 -5
  225. package/queries/fragment.linkUrl.graphql +12 -0
  226. package/queries/query.contentSearch.graphql +17 -2
  227. package/queries/query.initData.graphql +1 -1
  228. package/scripts/create-shade.ts +13 -4
  229. package/scripts/update-icms.ts +3 -1
  230. package/server/__tests__/graphqlMiddleware.serverOptions.spec.ts +2 -2
  231. package/server/__tests__/turnstile.spec.ts +119 -0
  232. package/server/api/icms/blokkli/last-changed.get.ts +24 -0
  233. package/server/api/icon/[...params].ts +3 -9
  234. package/server/graphqlMiddleware.serverOptions.ts +9 -8
  235. package/server/helpers/index.ts +0 -1
  236. package/server/middleware/turnstile.ts +51 -0
  237. package/server/plugins/frameAncestors.ts +20 -0
  238. package/server/plugins/pageCache.ts +59 -0
  239. package/server/utils/__tests__/accessDeniedHandover.spec.ts +49 -0
  240. package/server/utils/__tests__/backendRequestHeaders.spec.ts +115 -0
  241. package/server/utils/accessDeniedHandover.ts +48 -0
  242. package/server/utils/backendRequestHeaders.ts +51 -0
  243. package/server/utils/cacheability.ts +4 -4
  244. package/shared/__tests__/blokkliState.spec.ts +54 -0
  245. package/shared/__tests__/csp.spec.ts +53 -0
  246. package/shared/__tests__/drupalUrl.spec.ts +50 -0
  247. package/shared/blokkliState.ts +40 -0
  248. package/shared/csp.ts +47 -0
  249. package/shared/drupalUrl.ts +30 -0
  250. package/tailwind.config.ts +0 -5
  251. package/types/breadcrumb.ts +22 -0
  252. package/types/global.ts +15 -14
  253. package/types/langcode.ts +16 -0
  254. package/types/layerConfig.ts +84 -0
  255. package/utils/pageCache.ts +95 -0
  256. package/utils/turnstile.ts +35 -0
  257. package/composables/useWebformEnrichment.ts +0 -68
  258. package/server/__tests__/graphqlMiddleware.ts +0 -41
  259. package/server/multiCache.serverOptions.ts +0 -32
  260. package/vitest.config.mts +0 -28
@@ -1,6 +1,8 @@
1
1
  # ICMS Design System Documentation
2
2
 
3
- The ICMS Design System is built following Atomic Design principles with Vue 3, Nuxt 3, TypeScript, and Tailwind CSS. It provides a comprehensive set of reusable components organized into Atoms, Molecules, and Organisms.
3
+ The ICMS Design System is built following Atomic Design principles with Vue 3,
4
+ Nuxt 3, TypeScript, and Tailwind CSS. It provides a comprehensive set of
5
+ reusable components organized into Atoms, Molecules, and Organisms.
4
6
 
5
7
  ## Table of Contents
6
8
 
@@ -21,7 +23,8 @@ The design system follows **Atomic Design methodology**:
21
23
 
22
24
  - **Atoms**: Basic building blocks (buttons, inputs, containers)
23
25
  - **Molecules**: Simple combinations of atoms (cards, forms, navigation items)
24
- - **Organisms**: Complex components combining molecules and atoms (headers, sections, content blocks)
26
+ - **Organisms**: Complex components combining molecules and atoms (headers,
27
+ sections, content blocks)
25
28
 
26
29
  ### File Structure
27
30
 
@@ -45,49 +48,49 @@ components/DesignSystem/
45
48
  ### Key Dependencies
46
49
 
47
50
  ```typescript
48
- import { tv } from 'tailwind-variants' // Component variants
49
- import cn from '@iqual/nuxt-icms/composables/useCn' // Class merging
51
+ import { tv } from 'tailwind-variants' // Component variants
52
+ import cn from '@iqual/nuxt-icms/composables/useCn' // Class merging
50
53
  ```
51
54
 
52
55
  ## Component Hierarchy
53
56
 
54
57
  ### Atoms
55
58
 
56
- | Component | Purpose | Key Features |
57
- |-----------|---------|--------------|
58
- | `Button.vue` | Interactive elements | Multiple styles, color schemes, link integration |
59
- | `Caption.vue` | Text captions | Typography variants |
60
- | `Container.vue` | Layout wrapper | Responsive containers |
61
- | `GridRow.vue` | Grid layout | CSS Grid implementation |
62
- | `LinkListItem.vue` | Navigation items | Styled list items |
59
+ | Component | Purpose | Key Features |
60
+ | ------------------ | -------------------- | ------------------------------------------------ |
61
+ | `Button.vue` | Interactive elements | Multiple styles, color schemes, link integration |
62
+ | `Caption.vue` | Text captions | Typography variants |
63
+ | `Container.vue` | Layout wrapper | Responsive containers |
64
+ | `GridRow.vue` | Grid layout | CSS Grid implementation |
65
+ | `LinkListItem.vue` | Navigation items | Styled list items |
63
66
 
64
67
  ### Molecules
65
68
 
66
- | Component | Purpose | Key Features |
67
- |-----------|---------|--------------|
68
- | `ButtonGroup.vue` | Button collections | Grouped button layout |
69
- | `Card.vue` | Content cards | Media integration, color schemes |
70
- | `IconText.vue` | Icon + text combinations | Flexible icon positioning |
71
- | `MediaLightbox.vue` | Media overlay | Carousel, keyboard navigation |
72
- | `MediaSlider.vue` | Media carousels | Touch/swipe support |
73
- | `Partnership.vue` | Partner displays | Logo arrangements |
74
- | `Table.vue` | Data tables | Responsive table layout |
75
- | `TitleComposition.vue` | Heading combinations | Semantic heading structure |
76
- | `iFrame.vue` | Embedded content | Responsive iframe wrapper |
69
+ | Component | Purpose | Key Features |
70
+ | ---------------------- | ------------------------ | -------------------------------- |
71
+ | `ButtonGroup.vue` | Button collections | Grouped button layout |
72
+ | `Card.vue` | Content cards | Media integration, color schemes |
73
+ | `IconText.vue` | Icon + text combinations | Flexible icon positioning |
74
+ | `MediaLightbox.vue` | Media overlay | Carousel, keyboard navigation |
75
+ | `MediaSlider.vue` | Media carousels | Touch/swipe support |
76
+ | `Partnership.vue` | Partner displays | Logo arrangements |
77
+ | `Table.vue` | Data tables | Responsive table layout |
78
+ | `TitleComposition.vue` | Heading combinations | Semantic heading structure |
79
+ | `iFrame.vue` | Embedded content | Responsive iframe wrapper |
77
80
 
78
81
  ### Organisms
79
82
 
80
- | Component | Purpose | Key Features |
81
- |-----------|---------|--------------|
82
- | `ContentBlock.vue` | Rich content | Flexible content layout |
83
- | `FlipTeaser.vue` | Interactive cards | Hover/click animations |
84
- | `LogoElement.vue` | Brand display | Logo arrangements |
85
- | `Map.vue` | Geographic content | Map integration |
86
- | `TeamElement.vue` | People showcase | Team member cards |
87
- | `TeaserCard.vue` | Content previews | Image + text teasers |
88
- | `Testimonial.vue` | User feedback | Quote formatting |
89
- | `TimelineElement.vue` | Chronological content | Timeline layout |
90
- | `TwoColumnTextElement.vue` | Text layout | Multi-column text |
83
+ | Component | Purpose | Key Features |
84
+ | -------------------------- | --------------------- | ----------------------- |
85
+ | `ContentBlock.vue` | Rich content | Flexible content layout |
86
+ | `FlipTeaser.vue` | Interactive cards | Hover/click animations |
87
+ | `LogoElement.vue` | Brand display | Logo arrangements |
88
+ | `Map.vue` | Geographic content | Map integration |
89
+ | `TeamElement.vue` | People showcase | Team member cards |
90
+ | `TeaserCard.vue` | Content previews | Image + text teasers |
91
+ | `Testimonial.vue` | User feedback | Quote formatting |
92
+ | `TimelineElement.vue` | Chronological content | Timeline layout |
93
+ | `TwoColumnTextElement.vue` | Text layout | Multi-column text |
91
94
 
92
95
  ## Atoms
93
96
 
@@ -108,6 +111,7 @@ The foundational interactive component with comprehensive styling options.
108
111
  ```
109
112
 
110
113
  **Props:**
114
+
111
115
  - `label` (string): Button text
112
116
  - `subline` (string): Optional subtitle
113
117
  - `link` (string): Navigation target
@@ -117,6 +121,7 @@ The foundational interactive component with comprehensive styling options.
117
121
  - `textAlignment` (string): `left`, `center`, `right`
118
122
 
119
123
  **Variants:**
124
+
120
125
  - **Normal**: Standard button appearance
121
126
  - **Focus**: Emphasized styling
122
127
  - **Minimal**: Text-only, underlined
@@ -132,6 +137,7 @@ Responsive layout wrapper with consistent spacing.
132
137
  ```
133
138
 
134
139
  **Features:**
140
+
135
141
  - Responsive max-width
136
142
  - Consistent horizontal padding
137
143
  - Container query support
@@ -166,6 +172,7 @@ Versatile content container with media support.
166
172
  ```
167
173
 
168
174
  **Props:**
175
+
169
176
  - `title` (string): Card heading
170
177
  - `titleWeight` (string): Font weight
171
178
  - `text` (string): Description
@@ -174,6 +181,7 @@ Versatile content container with media support.
174
181
  - `colorScheme` (string): Color variant
175
182
 
176
183
  **Color Schemes:**
184
+
177
185
  - `none`: Default background
178
186
  - `dark`: Dark theme
179
187
  - `light`: Light theme
@@ -194,6 +202,7 @@ Advanced media overlay with carousel functionality.
194
202
  ```
195
203
 
196
204
  **Features:**
205
+
197
206
  - Multi-media support (images, videos, remote videos)
198
207
  - Keyboard navigation (arrow keys, escape)
199
208
  - Touch/swipe gestures
@@ -202,11 +211,13 @@ Advanced media overlay with carousel functionality.
202
211
  - Error handling
203
212
 
204
213
  **Props:**
214
+
205
215
  - `mediaObjects` (MediaFragment[]): Media array
206
216
  - `currentIndex` (number): Starting position
207
217
  - `isOpen` (boolean): Visibility state
208
218
 
209
219
  **Events:**
220
+
210
221
  - `close`: Lightbox closed
211
222
  - `navigate`: Index changed
212
223
 
@@ -223,6 +234,7 @@ Touch-enabled media carousel for galleries.
223
234
  ```
224
235
 
225
236
  **Features:**
237
+
226
238
  - Touch/swipe support
227
239
  - Responsive image sizing
228
240
  - Automatic thumbnail generation
@@ -248,6 +260,7 @@ Content preview component with image and text.
248
260
  ```
249
261
 
250
262
  **Props:**
263
+
251
264
  - `image` (MediaFragment): Preview image
252
265
  - `pretitle` (string): Category/tag
253
266
  - `title` (string): Main heading
@@ -273,6 +286,7 @@ Flexible content container for rich text and media.
273
286
  ```
274
287
 
275
288
  **Features:**
289
+
276
290
  - Semantic heading hierarchy
277
291
  - Rich text support
278
292
  - Flexible typography scaling
@@ -297,7 +311,11 @@ Utility for merging Tailwind classes.
297
311
  ```typescript
298
312
  import cn from '@iqual/nuxt-icms/composables/useCn'
299
313
 
300
- const classes = cn('base-class', conditionalClass && 'conditional', props.className)
314
+ const classes = cn(
315
+ 'base-class',
316
+ conditionalClass && 'conditional',
317
+ props.className,
318
+ )
301
319
  ```
302
320
 
303
321
  ### useIsMobile
@@ -316,7 +334,7 @@ The system supports four primary color schemes:
316
334
 
317
335
  1. **None**: Default/transparent backgrounds
318
336
  2. **Dark**: Dark theme with light text
319
- 3. **Light**: Light backgrounds with dark text
337
+ 3. **Light**: Light backgrounds with dark text
320
338
  4. **Accent**: Brand colors and highlights
321
339
 
322
340
  ### Responsive Design
@@ -397,7 +415,7 @@ Consistent spacing using Tailwind's spacing scale:
397
415
  title-style="heading-1"
398
416
  text="<p>Page content...</p>"
399
417
  />
400
-
418
+
401
419
  <DesignSystemAtomsGridRow :columns="3">
402
420
  <DesignSystemMoleculesCard
403
421
  v-for="item in items"
@@ -420,7 +438,7 @@ Consistent spacing using Tailwind's spacing scale:
420
438
  :media-objects="galleryImages"
421
439
  @click="openLightbox"
422
440
  />
423
-
441
+
424
442
  <DesignSystemMoleculesMediaLightbox
425
443
  :media-objects="galleryImages"
426
444
  :current-index="currentIndex"
@@ -454,14 +472,14 @@ const handleImageClick = (index: number) => {
454
472
  color-scheme="accent"
455
473
  text-alignment="center"
456
474
  />
457
-
475
+
458
476
  <!-- Secondary action -->
459
477
  <DesignSystemAtomsButton
460
478
  label="Learn More"
461
479
  style="normal"
462
480
  color-scheme="light"
463
481
  />
464
-
482
+
465
483
  <!-- Minimal link -->
466
484
  <DesignSystemAtomsButton
467
485
  label="Skip this step"
@@ -486,4 +504,5 @@ When adding new components:
486
504
  6. Test across different screen sizes
487
505
  7. Ensure accessibility compliance
488
506
 
489
- For questions or contributions, refer to the project's main documentation or contact the development team.
507
+ For questions or contributions, refer to the project's main documentation or
508
+ contact the development team.
@@ -1,7 +1,15 @@
1
1
  <template>
2
2
  <div :class="themedClass('containerClass', 'container mb-[30px] h-6 pt-20')">
3
- <section v-if="links.length" class="relative mobile-only:overflow-hidden" :class="themedClass('sectionClass')">
4
- <nav class="breadcrumb" aria-label="breadcrumbs" :class="themedClass('navClass')">
3
+ <section
4
+ v-if="links.length"
5
+ class="mobile-only:overflow-hidden relative"
6
+ :class="themedClass('sectionClass')"
7
+ >
8
+ <nav
9
+ class="breadcrumb"
10
+ aria-label="breadcrumbs"
11
+ :class="themedClass('navClass')"
12
+ >
5
13
  <ol
6
14
  ref="list"
7
15
  itemscope
@@ -17,7 +25,12 @@
17
25
  itemtype="http://schema.org/ListItem"
18
26
  :class="themedClass('listItemClass')"
19
27
  >
20
- <component :is="link.tag" v-bind="link.props" itemprop="item" :class="themedClass('linkClass')">
28
+ <component
29
+ :is="link.tag"
30
+ v-bind="link.props"
31
+ itemprop="item"
32
+ :class="themedClass('linkClass')"
33
+ >
21
34
  <span itemprop="name" :class="themedClass('linkLabelClass')">
22
35
  {{ link.title }}
23
36
  </span>
@@ -31,13 +44,13 @@
31
44
  </template>
32
45
 
33
46
  <script lang="ts" setup>
34
- import type { BreadcrumbFragment } from '#graphql-operations'
47
+ import type { BreadcrumbLink } from '@iqual/nuxt-icms/types/breadcrumb'
35
48
  import type { Langcode } from '#nuxt-language-negotiation/config'
36
49
  import { NuxtLink } from '#components'
37
50
  const themedClass = useTheme('DrupalBreadcrumb')
38
51
 
39
52
  const props = defineProps<{
40
- links: BreadcrumbFragment[]
53
+ links: BreadcrumbLink[]
41
54
  language?: Langcode
42
55
  containerClass?: string
43
56
  sectionClass?: string
@@ -74,21 +87,21 @@ watch(linksComputed, () => {
74
87
  <style lang="postcss">
75
88
  .breadcrumb {
76
89
  li {
77
- height: calc(var(--spacing)*6);
78
- color: color-mix(in srgb, oklch(21% .034 264.665) 60%, transparent);
90
+ height: calc(var(--spacing) * 6);
91
+ color: color-mix(in srgb, oklch(21% 0.034 264.665) 60%, transparent);
79
92
  &:not(:first-child):before {
80
93
  content: '›';
81
94
  font-size: var(--text-2xl);
82
- margin-inline-end: calc(var(--spacing)*4);
83
- margin-inline-start: calc(var(--spacing)*4);
95
+ margin-inline-end: calc(var(--spacing) * 4);
96
+ margin-inline-start: calc(var(--spacing) * 4);
84
97
  line-height: 0;
85
98
  }
86
99
  }
87
100
 
88
101
  a {
89
- color: color-mix(in srgb, oklch(21% .034 264.665) 60%, transparent);
90
- &:hover{
91
- color: var(--color-gray-700)
102
+ color: color-mix(in srgb, oklch(21% 0.034 264.665) 60%, transparent);
103
+ &:hover {
104
+ color: var(--color-gray-700);
92
105
  }
93
106
  }
94
107
  }
@@ -7,11 +7,16 @@
7
7
  <div
8
8
  v-for="(message, i) in messages"
9
9
  :key="i"
10
- class="flex items-center justify-between "
11
- :class="cn(themedClass('innerClass', 'rounded-sm p-6 font-medium'), classes[message.type])"
10
+ class="flex items-center justify-between"
11
+ :class="
12
+ cn(
13
+ themedClass('innerClass', 'rounded-sm p-6 font-medium'),
14
+ classes[message.type],
15
+ )
16
+ "
12
17
  @click="removeMessage(i)"
13
18
  >
14
- <div v-html="message.message" :class="themedClass('messageClass')"/>
19
+ <div :class="themedClass('messageClass')" v-html="message.message" />
15
20
  <SpriteSymbol name="close" :class="themedClass('iconClass', 'size-6')" />
16
21
  </div>
17
22
  </div>
@@ -23,7 +28,7 @@ import cn from '@iqual/nuxt-icms/composables/useCn'
23
28
 
24
29
  const themedClass = useTheme('DrupalMessages')
25
30
 
26
- const props = defineProps<{
31
+ defineProps<{
27
32
  wrapperClass?: string
28
33
  innerClass?: string
29
34
  messageClass?: string