@threadlabs/looma 0.34.0 → 0.35.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.
- package/components/ui-badge/ui-badge.html +11 -3
- package/components/ui-button/ui-button.html +29 -4
- package/components/ui-card/ui-card.html +15 -13
- package/components/ui-checkbox/ui-checkbox.html +4 -2
- package/components/ui-dialog/ui-dialog.html +2 -0
- package/components/ui-icon-button/ui-icon-button.html +22 -8
- package/components/ui-input/ui-input.html +2 -1
- package/components/ui-input-group/ui-input-group.html +4 -1
- package/components/ui-light-editor/ui-light-editor.html +45 -0
- package/components/ui-light-editor/ui-light-editor.js +53 -0
- package/components/ui-menu/ui-menu.html +2 -0
- package/components/ui-number-input/ui-number-input.html +2 -1
- package/components/ui-number-input/ui-number-input.js +6 -3
- package/components/ui-popover/ui-popover.html +2 -0
- package/components/ui-select/ui-select.html +9 -7
- package/components/ui-switch/ui-switch.html +3 -0
- package/components/ui-textarea/ui-textarea.html +2 -1
- package/dist/index.js +24 -23
- package/docs/README.md +26 -2
- package/docs/catalog.json +566 -44
- package/docs/customizer-render.mjs +24 -11
- package/docs/customizer.js +67 -17
- package/docs/index.d.ts +4 -1
- package/docs/index.mjs +1 -1
- package/docs/render.mjs +1 -1
- package/docs/site.mjs +30 -20
- package/docs/theme-session.mjs +4 -2
- package/docs/theme.mjs +59 -7
- package/package.json +2 -2
- package/styles/ui-badge.css +11 -6
- package/styles/ui-button.css +29 -4
- package/styles/ui-card.css +9 -9
- package/styles/ui-checkbox.css +4 -2
- package/styles/ui-dialog.css +4 -0
- package/styles/ui-icon-button.css +22 -8
- package/styles/ui-input-group.css +4 -1
- package/styles/ui-input.css +2 -1
- package/styles/ui-light-editor.css +28 -0
- package/styles/ui-menu.css +2 -0
- package/styles/ui-popover.css +2 -0
- package/styles/ui-select.css +9 -7
- package/styles/ui-switch.css +3 -0
- package/styles/ui-textarea.css +2 -1
- package/theme-light.css +1 -0
- package/theme-system.css +43 -7
- package/tokens.css +4 -0
- package/vanilla/UiCard.d.ts +2 -1
- package/vanilla/UiCard.js +12 -12
- package/vanilla/UiLightEditor.d.ts +29 -0
- package/vanilla/UiLightEditor.js +102 -0
- package/vanilla/UiNumberInput.js +27 -20
- package/vanilla/index.js +1 -0
- package/vue/UiBadge.vue +29 -4
- package/vue/UiButton.vue +33 -4
- package/vue/UiCard.d.ts +8 -2
- package/vue/UiCard.vue +41 -17
- package/vue/UiCheckbox.vue +4 -2
- package/vue/UiDialog.vue +4 -0
- package/vue/UiIconButton.vue +26 -11
- package/vue/UiInput.vue +2 -1
- package/vue/UiInputGroup.vue +4 -1
- package/vue/UiLightEditor.d.ts +75 -0
- package/vue/UiLightEditor.js +2 -0
- package/vue/UiLightEditor.vue +402 -0
- package/vue/UiMenu.vue +2 -0
- package/vue/UiNumberInput.vue +32 -3
- package/vue/UiPopover.vue +2 -0
- package/vue/UiSelect.vue +16 -10
- package/vue/UiSwitch.vue +3 -0
- package/vue/UiTextarea.vue +2 -1
- package/vue/chunks/UiBadge.js +1 -1
- package/vue/chunks/UiButton.js +1 -1
- package/vue/chunks/UiCard.js +33 -5
- package/vue/chunks/UiCheckbox.js +1 -1
- package/vue/chunks/UiDialog.js +1 -1
- package/vue/chunks/UiIconButton.js +1 -1
- package/vue/chunks/UiInput.js +1 -1
- package/vue/chunks/UiInputGroup.js +1 -1
- package/vue/chunks/UiLightEditor.js +347 -0
- package/vue/chunks/UiMenu.js +1 -1
- package/vue/chunks/UiNumberInput.js +21 -8
- package/vue/chunks/UiPopover.js +1 -1
- package/vue/chunks/UiSelect.js +1 -1
- package/vue/chunks/UiSwitch.js +1 -1
- package/vue/chunks/UiTextarea.js +1 -1
- package/vue/components.css +306 -66
- package/vue/index.d.ts +1 -0
- package/vue/index.js +2 -1
package/vue/UiCard.vue
CHANGED
|
@@ -51,17 +51,26 @@ const propValidityContract = {
|
|
|
51
51
|
required: false,
|
|
52
52
|
target: { attribute: 'tone' },
|
|
53
53
|
description:
|
|
54
|
-
'accent, info, success and
|
|
54
|
+
'accent, info, success, warning and danger add a quiet semantic surface without changing card geometry. Row highlights follow the\n surface hue; action controls retain their own intent.',
|
|
55
55
|
values: ['neutral', 'accent', 'info', 'success', 'warning', 'danger'],
|
|
56
56
|
default: 'neutral',
|
|
57
57
|
},
|
|
58
|
+
treatment: {
|
|
59
|
+
type: { kind: 'terminal', name: 'keyword' },
|
|
60
|
+
required: false,
|
|
61
|
+
target: { attribute: 'treatment' },
|
|
62
|
+
description:
|
|
63
|
+
'How much of the theme\'s decorative material the surface expresses. standard preserves its restrained treatment; expressive uses the full material treatment.\n This does not add elevation or require glass.',
|
|
64
|
+
values: ['standard', 'expressive'],
|
|
65
|
+
default: 'standard',
|
|
66
|
+
},
|
|
58
67
|
variant: {
|
|
59
68
|
type: { kind: 'terminal', name: 'keyword' },
|
|
60
69
|
required: false,
|
|
61
70
|
target: { attribute: 'variant' },
|
|
62
71
|
description:
|
|
63
|
-
'The surface. outlined is a bordered panel on the page; subtle is a quiet filled one with no border, for supporting details set apart from the flow;\n elevated
|
|
64
|
-
values: ['outlined', 'subtle', 'elevated'
|
|
72
|
+
'The surface. outlined is a bordered panel on the page; subtle is a quiet filled one with no border, for supporting details set apart from the flow;\n elevated adds a subtle lift above the page, for a view\'s one card, such as sign-in. Treatment independently controls decorative material.',
|
|
73
|
+
values: ['outlined', 'subtle', 'elevated'],
|
|
65
74
|
default: 'outlined',
|
|
66
75
|
},
|
|
67
76
|
},
|
|
@@ -75,9 +84,8 @@ const props = defineProps({
|
|
|
75
84
|
'neutral' | 'accent' | 'info' | 'success' | 'warning' | 'danger' | null
|
|
76
85
|
>,
|
|
77
86
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
},
|
|
87
|
+
treatment: { type: null as unknown as PropType<'standard' | 'expressive' | null> },
|
|
88
|
+
variant: { type: null as unknown as PropType<'outlined' | 'subtle' | 'elevated' | null> },
|
|
81
89
|
[BINDING_INPUTS_PROP]: { type: null as unknown as PropType<InputBindings> },
|
|
82
90
|
})
|
|
83
91
|
const acceptedProps: Record<string, unknown> = {
|
|
@@ -85,6 +93,7 @@ const acceptedProps: Record<string, unknown> = {
|
|
|
85
93
|
padding: 'md',
|
|
86
94
|
size: 'content',
|
|
87
95
|
tone: 'neutral',
|
|
96
|
+
treatment: 'standard',
|
|
88
97
|
variant: 'outlined',
|
|
89
98
|
}
|
|
90
99
|
const inputTracking = vuePropInputs(acceptedProps, {
|
|
@@ -92,6 +101,7 @@ const inputTracking = vuePropInputs(acceptedProps, {
|
|
|
92
101
|
padding: 'md',
|
|
93
102
|
size: 'content',
|
|
94
103
|
tone: 'neutral',
|
|
104
|
+
treatment: 'standard',
|
|
95
105
|
variant: 'outlined',
|
|
96
106
|
}, (name, value, source, values) => {
|
|
97
107
|
switch (name) {
|
|
@@ -103,6 +113,8 @@ const inputTracking = vuePropInputs(acceptedProps, {
|
|
|
103
113
|
return checkPropInput(value, { kind: 'terminal', name: 'keyword' }, true, true)
|
|
104
114
|
case 'tone':
|
|
105
115
|
return checkPropInput(value, { kind: 'terminal', name: 'keyword' }, true, true)
|
|
116
|
+
case 'treatment':
|
|
117
|
+
return checkPropInput(value, { kind: 'terminal', name: 'keyword' }, true, true)
|
|
106
118
|
case 'variant':
|
|
107
119
|
return checkPropInput(value, { kind: 'terminal', name: 'keyword' }, true, true)
|
|
108
120
|
default:
|
|
@@ -135,11 +147,16 @@ const checkedProps = computed(() => {
|
|
|
135
147
|
props['tone'],
|
|
136
148
|
props[BINDING_INPUTS_PROP],
|
|
137
149
|
) as 'neutral' | 'accent' | 'info' | 'success' | 'warning' | 'danger',
|
|
138
|
-
|
|
150
|
+
treatment: propInputs.value<'standard' | 'expressive' | null>(
|
|
151
|
+
'treatment',
|
|
152
|
+
props['treatment'],
|
|
153
|
+
props[BINDING_INPUTS_PROP],
|
|
154
|
+
) as 'standard' | 'expressive',
|
|
155
|
+
variant: propInputs.value<'outlined' | 'subtle' | 'elevated' | null>(
|
|
139
156
|
'variant',
|
|
140
157
|
props['variant'],
|
|
141
158
|
props[BINDING_INPUTS_PROP],
|
|
142
|
-
) as 'outlined' | 'subtle' | 'elevated'
|
|
159
|
+
) as 'outlined' | 'subtle' | 'elevated',
|
|
143
160
|
})
|
|
144
161
|
})
|
|
145
162
|
const inputStatus = (name: string, handlesError: boolean) => {
|
|
@@ -174,6 +191,9 @@ const hostState = computed(() =>
|
|
|
174
191
|
checkedProps.value.variant && 'variant',
|
|
175
192
|
checkedProps.value.variant != null
|
|
176
193
|
&& `variant=${encodeURIComponent(checkedProps.value.variant)}`,
|
|
194
|
+
checkedProps.value.treatment && 'treatment',
|
|
195
|
+
checkedProps.value.treatment != null
|
|
196
|
+
&& `treatment=${encodeURIComponent(checkedProps.value.treatment)}`,
|
|
177
197
|
checkedProps.value.tone && 'tone',
|
|
178
198
|
checkedProps.value.tone != null && `tone=${encodeURIComponent(checkedProps.value.tone)}`,
|
|
179
199
|
checkedProps.value.size && 'size',
|
|
@@ -194,6 +214,7 @@ const hostState = computed(() =>
|
|
|
194
214
|
:data-ui-card-prop-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
195
215
|
:data-ui-card-prop-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
196
216
|
:data-ui-card-prop-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
217
|
+
:data-ui-card-prop-treatment="reflectedProp('treatment', 'treatment', checkedProps.treatment, undefined, false)"
|
|
197
218
|
:data-ui-card-prop-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
198
219
|
:data-ui-card-state="hostState || undefined"
|
|
199
220
|
ref="@html-next/root"
|
|
@@ -211,6 +232,7 @@ const hostState = computed(() =>
|
|
|
211
232
|
:data-ui-card-prop-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
212
233
|
:data-ui-card-prop-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
213
234
|
:data-ui-card-prop-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
235
|
+
:data-ui-card-prop-treatment="reflectedProp('treatment', 'treatment', checkedProps.treatment, undefined, false)"
|
|
214
236
|
:data-ui-card-prop-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
215
237
|
:data-ui-card-state="hostState || undefined"
|
|
216
238
|
ref="@html-next/root"
|
|
@@ -228,6 +250,7 @@ const hostState = computed(() =>
|
|
|
228
250
|
:data-ui-card-prop-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
229
251
|
:data-ui-card-prop-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
230
252
|
:data-ui-card-prop-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
253
|
+
:data-ui-card-prop-treatment="reflectedProp('treatment', 'treatment', checkedProps.treatment, undefined, false)"
|
|
231
254
|
:data-ui-card-prop-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
232
255
|
:data-ui-card-state="hostState || undefined"
|
|
233
256
|
ref="@html-next/root"
|
|
@@ -245,6 +268,7 @@ const hostState = computed(() =>
|
|
|
245
268
|
:data-ui-card-prop-padding="reflectedProp('padding', 'padding', checkedProps.padding, undefined, false)"
|
|
246
269
|
:data-ui-card-prop-size="reflectedProp('size', 'size', checkedProps.size, undefined, false)"
|
|
247
270
|
:data-ui-card-prop-tone="reflectedProp('tone', 'tone', checkedProps.tone, undefined, false)"
|
|
271
|
+
:data-ui-card-prop-treatment="reflectedProp('treatment', 'treatment', checkedProps.treatment, undefined, false)"
|
|
248
272
|
:data-ui-card-prop-variant="reflectedProp('variant', 'variant', checkedProps.variant, undefined, false)"
|
|
249
273
|
:data-ui-card-state="hostState || undefined"
|
|
250
274
|
ref="@html-next/root"
|
|
@@ -264,6 +288,7 @@ const hostState = computed(() =>
|
|
|
264
288
|
@scope (.ui-card) to ([data-hn]) {
|
|
265
289
|
:global(:scope:where([data-hn-ui-card])) {
|
|
266
290
|
--_ui-card-surface: var(--ui-surface-raised);
|
|
291
|
+
--_ui-card-elevation: 0 0 0 transparent;
|
|
267
292
|
--_ui-selection-context-surface: initial;
|
|
268
293
|
--_ui-selection-context-border: initial;
|
|
269
294
|
--_ui-selection-context-text: initial;
|
|
@@ -298,11 +323,12 @@ const hostState = computed(() =>
|
|
|
298
323
|
}
|
|
299
324
|
|
|
300
325
|
:global(:scope[data-ui-card-state~="variant=elevated"]:where([data-hn-ui-card])) {
|
|
326
|
+
--_ui-card-elevation: var(--ui-shadow-lg);
|
|
301
327
|
border-color: var(--ui-border-subtle);
|
|
302
328
|
box-shadow: var(--ui-shadow-lg);
|
|
303
329
|
}
|
|
304
330
|
|
|
305
|
-
:global(:scope[data-ui-card-state~="
|
|
331
|
+
:global(:scope[data-ui-card-state~="treatment=expressive"]:where([data-hn-ui-card])) {
|
|
306
332
|
--_ui-panel-glass: clamp(0, var(--ui-glassiness, 0), 1);
|
|
307
333
|
--_ui-panel-separation: clamp(0, var(--ui-surface-separation, 0), 1);
|
|
308
334
|
--_ui-panel-rim: calc(
|
|
@@ -311,6 +337,7 @@ const hostState = computed(() =>
|
|
|
311
337
|
border-width: calc(var(--ui-border-width) + var(--_ui-panel-rim));
|
|
312
338
|
border-color: transparent;
|
|
313
339
|
background:
|
|
340
|
+
var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
|
|
314
341
|
linear-gradient(var(--_ui-card-surface), var(--_ui-card-surface)) padding-box,
|
|
315
342
|
linear-gradient(
|
|
316
343
|
var(--ui-material-glass, var(--ui-surface-raised)),
|
|
@@ -318,7 +345,8 @@ const hostState = computed(() =>
|
|
|
318
345
|
) border-box,
|
|
319
346
|
var(--_ui-card-surface) padding-box;
|
|
320
347
|
box-shadow:
|
|
321
|
-
var(--
|
|
348
|
+
var(--_ui-card-elevation),
|
|
349
|
+
var(--ui-material-glow, 0 0 transparent),
|
|
322
350
|
inset 0 0 0 var(--ui-border-width) var(--ui-material-edge, var(--ui-border-strong));
|
|
323
351
|
backdrop-filter: blur(calc(var(--_ui-panel-glass) * 0.65 * 18px))
|
|
324
352
|
saturate(calc(1 + var(--_ui-panel-glass) * 0.65 * 0.18));
|
|
@@ -326,12 +354,12 @@ const hostState = computed(() =>
|
|
|
326
354
|
saturate(calc(1 + var(--_ui-panel-glass) * 0.65 * 0.18));
|
|
327
355
|
}
|
|
328
356
|
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
329
|
-
:global(:scope[data-ui-card-state~="
|
|
357
|
+
:global(:scope[data-ui-card-state~="treatment=expressive"]:where([data-hn-ui-card])) {
|
|
330
358
|
background: var(--_ui-card-surface);
|
|
331
359
|
}
|
|
332
360
|
}
|
|
333
361
|
@media (prefers-reduced-transparency: reduce) {
|
|
334
|
-
:global(:scope[data-ui-card-state~="
|
|
362
|
+
:global(:scope[data-ui-card-state~="treatment=expressive"]:where([data-hn-ui-card])) {
|
|
335
363
|
background: var(--_ui-card-surface);
|
|
336
364
|
border-width: var(--ui-border-width);
|
|
337
365
|
border-color: var(--ui-border-strong);
|
|
@@ -340,7 +368,7 @@ const hostState = computed(() =>
|
|
|
340
368
|
}
|
|
341
369
|
}
|
|
342
370
|
@media (forced-colors: active) {
|
|
343
|
-
:global(:scope[data-ui-card-state~="
|
|
371
|
+
:global(:scope[data-ui-card-state~="treatment=expressive"]:where([data-hn-ui-card])) {
|
|
344
372
|
background: Canvas;
|
|
345
373
|
color: CanvasText;
|
|
346
374
|
border: var(--ui-border-width) solid CanvasText;
|
|
@@ -376,10 +404,6 @@ const hostState = computed(() =>
|
|
|
376
404
|
|
|
377
405
|
:global(:scope[data-ui-card-state~="tone=danger"]:where([data-hn-ui-card])) {
|
|
378
406
|
border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
|
|
379
|
-
border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
|
|
380
|
-
/* An accent edge keeps the corners on its side straight. */
|
|
381
|
-
border-start-start-radius: 0;
|
|
382
|
-
border-end-start-radius: 0;
|
|
383
407
|
--_ui-card-surface: var(--ui-danger-soft);
|
|
384
408
|
}
|
|
385
409
|
:global(:scope[data-ui-card-state~="tone=accent"]:where([data-hn-ui-card])),
|
package/vue/UiCheckbox.vue
CHANGED
|
@@ -472,7 +472,8 @@ useComponentHost(() => import('../components/ui-checkbox/ui-checkbox.js'), {
|
|
|
472
472
|
margin: max(0px, calc((1lh - var(--_ui-checkbox-size, 1.125rem)) / 2)) 0 0 !important;
|
|
473
473
|
border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
|
|
474
474
|
border-radius: min(var(--ui-radius-sm), calc(var(--_ui-checkbox-size, 1.125rem) / 4));
|
|
475
|
-
background: var(--ui-control-surface, var(--ui-surface-default));
|
|
475
|
+
background-color: var(--ui-control-surface, var(--ui-surface-default));
|
|
476
|
+
background-image: var(--ui-surface-highlight, none);
|
|
476
477
|
box-shadow: var(--ui-control-inset);
|
|
477
478
|
cursor: pointer;
|
|
478
479
|
transition:
|
|
@@ -491,7 +492,8 @@ useComponentHost(() => import('../components/ui-checkbox/ui-checkbox.js'), {
|
|
|
491
492
|
:global(input:checked:where([data-hn-ui-checkbox])),
|
|
492
493
|
:global(input:indeterminate:where([data-hn-ui-checkbox])) {
|
|
493
494
|
border-color: var(--ui-accent-solid);
|
|
494
|
-
background: var(--ui-accent-solid);
|
|
495
|
+
background-color: var(--ui-accent-solid);
|
|
496
|
+
background-image: var(--ui-accent-highlight, none);
|
|
495
497
|
box-shadow: var(--ui-control-inset);
|
|
496
498
|
}
|
|
497
499
|
:global(input:checked:where([data-hn-ui-checkbox])::after) {
|
package/vue/UiDialog.vue
CHANGED
|
@@ -452,6 +452,7 @@ useComponentHost(() => import('../components/ui-dialog/ui-dialog.js'), {
|
|
|
452
452
|
transparent
|
|
453
453
|
);
|
|
454
454
|
background:
|
|
455
|
+
var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
|
|
455
456
|
linear-gradient(var(--_ui-material-content-color), var(--_ui-material-content-color))
|
|
456
457
|
padding-box,
|
|
457
458
|
linear-gradient(var(--_ui-material-rim-color), var(--_ui-material-rim-color)) border-box,
|
|
@@ -474,6 +475,7 @@ useComponentHost(() => import('../components/ui-dialog/ui-dialog.js'), {
|
|
|
474
475
|
0 calc(var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 8px) calc(
|
|
475
476
|
var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 24px
|
|
476
477
|
) color-mix(in oklab, var(--ui-text-primary) 15%, transparent),
|
|
478
|
+
var(--ui-material-glow, 0 0 transparent),
|
|
477
479
|
inset 0 0 0 calc(var(--_ui-material-active) * var(--ui-border-width)) var(
|
|
478
480
|
--ui-material-edge,
|
|
479
481
|
var(--ui-border-strong)
|
|
@@ -729,6 +731,7 @@ useComponentHost(() => import('../components/ui-dialog/ui-dialog.js'), {
|
|
|
729
731
|
transparent
|
|
730
732
|
);
|
|
731
733
|
background:
|
|
734
|
+
var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
|
|
732
735
|
linear-gradient(var(--_ui-material-content-color), var(--_ui-material-content-color))
|
|
733
736
|
padding-box,
|
|
734
737
|
linear-gradient(var(--_ui-material-rim-color), var(--_ui-material-rim-color)) border-box,
|
|
@@ -751,6 +754,7 @@ useComponentHost(() => import('../components/ui-dialog/ui-dialog.js'), {
|
|
|
751
754
|
0 calc(var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 8px) calc(
|
|
752
755
|
var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 24px
|
|
753
756
|
) color-mix(in oklab, var(--ui-text-primary) 15%, transparent),
|
|
757
|
+
var(--ui-material-glow, 0 0 transparent),
|
|
754
758
|
inset 0 0 0 calc(var(--_ui-material-active) * var(--ui-border-width)) var(
|
|
755
759
|
--ui-material-edge,
|
|
756
760
|
var(--ui-border-strong)
|
package/vue/UiIconButton.vue
CHANGED
|
@@ -577,7 +577,9 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
577
577
|
:global(:scope:where([data-hn-ui-icon-button])) {
|
|
578
578
|
/* Optional inherited action-group values keep text and icon actions under the same light.
|
|
579
579
|
One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
|
|
580
|
-
|
|
580
|
+
The shared theme supplies reflections and glow independently of the resting lift. */
|
|
581
|
+
--_tone-highlight: var(--ui-accent-highlight, none);
|
|
582
|
+
--_tone-glow: var(--ui-accent-glow, 0 0 transparent);
|
|
581
583
|
--_ui-action-start: 1px;
|
|
582
584
|
--_ui-action-edge: var(
|
|
583
585
|
--ui-action-edge,
|
|
@@ -606,6 +608,8 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
606
608
|
}
|
|
607
609
|
|
|
608
610
|
:global(:scope[data-tone="accent"]:where([data-hn-ui-icon-button])) {
|
|
611
|
+
--_tone-highlight: var(--ui-accent-highlight, none);
|
|
612
|
+
--_tone-glow: var(--ui-accent-glow, 0 0 transparent);
|
|
609
613
|
--_icon-button-border: var(--ui-accent-solid);
|
|
610
614
|
--_icon-button-hover-border: var(--ui-accent-hover);
|
|
611
615
|
--_icon-button-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
|
|
@@ -618,6 +622,8 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
618
622
|
}
|
|
619
623
|
|
|
620
624
|
:global(:scope[data-tone="danger"]:where([data-hn-ui-icon-button])) {
|
|
625
|
+
--_tone-highlight: var(--ui-danger-highlight, none);
|
|
626
|
+
--_tone-glow: var(--ui-danger-glow, 0 0 transparent);
|
|
621
627
|
--_icon-button-border: var(--ui-danger);
|
|
622
628
|
--_icon-button-hover-border: var(--ui-danger-hover);
|
|
623
629
|
--_icon-button-text: var(--ui-danger-subtle-text);
|
|
@@ -633,6 +639,8 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
633
639
|
}
|
|
634
640
|
|
|
635
641
|
:global(:scope[data-tone="success"]:where([data-hn-ui-icon-button])) {
|
|
642
|
+
--_tone-highlight: var(--ui-success-highlight, none);
|
|
643
|
+
--_tone-glow: var(--ui-success-glow, 0 0 transparent);
|
|
636
644
|
--_icon-button-border: var(--ui-success);
|
|
637
645
|
--_icon-button-hover-border: var(--ui-success-hover);
|
|
638
646
|
--_icon-button-text: var(--ui-success-subtle-text);
|
|
@@ -648,6 +656,8 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
648
656
|
}
|
|
649
657
|
|
|
650
658
|
:global(:scope[data-tone="warning"]:where([data-hn-ui-icon-button])) {
|
|
659
|
+
--_tone-highlight: var(--ui-warning-highlight, none);
|
|
660
|
+
--_tone-glow: var(--ui-warning-glow, 0 0 transparent);
|
|
651
661
|
--_icon-button-border: var(--ui-warning);
|
|
652
662
|
--_icon-button-hover-border: var(--ui-warning-hover);
|
|
653
663
|
--_icon-button-text: var(--ui-warning-subtle-text);
|
|
@@ -663,6 +673,8 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
663
673
|
}
|
|
664
674
|
|
|
665
675
|
:global(:scope[data-tone="info"]:where([data-hn-ui-icon-button])) {
|
|
676
|
+
--_tone-highlight: var(--ui-info-highlight, none);
|
|
677
|
+
--_tone-glow: var(--ui-info-glow, 0 0 transparent);
|
|
666
678
|
--_icon-button-border: var(--ui-info);
|
|
667
679
|
--_icon-button-hover-border: var(--ui-info-hover);
|
|
668
680
|
--_icon-button-text: var(--ui-info-subtle-text);
|
|
@@ -677,9 +689,11 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
677
689
|
color: var(--_icon-button-text);
|
|
678
690
|
}
|
|
679
691
|
:global(:scope[data-tone="neutral"]:where([data-hn-ui-icon-button])) {
|
|
680
|
-
--
|
|
681
|
-
--
|
|
682
|
-
--_icon-button-solid-
|
|
692
|
+
--_tone-highlight: var(--ui-neutral-highlight, none);
|
|
693
|
+
--_tone-glow: var(--ui-neutral-glow, 0 0 transparent);
|
|
694
|
+
--_icon-button-solid-surface: var(--ui-neutral-surface);
|
|
695
|
+
--_icon-button-solid-hover-surface: var(--ui-neutral-hover);
|
|
696
|
+
--_icon-button-solid-text: var(--ui-text);
|
|
683
697
|
}
|
|
684
698
|
|
|
685
699
|
:global(:scope[data-ui-icon-button-state~="anticipatory"]:where([data-hn-ui-icon-button])) {
|
|
@@ -854,9 +868,11 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
854
868
|
--ui-icon-button-outline-surface,
|
|
855
869
|
var(--_icon-button-outline-surface, var(--ui-surface-default))
|
|
856
870
|
);
|
|
857
|
-
background-image: none;
|
|
871
|
+
background-image: var(--ui-surface-highlight, none);
|
|
858
872
|
color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
|
|
859
|
-
box-shadow:
|
|
873
|
+
box-shadow:
|
|
874
|
+
var(--ui-action-shadow, var(--_ui-action-shadow)),
|
|
875
|
+
var(--_tone-glow);
|
|
860
876
|
}
|
|
861
877
|
|
|
862
878
|
:global(:scope[data-appearance="solid"]:where([data-hn-ui-icon-button])) {
|
|
@@ -864,15 +880,14 @@ useComponentHost(() => import('../components/ui-icon-button/ui-icon-button.js'),
|
|
|
864
880
|
--ui-icon-button-solid-surface,
|
|
865
881
|
var(--_icon-button-solid-surface, var(--ui-accent-solid))
|
|
866
882
|
);
|
|
867
|
-
background-image:
|
|
883
|
+
background-image: var(--_tone-highlight);
|
|
868
884
|
color: var(
|
|
869
885
|
--ui-icon-button-solid-text,
|
|
870
886
|
var(--_icon-button-solid-text, var(--ui-text-on-accent))
|
|
871
887
|
);
|
|
872
|
-
box-shadow:
|
|
873
|
-
--ui-icon-button-solid-shadow,
|
|
874
|
-
var(--
|
|
875
|
-
);
|
|
888
|
+
box-shadow:
|
|
889
|
+
var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
|
|
890
|
+
var(--_tone-glow);
|
|
876
891
|
}
|
|
877
892
|
|
|
878
893
|
:global(:scope:hover:enabled:not([aria-disabled="true"]):where([data-hn-ui-icon-button])) {
|
package/vue/UiInput.vue
CHANGED
|
@@ -581,10 +581,11 @@ useComponentHost(() => import('../components/ui-input/ui-input.js'), {
|
|
|
581
581
|
--ui-input-radius,
|
|
582
582
|
var(--_ui-default-input-radius, var(--ui-field-radius, var(--ui-radius-md)))
|
|
583
583
|
);
|
|
584
|
-
background: var(
|
|
584
|
+
background-color: var(
|
|
585
585
|
--ui-input-surface,
|
|
586
586
|
var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated)))
|
|
587
587
|
);
|
|
588
|
+
background-image: var(--_ui-default-input-highlight, var(--ui-surface-highlight, none));
|
|
588
589
|
color: var(--ui-text-primary);
|
|
589
590
|
font: inherit;
|
|
590
591
|
line-height: var(--ui-line-height-tight);
|
package/vue/UiInputGroup.vue
CHANGED
|
@@ -279,6 +279,7 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
|
|
|
279
279
|
--_ui-default-input-focus-outline: none;
|
|
280
280
|
--_ui-default-input-radius: 0;
|
|
281
281
|
--_ui-default-input-surface: transparent;
|
|
282
|
+
--_ui-default-input-highlight: none;
|
|
282
283
|
--_ui-default-textarea-border-width: 0;
|
|
283
284
|
--_ui-default-textarea-border: transparent;
|
|
284
285
|
--_ui-default-textarea-border-hover: transparent;
|
|
@@ -290,6 +291,7 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
|
|
|
290
291
|
--_ui-default-textarea-focus-outline: none;
|
|
291
292
|
--_ui-default-textarea-radius: 0;
|
|
292
293
|
--_ui-default-textarea-surface: transparent;
|
|
294
|
+
--_ui-default-textarea-highlight: none;
|
|
293
295
|
|
|
294
296
|
display: flex !important;
|
|
295
297
|
align-items: stretch !important;
|
|
@@ -300,7 +302,8 @@ useComponentHost(() => import('../components/ui-input-group/ui-input-group.js'),
|
|
|
300
302
|
/* The frame reads the shared control tokens with a lone Input's fallbacks, so the two match. */
|
|
301
303
|
border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
|
|
302
304
|
border-radius: var(--ui-input-group-radius, var(--ui-field-radius, var(--ui-radius-md)));
|
|
303
|
-
background: var(--ui-control-surface, var(--ui-surface-elevated));
|
|
305
|
+
background-color: var(--ui-control-surface, var(--ui-surface-elevated));
|
|
306
|
+
background-image: var(--ui-surface-highlight, none);
|
|
304
307
|
box-shadow: var(--ui-control-inset);
|
|
305
308
|
overflow: hidden;
|
|
306
309
|
/* A press anywhere in the frame focuses the input. */
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { PropType } from 'vue';
|
|
2
|
+
import { type InputBindings } from './props.js';
|
|
3
|
+
declare var __VLS_1: {};
|
|
4
|
+
type __VLS_Slots = {} & {
|
|
5
|
+
default?: (props: typeof __VLS_1) => any;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
disabled: {
|
|
9
|
+
type: PropType<boolean | null>;
|
|
10
|
+
};
|
|
11
|
+
label: {
|
|
12
|
+
type: PropType<string | null>;
|
|
13
|
+
};
|
|
14
|
+
size: {
|
|
15
|
+
type: PropType<"sm" | "md" | "lg" | null>;
|
|
16
|
+
};
|
|
17
|
+
x: {
|
|
18
|
+
type: PropType<number | null>;
|
|
19
|
+
};
|
|
20
|
+
y: {
|
|
21
|
+
type: PropType<number | null>;
|
|
22
|
+
};
|
|
23
|
+
"\0htmlNextInputStatus": {
|
|
24
|
+
type: PropType<InputBindings>;
|
|
25
|
+
};
|
|
26
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
27
|
+
input: (event: CustomEvent<{
|
|
28
|
+
readonly x: number;
|
|
29
|
+
readonly y: number;
|
|
30
|
+
}>) => any;
|
|
31
|
+
change: (event: CustomEvent<{
|
|
32
|
+
readonly x: number;
|
|
33
|
+
readonly y: number;
|
|
34
|
+
}>) => any;
|
|
35
|
+
"update:x": (value: number) => any;
|
|
36
|
+
"update:y": (value: number) => any;
|
|
37
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
38
|
+
disabled: {
|
|
39
|
+
type: PropType<boolean | null>;
|
|
40
|
+
};
|
|
41
|
+
label: {
|
|
42
|
+
type: PropType<string | null>;
|
|
43
|
+
};
|
|
44
|
+
size: {
|
|
45
|
+
type: PropType<"sm" | "md" | "lg" | null>;
|
|
46
|
+
};
|
|
47
|
+
x: {
|
|
48
|
+
type: PropType<number | null>;
|
|
49
|
+
};
|
|
50
|
+
y: {
|
|
51
|
+
type: PropType<number | null>;
|
|
52
|
+
};
|
|
53
|
+
"\0htmlNextInputStatus": {
|
|
54
|
+
type: PropType<InputBindings>;
|
|
55
|
+
};
|
|
56
|
+
}>> & Readonly<{
|
|
57
|
+
onInput?: ((event: CustomEvent<{
|
|
58
|
+
readonly x: number;
|
|
59
|
+
readonly y: number;
|
|
60
|
+
}>) => any) | undefined;
|
|
61
|
+
onChange?: ((event: CustomEvent<{
|
|
62
|
+
readonly x: number;
|
|
63
|
+
readonly y: number;
|
|
64
|
+
}>) => any) | undefined;
|
|
65
|
+
"onUpdate:x"?: ((value: number) => any) | undefined;
|
|
66
|
+
"onUpdate:y"?: ((value: number) => any) | undefined;
|
|
67
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
68
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
69
|
+
declare const _default: typeof __VLS_export;
|
|
70
|
+
export default _default;
|
|
71
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
72
|
+
new (): {
|
|
73
|
+
$slots: S;
|
|
74
|
+
};
|
|
75
|
+
};
|