@iqual/nuxt-icms 1.3.1 → 1.4.0

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 (122) hide show
  1. package/assets/symbols/chevron-right.svg +1 -1
  2. package/components/Blokkli/HeroImage/index.vue +1 -1
  3. package/components/Blokkli/Teasers/icon.svg +3 -3
  4. package/components/DesignSystem/Atoms/Button.vue +86 -36
  5. package/components/DesignSystem/Atoms/Caption.vue +10 -10
  6. package/components/DesignSystem/Atoms/Container.vue +10 -6
  7. package/components/DesignSystem/Atoms/GridRow.vue +4 -3
  8. package/components/DesignSystem/Atoms/LinkListItem.vue +31 -8
  9. package/components/DesignSystem/Molecules/ButtonGroup.vue +18 -3
  10. package/components/DesignSystem/Molecules/Card.vue +86 -31
  11. package/components/DesignSystem/Molecules/IconText.vue +37 -16
  12. package/components/DesignSystem/Molecules/MediaLightbox.vue +213 -58
  13. package/components/DesignSystem/Molecules/MediaSlider.vue +88 -25
  14. package/components/DesignSystem/Molecules/Partnership.vue +40 -9
  15. package/components/DesignSystem/Molecules/Table.vue +90 -25
  16. package/components/DesignSystem/Molecules/TitleComposition.vue +15 -12
  17. package/components/DesignSystem/Organisms/ContentBlock.vue +61 -15
  18. package/components/DesignSystem/Organisms/FacetedListing.vue +170 -0
  19. package/components/DesignSystem/Organisms/FlipTeaser.vue +119 -47
  20. package/components/DesignSystem/Organisms/HeaderHero.vue +167 -0
  21. package/components/DesignSystem/Organisms/HeaderTextImage.vue +71 -0
  22. package/components/DesignSystem/Organisms/LogoElement.vue +33 -10
  23. package/components/DesignSystem/Organisms/Map.vue +11 -6
  24. package/components/DesignSystem/Organisms/SearchResults.vue +41 -0
  25. package/components/DesignSystem/Organisms/TeamElement.vue +84 -20
  26. package/components/DesignSystem/Organisms/TeaserCard.vue +87 -34
  27. package/components/DesignSystem/Organisms/Testimonial.vue +82 -12
  28. package/components/DesignSystem/Organisms/TimelineElement.vue +42 -12
  29. package/components/DesignSystem/Organisms/TwoColumnTextElement.vue +44 -9
  30. package/components/DesignSystem/Pages/Search.vue +39 -0
  31. package/components/Drupal/Breadcrumb/index.vue +16 -5
  32. package/components/Drupal/Messages/index.vue +16 -5
  33. package/components/Drupal/Webform/fragment.graphql +8 -5
  34. package/components/Drupal/Webform/index.vue +20 -9
  35. package/components/Drupal/Webform/query.graphql +18 -16
  36. package/components/Form/CheckboxInput.vue +6 -6
  37. package/components/Form/CheckboxInputs.vue +5 -5
  38. package/components/Form/FileUploadInput.vue +6 -6
  39. package/components/Form/RadioButtonsInput.vue +5 -5
  40. package/components/Form/SelectInput.vue +7 -7
  41. package/components/Form/SubmitButton.vue +1 -1
  42. package/components/Form/TextAreaInput.vue +2 -2
  43. package/components/Form/TextEmailInput.vue +2 -2
  44. package/components/Form/TextInput.vue +2 -2
  45. package/components/Form/TextPhoneInput.vue +2 -2
  46. package/components/Form/composables/useFormElement.ts +5 -5
  47. package/components/Form/utils/types.ts +8 -7
  48. package/components/Media/Icon/index.vue +10 -6
  49. package/components/Media/Image/index.vue +26 -20
  50. package/components/Media/RemoteVideo/index.vue +34 -21
  51. package/components/Media/Video/index.vue +6 -5
  52. package/components/Node/Icms/Page/Teaser/index.vue +6 -4
  53. package/components/Node/Icms/Page/index.vue +2 -2
  54. package/components/Paragraph/Button/Element/index.vue +9 -2
  55. package/components/Paragraph/CallToAction/index.vue +43 -10
  56. package/components/Paragraph/Card/Element/index.vue +2 -1
  57. package/components/Paragraph/Card/Layout/index.vue +29 -10
  58. package/components/Paragraph/Contact/index.vue +41 -12
  59. package/components/Paragraph/Downloads/index.vue +82 -33
  60. package/components/Paragraph/FAQ/Element/index.vue +41 -12
  61. package/components/Paragraph/FAQ/Layout/index.vue +47 -13
  62. package/components/Paragraph/FlipTeasers/index.vue +26 -6
  63. package/components/Paragraph/Gallery/index.vue +42 -10
  64. package/components/Paragraph/HeroImage/index.vue +62 -16
  65. package/components/Paragraph/IconText/Element/index.vue +7 -1
  66. package/components/Paragraph/IconText/Layout/index.vue +39 -12
  67. package/components/Paragraph/Introduction/index.vue +50 -15
  68. package/components/Paragraph/Logo/Element/fragment.graphql +1 -0
  69. package/components/Paragraph/Logo/Element/index.vue +7 -2
  70. package/components/Paragraph/Media/index.vue +32 -31
  71. package/components/Paragraph/Partnerships/Element/fragment.graphql +1 -0
  72. package/components/Paragraph/Partnerships/Element/index.vue +7 -0
  73. package/components/Paragraph/Partnerships/Layout/index.vue +100 -27
  74. package/components/Paragraph/SingleTestimonial/index.vue +58 -15
  75. package/components/Paragraph/Table/index.vue +32 -9
  76. package/components/Paragraph/Tabs/Element/index.vue +44 -10
  77. package/components/Paragraph/Tabs/Layout/index.vue +123 -37
  78. package/components/Paragraph/Team/Element/index.vue +18 -1
  79. package/components/Paragraph/Team/Layout/index.vue +30 -7
  80. package/components/Paragraph/Teasers/index.vue +33 -7
  81. package/components/Paragraph/Testimonial/Element/index.vue +30 -5
  82. package/components/Paragraph/Testimonial/Layout/index.vue +78 -24
  83. package/components/Paragraph/Text/index.vue +32 -10
  84. package/components/Paragraph/TextMedia/index.vue +44 -13
  85. package/components/Paragraph/Timeline/Element/index.vue +23 -7
  86. package/components/Paragraph/Timeline/Layout/index.vue +232 -67
  87. package/components/Paragraph/TwoColumnText/Element/index.vue +20 -3
  88. package/components/Paragraph/TwoColumnText/Layout/index.vue +8 -1
  89. package/components/Paragraph/iFrame/index.vue +31 -11
  90. package/components/Search/Facets/FacetDropdownUI.vue +351 -77
  91. package/components/Search/Facets/FacetedSearchUI.vue +257 -101
  92. package/components/Search/Facets/fragment.graphql +5 -1
  93. package/components/Search/Input/index.vue +78 -20
  94. package/components/Section/Footer/index.vue +170 -30
  95. package/components/Section/Header/Buttons.vue +34 -0
  96. package/components/Section/Header/DesktopMainMenu.vue +160 -0
  97. package/components/Section/Header/DesktopMainMenuDropdown.vue +170 -0
  98. package/components/Section/Header/LanguageDropdown.vue +95 -64
  99. package/components/Section/Header/LanguageLinks.vue +39 -0
  100. package/components/Section/Header/Logo.vue +23 -0
  101. package/components/Section/Header/MainButtons.vue +31 -0
  102. package/components/Section/Header/MenuIcon.vue +60 -49
  103. package/components/Section/Header/MetaButtons.vue +31 -0
  104. package/components/Section/Header/MetaMenu.vue +55 -53
  105. package/components/Section/Header/MobileMainMenu.vue +23 -0
  106. package/components/Section/Header/MobileMainMenuItem.vue +191 -0
  107. package/components/Section/Header/index.vue +182 -186
  108. package/composables/useMenu.ts +2 -2
  109. package/composables/useMobileMenuOverlayBus.ts +44 -0
  110. package/composables/useNavigationOffset.ts +2 -2
  111. package/composables/useTheme.ts +107 -0
  112. package/formkit.theme.ts +541 -586
  113. package/layouts/default.vue +7 -35
  114. package/layouts/error.vue +7 -32
  115. package/nuxt.config.ts +13 -0
  116. package/package.json +1 -1
  117. package/plugins/initData.ts +8 -5
  118. package/queries/query.initData.graphql +4 -2
  119. package/tailwind.config.ts +11 -11
  120. package/types/global.ts +1 -0
  121. package/components/Section/Header/GlobalMenu.vue +0 -335
  122. package/components/Section/Header/LanguageSwitcher.vue +0 -37
@@ -1,35 +1,50 @@
1
1
  <template>
2
- <VuepalRemoteVideo v-slot="{ embedUrl }" :url="media?.link">
3
- <figure class="w-full max-w-[1920px]" :class="mediaClass">
2
+ <VuepalRemoteVideo
3
+ v-slot="{ embedUrl }"
4
+ :url="media?.link"
5
+ :class="themedClass('containerClass')"
6
+ >
7
+ <figure :class="themedClass('mediaClass', 'w-full max-w-[1920px]')">
4
8
  <iframe
5
9
  v-if="embedUrl && isPlaying"
6
10
  :src="embedUrl"
7
11
  :title="media?.title"
8
12
  allow="autoplay; encrypted-media; picture-in-picture"
9
13
  allowfullscreen
10
- class="aspect-video w-full"
11
- :class="elementClass"
14
+ :class="themedClass('elementClass', 'aspect-video w-full')"
12
15
  />
13
16
 
14
17
  <button
15
18
  v-if="!isPlaying"
16
- class="relative flex aspect-video w-full cursor-pointer items-center justify-center"
17
- :class="elementClass"
18
19
  @click.prevent="isPlaying = true"
20
+ :class="
21
+ themedClass(
22
+ 'playButtonClass',
23
+ 'relative flex aspect-video w-full cursor-pointer items-center justify-center',
24
+ )
25
+ "
19
26
  >
20
27
  <img
21
28
  :src="thumbnailUrl"
22
- class="absolute left-0 top-0 aspect-video size-full object-cover"
23
29
  :alt="thumbnailAlt"
30
+ :class="
31
+ themedClass(
32
+ 'thumbnailClass',
33
+ 'absolute left-0 top-0 aspect-video size-full object-cover',
34
+ )
35
+ "
24
36
  />
25
37
 
26
- <SpriteSymbol name="play" class="z-10 size-[75px]" />
38
+ <SpriteSymbol
39
+ name="play"
40
+ :class="themedClass('playButtonIconClass', 'z-10 size-[75px]')"
41
+ />
27
42
  </button>
28
43
 
29
44
  <figcaption
30
45
  v-if="showCaption && media?.caption"
31
46
  v-text="media?.caption"
32
- :class="figcaptionClass"
47
+ :class="themedClass('figcaptionClass', 'mt-2 text-center italic')"
33
48
  />
34
49
  </figure>
35
50
  </VuepalRemoteVideo>
@@ -37,19 +52,17 @@
37
52
 
38
53
  <script lang="ts" setup>
39
54
  import type { MediaRemoteVideoFragment } from '#graphql-operations'
55
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
56
+
57
+ const themedClass = useTheme()
40
58
 
41
- const props = withDefaults(
42
- defineProps<{
43
- media: MediaRemoteVideoFragment
44
- mediaClass?: string
45
- elementClass?: string
46
- showCaption?: boolean
47
- figcaptionClass?: string
48
- }>(),
49
- {
50
- figcaptionClass: 'mt-2 italic text-center',
51
- },
52
- )
59
+ const props = defineProps<{
60
+ media: MediaRemoteVideoFragment
61
+ mediaClass?: string
62
+ elementClass?: string
63
+ showCaption?: boolean
64
+ figcaptionClass?: string
65
+ }>()
53
66
 
54
67
  const isPlaying = ref(false)
55
68
 
@@ -1,13 +1,12 @@
1
1
  <template>
2
- <figure :class="mediaClass">
2
+ <figure :class="themedClass('mediaClass')">
3
3
  <video
4
4
  :controls="videoControls"
5
5
  :muted="videoMuted"
6
6
  :autoplay="videoAutoplay"
7
7
  :loop="videoLoop"
8
8
  :poster="media?.thumbnail?.entity?.uri?.first?.url"
9
- class="w-full"
10
- :class="elementClass"
9
+ :class="themedClass('elementClass', 'w-full')"
11
10
  >
12
11
  <source v-if="media?.url?.path" :src="media.url.path" type="video/mp4" />
13
12
  Your browser does not support the video tag.
@@ -15,13 +14,16 @@
15
14
  <figcaption
16
15
  v-if="showCaption && media?.caption"
17
16
  v-text="media?.caption"
18
- :class="figcaptionClass"
17
+ :class="themedClass('figcaptionClass', 'mt-2 text-center italic')"
19
18
  />
20
19
  </figure>
21
20
  </template>
22
21
 
23
22
  <script lang="ts" setup>
24
23
  import type { MediaVideoFragment } from '#graphql-operations'
24
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
25
+
26
+ const themedClass = useTheme()
25
27
 
26
28
  withDefaults(
27
29
  defineProps<{
@@ -40,7 +42,6 @@ withDefaults(
40
42
  videoMuted: true,
41
43
  videoAutoplay: true,
42
44
  videoLoop: false,
43
- figcaptionClass: 'mt-2 italic text-center',
44
45
  },
45
46
  )
46
47
  </script>
@@ -12,9 +12,11 @@
12
12
  </template>
13
13
 
14
14
  <script lang="ts" setup>
15
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
15
16
  import type { NodeIcmsPageTeaserFragment } from '#graphql-operations'
16
- const props = defineProps<NodeIcmsPageTeaserFragment>()
17
- const { $texts } = useNuxtApp()
18
- const colorScheme = inject<string>('colorScheme')
17
+
18
+ defineProps<NodeIcmsPageTeaserFragment>()
19
+
20
+ const colorScheme = inject<ColorScheme>('colorScheme')
19
21
  const titleWeight = inject<string>('titleWeight')
20
- </script>
22
+ </script>
@@ -1,9 +1,9 @@
1
1
  <template>
2
- <div>
2
+ <main>
3
3
  <BlokkliProvider v-slot="{ entity }" v-bind="blokkliProps" :entity="props">
4
4
  <BlokkliField :list="paragraphs" name="field_icms_paragraphs" />
5
5
  </BlokkliProvider>
6
- </div>
6
+ </main>
7
7
  </template>
8
8
 
9
9
  <script lang="ts" setup>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="w-full md:w-auto">
2
+ <div :class="themedClass('containerClass', 'w-full md:w-auto')">
3
3
  <DesignSystemAtomsButton
4
4
  :label="label"
5
5
  :subline="subline"
@@ -10,14 +10,21 @@
10
10
  :style="buttonStyle"
11
11
  :textAlignment="textAlignment"
12
12
  :colorScheme="colorScheme"
13
+ :buttonClass="themedClass('buttonClass')"
14
+ :labelClass="themedClass('labelClass')"
15
+ :sublineClass="themedClass('sublineClass')"
13
16
  />
14
17
  </div>
15
18
  </template>
16
19
 
17
20
  <script lang="ts" setup>
21
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
18
22
  import type { ParagraphIcmsButtonElementFragment } from '#graphql-operations'
23
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
24
+
25
+ const themedClass = useTheme()
19
26
 
20
27
  defineProps<ParagraphIcmsButtonElementFragment>()
21
28
 
22
- const colorScheme = inject<string>('colorScheme')
29
+ const colorScheme = inject<ColorScheme>('colorScheme')
23
30
  </script>
@@ -2,34 +2,64 @@
2
2
  <DesignSystemAtomsContainer
3
3
  :colorScheme="colorScheme"
4
4
  :spacing="{ top: 'none', bottom: 'none' }"
5
- :class="containerClassList"
5
+ :class="cn(themedClass('containerClass'), containerClassList)"
6
6
  >
7
- <DesignSystemAtomsGridRow class="pb-14 md:pb-0">
8
- <div class="col-span-12 flex justify-center md:col-span-12 xl:col-span-3">
7
+ <DesignSystemAtomsGridRow :class="themedClass('rowClass', 'pb-14 md:pb-0')">
8
+ <div
9
+ :class="
10
+ themedClass(
11
+ 'firstColumnClass',
12
+ 'col-span-12 flex justify-center md:col-span-12 xl:col-span-3',
13
+ )
14
+ "
15
+ >
9
16
  <Media
10
17
  v-if="image"
11
18
  :media="image"
12
19
  imageSizes="xs:175px xl:350px"
13
20
  imageAspectRatios="1/1"
14
- mediaClass="-mt-12 xl:w-full"
15
- elementClass="size-full object-cover object-center aspect-square rounded-lg xl:rounded-none xl:rounded-t-lg"
21
+ :mediaClass="themedClass('mediaClass', '-mt-12 xl:w-full')"
22
+ :figcaptionClass="themedClass('figcaptionClass')"
23
+ :elementClass="themedClass('elementClass')"
16
24
  />
17
25
  </div>
18
- <div class="col-span-12 flex items-center md:col-span-9 xl:col-span-6">
26
+ <div
27
+ :class="
28
+ themedClass(
29
+ 'secondColumnClass',
30
+ 'col-span-12 flex items-center md:col-span-9 xl:col-span-6',
31
+ )
32
+ "
33
+ >
19
34
  <div
20
35
  v-if="text"
21
- class="ck-content py-8 text-lg md:pr-8 xl:p-8 xl:text-2xl"
36
+ :class="
37
+ themedClass(
38
+ 'textClass',
39
+ 'ck-content py-8 text-lg md:pr-8 xl:p-8 xl:text-2xl',
40
+ )
41
+ "
22
42
  v-html="text"
23
43
  />
24
44
  </div>
25
45
  <div
26
- class="col-span-12 flex items-center justify-center md:col-span-3 xl:col-span-3"
46
+ :class="
47
+ themedClass(
48
+ 'thirdColumnClass',
49
+ 'col-span-12 flex items-center justify-center md:col-span-3 xl:col-span-3',
50
+ )
51
+ "
27
52
  >
28
53
  <BlokkliField
29
54
  name="field_icms_buttons"
30
55
  :list="buttons"
31
- class="flex flex-wrap items-center justify-center gap-4"
32
- :class="{ droptarget: isEditing }"
56
+ :class="[
57
+ themedClass(
58
+ 'buttonsContainerClass',
59
+ 'flex flex-wrap items-center justify-center gap-4',
60
+ ),
61
+ { droptarget: isEditing },
62
+ ]"
33
63
  />
34
64
  </div>
35
65
  </DesignSystemAtomsGridRow>
@@ -38,6 +68,9 @@
38
68
 
39
69
  <script lang="ts" setup>
40
70
  import type { ParagraphIcmsLayoutCallToActionFragment } from '#graphql-operations'
71
+ import cn from '@iqual/nuxt-icms/composables/useCn'
72
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
73
+ const themedClass = useTheme()
41
74
 
42
75
  defineProps<ParagraphIcmsLayoutCallToActionFragment>()
43
76
 
@@ -10,10 +10,11 @@
10
10
  </template>
11
11
 
12
12
  <script lang="ts" setup>
13
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
13
14
  import type { ParagraphIcmsCardElementFragment } from '#graphql-operations'
14
15
 
15
16
  defineProps<ParagraphIcmsCardElementFragment>()
16
17
 
17
- const colorScheme = inject<string>('colorScheme')
18
+ const colorScheme = inject<ColorScheme>('colorScheme')
18
19
  const titleWeight = inject<string>('titleWeight')
19
20
  </script>
@@ -1,22 +1,34 @@
1
1
  <template>
2
- <DesignSystemAtomsContainer :colorScheme="colorScheme" :spacing="spacing">
3
- <DesignSystemAtomsGridRow v-if="pretitle || title">
4
- <div class="col-span-12 md:col-span-12">
2
+ <DesignSystemAtomsContainer
3
+ :colorScheme="colorScheme"
4
+ :spacing="spacing"
5
+ :class="themedClass('containerClass')"
6
+ >
7
+ <DesignSystemAtomsGridRow
8
+ v-if="pretitle || title"
9
+ :class="themedClass('rowClass')"
10
+ >
11
+ <div
12
+ :class="themedClass('firstColumnClass', 'col-span-12 md:col-span-12')"
13
+ >
5
14
  <DesignSystemOrganismsContentBlock
6
15
  :pretitle="pretitle"
16
+ :pretitleClass="themedClass('pretitleClass')"
7
17
  :title="title"
18
+ :titleClass="themedClass('titleClass', 'mb-0')"
8
19
  :titleWeight="titleWeight"
9
20
  :titleStyle="titleStyle"
10
- titleClass="mb-0"
11
21
  :colorScheme="colorScheme"
12
22
  />
13
23
  </div>
14
- <div class="col-span-12 md:col-span-9">
24
+ <div
25
+ :class="themedClass('secondColumnClass', 'col-span-12 md:col-span-9')"
26
+ >
15
27
  <DesignSystemOrganismsContentBlock
16
28
  :subtitle="subtitle"
29
+ :subtitleClass="themedClass('subtitleClass')"
17
30
  :text="text"
18
- :titleWeight="titleWeight"
19
- :titleStyle="titleStyle"
31
+ :textClass="themedClass('textClass')"
20
32
  :colorScheme="colorScheme"
21
33
  />
22
34
  </div>
@@ -25,11 +37,16 @@
25
37
  <BlokkliField
26
38
  name="field_icms_card_elements"
27
39
  :list="cards"
28
- class="container mx-auto grid gap-x-6 gap-y-20"
29
40
  :class="[
30
- 'grid-3-col',
41
+ themedClass(
42
+ 'cardsContainerClass',
43
+ 'grid-3-col container mx-auto grid gap-x-6 gap-y-12',
44
+ ),
31
45
  { droptarget: isEditing },
32
- { 'mt-10 md:mt-20': pretitle || title },
46
+ {
47
+ [themedClass('buttonsContainerOffsetClass', 'mt-10 md:mt-20')]:
48
+ pretitle || title,
49
+ },
33
50
  ]"
34
51
  />
35
52
  </DesignSystemAtomsContainer>
@@ -37,6 +54,8 @@
37
54
 
38
55
  <script lang="ts" setup>
39
56
  import type { ParagraphIcmsLayoutCardsFragment } from '#graphql-operations'
57
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
58
+ const themedClass = useTheme()
40
59
 
41
60
  const props = defineProps<ParagraphIcmsLayoutCardsFragment>()
42
61
 
@@ -1,39 +1,65 @@
1
1
  <template>
2
- <DesignSystemAtomsContainer :colorScheme="colorScheme" :spacing="spacing">
3
- <DesignSystemAtomsGridRow>
4
- <div class="col-span-12 md:col-span-12">
2
+ <DesignSystemAtomsContainer
3
+ :colorScheme="colorScheme"
4
+ :spacing="spacing"
5
+ :class="themedClass('containerClass')"
6
+ >
7
+ <DesignSystemAtomsGridRow :class="themedClass('rowClass')">
8
+ <div
9
+ :class="themedClass('firstColumnClass', 'col-span-12 md:col-span-12')"
10
+ >
5
11
  <DesignSystemOrganismsContentBlock
6
12
  :pretitle="pretitle"
13
+ :pretitleClass="themedClass('pretitleClass')"
7
14
  :title="title"
15
+ :titleClass="themedClass('titleClass', 'mb-0')"
8
16
  :subtitle="subtitle"
17
+ :subtitleClass="themedClass('subtitleClass')"
9
18
  :titleWeight="titleWeight"
10
19
  :titleStyle="titleStyle"
11
- titleClass="mb-0"
12
20
  :colorScheme="colorScheme"
13
21
  />
14
22
  </div>
15
- <div class="col-span-12 md:col-span-5">
23
+ <div
24
+ :class="themedClass('secondColumnClass', 'col-span-12 md:col-span-5')"
25
+ >
16
26
  <DesignSystemOrganismsContentBlock
17
- :subtitle="subtitle"
18
27
  :text="text"
28
+ :textClass="themedClass('textClass')"
19
29
  :media="media"
20
- mediaClass="size-full rounded-lg overflow-hidden"
21
- mediaSliderClass="mt-0 rounded-lg overflow-hidden"
30
+ :mediaClass="themedClass('mediaClass')"
31
+ :mediaContainerClass="themedClass('mediaContainerClass', 'mt-0')"
22
32
  :colorScheme="colorScheme"
23
33
  />
24
34
 
25
35
  <BlokkliField
26
36
  name="field_icms_buttons"
27
37
  :list="buttons"
28
- class="mt-6 flex flex-wrap gap-6"
29
- :class="{ droptarget: isEditing }"
38
+ :class="[
39
+ themedClass(
40
+ 'buttonsContainerClass',
41
+ 'mt-6 flex flex-wrap items-center gap-6',
42
+ ),
43
+ { droptarget: isEditing },
44
+ ]"
30
45
  />
31
46
  </div>
32
- <div class="col-span-12 md:col-span-6 md:col-start-7">
47
+ <div
48
+ :class="
49
+ themedClass(
50
+ 'thirdColumnClass',
51
+ 'col-span-12 md:col-span-6 md:col-start-7',
52
+ )
53
+ "
54
+ >
33
55
  <DrupalWebform
34
56
  v-if="contactWebform?.id"
35
57
  :form-id="contactWebform?.id"
36
- class="mt-4 md:mt-0"
58
+ :wrapperClass="themedClass('wrapperClass', 'mt-4 md:mt-0')"
59
+ :formWrapperClass="themedClass('formWrapperClass')"
60
+ :messagesClass="themedClass('messagesClass')"
61
+ :elementWrapperClass="themedClass('elementWrapperClass')"
62
+ :elementClass="themedClass('elementClass')"
37
63
  />
38
64
  </div>
39
65
  </DesignSystemAtomsGridRow>
@@ -42,11 +68,14 @@
42
68
 
43
69
  <script lang="ts" setup>
44
70
  import type { ParagraphIcmsLayoutContactFragment } from '#graphql-operations'
71
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
45
72
 
46
73
  defineProps<ParagraphIcmsLayoutContactFragment>()
47
74
 
48
75
  const { options, isEditing } = useAttrs().blokkliData
49
76
 
77
+ const themedClass = useTheme()
78
+
50
79
  const colorScheme = computed(() => {
51
80
  return options.value.colorScheme
52
81
  })
@@ -1,40 +1,66 @@
1
1
  <template>
2
- <DesignSystemAtomsContainer :colorScheme="colorScheme" :spacing="spacing">
3
- <DesignSystemAtomsGridRow>
4
- <div class="col-span-12 md:col-span-12">
2
+ <DesignSystemAtomsContainer
3
+ :colorScheme="colorScheme"
4
+ :spacing="spacing"
5
+ :class="themedClass('containerClass')"
6
+ >
7
+ <DesignSystemAtomsGridRow :class="themedClass('rowClass')">
8
+ <div
9
+ :class="themedClass('firstColumnClass', 'col-span-12 md:col-span-12')"
10
+ >
5
11
  <DesignSystemOrganismsContentBlock
6
12
  :pretitle="pretitle"
13
+ :pretitleClass="themedClass('pretitleClass')"
7
14
  :title="title"
15
+ :titleClass="themedClass('titleClass', 'mb-0')"
8
16
  :titleWeight="titleWeight"
9
17
  :titleStyle="titleStyle"
10
- titleClass="mb-0"
11
18
  :colorScheme="colorScheme"
12
19
  />
13
20
  </div>
14
- <div class="col-span-12 md:col-span-5">
21
+ <div
22
+ :class="themedClass('secondColumnClass', 'col-span-12 md:col-span-5')"
23
+ >
15
24
  <DesignSystemOrganismsContentBlock
16
25
  :media="media"
17
- mediaClass="size-full rounded-lg overflow-hidden"
18
- mediaSliderClass="mt-0 rounded-lg overflow-hidden"
26
+ :mediaClass="themedClass('mediaClass')"
27
+ :mediaContainerClass="themedClass('mediaContainerClass', 'mt-0')"
19
28
  :text="text"
29
+ :textClass="themedClass('textClass')"
20
30
  :colorScheme="colorScheme"
21
31
  />
22
32
  </div>
23
- <div class="col-span-12 md:order-last md:col-span-7 md:col-start-7">
24
- <div v-if="documents && documents.length">
25
- <div v-for="(document, index) in documents" :key="index">
26
- <a
27
- :href="document.mediaFileUrl?.path"
28
- target="_blank"
29
- rel="noopener noreferrer"
30
- :class="download({ colorScheme })"
31
- >
32
- <div :class="downloadIcon({ colorScheme })">
33
- <SpriteSymbol name="download" class="size-5" />
34
- </div>
35
- <DesignSystemOrganismsContentBlock :text="document.name" />
36
- </a>
37
- </div>
33
+ <div
34
+ :class="
35
+ themedClass(
36
+ 'thirdColumnClass',
37
+ 'col-span-12 md:order-last md:col-span-7 md:col-start-7',
38
+ )
39
+ "
40
+ >
41
+ <div
42
+ v-if="documents && documents.length"
43
+ :class="themedClass('downloadsContainer')"
44
+ >
45
+ <a
46
+ v-for="(document, index) in documents"
47
+ :key="index"
48
+ :href="document?.mediaFileUrl?.path"
49
+ target="_blank"
50
+ rel="noopener noreferrer"
51
+ :class="download({ colorScheme })"
52
+ >
53
+ <div :class="downloadIconContainer({ colorScheme })">
54
+ <SpriteSymbol
55
+ name="download"
56
+ :class="themedClass('downloadIcon', 'size-5')"
57
+ />
58
+ </div>
59
+ <DesignSystemOrganismsContentBlock
60
+ :text="document?.name"
61
+ :class="themedClass('downloadFileNameClass')"
62
+ />
63
+ </a>
38
64
  </div>
39
65
  </div>
40
66
  </DesignSystemAtomsGridRow>
@@ -44,10 +70,12 @@
44
70
  <script lang="ts" setup>
45
71
  import { tv } from 'tailwind-variants'
46
72
  import type { ParagraphIcmsLayoutDownloadsFragment } from '#graphql-operations'
73
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
47
74
 
48
75
  defineProps<ParagraphIcmsLayoutDownloadsFragment>()
49
76
 
50
77
  const { options, isEditing } = useAttrs().blokkliData
78
+ const themedClass = useTheme()
51
79
 
52
80
  const colorScheme = computed(() => options.value.colorScheme)
53
81
 
@@ -56,13 +84,19 @@ const spacing = computed(() => {
56
84
  })
57
85
 
58
86
  const download = tv({
59
- base: 'flex items-center gap-4 rounded-lg mb-4 py-4 px-5 shadow-custom-small',
87
+ base: themedClass('downloadBase', 'flex items-center gap-4 mb-4 py-4 px-5'),
60
88
  variants: {
61
89
  colorScheme: {
62
- none: 'bg-white',
63
- dark: 'bg-gray-900 text-white',
64
- light: 'bg-white',
65
- accent: 'bg-primary-700 text-white',
90
+ none: themedClass('downloadVariantsColorSchemeNone', 'bg-gray-50'),
91
+ dark: themedClass(
92
+ 'downloadVariantsColorSchemeDark',
93
+ 'bg-gray-900 text-white',
94
+ ),
95
+ light: themedClass('downloadVariantsColorSchemeLight', 'bg-white'),
96
+ accent: themedClass(
97
+ 'downloadVariantsColorSchemeAccent',
98
+ 'bg-primary-700 text-white',
99
+ ),
66
100
  },
67
101
  },
68
102
  defaultVariants: {
@@ -70,14 +104,29 @@ const download = tv({
70
104
  },
71
105
  })
72
106
 
73
- const downloadIcon = tv({
74
- base: 'w-10 shrink-0 rounded-full flex justify-center items-center aspect-square',
107
+ const downloadIconContainer = tv({
108
+ base: themedClass(
109
+ 'downloadIconContainerBase',
110
+ 'w-10 shrink-0 rounded-full flex justify-center items-center aspect-square',
111
+ ),
75
112
  variants: {
76
113
  colorScheme: {
77
- none: 'bg-gray-50',
78
- dark: 'bg-gray-400',
79
- light: 'bg-gray-50',
80
- accent: 'bg-primary-400',
114
+ none: themedClass(
115
+ 'downloadIconContainerVariantsColorSchemeNone',
116
+ 'bg-white',
117
+ ),
118
+ dark: themedClass(
119
+ 'downloadIconContainerVariantsColorSchemeDark',
120
+ 'bg-gray-950',
121
+ ),
122
+ light: themedClass(
123
+ 'downloadIconContainerVariantsColorSchemeLight',
124
+ 'bg-gray-50',
125
+ ),
126
+ accent: themedClass(
127
+ 'downloadIconContainerVariantsColorSchemeAccent',
128
+ 'bg-primary-600',
129
+ ),
81
130
  },
82
131
  },
83
132
  defaultVariants: {