@threadlabs/looma 0.33.1 → 0.34.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 (184) hide show
  1. package/components/shared/overlay.js +8 -2
  2. package/components/shared/surface-material.js +21 -0
  3. package/components/ui-button/ui-button.html +63 -47
  4. package/components/ui-card/ui-card.html +44 -2
  5. package/components/ui-curve-editor/curve.js +10 -0
  6. package/components/ui-curve-editor/ui-curve-editor.html +181 -0
  7. package/components/ui-curve-editor/ui-curve-editor.js +51 -0
  8. package/components/ui-dialog/ui-dialog.html +62 -1
  9. package/components/ui-dialog/ui-dialog.js +9 -1
  10. package/components/ui-icon-button/ui-icon-button.html +75 -23
  11. package/components/ui-menu/ui-menu.html +60 -0
  12. package/components/ui-menu/ui-menu.js +1 -1
  13. package/components/ui-number-input/arithmetic.js +47 -0
  14. package/components/ui-number-input/ui-number-input.html +62 -0
  15. package/components/ui-number-input/ui-number-input.js +44 -0
  16. package/components/ui-popover/ui-popover.html +64 -1
  17. package/components/ui-popover/ui-popover.js +1 -1
  18. package/components/ui-slider/ui-slider.html +84 -0
  19. package/components/ui-slider/ui-slider.js +29 -0
  20. package/components/ui-tabs/ui-tabs.html +6 -1
  21. package/components/ui-text/ui-text.html +31 -6
  22. package/components/ui-tooltip/ui-tooltip.html +60 -0
  23. package/components/ui-tooltip/ui-tooltip.js +1 -1
  24. package/dist/index.js +46 -43
  25. package/docs/README.md +34 -4
  26. package/docs/card.html +16 -2
  27. package/docs/card.js +17 -2
  28. package/docs/catalog.json +1154 -144
  29. package/docs/customizer-render.mjs +35 -9
  30. package/docs/customizer.js +83 -20
  31. package/docs/documentation.css +9 -1
  32. package/docs/index.d.ts +4 -2
  33. package/docs/index.mjs +1 -1
  34. package/docs/preview.js +2 -0
  35. package/docs/render.mjs +15 -6
  36. package/docs/site.mjs +50 -9
  37. package/docs/theme-session.mjs +51 -0
  38. package/docs/theme.mjs +134 -15
  39. package/docs/value-editors.mjs +33 -0
  40. package/package.json +2 -2
  41. package/styles/ui-button.css +45 -45
  42. package/styles/ui-card.css +47 -0
  43. package/styles/ui-curve-editor.css +109 -0
  44. package/styles/ui-dialog.css +132 -0
  45. package/styles/ui-icon-button.css +63 -20
  46. package/styles/ui-menu.css +72 -0
  47. package/styles/ui-number-input.css +34 -0
  48. package/styles/ui-popover.css +74 -0
  49. package/styles/ui-slider.css +53 -0
  50. package/styles/ui-tabs.css +6 -1
  51. package/styles/ui-text.css +23 -1
  52. package/styles/ui-tooltip.css +72 -0
  53. package/theme-system.css +26 -10
  54. package/tokens.css +8 -2
  55. package/vanilla/UiButton.d.ts +1 -0
  56. package/vanilla/UiButton.js +195 -130
  57. package/vanilla/UiCard.d.ts +1 -1
  58. package/vanilla/UiCard.js +1 -1
  59. package/vanilla/UiCurveEditor.d.ts +28 -0
  60. package/vanilla/UiCurveEditor.js +134 -0
  61. package/vanilla/UiIconButton.d.ts +2 -1
  62. package/vanilla/UiIconButton.js +58 -31
  63. package/vanilla/UiNumberInput.d.ts +33 -0
  64. package/vanilla/UiNumberInput.js +79 -0
  65. package/vanilla/UiSlider.d.ts +33 -0
  66. package/vanilla/UiSlider.js +125 -0
  67. package/vanilla/UiText.d.ts +2 -2
  68. package/vanilla/UiText.js +45 -11
  69. package/vanilla/index.js +3 -0
  70. package/vue/UiButton.d.ts +6 -0
  71. package/vue/UiButton.vue +155 -56
  72. package/vue/UiCard.d.ts +2 -2
  73. package/vue/UiCard.vue +55 -5
  74. package/vue/UiCurveEditor.d.ts +53 -0
  75. package/vue/UiCurveEditor.js +2 -0
  76. package/vue/UiCurveEditor.vue +427 -0
  77. package/vue/UiDialog.vue +177 -1
  78. package/vue/UiIconButton.d.ts +8 -2
  79. package/vue/UiIconButton.vue +164 -34
  80. package/vue/UiMenu.vue +89 -0
  81. package/vue/UiNumberInput.d.ts +83 -0
  82. package/vue/UiNumberInput.js +2 -0
  83. package/vue/UiNumberInput.vue +370 -0
  84. package/vue/UiPopover.vue +92 -1
  85. package/vue/UiSlider.d.ts +83 -0
  86. package/vue/UiSlider.js +2 -0
  87. package/vue/UiSlider.vue +412 -0
  88. package/vue/UiTabs.vue +6 -1
  89. package/vue/UiText.d.ts +7 -5
  90. package/vue/UiText.vue +104 -22
  91. package/vue/UiTooltip.vue +89 -0
  92. package/vue/chunks/UiActionBar.js +1 -1
  93. package/vue/chunks/UiAffordanceScope.js +2 -2
  94. package/vue/chunks/UiAvatar.js +2 -2
  95. package/vue/chunks/UiAvatarGroup.js +2 -2
  96. package/vue/chunks/UiBadge.js +2 -2
  97. package/vue/chunks/UiBreadcrumbItem.js +2 -2
  98. package/vue/chunks/UiBreadcrumbs.js +2 -2
  99. package/vue/chunks/UiButton.js +94 -11
  100. package/vue/chunks/UiCallout.js +2 -2
  101. package/vue/chunks/UiCard.js +6 -5
  102. package/vue/chunks/UiCheckbox.js +2 -2
  103. package/vue/chunks/UiCluster.js +2 -2
  104. package/vue/chunks/UiColorPicker.js +2 -2
  105. package/vue/chunks/UiCombobox.js +2 -2
  106. package/vue/chunks/UiContainer.js +2 -2
  107. package/vue/chunks/UiContextMenu.js +2 -2
  108. package/vue/chunks/UiCover.js +2 -2
  109. package/vue/chunks/UiCurveEditor.js +413 -0
  110. package/vue/chunks/UiDescriptionItem.js +2 -2
  111. package/vue/chunks/UiDescriptionList.js +2 -2
  112. package/vue/chunks/UiDialog.js +4 -4
  113. package/vue/chunks/UiDisclosure.js +2 -2
  114. package/vue/chunks/UiEditable.js +2 -2
  115. package/vue/chunks/UiEditorBlockActions.js +2 -2
  116. package/vue/chunks/UiEditorChipEditor.js +2 -2
  117. package/vue/chunks/UiEditorCodeLanguage.js +2 -2
  118. package/vue/chunks/UiEditorFootnoteEditor.js +2 -2
  119. package/vue/chunks/UiEditorImageToolbar.js +3 -3
  120. package/vue/chunks/UiEditorInsertTableGrid.js +2 -2
  121. package/vue/chunks/UiEditorLinkCard.js +3 -3
  122. package/vue/chunks/UiEditorLinkForm.js +3 -3
  123. package/vue/chunks/UiEditorMentionMenu.js +2 -2
  124. package/vue/chunks/UiEditorMentionMenuItem.js +2 -2
  125. package/vue/chunks/UiEditorSlashMenu.js +2 -2
  126. package/vue/chunks/UiEditorSlashMenuGroup.js +2 -2
  127. package/vue/chunks/UiEditorSlashMenuItem.js +2 -2
  128. package/vue/chunks/UiEditorSurface.js +2 -2
  129. package/vue/chunks/UiEditorTableContextMenu.js +2 -2
  130. package/vue/chunks/UiEditorTableOverlay.js +2 -2
  131. package/vue/chunks/UiEditorTableToolbar.js +2 -2
  132. package/vue/chunks/UiEditorToolbar.js +2 -2
  133. package/vue/chunks/UiFloatingActionButton.js +2 -2
  134. package/vue/chunks/UiFormField.js +2 -2
  135. package/vue/chunks/UiGrid.js +2 -2
  136. package/vue/chunks/UiIcon.js +2 -2
  137. package/vue/chunks/UiIconButton.js +77 -11
  138. package/vue/chunks/UiImage.js +2 -2
  139. package/vue/chunks/UiInput.js +2 -2
  140. package/vue/chunks/UiInputGroup.js +2 -2
  141. package/vue/chunks/UiList.js +2 -2
  142. package/vue/chunks/UiListItem.js +2 -2
  143. package/vue/chunks/UiListbox.js +2 -2
  144. package/vue/chunks/UiMenu.js +3 -3
  145. package/vue/chunks/UiMenuGroup.js +2 -2
  146. package/vue/chunks/UiMenuItem.js +2 -2
  147. package/vue/chunks/UiMeter.js +2 -2
  148. package/vue/chunks/UiNavItem.js +2 -2
  149. package/vue/chunks/UiNumberInput.js +390 -0
  150. package/vue/chunks/UiPageHeader.js +2 -2
  151. package/vue/chunks/UiPopover.js +4 -4
  152. package/vue/chunks/UiRadio.js +2 -2
  153. package/vue/chunks/UiRadioGroup.js +2 -2
  154. package/vue/chunks/UiReel.js +2 -2
  155. package/vue/chunks/UiScrollArea.js +2 -2
  156. package/vue/chunks/UiSearchResultRow.js +2 -2
  157. package/vue/chunks/UiSearchShell.js +2 -2
  158. package/vue/chunks/UiSection.js +2 -2
  159. package/vue/chunks/UiSelect.js +2 -2
  160. package/vue/chunks/UiSeparator.js +2 -2
  161. package/vue/chunks/UiSidebar.js +2 -2
  162. package/vue/chunks/UiSlider.js +396 -0
  163. package/vue/chunks/UiSpinner.js +2 -2
  164. package/vue/chunks/UiStack.js +2 -2
  165. package/vue/chunks/UiStatusMessage.js +2 -2
  166. package/vue/chunks/UiSwatch.js +2 -2
  167. package/vue/chunks/UiSwitch.js +2 -2
  168. package/vue/chunks/UiSwitcher.js +2 -2
  169. package/vue/chunks/UiTable.js +2 -2
  170. package/vue/chunks/UiTabs.js +3 -3
  171. package/vue/chunks/UiText.js +53 -12
  172. package/vue/chunks/UiTextarea.js +2 -2
  173. package/vue/chunks/UiToast.js +2 -2
  174. package/vue/chunks/UiToastRegion.js +2 -2
  175. package/vue/chunks/UiTooltip.js +3 -3
  176. package/vue/chunks/UiTopBar.js +1 -1
  177. package/vue/chunks/UiTree.js +2 -2
  178. package/vue/chunks/UiTreeItem.js +2 -2
  179. package/vue/chunks/_plugin-vue_export-helper.js +68 -2
  180. package/vue/chunks/props.js +24 -1
  181. package/vue/components.css +2215 -1203
  182. package/vue/editor/index.js +623 -211
  183. package/vue/index.d.ts +3 -0
  184. package/vue/index.js +5 -2
package/vue/UiText.vue CHANGED
@@ -32,8 +32,8 @@ const propValidityContract = {
32
32
  required: false,
33
33
  target: { attribute: 'as' },
34
34
  description:
35
- 'The native element the text renders: a paragraph by default, inline span, small, or strong within a line, a div for a block, a label for a control, or a\n heading, h2 to h6, below a Page Header\'s h1 and a Section\'s h2. A heading takes its size and weight from size and weight, like any other text.',
36
- values: ['p', 'span', 'div', 'small', 'strong', 'label', 'h2', 'h3', 'h4', 'h5', 'h6'],
35
+ 'The native element the text renders: a paragraph by default, inline span, small, or strong within a line, a div for a block, a label for a control, or a\n heading, h1 to h6. Choose its document level independently from its visual variant. The default body variant keeps the existing size and weight\n behavior.',
36
+ values: ['p', 'span', 'div', 'small', 'strong', 'label', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
37
37
  default: 'p',
38
38
  },
39
39
  font: {
@@ -91,8 +91,8 @@ const propValidityContract = {
91
91
  required: false,
92
92
  target: { attribute: 'variant' },
93
93
  description:
94
- 'body is running text. eyebrow is a short, uppercase, tracked label that names what follows, such as a group of links; code sets a value to copy or read\n exactly, such as an address, in the monospace face.',
95
- values: ['body', 'eyebrow', 'code'],
94
+ 'body is running text. display is a page title, heading names a section, label identifies a control, and caption is supporting text. These roles set their\n shared type scale, weight and leading; pair heading or display with an appropriate as heading element. eyebrow is a short, uppercase, tracked label that\n names what follows, such as a group of links; code sets a value to copy or read exactly, such as an address, in the monospace face.',
95
+ values: ['body', 'display', 'heading', 'label', 'caption', 'eyebrow', 'code'],
96
96
  default: 'body',
97
97
  },
98
98
  weight: {
@@ -119,7 +119,19 @@ const props = defineProps({
119
119
  align: { type: null as unknown as PropType<'start' | 'center' | null> },
120
120
  as: {
121
121
  type: null as unknown as PropType<
122
- 'p' | 'span' | 'div' | 'small' | 'strong' | 'label' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | null
122
+ | 'p'
123
+ | 'span'
124
+ | 'div'
125
+ | 'small'
126
+ | 'strong'
127
+ | 'label'
128
+ | 'h1'
129
+ | 'h2'
130
+ | 'h3'
131
+ | 'h4'
132
+ | 'h5'
133
+ | 'h6'
134
+ | null
123
135
  >,
124
136
  },
125
137
  font: { type: null as unknown as PropType<'inherit' | 'sans' | null> },
@@ -140,7 +152,11 @@ const props = defineProps({
140
152
  },
141
153
  trim: { type: null as unknown as PropType<boolean | null> },
142
154
  truncate: { type: null as unknown as PropType<boolean | null> },
143
- variant: { type: null as unknown as PropType<'body' | 'eyebrow' | 'code' | null> },
155
+ variant: {
156
+ type: null as unknown as PropType<
157
+ 'body' | 'display' | 'heading' | 'label' | 'caption' | 'eyebrow' | 'code' | null
158
+ >,
159
+ },
144
160
  weight: {
145
161
  type: null as unknown as PropType<'inherit' | 'normal' | 'medium' | 'semibold' | null>,
146
162
  },
@@ -212,7 +228,19 @@ const checkedProps = computed(() => {
212
228
  props[BINDING_INPUTS_PROP],
213
229
  ) as 'start' | 'center',
214
230
  as: propInputs.value<
215
- 'p' | 'span' | 'div' | 'small' | 'strong' | 'label' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | null
231
+ | 'p'
232
+ | 'span'
233
+ | 'div'
234
+ | 'small'
235
+ | 'strong'
236
+ | 'label'
237
+ | 'h1'
238
+ | 'h2'
239
+ | 'h3'
240
+ | 'h4'
241
+ | 'h5'
242
+ | 'h6'
243
+ | null
216
244
  >('as', props['as'], props[BINDING_INPUTS_PROP]) as
217
245
  | 'p'
218
246
  | 'span'
@@ -220,6 +248,7 @@ const checkedProps = computed(() => {
220
248
  | 'small'
221
249
  | 'strong'
222
250
  | 'label'
251
+ | 'h1'
223
252
  | 'h2'
224
253
  | 'h3'
225
254
  | 'h4'
@@ -269,11 +298,16 @@ const checkedProps = computed(() => {
269
298
  props['truncate'],
270
299
  props[BINDING_INPUTS_PROP],
271
300
  ) as boolean,
272
- variant: propInputs.value<'body' | 'eyebrow' | 'code' | null>(
273
- 'variant',
274
- props['variant'],
275
- props[BINDING_INPUTS_PROP],
276
- ) as 'body' | 'eyebrow' | 'code',
301
+ variant: propInputs.value<
302
+ 'body' | 'display' | 'heading' | 'label' | 'caption' | 'eyebrow' | 'code' | null
303
+ >('variant', props['variant'], props[BINDING_INPUTS_PROP]) as
304
+ | 'body'
305
+ | 'display'
306
+ | 'heading'
307
+ | 'label'
308
+ | 'caption'
309
+ | 'eyebrow'
310
+ | 'code',
277
311
  weight: propInputs.value<'inherit' | 'normal' | 'medium' | 'semibold' | null>(
278
312
  'weight',
279
313
  props['weight'],
@@ -311,15 +345,17 @@ checkHydratedRoot(
311
345
  ? 'strong'
312
346
  : ((checkedProps.value.as === 'label')
313
347
  ? 'label'
314
- : ((checkedProps.value.as === 'h2')
315
- ? 'h2'
316
- : ((checkedProps.value.as === 'h3')
317
- ? 'h3'
318
- : ((checkedProps.value.as === 'h4')
319
- ? 'h4'
320
- : ((checkedProps.value.as === 'h5')
321
- ? 'h5'
322
- : ((checkedProps.value.as === 'h6') ? 'h6' : ('p')))))))))),
348
+ : ((checkedProps.value.as === 'h1')
349
+ ? 'h1'
350
+ : ((checkedProps.value.as === 'h2')
351
+ ? 'h2'
352
+ : ((checkedProps.value.as === 'h3')
353
+ ? 'h3'
354
+ : ((checkedProps.value.as === 'h4')
355
+ ? 'h4'
356
+ : ((checkedProps.value.as === 'h5')
357
+ ? 'h5'
358
+ : ((checkedProps.value.as === 'h6') ? 'h6' : ('p'))))))))))),
323
359
  'ui-text',
324
360
  )
325
361
 
@@ -456,6 +492,29 @@ const hostState = computed(() =>
456
492
  :data-ui-text-state="hostState || undefined"
457
493
  ref="@html-next/root"
458
494
  ><slot /></label>
495
+ <h1
496
+ v-else-if="checkedProps.as === 'h1'"
497
+ class="ui-text"
498
+ v-bind="nativeAttrs($attrs)"
499
+ data-hn
500
+ data-hn-ui-text
501
+ v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
502
+ :data-ui-text-prop-align="reflectedProp('align', 'align', checkedProps.align, undefined, false)"
503
+ :data-ui-text-prop-as="reflectedProp('as', 'as', checkedProps.as, undefined, false)"
504
+ :data-ui-text-prop-font="reflectedProp('font', 'font', checkedProps.font, undefined, false)"
505
+ :data-ui-text-prop-grow="reflectedProp('grow', 'grow', checkedProps.grow, undefined, false)"
506
+ :data-ui-text-prop-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
507
+ :data-ui-text-prop-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
508
+ :data-ui-text-prop-trim="reflectedProp('trim', 'trim', checkedProps.trim, undefined, false)"
509
+ :data-ui-text-prop-truncate="reflectedProp('truncate', 'truncate', checkedProps.truncate, undefined, false)"
510
+ :data-ui-text-prop-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
511
+ :data-ui-text-prop-weight="reflectedProp('weight', 'weight', checkedProps.weight, undefined, false)"
512
+ :data-ui-text-prop-wrap="reflectedProp('wrap', 'wrap', checkedProps.wrap, undefined, false)"
513
+ :data-ui-text-state="hostState || undefined"
514
+ ref="@html-next/root"
515
+ >
516
+ <slot />
517
+ </h1>
459
518
  <h2
460
519
  v-else-if="checkedProps.as === 'h2'"
461
520
  class="ui-text"
@@ -626,7 +685,7 @@ const hostState = computed(() =>
626
685
  color: var(--ui-text-primary);
627
686
  text-align: start;
628
687
  }
629
- :global(:scope:is(h2, h3, h4, h5, h6):where([data-hn-ui-text])) {
688
+ :global(:scope:is(h1, h2, h3, h4, h5, h6):where([data-hn-ui-text])) {
630
689
  font-family: var(--ui-font-display, inherit);
631
690
  font-size: inherit;
632
691
  font-weight: inherit;
@@ -685,10 +744,33 @@ const hostState = computed(() =>
685
744
  font-weight: var(--ui-font-semibold);
686
745
  }
687
746
 
747
+ :global(:scope[data-ui-text-state~="variant=display"]:where([data-hn-ui-text])),
748
+ :global(:scope[data-ui-text-state~="variant=heading"]:where([data-hn-ui-text])) {
749
+ font-family: var(--ui-font-display, var(--ui-font-family-sans));
750
+ font-weight: var(--ui-font-semibold);
751
+ line-height: var(--ui-line-height-tight);
752
+ }
753
+ :global(:scope[data-ui-text-state~="variant=display"]:where([data-hn-ui-text])) {
754
+ font-size: var(--ui-font-size-2xl);
755
+ }
756
+ :global(:scope[data-ui-text-state~="variant=heading"]:where([data-hn-ui-text])) {
757
+ font-size: var(--ui-font-size-xl);
758
+ }
759
+ :global(:scope[data-ui-text-state~="variant=label"]:where([data-hn-ui-text])) {
760
+ font-size: var(--ui-font-size-sm);
761
+ font-weight: var(--ui-font-medium);
762
+ line-height: var(--ui-line-height);
763
+ }
764
+ :global(:scope[data-ui-text-state~="variant=caption"]:where([data-hn-ui-text])) {
765
+ font-size: var(--ui-font-size-sm);
766
+ line-height: var(--ui-line-height);
767
+ }
768
+
688
769
  :global(:scope[data-ui-text-state~="variant=eyebrow"]:where([data-hn-ui-text])) {
689
770
  font-size: var(--ui-font-size-xs);
690
771
  font-weight: var(--ui-font-semibold);
691
772
  letter-spacing: 0.06em;
773
+ line-height: var(--ui-line-height);
692
774
  text-transform: uppercase;
693
775
  }
694
776
  :global(:scope[data-ui-text-state~="variant=code"]:where([data-hn-ui-text])) {
package/vue/UiTooltip.vue CHANGED
@@ -389,6 +389,9 @@ useComponentHost(() => import('../components/ui-tooltip/ui-tooltip.js'), {
389
389
 
390
390
  /* The label and the shortcut sit side by side, a gap apart, with the label wrapping on its own. */
391
391
 
392
+ /* Purpose and measured size shape one shared separation lever. The content plane stays opaque;
393
+ transparency, saturation and edge light belong to the surrounding decorative material. */
394
+
392
395
  /* A keyboard shortcut follows the label after a thin divider, smaller and quieter, as menus show
393
396
  it. The label stays first in the description, so a screen reader hears the name, then the keys. */
394
397
 
@@ -399,6 +402,7 @@ useComponentHost(() => import('../components/ui-tooltip/ui-tooltip.js'), {
399
402
 
400
403
  @scope (.ui-tooltip) to ([data-hn]) {
401
404
  :global(:scope:where([data-hn-ui-tooltip])) {
405
+ --_ui-material-scale: 0.08;
402
406
  /* Hooks do not inherit, so the parts below read them from the root. */
403
407
  --_ui-tooltip-border: var(--ui-tooltip-border);
404
408
  --_ui-tooltip-max-inline-size: var(--ui-tooltip-max-inline-size);
@@ -451,6 +455,91 @@ useComponentHost(() => import('../components/ui-tooltip/ui-tooltip.js'), {
451
455
  var(--ui-overlay-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)))
452
456
  );
453
457
  }
458
+ :global(.surface:where([data-hn-ui-tooltip])) {
459
+ --_ui-material-glassiness: clamp(0, var(--ui-glassiness, 0), 1);
460
+ --_ui-material-separation: clamp(0, var(--ui-surface-separation, 0), 1);
461
+ --_ui-material-active: clamp(
462
+ 0,
463
+ calc((var(--_ui-material-glassiness) + var(--_ui-material-separation)) * 100000),
464
+ 1
465
+ );
466
+ --_ui-material-rim: calc(
467
+ (
468
+ var(--_ui-material-separation) + var(--_ui-material-glassiness) * 0.25
469
+ ) *
470
+ var(--_ui-material-scale, 0.08) *
471
+ 8px
472
+ );
473
+ --_ui-material-content-color: var(
474
+ --_ui-tooltip-surface,
475
+ var(--ui-material-content, var(--ui-overlay-surface, var(--ui-surface-elevated)))
476
+ );
477
+ --_ui-material-rim-color: color-mix(
478
+ in srgb,
479
+ var(--ui-material-glass, var(--ui-surface-elevated)) calc(var(--_ui-material-active) * 100%),
480
+ transparent
481
+ );
482
+ background:
483
+ linear-gradient(var(--_ui-material-content-color), var(--_ui-material-content-color))
484
+ padding-box,
485
+ linear-gradient(var(--_ui-material-rim-color), var(--_ui-material-rim-color)) border-box,
486
+ var(--_ui-material-content-color) padding-box;
487
+ border-width: calc(var(--ui-border-width) + var(--_ui-material-rim));
488
+ border-color: var(
489
+ --_ui-tooltip-border,
490
+ color-mix(
491
+ in oklab,
492
+ var(--ui-overlay-border, var(--ui-border-strong)) calc(
493
+ (1 - var(--_ui-material-active)) * 100%
494
+ ),
495
+ transparent
496
+ )
497
+ );
498
+ box-shadow: var(
499
+ --_ui-tooltip-shadow,
500
+ var(
501
+ --ui-overlay-shadow,
502
+ 0 calc(var(--_ui-material-separation) * var(--_ui-material-scale, 0.08) * 8px) calc(
503
+ var(--_ui-material-separation) * var(--_ui-material-scale, 0.08) * 24px
504
+ ) color-mix(in oklab, var(--ui-text-primary) 15%, transparent),
505
+ inset 0 0 0 calc(var(--_ui-material-active) * var(--ui-border-width)) var(
506
+ --ui-material-edge,
507
+ var(--ui-border-strong)
508
+ ),
509
+ var(--ui-elevation-tooltip, var(--ui-shadow-md))
510
+ )
511
+ );
512
+ backdrop-filter: blur(
513
+ calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.08) * 18px)
514
+ ) saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.08) * 0.18));
515
+ -webkit-backdrop-filter: blur(
516
+ calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.08) * 18px)
517
+ ) saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.08) * 0.18));
518
+ }
519
+
520
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
521
+ :global(.surface:where([data-hn-ui-tooltip])) {
522
+ background: var(--_ui-material-content-color);
523
+ }
524
+ }
525
+
526
+ @media (prefers-reduced-transparency: reduce) {
527
+ :global(.surface:where([data-hn-ui-tooltip])) {
528
+ background: var(--_ui-material-content-color);
529
+ backdrop-filter: none;
530
+ -webkit-backdrop-filter: none;
531
+ }
532
+ }
533
+
534
+ @media (forced-colors: active) {
535
+ :global(.surface:where([data-hn-ui-tooltip])) {
536
+ background: Canvas;
537
+ border-color: CanvasText;
538
+ box-shadow: none;
539
+ backdrop-filter: none;
540
+ -webkit-backdrop-filter: none;
541
+ }
542
+ }
454
543
  :global(.shortcut:where([data-hn-ui-tooltip])) {
455
544
  display: inline-flex !important;
456
545
  align-items: center !important;
@@ -1,4 +1,4 @@
1
- import { i as checkHydratedRoot, p as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
1
+ import { i as checkHydratedRoot, m as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeProps, openBlock, renderSlot, toDisplayString, unref } from "vue";
3
3
  //#region .build/vue/UiActionBar.vue?vue&type=script&setup=true&lang.ts
4
4
  var _hoisted_1 = {
@@ -1,5 +1,5 @@
1
- import { i as checkHydratedRoot, o as createDispatch, p as nativeAttrs, t as _plugin_vue_export_helper_default, v as useComponentHost, y as useReflectedProp } from "./_plugin-vue_export-helper.js";
2
- import { f as vPropValidity, i as checkPropInput, l as propValidityState, p as vuePropInputs, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
1
+ import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, o as createDispatch, t as _plugin_vue_export_helper_default, y as useComponentHost } from "./_plugin-vue_export-helper.js";
2
+ import { i as checkPropInput, m as vuePropInputs, p as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP, u as propValidityState } from "./props.js";
3
3
  import { computed, createElementBlock, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiAffordanceScope.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = [
@@ -1,5 +1,5 @@
1
- import { i as checkHydratedRoot, o as createDispatch, p as nativeAttrs, t as _plugin_vue_export_helper_default, v as useComponentHost, y as useReflectedProp } from "./_plugin-vue_export-helper.js";
2
- import { f as vPropValidity, i as checkPropInput, l as propValidityState, p as vuePropInputs, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
1
+ import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, o as createDispatch, t as _plugin_vue_export_helper_default, y as useComponentHost } from "./_plugin-vue_export-helper.js";
2
+ import { i as checkPropInput, m as vuePropInputs, p as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP, u as propValidityState } from "./props.js";
3
3
  import { t as UiIcon_default } from "./UiIcon.js";
4
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withDirectives } from "vue";
5
5
  //#region .build/vue/UiAvatar.vue?vue&type=script&setup=true&lang.ts
@@ -1,5 +1,5 @@
1
- import { i as checkHydratedRoot, o as createDispatch, p as nativeAttrs, t as _plugin_vue_export_helper_default, v as useComponentHost, y as useReflectedProp } from "./_plugin-vue_export-helper.js";
2
- import { f as vPropValidity, i as checkPropInput, l as propValidityState, p as vuePropInputs, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
1
+ import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, o as createDispatch, t as _plugin_vue_export_helper_default, y as useComponentHost } from "./_plugin-vue_export-helper.js";
2
+ import { i as checkPropInput, m as vuePropInputs, p as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP, u as propValidityState } from "./props.js";
3
3
  import { computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiAvatarGroup.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = [
@@ -1,5 +1,5 @@
1
- import { i as checkHydratedRoot, p as nativeAttrs, t as _plugin_vue_export_helper_default, y as useReflectedProp } from "./_plugin-vue_export-helper.js";
2
- import { f as vPropValidity, i as checkPropInput, p as vuePropInputs, t as BINDING_INPUTS_PROP } from "./props.js";
1
+ import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
+ import { i as checkPropInput, m as vuePropInputs, p as vPropValidity, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeProps, openBlock, renderSlot, toDisplayString, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiBadge.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = [
@@ -1,5 +1,5 @@
1
- import { a as concat, i as checkHydratedRoot, p as nativeAttrs, r as attribute, t as _plugin_vue_export_helper_default, y as useReflectedProp } from "./_plugin-vue_export-helper.js";
2
- import { f as vPropValidity, i as checkPropInput, p as vuePropInputs, t as BINDING_INPUTS_PROP } from "./props.js";
1
+ import { a as concat, b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, r as attribute, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
+ import { i as checkPropInput, m as vuePropInputs, p as vPropValidity, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { t as UiIcon_default } from "./UiIcon.js";
4
4
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, openBlock, renderSlot, toDisplayString, unref, watchSyncEffect, withDirectives } from "vue";
5
5
  //#region .build/vue/UiBreadcrumbItem.vue?vue&type=script&setup=true&lang.ts
@@ -1,5 +1,5 @@
1
- import { i as checkHydratedRoot, p as nativeAttrs, t as _plugin_vue_export_helper_default, y as useReflectedProp } from "./_plugin-vue_export-helper.js";
2
- import { f as vPropValidity, i as checkPropInput, p as vuePropInputs, t as BINDING_INPUTS_PROP } from "./props.js";
1
+ import { b as useReflectedProp, i as checkHydratedRoot, m as nativeAttrs, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
+ import { i as checkPropInput, m as vuePropInputs, p as vPropValidity, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, renderSlot, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiBreadcrumbs.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = ["aria-label", "data-ui-breadcrumbs-prop-label"];