@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.
- package/README.md +86 -0
- package/__tests__/anchors.spec.ts +43 -0
- package/__tests__/contract/blokkliComponents.spec.ts +59 -0
- package/__tests__/contract/componentFragments.spec.ts +24 -0
- package/__tests__/contract/languages.spec.ts +63 -0
- package/__tests__/contract/project.ts +144 -0
- package/__tests__/hreflang.spec.ts +39 -0
- package/{tests → __tests__}/pages.spec.ts +14 -5
- package/app.config.ts +15 -0
- package/app.vue +3 -21
- package/assets/css/backend.css +56 -0
- package/assets/css/base/base.css +2 -2
- package/assets/css/base/typography.css +2 -2
- package/assets/css/ckeditor.css +3 -4
- package/assets/css/components/decorations.css +1 -1
- package/assets/css/components/editor.css +1 -1
- package/assets/css/components/grid-container.css +19 -19
- package/assets/css/fe-fixes.css +6 -12
- package/assets/css/theme/colors/color-primary.css +33 -11
- package/assets/css/theme/colors/color-secondary.css +33 -11
- package/assets/css/utilities/utilities.css +1 -1
- package/assets/symbols/anchor.svg +3 -0
- package/blokkli.editAdapter.ts +56 -0
- package/bundles.ts +6 -6
- package/cache/__tests__/pageCache.spec.ts +540 -0
- package/cache/cacheTagRegistry.ts +124 -0
- package/cache/enabledForRequest.ts +21 -0
- package/cache/multiCache.serverOptions.ts +58 -0
- package/cache/pageCache.ts +360 -0
- package/components/Blokkli/Anchor/icon.svg +3 -0
- package/components/Blokkli/Anchor/index.vue +13 -0
- package/components/Blokkli/AnchorNavigation/icon.svg +8 -0
- package/components/Blokkli/AnchorNavigation/index.vue +9 -0
- package/components/Blokkli/Card/Element/index.vue +0 -1
- package/components/Blokkli/Collapsible/Element/index.vue +5 -0
- package/components/Blokkli/FAQ/Element/index.vue +0 -1
- package/components/Blokkli/Fragment/Separator/icon.svg +4 -0
- package/components/Blokkli/Fragment/Separator/index.vue +87 -0
- package/components/Blokkli/Gallery/index.vue +1 -3
- package/components/Blokkli/IconText/Element/index.vue +0 -1
- package/components/Blokkli/Introduction/index.vue +0 -1
- package/components/Blokkli/Listing/icon.svg +9 -0
- package/components/Blokkli/Listing/index.vue +24 -0
- package/components/Blokkli/Logo/Element/index.vue +0 -1
- package/components/Blokkli/Table/index.vue +0 -1
- package/components/Blokkli/Team/Element/index.vue +0 -1
- package/components/Blokkli/Team/Layout/index.vue +0 -1
- package/components/Blokkli/Testimonial/Element/index.vue +0 -1
- package/components/Blokkli/Text/index.vue +0 -1
- package/components/DesignSystem/Atoms/Button.vue +3 -0
- package/components/DesignSystem/Atoms/GridRow.vue +3 -1
- package/components/DesignSystem/Molecules/ButtonGroup.vue +5 -4
- package/components/DesignSystem/Molecules/IconText.vue +6 -6
- package/components/DesignSystem/Molecules/MediaLightbox.vue +8 -8
- package/components/DesignSystem/Molecules/MediaSlider.vue +9 -11
- package/components/DesignSystem/Molecules/Partnership.vue +7 -4
- package/components/DesignSystem/Molecules/Table.vue +35 -19
- package/components/DesignSystem/Molecules/TitleComposition.vue +46 -15
- package/components/DesignSystem/Molecules/iFrame.vue +2 -2
- package/components/DesignSystem/Organisms/CallToAction.vue +8 -7
- package/components/DesignSystem/Organisms/CallToActionFeature.vue +8 -7
- package/components/DesignSystem/Organisms/CallToActionFullwidth.vue +9 -8
- package/components/DesignSystem/Organisms/ContentBlock.vue +26 -16
- package/components/DesignSystem/Organisms/FacetedListing.vue +38 -17
- package/components/DesignSystem/Organisms/FactCard.vue +6 -7
- package/components/DesignSystem/Organisms/FeatureCard.vue +14 -14
- package/components/DesignSystem/Organisms/FlipTeaser.vue +19 -19
- package/components/DesignSystem/Organisms/HeaderHero.vue +11 -11
- package/components/DesignSystem/Organisms/HeaderTextImage.vue +10 -10
- package/components/DesignSystem/Organisms/LinkList.vue +20 -12
- package/components/DesignSystem/Organisms/LogoElement.vue +7 -4
- package/components/DesignSystem/Organisms/Map.vue +1 -1
- package/components/DesignSystem/Organisms/SearchResults.vue +15 -6
- package/components/DesignSystem/Organisms/SpotlightCard.vue +18 -18
- package/components/DesignSystem/Organisms/TeamElement.vue +19 -18
- package/components/DesignSystem/Organisms/TeaserCard.vue +16 -17
- package/components/DesignSystem/Organisms/TeaserSimple.vue +4 -31
- package/components/DesignSystem/Organisms/Testimonial.vue +13 -13
- package/components/DesignSystem/Organisms/TextCard.vue +10 -10
- package/components/DesignSystem/Organisms/TimelineElement.vue +20 -19
- package/components/DesignSystem/Organisms/TwoColumnTextElement.vue +5 -5
- package/components/DesignSystem/README.md +59 -40
- package/components/Drupal/Breadcrumb/index.vue +25 -12
- package/components/Drupal/Messages/index.vue +9 -4
- package/components/Drupal/Webform/index.vue +271 -51
- package/components/Drupal/Webform/mutation.graphql +17 -1
- package/components/Form/HiddenInput.vue +1 -4
- package/components/Form/SelectInput.vue +1 -1
- package/components/Form/SubmitButton.vue +2 -2
- package/components/Form/TextAreaInput.vue +3 -3
- package/components/Form/TextEmailInput.vue +1 -1
- package/components/Form/TextInput.vue +1 -1
- package/components/Form/TextPhoneInput.vue +1 -1
- package/components/Form/WebformMarkup.vue +1 -1
- package/components/Form/composables/useFormDefaultValue.ts +9 -13
- package/components/Form/composables/useFormElement.ts +5 -3
- package/components/Form/utils/types.ts +3 -3
- package/components/Media/Image/fragment.graphql +4 -0
- package/components/Media/Image/index.vue +27 -17
- package/components/Media/RemoteVideo/index.vue +3 -3
- package/components/Media/Video/index.vue +1 -1
- package/components/Node/Icms/Page/SearchResult/fragment.graphql +1 -1
- package/components/Node/Icms/Page/SearchResult/index.vue +2 -2
- package/components/Node/Icms/Page/Teaser/index.vue +1 -1
- package/components/Node/Icms/Page/index.vue +8 -2
- package/components/Paragraph/Anchor/fragment.graphql +4 -0
- package/components/Paragraph/Anchor/index.vue +48 -0
- package/components/Paragraph/AnchorNavigation/fragment.graphql +3 -0
- package/components/Paragraph/AnchorNavigation/index.vue +154 -0
- package/components/Paragraph/BlokkliFragment/fragment.graphql +5 -0
- package/components/Paragraph/Button/Element/fragment.graphql +1 -1
- package/components/Paragraph/Button/Element/index.vue +13 -8
- package/components/Paragraph/Card/Element/index.vue +1 -1
- package/components/Paragraph/Card/Layout/index.vue +9 -9
- package/components/Paragraph/Collapsible/Element/index.vue +2 -2
- package/components/Paragraph/Collapsible/Layout/index.vue +19 -18
- package/components/Paragraph/Contact/index.vue +17 -17
- package/components/Paragraph/Downloads/fragment.graphql +1 -1
- package/components/Paragraph/Downloads/index.vue +13 -13
- package/components/Paragraph/FAQ/Element/index.vue +4 -3
- package/components/Paragraph/FAQ/Layout/index.vue +42 -21
- package/components/Paragraph/FromLibrary/fragment.graphql +17 -0
- package/components/Paragraph/Gallery/index.vue +14 -14
- package/components/Paragraph/HeroImage/index.vue +26 -19
- package/components/Paragraph/IconText/Element/index.vue +4 -4
- package/components/Paragraph/IconText/Layout/index.vue +12 -12
- package/components/Paragraph/Introduction/index.vue +17 -17
- package/components/Paragraph/LinkLists/Element/fragment.graphql +1 -1
- package/components/Paragraph/LinkLists/Element/index.vue +5 -5
- package/components/Paragraph/LinkLists/Layout/index.vue +9 -9
- package/components/Paragraph/Listing/fragment.graphql +14 -0
- package/components/Paragraph/Listing/index.vue +91 -0
- package/components/Paragraph/Logo/Element/fragment.graphql +1 -1
- package/components/Paragraph/Logo/Element/index.vue +7 -4
- package/components/Paragraph/Media/index.vue +23 -21
- package/components/Paragraph/Partnerships/Element/fragment.graphql +1 -1
- package/components/Paragraph/Partnerships/Element/index.vue +10 -7
- package/components/Paragraph/Partnerships/Layout/index.vue +13 -13
- package/components/Paragraph/SingleTestimonial/index.vue +13 -13
- package/components/Paragraph/Table/index.vue +12 -12
- package/components/Paragraph/Team/Element/index.vue +16 -14
- package/components/Paragraph/Team/Layout/index.vue +9 -9
- package/components/Paragraph/Teasers/index.vue +14 -17
- package/components/Paragraph/Testimonial/Element/index.vue +19 -18
- package/components/Paragraph/Testimonial/Layout/index.vue +24 -18
- package/components/Paragraph/Text/fragment.graphql +1 -1
- package/components/Paragraph/Text/index.vue +8 -8
- package/components/Paragraph/TextMedia/index.vue +22 -22
- package/components/Paragraph/Timeline/Element/index.vue +19 -19
- package/components/Paragraph/Timeline/Layout/index.vue +51 -20
- package/components/Paragraph/TwoColumnText/Element/index.vue +13 -13
- package/components/Paragraph/TwoColumnText/Layout/index.vue +1 -1
- package/components/Paragraph/iFrame/index.vue +8 -8
- package/components/Search/Facets/FacetDropdownUI.vue +25 -31
- package/components/Search/Facets/FacetedSearchUI.vue +72 -48
- package/components/Search/Facets/fragment.graphql +20 -15
- package/components/Section/Footer/index.vue +55 -32
- package/components/Section/Header/Buttons.vue +4 -5
- package/components/Section/Header/DesktopMainMenu.vue +5 -4
- package/components/Section/Header/DesktopMainMenuDropdown.vue +5 -5
- package/components/Section/Header/LanguageDropdown.vue +2 -3
- package/components/Section/Header/Logo.vue +3 -3
- package/components/Section/Header/MainButtons.vue +4 -5
- package/components/Section/Header/MetaButtons.vue +5 -6
- package/components/Section/Header/MetaMenu.vue +1 -1
- package/components/Section/Header/MobileMainMenu.vue +1 -1
- package/components/Section/Header/MobileMainMenuItem.vue +2 -2
- package/components/Section/Header/index.vue +6 -13
- package/composables/__tests__/useImageSources.spec.ts +91 -0
- package/composables/breadcrumb.ts +12 -7
- package/composables/useAccordionScroll.ts +12 -4
- package/composables/useAllowedFragments.ts +14 -0
- package/composables/useAnchors.ts +48 -0
- package/composables/useChildTitleWeight.ts +1 -1
- package/composables/useCurrentLangcodeEnum.ts +1 -1
- package/composables/useCurrentNodeId.ts +8 -0
- package/composables/useDrupalUrl.ts +15 -0
- package/composables/useEnrichFacetLabels.ts +8 -6
- package/composables/useEntityRegistry.ts +3 -3
- package/composables/useGlobalConfig.ts +1 -2
- package/composables/useGraphqlCacheability.ts +12 -1
- package/composables/useHreflangLinks.ts +54 -0
- package/composables/useImageSources.ts +70 -28
- package/composables/useInitData.ts +1 -2
- package/composables/useIsHomepage.ts +1 -1
- package/composables/useLinkUrl.ts +30 -0
- package/composables/useMediaLightbox.ts +62 -50
- package/composables/useMenu.ts +1 -3
- package/composables/useMessageBus.ts +14 -7
- package/composables/useMobileMenuOverlayBus.ts +1 -1
- package/composables/useNavigationOffset.ts +49 -6
- package/composables/usePageCache.ts +33 -0
- package/composables/useSiteShell.ts +11 -0
- package/composables/useTheme.ts +17 -13
- package/config/__tests__/stubs/nuxt-multi-cache-config.ts +2 -0
- package/config/blokkli.ts +7 -13
- package/config/easyTexts.ts +1 -1
- package/config/graphqlMiddleware.ts +11 -4
- package/config/index.ts +5 -2
- package/config/languageNegotiation.ts +1 -1
- package/config/multiCache.ts +6 -1
- package/config/postcss-drupal/postcss.config.cjs +2 -2
- package/config/runtimeConfig.ts +7 -2
- package/config/svgIconSprite.ts +1 -2
- package/config/vuepal.ts +16 -18
- package/error.vue +1 -22
- package/layouts/default.vue +2 -6
- package/layouts/error.vue +7 -15
- package/modules/blokkliFragments.ts +76 -0
- package/modules/dynamicEntityComponentResolver.ts +47 -47
- package/modules/dynamicParagraphResolver.ts +43 -8
- package/modules/pageCache.ts +106 -0
- package/nuxt.config.ts +62 -33
- package/package.json +23 -22
- package/pages/[...slug]/index.vue +25 -4
- package/pages/index.vue +3 -3
- package/pages/node/[nid]/index.vue +2 -3
- package/patches/@blokkli+editor+2.0.0-alpha.13.patch +15 -1
- package/plugins/currentNode.ts +17 -0
- package/plugins/graphqlMiddleware.ts +10 -2
- package/plugins/initData.ts +15 -7
- package/plugins/registerNodeIcmsPageComponents.ts +6 -2
- package/plugins/siteShell.client.ts +94 -0
- package/queries/facetTermLabels.graphql +1 -5
- package/queries/fragment.linkUrl.graphql +12 -0
- package/queries/query.contentSearch.graphql +17 -2
- package/queries/query.initData.graphql +1 -1
- package/scripts/create-shade.ts +13 -4
- package/scripts/update-icms.ts +3 -1
- package/server/__tests__/graphqlMiddleware.serverOptions.spec.ts +2 -2
- package/server/__tests__/turnstile.spec.ts +119 -0
- package/server/api/icms/blokkli/last-changed.get.ts +24 -0
- package/server/api/icon/[...params].ts +3 -9
- package/server/graphqlMiddleware.serverOptions.ts +9 -8
- package/server/helpers/index.ts +0 -1
- package/server/middleware/turnstile.ts +51 -0
- package/server/plugins/frameAncestors.ts +20 -0
- package/server/plugins/pageCache.ts +59 -0
- package/server/utils/__tests__/accessDeniedHandover.spec.ts +49 -0
- package/server/utils/__tests__/backendRequestHeaders.spec.ts +115 -0
- package/server/utils/accessDeniedHandover.ts +48 -0
- package/server/utils/backendRequestHeaders.ts +51 -0
- package/server/utils/cacheability.ts +4 -4
- package/shared/__tests__/blokkliState.spec.ts +54 -0
- package/shared/__tests__/csp.spec.ts +53 -0
- package/shared/__tests__/drupalUrl.spec.ts +50 -0
- package/shared/blokkliState.ts +40 -0
- package/shared/csp.ts +47 -0
- package/shared/drupalUrl.ts +30 -0
- package/tailwind.config.ts +0 -5
- package/types/breadcrumb.ts +22 -0
- package/types/global.ts +15 -14
- package/types/langcode.ts +16 -0
- package/types/layerConfig.ts +84 -0
- package/utils/pageCache.ts +95 -0
- package/utils/turnstile.ts +35 -0
- package/composables/useWebformEnrichment.ts +0 -68
- package/server/__tests__/graphqlMiddleware.ts +0 -41
- package/server/multiCache.serverOptions.ts +0 -32
- 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,
|
|
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,
|
|
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'
|
|
49
|
-
import cn from '@iqual/nuxt-icms/composables/useCn'
|
|
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
|
|
57
|
-
|
|
58
|
-
| `Button.vue`
|
|
59
|
-
| `Caption.vue`
|
|
60
|
-
| `Container.vue`
|
|
61
|
-
| `GridRow.vue`
|
|
62
|
-
| `LinkListItem.vue` | Navigation 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
|
|
67
|
-
|
|
68
|
-
| `ButtonGroup.vue`
|
|
69
|
-
| `Card.vue`
|
|
70
|
-
| `IconText.vue`
|
|
71
|
-
| `MediaLightbox.vue`
|
|
72
|
-
| `MediaSlider.vue`
|
|
73
|
-
| `Partnership.vue`
|
|
74
|
-
| `Table.vue`
|
|
75
|
-
| `TitleComposition.vue` | Heading combinations
|
|
76
|
-
| `iFrame.vue`
|
|
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
|
|
81
|
-
|
|
82
|
-
| `ContentBlock.vue`
|
|
83
|
-
| `FlipTeaser.vue`
|
|
84
|
-
| `LogoElement.vue`
|
|
85
|
-
| `Map.vue`
|
|
86
|
-
| `TeamElement.vue`
|
|
87
|
-
| `TeaserCard.vue`
|
|
88
|
-
| `Testimonial.vue`
|
|
89
|
-
| `TimelineElement.vue`
|
|
90
|
-
| `TwoColumnTextElement.vue` | Text layout
|
|
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(
|
|
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
|
|
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
|
|
4
|
-
|
|
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
|
|
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 {
|
|
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:
|
|
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="
|
|
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
|
|
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
|
-
|
|
31
|
+
defineProps<{
|
|
27
32
|
wrapperClass?: string
|
|
28
33
|
innerClass?: string
|
|
29
34
|
messageClass?: string
|