@iqual/nuxt-icms 1.6.1 → 1.6.2-rc.1

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 +20 -19
  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
@@ -4,16 +4,16 @@
4
4
  <Media
5
5
  v-if="image"
6
6
  :media="image"
7
- imageAspectRatios="1/1"
8
- imageSizes="xs:100vw sm:100vw md:420px lg:420px"
9
- :mediaClass="
7
+ image-aspect-ratios="1/1"
8
+ image-sizes="xs:100vw sm:100vw md:420px lg:420px"
9
+ :media-class="
10
10
  themedClass(
11
11
  'mediaClass',
12
12
  'min-h-64 w-full @xl:w-[calc(50%-24px)] @xl:shrink-0 @7xl:w-fit',
13
13
  )
14
14
  "
15
- :figcaptionClass="themedClass('figcaptionClass')"
16
- :elementClass="
15
+ :figcaption-class="themedClass('figcaptionClass')"
16
+ :element-class="
17
17
  themedClass('elementClass', 'w-full rounded-full overflow-hidden')
18
18
  "
19
19
  />
@@ -32,17 +32,17 @@
32
32
  (firstname && lastname ? ' ' : '') +
33
33
  (lastname ?? '')
34
34
  "
35
- :titleWeight="titleWeight"
36
- :titleClass="
35
+ :title-weight="titleWeight"
36
+ :title-class="
37
37
  themedClass(
38
38
  'titleClass',
39
39
  'text-2xl lg:text-2xl font-semibold mb-2 last:mb-0',
40
40
  )
41
41
  "
42
42
  :subtitle="position"
43
- :subtitleClass="themedClass('subtitleClass', 'mb-0')"
43
+ :subtitle-class="themedClass('subtitleClass', 'mb-0')"
44
44
  :text="text"
45
- :textClass="themedClass('textClass', 'mt-2')"
45
+ :text-class="themedClass('textClass', 'mt-2')"
46
46
  />
47
47
 
48
48
  <div
@@ -58,12 +58,12 @@
58
58
  :title="email"
59
59
  :link="'mailto:' + email"
60
60
  :target-blank="false"
61
- :buttonStyle="'minimal'"
62
- :colorScheme="colorScheme"
63
- :buttonClass="
61
+ :button-style="'minimal'"
62
+ :color-scheme="colorScheme"
63
+ :button-class="
64
64
  themedClass('buttonClass', 'block p-0 font-normal break-all')
65
65
  "
66
- :labelClass="themedClass('labelClass')"
66
+ :label-class="themedClass('labelClass')"
67
67
  />
68
68
 
69
69
  <DesignSystemAtomsButton
@@ -71,12 +71,12 @@
71
71
  :title="phone"
72
72
  :link="'tel:' + phone"
73
73
  :target-blank="false"
74
- :buttonStyle="'minimal'"
75
- :colorScheme="colorScheme"
76
- :buttonClass="
74
+ :button-style="'minimal'"
75
+ :color-scheme="colorScheme"
76
+ :button-class="
77
77
  themedClass('buttonClass', 'block p-0 font-normal break-all')
78
78
  "
79
- :labelClass="themedClass('labelClass')"
79
+ :label-class="themedClass('labelClass')"
80
80
  />
81
81
  </div>
82
82
 
@@ -98,6 +98,7 @@
98
98
  <script lang="ts" setup>
99
99
  import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
100
100
  import type { MediaFragment } from '#graphql-operations'
101
+ import type { FieldListItem } from '#blokkli/types'
101
102
  import { tv } from 'tailwind-variants'
102
103
 
103
104
  const themedClass = useTheme('DesignSystemOrganismsTeamElement')
@@ -111,7 +112,7 @@ defineProps<{
111
112
  phone?: string
112
113
  text?: string
113
114
  image?: MediaFragment
114
- buttons?: Array<object>
115
+ buttons?: Array<FieldListItem | null>
115
116
  colorScheme?: ColorScheme
116
117
  containerClass?: string
117
118
  mediaClass?: string
@@ -11,11 +11,11 @@
11
11
  <Media
12
12
  v-if="image"
13
13
  :media="image"
14
- imageSizes="xs:100vw sm:100vw md:420px lg:420px"
15
- imageAspectRatios="16/9"
16
- :mediaClass="themedClass('mediaClass', 'w-full')"
17
- :figcaptionClass="themedClass('figcaptionClass')"
18
- :elementClass="themedClass('elementClass', 'w-full')"
14
+ image-sizes="xs:100vw sm:100vw md:420px lg:420px"
15
+ image-aspect-ratios="16/9"
16
+ :media-class="themedClass('mediaClass', 'w-full')"
17
+ :figcaption-class="themedClass('figcaptionClass')"
18
+ :element-class="themedClass('elementClass', 'w-full')"
19
19
  />
20
20
  </div>
21
21
 
@@ -30,32 +30,32 @@
30
30
  <slot name="content">
31
31
  <DesignSystemOrganismsContentBlock
32
32
  :pretitle="pretitle"
33
- :pretitleClass="
33
+ :pretitle-class="
34
34
  themedClass(
35
35
  'pretitleClass',
36
36
  'mb-1 text-base lg:text-base font-medium',
37
37
  )
38
38
  "
39
39
  :title="title"
40
- :titleWeight="titleWeight"
41
- :titleClass="
40
+ :title-weight="titleWeight"
41
+ :title-class="
42
42
  themedClass(
43
43
  'titleClass',
44
44
  'mb-2 text-xl lg:text-xl @sm:!text-2xl font-semibold line-clamp-4',
45
45
  )
46
46
  "
47
47
  :subtitle="subtitle"
48
- :subtitleClass="
48
+ :subtitle-class="
49
49
  themedClass(
50
50
  'subtitleClass',
51
51
  'mb-2 text-base lg:text-base font-semibold',
52
52
  )
53
53
  "
54
54
  :text="text"
55
- :textClass="themedClass('textClass', 'text-sm line-clamp-4')"
55
+ :text-class="themedClass('textClass', 'text-sm line-clamp-4')"
56
56
  />
57
57
  </slot>
58
- <slot name="extra"></slot>
58
+ <slot name="extra" />
59
59
  <slot name="buttongroup">
60
60
  <div
61
61
  v-if="link?.path"
@@ -75,10 +75,10 @@
75
75
  linkLabel ?? $texts('teaser_card.link_label', 'Read more')
76
76
  "
77
77
  :target-blank="false"
78
- :buttonStyle="'focus'"
79
- :colorScheme="colorScheme"
80
- :buttonClass="themedClass('buttonClass')"
81
- :labelClass="themedClass('labelClass')"
78
+ :button-style="'focus'"
79
+ :color-scheme="colorScheme"
80
+ :button-class="themedClass('buttonClass')"
81
+ :label-class="themedClass('labelClass')"
82
82
  />
83
83
  </div>
84
84
  </slot>
@@ -91,11 +91,10 @@
91
91
  import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
92
92
  import type { MediaFragment } from '#graphql-operations'
93
93
  import { tv } from 'tailwind-variants'
94
- import cn from '@iqual/nuxt-icms/composables/useCn'
95
94
 
96
95
  const themedClass = useTheme('DesignSystemOrganismsTeaserCard')
97
96
 
98
- const props = defineProps<{
97
+ defineProps<{
99
98
  image?: MediaFragment
100
99
  pretitle?: string
101
100
  title?: string
@@ -10,12 +10,12 @@
10
10
  <slot name="content">
11
11
  <DesignSystemOrganismsContentBlock
12
12
  :title="title"
13
- :titleWeight="titleWeight"
14
- :titleStyle="'heading-5'"
15
- :titleClass="themedClass('titleClass', 'mb-0 font-semibold')"
13
+ :title-weight="titleWeight"
14
+ :title-style="'heading-5'"
15
+ :title-class="themedClass('titleClass', 'mb-0 font-semibold')"
16
16
  />
17
17
  </slot>
18
- <slot name="links"></slot>
18
+ <slot name="links" />
19
19
  <div
20
20
  v-if="link?.path"
21
21
  :class="
@@ -67,33 +67,6 @@ const teaser = tv({
67
67
  },
68
68
  })
69
69
 
70
- const teaserIconWrapper = tv({
71
- base: themedClass(
72
- 'teaserIconWrapperBase',
73
- 'shrink-0 flex size-16 items-center justify-center p-2 aspect-square mb-6 lg:mb-8',
74
- ),
75
- variants: {
76
- colorScheme: {
77
- none: themedClass('teaserIconWrapperVariantsColorSchemeNone', 'bg-white'),
78
- dark: themedClass(
79
- 'teaserIconWrapperVariantsColorSchemeDark',
80
- 'bg-gray-900',
81
- ),
82
- light: themedClass(
83
- 'teaserIconWrapperVariantsColorSchemeLight',
84
- 'bg-gray-50',
85
- ),
86
- accent: themedClass(
87
- 'teaserIconWrapperVariantsColorSchemeAccent',
88
- 'bg-primary-600',
89
- ),
90
- },
91
- },
92
- defaultVariants: {
93
- colorScheme: 'none',
94
- },
95
- })
96
-
97
70
  const arrow = tv({
98
71
  base: themedClass('bulletPointBase', 'size-6 shrink-0 transition-transform'),
99
72
  variants: {
@@ -2,13 +2,13 @@
2
2
  <div :class="themedClass('containerClass')">
3
3
  <DesignSystemOrganismsContentBlock
4
4
  :title="title"
5
- :titleWeight="titleWeight"
6
- :titleClass="
5
+ :title-weight="titleWeight"
6
+ :title-class="
7
7
  themedClass('titleClass', 'text-xl font-semibold lg:text-2xl mb-1')
8
8
  "
9
9
  :text="text"
10
- :textClass="themedClass('textClass')"
11
- :colorScheme="colorScheme"
10
+ :text-class="themedClass('textClass')"
11
+ :color-scheme="colorScheme"
12
12
  />
13
13
  <div
14
14
  :class="themedClass('authorContainerClass', 'mt-10 flex items-center')"
@@ -16,16 +16,16 @@
16
16
  <Media
17
17
  v-if="image"
18
18
  :media="image"
19
- imageAspectRatios="1/1"
20
- imageSizes="xs:60px"
21
- :mediaClass="
19
+ image-aspect-ratios="1/1"
20
+ image-sizes="xs:60px"
21
+ :media-class="
22
22
  themedClass(
23
23
  'mediaClass',
24
24
  'mr-6 size-16 rounded-full overflow-hidden shrink-0',
25
25
  )
26
26
  "
27
- :figcaptionClass="themedClass('figcaptionClass')"
28
- :elementClass="themedClass('elementClass')"
27
+ :figcaption-class="themedClass('figcaptionClass')"
28
+ :element-class="themedClass('elementClass')"
29
29
  />
30
30
  <div
31
31
  :class="[
@@ -53,15 +53,15 @@
53
53
  <Media
54
54
  v-if="logo"
55
55
  :media="logo"
56
- imageSizes="xs:100px"
57
- :mediaClass="
56
+ image-sizes="xs:100px"
57
+ :media-class="
58
58
  themedClass(
59
59
  'logoMediaClass',
60
60
  'hidden max-w-24 max-h-12 lg:block shrink-0',
61
61
  )
62
62
  "
63
- :figcaptionClass="themedClass('logoFigcaptionClass')"
64
- :elementClass="themedClass('logoElementClass')"
63
+ :figcaption-class="themedClass('logoFigcaptionClass')"
64
+ :element-class="themedClass('logoElementClass')"
65
65
  />
66
66
  </div>
67
67
  </div>
@@ -10,7 +10,7 @@
10
10
  <div v-if="icon" :class="cardIconWrapper({ colorScheme })">
11
11
  <Media
12
12
  :media="icon"
13
- :mediaClass="
13
+ :media-class="
14
14
  themedClass(
15
15
  'mediaClass',
16
16
  'w-full h-full object-scale-down object-center',
@@ -21,18 +21,18 @@
21
21
  <slot name="content">
22
22
  <DesignSystemOrganismsContentBlock
23
23
  :pretitle="pretitle"
24
- :pretitleClass="
24
+ :pretitle-class="
25
25
  themedClass(
26
26
  'pretitleClass',
27
27
  '[&>p:last-of-type]:mb-0 text-base lg:text-base font-medium',
28
28
  )
29
29
  "
30
30
  :title="title"
31
- :titleWeight="titleWeight"
32
- :titleStyle="'heading-5'"
33
- :titleClass="themedClass('titleClass', 'mb-2 font-semibold')"
31
+ :title-weight="titleWeight"
32
+ :title-style="'heading-5'"
33
+ :title-class="themedClass('titleClass', 'mb-2 font-semibold')"
34
34
  :text="text"
35
- :textClass="themedClass('textClass', '[&>p:last-of-type]:mb-0')"
35
+ :text-class="themedClass('textClass', '[&>p:last-of-type]:mb-0')"
36
36
  />
37
37
  </slot>
38
38
  <slot name="links">
@@ -50,10 +50,10 @@
50
50
  :title="$texts('teaser_card.link_label', 'Read more')"
51
51
  :link="link?.path"
52
52
  :target-blank="false"
53
- :buttonStyle="'minimal'"
54
- :colorScheme="colorScheme"
55
- :buttonClass="themedClass('buttonClass')"
56
- :labelClass="themedClass('labelClass')"
53
+ :button-style="'minimal'"
54
+ :color-scheme="colorScheme"
55
+ :button-class="themedClass('buttonClass')"
56
+ :label-class="themedClass('labelClass')"
57
57
  />
58
58
  </div>
59
59
  </slot>
@@ -12,16 +12,16 @@
12
12
  <div :class="themedClass('firstColumnClass', textColumnClasses)">
13
13
  <DesignSystemOrganismsContentBlock
14
14
  :pretitle="pretitle"
15
- :pretitleClass="themedClass('pretitleClass')"
15
+ :pretitle-class="themedClass('pretitleClass')"
16
16
  :title="title"
17
- :titleStyle="titleStyle"
18
- :titleWeight="titleWeight"
19
- :titleClass="themedClass('titleClass', 'mb-2')"
17
+ :title-style="titleStyle"
18
+ :title-weight="titleWeight"
19
+ :title-class="themedClass('titleClass', 'mb-2')"
20
20
  :subtitle="subtitle"
21
- :subtitleClass="themedClass('subtitleClass', 'font-semibold')"
21
+ :subtitle-class="themedClass('subtitleClass', 'font-semibold')"
22
22
  :text="text"
23
- :textClass="themedClass('textClass')"
24
- :colorScheme="colorScheme"
23
+ :text-class="themedClass('textClass')"
24
+ :color-scheme="colorScheme"
25
25
  />
26
26
  <BlokkliField
27
27
  name="field_icms_buttons"
@@ -41,13 +41,13 @@
41
41
  <DesignSystemMoleculesMediaSlider
42
42
  v-if="media"
43
43
  :media="media"
44
- colorScheme="none"
45
- :containerClass="themedClass('mediaContainerClass', 'my-0')"
46
- imageSizes="xs:750px"
47
- :imageFormat="imageFormat"
48
- :mediaClass="themedClass('mediaClass', 'my-0')"
49
- :figcaptionClass="themedClass('figcaptionClass')"
50
- :elementClass="themedClass('elementClass')"
44
+ color-scheme="none"
45
+ :container-class="themedClass('mediaContainerClass', 'my-0')"
46
+ image-sizes="xs:750px"
47
+ :image-format="imageFormat"
48
+ :media-class="themedClass('mediaClass', 'my-0')"
49
+ :figcaption-class="themedClass('figcaptionClass')"
50
+ :element-class="themedClass('elementClass')"
51
51
  />
52
52
  </div>
53
53
  </DesignSystemAtomsGridRow>
@@ -56,6 +56,7 @@
56
56
  <script lang="ts" setup>
57
57
  import type { ColorScheme, ImageFormat } from '@iqual/nuxt-icms/types/global'
58
58
  import type { MediaFragment } from '#graphql-operations'
59
+ import type { FieldListItem } from '#blokkli/types'
59
60
 
60
61
  const themedClass = useTheme('DesignSystemOrganismsTimelineElement')
61
62
 
@@ -67,7 +68,7 @@ const props = defineProps<{
67
68
  subtitle?: string
68
69
  text?: string
69
70
  media?: (MediaFragment | null)[] | undefined
70
- buttons?: Array<object>
71
+ buttons?: Array<FieldListItem | null>
71
72
  colorScheme?: ColorScheme
72
73
  hasDecorativeLine?: boolean
73
74
  reverseColumns?: boolean
@@ -87,12 +88,12 @@ const props = defineProps<{
87
88
  imageFormat?: ImageFormat
88
89
  }>()
89
90
 
90
- const reverseColumns = ref(false)
91
+ const isReversed = ref(false)
91
92
 
92
93
  watch(
93
94
  () => props.reverseColumns,
94
95
  (newVal) => {
95
- reverseColumns.value = Boolean(Number(newVal))
96
+ isReversed.value = Boolean(Number(newVal))
96
97
  },
97
98
  { immediate: true },
98
99
  )
@@ -100,7 +101,7 @@ watch(
100
101
  const textColumnClasses = computed(() => {
101
102
  const classList = ['col-span-12', 'lg:col-span-5']
102
103
 
103
- if (reverseColumns.value) {
104
+ if (isReversed.value) {
104
105
  classList.push('lg:order-last', 'lg:col-start-8')
105
106
  } else {
106
107
  classList.push('lg:order-first', 'lg:col-start-1')
@@ -112,7 +113,7 @@ const textColumnClasses = computed(() => {
112
113
  const mediaColumnClasses = computed(() => {
113
114
  const classList = ['col-span-12', 'lg:col-span-5']
114
115
 
115
- if (reverseColumns.value) {
116
+ if (isReversed.value) {
116
117
  classList.push('lg:order-first', 'lg:col-start-1')
117
118
  } else {
118
119
  classList.push('lg:order-last', 'lg:col-start-8')
@@ -12,11 +12,11 @@
12
12
  "
13
13
  >
14
14
  <DesignSystemMoleculesTitleComposition
15
- :containerClass="themedClass('titleCompositionFirstContainerClass')"
15
+ :container-class="themedClass('titleCompositionFirstContainerClass')"
16
16
  :pretitle="pretitle"
17
- :pretitleClass="themedClass('pretitleClass')"
17
+ :pretitle-class="themedClass('pretitleClass')"
18
18
  :title="title"
19
- :titleClass="themedClass('titleClass')"
19
+ :title-class="themedClass('titleClass')"
20
20
  :weight="titleWeight"
21
21
  :style="titleStyle"
22
22
  />
@@ -33,11 +33,11 @@
33
33
  "
34
34
  >
35
35
  <DesignSystemMoleculesTitleComposition
36
- :containerClass="
36
+ :container-class="
37
37
  themedClass('titleCompositionSecondContainerClass', 'mb-2 text-base')
38
38
  "
39
39
  :subtitle="subtitle"
40
- :subtitleClass="themedClass('subtitleClass')"
40
+ :subtitle-class="themedClass('subtitleClass')"
41
41
  />
42
42
  <div
43
43
  v-if="text"