@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
@@ -0,0 +1,14 @@
1
+ fragment paragraphIcmsLayoutListing on ParagraphIcmsLayoutListing {
2
+ pretitle: fieldIcmsPretitle
3
+ title: fieldIcmsTitle
4
+ titleWeight: fieldIcmsTitleWeight
5
+ titleStyle: fieldIcmsTitleStyle
6
+ text: fieldIcmsText
7
+ contentTypes: fieldIcmsContentTypes
8
+ listingType: fieldIcmsListingType
9
+ sorting: fieldIcmsSorting
10
+ topics: fieldIcmsTopics {
11
+ id
12
+ name
13
+ }
14
+ }
@@ -0,0 +1,91 @@
1
+ <template>
2
+ <DesignSystemOrganismsFacetedListing
3
+ :pretitle="pretitle"
4
+ :title="title"
5
+ :title-weight="titleWeight"
6
+ :title-style="titleStyle"
7
+ :text="text"
8
+ :align-horizontal-full="alignHorizontalFull"
9
+ :color-scheme="colorScheme"
10
+ :spacing="spacing"
11
+ :listing-type="listingType"
12
+ :prefilter="topics ? { topics: topics } : undefined"
13
+ :content-type-filter="contentTypeFilter"
14
+ :sort="sort"
15
+ :slider="slider"
16
+ :slider-columns="sliderColumns"
17
+ />
18
+ </template>
19
+
20
+ <script lang="ts" setup>
21
+ import type { ParagraphIcmsLayoutListingFragment } from '#graphql-operations'
22
+
23
+ const props = defineProps<ParagraphIcmsLayoutListingFragment>()
24
+
25
+ const { options, isEditing } = useAttrs().blokkliData as any
26
+
27
+ const themedClass = useTheme('ParagraphListing')
28
+
29
+ const colorScheme = computed(() => {
30
+ return options.value.colorScheme
31
+ })
32
+
33
+ const spacing = computed(() => {
34
+ return { bottom: options.value.spacingBottom, top: options.value.spacingTop }
35
+ })
36
+
37
+ const teaserVariant = computed(() => {
38
+ return options.value.teaserVariant
39
+ })
40
+
41
+ const alignHorizontalFull = computed(() => {
42
+ const classList = []
43
+ if (options.value.alignHorizontalFull == 'center') {
44
+ classList.push(
45
+ themedClass(
46
+ 'alignHorizontalFullCenterClass',
47
+ 'text-center md:col-span-8 md:col-start-3',
48
+ ),
49
+ )
50
+ }
51
+ if (options.value.alignHorizontalFull == 'right') {
52
+ classList.push(
53
+ themedClass('alignHorizontalFullRightClass', 'text-right md:col-start-4'),
54
+ )
55
+ }
56
+ return classList.join(' ')
57
+ })
58
+
59
+ // Restrict the results to the content types picked by the editor. Without a
60
+ // selection every indexed content type is listed.
61
+ const contentTypeFilter = computed(() => {
62
+ const types = (props.contentTypes || []).filter(
63
+ (type): type is string => !!type,
64
+ )
65
+ return types.length ? types : undefined
66
+ })
67
+
68
+ // Map the editor-selected sorting option to a search sort. Without a
69
+ // selection the FacetedListing default (weight, then newest first) applies.
70
+ const sort = computed(() => {
71
+ switch (props.sorting) {
72
+ case 'alphabetical':
73
+ return [{ field: 'title_sort', direction: 'ASC' as const }]
74
+ case 'weight':
75
+ return [{ field: 'weight', direction: 'DESC' as const }]
76
+ default:
77
+ return undefined
78
+ }
79
+ })
80
+
81
+ const slider = computed(() => {
82
+ return options.value.slider
83
+ })
84
+
85
+ const sliderColumns = computed(() => {
86
+ return options.value.sliderColumns
87
+ })
88
+
89
+ provide('isEditing', isEditing)
90
+ provide('teaserVariant', teaserVariant)
91
+ </script>
@@ -4,7 +4,7 @@ fragment paragraphIcmsLogoElement on ParagraphIcmsLogoElement {
4
4
  }
5
5
  link: fieldIcmsLink {
6
6
  uri {
7
- path
7
+ ...linkUrl
8
8
  }
9
9
  }
10
10
  title: fieldIcmsLinkTitle
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <DesignSystemOrganismsLogoElement
3
3
  :logo="logo"
4
- :link="link?.uri?.path"
5
- :targetBlank="targetBlank"
4
+ :link="resolvedLink.url"
5
+ :external="resolvedLink.isFile"
6
+ :target-blank="targetBlank || resolvedLink.isFile"
6
7
  :title="title"
7
- :colorScheme="colorScheme"
8
+ :color-scheme="colorScheme"
8
9
  :class="themedClass('containerClass', 'w-full md:w-[calc(50%-12px)]')"
9
10
  />
10
11
  </template>
@@ -13,7 +14,9 @@
13
14
  import type { ParagraphIcmsLogoElementFragment } from '#graphql-operations'
14
15
  import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
15
16
 
16
- defineProps<ParagraphIcmsLogoElementFragment>()
17
+ const props = defineProps<ParagraphIcmsLogoElementFragment>()
18
+
19
+ const resolvedLink = computed(() => resolveLinkUrl(props.link?.uri))
17
20
 
18
21
  const themedClass = useTheme('ParagraphLogoElement')
19
22
 
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <DesignSystemAtomsContainer
3
- :colorScheme="colorScheme"
3
+ :color-scheme="colorScheme"
4
4
  :spacing="spacing"
5
5
  :class="themedClass('containerClass')"
6
6
  >
@@ -9,44 +9,46 @@
9
9
  <DesignSystemMoleculesMediaSlider
10
10
  v-if="media && media.length > 1"
11
11
  :media="media"
12
- :imageSizes="imageSizes"
13
- :imageFormat="imageFormat"
14
- :containerClass="themedClass('mediaSliderContainerClass', 'py-0')"
15
- :mediaClass="themedClass('mediaSliderMediaClass')"
16
- :elementClass="
12
+ :image-sizes="imageSizes"
13
+ :image-format="imageFormat"
14
+ :container-class="themedClass('mediaSliderContainerClass', 'py-0')"
15
+ :media-class="themedClass('mediaSliderMediaClass')"
16
+ :element-class="
17
17
  themedClass(
18
18
  'mediaSliderElementClass',
19
19
  'block w-full h-auto max-h-dvh object-cover object-center',
20
20
  )
21
21
  "
22
- :figcaptionClass="themedClass('mediaSliderFigcaptionClass')"
23
- :carouselClass="themedClass('mediaSliderCarouselClass')"
24
- :carouselContentClass="themedClass('mediaSliderCarouselContentClass')"
25
- :carouselItemClass="themedClass('mediaSliderCarouselItemClass')"
26
- :carouselButtonPrevClass="
22
+ :figcaption-class="themedClass('mediaSliderFigcaptionClass')"
23
+ :carousel-class="themedClass('mediaSliderCarouselClass')"
24
+ :carousel-content-class="
25
+ themedClass('mediaSliderCarouselContentClass')
26
+ "
27
+ :carousel-item-class="themedClass('mediaSliderCarouselItemClass')"
28
+ :carousel-button-prev-class="
27
29
  themedClass('mediaSliderCarouselButtonPrevClass')
28
30
  "
29
- :carouselButtonNextClass="
31
+ :carousel-button-next-class="
30
32
  themedClass('mediaSliderCarouselButtonNextClass')
31
33
  "
32
- colorScheme="none"
33
- :showCaption="showCaptions"
34
+ color-scheme="none"
35
+ :show-caption="showCaptions"
34
36
  />
35
37
 
36
38
  <Media
37
39
  v-else-if="media && media.length === 1 && media[0]"
38
40
  :media="media[0]"
39
- :imageSizes="imageSizes"
40
- :imageFormat="imageFormat"
41
- :mediaClass="themedClass('mediaMediaClass')"
42
- :elementClass="
41
+ :image-sizes="imageSizes"
42
+ :image-format="imageFormat"
43
+ :media-class="themedClass('mediaMediaClass')"
44
+ :element-class="
43
45
  themedClass(
44
46
  'mediaElementClass',
45
47
  'block w-full h-auto max-h-dvh object-cover object-center',
46
48
  )
47
49
  "
48
- :figcaptionClass="themedClass('mediaFigcaptionClass')"
49
- :showCaption="showCaptions"
50
+ :figcaption-class="themedClass('mediaFigcaptionClass')"
51
+ :show-caption="showCaptions"
50
52
  />
51
53
  </div>
52
54
  </div>
@@ -61,7 +63,7 @@ defineProps<ParagraphIcmsLayoutMediaFragment>()
61
63
 
62
64
  const themedClass = useTheme('ParagraphMedia')
63
65
 
64
- const { options, isEditing } = useAttrs().blokkliData as any
66
+ const { options } = useAttrs().blokkliData as any
65
67
 
66
68
  const parentColorScheme = inject<ColorScheme>('colorScheme', 'none')
67
69
  const colorScheme = computed(() => {
@@ -4,7 +4,7 @@ fragment paragraphIcmsPartnershipElement on ParagraphIcmsPartnershipElement {
4
4
  }
5
5
  link: fieldIcmsLink {
6
6
  uri {
7
- path
7
+ ...linkUrl
8
8
  }
9
9
  }
10
10
  title: fieldIcmsLinkTitle
@@ -1,20 +1,23 @@
1
1
  <template>
2
2
  <DesignSystemMoleculesPartnership
3
3
  :logo="logo"
4
- :link="link?.uri?.path"
5
- :targetBlank="targetBlank"
4
+ :link="resolvedLink.url"
5
+ :external="resolvedLink.isFile"
6
+ :target-blank="targetBlank || resolvedLink.isFile"
6
7
  :title="title"
7
- :linkClass="themedClass('linkClass')"
8
- :mediaClass="themedClass('mediaClass')"
9
- :figcaptionClass="themedClass('figcaptionClass')"
10
- :elementClass="themedClass('elementClass')"
8
+ :link-class="themedClass('linkClass')"
9
+ :media-class="themedClass('mediaClass')"
10
+ :figcaption-class="themedClass('figcaptionClass')"
11
+ :element-class="themedClass('elementClass')"
11
12
  />
12
13
  </template>
13
14
 
14
15
  <script lang="ts" setup>
15
16
  import type { ParagraphIcmsPartnershipElementFragment } from '#graphql-operations'
16
17
 
17
- defineProps<ParagraphIcmsPartnershipElementFragment>()
18
+ const props = defineProps<ParagraphIcmsPartnershipElementFragment>()
19
+
20
+ const resolvedLink = computed(() => resolveLinkUrl(props.link?.uri))
18
21
 
19
22
  const themedClass = useTheme('ParagraphPartnershipsElement')
20
23
  </script>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <DesignSystemAtomsContainer
3
- :colorScheme="colorScheme"
3
+ :color-scheme="colorScheme"
4
4
  :spacing="spacing"
5
5
  :class="themedClass('containerClass')"
6
6
  >
@@ -18,11 +18,11 @@
18
18
  >
19
19
  <DesignSystemOrganismsContentBlock
20
20
  :pretitle="pretitle"
21
- :pretitleClass="themedClass('pretitleClass')"
21
+ :pretitle-class="themedClass('pretitleClass')"
22
22
  :title="title"
23
- :titleClass="themedClass('titleClass', 'mb-0')"
24
- :titleWeight="titleWeight"
25
- :colorScheme="colorScheme"
23
+ :title-class="themedClass('titleClass', 'mb-0')"
24
+ :title-weight="titleWeight"
25
+ :color-scheme="colorScheme"
26
26
  />
27
27
 
28
28
  <ul :class="themedClass('textRowsClass', 'flex flex-col gap-4')">
@@ -66,20 +66,20 @@
66
66
  <Media
67
67
  v-if="image"
68
68
  :media="image"
69
- :imageFormat="imageFormat"
70
- imageSizes="xs:100vw sm:100vw md:50vw lg:600px"
71
- :mediaClass="themedClass('mediaClass')"
72
- :elementClass="themedClass('elementClass')"
73
- :figcaptionClass="themedClass('figcaptionClass')"
69
+ :image-format="imageFormat"
70
+ image-sizes="xs:100vw sm:100vw md:50vw lg:600px"
71
+ :media-class="themedClass('mediaClass')"
72
+ :element-class="themedClass('elementClass')"
73
+ :figcaption-class="themedClass('figcaptionClass')"
74
74
  />
75
75
 
76
76
  <div :class="partnershipsOffsetRow({ colorScheme })">
77
77
  <DesignSystemOrganismsContentBlock
78
78
  :pretitle="overlayTitle"
79
- :pretitleClass="themedClass('overlayTitle')"
79
+ :pretitle-class="themedClass('overlayTitle')"
80
80
  :text="overlayText"
81
- :textClass="themedClass('overlayText')"
82
- :colorScheme="colorScheme"
81
+ :text-class="themedClass('overlayText')"
82
+ :color-scheme="colorScheme"
83
83
  />
84
84
 
85
85
  <BlokkliField
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <DesignSystemAtomsContainer
3
3
  :spacing="spacing"
4
- :colorScheme="colorScheme"
4
+ :color-scheme="colorScheme"
5
5
  :class="themedClass('containerClass')"
6
6
  >
7
7
  <DesignSystemAtomsGridRow :class="themedClass('rowClass')">
@@ -15,12 +15,12 @@
15
15
  >
16
16
  <DesignSystemOrganismsContentBlock
17
17
  :pretitle="pretitle"
18
- :pretitleClass="themedClass('pretitleClass')"
18
+ :pretitle-class="themedClass('pretitleClass')"
19
19
  :title="title"
20
- :titleClass="themedClass('titleClass', 'mb-0')"
21
- :titleWeight="titleWeight"
22
- :titleStyle="titleStyle"
23
- :colorScheme="colorScheme"
20
+ :title-class="themedClass('titleClass', 'mb-0')"
21
+ :title-weight="titleWeight"
22
+ :title-style="titleStyle"
23
+ :color-scheme="colorScheme"
24
24
  />
25
25
  </div>
26
26
  <div
@@ -36,7 +36,7 @@
36
36
  >
37
37
  <DesignSystemOrganismsContentBlock
38
38
  :pretitle="textplain"
39
- :pretitleClass="themedClass('textPlainClass', 'mb-0')"
39
+ :pretitle-class="themedClass('textPlainClass', 'mb-0')"
40
40
  />
41
41
  </div>
42
42
  <div
@@ -49,14 +49,14 @@
49
49
  >
50
50
  <DesignSystemOrganismsContentBlock
51
51
  :subtitle="subtitle"
52
- :subtitleClass="themedClass('subtitleClass')"
52
+ :subtitle-class="themedClass('subtitleClass')"
53
53
  :text="text"
54
- :textClass="themedClass('textClass')"
54
+ :text-class="themedClass('textClass')"
55
55
  :media="media"
56
- :imageFormat="imageFormat"
57
- :mediaClass="themedClass('mediaClass')"
58
- :mediaContainerClass="themedClass('mediaContainerClass', 'mt-0')"
59
- :colorScheme="colorScheme"
56
+ :image-format="imageFormat"
57
+ :media-class="themedClass('mediaClass')"
58
+ :media-container-class="themedClass('mediaContainerClass', 'mt-0')"
59
+ :color-scheme="colorScheme"
60
60
  />
61
61
 
62
62
  <BlokkliField
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <DesignSystemAtomsContainer
3
3
  :spacing="spacing"
4
- :colorScheme="colorScheme"
4
+ :color-scheme="colorScheme"
5
5
  :class="themedClass('containerClass')"
6
6
  >
7
7
  <DesignSystemAtomsGridRow :class="themedClass('firstRowClass')">
@@ -19,13 +19,13 @@
19
19
  >
20
20
  <DesignSystemOrganismsContentBlock
21
21
  :pretitle="pretitle"
22
- :pretitleClass="themedClass('pretitleClass')"
22
+ :pretitle-class="themedClass('pretitleClass')"
23
23
  :title="title"
24
- :titleClass="themedClass('titleClass', 'mb-0')"
25
- :titleWeight="titleWeight"
26
- :titleStyle="titleStyle"
24
+ :title-class="themedClass('titleClass', 'mb-0')"
25
+ :title-weight="titleWeight"
26
+ :title-style="titleStyle"
27
27
  :subtitle="subtitle"
28
- :subtitleClass="themedClass('subtitleClass')"
28
+ :subtitle-class="themedClass('subtitleClass')"
29
29
  />
30
30
  </div>
31
31
  <div
@@ -42,7 +42,7 @@
42
42
  >
43
43
  <DesignSystemOrganismsContentBlock
44
44
  :text="text"
45
- :textClass="themedClass('textClass')"
45
+ :text-class="themedClass('textClass')"
46
46
  />
47
47
  </div>
48
48
  </DesignSystemAtomsGridRow>
@@ -58,10 +58,10 @@
58
58
  >
59
59
  <div :class="themedClass('secondRowColumnClass', 'relative col-span-12')">
60
60
  <DesignSystemMoleculesTable
61
- :tableData="tableData"
62
- :colorScheme="colorScheme"
63
- :containerClass="themedClass('tableContainerClass')"
64
- :tableClass="themedClass('tableClass')"
61
+ :table-data="tableData"
62
+ :color-scheme="colorScheme"
63
+ :container-class="themedClass('tableContainerClass')"
64
+ :table-class="themedClass('tableClass')"
65
65
  />
66
66
  </div>
67
67
  </DesignSystemAtomsGridRow>
@@ -76,7 +76,7 @@ import cn from '@iqual/nuxt-icms/composables/useCn'
76
76
  defineProps<ParagraphIcmsLayoutTableFragment>()
77
77
  const themedClass = useTheme('ParagraphTable')
78
78
 
79
- const { options, parentType } = useAttrs().blokkliData as any
79
+ const { options } = useAttrs().blokkliData as any
80
80
 
81
81
  const spacing = computed(() => {
82
82
  return { bottom: options.value.spacingBottom, top: options.value.spacingTop }
@@ -2,26 +2,28 @@
2
2
  <DesignSystemOrganismsTeamElement
3
3
  :firstname="firstname"
4
4
  :lastname="lastname"
5
- :titleWeight="titleWeight"
5
+ :title-weight="titleWeight"
6
6
  :position="position"
7
7
  :email="email"
8
8
  :phone="phone"
9
9
  :text="text"
10
10
  :image="image"
11
11
  :buttons="buttons"
12
- :colorScheme="colorScheme"
13
- :containerClass="themedClass('containerClass')"
14
- :mediaClass="themedClass('mediaClass')"
15
- :figcaptionClass="themedClass('figcaptionClass')"
16
- :elementClass="themedClass('elementClass')"
17
- :textContainerClass="themedClass('textContainerClass')"
18
- :titleClass="themedClass('titleClass')"
19
- :subtitleClass="themedClass('subtitleClass')"
20
- :textClass="themedClass('textClass')"
21
- :contactButtonsContainerClass="themedClass('contactButtonsContainerClass')"
22
- :buttonsContainerClass="themedClass('buttonsContainerClass')"
23
- :buttonClass="themedClass('buttonClass')"
24
- :labelClass="themedClass('labelClass')"
12
+ :color-scheme="colorScheme"
13
+ :container-class="themedClass('containerClass')"
14
+ :media-class="themedClass('mediaClass')"
15
+ :figcaption-class="themedClass('figcaptionClass')"
16
+ :element-class="themedClass('elementClass')"
17
+ :text-container-class="themedClass('textContainerClass')"
18
+ :title-class="themedClass('titleClass')"
19
+ :subtitle-class="themedClass('subtitleClass')"
20
+ :text-class="themedClass('textClass')"
21
+ :contact-buttons-container-class="
22
+ themedClass('contactButtonsContainerClass')
23
+ "
24
+ :buttons-container-class="themedClass('buttonsContainerClass')"
25
+ :button-class="themedClass('buttonClass')"
26
+ :label-class="themedClass('labelClass')"
25
27
  />
26
28
  </template>
27
29
 
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <DesignSystemAtomsContainer
3
- :colorScheme="colorScheme"
3
+ :color-scheme="colorScheme"
4
4
  :spacing="spacing"
5
5
  :class="themedClass('containerClass')"
6
6
  >
@@ -16,14 +16,14 @@
16
16
  >
17
17
  <DesignSystemOrganismsContentBlock
18
18
  :pretitle="pretitle"
19
- :pretitleClass="themedClass('pretitleClass')"
19
+ :pretitle-class="themedClass('pretitleClass')"
20
20
  :title="title"
21
- :titleClass="themedClass('titleClass', 'mb-0')"
21
+ :title-class="themedClass('titleClass', 'mb-0')"
22
22
  :subtitle="subtitle"
23
- :subtitleClass="themedClass('subtitleClass')"
24
- :titleWeight="titleWeight"
25
- :titleStyle="titleStyle"
26
- :colorScheme="colorScheme"
23
+ :subtitle-class="themedClass('subtitleClass')"
24
+ :title-weight="titleWeight"
25
+ :title-style="titleStyle"
26
+ :color-scheme="colorScheme"
27
27
  />
28
28
  </div>
29
29
  <div
@@ -37,8 +37,8 @@
37
37
  >
38
38
  <DesignSystemOrganismsContentBlock
39
39
  :text="text"
40
- :textClass="themedClass('textClass')"
41
- :colorScheme="colorScheme"
40
+ :text-class="themedClass('textClass')"
41
+ :color-scheme="colorScheme"
42
42
  />
43
43
  </div>
44
44
  </DesignSystemAtomsGridRow>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <DesignSystemAtomsContainer
3
- :colorScheme="colorScheme"
3
+ :color-scheme="colorScheme"
4
4
  :spacing="spacing"
5
5
  :class="
6
6
  cn(
@@ -24,12 +24,12 @@
24
24
  >
25
25
  <DesignSystemOrganismsContentBlock
26
26
  :pretitle="pretitle"
27
- :pretitleClass="themedClass('pretitleClass')"
27
+ :pretitle-class="themedClass('pretitleClass')"
28
28
  :title="title"
29
- :titleClass="themedClass('titleClass', 'mb-0')"
30
- :titleWeight="titleWeight"
31
- :titleStyle="titleStyle"
32
- :colorScheme="colorScheme"
29
+ :title-class="themedClass('titleClass', 'mb-0')"
30
+ :title-weight="titleWeight"
31
+ :title-style="titleStyle"
32
+ :color-scheme="colorScheme"
33
33
  />
34
34
  </div>
35
35
  <div
@@ -46,12 +46,12 @@
46
46
  >
47
47
  <DesignSystemOrganismsContentBlock
48
48
  :subtitle="subtitle"
49
- :subtitleClass="themedClass('subtitleClass')"
49
+ :subtitle-class="themedClass('subtitleClass')"
50
50
  :text="text"
51
- :textClass="themedClass('textClass')"
52
- :titleWeight="titleWeight"
53
- :titleStyle="titleStyle"
54
- :colorScheme="colorScheme"
51
+ :text-class="themedClass('textClass')"
52
+ :title-weight="titleWeight"
53
+ :title-style="titleStyle"
54
+ :color-scheme="colorScheme"
55
55
  />
56
56
  </div>
57
57
  </DesignSystemAtomsGridRow>
@@ -68,8 +68,8 @@
68
68
  "
69
69
  >
70
70
  <component
71
- v-for="(teaser, index) in teasers"
72
71
  :is="teaserComponent(teaser?.__typename)"
72
+ v-for="(teaser, index) in teasers"
73
73
  :key="teaser?.__typename + '-' + teaserVariant + '-' + index"
74
74
  v-bind="teaser"
75
75
  />
@@ -87,12 +87,11 @@
87
87
  >
88
88
  <div :class="themedClass('carouselContainer', 'relative col-span-12')">
89
89
  <UCarousel
90
- v-model="carouselIndex"
91
90
  :items="teasers || []"
92
91
  :arrows="(teasers?.length || 0) > sliderColumns"
93
92
  :watch-drag="(teasers?.length || 0) > sliderColumns"
94
- nextIcon="i-lucide-chevron-right"
95
- prevIcon="i-lucide-chevron-left"
93
+ next-icon="i-lucide-chevron-right"
94
+ prev-icon="i-lucide-chevron-left"
96
95
  :ui="{
97
96
  viewport: themedClass('carouselViewport'),
98
97
  item: sliderItemClass,
@@ -173,8 +172,6 @@ const alignmentClassList = computed(() => {
173
172
  return classList.join(' ')
174
173
  })
175
174
 
176
- const carouselIndex = ref(0)
177
-
178
175
  const viewport = useViewport()
179
176
 
180
177
  const sliderItemClass = computed(() => {
@@ -12,27 +12,27 @@
12
12
  >
13
13
  <DesignSystemOrganismsTestimonial
14
14
  :title="title"
15
- :titleWeight="titleWeight"
15
+ :title-weight="titleWeight"
16
16
  :text="text"
17
17
  :image="image"
18
- :firstName="firstName"
19
- :lastName="lastName"
18
+ :first-name="firstName"
19
+ :last-name="lastName"
20
20
  :position="position"
21
21
  :logo="logo"
22
- :colorScheme="colorScheme"
23
- :containerClass="themedClass('containerClass')"
24
- :titleClass="themedClass('titleClass')"
25
- :textClass="themedClass('textClass')"
26
- :mediaClass="themedClass('mediaClass')"
27
- :figcaptionClass="themedClass('figcaptionClass')"
28
- :elementClass="themedClass('elementClass')"
29
- :authorContainerClass="themedClass('authorContainerClass')"
30
- :authorNameContainerClass="themedClass('authorNameContainerClass')"
31
- :authorNameClass="themedClass('authorNameClass')"
32
- :authorPositionClass="themedClass('authorPositionClass')"
33
- :logoMediaClass="themedClass('logoMediaClass')"
34
- :logoFigcaptionClass="themedClass('logoFigcaptionClass')"
35
- :logoElementClass="themedClass('logoElementClass')"
22
+ :color-scheme="colorScheme"
23
+ :container-class="themedClass('containerClass')"
24
+ :title-class="themedClass('titleClass')"
25
+ :text-class="themedClass('textClass')"
26
+ :media-class="themedClass('mediaClass')"
27
+ :figcaption-class="themedClass('figcaptionClass')"
28
+ :element-class="themedClass('elementClass')"
29
+ :author-container-class="themedClass('authorContainerClass')"
30
+ :author-name-container-class="themedClass('authorNameContainerClass')"
31
+ :author-name-class="themedClass('authorNameClass')"
32
+ :author-position-class="themedClass('authorPositionClass')"
33
+ :logo-media-class="themedClass('logoMediaClass')"
34
+ :logo-figcaption-class="themedClass('logoFigcaptionClass')"
35
+ :logo-element-class="themedClass('logoElementClass')"
36
36
  />
37
37
  </div>
38
38
  </template>
@@ -40,13 +40,14 @@
40
40
  <script lang="ts" setup>
41
41
  import type { ParagraphIcmsTestimonialElementFragment } from '#graphql-operations'
42
42
  import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
43
+ import type { DefineBlokkliContext } from '#blokkli/types'
43
44
  import cn from '@iqual/nuxt-icms/composables/useCn'
44
45
 
45
46
  defineProps<ParagraphIcmsTestimonialElementFragment>()
46
47
 
47
48
  const themedClass = useTheme('ParagraphTestimonialElement')
48
49
 
49
- const { isEditing } = useAttrs().blokkliData
50
+ const { isEditing } = useAttrs().blokkliData as DefineBlokkliContext
50
51
 
51
52
  const colorScheme = inject<ColorScheme>('colorScheme')
52
53
  const titleWeight = inject<string>('titleWeight')