@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,3 +1,3 @@
1
1
  <svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M8.75 17L14.25 11.5L8.75 6" stroke="#1E1E1E" stroke-linecap="round" stroke-linejoin="round"/>
2
+ <path d="M8.75 17L14.25 11.5L8.75 6" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
3
3
  </svg>
@@ -9,7 +9,7 @@ const props = defineProps<ParagraphIcmsLayoutHeroImageFragment>()
9
9
 
10
10
  const blokkliData = defineBlokkli({
11
11
  bundle: 'icms_layout_hero_image',
12
- globalOptions: ['buttonAlignment', 'textShadow', 'colorMode', 'reverseColumns'],
12
+ globalOptions: ['buttonAlignment', 'textShadow', 'colorMode', 'reverseColumns', 'imageAlignment'],
13
13
  })
14
14
 
15
15
  </script>
@@ -1,6 +1,6 @@
1
1
  <svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
2
2
  <title>Teasers (layout)</title>
3
- <rect x="0.75" y="4.75" width="24.5" height="24.5" rx="1.25" fill="none" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/>
4
- <path d="M26 27H27C28.1046 27 29 26.1046 29 25V3C29 1.89543 28.1046 1 27 1H5C3.89543 1 3 1.89543 3 3V4" fill="none" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/>
5
- <path d="M11.8 20.6H8.8C8.32261 20.6 7.86477 20.4104 7.52721 20.0728C7.18964 19.7352 7 19.2774 7 18.8V18.2M11.8 20.6L10 22.4M11.8 20.6L10 18.8M14.2 11C14.5183 11 14.8235 11.1264 15.0485 11.3515C15.2736 11.5765 15.4 11.8817 15.4 12.2V14.6C15.4 14.9183 15.2736 15.2235 15.0485 15.4485C14.8235 15.6736 14.5183 15.8 14.2 15.8M17.8 11C18.1183 11 18.4235 11.1264 18.6485 11.3515C18.8736 11.5765 19 11.8817 19 12.2V14.6C19 14.9183 18.8736 15.2235 18.6485 15.4485C18.4235 15.6736 18.1183 15.8 17.8 15.8M15.4 18.2H17.8C18.4627 18.2 19 18.7373 19 19.4V21.8C19 22.4627 18.4627 23 17.8 23H15.4C14.7373 23 14.2 22.4627 14.2 21.8V19.4C14.2 18.7373 14.7373 18.2 15.4 18.2ZM8.2 11H10.6C11.2627 11 11.8 11.5373 11.8 12.2V14.6C11.8 15.2627 11.2627 15.8 10.6 15.8H8.2C7.53726 15.8 7 15.2627 7 14.6V12.2C7 11.5373 7.53726 11 8.2 11Z" fill="none" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <rect x="0.75" y="4.75" width="24.5" height="24.5" rx="1.25" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/>
4
+ <path d="M26 27H27C28.1046 27 29 26.1046 29 25V3C29 1.89543 28.1046 1 27 1H5C3.89543 1 3 1.89543 3 3V4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/>
5
+ <path d="M11.8 20.6H8.8C8.32261 20.6 7.86477 20.4104 7.52721 20.0728C7.18964 19.7352 7 19.2774 7 18.8V18.2M11.8 20.6L10 22.4M11.8 20.6L10 18.8M14.2 11C14.5183 11 14.8235 11.1264 15.0485 11.3515C15.2736 11.5765 15.4 11.8817 15.4 12.2V14.6C15.4 14.9183 15.2736 15.2235 15.0485 15.4485C14.8235 15.6736 14.5183 15.8 14.2 15.8M17.8 11C18.1183 11 18.4235 11.1264 18.6485 11.3515C18.8736 11.5765 19 11.8817 19 12.2V14.6C19 14.9183 18.8736 15.2235 18.6485 15.4485C18.4235 15.6736 18.1183 15.8 17.8 15.8M15.4 18.2H17.8C18.4627 18.2 19 18.7373 19 19.4V21.8C19 22.4627 18.4627 23 17.8 23H15.4C14.7373 23 14.2 22.4627 14.2 21.8V19.4C14.2 18.7373 14.7373 18.2 15.4 18.2ZM8.2 11H10.6C11.2627 11 11.8 11.5373 11.8 12.2V14.6C11.8 15.2627 11.2627 15.8 10.6 15.8H8.2C7.53726 15.8 7 15.2627 7 14.6V12.2C7 11.5373 7.53726 11 8.2 11Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
6
6
  </svg>
@@ -1,20 +1,34 @@
1
1
  <template>
2
2
  <NuxtLink
3
- :class="cn(button({ colorScheme, style, textAlignment }), buttonClass)"
3
+ :class="
4
+ cn(
5
+ button({ colorScheme, style, textAlignment }),
6
+ themedClass('buttonClass'),
7
+ )
8
+ "
4
9
  :target="targetBlank ? '_blank' : '_self'"
5
10
  :to="linkComplete"
6
11
  :title="title"
7
12
  :prefetch="prefetch"
8
13
  >
9
- <span class="block">{{ label }}</span>
10
- <span v-if="subline" class="block text-sm font-light">{{ subline }}</span>
14
+ <span class="block" :class="themedClass('labelClass')">{{ label }}</span>
15
+ <span
16
+ v-if="subline"
17
+ class="block"
18
+ :class="themedClass('sublineClass', 'text-sm font-light')"
19
+ >{{ subline }}</span
20
+ >
11
21
  </NuxtLink>
12
22
  </template>
13
23
 
14
24
  <script lang="ts" setup>
25
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
15
26
  import cn from '@iqual/nuxt-icms/composables/useCn'
27
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
16
28
  import { tv } from 'tailwind-variants'
17
29
 
30
+ const themedClass = useTheme()
31
+
18
32
  const props = defineProps<{
19
33
  label?: string
20
34
  subline?: string
@@ -23,108 +37,144 @@ const props = defineProps<{
23
37
  params?: string
24
38
  targetBlank?: boolean
25
39
  style?: string
26
- colorScheme?: string
40
+ colorScheme?: ColorScheme
27
41
  textAlignment?: string
28
42
  buttonClass?: string
43
+ labelClass?: string
44
+ sublineClass?: string
29
45
  }>()
30
46
 
31
47
  const button = tv({
32
- base: 'cursor-pointer font-medium py-2 px-3 rounded-lg duration-200 ease-in-out block w-full md:w-fit',
48
+ base: themedClass(
49
+ 'buttonBase',
50
+ 'cursor-pointer font-medium py-3 px-10 duration-200 ease-in-out block w-full md:w-fit',
51
+ ),
33
52
  variants: {
34
53
  colorScheme: {
35
- none: '',
36
- dark: '',
37
- light: '',
38
- accent: '',
54
+ none: themedClass('buttonVariantsColorSchemeNone'),
55
+ dark: themedClass('buttonVariantsColorSchemeDark'),
56
+ light: themedClass('buttonVariantsColorSchemeLight'),
57
+ accent: themedClass('buttonVariantsColorSchemeAccent'),
39
58
  },
40
59
  style: {
41
- normal: '',
42
- focus: '',
43
- minimal: 'px-0 underline text-current',
60
+ normal: themedClass('buttonVariantsStyleNormal', 'border'),
61
+ focus: themedClass('buttonVariantsStyleFocus', 'border'),
62
+ minimal: themedClass(
63
+ 'buttonVariantsStyleMinimal',
64
+ 'p-0 underline text-current',
65
+ ),
44
66
  },
45
67
  textAlignment: {
46
- left: 'text-left',
47
- center: 'text-center',
48
- right: 'text-right',
68
+ left: themedClass('buttonVariantsTextAlignmentLeft', 'text-left'),
69
+ center: themedClass('buttonVariantsTextAlignmentCenter', 'text-center'),
70
+ right: themedClass('buttonVariantsTextAlignmentRight', 'text-right'),
49
71
  },
50
72
  },
51
73
  compoundVariants: [
52
74
  {
53
75
  colorScheme: 'none',
54
76
  style: 'normal',
55
- class:
56
- 'bg-white text-black hover:bg-black hover:text-white border border-black',
77
+ class: themedClass(
78
+ 'buttonCompoundVariantsNoneNormal',
79
+ 'bg-white text-primary hover:bg-primary hover:text-white border-primary',
80
+ ),
57
81
  },
58
82
  {
59
83
  colorScheme: 'none',
60
84
  style: 'focus',
61
- class:
62
- 'bg-black text-white hover:bg-white hover:text-black border border-black',
85
+ class: themedClass(
86
+ 'buttonCompoundVariantsNoneFocus',
87
+ 'bg-primary text-white hover:bg-white hover:text-primary border-primary',
88
+ ),
63
89
  },
64
90
  {
65
91
  colorScheme: 'none',
66
92
  style: 'minimal',
67
- class: 'hover:text-primary-500',
93
+ class: themedClass(
94
+ 'buttonCompoundVariantsNoneMinimal',
95
+ 'text-primary hover:text-gray-950',
96
+ ),
68
97
  },
69
98
 
70
99
  {
71
100
  colorScheme: 'light',
72
101
  style: 'normal',
73
- class:
74
- 'bg-gray-50 text-black hover:bg-black hover:text-white border border-black',
102
+ class: themedClass(
103
+ 'buttonCompoundVariantsLightNormal',
104
+ 'bg-gray-50 text-primary hover:bg-primary hover:text-gray-50 border-primary',
105
+ ),
75
106
  },
76
107
  {
77
108
  colorScheme: 'light',
78
109
  style: 'focus',
79
- class:
80
- 'bg-black text-gray-50 hover:bg-gray-50 hover:text-black border border-black',
110
+ class: themedClass(
111
+ 'buttonCompoundVariantsLightFocus',
112
+ 'bg-primary text-gray-50 hover:bg-gray-50 hover:text-primary border-primary',
113
+ ),
81
114
  },
82
115
  {
83
116
  colorScheme: 'light',
84
117
  style: 'minimal',
85
- class: 'hover:text-primary-500',
118
+ class: themedClass(
119
+ 'buttonCompoundVariantsLightMinimal',
120
+ 'text-primary hover:text-gray-950',
121
+ ),
86
122
  },
87
123
 
88
124
  {
89
125
  colorScheme: 'dark',
90
126
  style: 'normal',
91
- class:
92
- 'bg-black text-white hover:bg-white hover:text-black border border-white',
127
+ class: themedClass(
128
+ 'buttonCompoundVariantsDarkNormal',
129
+ 'bg-gray-950 text-white hover:bg-white hover:text-gray-950 border-white',
130
+ ),
93
131
  },
94
132
  {
95
133
  colorScheme: 'dark',
96
134
  style: 'focus',
97
- class:
98
- 'bg-white text-black hover:bg-black hover:text-white border border-white',
135
+ class: themedClass(
136
+ 'buttonCompoundVariantsDarkFocus',
137
+ 'bg-primary text-gray-950 hover:bg-gray-950 hover:text-primary border-primary',
138
+ ),
99
139
  },
100
140
  {
101
141
  colorScheme: 'dark',
102
142
  style: 'minimal',
103
- class: 'hover:text-primary-500',
143
+ class: themedClass(
144
+ 'buttonCompoundVariantsDarkMinimal',
145
+ 'text-primary hover:text-white',
146
+ ),
104
147
  },
105
148
 
106
149
  {
107
150
  colorScheme: 'accent',
108
151
  style: 'normal',
109
- class:
110
- 'bg-primary-600 text-white hover:bg-white hover:text-black border border-white',
152
+ class: themedClass(
153
+ 'buttonCompoundVariantsAccentNormal',
154
+ 'bg-primary-600 text-white hover:bg-white hover:text-gray-950 border-white',
155
+ ),
111
156
  },
112
157
  {
113
158
  colorScheme: 'accent',
114
159
  style: 'focus',
115
- class:
116
- 'bg-black text-white hover:bg-white hover:text-black border border-black hover:border-white',
160
+ class: themedClass(
161
+ 'buttonCompoundVariantsAccentFocus',
162
+ 'bg-gray-950 text-white hover:bg-white hover:text-gray-950 border-gray-950 hover:border-white',
163
+ ),
117
164
  },
118
165
  {
119
166
  colorScheme: 'accent',
120
167
  style: 'minimal',
121
- class: 'hover:text-black',
168
+ class: themedClass(
169
+ 'buttonCompoundVariantsAccentMinimal',
170
+ 'hover:text-gray-950',
171
+ ),
122
172
  },
123
173
  ],
124
174
  defaultVariants: {
125
175
  colorScheme: 'none',
126
176
  style: 'normal',
127
- textAlignment: 'left',
177
+ textAlignment: 'center',
128
178
  },
129
179
  })
130
180
 
@@ -1,15 +1,15 @@
1
1
  <template>
2
- <p :class="captionClass">{{ caption }}</p>
2
+ <p :class="themedClass('captionClass', 'text-lg text-gray-400')">
3
+ {{ caption }}
4
+ </p>
3
5
  </template>
4
6
 
5
7
  <script setup lang="ts">
6
- withDefaults(
7
- defineProps<{
8
- caption?: string
9
- captionClass?: string
10
- }>(),
11
- {
12
- captionClass: 'text-gray-300 text-lg',
13
- },
14
- )
8
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
9
+ const themedClass = useTheme()
10
+
11
+ defineProps<{
12
+ caption?: string
13
+ captionClass?: string
14
+ }>()
15
15
  </script>
@@ -1,13 +1,17 @@
1
1
  <template>
2
- <section :class="containerClassList">
2
+ <section :class="themedClass('class', containerClassList)">
3
3
  <slot />
4
4
  </section>
5
5
  </template>
6
6
 
7
7
  <script lang="ts" setup>
8
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
9
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
10
+ const themedClass = useTheme()
11
+
8
12
  const props = withDefaults(
9
13
  defineProps<{
10
- colorScheme?: string
14
+ colorScheme?: ColorScheme
11
15
  spacing?: {
12
16
  top?: string
13
17
  bottom?: string
@@ -25,14 +29,14 @@ const props = withDefaults(
25
29
 
26
30
  const containerClassList = computed(() => {
27
31
  const classList = []
28
- if (props.class) {
29
- classList.push(props.class)
32
+ if (props.colorScheme === 'none') {
33
+ classList.push('bg-white text-gray-950')
30
34
  }
31
35
  if (props.colorScheme === 'dark') {
32
36
  classList.push('bg-gray-950 text-white')
33
37
  }
34
38
  if (props.colorScheme === 'light') {
35
- classList.push('bg-gray-50')
39
+ classList.push('bg-gray-50 text-gray-950')
36
40
  }
37
41
  if (props.colorScheme === 'accent') {
38
42
  classList.push('bg-primary-600 text-white')
@@ -49,6 +53,6 @@ const containerClassList = computed(() => {
49
53
  if (props.spacing.bottom === 'large') {
50
54
  classList.push('pb-24 md:pb-32')
51
55
  }
52
- return classList
56
+ return classList.join(' ')
53
57
  })
54
58
  </script>
@@ -1,13 +1,14 @@
1
1
  <template>
2
- <div :class="cn('container mx-auto grid grid-cols-12 gap-6', props.class)">
2
+ <div :class="themedClass('class', 'container mx-auto grid grid-cols-12 gap-6')">
3
3
  <slot />
4
4
  </div>
5
5
  </template>
6
6
 
7
7
  <script lang="ts" setup>
8
- import cn from '@iqual/nuxt-icms/composables/useCn'
8
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
9
+ const themedClass = useTheme()
9
10
 
10
- const props = defineProps<{
11
+ defineProps<{
11
12
  class?: string
12
13
  }>()
13
14
  </script>
@@ -1,21 +1,44 @@
1
1
  <template>
2
- <NuxtLink v-if="link && (title || description)"
3
- class="block border-b-1 first:border-t-1 py-4"
2
+ <NuxtLink
3
+ v-if="link && (title || description)"
4
+ :class="
5
+ themedClass(
6
+ 'linkClass',
7
+ 'border-b-1 first:border-t-1 group block border-gray-100 py-4',
8
+ )
9
+ "
4
10
  :to="link"
5
11
  :title="title"
6
12
  :prefetch="true"
7
13
  >
8
- <span v-if="title" class="block">{{ title }}</span>
9
- <span v-if="description" class="block text-sm font-light mt-2" v-html="description" />
14
+ <span
15
+ v-if="title"
16
+ :class="
17
+ themedClass(
18
+ 'titleClass',
19
+ 'group-hover:text-primary block transition-colors duration-200',
20
+ )
21
+ "
22
+ v-text="title"
23
+ />
24
+ <span
25
+ v-if="description"
26
+ :class="themedClass('descriptionClass', 'mt-2 block text-sm font-light')"
27
+ v-html="description"
28
+ />
10
29
  </NuxtLink>
11
30
  </template>
12
31
 
13
32
  <script lang="ts" setup>
33
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
34
+ const themedClass = useTheme()
14
35
 
15
- const props = defineProps<{
16
- title?: String
17
- description?: String
36
+ defineProps<{
37
+ title?: string
38
+ description?: string
18
39
  link?: string
40
+ titleClass?: string
41
+ linkClass?: string
42
+ descriptionClass?: string
19
43
  }>()
20
-
21
44
  </script>
@@ -1,7 +1,12 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="links?.length"
4
- :class="cn('mt-6 flex flex-wrap gap-6', wrapperClass, buttonAlignment)"
4
+ :class="
5
+ cn(
6
+ themedClass('containerClass', 'mt-6 flex flex-wrap items-center gap-6'),
7
+ buttonAlignment,
8
+ )
9
+ "
5
10
  >
6
11
  <DesignSystemAtomsButton
7
12
  v-for="link in links"
@@ -13,12 +18,19 @@
13
18
  :target-blank="link?.props.targetBlank"
14
19
  :title="link?.props.title"
15
20
  :colorScheme="colorScheme"
21
+ :buttonClass="themedClass('buttonClass')"
22
+ :labelClass="themedClass('labelClass')"
23
+ :sublineClass="themedClass('sublineClass')"
16
24
  />
17
25
  </div>
18
26
  </template>
19
27
 
20
28
  <script lang="ts" setup>
29
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
21
30
  import cn from '@iqual/nuxt-icms/composables/useCn'
31
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
32
+
33
+ const themedClass = useTheme()
22
34
 
23
35
  type Link = {
24
36
  props: {
@@ -38,8 +50,11 @@ type Link = {
38
50
 
39
51
  defineProps<{
40
52
  links?: Array<Link>
41
- colorScheme?: string
42
- wrapperClass?: string
53
+ colorScheme?: ColorScheme
43
54
  buttonAlignment?: string
55
+ containerClass?: string
56
+ buttonClass?: string
57
+ labelClass?: string
58
+ sublineClass?: string
44
59
  }>()
45
60
  </script>
@@ -1,24 +1,53 @@
1
1
  <template>
2
- <div class="@container">
3
- <div :class="[card({ colorScheme }), { 'pb-20': icon }]">
4
- <Media
5
- v-if="image"
6
- :media="image"
7
- imageAspectRatio="4/3"
8
- imageSizes="xs:100vw sm:100vw md:50vw lg:380px"
9
- elementClass="aspect-4/3 w-full rounded-lg object-cover object-center @xl:w-1/2 @xl:shrink-0"
10
- />
11
- <DesignSystemOrganismsContentBlock
12
- :title="title"
13
- :titleWeight="titleWeight"
14
- :titleStyle="'heading-5'"
15
- titleClass="!mb-2 text-center @xl:text-left font-semibold"
16
- :text="text"
17
- />
18
- <div v-if="icon" :class="cardIconWrapper({ colorScheme })">
2
+ <div :class="themedClass('containerClass', '@container')">
3
+ <div :class="card({ colorScheme })">
4
+ <div
5
+ :class="
6
+ cn(
7
+ themedClass(
8
+ 'mediaContainerClass',
9
+ '@xl:w-1/2 @xl:shrink-0 relative',
10
+ ),
11
+ {
12
+ [themedClass('iconOffsetClass', '@xl:pb-0 pb-12')]: icon,
13
+ },
14
+ )
15
+ "
16
+ >
19
17
  <Media
20
- :media="icon"
21
- mediaClass="icon"
18
+ v-if="image"
19
+ :media="image"
20
+ imageAspectRatios="4/3"
21
+ imageSizes="xs:100vw sm:100vw md:50vw lg:50vw"
22
+ :mediaClass="themedClass('mediaClass')"
23
+ :figcaptionClass="themedClass('figcaptionClass')"
24
+ :elementClass="themedClass('elementClass')"
25
+ />
26
+ <div v-if="icon" :class="cardIconWrapper({ colorScheme })">
27
+ <Media :media="icon" />
28
+ </div>
29
+ </div>
30
+
31
+ <div
32
+ :class="
33
+ themedClass(
34
+ 'contentContainerClass',
35
+ '@xl:w-1/2 @xl:shrink-0 @xl:py-6 @xl:px-8 @7xl:p-16 w-full p-6 pt-0',
36
+ )
37
+ "
38
+ >
39
+ <DesignSystemOrganismsContentBlock
40
+ :title="title"
41
+ :titleWeight="titleWeight"
42
+ :titleStyle="'heading-5'"
43
+ :titleClass="
44
+ themedClass(
45
+ 'titleClass',
46
+ 'mb-2 text-center @xl:text-left font-semibold',
47
+ )
48
+ "
49
+ :text="text"
50
+ :textClass="themedClass('textClass', 'text-center @xl:text-left')"
22
51
  />
23
52
  </div>
24
53
  </div>
@@ -26,8 +55,13 @@
26
55
  </template>
27
56
 
28
57
  <script lang="ts" setup>
29
- import { tv } from 'tailwind-variants'
58
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
30
59
  import type { MediaFragment } from '#graphql-operations'
60
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
61
+ import { tv } from 'tailwind-variants'
62
+ import cn from '@iqual/nuxt-icms/composables/useCn'
63
+
64
+ const themedClass = useTheme()
31
65
 
32
66
  defineProps<{
33
67
  title?: string
@@ -35,17 +69,23 @@ defineProps<{
35
69
  text?: string
36
70
  image?: MediaFragment
37
71
  icon?: MediaFragment
38
- colorScheme?: string
72
+ colorScheme?: ColorScheme
73
+ containerClass?: string
74
+ titleClass?: string
75
+ textClass?: string
39
76
  }>()
40
77
 
41
78
  const card = tv({
42
- base: 'relative shadow-custom-small rounded-lg p-6 h-full flex gap-6 flex-col @xl:flex-row @xl:pb-6 @7xl:p-16 @7xl:gap-16',
79
+ base: themedClass(
80
+ 'cardBase',
81
+ 'flex gap-6 flex-col @xl:flex-row @xl:gap-0 @xl:p-0',
82
+ ),
43
83
  variants: {
44
84
  colorScheme: {
45
- none: 'bg-white',
46
- dark: 'bg-gray-900',
47
- light: 'bg-white',
48
- accent: 'bg-primary-700',
85
+ none: themedClass('cardVariantsColorSchemeNone', 'bg-gray-50'),
86
+ dark: themedClass('cardVariantsColorSchemeDark', 'bg-gray-900'),
87
+ light: themedClass('cardVariantsColorSchemeLight', 'bg-white'),
88
+ accent: themedClass('cardVariantsColorSchemeAccent', 'bg-primary-700'),
49
89
  },
50
90
  },
51
91
  defaultVariants: {
@@ -54,13 +94,28 @@ const card = tv({
54
94
  })
55
95
 
56
96
  const cardIconWrapper = tv({
57
- base: 'absolute -bottom-12 left-1/2 flex size-24 -translate-x-1/2 items-center justify-center rounded-full p-6 @xl:[left:calc(25%+12px)] @7xl:@xl:[left:calc(25%+32px)]',
97
+ base: themedClass(
98
+ 'cardIconWrapperBase',
99
+ 'absolute bottom-0 @xl:-bottom-12 left-1/2 flex size-24 -translate-x-1/2 items-center justify-center rounded-full p-6',
100
+ ),
58
101
  variants: {
59
102
  colorScheme: {
60
- none: 'bg-gray-50',
61
- dark: 'bg-gray-800',
62
- light: 'bg-gray-100',
63
- accent: 'bg-primary-500',
103
+ none: themedClass(
104
+ 'cardIconWrapperVariantsColorSchemeNone',
105
+ 'bg-white @xl:bg-gray-50',
106
+ ),
107
+ dark: themedClass(
108
+ 'cardIconWrapperVariantsColorSchemeDark',
109
+ 'bg-gray-950 @xl:bg-gray-900',
110
+ ),
111
+ light: themedClass(
112
+ 'cardIconWrapperVariantsColorSchemeLight',
113
+ 'bg-gray-50 @xl:bg-white',
114
+ ),
115
+ accent: themedClass(
116
+ 'cardIconWrapperVariantsColorSchemeAccent',
117
+ 'bg-primary-600 @xl:bg-primary-700',
118
+ ),
64
119
  },
65
120
  },
66
121
  defaultVariants: {