@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,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<DesignSystemAtomsContainer
|
|
3
3
|
:spacing="spacing"
|
|
4
|
-
:
|
|
4
|
+
:color-scheme="colorScheme"
|
|
5
5
|
:class="themedClass('containerClass')"
|
|
6
6
|
>
|
|
7
7
|
<DesignSystemAtomsGridRow :class="themedClass('rowClass')">
|
|
@@ -19,16 +19,16 @@
|
|
|
19
19
|
>
|
|
20
20
|
<DesignSystemOrganismsContentBlock
|
|
21
21
|
:pretitle="pretitle"
|
|
22
|
-
:
|
|
22
|
+
:pretitle-class="themedClass('pretitleClass')"
|
|
23
23
|
:title="title"
|
|
24
|
-
:
|
|
24
|
+
:title-class="themedClass('titleClass')"
|
|
25
25
|
:text="text"
|
|
26
|
-
:
|
|
27
|
-
:
|
|
28
|
-
:
|
|
26
|
+
:text-class="themedClass('textClass')"
|
|
27
|
+
:title-weight="titleWeight"
|
|
28
|
+
:title-style="titleStyle"
|
|
29
29
|
:subtitle="subtitle"
|
|
30
|
-
:
|
|
31
|
-
:
|
|
30
|
+
:subtitle-class="themedClass('subtitleClass')"
|
|
31
|
+
:color-scheme="colorScheme"
|
|
32
32
|
/>
|
|
33
33
|
|
|
34
34
|
<BlokkliField
|
|
@@ -51,20 +51,18 @@
|
|
|
51
51
|
<!-- Slider -->
|
|
52
52
|
<div :class="carousel({ colorScheme })">
|
|
53
53
|
<BlokkliField
|
|
54
|
-
v-
|
|
54
|
+
v-if="isEditing"
|
|
55
55
|
name="field_icms_testimonial_elements"
|
|
56
56
|
:list="testimonialElements"
|
|
57
57
|
class="droptarget"
|
|
58
|
-
v-if="isEditing"
|
|
59
58
|
/>
|
|
60
59
|
|
|
61
60
|
<UCarousel
|
|
62
61
|
v-else
|
|
63
|
-
v-model="carouselIndex"
|
|
64
62
|
:items="testimonialElements || []"
|
|
65
63
|
:arrows="(testimonialElements?.length ?? 0) > 1"
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
prev-icon="i-lucide-chevron-left"
|
|
65
|
+
next-icon="i-lucide-chevron-right"
|
|
68
66
|
:ui="{
|
|
69
67
|
root: themedClass('carouselRootClass'),
|
|
70
68
|
viewport: themedClass('carouselViewportClass'),
|
|
@@ -73,11 +71,17 @@
|
|
|
73
71
|
controls: themedClass('carouselControlsClass'),
|
|
74
72
|
arrows: themedClass('carouselArrowsClass'),
|
|
75
73
|
prev: cn(
|
|
76
|
-
themedClass(
|
|
74
|
+
themedClass(
|
|
75
|
+
'carouselButtonPrevClass',
|
|
76
|
+
'-start-12 sm:-start-12 xl:-start-24',
|
|
77
|
+
),
|
|
77
78
|
carouselButton({ colorScheme }),
|
|
78
79
|
),
|
|
79
80
|
next: cn(
|
|
80
|
-
themedClass(
|
|
81
|
+
themedClass(
|
|
82
|
+
'carouselButtonNextClass',
|
|
83
|
+
'-end-12 sm:-end-12 xl:-end-24',
|
|
84
|
+
),
|
|
81
85
|
carouselButton({ colorScheme }),
|
|
82
86
|
),
|
|
83
87
|
dots: themedClass('carouselDotsClass'),
|
|
@@ -91,7 +95,11 @@
|
|
|
91
95
|
:list="[item]"
|
|
92
96
|
proxy-mode
|
|
93
97
|
>
|
|
94
|
-
<BlokkliItem
|
|
98
|
+
<BlokkliItem
|
|
99
|
+
v-for="fieldItem in items"
|
|
100
|
+
:key="fieldItem.uuid"
|
|
101
|
+
v-bind="fieldItem"
|
|
102
|
+
/>
|
|
95
103
|
</BlokkliField>
|
|
96
104
|
</template>
|
|
97
105
|
</UCarousel>
|
|
@@ -112,8 +120,6 @@ const { options, isEditing } = useAttrs().blokkliData as any
|
|
|
112
120
|
|
|
113
121
|
const themedClass = useTheme('ParagraphTestimonialLayout')
|
|
114
122
|
|
|
115
|
-
const carouselIndex = ref(0)
|
|
116
|
-
|
|
117
123
|
const carousel = tv({
|
|
118
124
|
base: themedClass('carouselBase', 'px-16 py-8 xl:px-40 xl:py-12'),
|
|
119
125
|
variants: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<DesignSystemAtomsContainer
|
|
3
|
-
:
|
|
3
|
+
:color-scheme="colorScheme"
|
|
4
4
|
:spacing="spacing"
|
|
5
5
|
:class="themedClass('containerClass')"
|
|
6
6
|
>
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
>
|
|
16
16
|
<DesignSystemOrganismsContentBlock
|
|
17
17
|
:pretitle="pretitle"
|
|
18
|
-
:
|
|
18
|
+
:pretitle-class="themedClass('pretitleClass')"
|
|
19
19
|
:title="title"
|
|
20
|
-
:
|
|
20
|
+
:title-class="themedClass('titleClass')"
|
|
21
21
|
:subtitle="subtitle"
|
|
22
|
-
:
|
|
22
|
+
:subtitle-class="themedClass('subtitleClass')"
|
|
23
23
|
:text="text"
|
|
24
|
-
:
|
|
25
|
-
:
|
|
26
|
-
:
|
|
24
|
+
:text-class="themedClass('textClass')"
|
|
25
|
+
:title-weight="titleWeight"
|
|
26
|
+
:title-style="titleStyle"
|
|
27
27
|
:text-columns="textColumns"
|
|
28
|
-
:
|
|
28
|
+
:color-scheme="colorScheme"
|
|
29
29
|
/>
|
|
30
30
|
<BlokkliField
|
|
31
31
|
name="field_icms_buttons"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<DesignSystemAtomsContainer
|
|
3
|
-
:
|
|
3
|
+
:color-scheme="colorScheme"
|
|
4
4
|
:spacing="spacing"
|
|
5
5
|
:class="themedClass('containerClass')"
|
|
6
6
|
>
|
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
<div :class="themedClass('firstColumnClass', textColumnClassList)">
|
|
9
9
|
<DesignSystemOrganismsContentBlock
|
|
10
10
|
:pretitle="pretitle"
|
|
11
|
-
:
|
|
11
|
+
:pretitle-class="themedClass('pretitleClass', 'mb-2.5')"
|
|
12
12
|
:title="title"
|
|
13
|
-
:
|
|
13
|
+
:title-class="themedClass('titleClass', 'mb-5')"
|
|
14
14
|
:subtitle="subtitle"
|
|
15
|
-
:
|
|
16
|
-
:
|
|
17
|
-
:
|
|
15
|
+
:subtitle-class="themedClass('subtitleClass')"
|
|
16
|
+
:title-weight="titleWeight"
|
|
17
|
+
:title-style="titleStyle"
|
|
18
18
|
:text="text"
|
|
19
|
-
:
|
|
20
|
-
:
|
|
19
|
+
:text-class="themedClass('textClass')"
|
|
20
|
+
:color-scheme="colorScheme"
|
|
21
21
|
/>
|
|
22
22
|
<BlokkliField
|
|
23
23
|
name="field_icms_buttons"
|
|
@@ -37,24 +37,24 @@
|
|
|
37
37
|
<DesignSystemMoleculesMediaSlider
|
|
38
38
|
v-if="media && media.length"
|
|
39
39
|
:media="media"
|
|
40
|
-
|
|
41
|
-
:
|
|
42
|
-
:
|
|
43
|
-
:
|
|
44
|
-
:
|
|
45
|
-
:
|
|
46
|
-
:
|
|
47
|
-
:
|
|
48
|
-
:
|
|
49
|
-
:
|
|
50
|
-
:
|
|
40
|
+
image-sizes="xs:100vw sm:100vw md:50vw lg:640px"
|
|
41
|
+
:image-format="imageFormat"
|
|
42
|
+
:container-class="themedClass('containerClass', 'my-0')"
|
|
43
|
+
:media-class="themedClass('mediaClass')"
|
|
44
|
+
:element-class="themedClass('elementClass')"
|
|
45
|
+
:figcaption-class="themedClass('figcaptionClass')"
|
|
46
|
+
:carousel-class="themedClass('carouselClass')"
|
|
47
|
+
:carousel-content-class="themedClass('carouselContentClass')"
|
|
48
|
+
:carousel-item-class="themedClass('carouselItemClass')"
|
|
49
|
+
:carousel-button-prev-class="themedClass('carouselButtonPrevClass')"
|
|
50
|
+
:carousel-button-prev-icon-class="
|
|
51
51
|
themedClass('carouselButtonPrevIconClass')
|
|
52
52
|
"
|
|
53
|
-
:
|
|
54
|
-
:
|
|
53
|
+
:carousel-button-next-class="themedClass('carouselButtonNextClass')"
|
|
54
|
+
:carousel-button-next-icon-class="
|
|
55
55
|
themedClass('carouselButtonNextIconClass')
|
|
56
56
|
"
|
|
57
|
-
:
|
|
57
|
+
:color-scheme="colorScheme"
|
|
58
58
|
/>
|
|
59
59
|
</div>
|
|
60
60
|
</DesignSystemAtomsGridRow>
|
|
@@ -2,29 +2,29 @@
|
|
|
2
2
|
<DesignSystemOrganismsTimelineElement
|
|
3
3
|
:pretitle="pretitle"
|
|
4
4
|
:title="title"
|
|
5
|
-
:
|
|
6
|
-
:
|
|
5
|
+
:title-style="titleStyle"
|
|
6
|
+
:title-weight="titleWeight"
|
|
7
7
|
:subtitle="subtitle"
|
|
8
8
|
:text="text"
|
|
9
9
|
:media="media"
|
|
10
10
|
:buttons="buttons"
|
|
11
|
-
:
|
|
12
|
-
:
|
|
13
|
-
:
|
|
14
|
-
:
|
|
15
|
-
:
|
|
16
|
-
:
|
|
17
|
-
:
|
|
18
|
-
:
|
|
19
|
-
:
|
|
20
|
-
:
|
|
21
|
-
:
|
|
22
|
-
:
|
|
23
|
-
:
|
|
24
|
-
:
|
|
25
|
-
:
|
|
26
|
-
:
|
|
27
|
-
:
|
|
11
|
+
:color-ccheme="colorScheme"
|
|
12
|
+
:has-decorative-line="false"
|
|
13
|
+
:reverse-columns="reverseColumns"
|
|
14
|
+
:is-editing="isEditing"
|
|
15
|
+
:image-format="imageFormat"
|
|
16
|
+
:container-class="themedClass('containerClass')"
|
|
17
|
+
:first-column-class="themedClass('firstColumnClass')"
|
|
18
|
+
:second-column-class="themedClass('secondColumnClass')"
|
|
19
|
+
:pretitle-class="themedClass('pretitleClass')"
|
|
20
|
+
:title-class="themedClass('titleClass')"
|
|
21
|
+
:subtitle-class="themedClass('subtitleClass')"
|
|
22
|
+
:text-class="themedClass('textClass')"
|
|
23
|
+
:buttons-container-class="themedClass('buttonsContainerClass')"
|
|
24
|
+
:media-container-class="themedClass('mediaContainerClass')"
|
|
25
|
+
:media-class="themedClass('mediaClass')"
|
|
26
|
+
:figcaption-class="themedClass('figcaptionClass')"
|
|
27
|
+
:element-class="themedClass('elementClass')"
|
|
28
28
|
/>
|
|
29
29
|
</template>
|
|
30
30
|
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
>
|
|
23
23
|
<DesignSystemOrganismsContentBlock
|
|
24
24
|
:pretitle="pretitle"
|
|
25
|
-
:
|
|
25
|
+
:pretitle-class="themedClass('pretitleClass')"
|
|
26
26
|
:title="title"
|
|
27
|
-
:
|
|
28
|
-
:
|
|
29
|
-
:
|
|
27
|
+
:title-class="themedClass('titleClass')"
|
|
28
|
+
:title-style="titleStyle"
|
|
29
|
+
:title-weight="titleWeight"
|
|
30
30
|
:subtitle="subtitle"
|
|
31
|
-
:
|
|
32
|
-
:
|
|
31
|
+
:subtitle-class="themedClass('subtitleClass')"
|
|
32
|
+
:color-scheme="colorScheme"
|
|
33
33
|
/>
|
|
34
34
|
</div>
|
|
35
35
|
<div
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
>
|
|
46
46
|
<DesignSystemOrganismsContentBlock
|
|
47
47
|
:text="text"
|
|
48
|
-
:
|
|
48
|
+
:text-class="themedClass('textClass')"
|
|
49
49
|
/>
|
|
50
50
|
|
|
51
51
|
<BlokkliField
|
|
@@ -83,12 +83,11 @@
|
|
|
83
83
|
"
|
|
84
84
|
>
|
|
85
85
|
<li
|
|
86
|
-
v-for="(
|
|
86
|
+
v-for="(title, index) in elementTitles"
|
|
87
87
|
:key="index"
|
|
88
88
|
:class="themedClass('anchorNavigationListItemClass')"
|
|
89
89
|
>
|
|
90
90
|
<button
|
|
91
|
-
@click="handleAnchorLinkClick(Number(index))"
|
|
92
91
|
:class="
|
|
93
92
|
cn(
|
|
94
93
|
themedClass(
|
|
@@ -103,8 +102,9 @@
|
|
|
103
102
|
},
|
|
104
103
|
)
|
|
105
104
|
"
|
|
105
|
+
@click="handleAnchorLinkClick(Number(index))"
|
|
106
106
|
>
|
|
107
|
-
{{
|
|
107
|
+
{{ title }}
|
|
108
108
|
</button>
|
|
109
109
|
</li>
|
|
110
110
|
</ul>
|
|
@@ -140,14 +140,14 @@
|
|
|
140
140
|
"
|
|
141
141
|
>
|
|
142
142
|
<button
|
|
143
|
-
@click="handleAnchorLinkClick(Number(index))"
|
|
144
143
|
:class="
|
|
145
144
|
carouselDot({
|
|
146
145
|
colorScheme,
|
|
147
146
|
active: currentIndex === Number(index),
|
|
148
147
|
})
|
|
149
148
|
"
|
|
150
|
-
|
|
149
|
+
@click="handleAnchorLinkClick(Number(index))"
|
|
150
|
+
/>
|
|
151
151
|
</li>
|
|
152
152
|
</ul>
|
|
153
153
|
</div>
|
|
@@ -158,9 +158,8 @@
|
|
|
158
158
|
ref="carouselRef"
|
|
159
159
|
:items="timelineElements || []"
|
|
160
160
|
:arrows="(timelineElements?.length ?? 0) > 1"
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
@select="setCurrentIndex"
|
|
161
|
+
prev-icon="i-lucide-chevron-left"
|
|
162
|
+
next-icon="i-lucide-chevron-right"
|
|
164
163
|
:ui="{
|
|
165
164
|
viewport: themedClass('carouselViewportClass', 'pb-10'),
|
|
166
165
|
item: 'basis-full',
|
|
@@ -175,6 +174,7 @@
|
|
|
175
174
|
),
|
|
176
175
|
}"
|
|
177
176
|
class="overflow-hidden"
|
|
177
|
+
@select="setCurrentIndex"
|
|
178
178
|
>
|
|
179
179
|
<template #default="{ item }">
|
|
180
180
|
<BlokkliField
|
|
@@ -183,7 +183,11 @@
|
|
|
183
183
|
:list="[item]"
|
|
184
184
|
proxy-mode
|
|
185
185
|
>
|
|
186
|
-
<BlokkliItem
|
|
186
|
+
<BlokkliItem
|
|
187
|
+
v-for="fieldItem in items"
|
|
188
|
+
:key="fieldItem.uuid"
|
|
189
|
+
v-bind="fieldItem"
|
|
190
|
+
/>
|
|
187
191
|
</BlokkliField>
|
|
188
192
|
</template>
|
|
189
193
|
</UCarousel>
|
|
@@ -209,7 +213,7 @@
|
|
|
209
213
|
decorativeCircle({ colorScheme }),
|
|
210
214
|
)
|
|
211
215
|
"
|
|
212
|
-
|
|
216
|
+
/>
|
|
213
217
|
<div
|
|
214
218
|
:class="
|
|
215
219
|
cn(
|
|
@@ -220,7 +224,7 @@
|
|
|
220
224
|
),
|
|
221
225
|
)
|
|
222
226
|
"
|
|
223
|
-
|
|
227
|
+
/>
|
|
224
228
|
<div
|
|
225
229
|
:class="
|
|
226
230
|
cn(
|
|
@@ -231,7 +235,7 @@
|
|
|
231
235
|
decorativeCircle({ colorScheme }),
|
|
232
236
|
)
|
|
233
237
|
"
|
|
234
|
-
|
|
238
|
+
/>
|
|
235
239
|
</template>
|
|
236
240
|
</div>
|
|
237
241
|
</DesignSystemAtomsGridRow>
|
|
@@ -239,12 +243,33 @@
|
|
|
239
243
|
</template>
|
|
240
244
|
|
|
241
245
|
<script lang="ts" setup>
|
|
242
|
-
import type {
|
|
246
|
+
import type {
|
|
247
|
+
ParagraphIcmsLayoutTimelineFragment,
|
|
248
|
+
ParagraphIcmsTimelineElementFragment,
|
|
249
|
+
} from '#graphql-operations'
|
|
243
250
|
import { tv } from 'tailwind-variants'
|
|
244
251
|
import cn from '@iqual/nuxt-icms/composables/useCn'
|
|
245
252
|
|
|
246
253
|
const props = defineProps<ParagraphIcmsLayoutTimelineFragment>()
|
|
247
254
|
|
|
255
|
+
/**
|
|
256
|
+
* A field item's `props` is generated as a union with `object`, because the
|
|
257
|
+
* field is declared on the Paragraph interface and the inline fragment only
|
|
258
|
+
* covers one bundle of it. The Drupal field only accepts timeline elements,
|
|
259
|
+
* so narrowing on one of their own fields is enough.
|
|
260
|
+
*/
|
|
261
|
+
function isTimelineElement(
|
|
262
|
+
itemProps: object | null | undefined,
|
|
263
|
+
): itemProps is ParagraphIcmsTimelineElementFragment {
|
|
264
|
+
return !!itemProps && 'title' in itemProps
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const elementTitles = computed(() =>
|
|
268
|
+
(props.timelineElements || []).map((item) =>
|
|
269
|
+
isTimelineElement(item?.props) ? item.props.title : undefined,
|
|
270
|
+
),
|
|
271
|
+
)
|
|
272
|
+
|
|
248
273
|
const { options, isEditing } = useAttrs().blokkliData as any
|
|
249
274
|
|
|
250
275
|
const themedClass = useTheme('ParagraphTimelineLayout')
|
|
@@ -457,6 +482,12 @@ const carouselDot = tv({
|
|
|
457
482
|
'bg-primary-600 border-white',
|
|
458
483
|
),
|
|
459
484
|
},
|
|
485
|
+
// Declared without classes of its own — the active state is styled per
|
|
486
|
+
// colour scheme in the compound variants below.
|
|
487
|
+
active: {
|
|
488
|
+
true: '',
|
|
489
|
+
false: '',
|
|
490
|
+
},
|
|
460
491
|
},
|
|
461
492
|
compoundVariants: [
|
|
462
493
|
{
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<DesignSystemOrganismsTwoColumnTextElement
|
|
3
3
|
:pretitle="pretitle"
|
|
4
|
-
:
|
|
4
|
+
:pretitle-class="themedClass('pretitleClass')"
|
|
5
5
|
:title="title"
|
|
6
|
-
:
|
|
7
|
-
:
|
|
8
|
-
:
|
|
6
|
+
:title-class="themedClass('titleClass', 'mb-0')"
|
|
7
|
+
:title-weight="titleWeight"
|
|
8
|
+
:title-style="titleStyle"
|
|
9
9
|
:subtitle="subtitle"
|
|
10
|
-
:
|
|
10
|
+
:subtitle-class="themedClass('subtitleClass')"
|
|
11
11
|
:text="text"
|
|
12
|
-
:
|
|
13
|
-
:
|
|
12
|
+
:text-class="themedClass('textClass')"
|
|
13
|
+
:container-class="
|
|
14
14
|
themedClass('containerClass', twoColumnTextElementClassList)
|
|
15
15
|
"
|
|
16
|
-
:
|
|
17
|
-
:
|
|
18
|
-
:
|
|
16
|
+
:first-column-class="themedClass('firstColumnClass')"
|
|
17
|
+
:second-column-class="themedClass('secondColumnClass')"
|
|
18
|
+
:title-composition-first-container-class="
|
|
19
19
|
themedClass('titleCompositionFirstContainerClass')
|
|
20
20
|
"
|
|
21
|
-
:
|
|
21
|
+
:title-composition-second-container-class="
|
|
22
22
|
themedClass('titleCompositionSecondContainerClass')
|
|
23
23
|
"
|
|
24
|
-
:
|
|
24
|
+
:text-container-class="themedClass('textContainerClass')"
|
|
25
25
|
/>
|
|
26
26
|
</template>
|
|
27
27
|
|
|
@@ -30,7 +30,7 @@ import type { ParagraphIcms2ColTextElementFragment } from '#graphql-operations'
|
|
|
30
30
|
|
|
31
31
|
defineProps<ParagraphIcms2ColTextElementFragment>()
|
|
32
32
|
|
|
33
|
-
const { options
|
|
33
|
+
const { options } = useAttrs().blokkliData as any
|
|
34
34
|
|
|
35
35
|
const themedClass = useTheme('ParagraphTwoColumnTextElement')
|
|
36
36
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<DesignSystemAtomsContainer
|
|
3
|
-
:
|
|
3
|
+
:color-scheme="colorScheme"
|
|
4
4
|
:spacing="spacing"
|
|
5
5
|
:class="themedClass('containerClass')"
|
|
6
6
|
>
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
>
|
|
17
17
|
<DesignSystemOrganismsContentBlock
|
|
18
18
|
:pretitle="pretitle"
|
|
19
|
-
:
|
|
19
|
+
:pretitle-class="themedClass('pretitleClass')"
|
|
20
20
|
:title="title"
|
|
21
|
-
:
|
|
22
|
-
:
|
|
23
|
-
:
|
|
21
|
+
:title-class="themedClass('titleClass', 'mb-0')"
|
|
22
|
+
:title-weight="titleWeight"
|
|
23
|
+
:color-scheme="colorScheme"
|
|
24
24
|
/>
|
|
25
25
|
</div>
|
|
26
26
|
<div
|
|
@@ -34,13 +34,12 @@
|
|
|
34
34
|
<DesignSystemOrganismsContentBlock
|
|
35
35
|
v-if="text"
|
|
36
36
|
:text="text"
|
|
37
|
-
:
|
|
38
|
-
:
|
|
37
|
+
:text-class="themedClass('textClass')"
|
|
38
|
+
:color-scheme="colorScheme"
|
|
39
39
|
/>
|
|
40
40
|
|
|
41
41
|
<div
|
|
42
42
|
v-if="embed"
|
|
43
|
-
v-html="embed"
|
|
44
43
|
:class="
|
|
45
44
|
themedClass(
|
|
46
45
|
'embedContainer',
|
|
@@ -48,6 +47,7 @@
|
|
|
48
47
|
)
|
|
49
48
|
"
|
|
50
49
|
:style="{ '--iframe-height': `${props.height || 600}px` }"
|
|
50
|
+
v-html="embed"
|
|
51
51
|
/>
|
|
52
52
|
</div>
|
|
53
53
|
</DesignSystemAtomsGridRow>
|