srcdev-nuxt-components 2.5.17 → 3.0.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 (86) hide show
  1. package/nuxt.config.ts +3 -1
  2. package/package.json +1 -1
  3. package/assets/styles/a11y/_utils.css +0 -20
  4. package/assets/styles/a11y/_variables.css +0 -8
  5. package/assets/styles/a11y/index.css +0 -2
  6. package/assets/styles/forms/index.css +0 -2
  7. package/assets/styles/forms/themes/_error.css +0 -77
  8. package/assets/styles/forms/themes/_ghost.css +0 -77
  9. package/assets/styles/forms/themes/_input-action.css +0 -20
  10. package/assets/styles/forms/themes/_primary.css +0 -82
  11. package/assets/styles/forms/themes/_secondary.css +0 -77
  12. package/assets/styles/forms/themes/_success.css +0 -77
  13. package/assets/styles/forms/themes/_tertiary.css +0 -77
  14. package/assets/styles/forms/themes/_warning.css +0 -77
  15. package/assets/styles/forms/themes/index.css +0 -8
  16. package/assets/styles/forms/variables/_sizes.css +0 -82
  17. package/assets/styles/forms/variables/_theme.css +0 -11
  18. package/assets/styles/forms/variables/index.css +0 -2
  19. package/assets/styles/main.css +0 -5
  20. package/assets/styles/typography/index.css +0 -2
  21. package/assets/styles/typography/utils/_font-classes.css +0 -160
  22. package/assets/styles/typography/utils/_weights.css +0 -69
  23. package/assets/styles/typography/utils/index.css +0 -2
  24. package/assets/styles/typography/variables/_colors.css +0 -14
  25. package/assets/styles/typography/variables/_reponsive-font-size.css +0 -10
  26. package/assets/styles/typography/variables/index.css +0 -2
  27. package/assets/styles/utils/_animations.css +0 -42
  28. package/assets/styles/utils/_canvasWidths.css +0 -18
  29. package/assets/styles/utils/_display.css +0 -7
  30. package/assets/styles/utils/_margin-helpers.css +0 -334
  31. package/assets/styles/utils/_padding-helpers.css +0 -308
  32. package/assets/styles/utils/_page.css +0 -24
  33. package/assets/styles/utils/_placement.css +0 -73
  34. package/assets/styles/utils/index.css +0 -7
  35. package/assets/styles/variables/colors/_blue.css +0 -15
  36. package/assets/styles/variables/colors/_gray.css +0 -16
  37. package/assets/styles/variables/colors/_green.css +0 -15
  38. package/assets/styles/variables/colors/_orange.css +0 -15
  39. package/assets/styles/variables/colors/_red.css +0 -15
  40. package/assets/styles/variables/colors/_yellow.css +0 -15
  41. package/assets/styles/variables/colors/colors.css +0 -6
  42. package/assets/styles/variables/components/_accordian.css +0 -7
  43. package/assets/styles/variables/components/_container-glow-core.css +0 -16
  44. package/assets/styles/variables/components/_display-dialog-core.css +0 -35
  45. package/assets/styles/variables/components/_tabs.css +0 -18
  46. package/assets/styles/variables/components/display-prompt-core/_scaffolding.css +0 -57
  47. package/assets/styles/variables/components/display-prompt-core/index.css +0 -2
  48. package/assets/styles/variables/components/display-prompt-core/themes/_error.css +0 -39
  49. package/assets/styles/variables/components/display-prompt-core/themes/_info.css +0 -39
  50. package/assets/styles/variables/components/display-prompt-core/themes/_success.css +0 -39
  51. package/assets/styles/variables/components/display-prompt-core/themes/_warning.css +0 -39
  52. package/assets/styles/variables/components/display-prompt-core/themes/index.css +0 -4
  53. package/assets/styles/variables/components/index.css +0 -5
  54. package/assets/styles/variables/index.css +0 -2
  55. package/components/animated-svg-text/AnimatedSvgText.vue +0 -87
  56. package/components/canvas-switcher/CanvasSwitcher.vue +0 -77
  57. package/components/clip-element/ClipElement.vue +0 -73
  58. package/components/clipped-panels/ClippedPanel.vue +0 -73
  59. package/components/deep-expanding-menu/DeepExpandingMenu.vue +0 -214
  60. package/components/deep-expanding-menu/DeepExpandingMenuOld.vue +0 -218
  61. package/components/display-banner/DisplayBanner.vue +0 -63
  62. package/components/display-details/DisplayDetailsCore.vue +0 -312
  63. package/components/functional/accordian/AccordianCore.vue +0 -138
  64. package/components/functional/display-dialog/DisplayDialogCore.vue +0 -244
  65. package/components/functional/display-dialog/variants/DisplayDialogConfirm.vue +0 -45
  66. package/components/functional/display-dialog/variants/DisplayDialogScrollableContent.vue +0 -49
  67. package/components/functional/pop-over/PopOver.vue +0 -88
  68. package/components/image-galleries/SliderGallery.vue +0 -792
  69. package/components/masonry-grid-ordered/MasonryGridOrdered.vue +0 -158
  70. package/components/presentation/container-glow/ContainerGlowCore.vue +0 -211
  71. package/components/presentation/display-grid/DisplayGridCore.vue +0 -22
  72. package/components/presentation/display-prompt/DisplayPromptCore.vue +0 -150
  73. package/components/presentation/display-prompt/variants/DisplayPromptError.vue +0 -53
  74. package/components/presentation/layout-grids/LayoutGridA.vue +0 -103
  75. package/components/presentation/layout-grids/LayoutGridB.vue +0 -132
  76. package/components/presentation/layout-row/LayoutRow.vue +0 -157
  77. package/components/presentation/masonry-grid/MasonryGrid.vue +0 -62
  78. package/components/presentation/masonry-grid-sorted/MasonryGridSorted.vue +0 -115
  79. package/components/presentation/tabs/TabsCore.vue +0 -308
  80. package/components/responsive-header/NavigationItems.vue +0 -164
  81. package/components/responsive-header/ResponsiveHeader.vue +0 -586
  82. package/components/rotating-carousel/RotatingCarouselImage.vue +0 -200
  83. package/composables/useDialogControls.ts +0 -23
  84. package/composables/useStyleClassPassthrough.ts +0 -35
  85. package/composables/useTabs.ts +0 -201
  86. package/types/responsiveHeader.ts +0 -38
@@ -1,586 +0,0 @@
1
- <template>
2
- <div class="navigation" :class="[elementClasses, { loaded: navLoaded }]" ref="navigationWrapper">
3
- <nav class="main-navigation" ref="mainNav">
4
-
5
- <ul v-for="(navGroup, groupKey) in responsiveNavLinks" :key="groupKey" class="main-navigation-list"
6
- :ref="el => setNavRef(String(groupKey), el as HTMLUListElement | null)">
7
- <template v-for="(link, localIndex) in navGroup" :key="localIndex">
8
- <li v-if="link.path" class="main-navigation-item"
9
- :class="{ 'visually-hidden': !mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.visible }"
10
- :style="{ '--_main-navigation-item-width': mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.width + 'px' }"
11
- ref="mainNavigationItems" :data-group-key="groupKey" :data-local-index="localIndex">
12
- <NuxtLink class="main-navigation-link" :to="link.path">{{ link.name }}</NuxtLink>
13
- </li>
14
- <li v-else class="main-navigation-item"
15
- :class="{ 'visually-hidden': !mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.visible }"
16
- :style="{ '--_main-navigation-item-width': mainNavigationState.clonedNavLinks?.[groupKey]?.[localIndex]?.config?.width + 'px' }"
17
- ref="mainNavigationItems" :data-group-key="groupKey" :data-local-index="localIndex">
18
- <details class="main-navigation-details" name="navigation-group" ref="navigationDetails">
19
- <summary @mouseenter="handleSummaryHover($event)" @focusin="handleSummaryHover($event)"
20
- class="main-navigation-details-summary has-toggle-icon">
21
- <Icon name="mdi:chevron-down" class="icon" />
22
- {{ link.childLinksTitle }}
23
- </summary>
24
- <div class="main-navigation-sub-nav">
25
- <ul class="main-navigation-sub-nav-list">
26
- <li class="main-navigation-sub-nav-item" v-for="childLink in link.childLinks" :key="childLink.name">
27
- <NuxtLink :to="childLink.path" class="main-navigation-sub-nav-link">{{ childLink.name }}</NuxtLink>
28
- </li>
29
- </ul>
30
- </div>
31
- </details>
32
- </li>
33
- </template>
34
- </ul>
35
-
36
- </nav>
37
- <nav class="secondary-navigation" ref="secondaryNav">
38
- <details class="overflow-details" :class="[{ 'visually-hidden': !navLoaded || !showOverflowDetails }]"
39
- ref="overflowDetails" name="overflow-group">
40
- <summary class="overflow-details-summary has-toggle-icon">
41
- <Icon :name="overflowDetailsSummaryIcons.more" class="icon" :class="[{ show: !allowNavigationCollapse }]" />
42
- <Icon :name="overflowDetailsSummaryIcons.burger" class="icon" :class="[{ show: allowNavigationCollapse }]" />
43
- </summary>
44
- <div class="overflow-details-nav">
45
- <NavigationItems :main-navigation-state="mainNavigationState" />
46
- </div>
47
- </details>
48
- <slot v-if="hasSecondaryNavigation" name="secondaryNavigation"></slot>
49
- </nav>
50
- <LayoutRow tag="div" variant="full" :style-class-passthrough="['mb-20', 'debug-grid']">
51
- <ClientOnly>
52
- <div>
53
- <h2 class="heading-4">navigationWrapperRects</h2>
54
- <pre>{{ navigationWrapperRects }}</pre>
55
- <hr>
56
- <h2 class="heading-4">secondaryNavRects</h2>
57
- <pre>{{ secondaryNavRects }}</pre>
58
- </div>
59
- <div>
60
- <h2 class="heading-4">mainNavigationState</h2>
61
- <pre>{{ mainNavigationState }}</pre>
62
- </div>
63
- </ClientOnly>
64
- </LayoutRow>
65
- </div>
66
- </template>
67
-
68
- <script setup lang="ts">
69
- import { useResizeObserver, onClickOutside } from '@vueuse/core';
70
- import type { ResponsiveHeaderProp, ResponsiveHeaderState, IFlooredRect } from '@/types/responsiveHeader';
71
-
72
- const props = defineProps({
73
- responsiveNavLinks: {
74
- type: Object as PropType<ResponsiveHeaderProp>,
75
- default: () => [],
76
- },
77
- gapBetweenFirstAndSecondNav: {
78
- type: Number,
79
- default: 12, // px
80
- },
81
- overflowDetailsSummaryIcons: {
82
- type: Object as PropType<Record<string, string>>,
83
- default: {
84
- more: 'gravity-ui:ellipsis',
85
- burger: 'gravity-ui:bars',
86
- }
87
- },
88
- collapseNavigationBelowWidth: {
89
- type: Boolean,
90
- default: true,
91
- },
92
- collapseBreakpoint: {
93
- type: Number,
94
- default: 500, // px
95
- },
96
- styleClassPassthrough: {
97
- type: Array as PropType<string[]>,
98
- default: () => [],
99
- },
100
- });
101
-
102
- const slots = useSlots();
103
- const hasSecondaryNavigation = computed(() => slots.secondaryNavigation !== undefined);
104
-
105
- const navLoaded = ref(false);
106
- const navigationWrapperRef = useTemplateRef('navigationWrapper');
107
-
108
- const handleSummaryHover = (event: MouseEvent | FocusEvent) => {
109
- const summaryElement = event.currentTarget as HTMLElement;
110
- const parentDetailsElement = summaryElement.closest('details');
111
- if (!parentDetailsElement) return;
112
- if (parentDetailsElement.hasAttribute('open')) {
113
- parentDetailsElement.removeAttribute('open');
114
- } else {
115
- parentDetailsElement.setAttribute('open', '');
116
- }
117
- overflowDetailsRef.value?.removeAttribute('open');
118
- };
119
-
120
- const mainNavigationState = ref<ResponsiveHeaderState>({
121
- navListVisibility: {
122
- firstNav: false,
123
- secondNav: false,
124
- },
125
- clonedNavLinks: props.responsiveNavLinks,
126
- hasSecondNav: Object.keys(props.responsiveNavLinks).length > 1,
127
- });
128
-
129
- const navRefs = ref<Record<string, HTMLUListElement | null>>({});
130
-
131
- const setNavRef = (key: string, el: HTMLUListElement | null) => {
132
- navRefs.value[key] = el
133
- }
134
-
135
- const navigationWrapperRects = ref<IFlooredRect | null>(null);
136
- const firstNavRef = ref<HTMLUListElement | null>(null);
137
- const firstNavRects = ref<IFlooredRect | null>(null);
138
-
139
- const secondNavRef = ref<HTMLUListElement | null>(null);
140
- const secondNavRects = ref<IFlooredRect | null>(null);
141
-
142
- const secondaryNavRef = useTemplateRef('secondaryNav');
143
- const secondaryNavRects = ref<IFlooredRect | null>(null);
144
-
145
- const mainNavigationItemsRefs = useTemplateRef<HTMLLIElement[]>('mainNavigationItems');
146
-
147
- const navigationDetailsRefs = useTemplateRef<HTMLElement[]>('navigationDetails');
148
-
149
- const overflowDetailsRef = useTemplateRef('overflowDetails');
150
-
151
- const showOverflowDetails = computed(() => {
152
- const hasHiddenNav = !mainNavigationState.value.navListVisibility['firstNav'] || (!mainNavigationState.value.navListVisibility['secondNav'] && mainNavigationState.value.hasSecondNav);
153
- return hasHiddenNav;
154
- });
155
-
156
- const mainNavigationMarginBlockEnd = computed(() => {
157
- return secondaryNavRects.value ? secondaryNavRects.value.width + props.gapBetweenFirstAndSecondNav : 0;
158
- });
159
-
160
- const mainNavigationMarginBlockEndStr = computed(() => {
161
- return mainNavigationMarginBlockEnd.value + 'px';
162
- });
163
-
164
- const initTemplateRefs = async () => {
165
- firstNavRef.value = navRefs.value['firstNav'] as HTMLUListElement | null;
166
- secondNavRef.value = navRefs.value['secondNav'] as HTMLUListElement | null;
167
- return;
168
- }
169
-
170
- const getFlooredRect = (rect: DOMRect | null) => {
171
- if (!rect) return null;
172
- return {
173
- left: Math.floor(rect.left),
174
- right: Math.floor(rect.right),
175
- top: Math.floor(rect.top),
176
- bottom: Math.floor(rect.bottom),
177
- width: Math.floor(rect.width),
178
- height: Math.floor(rect.height),
179
- };
180
- }
181
-
182
- const updateNavigationConfig = async (source: string) => {
183
- navigationWrapperRects.value = getFlooredRect((navigationWrapperRef.value && navigationWrapperRef.value.getBoundingClientRect()) ?? null) || null;
184
- secondaryNavRects.value = getFlooredRect((secondaryNavRef.value && secondaryNavRef.value.getBoundingClientRect()) ?? null) || null;
185
- firstNavRects.value = getFlooredRect((firstNavRef.value && firstNavRef.value.getBoundingClientRect()) ?? null) || null;
186
- secondNavRects.value = getFlooredRect((secondNavRef.value && secondNavRef.value.getBoundingClientRect()) ?? null) || null;
187
- }
188
-
189
- const allowNavigationCollapse = computed(() => {
190
- return props.collapseNavigationBelowWidth && navigationWrapperRects.value && navigationWrapperRects.value.width < props.collapseBreakpoint;
191
- });
192
-
193
- const determineNavigationItemVisibility = (rect: DOMRect) => {
194
- // Check if navigation should be collapsed based on width
195
- if (allowNavigationCollapse.value) {
196
- return false;
197
- }
198
-
199
- // Use default responsive visibility logic if wrapper exists
200
- if (navigationWrapperRects.value) {
201
- return Math.floor(rect.right + mainNavigationMarginBlockEnd.value + props.gapBetweenFirstAndSecondNav) < navigationWrapperRects.value.right;
202
- }
203
-
204
- // Default to visible
205
- return true;
206
- };
207
-
208
- const initMainNavigationState = () => {
209
- if (!mainNavigationItemsRefs.value) return;
210
-
211
- mainNavigationItemsRefs.value.forEach((item, index) => {
212
-
213
- const rect = item.getBoundingClientRect();
214
-
215
- const groupKey = item.dataset.groupKey;
216
- const localIndex = item.dataset.localIndex ? parseInt(item.dataset.localIndex, 10) : 0;
217
- if (
218
- groupKey !== undefined &&
219
- groupKey !== null &&
220
- mainNavigationState.value.clonedNavLinks &&
221
- mainNavigationState.value.clonedNavLinks[groupKey] &&
222
- mainNavigationState.value.clonedNavLinks[groupKey][localIndex]
223
- ) {
224
- mainNavigationState.value.clonedNavLinks[groupKey][localIndex] = {
225
- ...mainNavigationState.value.clonedNavLinks[groupKey][localIndex],
226
- config: {
227
- left: item.offsetLeft,
228
- right: item.offsetLeft + item.offsetWidth,
229
- width: item.offsetWidth,
230
- visible: determineNavigationItemVisibility(rect),
231
- },
232
- };
233
- }
234
-
235
- // Check if a single item has visible set to false and set the visibility of the group accordingly
236
- if (
237
- typeof groupKey === 'string' &&
238
- mainNavigationState.value.clonedNavLinks &&
239
- mainNavigationState.value.clonedNavLinks[groupKey] &&
240
- mainNavigationState.value.clonedNavLinks[groupKey][localIndex].config?.visible === false
241
- ) {
242
- mainNavigationState.value.navListVisibility[groupKey] = false;
243
- } else if (typeof groupKey === 'string') {
244
- mainNavigationState.value.navListVisibility[groupKey] = true;
245
- }
246
- })
247
-
248
- }
249
-
250
- onMounted(async() => {
251
- await initTemplateRefs().then(() => {
252
- setTimeout(() => {
253
- navLoaded.value = true;
254
- }, 100);
255
- });
256
-
257
- navigationDetailsRefs.value?.forEach((element, index) => {
258
- onClickOutside(element, () => {
259
- navigationDetailsRefs.value?.[index]?.removeAttribute('open');
260
- });
261
- });
262
- // Add onClickOutside to overflowDetailsRef
263
- overflowDetailsRef.value && onClickOutside(overflowDetailsRef.value, () => {
264
- overflowDetailsRef.value?.removeAttribute('open');
265
- });
266
- });
267
-
268
- useResizeObserver(navigationWrapperRef, async () => {
269
- await updateNavigationConfig("useResizeObserver").then(() => {
270
- initMainNavigationState()
271
- });
272
- });
273
-
274
- const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
275
-
276
- watch(
277
- () => props.styleClassPassthrough,
278
- () => {
279
- resetElementClasses(props.styleClassPassthrough);
280
- }
281
- );
282
- </script>
283
-
284
- <style lang="css">
285
-
286
- .navigation {
287
-
288
- ul,
289
- ol {
290
- list-style-type: none;
291
- margin: 0;
292
- padding: 0;
293
-
294
- li {
295
- /* text-box-trim: trim-both; */
296
- /* text-box-edge: cap alphabetic; */
297
- display: flex;
298
- align-items: center;
299
- }
300
- }
301
-
302
- --_link-visibility-transition: none;
303
-
304
- &.loaded {
305
- --_link-visibility-transition: all 0.2s ease-in-out;
306
- }
307
-
308
- /* flex-grow: 1; */
309
- display: grid;
310
- grid-template-areas: 'navStack';
311
-
312
- margin: 12px;
313
- border-radius: 8px;
314
- background-color: #efefef05;
315
- border: 1px solid #efefef75;
316
- padding: 12px;
317
-
318
- .main-navigation {
319
- grid-area: navStack;
320
- display: flex;
321
- flex-wrap: nowrap;
322
- flex-grow: 1;
323
- justify-content: space-between;
324
- gap: 60px;
325
-
326
- overflow-x: hidden;
327
- margin-inline-end: v-bind(mainNavigationMarginBlockEndStr);
328
-
329
- &.collapsed {
330
- justify-content: flex-start;
331
- }
332
-
333
- .main-navigation-list {
334
- display: flex;
335
- flex-wrap: nowrap;
336
-
337
- &:nth-of-type(1) {
338
- gap: 30px;
339
- }
340
-
341
- &:nth-of-type(2) {
342
- gap: 30px;
343
- }
344
-
345
- .main-navigation-item {
346
-
347
- width: var(--_main-navigation-item-width);
348
- overflow: hidden;
349
- transition:
350
- opacity 0.2s ease-in-out,
351
- visibility 0.2s ease-in-out;
352
-
353
- .main-navigation-link {
354
- display: flex;
355
- text-wrap-mode: nowrap;
356
- color: inherit;
357
- text-decoration: none;
358
- margin-inline-start: 0;
359
- transition: var(--_link-visibility-transition);
360
- }
361
-
362
- .main-navigation-details {
363
-
364
- --_icon-transform: scaleY(1);
365
-
366
- margin-inline-start: 0;
367
- transition: var(--_link-visibility-transition);
368
-
369
- &[open] {
370
- --_icon-transform: scaleY(-1);
371
- }
372
-
373
- .has-toggle-icon {
374
- display: flex;
375
- gap: 6px;
376
- text-wrap-mode: nowrap;
377
-
378
- .icon {
379
- display: block;
380
- transform: var(--_icon-transform);
381
- transition: transform 0.2s ease-in-out;
382
- }
383
- }
384
-
385
- .main-navigation-details-summary {
386
-
387
- &::-webkit-details-marker,
388
- &::marker {
389
- display: none;
390
- }
391
-
392
- &:hover {
393
- cursor: pointer;
394
- }
395
-
396
- }
397
-
398
- .main-navigation-sub-nav {
399
- position: absolute;
400
- padding: 12px;
401
- border: 1px solid #efefef75;
402
- border-radius: 8px;
403
- background-color: #000;
404
- translate: 0 12px;
405
-
406
- min-width: var(--_main-navigation-item-width);
407
-
408
- .main-navigation-sub-nav-list {
409
-
410
- display: grid;
411
- grid-template-columns: repeat(2, auto);
412
- gap: 12px;
413
-
414
- .main-navigation-sub-nav-item {
415
- margin-bottom: 8px;
416
-
417
- &:last-child {
418
- margin-bottom: 0;
419
- }
420
-
421
- .main-navigation-sub-nav-link {
422
- display: block;
423
- text-wrap-mode: nowrap;
424
- text-decoration: none;
425
- color: inherit;
426
- }
427
- }
428
- }
429
- }
430
- }
431
-
432
- &.visually-hidden {
433
- visibility: hidden;
434
- opacity: 0;
435
-
436
- .main-navigation-details,
437
- .main-navigation-link {
438
- margin-inline-start: var(--_main-navigation-item-width);
439
- }
440
- }
441
- }
442
- }
443
- }
444
-
445
- .secondary-navigation {
446
- grid-area: navStack;
447
- justify-self: end;
448
-
449
- display: flex;
450
- gap: 12px;
451
- align-items: center;
452
-
453
- .secondary-navigation-list {
454
-
455
- .secondary-navigation-item {
456
-
457
- .secondary-navigation-link {
458
- display: flex;
459
- align-items: center;
460
- font: inherit;
461
- color: inherit;
462
-
463
- .icon {
464
- height: 1.35em;
465
- width: 1.35em;
466
- }
467
- }
468
- }
469
- }
470
-
471
- .main-navigation-link {
472
- .icon {
473
- height: 1.35em;
474
- width: 1.35em;
475
- }
476
- }
477
-
478
- .overflow-details {
479
- list-style: none;
480
- padding: 0;
481
- margin: 0;
482
- position: relative;
483
- cursor: pointer;
484
- width: fit-content;
485
-
486
- transition: all 0.2s ease-in-out;
487
-
488
- &.visually-hidden {
489
- opacity: 0;
490
- visibility: hidden;
491
- width: 0;
492
- }
493
-
494
- .overflow-details-summary {
495
- --_icon-zoom: 1;
496
- --_icon-size: 20px;
497
- --_border-width: 1px;
498
- --_outline-width: 1px;
499
- --_transition-duration: 0.2s;
500
-
501
- display: grid;
502
- grid-template-areas: 'icon';
503
- align-items: center;
504
- justify-content: center;
505
- padding-inline: 5px;
506
- text-wrap: nowrap;
507
-
508
- aspect-ratio: 1;
509
- border-radius: 4px;
510
- border: var(--_border-width) solid #ffffff90;
511
- outline: var(--_outline-width) solid #ffffff10;
512
- background-color: Canvas;
513
-
514
- width: var(--_icon-size);
515
- height: var(--_icon-size);
516
- overflow: hidden;
517
- transition-property: all;
518
- transition-timing-function: linear;
519
- transition-duration: var(--_transition-duration);
520
-
521
- &::-webkit-details-marker,
522
- &::marker {
523
- display: none;
524
- }
525
-
526
- &:hover {
527
- --_icon-zoom: 1.2;
528
- outline: var(--_outline-width) solid #ffffff;
529
- }
530
-
531
- .icon {
532
- grid-area: icon;
533
- scale: var(--_icon-zoom);
534
- transition: scale 0.2s ease-in-out;
535
- width: calc(var(--_icon-size) - var(--_border-width) * 2 - var(--_outline-width) * 2);
536
- height: calc(var(--_icon-size) - var(--_border-width) * 2 - var(--_outline-width) * 2);
537
-
538
- opacity: 0;
539
- transition-property: opacity, transform; /* For reference */
540
- transition-timing-function: linear; /* For reference */
541
- transition-duration: var(--_transition-duration); /* For reference */
542
-
543
- &.show {
544
- opacity: 1;
545
- }
546
- }
547
- }
548
-
549
-
550
- .overflow-details-nav {
551
- position: absolute;
552
- top: 135%;
553
- right: 0;
554
- background-color: #000;
555
- border: 1px solid #ffffff90;
556
- border-radius: 8px;
557
- padding: 12px;
558
- margin: 0;
559
- z-index: 999;
560
- min-width: var(--_overflow-drop-down-width, fit-content);
561
-
562
- display: grid;
563
- grid-auto-flow: row;
564
- gap: 8px;
565
- }
566
- }
567
- }
568
- }
569
-
570
- .debug-grid {
571
- display: none;
572
-
573
- .layout-row-inner > div {
574
- display: flex;
575
- flex-wrap: wrap;
576
- gap: 12px;
577
-
578
- margin-inline: 12px;
579
-
580
- > div {
581
- outline: 1px solid gray;
582
- padding: 12px;
583
- }
584
- }
585
- }
586
- </style>