@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,33 +1,63 @@
1
1
  <template>
2
- <div class="facets-ui space-y-5" v-if="groupEntries.length">
3
- <!-- Clear Filters Button -->
4
-
5
- <DesignSystemAtomsGridRow class="w-full p-0">
2
+ <div
3
+ :class="themedClass('containerClass', 'facets-ui space-y-5')"
4
+ v-if="groupEntries.length"
5
+ >
6
+ <!-- Filters row -->
7
+ <DesignSystemAtomsGridRow
8
+ :class="themedClass('filtersRowClass', 'w-full p-0')"
9
+ >
10
+ <!-- Text search input column -->
6
11
  <div
7
12
  v-if="enableTextSearch"
8
- class="col-span-12 md:col-span-6 lg:col-span-3"
13
+ :class="
14
+ themedClass(
15
+ 'textSearchInputColumnClass',
16
+ 'col-span-12 md:col-span-6 lg:col-span-3',
17
+ )
18
+ "
9
19
  >
20
+ <!-- Text search input -->
10
21
  <SearchInput
11
- inputClass="w-full pr-6 pl-12 py-4 border rounded-lg transition-all bg-white text-black border-0 shadow-custom-small focus:outline-none focus:ring-2 focus:ring-primary-500 selection:bg-primary-500 selection:text-white border-1 border-gray-200 placeholder-gray-300"
22
+ :inputClass="
23
+ themedClass(
24
+ 'textSearchInputClass',
25
+ 'w-full pr-6 pl-12 py-3 border transition-all bg-white text-black border-0 selection:bg-primary selection:text-white border-1 border-gray-200 placeholder-gray-300',
26
+ )
27
+ "
28
+ :colorScheme="colorScheme"
12
29
  v-model="internalSearchTerm"
13
30
  />
14
31
  </div>
15
32
 
33
+ <!-- Filters column -->
16
34
  <div
17
35
  v-for="[field, opts] in groupEntries"
18
36
  :key="field.field"
19
- class="col-span-12 md:col-span-6 lg:col-span-3"
37
+ :class="
38
+ themedClass(
39
+ 'filtersColumnClass',
40
+ 'col-span-12 md:col-span-6 lg:col-span-3',
41
+ )
42
+ "
20
43
  >
21
44
  <Popover
22
45
  @update:open="(open: boolean) => (openPopovers[field.field] = open)"
46
+ :class="popover({ colorScheme })"
23
47
  >
24
- <PopoverTrigger :class="popover({ colorScheme })">
25
- <span class="truncate text-h8">{{ fieldTriggerLabel(field) }}</span>
48
+ <PopoverTrigger :class="popoverTrigger({ colorScheme })">
49
+ <span
50
+ :class="
51
+ themedClass('popoverTriggerLabelClass', 'text-h8 truncate')
52
+ "
53
+ >
54
+ {{ fieldTriggerLabel(field) }}
55
+ </span>
26
56
  <SpriteSymbol
27
57
  name="chevron-down"
28
58
  aria-hidden="true"
29
59
  :class="[
30
- 'size-6 text-primary-500 transition-all duration-300',
60
+ popoverTriggerIcon({ colorScheme }),
31
61
  openPopovers[field.field] ? 'rotate-180' : 'rotate-0',
32
62
  ]"
33
63
  />
@@ -36,81 +66,123 @@
36
66
  :class="popoverContent({ colorScheme })"
37
67
  align="start"
38
68
  >
39
- <div class="max-h-72 overflow-y-auto pt-1">
69
+ <!-- Filter options container -->
70
+ <div
71
+ :class="
72
+ themedClass(
73
+ 'filterOptionsContainerClass',
74
+ 'overflow-y-auto pt-1',
75
+ )
76
+ "
77
+ >
78
+ <!-- Filter options -->
40
79
  <template v-for="opt in opts" :key="opt.value">
41
80
  <button
42
81
  type="button"
43
- class="flex w-full items-center gap-4 px-4 py-3 text-left focus:outline-none"
44
82
  @click="toggle(field.field, opt.value)"
83
+ :class="filterOptionButton({ colorScheme })"
45
84
  >
46
85
  <Checkbox
47
86
  :checked="selections[field.field]?.includes(opt.value)"
48
87
  @update:checked="toggle(field.field, opt.value)"
49
88
  :class="checkbox({ colorScheme })"
89
+ tabindex="-1"
50
90
  />
51
- <span class="flex-1 truncate text-h9 font-normal">{{
52
- opt.label
53
- }}</span>
54
- <span class="mt-0.5 text-sm tabular-nums">{{
55
- opt.count
56
- }}</span>
91
+
92
+ <span :class="filterOptionLabel({ colorScheme })">
93
+ {{ opt.label }}
94
+ </span>
95
+
96
+ <span :class="filterOptionCount({ colorScheme })">
97
+ {{ opt.count }}
98
+ </span>
57
99
  </button>
58
100
  </template>
59
101
  </div>
60
- <div class="flex items-center gap-2 px-4 pb-4 pt-3">
61
- <DesignSystemAtomsButton
102
+
103
+ <!-- Reset filter button -->
104
+ <div
105
+ :class="
106
+ themedClass(
107
+ 'resetFilterContainerClass',
108
+ 'flex items-center gap-2 px-4 pb-4 pt-3',
109
+ )
110
+ "
111
+ >
112
+ <button
62
113
  :disabled="
63
114
  !(selections[field.field] && selections[field.field].length)
64
115
  "
65
- :label="$texts('listing.clear_filter', 'Clear')"
66
116
  @click="clearField(field.field)"
67
- :color-scheme="colorScheme"
68
- :button-class="resetFilterButton({ colorScheme })"
69
- />
117
+ :class="resetFilterButton({ colorScheme })"
118
+ >
119
+ <span>{{ $texts('listing.clear_filter', 'Clear') }}</span>
120
+ </button>
70
121
  </div>
71
122
  </PopoverContent>
72
123
  </Popover>
73
124
  </div>
74
125
 
75
- <div class="col-span-12 flex items-center md:col-span-6 lg:col-span-3">
76
- <DesignSystemAtomsButton
126
+ <!-- Reset filters column -->
127
+ <div
128
+ :class="
129
+ themedClass(
130
+ 'resetFiltersColumnClass',
131
+ 'col-span-12 flex items-center md:col-span-6 lg:col-span-3',
132
+ )
133
+ "
134
+ >
135
+ <!-- Reset filters button -->
136
+ <button
77
137
  v-if="selections && Object.keys(selections || {}).length"
78
- :label="$texts('listing.clear_filters', 'Clear all filters')"
79
138
  @click="clearAll"
80
- :color-scheme="colorScheme"
81
- button-class="px-6 py-4 rounded-lg transition-all bg-white border-gray-200 border-1 shadow-custom-small focus:outline-none focus:ring-2 focus:ring-primary-500 placeholder-gray-300 [&>span]:font-normal text-black hover:text-white hover:bg-black"
82
- />
139
+ :class="resetFiltersButton({ colorScheme })"
140
+ >
141
+ <span>
142
+ {{ $texts('listing.clear_filters', 'Clear all filters') }}
143
+ </span>
144
+ </button>
83
145
  </div>
84
146
  </DesignSystemAtomsGridRow>
85
147
 
86
- <!-- Results Counter -->
87
- <div v-if="totalCount !== undefined" class="mb-4">
88
- <div :class="noResultsText({ colorScheme })">
89
- <span v-if="loading">Loading...</span>
90
- <span v-else>
91
- {{ totalCount }}
92
- {{
93
- totalCount === 1
94
- ? $texts('listing.result', 'result')
95
- : $texts('listing.results', 'results')
96
- }}
97
- <span
98
- v-if="displayedCount && displayedCount < totalCount"
99
- class="text-sm font-normal text-gray-600"
100
- >
101
- ({{ $texts('listing.showing', 'result') }} {{ displayedCount }})
102
- </span>
148
+ <!-- Results Counter row -->
149
+ <div v-if="totalCount !== undefined" :class="resultsCount({ colorScheme })">
150
+ <span v-if="loading" :class="themedClass('resultsCountLoadingClass')">
151
+ {{ $texts('listing.loading', 'Loading...') }}
152
+ </span>
153
+ <span v-else :class="themedClass('resultsTotalCountClass')">
154
+ {{ totalCount }}
155
+ {{
156
+ totalCount === 1
157
+ ? $texts('listing.result', 'result')
158
+ : $texts('listing.results', 'results')
159
+ }}
160
+ <span
161
+ v-if="displayedCount && displayedCount < totalCount"
162
+ :class="
163
+ themedClass(
164
+ 'resultsDisplayedCountClass',
165
+ 'text-sm font-normal text-gray-600',
166
+ )
167
+ "
168
+ >
169
+ ({{ $texts('listing.showing', 'result') }} {{ displayedCount }})
103
170
  </span>
104
- </div>
171
+ </span>
105
172
  </div>
106
173
  </div>
107
174
  </template>
175
+
108
176
  <script setup lang="ts">
177
+ import type { ColorScheme } from '@iqual/nuxt-icms/types/global'
109
178
  import Popover from '@iqual/nuxt-icms/components/ui/popover/Popover.vue'
110
179
  import PopoverContent from '@iqual/nuxt-icms/components/ui/popover/PopoverContent.vue'
111
180
  import PopoverTrigger from '@iqual/nuxt-icms/components/ui/popover/PopoverTrigger.vue'
181
+ import { useTheme } from '@iqual/nuxt-icms/composables/useTheme'
112
182
  import { tv } from 'tailwind-variants'
113
183
 
184
+ const themedClass = useTheme()
185
+
114
186
  // Incoming facet shape from GraphQL API.
115
187
  export interface GraphQLFacetItem {
116
188
  field: string
@@ -143,7 +215,7 @@ const props = defineProps<{
143
215
  displayedCount?: number
144
216
  /** Loading state */
145
217
  loading?: boolean
146
- colorScheme?: 'none' | 'dark' | 'light' | 'accent'
218
+ colorScheme?: ColorScheme
147
219
 
148
220
  /** Enable fulltext search */
149
221
  enableTextSearch?: boolean
@@ -302,63 +374,265 @@ watch(
302
374
  )
303
375
 
304
376
  const popover = tv({
305
- base: 'w-full flex items-center justify-between gap-4 cursor-pointer px-6 py-4 rounded-lg transition-all bg-white border-1 shadow-custom-small focus:outline-none focus:ring-2 focus:ring-primary-500 placeholder-gray-300',
377
+ base: themedClass('popoverBase'),
306
378
  variants: {
307
379
  colorScheme: {
308
- none: 'bg-white text-black',
309
- dark: 'bg-white text-black',
310
- light: 'bg-white text-black',
311
- accent: 'bg-white text-black',
380
+ none: themedClass('popoverVariantsColorSchemeNone'),
381
+ dark: themedClass('popoverVariantsColorSchemeDark'),
382
+ light: themedClass('popoverVariantsColorSchemeLight'),
383
+ accent: themedClass('popoverVariantsColorSchemeAccent'),
384
+ },
385
+ },
386
+ })
387
+
388
+ const popoverTrigger = tv({
389
+ base: themedClass(
390
+ 'popoverTriggerBase',
391
+ 'w-full flex items-center justify-between gap-4 cursor-pointer py-3 px-6 transition-all border-1 focus-visible:outline-none focus-visible:shadow-none focus-visible:ring-2',
392
+ ),
393
+ variants: {
394
+ colorScheme: {
395
+ none: themedClass(
396
+ 'popoverTriggerVariantsColorSchemeNone',
397
+ 'bg-white text-black border-gray-200 focus-visible:ring-primary',
398
+ ),
399
+ dark: themedClass(
400
+ 'popoverTriggerVariantsColorSchemeDark',
401
+ 'bg-gray-900 text-white border-gray-800 focus-visible:ring-primary',
402
+ ),
403
+ light: themedClass(
404
+ 'popoverTriggerVariantsColorSchemeLight',
405
+ 'bg-gray-50 text-black border-gray-200 focus-visible:ring-primary',
406
+ ),
407
+ accent: themedClass(
408
+ 'popoverTriggerVariantsColorSchemeAccent',
409
+ 'bg-primary text-white border-primary focus-visible:ring-white',
410
+ ),
411
+ },
412
+ },
413
+ })
414
+
415
+ const popoverTriggerIcon = tv({
416
+ base: themedClass(
417
+ 'popoverTriggerIconBase',
418
+ 'size-6 transition-all duration-300',
419
+ ),
420
+ variants: {
421
+ colorScheme: {
422
+ none: themedClass(
423
+ 'popoverTriggerIconVariantsColorSchemeNone',
424
+ 'text-primary',
425
+ ),
426
+ dark: themedClass(
427
+ 'popoverTriggerIconVariantsColorSchemeDark',
428
+ 'text-primary',
429
+ ),
430
+ light: themedClass(
431
+ 'popoverTriggerIconVariantsColorSchemeLight',
432
+ 'text-primary',
433
+ ),
434
+ accent: themedClass(
435
+ 'popoverTriggerIconVariantsColorSchemeAccent',
436
+ 'text-white',
437
+ ),
312
438
  },
313
439
  },
314
440
  })
315
441
 
316
442
  const popoverContent = tv({
317
- base: 'w-[380px] md:w-[340px] lg:w-[214px] xl:w-[278px] 2xl:w-96 p-0 border-1 shadow-custom-small',
443
+ base: themedClass(
444
+ 'popoverContentBase',
445
+ 'w-[var(--radix-popper-anchor-width)] p-0 border-1 rounded-none shadow-none',
446
+ ),
318
447
  variants: {
319
448
  colorScheme: {
320
- none: 'bg-white',
321
- dark: 'bg-white',
322
- light: 'bg-white',
323
- accent: 'bg-white',
449
+ none: themedClass(
450
+ 'popoverContentVariantsColorSchemeNone',
451
+ 'bg-white border-gray-200',
452
+ ),
453
+ dark: themedClass(
454
+ 'popoverContentVariantsColorSchemeDark',
455
+ 'bg-gray-900 border-gray-800',
456
+ ),
457
+ light: themedClass(
458
+ 'popoverContentVariantsColorSchemeLight',
459
+ 'bg-gray-50 border-gray-200',
460
+ ),
461
+ accent: themedClass(
462
+ 'popoverContentVariantsColorSchemeAccent',
463
+ 'bg-primary border-primary',
464
+ ),
324
465
  },
325
466
  },
326
467
  })
327
468
 
328
- const noResultsText = tv({
329
- base: 'text-lg font-medium',
469
+ const resultsCount = tv({
470
+ base: themedClass('resultsTextBase', 'mb-4 text-lg font-medium'),
330
471
  variants: {
331
472
  colorScheme: {
332
- none: 'text-black',
333
- dark: 'text-white',
334
- light: 'text-black',
335
- accent: 'text-white',
473
+ none: themedClass('resultsTextVariantsColorSchemeNone', 'text-black'),
474
+ dark: themedClass('resultsTextVariantsColorSchemeDark', 'text-white'),
475
+ light: themedClass('resultsTextVariantsColorSchemeLight', 'text-black'),
476
+ accent: themedClass('resultsTextVariantsColorSchemeAccent', 'text-white'),
336
477
  },
337
478
  },
338
479
  })
339
480
 
340
481
  const resetFilterButton = tv({
341
- base: '[&>span]:text-sm w-fit px-4 py-1 border-0 rounded-lg transition-all bg-white border-1 border-black shadow-custom-small focus:outline-none focus:ring-2 focus:ring-primary-500 placeholder-gray-300',
482
+ base: themedClass(
483
+ 'resetFilterButtonBase',
484
+ '[&>span]:text-sm w-fit px-4 py-1 border-0 transition-all bg-white border-1 border-black focus:outline-none focus:ring-2 disabled:opacity-40',
485
+ ),
486
+ variants: {
487
+ colorScheme: {
488
+ none: themedClass(
489
+ 'resetFilterButtonVariantsColorSchemeNone',
490
+ 'bg-primary border-primary focus:ring-black text-white enabled:hover:text-primary enabled:hover:bg-white enabled:hover:border-primary',
491
+ ),
492
+ dark: themedClass(
493
+ 'resetFilterButtonVariantsColorSchemeDark',
494
+ 'bg-primary border-primary focus:ring-primary text-black enabled:hover:text-primary enabled:hover:bg-gray-900 enabled:hover:border-primary',
495
+ ),
496
+ light: themedClass(
497
+ 'resetFilterButtonVariantsColorSchemeLight',
498
+ 'bg-primary border-primary focus:ring-black text-white enabled:hover:text-primary enabled:hover:bg-gray-50 enabled:hover:border-primary',
499
+ ),
500
+ accent: themedClass(
501
+ 'resetFilterButtonVariantsColorSchemeAccent',
502
+ 'bg-gray-950 border-gray-950 focus:ring-white text-white enabled:hover:text-black enabled:hover:bg-white enabled:hover:border-white',
503
+ ),
504
+ },
505
+ },
506
+ })
507
+
508
+ const resetFiltersButton = tv({
509
+ base: themedClass(
510
+ 'resetFiltersButtonBase',
511
+ 'py-3 px-10 transition-all border-1 focus:outline-none focus:ring-2',
512
+ ),
342
513
  variants: {
343
514
  colorScheme: {
344
- none: 'bg-gray-50 text-black hover:bg-black hover:text-white',
345
- dark: 'bg-gray-50 text-black hover:bg-black hover:text-white',
346
- light: 'bg-gray-50 text-black hover:bg-black hover:text-white',
347
- accent: 'bg-gray-50 text-black hover:bg-black hover:text-white',
515
+ none: themedClass(
516
+ 'resetFiltersButtonVariantsColorSchemeBase',
517
+ 'bg-primary border-primary focus:ring-black text-white hover:text-primary hover:bg-white hover:border-primary',
518
+ ),
519
+ dark: themedClass(
520
+ 'resetFiltersButtonVariantsColorSchemeDark',
521
+ 'bg-primary border-primary focus:ring-primary text-black hover:text-primary hover:bg-gray-950 hover:border-primary',
522
+ ),
523
+ light: themedClass(
524
+ 'resetFiltersButtonVariantsColorSchemeNone',
525
+ 'bg-primary border-primary focus:ring-black text-white hover:text-primary hover:bg-gray-50 hover:border-primary',
526
+ ),
527
+ accent: themedClass(
528
+ 'resetFiltersButtonVariantsColorSchemeAccent',
529
+ 'bg-gray-950 border-gray-950 focus:ring-white text-white hover:text-black hover:bg-white hover:border-white',
530
+ ),
348
531
  },
349
532
  },
350
533
  })
351
534
 
352
535
  const checkbox = tv({
353
- base: 'pointer-events-none w-[18px] h-[18px] mt-0.5 transition-all duration-200',
536
+ base: themedClass(
537
+ 'checkboxBase',
538
+ 'pointer-events-none w-[18px] h-[18px] mt-0.5 transition-all duration-200',
539
+ ),
540
+ variants: {
541
+ colorScheme: {
542
+ none: themedClass(
543
+ 'checkboxVariantsColorSchemeNone',
544
+ 'text-black border-gray-200 dark:border-gray-200 bg-white dark:bg-white data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
545
+ ),
546
+ dark: themedClass(
547
+ 'checkboxVariantsColorSchemeDark',
548
+ 'text-white border-gray-800 dark:border-gray-800 bg-gray-800 dark:bg-gray-800 data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
549
+ ),
550
+ light: themedClass(
551
+ 'checkboxVariantsColorSchemeLight',
552
+ 'text-black border-gray-200 dark:border-gray-200 bg-gray-50 dark:bg-gray-50 data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
553
+ ),
554
+ accent: themedClass(
555
+ 'checkboxVariantsColorSchemeAccent',
556
+ 'text-white border-primary-600 dark:border-primary-600 bg-primary-600 dark:bg-primary-600 data-[state=checked]:bg-primary-600 dark:data-[state=checked]:bg-primary-600 text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary-600 dark:data-[state=checked]:border-primary-600',
557
+ ),
558
+ },
559
+ },
560
+ })
561
+
562
+ const filterOptionButton = tv({
563
+ base: themedClass(
564
+ 'filterOptionButtonBase',
565
+ 'flex w-full items-center gap-4 px-4 py-3 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-offset-4',
566
+ ),
567
+ variants: {
568
+ colorScheme: {
569
+ none: themedClass(
570
+ 'filterOptionButtonVariantsColorSchemeNone',
571
+ 'focus-visible:ring-offset-white focus-visible:ring-primary',
572
+ ),
573
+ dark: themedClass(
574
+ 'filterOptionButtonVariantsColorSchemeDark',
575
+ 'focus-visible:ring-offset-gray-900 focus-visible:ring-primary',
576
+ ),
577
+ light: themedClass(
578
+ 'filterOptionButtonVariantsColorSchemeLight',
579
+ 'focus-visible:ring-offset-gray-50 focus-visible:ring-primary',
580
+ ),
581
+ accent: themedClass(
582
+ 'filterOptionButtonVariantsColorSchemeAccent',
583
+ 'focus-visible:ring-offset-primary focus-visible:ring-white',
584
+ ),
585
+ },
586
+ },
587
+ })
588
+
589
+ const filterOptionLabel = tv({
590
+ base: themedClass(
591
+ 'filterOptionLabelBase',
592
+ 'text-h9 flex-1 truncate font-normal',
593
+ ),
594
+ variants: {
595
+ colorScheme: {
596
+ none: themedClass(
597
+ 'filterOptionLabelVariantsColorSchemeNone',
598
+ 'text-black',
599
+ ),
600
+ dark: themedClass(
601
+ 'filterOptionLabelVariantsColorSchemeDark',
602
+ 'text-white',
603
+ ),
604
+ light: themedClass(
605
+ 'filterOptionLabelVariantsColorSchemeLight',
606
+ 'text-black',
607
+ ),
608
+ accent: themedClass(
609
+ 'filterOptionLabelVariantsColorSchemeAccent',
610
+ 'text-white',
611
+ ),
612
+ },
613
+ },
614
+ })
615
+
616
+ const filterOptionCount = tv({
617
+ base: themedClass('filterOptionCountBase', 'mt-0.5 text-sm tabular-nums'),
354
618
  variants: {
355
619
  colorScheme: {
356
- none: 'border-gray-200 dark:border-gray-200 bg-gray-50 dark:bg-gray-50 data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
357
- dark: 'border-gray-200 dark:border-gray-200 bg-white dark:bg-white data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
358
- light:
359
- 'border-gray-300 dark:border-gray-300 bg-gray-100 dark:bg-gray-100 data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
360
- accent:
361
- 'border-gray-200 dark:border-gray-200 bg-white dark:bg-white data-[state=checked]:bg-primary dark:data-[state=checked]:bg-primary text-white dark:text-white data-[state=checked]:text-white dark:data-[state=checked]:text-white data-[state=checked]:border-primary dark:data-[state=checked]:border-primary',
620
+ none: themedClass(
621
+ 'filterOptionCountVariantsColorSchemeNone',
622
+ 'text-black',
623
+ ),
624
+ dark: themedClass(
625
+ 'filterOptionCountVariantsColorSchemeDark',
626
+ 'text-white',
627
+ ),
628
+ light: themedClass(
629
+ 'filterOptionCountVariantsColorSchemeLight',
630
+ 'text-black',
631
+ ),
632
+ accent: themedClass(
633
+ 'filterOptionCountVariantsColorSchemeAccent',
634
+ 'text-white',
635
+ ),
362
636
  },
363
637
  },
364
638
  })