@iqual/nuxt-icms 1.3.0 → 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 +125 -0
  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,28 +1,58 @@
1
1
  <template>
2
- <div class="@container">
2
+ <div :class="themedClass('containerClass', '@container')">
3
3
  <div :class="teamElementWrapper({ colorScheme })">
4
4
  <Media
5
5
  v-if="image"
6
6
  :media="image"
7
7
  imageAspectRatios="1/1"
8
- imageSizes="xs:100vw sm:100vw md:320px lg:380px"
9
- mediaClass="aspect-square min-h-64 rounded-full overflow-hidden object-cover object-center @xl:w-[calc(50%-24px)] @xl:shrink-0"
8
+ imageSizes="xs:100vw sm:100vw md:420px lg:420px"
9
+ :mediaClass="
10
+ themedClass(
11
+ 'mediaClass',
12
+ 'min-h-64 w-full @xl:w-[calc(50%-24px)] @xl:shrink-0 @7xl:w-fit',
13
+ )
14
+ "
15
+ :figcaptionClass="themedClass('figcaptionClass')"
16
+ :elementClass="
17
+ themedClass('elementClass', 'w-full rounded-full overflow-hidden')
18
+ "
10
19
  />
11
20
 
12
21
  <div
13
- class="@xl:shrink-1 flex w-full grow flex-col gap-6 @xl:w-[calc(50%-24px)] @xl:justify-center"
22
+ :class="
23
+ themedClass(
24
+ 'textContainerClass',
25
+ '@xl:shrink-1 @xl:w-[calc(50%-24px)] @xl:justify-center @7xl:w-full flex w-full grow flex-col gap-6',
26
+ )
27
+ "
14
28
  >
15
29
  <DesignSystemOrganismsContentBlock
16
- :title="(firstname ?? '') + ((firstname && lastname) ? ' ' : '') + (lastname ?? '')"
30
+ :title="
31
+ (firstname ?? '') +
32
+ (firstname && lastname ? ' ' : '') +
33
+ (lastname ?? '')
34
+ "
17
35
  :titleWeight="titleWeight"
18
- titleClass="text-2xl lg:text-2xl font-semibold mb-2 last:mb-0"
36
+ :titleClass="
37
+ themedClass(
38
+ 'titleClass',
39
+ 'text-2xl lg:text-2xl font-semibold mb-2 last:mb-0',
40
+ )
41
+ "
19
42
  :subtitle="position"
20
- subtitleClass="mb-0"
43
+ :subtitleClass="themedClass('subtitleClass', 'mb-0')"
21
44
  :text="text"
22
- textClass="mt-2"
45
+ :textClass="themedClass('textClass', 'mt-2')"
23
46
  />
24
47
 
25
- <div class="mt-auto flex flex-col gap-2">
48
+ <div
49
+ :class="
50
+ themedClass(
51
+ 'contactButtonsContainerClass',
52
+ 'mt-auto flex flex-col gap-2',
53
+ )
54
+ "
55
+ >
26
56
  <DesignSystemAtomsButton
27
57
  :label="email"
28
58
  :title="email"
@@ -30,7 +60,12 @@
30
60
  :target-blank="false"
31
61
  :style="'minimal'"
32
62
  :colorScheme="colorScheme"
33
- buttonClass="block p-0 font-normal break-all"
63
+ :buttonClass="
64
+ themedClass('buttonClass', 'block p-0 font-normal break-all')
65
+ "
66
+ :labelClass="themedClass('labelClass')"
67
+ :sublineClass="themedClass('sublineClass')"
68
+ textAlignment="left"
34
69
  />
35
70
 
36
71
  <DesignSystemAtomsButton
@@ -40,14 +75,24 @@
40
75
  :target-blank="false"
41
76
  :style="'minimal'"
42
77
  :colorScheme="colorScheme"
43
- buttonClass="block p-0 font-normal break-all"
78
+ :buttonClass="
79
+ themedClass('buttonClass', 'block p-0 font-normal break-all')
80
+ "
81
+ :labelClass="themedClass('labelClass')"
82
+ :sublineClass="themedClass('sublineClass')"
83
+ textAlignment="left"
44
84
  />
45
85
  </div>
46
86
 
47
87
  <BlokkliField
48
88
  name="field_icms_buttons"
49
89
  :list="buttons"
50
- class="flex flex-wrap gap-4"
90
+ :class="
91
+ themedClass(
92
+ 'buttonsContainerClass',
93
+ 'flex flex-wrap items-center gap-4',
94
+ )
95
+ "
51
96
  />
52
97
  </div>
53
98
  </div>
@@ -55,8 +100,12 @@
55
100
  </template>
56
101
 
57
102
  <script lang="ts" setup>
58
- import { tv } from 'tailwind-variants'
103
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
59
104
  import type { MediaFragment } from '#graphql-operations'
105
+ import { tv } from 'tailwind-variants'
106
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
107
+
108
+ const themedClass = useTheme()
60
109
 
61
110
  defineProps<{
62
111
  firstname?: string
@@ -68,22 +117,37 @@ defineProps<{
68
117
  text?: string
69
118
  image?: MediaFragment
70
119
  buttons?: Array<object>
71
- colorScheme?: string
120
+ colorScheme?: ColorScheme
121
+ containerClass?: string
122
+ mediaClass?: string
123
+ figcaptionClass?: string
124
+ elementClass?: string
125
+ textContainerClass?: string
126
+ titleClass?: string
127
+ subtitleClass?: string
128
+ textClass?: string
129
+ contactButtonsContainerClass?: string
130
+ buttonsContainerClass?: string
131
+ buttonClass?: string
132
+ labelClass?: string
133
+ sublineClass?: string
72
134
  }>()
73
135
 
74
136
  const teamElementWrapper = tv({
75
- base: 'flex h-full flex-col gap-6 rounded-lg items-center p-6 shadow-custom-small @xl:flex-row @7xl:p-12 @xl:gap-12',
137
+ base: themedClass(
138
+ 'teamElementWrapperBase',
139
+ 'flex h-full flex-col gap-6 items-center @xl:flex-row @xl:gap-12',
140
+ ),
76
141
  variants: {
77
142
  colorScheme: {
78
- none: 'bg-white',
79
- dark: 'bg-gray-900',
80
- light: 'bg-white',
81
- accent: 'bg-primary-700',
143
+ none: themedClass('teamElementWrapperVariantsColorSchemeNone'),
144
+ dark: themedClass('teamElementWrapperVariantsColorSchemeDark'),
145
+ light: themedClass('teamElementWrapperVariantsColorSchemeLight'),
146
+ accent: themedClass('teamElementWrapperVariantsColorSchemeAccent'),
82
147
  },
83
148
  },
84
149
  defaultVariants: {
85
150
  colorScheme: 'none',
86
151
  },
87
152
  })
88
-
89
153
  </script>
@@ -1,46 +1,83 @@
1
1
  <template>
2
- <div class="@container">
2
+ <div :class="themedClass('containerClass', '@container')">
3
3
  <div :class="teaserCard({ colorScheme })">
4
4
  <Media
5
5
  v-if="image"
6
6
  :media="image"
7
- imageSizes="xs:100vw sm:100vw md:320px lg:380px"
8
- imageAspectRatios="16/9"
9
- mediaClass="aspect-16/9 w-full @xl:w-1/2"
10
- elementClass="size-full object-cover object-center rounded-lg"
7
+ imageSizes="xs:100vw sm:100vw md:420px lg:420px"
8
+ imageAspectRatios="4/3"
9
+ :mediaClass="themedClass('mediaClass', '@xl:w-1/2')"
10
+ :figcaptionClass="themedClass('figcaptionClass')"
11
+ :elementClass="themedClass('elementClass', 'w-full')"
11
12
  />
12
13
 
13
- <div class="flex h-full flex-col @xl:w-1/2">
14
- <DesignSystemOrganismsContentBlock
15
- :pretitle="pretitle"
16
- pretitleClass="mb-2 text-base lg:text-base text-gray-300 font-medium"
17
- :title="title"
18
- :titleWeight="titleWeight"
19
- titleClass="mb-2 text-xl lg:text-xl @sm:!text-2xl font-semibold line-clamp-4"
20
- :subtitle="subtitle"
21
- subtitleClass="mb-2 text-base lg:text-base font-semibold"
22
- :text="text"
23
- textClass="text-sm line-clamp-4"
24
- />
25
-
26
- <div v-if="link" class="mt-auto flex pt-6">
27
- <DesignSystemAtomsButton
28
- :link="link"
29
- :label="linkLabel ?? linkLabelFallback"
30
- :title="linkLabel ?? linkLabelFallback"
31
- :target-blank="false"
32
- :style="'normal'"
33
- :colorScheme="colorScheme"
14
+ <div
15
+ :class="
16
+ themedClass(
17
+ 'textContainerClass',
18
+ '@xl:w-1/2 @7xl:p-12 @xl:p-0 flex h-full flex-col',
19
+ )
20
+ "
21
+ >
22
+ <slot name="content">
23
+ <DesignSystemOrganismsContentBlock
24
+ :pretitle="pretitle"
25
+ :pretitleClass="
26
+ themedClass(
27
+ 'pretitleClass',
28
+ 'mb-2 text-base lg:text-base font-medium',
29
+ )
30
+ "
31
+ :title="title"
32
+ :titleWeight="titleWeight"
33
+ :titleClass="
34
+ themedClass(
35
+ 'titleClass',
36
+ 'mb-2 text-xl lg:text-xl @sm:!text-2xl font-semibold line-clamp-4',
37
+ )
38
+ "
39
+ :subtitle="subtitle"
40
+ :subtitleClass="
41
+ themedClass(
42
+ 'subtitleClass',
43
+ 'mb-2 text-base lg:text-base font-semibold',
44
+ )
45
+ "
46
+ :text="text"
47
+ :textClass="themedClass('textClass', 'text-sm line-clamp-4')"
34
48
  />
35
- </div>
49
+ </slot>
50
+ <slot name="extra"></slot>
51
+ <slot name="buttongroup">
52
+ <div
53
+ v-if="link"
54
+ :class="themedClass('buttonContainerClass', 'mt-auto flex pt-6')"
55
+ >
56
+ <DesignSystemAtomsButton
57
+ :link="link"
58
+ :label="linkLabel ?? linkLabelFallback"
59
+ :title="linkLabel ?? linkLabelFallback"
60
+ :target-blank="false"
61
+ :style="'focus'"
62
+ :colorScheme="colorScheme"
63
+ :buttonClass="themedClass('buttonClass')"
64
+ :labelClass="themedClass('labelClass')"
65
+ :sublineClass="themedClass('sublineClass')"
66
+ />
67
+ </div>
68
+ </slot>
36
69
  </div>
37
70
  </div>
38
71
  </div>
39
72
  </template>
40
73
 
41
74
  <script lang="ts" setup>
42
- import { tv } from 'tailwind-variants'
75
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
43
76
  import type { MediaFragment } from '#graphql-operations'
77
+ import { tv } from 'tailwind-variants'
78
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
79
+
80
+ const themedClass = useTheme()
44
81
 
45
82
  defineProps<{
46
83
  image?: MediaFragment
@@ -51,20 +88,36 @@ defineProps<{
51
88
  text?: string
52
89
  link?: string
53
90
  linkLabel?: string
54
- colorScheme?: string
91
+ colorScheme?: ColorScheme
92
+ containerClass?: string
93
+ mediaClass?: string
94
+ figcaptionClass?: string
95
+ elementClass?: string
96
+ textContainerClass?: string
97
+ pretitleClass?: string
98
+ titleClass?: string
99
+ subtitleClass?: string
100
+ textClass?: string
101
+ buttonContainerClass?: string
102
+ buttonClass?: string
103
+ labelClass?: string
104
+ sublineClass?: string
55
105
  }>()
56
106
 
57
107
  const { $texts } = useNuxtApp()
58
108
  const linkLabelFallback = $texts('teaser_card.link_label', 'Read more')
59
109
 
60
110
  const teaserCard = tv({
61
- base: 'relative shadow-custom-small rounded-lg p-6 h-full flex gap-6 flex-col @xl:flex-row @7xl:p-12 @7xl:gap-12',
111
+ base: themedClass(
112
+ 'teaserCardBase',
113
+ 'relative h-full flex gap-6 flex-col @xl:flex-row @7xl:gap-12',
114
+ ),
62
115
  variants: {
63
116
  colorScheme: {
64
- none: 'bg-white',
65
- dark: 'bg-gray-900',
66
- light: 'bg-white',
67
- accent: 'bg-primary-700',
117
+ none: themedClass('teaserCardVariantsColorSchemeNone'),
118
+ dark: themedClass('teaserCardVariantsColorSchemeDark'),
119
+ light: themedClass('teaserCardVariantsColorSchemeLight'),
120
+ accent: themedClass('teaserCardVariantsColorSchemeAccent'),
68
121
  },
69
122
  },
70
123
  defaultVariants: {
@@ -1,43 +1,76 @@
1
1
  <template>
2
- <div>
2
+ <div :class="themedClass('containerClass')">
3
3
  <DesignSystemOrganismsContentBlock
4
4
  :title="title"
5
5
  :titleWeight="titleWeight"
6
- titleClass="text-xl font-semibold lg:text-2xl mb-1"
6
+ :titleClass="
7
+ themedClass('titleClass', 'text-xl font-semibold lg:text-2xl mb-1')
8
+ "
7
9
  :text="text"
10
+ :textClass="themedClass('textClass')"
8
11
  :colorScheme="colorScheme"
9
12
  />
10
- <div class="mt-10 flex items-center">
13
+ <div
14
+ :class="themedClass('authorContainerClass', 'mt-10 flex items-center')"
15
+ >
11
16
  <Media
12
17
  v-if="image"
13
18
  :media="image"
14
19
  imageAspectRatios="1/1"
15
20
  imageSizes="xs:60px"
16
- mediaClass="mr-6 size-16 rounded-full overflow-hidden"
21
+ :mediaClass="
22
+ themedClass(
23
+ 'mediaClass',
24
+ 'mr-6 size-16 rounded-full overflow-hidden shrink-0',
25
+ )
26
+ "
27
+ :figcaptionClass="themedClass('figcaptionClass')"
28
+ :elementClass="themedClass('elementClass')"
17
29
  />
18
30
  <div
19
- class="flex shrink-0 flex-col"
20
- :class="{ 'mr-6 border-black pr-6 lg:border-r-1': logo }"
31
+ :class="[
32
+ themedClass('authorNameContainerClass', 'flex flex-col'),
33
+ logo ? authorDivider({ colorScheme }) : '',
34
+ ]"
21
35
  >
22
36
  <div>
23
- <span v-if="firstName" class="font-bold">{{ firstName }}</span>
24
- <span v-if="lastName">&nbsp;</span>
25
- <span v-if="lastName" class="font-bold">{{ lastName }}</span>
37
+ <span
38
+ v-if="firstName"
39
+ :class="themedClass('authorFirstNameClass', 'font-bold')"
40
+ >{{ firstName }}</span
41
+ >
42
+ <template v-if="lastName">
43
+ <span>&nbsp;</span>
44
+ <span :class="themedClass('authorLastNameClass', 'font-bold')">{{
45
+ lastName
46
+ }}</span>
47
+ </template>
48
+ </div>
49
+ <div v-if="position" :class="themedClass('authorPositionClass')">
50
+ {{ position }}
26
51
  </div>
27
- <div v-if="position">{{ position }}</div>
28
52
  </div>
29
53
  <Media
30
54
  v-if="logo"
31
55
  :media="logo"
32
56
  imageSizes="xs:100px"
33
- mediaClass="hidden max-w-24 lg:block"
57
+ :mediaClass="
58
+ themedClass('logoMediaClass', 'hidden max-w-24 lg:block shrink-0')
59
+ "
60
+ :figcaptionClass="themedClass('logoFigcaptionClass')"
61
+ :elementClass="themedClass('logoElementClass')"
34
62
  />
35
63
  </div>
36
64
  </div>
37
65
  </template>
38
66
 
39
67
  <script lang="ts" setup>
68
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
40
69
  import type { MediaFragment } from '#graphql-operations'
70
+ import { tv } from 'tailwind-variants'
71
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
72
+
73
+ const themedClass = useTheme()
41
74
 
42
75
  defineProps<{
43
76
  title?: string
@@ -48,6 +81,43 @@ defineProps<{
48
81
  lastName?: string
49
82
  position?: string
50
83
  logo?: MediaFragment
51
- colorScheme?: string
84
+ colorScheme?: ColorScheme
85
+ containerClass?: string
86
+ titleClass?: string
87
+ textClass?: string
88
+ mediaClass?: string
89
+ figcaptionClass?: string
90
+ elementClass?: string
91
+ authorContainerClass?: string
92
+ authorNameContainerClass?: string
93
+ authorNameClass?: string
94
+ authorPositionClass?: string
95
+ logoMediaClass?: string
96
+ logoFigcaptionClass?: string
97
+ logoElementClass?: string
52
98
  }>()
99
+
100
+ const authorDivider = tv({
101
+ base: themedClass(
102
+ 'authorDividerBase',
103
+ 'lg:border-r-1 mr-6 border-black pr-6',
104
+ ),
105
+ variants: {
106
+ colorScheme: {
107
+ none: themedClass('authorDividerVariantsColorSchemeNone', 'border-black'),
108
+ dark: themedClass('authorDividerVariantsColorSchemeDark', 'border-white'),
109
+ light: themedClass(
110
+ 'authorDividerVariantsColorSchemeLight',
111
+ 'border-black',
112
+ ),
113
+ accent: themedClass(
114
+ 'authorDividerVariantsColorSchemeAccent',
115
+ 'border-white',
116
+ ),
117
+ },
118
+ },
119
+ defaultVariants: {
120
+ colorScheme: 'none',
121
+ },
122
+ })
53
123
  </script>
@@ -1,46 +1,64 @@
1
1
  <template>
2
2
  <DesignSystemAtomsGridRow
3
- class="flex w-full shrink-0 flex-col-reverse justify-end p-0 lg:grid lg:scroll-mt-32"
4
3
  data-timeline-element
4
+ :class="
5
+ themedClass(
6
+ 'containerClass',
7
+ 'flex w-full shrink-0 flex-col-reverse justify-end p-0 lg:grid lg:scroll-mt-32',
8
+ )
9
+ "
5
10
  >
6
11
  <!-- Text column -->
7
- <div :class="textColumnClasses">
12
+ <div :class="themedClass('firstColumnClass', textColumnClasses)">
8
13
  <DesignSystemOrganismsContentBlock
9
14
  :pretitle="pretitle"
15
+ :pretitleClass="themedClass('pretitleClass')"
10
16
  :title="title"
11
17
  :titleStyle="titleStyle"
12
18
  :titleWeight="titleWeight"
13
- titleClass="mb-2"
19
+ :titleClass="themedClass('titleClass', 'mb-2')"
14
20
  :subtitle="subtitle"
15
- subtitleClass="font-semibold"
21
+ :subtitleClass="themedClass('subtitleClass', 'font-semibold')"
16
22
  :text="text"
23
+ :textClass="themedClass('textClass')"
17
24
  :colorScheme="colorScheme"
18
- :hasDecorativeLine="false"
19
25
  />
20
26
  <BlokkliField
21
27
  name="field_icms_buttons"
22
28
  :list="buttons"
23
- class="mt-6 flex flex-wrap gap-6"
24
- :class="[{ droptarget: isEditing }]"
29
+ :class="[
30
+ themedClass(
31
+ 'buttonsContainerClass',
32
+ 'mt-6 flex flex-wrap items-center gap-6',
33
+ ),
34
+ { droptarget: isEditing },
35
+ ]"
25
36
  />
26
37
  </div>
27
38
 
28
39
  <!-- Media column -->
29
- <div :class="mediaColumnClasses">
40
+ <div :class="themedClass('secondColumnClass', mediaColumnClasses)">
30
41
  <DesignSystemMoleculesMediaSlider
31
42
  v-if="media"
32
43
  :media="media"
33
- :colorScheme="colorScheme"
34
- sliderClass="my-0"
44
+ colorScheme="none"
45
+ :containerClass="themedClass('mediaContainerClass', 'my-0')"
35
46
  imageSizes="xs:750px sm:750px md:750px lg:750px"
36
- mediaClass="my-0 w-full rounded-lg overflow-hidden"
47
+ :mediaClass="themedClass('mediaClass', 'my-0')"
48
+ :figcaptionClass="themedClass('figcaptionClass')"
49
+ :elementClass="themedClass('elementClass')"
37
50
  />
38
51
  </div>
39
52
  </DesignSystemAtomsGridRow>
40
53
  </template>
41
54
 
42
55
  <script lang="ts" setup>
56
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
43
57
  import type { MediaFragment } from '#graphql-operations'
58
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
59
+
60
+ const themedClass = useTheme()
61
+
44
62
  const props = defineProps<{
45
63
  pretitle?: string
46
64
  title?: string
@@ -50,10 +68,22 @@ const props = defineProps<{
50
68
  text?: string
51
69
  media?: (MediaFragment | null)[] | undefined
52
70
  buttons?: Array<object>
53
- colorScheme?: string
71
+ colorScheme?: ColorScheme
54
72
  hasDecorativeLine?: boolean
55
73
  reverseColumns?: boolean
56
74
  isEditing?: boolean
75
+ containerClass?: string
76
+ firstColumnClass?: string
77
+ secondColumnClass?: string
78
+ pretitleClass?: string
79
+ titleClass?: string
80
+ subtitleClass?: string
81
+ textClass?: string
82
+ buttonsContainerClass?: string
83
+ mediaContainerClass?: string
84
+ mediaClass?: string
85
+ figcaptionClass?: string
86
+ elementClass?: string
57
87
  }>()
58
88
 
59
89
  const reverseColumns = ref(false)
@@ -1,32 +1,61 @@
1
1
  <template>
2
- <DesignSystemAtomsGridRow>
3
- <div class="col-span-12 sm:col-span-6 lg:col-span-5 lg:col-start-2">
2
+ <DesignSystemAtomsGridRow :class="themedClass('containerClass')">
3
+ <div
4
+ :class="
5
+ themedClass(
6
+ 'firstColumnClass',
7
+ 'col-span-12 sm:col-span-6 lg:col-span-5 lg:col-start-2',
8
+ )
9
+ "
10
+ >
4
11
  <DesignSystemMoleculesTitleComposition
12
+ :containerClass="themedClass('titleCompositionFirstContainerClass')"
5
13
  :pretitle="pretitle"
6
- :pretitleClass="pretitleClass"
14
+ :pretitleClass="themedClass('pretitleClass')"
7
15
  :title="title"
8
- :titleClass="titleClass"
16
+ :titleClass="themedClass('titleClass')"
9
17
  :weight="titleWeight"
10
18
  :style="titleStyle"
11
19
  />
12
20
  </div>
13
- <div class="col-span-12 sm:col-span-6 lg:col-span-4 lg:col-start-8">
21
+ <div
22
+ :class="
23
+ themedClass(
24
+ 'secondColumnClass',
25
+ 'col-span-12 sm:col-span-6 lg:col-span-4 lg:col-start-8',
26
+ )
27
+ "
28
+ >
14
29
  <DesignSystemMoleculesTitleComposition
30
+ :containerClass="
31
+ themedClass('titleCompositionSecondContainerClass', 'mb-2 text-base')
32
+ "
15
33
  :subtitle="subtitle"
16
- :subtitleClass="subtitleClass"
17
- class="mb-2 text-base"
34
+ :subtitleClass="themedClass('subtitleClass')"
18
35
  />
19
36
  <div
20
37
  v-if="text"
21
- class="ck-content hyphens-auto text-base"
38
+ :class="
39
+ cn(
40
+ themedClass(
41
+ 'textContainerClass',
42
+ 'ck-content hyphens-auto text-base lg:hyphens-none',
43
+ ),
44
+ textClass,
45
+ )
46
+ "
22
47
  v-html="text"
23
- :textClass="textClass"
24
48
  />
25
49
  </div>
26
50
  </DesignSystemAtomsGridRow>
27
51
  </template>
28
52
 
29
53
  <script lang="ts" setup>
54
+ import cn from '@iqual/nuxt-icms/composables/useCn'
55
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
56
+
57
+ const themedClass = useTheme()
58
+
30
59
  defineProps<{
31
60
  pretitle?: string
32
61
  pretitleClass?: string
@@ -38,5 +67,11 @@ defineProps<{
38
67
  subtitleClass?: string
39
68
  text?: string
40
69
  textClass?: string
70
+ containerClass?: string
71
+ firstColumnClass?: string
72
+ secondColumnClass?: string
73
+ titleCompositionFirstContainerClass?: string
74
+ titleCompositionSecondContainerClass?: string
75
+ textContainerClass?: string
41
76
  }>()
42
77
  </script>
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <div>
3
+ <DesignSystemAtomsContainer :class="themedClass('containerClass')">
4
+ <DesignSystemAtomsGridRow :class="themedClass('rowClass')">
5
+ <div :class="themedClass('columnClass', 'col-span-12')">
6
+ <SearchFacetsFacetedSearchUI
7
+ :base-filter="{}"
8
+ :facets="['type']"
9
+ listing-type="all"
10
+ :items-per-page="4"
11
+ :no-results-text="
12
+ $texts(
13
+ 'listing.no_results',
14
+ 'Currently there is no content available.',
15
+ )
16
+ "
17
+ :loading-text="$texts('listing.loading', 'Loading...')"
18
+ :load-more-text="$texts('listing.load_more', 'Load more')"
19
+ color-scheme="none"
20
+ :debug="false"
21
+ :enable-text-search="true"
22
+ group-results-by-facet="type"
23
+ >
24
+ <template #results="{ results }">
25
+ <DesignSystemOrganismsSearchResults :results="results" />
26
+ </template>
27
+ </SearchFacetsFacetedSearchUI>
28
+ </div>
29
+ </DesignSystemAtomsGridRow>
30
+ </DesignSystemAtomsContainer>
31
+ </div>
32
+ </template>
33
+
34
+ <script lang="ts" setup>
35
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
36
+
37
+ const themedClass = useTheme()
38
+ const { $texts } = useNuxtApp()
39
+ </script>