@iqual/nuxt-icms 1.2.3 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/app.vue +3 -3
  2. package/components/DesignSystem/Atoms/LinkListItem.vue +1 -1
  3. package/components/Form/CheckboxInput.vue +3 -3
  4. package/components/Form/CheckboxInputs.vue +3 -3
  5. package/components/Form/FileUploadInput.vue +3 -3
  6. package/components/Form/RadioButtonsInput.vue +3 -3
  7. package/components/Form/SelectInput.vue +4 -4
  8. package/components/Form/SubmitButton.vue +1 -1
  9. package/components/Form/TextAreaInput.vue +2 -2
  10. package/components/Form/TextEmailInput.vue +2 -2
  11. package/components/Form/TextInput.vue +2 -2
  12. package/components/Form/TextPhoneInput.vue +2 -2
  13. package/components/Form/WebformMarkup.vue +1 -1
  14. package/components/Form/composables/useFormElement.ts +1 -1
  15. package/components/Media/Image/fragment.graphql +6 -0
  16. package/components/Node/Icms/Page/SearchResult/fragment.graphql +4 -2
  17. package/components/Node/Icms/Page/SearchResult/index.vue +2 -2
  18. package/components/Node/Icms/Page/fragment.graphql +0 -18
  19. package/components/Paragraph/Downloads/fragment.graphql +3 -2
  20. package/components/Paragraph/Downloads/index.vue +2 -4
  21. package/components/Paragraph/Tabs/Element/index.vue +1 -17
  22. package/components/Paragraph/Tabs/Layout/index.vue +4 -13
  23. package/components/Search/Facets/FacetDropdownUI.vue +235 -92
  24. package/components/Search/Facets/FacetedSearchUI.vue +385 -69
  25. package/components/Search/Facets/fragment.graphql +22 -3
  26. package/components/Search/Input/index.vue +67 -0
  27. package/components/Section/Footer/index.vue +2 -2
  28. package/components/Section/Header/GlobalMenu.vue +22 -24
  29. package/components/Section/Header/LanguageDropdown.vue +6 -8
  30. package/components/Section/Header/MetaMenu.vue +11 -6
  31. package/components/Section/Header/index.vue +20 -21
  32. package/composables/useImageSources.ts +2 -1
  33. package/composables/useIsMobile.ts +2 -6
  34. package/error.vue +3 -4
  35. package/layouts/default.vue +2 -2
  36. package/layouts/error.vue +2 -2
  37. package/package.json +1 -1
@@ -1,11 +1,13 @@
1
1
  query layoutOverviewFacetsSearch(
2
2
  $facets: [String!],
3
3
  $filter: SearchApiQueryFilterInput,
4
+ $keys: String
4
5
  ) {
5
6
  searchApiQuery(
6
7
  indexId: "content_search",
7
- facets: $facets
8
- filter: $filter
8
+ facets: $facets,
9
+ filter: $filter,
10
+ keys: $keys
9
11
  ) {
10
12
  count
11
13
  facets {
@@ -23,18 +25,35 @@ query layoutOverviewFacetsSearch(
23
25
  query layoutOverviewResultsSearch(
24
26
  $filter: SearchApiQueryFilterInput,
25
27
  $limit: Int,
26
- $offset: Int
28
+ $offset: Int,
29
+ $keys: String
30
+ $facets: [String!],
27
31
  ) {
28
32
  searchApiQuery(
29
33
  indexId: "content_search",
30
34
  filter: $filter
35
+ facets: $facets,
31
36
  limit: $limit
32
37
  offset: $offset
38
+ keys: $keys
33
39
  ) {
34
40
  count
35
41
  results {
36
42
  bundle: __typename
37
43
  ...entityTeaser
38
44
  }
45
+ facets {
46
+ field
47
+ label
48
+ filter {
49
+ id
50
+ label
51
+ }
52
+ count
53
+ results {
54
+ bundle: __typename
55
+ ...entityTeaser
56
+ }
57
+ }
39
58
  }
40
59
  }
@@ -0,0 +1,67 @@
1
+ <template>
2
+ <label for="searchterm" class="sr-only">
3
+ {{ $texts('search.search_field_label', 'Suchbegriff') }}
4
+ </label>
5
+ <div v-click-away="clickAway" class="relative flex" role="search">
6
+ <SpriteSymbol
7
+ name="magnifyingglass"
8
+ class="absolute left-4 top-1/2 size-5 -translate-y-1/2 text-primary"
9
+ />
10
+ <input
11
+ id="searchInput"
12
+ ref="input"
13
+ v-model="searchTermInternal"
14
+ type="search"
15
+ autocomplete="off"
16
+ name="searchterm"
17
+ :class="inputClass"
18
+ spellcheck="false"
19
+ role="searchbox"
20
+ aria-owns="searchterm-suggestions"
21
+ aria-label="Search input"
22
+ :placeholder="
23
+ $texts('search.search_field_placeholder', 'Suchbegriff eingeben')
24
+ "
25
+ @focus="isFocused = true"
26
+ @search="updateSearchTerm"
27
+ />
28
+ </div>
29
+ </template>
30
+
31
+ <script lang="ts" setup>
32
+ const props = withDefaults(
33
+ defineProps<{
34
+ modelValue?: string | null
35
+ inputClass?: string
36
+ }>(),
37
+ {
38
+ inputClass: 'rounded-lg bg-gray-50 py-3 pr-3 pl-12',
39
+ },
40
+ )
41
+
42
+ const searchTermInternal = ref('')
43
+ const isFocused = ref(false)
44
+ const input = ref<HTMLInputElement | null>(null)
45
+ const { $texts } = useNuxtApp()
46
+
47
+ const emit = defineEmits(['update:modelValue'])
48
+
49
+ watch(
50
+ () => props.modelValue,
51
+ function (newValue) {
52
+ searchTermInternal.value = newValue || ''
53
+ },
54
+ )
55
+
56
+ function updateSearchTerm() {
57
+ emit('update:modelValue', searchTermInternal.value)
58
+ }
59
+
60
+ function clickAway() {
61
+ isFocused.value = false
62
+ }
63
+
64
+ onMounted(() => {
65
+ searchTermInternal.value = props.modelValue || ''
66
+ })
67
+ </script>
@@ -89,7 +89,7 @@
89
89
  </NuxtLink>
90
90
  </template>
91
91
  </div>
92
- <div class="flex items-center">
92
+ <div v-if="footerMetaMenuLinks" class="flex items-center">
93
93
  <ul class="flex flex-col gap-4 md:flex-row md:gap-6">
94
94
  <li v-for="(link, index) in footerMetaMenuLinks" :key="index">
95
95
  <NuxtLink
@@ -112,7 +112,7 @@
112
112
  import type { NuxtSvgSpriteSymbol } from '#nuxt-svg-icon-sprite/runtime'
113
113
 
114
114
  const { menuItems: footerMenuLinks } = await useMenu('footerMenu')
115
- const { menuItems: footerMetaMenuLinks } = await useMenu('footerMenu')
115
+ const { menuItems: footerMetaMenuLinks } = await useMenu('footerMetaMenu')
116
116
  const {
117
117
  companyLogo,
118
118
  companyName,
@@ -1,25 +1,25 @@
1
1
  <template>
2
2
  <nav
3
3
  ref="globalMenu"
4
- class="z-30 mb-8 border-b-1 border-b-gray-100 py-8 lg:mb-0 lg:h-full lg:border-0 lg:py-0 lg:pl-12"
4
+ class="border-b-1 z-30 mb-8 border-b-gray-100 py-8 2xl:mb-0 2xl:h-full 2xl:border-0 2xl:py-0 2xl:pl-12"
5
5
  v-on="!isMobile ? { mouseleave: onNavbarMouseLeave } : {}"
6
6
  >
7
7
  <ul
8
8
  role="menu"
9
- class="flex flex-col flex-wrap justify-end text-base lg:h-full lg:flex-row lg:items-center lg:gap-8 lg:border-0 lg:font-medium"
9
+ class="flex flex-col flex-wrap justify-end text-base 2xl:h-full 2xl:flex-row 2xl:items-center 2xl:gap-8 2xl:border-0 2xl:font-medium"
10
10
  >
11
11
  <li
12
12
  v-for="(link, mainIndex) in menuItems"
13
13
  :key="`global_${mainIndex}`"
14
14
  role="menuitem"
15
- class="group/main relative flex flex-col items-stretch lg:h-full lg:flex-row"
15
+ class="group/main relative flex flex-col items-stretch 2xl:h-full 2xl:flex-row"
16
16
  >
17
17
  <VuepalLink
18
18
  :to="link?.href"
19
19
  :aria-controls="'firstLevel-' + mainIndex"
20
20
  :aria-expanded="hoverMain === mainIndex"
21
21
  :aria-haspopup="!!link.children?.length"
22
- class="flex w-full items-center justify-between whitespace-nowrap group-hover/main:text-primary-500 motion-safe:transition-colors motion-safe:duration-200 lg:size-auto lg:py-0"
22
+ class="group-hover/main:text-primary-500 flex w-full items-center justify-between whitespace-nowrap motion-safe:transition-colors motion-safe:duration-200 2xl:size-auto 2xl:py-0"
23
23
  :class="
24
24
  link?.href === menuItemActive?.href
25
25
  ? 'text-primary-500'
@@ -31,7 +31,7 @@
31
31
  >
32
32
  {{ link.label }}
33
33
  <div
34
- class="grid size-10 place-content-center lg:size-auto"
34
+ class="grid size-10 place-content-center 2xl:size-auto"
35
35
  @click.prevent.stop="
36
36
  isMobile && onMenuInteraction('main', mainIndex)
37
37
  "
@@ -45,10 +45,10 @@
45
45
  : undefined
46
46
  "
47
47
  :aria-hidden="!isMobile"
48
- class="size-5 cursor-pointer text-black transition-transform duration-300 lg:ml-2"
48
+ class="size-5 cursor-pointer text-black transition-transform duration-300 2xl:ml-2"
49
49
  :class="{
50
50
  'rotate-180': isMobile ? hoverMain === mainIndex : false,
51
- 'lg:rotate-180': !isMobile && hoverMain === mainIndex,
51
+ '2xl:rotate-180': !isMobile && hoverMain === mainIndex,
52
52
  }"
53
53
  />
54
54
  </div>
@@ -59,9 +59,9 @@
59
59
  <div
60
60
  v-show="link.children?.length && hoverMain === mainIndex"
61
61
  :id="'firstLevel-' + mainIndex"
62
- class="w-max min-w-full lg:absolute lg:left-0 lg:top-full lg:border lg:border-gray-100 lg:bg-white lg:text-sm"
62
+ class="w-max min-w-full 2xl:absolute 2xl:left-0 2xl:top-full 2xl:border 2xl:border-gray-100 2xl:bg-white 2xl:text-sm"
63
63
  >
64
- <ul role="menu" class="ml-4 lg:ml-0">
64
+ <ul role="menu" class="ml-4 2xl:ml-0">
65
65
  <li
66
66
  v-for="(firstLevelLink, firstLevelIndex) in link.children"
67
67
  :key="`firstLevel_${firstLevelIndex}`"
@@ -74,10 +74,9 @@
74
74
  :aria-controls="'secondLevel-' + firstLevelIndex"
75
75
  :aria-expanded="hoverFirst === firstLevelIndex"
76
76
  :aria-haspopup="!!firstLevelLink?.children?.length"
77
- class="flex w-full items-center justify-between whitespace-nowrap no-underline group-hover/first:text-primary-500 motion-safe:transition-colors motion-safe:duration-200 lg:px-4 lg:py-3"
77
+ class="group-hover/first:text-primary-500 flex w-full items-center justify-between whitespace-nowrap no-underline motion-safe:transition-colors motion-safe:duration-200 2xl:px-4 2xl:py-3"
78
78
  :class="
79
- firstLevelLink?.href ===
80
- menuItemActiveLevel1?.href
79
+ firstLevelLink?.href === menuItemActiveLevel1?.href
81
80
  ? 'text-primary-500'
82
81
  : 'text-black'
83
82
  "
@@ -89,7 +88,7 @@
89
88
  >
90
89
  {{ firstLevelLink.label }}
91
90
  <div
92
- class="grid size-10 place-content-center lg:size-auto"
91
+ class="grid size-10 place-content-center 2xl:size-auto"
93
92
  @click.prevent.stop="
94
93
  isMobile && onMenuInteraction('first', firstLevelIndex)
95
94
  "
@@ -103,7 +102,7 @@
103
102
  : undefined
104
103
  "
105
104
  :aria-hidden="!isMobile"
106
- class="size-5 cursor-pointer text-black transition-transform duration-300 lg:ml-2 lg:size-4 lg:-rotate-90"
105
+ class="size-5 cursor-pointer text-black transition-transform duration-300 2xl:ml-2 2xl:size-4 2xl:-rotate-90"
107
106
  :class="{
108
107
  'rotate-180': isMobile
109
108
  ? hoverFirst === firstLevelIndex
@@ -121,9 +120,9 @@
121
120
  hoverFirst === firstLevelIndex
122
121
  "
123
122
  :id="'secondLevel-' + firstLevelIndex"
124
- class="min-w-full lg:absolute lg:-top-px lg:left-full lg:border lg:border-gray-100 lg:bg-white lg:text-sm"
123
+ class="min-w-full 2xl:absolute 2xl:-top-px 2xl:left-full 2xl:border 2xl:border-gray-100 2xl:bg-white 2xl:text-sm"
125
124
  >
126
- <ul role="menu" class="ml-4 lg:ml-0">
125
+ <ul role="menu" class="ml-4 2xl:ml-0">
127
126
  <li
128
127
  v-for="(
129
128
  secondLevelLink, secondLevelIndex
@@ -137,10 +136,9 @@
137
136
  :aria-controls="'thirdLevel-' + secondLevelIndex"
138
137
  :aria-expanded="hoverSecond === secondLevelIndex"
139
138
  :aria-haspopup="!!secondLevelLink?.children?.length"
140
- class="flex w-full items-center justify-between whitespace-nowrap no-underline group-hover/second:text-primary-500 motion-safe:transition-colors motion-safe:duration-200 lg:px-4 lg:py-3"
139
+ class="group-hover/second:text-primary-500 flex w-full items-center justify-between whitespace-nowrap no-underline motion-safe:transition-colors motion-safe:duration-200 2xl:px-4 2xl:py-3"
141
140
  :class="
142
- secondLevelLink?.href ===
143
- menuItemActiveLevel2?.href
141
+ secondLevelLink?.href === menuItemActiveLevel2?.href
144
142
  ? 'text-primary-500'
145
143
  : 'text-black'
146
144
  "
@@ -153,7 +151,7 @@
153
151
  >
154
152
  {{ secondLevelLink.label }}
155
153
  <div
156
- class="grid size-10 place-content-center lg:size-auto"
154
+ class="grid size-10 place-content-center 2xl:size-auto"
157
155
  @click.prevent.stop="
158
156
  isMobile &&
159
157
  onMenuInteraction('first', firstLevelIndex)
@@ -171,7 +169,7 @@
171
169
  : undefined
172
170
  "
173
171
  :aria-hidden="!isMobile"
174
- class="size-5 cursor-pointer text-black transition-transform duration-300 lg:ml-2 lg:size-4 lg:-rotate-90"
172
+ class="size-5 cursor-pointer text-black transition-transform duration-300 2xl:ml-2 2xl:size-4 2xl:-rotate-90"
175
173
  :class="{
176
174
  'rotate-180': isMobile
177
175
  ? hoverSecond === secondLevelIndex
@@ -189,9 +187,9 @@
189
187
  hoverSecond === secondLevelIndex
190
188
  "
191
189
  :id="'thirdLevel-' + secondLevelIndex"
192
- class="min-w-full lg:absolute lg:-top-px lg:left-full lg:border lg:border-gray-100 lg:bg-white lg:text-sm"
190
+ class="min-w-full 2xl:absolute 2xl:-top-px 2xl:left-full 2xl:border 2xl:border-gray-100 2xl:bg-white 2xl:text-sm"
193
191
  >
194
- <ul role="menu" class="ml-4 lg:ml-0">
192
+ <ul role="menu" class="ml-4 2xl:ml-0">
195
193
  <li
196
194
  v-for="(
197
195
  thirdLevelLink, thirdLevelIndex
@@ -202,7 +200,7 @@
202
200
  >
203
201
  <VuepalLink
204
202
  :to="thirdLevelLink.href"
205
- class="flex h-10 w-full items-center whitespace-nowrap no-underline group-hover/third:text-primary-500 motion-safe:transition-colors motion-safe:duration-200 lg:h-auto lg:px-4 lg:py-3"
203
+ class="group-hover/third:text-primary-500 flex h-10 w-full items-center whitespace-nowrap no-underline motion-safe:transition-colors motion-safe:duration-200 2xl:h-auto 2xl:px-4 2xl:py-3"
206
204
  :class="
207
205
  thirdLevelLink?.href ===
208
206
  menuTiemActiveLevel3?.href
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <ClientOnly>
3
3
  <div
4
- class="group relative z-40 mb-6 flex h-full items-center lg:mb-0 lg:p-0 lg:pl-8"
4
+ class="group relative z-40 mb-6 flex h-full items-center 2xl:mb-0 2xl:p-0 2xl:pl-8"
5
5
  @mouseenter="!isMobile && (langSwitchDropdownOpen = true)"
6
6
  @mouseleave="!isMobile && (langSwitchDropdownOpen = false)"
7
7
  @click="isMobile && (langSwitchDropdownOpen = !langSwitchDropdownOpen)"
@@ -13,7 +13,7 @@
13
13
  aria-controls="language-dropdown"
14
14
  >
15
15
  <span
16
- class="font-medium group-hover:text-primary-500 motion-safe:transition-colors motion-safe:duration-250 motion-safe:ease-in-out"
16
+ class="group-hover:text-primary-500 motion-safe:duration-250 font-medium motion-safe:transition-colors motion-safe:ease-in-out"
17
17
  :class="{
18
18
  'text-primary-500': langSwitchDropdownOpen,
19
19
  }"
@@ -22,7 +22,7 @@
22
22
  </span>
23
23
  <SpriteSymbol
24
24
  name="chevron-down"
25
- class="size-4 motion-safe:transition-all motion-safe:duration-250 motion-safe:ease-in-out"
25
+ class="motion-safe:duration-250 size-4 motion-safe:transition-all motion-safe:ease-in-out"
26
26
  :class="{
27
27
  'rotate-180': langSwitchDropdownOpen,
28
28
  }"
@@ -30,7 +30,7 @@
30
30
  </button>
31
31
  <div
32
32
  v-show="langSwitchDropdownOpen"
33
- class="absolute left-0 top-full pt-2 motion-safe:transition-all motion-safe:duration-250 motion-safe:ease-in-out lg:left-auto lg:right-0 lg:pt-4"
33
+ class="motion-safe:duration-250 absolute left-0 top-full pt-2 motion-safe:transition-all motion-safe:ease-in-out 2xl:left-auto 2xl:right-0 2xl:pt-4"
34
34
  >
35
35
  <ul
36
36
  role="menu"
@@ -43,14 +43,14 @@
43
43
  role="menuitem"
44
44
  :to="lang.to"
45
45
  :title="lang.label"
46
- class="flex items-center px-4 py-3 text-sm font-medium whitespace-nowrap hover:text-primary-500 motion-safe:transition-all motion-safe:duration-250 motion-safe:ease-in-out"
46
+ class="hover:text-primary-500 motion-safe:duration-250 flex items-center whitespace-nowrap px-4 py-3 text-sm font-medium motion-safe:transition-all motion-safe:ease-in-out"
47
47
  @click="onLangDropdownLinkClick"
48
48
  >
49
49
  {{ lang.label }}
50
50
  </NuxtLink>
51
51
  <span
52
52
  v-else
53
- class="flex items-center px-4 py-3 text-sm font-medium whitespace-nowrap text-gray-100"
53
+ class="flex items-center whitespace-nowrap px-4 py-3 text-sm font-medium text-gray-100"
54
54
  >
55
55
  {{ lang.label }}
56
56
  </span>
@@ -60,11 +60,9 @@
60
60
  <transition name="fade"> </transition>
61
61
  </div>
62
62
  </ClientOnly>
63
-
64
63
  </template>
65
64
 
66
65
  <script lang="ts" setup>
67
-
68
66
  const links = useLanguageLinks()
69
67
 
70
68
  const emit = defineEmits(['lang-dropdown:change'])
@@ -1,20 +1,22 @@
1
1
  <template>
2
- <nav class="mb-8 lg:mb-0 lg:py-0">
2
+ <nav class="mb-8 2xl:mb-0 2xl:py-0">
3
3
  <ul
4
4
  role="menu"
5
- class="flex size-full flex-col flex-wrap justify-end text-base lg:flex-row lg:items-center lg:gap-8 lg:font-medium"
5
+ class="flex size-full flex-col flex-wrap justify-end text-base 2xl:flex-row 2xl:items-center 2xl:gap-8 2xl:font-medium"
6
6
  >
7
7
  <li
8
8
  v-for="(menuItem, index) in menuItems"
9
9
  :key="`meta_${index}`"
10
10
  role="menuitem"
11
- class="group/main relative flex flex-col items-stretch lg:flex-row"
11
+ class="group/main relative flex flex-col items-stretch 2xl:flex-row"
12
12
  >
13
13
  <VuepalLink
14
14
  :to="menuItem?.href"
15
- class="flex w-full items-center justify-between py-1 group-hover/main:text-primary-500 motion-safe:transition-colors motion-safe:duration-200 lg:size-auto lg:py-0"
15
+ class="group-hover/main:text-primary-500 flex w-full items-center justify-between py-1 motion-safe:transition-colors motion-safe:duration-200 2xl:size-auto 2xl:py-0"
16
16
  :class="
17
- menuItem?.href === menuItemActive?.href ? 'text-primary-500' : 'text-black'
17
+ menuItem?.href === menuItemActive?.href
18
+ ? 'text-primary-500'
19
+ : 'text-black'
18
20
  "
19
21
  @click="onLangDropdownLinkClick"
20
22
  >
@@ -23,7 +25,10 @@
23
25
  </li>
24
26
  </ul>
25
27
  </nav>
26
- <div v-if="props.links?.length !== 0" class="mb-8 flex gap-8 lg:mb-0 lg:ml-8">
28
+ <div
29
+ v-if="props.links?.length !== 0"
30
+ class="mb-8 flex gap-8 2xl:mb-0 2xl:ml-8"
31
+ >
27
32
  <DesignSystemAtomsButton
28
33
  v-for="(link, key) in links"
29
34
  :key="key"
@@ -3,7 +3,7 @@
3
3
  ref="container"
4
4
  class="z-30 flex flex-col bg-white"
5
5
  :class="{
6
- 'max-h-[70px] !overflow-y-hidden lg:max-h-screen lg:!overflow-y-visible':
6
+ 'max-h-[70px] !overflow-y-hidden 2xl:max-h-screen 2xl:!overflow-y-visible':
7
7
  !isMenuOpen,
8
8
  'max-h-screen overflow-y-auto': isMenuOpen,
9
9
  'fixed size-full max-h-dvh': isGlobalSticky,
@@ -13,7 +13,7 @@
13
13
  >
14
14
  <!-- Meta menu full-width container -->
15
15
  <!-- Hidden on mobile -->
16
- <div class="hidden border-b-1 border-b-gray-100 lg:block">
16
+ <div class="border-b-1 hidden border-b-gray-100 2xl:block">
17
17
  <!-- Meta menu container -->
18
18
  <DesignSystemAtomsGridRow
19
19
  :class="'w-full max-w-full 2xl:max-w-screen-2xl'"
@@ -28,7 +28,7 @@
28
28
 
29
29
  <!-- Desktop Language dropdown -->
30
30
  <SectionHeaderLanguageDropdown
31
- class="hidden h-full lg:block"
31
+ class="hidden h-full 2xl:block"
32
32
  @lang-dropdown:change="closeMenu"
33
33
  />
34
34
  </div>
@@ -37,32 +37,28 @@
37
37
  </div>
38
38
 
39
39
  <!-- Main menu full-width container -->
40
- <div class="h-[70px] shrink-0 border-b-1 border-b-gray-100 lg:h-[110px]">
40
+ <div class="border-b-1 h-[70px] shrink-0 border-b-gray-100 2xl:h-[110px]">
41
41
  <!-- Main menu container -->
42
42
  <div
43
- class="flex h-full max-w-full items-center justify-between lg:justify-start"
43
+ class="flex h-full max-w-full items-center justify-between 2xl:justify-start"
44
44
  >
45
45
  <DesignSystemAtomsGridRow
46
46
  :class="'w-full max-w-full 2xl:max-w-screen-2xl'"
47
47
  >
48
48
  <div class="col-span-12 flex flex-nowrap justify-between">
49
49
  <!-- Logo -->
50
- <NuxtLink
51
- :to="`/${currentLanguage}`"
52
- :title="companyName"
53
- prefetch
54
- >
50
+ <NuxtLink :to="`/${currentLanguage}`" :title="companyName" prefetch>
55
51
  <Media
56
52
  v-if="companyLogo"
57
53
  :media="companyLogo"
58
- mediaClass="h-10 lg:h-16"
54
+ mediaClass="h-10 2xl:h-16"
59
55
  />
60
56
  </NuxtLink>
61
57
 
62
58
  <!-- Desktop Main navigation menu -->
63
59
  <!-- Hidden on mobile -->
64
60
  <SectionHeaderGlobalMenu
65
- class="ml-auto hidden lg:block"
61
+ class="ml-auto hidden 2xl:block"
66
62
  @menu:link-click="closeMenu"
67
63
  />
68
64
 
@@ -70,7 +66,7 @@
70
66
  <!-- Hidden on mobile -->
71
67
  <div
72
68
  v-if="contactButtons?.length"
73
- class="ml-8 hidden items-center justify-center gap-8 lg:flex"
69
+ class="ml-8 hidden items-center justify-center gap-8 2xl:flex"
74
70
  >
75
71
  <DesignSystemAtomsButton
76
72
  v-for="(contactButton, key) in contactButtons"
@@ -88,14 +84,14 @@
88
84
  <!-- Hamburger menu -->
89
85
  <!-- Hidden on desktop -->
90
86
  <button
91
- class="flex items-center gap-3 leading-none lg:hidden"
87
+ class="flex items-center gap-3 leading-none 2xl:hidden"
92
88
  aria-label="Hamburger Menu"
93
89
  @click="toggleNav"
94
90
  >
95
91
  <span
96
92
  class="h-auto leading-none opacity-100"
97
93
  :class="{
98
- 'opacity-0 transition-all duration-250 ease-in-out':
94
+ 'duration-250 opacity-0 transition-all ease-in-out':
99
95
  isMenuOpen,
100
96
  }"
101
97
  />
@@ -109,12 +105,15 @@
109
105
  <!-- Mobile Main/Meta menu container -->
110
106
  <!-- Hidden on desktop -->
111
107
  <!-- Initially hidden by overflow when menu closed -->
112
- <div class="container max-w-full lg:hidden">
108
+ <div class="container w-full max-w-full 2xl:hidden">
113
109
  <!-- Mobile Main navigation menu -->
114
110
  <SectionHeaderGlobalMenu @menu:link-click="closeMenu" />
115
111
 
116
112
  <!-- Mobile Language dropdown -->
117
- <SectionHeaderLanguageSwitcher @lang-dropdown:change="closeMenu" />
113
+ <SectionHeaderLanguageSwitcher
114
+ @lang-dropdown:change="closeMenu"
115
+ class="mb-6"
116
+ />
118
117
 
119
118
  <!-- Mobile Meta menu -->
120
119
  <SectionHeaderMetaMenu
@@ -123,7 +122,7 @@
123
122
  />
124
123
 
125
124
  <!-- Mobile Contact button -->
126
- <div v-if="contactButtons?.length" class="flex gap-8 lg:ml-8">
125
+ <div v-if="contactButtons?.length" class="flex gap-8 2xl:ml-8">
127
126
  <DesignSystemAtomsButton
128
127
  v-for="(contactButton, key) in contactButtons"
129
128
  :key="key"
@@ -141,8 +140,8 @@
141
140
  </template>
142
141
 
143
142
  <script lang="ts" setup>
144
-
145
- const { companyLogo, companyName, contactButtons, metaLinks } = await useGlobalConfig()
143
+ const { companyLogo, companyName, contactButtons, metaLinks } =
144
+ await useGlobalConfig()
146
145
 
147
146
  const container = ref<HTMLElement | null>(null)
148
147
  const metaRef = useTemplateRef('metaRef')
@@ -210,7 +209,7 @@ function hideMeta() {
210
209
  }
211
210
 
212
211
  watch(viewport.breakpoint, (newValue: string) => {
213
- if (newValue === 'md' || newValue === 'lg' || newValue === 'xl') {
212
+ if (newValue === '2xl') {
214
213
  isMenuOpen.value = false
215
214
  }
216
215
  })
@@ -168,7 +168,8 @@ export function useImageSources(options: UseImageSourcesOptions) {
168
168
  width: variant._cWidth ? variant._cWidth : undefined,
169
169
  height: variant._cHeight ? variant._cHeight : undefined,
170
170
  fit: 'cover',
171
- format: 'webp'
171
+ format: 'webp',
172
+ gravity: mediaRef.value?.focalPoint?.focalPoint ? `${mediaRef.value?.focalPoint?.focalPoint?.x}x${mediaRef.value?.focalPoint?.focalPoint?.y}` : 'auto'
172
173
  }),
173
174
  })
174
175
 
@@ -1,13 +1,9 @@
1
1
  export function useIsMobile() {
2
2
  const viewport = useViewport()
3
- const isMobile = ref(viewport.isLessThan('lg'))
3
+ const isMobile = ref(viewport.isLessThan('2xl'))
4
4
 
5
5
  watch(viewport.breakpoint, (newValue: string) => {
6
- isMobile.value =
7
- newValue === 'md' ||
8
- newValue === 'sm' ||
9
- newValue === 'xs' ||
10
- newValue === 'ss'
6
+ isMobile.value = newValue !== '2xl'
11
7
  })
12
8
 
13
9
  return { isMobile }
package/error.vue CHANGED
@@ -3,7 +3,7 @@
3
3
  <ClientOnly>
4
4
  <div
5
5
  v-if="drupalUser.accessToolbar && !isEditing"
6
- class="hidden border-b border-b-gray-100 bg-white lg:block"
6
+ class="hidden border-b border-b-gray-100 bg-white 2xl:block"
7
7
  >
8
8
  <VuepalAdminToolbar :key="language" />
9
9
  <div class="flex">
@@ -22,7 +22,7 @@ const route = useRoute()
22
22
  const drupalUser = useDrupalUser()
23
23
  const language = useCurrentLanguage()
24
24
 
25
- import { onMounted } from 'vue';
25
+ import { onMounted } from 'vue'
26
26
 
27
27
  const isEditing = computed(
28
28
  () =>
@@ -35,5 +35,4 @@ useHead({
35
35
  lang: language.value,
36
36
  },
37
37
  })
38
-
39
- </script>
38
+ </script>
@@ -51,14 +51,14 @@ function menuOpen() {
51
51
  }
52
52
 
53
53
  function menuCloseStart() {
54
- if (viewport.isLessThan('md')) {
54
+ if (viewport.isLessThan('2xl')) {
55
55
  isMenuOpen.value = false
56
56
  hasMenuFinishedClosing.value = false
57
57
  }
58
58
  }
59
59
 
60
60
  function menuCloseFinish() {
61
- if (viewport.isLessThan('md')) {
61
+ if (viewport.isLessThan('2xl')) {
62
62
  window.document.body.classList.remove('overflow-y-hidden')
63
63
  hasMenuFinishedClosing.value = true
64
64
  }
package/layouts/error.vue CHANGED
@@ -81,14 +81,14 @@ function menuOpen() {
81
81
  }
82
82
 
83
83
  function menuCloseStart() {
84
- if (viewport.isLessThan('md')) {
84
+ if (viewport.isLessThan('2xl')) {
85
85
  isMenuOpen.value = false
86
86
  hasMenuFinishedClosing.value = false
87
87
  }
88
88
  }
89
89
 
90
90
  function menuCloseFinish() {
91
- if (viewport.isLessThan('md')) {
91
+ if (viewport.isLessThan('2xl')) {
92
92
  window.document.body.classList.remove('overflow-y-hidden')
93
93
  hasMenuFinishedClosing.value = true
94
94
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iqual/nuxt-icms",
3
- "version": "1.2.3",
3
+ "version": "1.3.1",
4
4
  "description": "ICMS Base",
5
5
  "type": "module",
6
6
  "private": false,