@threadlabs/looma 0.33.1 → 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/shared/overlay.js +8 -2
- package/components/shared/surface-material.js +21 -0
- package/components/ui-badge/ui-badge.html +11 -3
- package/components/ui-button/ui-button.html +92 -51
- package/components/ui-card/ui-card.html +50 -6
- package/components/ui-checkbox/ui-checkbox.html +4 -2
- package/components/ui-curve-editor/curve.js +10 -0
- package/components/ui-curve-editor/ui-curve-editor.html +181 -0
- package/components/ui-curve-editor/ui-curve-editor.js +51 -0
- package/components/ui-dialog/ui-dialog.html +64 -1
- package/components/ui-dialog/ui-dialog.js +9 -1
- package/components/ui-icon-button/ui-icon-button.html +97 -31
- 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 +62 -0
- package/components/ui-menu/ui-menu.js +1 -1
- package/components/ui-number-input/arithmetic.js +47 -0
- package/components/ui-number-input/ui-number-input.html +63 -0
- package/components/ui-number-input/ui-number-input.js +47 -0
- package/components/ui-popover/ui-popover.html +66 -1
- package/components/ui-popover/ui-popover.js +1 -1
- package/components/ui-select/ui-select.html +9 -7
- package/components/ui-slider/ui-slider.html +84 -0
- package/components/ui-slider/ui-slider.js +29 -0
- package/components/ui-switch/ui-switch.html +3 -0
- package/components/ui-tabs/ui-tabs.html +6 -1
- package/components/ui-text/ui-text.html +31 -6
- package/components/ui-textarea/ui-textarea.html +2 -1
- package/components/ui-tooltip/ui-tooltip.html +60 -0
- package/components/ui-tooltip/ui-tooltip.js +1 -1
- package/dist/index.js +47 -43
- package/docs/README.md +59 -5
- package/docs/card.html +16 -2
- package/docs/card.js +17 -2
- package/docs/catalog.json +1640 -108
- package/docs/customizer-render.mjs +50 -11
- package/docs/customizer.js +137 -24
- package/docs/documentation.css +9 -1
- package/docs/index.d.ts +8 -3
- package/docs/index.mjs +1 -1
- package/docs/preview.js +2 -0
- package/docs/render.mjs +16 -7
- package/docs/site.mjs +78 -27
- package/docs/theme-session.mjs +53 -0
- package/docs/theme.mjs +189 -18
- package/docs/value-editors.mjs +33 -0
- package/package.json +2 -2
- package/styles/ui-badge.css +11 -6
- package/styles/ui-button.css +74 -49
- package/styles/ui-card.css +51 -4
- package/styles/ui-checkbox.css +4 -2
- package/styles/ui-curve-editor.css +109 -0
- package/styles/ui-dialog.css +136 -0
- package/styles/ui-icon-button.css +85 -28
- 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 +74 -0
- package/styles/ui-number-input.css +34 -0
- package/styles/ui-popover.css +76 -0
- package/styles/ui-select.css +9 -7
- package/styles/ui-slider.css +53 -0
- package/styles/ui-switch.css +3 -0
- package/styles/ui-tabs.css +6 -1
- package/styles/ui-text.css +23 -1
- package/styles/ui-textarea.css +2 -1
- package/styles/ui-tooltip.css +72 -0
- package/theme-light.css +1 -0
- package/theme-system.css +69 -17
- package/tokens.css +12 -2
- package/vanilla/UiButton.d.ts +1 -0
- package/vanilla/UiButton.js +195 -130
- package/vanilla/UiCard.d.ts +1 -0
- package/vanilla/UiCard.js +12 -12
- package/vanilla/UiCurveEditor.d.ts +28 -0
- package/vanilla/UiCurveEditor.js +134 -0
- package/vanilla/UiIconButton.d.ts +2 -1
- package/vanilla/UiIconButton.js +58 -31
- package/vanilla/UiLightEditor.d.ts +29 -0
- package/vanilla/UiLightEditor.js +102 -0
- package/vanilla/UiNumberInput.d.ts +33 -0
- package/vanilla/UiNumberInput.js +86 -0
- package/vanilla/UiSlider.d.ts +33 -0
- package/vanilla/UiSlider.js +125 -0
- package/vanilla/UiText.d.ts +2 -2
- package/vanilla/UiText.js +45 -11
- package/vanilla/index.js +4 -0
- package/vue/UiBadge.vue +29 -4
- package/vue/UiButton.d.ts +6 -0
- package/vue/UiButton.vue +188 -60
- package/vue/UiCard.d.ts +6 -0
- package/vue/UiCard.vue +80 -6
- package/vue/UiCheckbox.vue +4 -2
- package/vue/UiCurveEditor.d.ts +53 -0
- package/vue/UiCurveEditor.js +2 -0
- package/vue/UiCurveEditor.vue +427 -0
- package/vue/UiDialog.vue +181 -1
- package/vue/UiIconButton.d.ts +8 -2
- package/vue/UiIconButton.vue +190 -45
- 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 +91 -0
- package/vue/UiNumberInput.d.ts +83 -0
- package/vue/UiNumberInput.js +2 -0
- package/vue/UiNumberInput.vue +399 -0
- package/vue/UiPopover.vue +94 -1
- package/vue/UiSelect.vue +16 -10
- package/vue/UiSlider.d.ts +83 -0
- package/vue/UiSlider.js +2 -0
- package/vue/UiSlider.vue +412 -0
- package/vue/UiSwitch.vue +3 -0
- package/vue/UiTabs.vue +6 -1
- package/vue/UiText.d.ts +7 -5
- package/vue/UiText.vue +104 -22
- package/vue/UiTextarea.vue +2 -1
- package/vue/UiTooltip.vue +89 -0
- package/vue/chunks/UiActionBar.js +1 -1
- package/vue/chunks/UiAffordanceScope.js +2 -2
- package/vue/chunks/UiAvatar.js +2 -2
- package/vue/chunks/UiAvatarGroup.js +2 -2
- package/vue/chunks/UiBadge.js +3 -3
- package/vue/chunks/UiBreadcrumbItem.js +2 -2
- package/vue/chunks/UiBreadcrumbs.js +2 -2
- package/vue/chunks/UiButton.js +94 -11
- package/vue/chunks/UiCallout.js +2 -2
- package/vue/chunks/UiCard.js +34 -5
- package/vue/chunks/UiCheckbox.js +3 -3
- package/vue/chunks/UiCluster.js +2 -2
- package/vue/chunks/UiColorPicker.js +2 -2
- package/vue/chunks/UiCombobox.js +2 -2
- package/vue/chunks/UiContainer.js +2 -2
- package/vue/chunks/UiContextMenu.js +2 -2
- package/vue/chunks/UiCover.js +2 -2
- package/vue/chunks/UiCurveEditor.js +413 -0
- package/vue/chunks/UiDescriptionItem.js +2 -2
- package/vue/chunks/UiDescriptionList.js +2 -2
- package/vue/chunks/UiDialog.js +4 -4
- package/vue/chunks/UiDisclosure.js +2 -2
- package/vue/chunks/UiEditable.js +2 -2
- package/vue/chunks/UiEditorBlockActions.js +2 -2
- package/vue/chunks/UiEditorChipEditor.js +2 -2
- package/vue/chunks/UiEditorCodeLanguage.js +2 -2
- package/vue/chunks/UiEditorFootnoteEditor.js +2 -2
- package/vue/chunks/UiEditorImageToolbar.js +3 -3
- package/vue/chunks/UiEditorInsertTableGrid.js +2 -2
- package/vue/chunks/UiEditorLinkCard.js +3 -3
- package/vue/chunks/UiEditorLinkForm.js +3 -3
- package/vue/chunks/UiEditorMentionMenu.js +2 -2
- package/vue/chunks/UiEditorMentionMenuItem.js +2 -2
- package/vue/chunks/UiEditorSlashMenu.js +2 -2
- package/vue/chunks/UiEditorSlashMenuGroup.js +2 -2
- package/vue/chunks/UiEditorSlashMenuItem.js +2 -2
- package/vue/chunks/UiEditorSurface.js +2 -2
- package/vue/chunks/UiEditorTableContextMenu.js +2 -2
- package/vue/chunks/UiEditorTableOverlay.js +2 -2
- package/vue/chunks/UiEditorTableToolbar.js +2 -2
- package/vue/chunks/UiEditorToolbar.js +2 -2
- package/vue/chunks/UiFloatingActionButton.js +2 -2
- package/vue/chunks/UiFormField.js +2 -2
- package/vue/chunks/UiGrid.js +2 -2
- package/vue/chunks/UiIcon.js +2 -2
- package/vue/chunks/UiIconButton.js +77 -11
- package/vue/chunks/UiImage.js +2 -2
- package/vue/chunks/UiInput.js +3 -3
- package/vue/chunks/UiInputGroup.js +3 -3
- package/vue/chunks/UiLightEditor.js +347 -0
- package/vue/chunks/UiList.js +2 -2
- package/vue/chunks/UiListItem.js +2 -2
- package/vue/chunks/UiListbox.js +2 -2
- package/vue/chunks/UiMenu.js +3 -3
- package/vue/chunks/UiMenuGroup.js +2 -2
- package/vue/chunks/UiMenuItem.js +2 -2
- package/vue/chunks/UiMeter.js +2 -2
- package/vue/chunks/UiNavItem.js +2 -2
- package/vue/chunks/UiNumberInput.js +403 -0
- package/vue/chunks/UiPageHeader.js +2 -2
- package/vue/chunks/UiPopover.js +4 -4
- package/vue/chunks/UiRadio.js +2 -2
- package/vue/chunks/UiRadioGroup.js +2 -2
- package/vue/chunks/UiReel.js +2 -2
- package/vue/chunks/UiScrollArea.js +2 -2
- package/vue/chunks/UiSearchResultRow.js +2 -2
- package/vue/chunks/UiSearchShell.js +2 -2
- package/vue/chunks/UiSection.js +2 -2
- package/vue/chunks/UiSelect.js +3 -3
- package/vue/chunks/UiSeparator.js +2 -2
- package/vue/chunks/UiSidebar.js +2 -2
- package/vue/chunks/UiSlider.js +396 -0
- package/vue/chunks/UiSpinner.js +2 -2
- package/vue/chunks/UiStack.js +2 -2
- package/vue/chunks/UiStatusMessage.js +2 -2
- package/vue/chunks/UiSwatch.js +2 -2
- package/vue/chunks/UiSwitch.js +3 -3
- package/vue/chunks/UiSwitcher.js +2 -2
- package/vue/chunks/UiTable.js +2 -2
- package/vue/chunks/UiTabs.js +3 -3
- package/vue/chunks/UiText.js +53 -12
- package/vue/chunks/UiTextarea.js +3 -3
- package/vue/chunks/UiToast.js +2 -2
- package/vue/chunks/UiToastRegion.js +2 -2
- package/vue/chunks/UiTooltip.js +3 -3
- package/vue/chunks/UiTopBar.js +1 -1
- package/vue/chunks/UiTree.js +2 -2
- package/vue/chunks/UiTreeItem.js +2 -2
- package/vue/chunks/_plugin-vue_export-helper.js +68 -2
- package/vue/chunks/props.js +24 -1
- package/vue/components.css +3391 -2139
- package/vue/editor/index.js +623 -211
- package/vue/index.d.ts +4 -0
- package/vue/index.js +6 -2
package/styles/ui-button.css
CHANGED
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
:scope:where([data-component~="ui-button"]) {
|
|
85
85
|
/* Optional inherited action-group values keep text and icon actions under the same light.
|
|
86
86
|
One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
|
|
87
|
-
|
|
87
|
+
The shared theme supplies reflections and glow independently of the resting lift. */
|
|
88
88
|
--_ui-action-start: 1px;
|
|
89
89
|
--_ui-action-edge: var(
|
|
90
90
|
--ui-action-edge,
|
|
@@ -92,6 +92,8 @@
|
|
|
92
92
|
inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
|
|
93
93
|
);
|
|
94
94
|
--_ui-action-shadow: var(--_ui-action-edge), 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
|
|
95
|
+
--_tone-highlight: var(--ui-accent-highlight, none);
|
|
96
|
+
--_tone-glow: var(--ui-accent-glow, 0 0 transparent);
|
|
95
97
|
--_hue: var(--ui-accent);
|
|
96
98
|
--_hue-hover: var(--ui-accent-hover);
|
|
97
99
|
--_hue-active: var(--ui-accent-active);
|
|
@@ -142,8 +144,8 @@
|
|
|
142
144
|
white-space: var(--ui-button-white-space, inherit);
|
|
143
145
|
line-height: var(--ui-line-height-tight);
|
|
144
146
|
padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-action-inset-md, var(--ui-space-3)) !important;
|
|
145
|
-
background-image: none;
|
|
146
|
-
box-shadow: var(--ui-button-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
|
|
147
|
+
background-image: var(--ui-surface-highlight, none);
|
|
148
|
+
box-shadow: var(--ui-button-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))), var(--_tone-glow);
|
|
147
149
|
cursor: pointer;
|
|
148
150
|
transition:
|
|
149
151
|
scale var(--ui-motion-press, var(--ui-motion-fast)) var(--ui-motion-ease),
|
|
@@ -167,7 +169,7 @@
|
|
|
167
169
|
|
|
168
170
|
/* A count is an adornment, not another line of label text. Keep the standard control height
|
|
169
171
|
with enough inset for a 24px mark; large content can still grow the button naturally. */
|
|
170
|
-
:scope:where([data-component~="ui-button"]):not([
|
|
172
|
+
:scope:where([data-component~="ui-button"]):not([data-appearance="link"]):has(.badge:not(:empty)) {
|
|
171
173
|
padding-block: var(--ui-space-0-5) !important;
|
|
172
174
|
}
|
|
173
175
|
|
|
@@ -212,7 +214,7 @@
|
|
|
212
214
|
|
|
213
215
|
/* Card actions inherit Button's palette and behavior; only their shared layout changes.
|
|
214
216
|
The icon may contain any decorative composition. Empty icons remove their column. */
|
|
215
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
217
|
+
:scope:where([data-component~="ui-button"])[data-appearance="card"] {
|
|
216
218
|
display: grid !important;
|
|
217
219
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
218
220
|
align-content: center !important;
|
|
@@ -225,10 +227,10 @@
|
|
|
225
227
|
box-shadow: none;
|
|
226
228
|
background-image: none;
|
|
227
229
|
}
|
|
228
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
230
|
+
:scope:where([data-component~="ui-button"])[data-appearance="card"][size="lg"] {
|
|
229
231
|
min-block-size: max(var(--ui-control-min-block-size), var(--ui-control-size-lg));
|
|
230
232
|
}
|
|
231
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
233
|
+
:scope:where([data-component~="ui-button"])[data-appearance="card"]:has(.card-icon:empty) {
|
|
232
234
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
233
235
|
}
|
|
234
236
|
.card-icon {
|
|
@@ -255,11 +257,11 @@
|
|
|
255
257
|
}
|
|
256
258
|
|
|
257
259
|
/* A neutral card encloses content quietly; ordinary outlines keep their action-tone edge. */
|
|
258
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
260
|
+
:scope:where([data-component~="ui-button"])[data-appearance="card"][data-tone="neutral"] {
|
|
259
261
|
border-color: var(--ui-button-border, var(--ui-border));
|
|
260
262
|
}
|
|
261
263
|
|
|
262
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
264
|
+
:scope:where([data-component~="ui-button"])[data-appearance="card"][data-tone="neutral"]:hover:not(:disabled, [aria-disabled="true"]) {
|
|
263
265
|
border-color: var(--ui-button-hover-border, var(--ui-border-strong));
|
|
264
266
|
}
|
|
265
267
|
|
|
@@ -271,19 +273,20 @@
|
|
|
271
273
|
box-shadow: var(--ui-pressed);
|
|
272
274
|
}
|
|
273
275
|
|
|
274
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
276
|
+
:scope:where([data-component~="ui-button"])[data-appearance="solid"], :scope:where([data-component~="ui-button"])[data-appearance="danger"] {
|
|
275
277
|
border-color: var(--_tone);
|
|
276
278
|
background-color: var(--_tone);
|
|
277
279
|
color: var(--_on-tone);
|
|
278
|
-
|
|
280
|
+
background-image: var(--_tone-highlight);
|
|
281
|
+
box-shadow: var(--ui-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))), var(--_tone-glow);
|
|
279
282
|
}
|
|
280
283
|
|
|
281
|
-
:is(:scope:where([data-component~="ui-button"])[data-
|
|
284
|
+
:is(:scope:where([data-component~="ui-button"])[data-appearance="solid"], :scope:where([data-component~="ui-button"])[data-appearance="danger"]):hover:not(:disabled, [aria-disabled="true"]) {
|
|
282
285
|
background-color: var(--_tone-hover);
|
|
283
286
|
border-color: var(--_tone-hover);
|
|
284
287
|
}
|
|
285
288
|
|
|
286
|
-
:is(:scope:where([data-component~="ui-button"])[data-
|
|
289
|
+
:is(:scope:where([data-component~="ui-button"])[data-appearance="solid"], :scope:where([data-component~="ui-button"])[data-appearance="danger"]):active:not(:disabled, [aria-disabled="true"]) {
|
|
287
290
|
background-color: var(--_tone-active);
|
|
288
291
|
border-color: var(--_tone-active);
|
|
289
292
|
background-image: none;
|
|
@@ -292,7 +295,9 @@
|
|
|
292
295
|
|
|
293
296
|
/* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
|
|
294
297
|
destructive secondary action, not a special case. */
|
|
295
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
298
|
+
:scope:where([data-component~="ui-button"])[data-tone="neutral"] {
|
|
299
|
+
--_tone-highlight: var(--ui-neutral-highlight, none);
|
|
300
|
+
--_tone-glow: var(--ui-neutral-glow, 0 0 transparent);
|
|
296
301
|
--_hue: var(--ui-text);
|
|
297
302
|
--_hue-hover: var(--ui-text);
|
|
298
303
|
--_hue-active: var(--ui-text);
|
|
@@ -300,40 +305,60 @@
|
|
|
300
305
|
--_on-hue: var(--ui-surface);
|
|
301
306
|
}
|
|
302
307
|
|
|
303
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
308
|
+
:scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="solid"] {
|
|
309
|
+
border-color: var(--ui-button-border, var(--ui-control-border));
|
|
310
|
+
background-color: var(--ui-button-surface, var(--ui-neutral-surface));
|
|
311
|
+
color: var(--ui-button-text, var(--ui-text));
|
|
312
|
+
}
|
|
313
|
+
:scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="solid"]:hover:not(:disabled, [aria-disabled="true"]) {
|
|
314
|
+
background-color: var(--ui-button-hover-surface, var(--ui-neutral-hover));
|
|
315
|
+
}
|
|
316
|
+
:scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="solid"]:active:not(:disabled, [aria-disabled="true"]) {
|
|
317
|
+
background-color: var(--ui-button-active-surface, var(--ui-neutral-active));
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
:scope:where([data-component~="ui-button"])[data-tone="danger"], :scope:where([data-component~="ui-button"])[data-appearance="danger"] {
|
|
321
|
+
--_tone-highlight: var(--ui-danger-highlight, none);
|
|
322
|
+
--_tone-glow: var(--ui-danger-glow, 0 0 transparent);
|
|
304
323
|
--_hue: var(--ui-danger);
|
|
305
324
|
--_hue-hover: var(--ui-danger-hover);
|
|
306
|
-
--_hue-active: var(--ui-danger-hover);
|
|
307
|
-
--_hue-text: var(--ui-danger-
|
|
325
|
+
--_hue-active: var(--ui-danger-active, var(--ui-danger-hover));
|
|
326
|
+
--_hue-text: var(--ui-danger-subtle-text);
|
|
308
327
|
--_on-hue: var(--ui-on-danger);
|
|
309
328
|
}
|
|
310
329
|
|
|
311
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
330
|
+
:scope:where([data-component~="ui-button"])[data-tone="success"] {
|
|
331
|
+
--_tone-highlight: var(--ui-success-highlight, none);
|
|
332
|
+
--_tone-glow: var(--ui-success-glow, 0 0 transparent);
|
|
312
333
|
--_hue: var(--ui-success);
|
|
313
|
-
--_hue-hover:
|
|
314
|
-
--_hue-active:
|
|
315
|
-
--_hue-text:
|
|
316
|
-
--_on-hue: var(--ui-
|
|
334
|
+
--_hue-hover: var(--ui-success-hover);
|
|
335
|
+
--_hue-active: var(--ui-success-active);
|
|
336
|
+
--_hue-text: var(--ui-success-subtle-text);
|
|
337
|
+
--_on-hue: var(--ui-success-on-strong);
|
|
317
338
|
}
|
|
318
339
|
|
|
319
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
340
|
+
:scope:where([data-component~="ui-button"])[data-tone="warning"] {
|
|
341
|
+
--_tone-highlight: var(--ui-warning-highlight, none);
|
|
342
|
+
--_tone-glow: var(--ui-warning-glow, 0 0 transparent);
|
|
320
343
|
--_hue: var(--ui-warning);
|
|
321
|
-
--_hue-hover:
|
|
322
|
-
--_hue-active:
|
|
323
|
-
--_hue-text:
|
|
324
|
-
--_on-hue: var(--ui-
|
|
344
|
+
--_hue-hover: var(--ui-warning-hover);
|
|
345
|
+
--_hue-active: var(--ui-warning-active);
|
|
346
|
+
--_hue-text: var(--ui-warning-subtle-text);
|
|
347
|
+
--_on-hue: var(--ui-warning-on-strong);
|
|
325
348
|
}
|
|
326
349
|
|
|
327
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
350
|
+
:scope:where([data-component~="ui-button"])[data-tone="info"] {
|
|
351
|
+
--_tone-highlight: var(--ui-info-highlight, none);
|
|
352
|
+
--_tone-glow: var(--ui-info-glow, 0 0 transparent);
|
|
328
353
|
--_hue: var(--ui-info);
|
|
329
|
-
--_hue-hover:
|
|
330
|
-
--_hue-active:
|
|
331
|
-
--_hue-text:
|
|
332
|
-
--_on-hue: var(--ui-
|
|
354
|
+
--_hue-hover: var(--ui-info-hover);
|
|
355
|
+
--_hue-active: var(--ui-info-active);
|
|
356
|
+
--_hue-text: var(--ui-info-subtle-text);
|
|
357
|
+
--_on-hue: var(--ui-info-on-strong);
|
|
333
358
|
}
|
|
334
359
|
|
|
335
360
|
/* A value picker is a field, with Select's quiet edge and resting lift. */
|
|
336
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
361
|
+
:scope:where([data-component~="ui-button"])[data-appearance="field"] {
|
|
337
362
|
--_ui-field-shadow: var(--ui-shadow-sm);
|
|
338
363
|
border-color: var(--ui-button-border, var(--ui-control-border, var(--ui-border-strong)));
|
|
339
364
|
border-radius: var(--ui-button-radius, var(--ui-field-radius, var(--ui-radius-md)));
|
|
@@ -343,23 +368,23 @@
|
|
|
343
368
|
box-shadow: var(--ui-button-shadow, var(--_ui-field-shadow));
|
|
344
369
|
}
|
|
345
370
|
|
|
346
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
371
|
+
:scope:where([data-component~="ui-button"])[data-appearance="field"]:hover:not(:disabled, [aria-disabled="true"]) {
|
|
347
372
|
border-color: var(--ui-button-hover-border, var(--ui-control-border-hover, var(--ui-text-secondary)));
|
|
348
373
|
background-color: var(--ui-button-hover-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
|
|
349
374
|
}
|
|
350
375
|
|
|
351
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
376
|
+
:scope:where([data-component~="ui-button"])[data-appearance="field"]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
|
|
352
377
|
--_ui-field-shadow: var(--ui-pressed);
|
|
353
378
|
}
|
|
354
379
|
|
|
355
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
380
|
+
:scope:where([data-component~="ui-button"])[data-appearance="field"]:focus-visible {
|
|
356
381
|
border-color: var(--ui-control-focus, var(--ui-accent-solid));
|
|
357
382
|
box-shadow:
|
|
358
383
|
var(--ui-button-shadow, var(--_ui-field-shadow)),
|
|
359
384
|
var(--ui-control-focus-halo-shadow);
|
|
360
385
|
}
|
|
361
386
|
|
|
362
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
387
|
+
:scope:where([data-component~="ui-button"])[data-appearance="ghost"] {
|
|
363
388
|
border-color: transparent;
|
|
364
389
|
background: transparent;
|
|
365
390
|
box-shadow: none;
|
|
@@ -367,14 +392,14 @@
|
|
|
367
392
|
}
|
|
368
393
|
|
|
369
394
|
/* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
|
|
370
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
395
|
+
:scope:where([data-component~="ui-button"])[data-appearance="ghost"]:hover:not(:disabled, [aria-disabled="true"]) {
|
|
371
396
|
background-color: var(--ui-button-ghost-hover-surface, oklch(from var(--_tone) l c h / 10%));
|
|
372
397
|
border-color: transparent;
|
|
373
398
|
}
|
|
374
399
|
|
|
375
400
|
/* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
|
|
376
401
|
edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
|
|
377
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
402
|
+
:scope:where([data-component~="ui-button"])[data-appearance="ghost"]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
|
|
378
403
|
background-color: var(--ui-button-ghost-active-surface, color-mix(in oklch, var(--ui-surface), var(--_tone) 3%));
|
|
379
404
|
border-color: transparent;
|
|
380
405
|
box-shadow: inset 0 0 0 1px oklch(from var(--_tone) l c h / 10%), inset 0 1px 2px oklch(from var(--_tone) l c h / 8%);
|
|
@@ -388,13 +413,13 @@
|
|
|
388
413
|
var(--ui-focus-halo);
|
|
389
414
|
}
|
|
390
415
|
|
|
391
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
416
|
+
:scope:where([data-component~="ui-button"])[data-appearance="solid"]:focus-visible {
|
|
392
417
|
box-shadow:
|
|
393
418
|
var(--ui-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
|
|
394
419
|
var(--ui-focus-halo);
|
|
395
420
|
}
|
|
396
421
|
|
|
397
|
-
:is(:scope:where([data-component~="ui-button"])[data-
|
|
422
|
+
:is(:scope:where([data-component~="ui-button"])[data-appearance="ghost"], :scope:where([data-component~="ui-button"])[data-appearance="link"], :scope:where([data-component~="ui-button"])[data-appearance="card"]):focus-visible {
|
|
398
423
|
box-shadow: var(--ui-focus-halo);
|
|
399
424
|
}
|
|
400
425
|
|
|
@@ -416,7 +441,7 @@
|
|
|
416
441
|
}
|
|
417
442
|
|
|
418
443
|
/* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
|
|
419
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
444
|
+
:scope:where([data-component~="ui-button"])[data-appearance="ghost"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
|
|
420
445
|
background-color: var(--ui-disabled-surface);
|
|
421
446
|
border-color: transparent;
|
|
422
447
|
}
|
|
@@ -433,12 +458,12 @@
|
|
|
433
458
|
a link-style one keeps its text size, so a standalone one ("See all" under a list) needs the
|
|
434
459
|
area. xs sits inside a line of text the same way, so it keeps its size and gains the area too.
|
|
435
460
|
Only these need it: a hit area on every button would reach over its neighbours. */
|
|
436
|
-
html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-
|
|
461
|
+
html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-appearance="link"],
|
|
437
462
|
html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=xs"] {
|
|
438
463
|
position: relative;
|
|
439
464
|
}
|
|
440
465
|
|
|
441
|
-
html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-
|
|
466
|
+
html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-appearance="link"]::after,
|
|
442
467
|
html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-button"])[data-ui-button-state~="size=xs"]::after {
|
|
443
468
|
position: absolute;
|
|
444
469
|
inset: 50% auto auto 50%;
|
|
@@ -450,7 +475,7 @@
|
|
|
450
475
|
|
|
451
476
|
/* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
|
|
452
477
|
WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
|
|
453
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
478
|
+
:scope:where([data-component~="ui-button"])[data-appearance="link"] {
|
|
454
479
|
display: inline !important;
|
|
455
480
|
min-block-size: 0;
|
|
456
481
|
padding: 0 !important;
|
|
@@ -467,24 +492,24 @@
|
|
|
467
492
|
transition: color var(--ui-motion-fast) var(--ui-motion-ease), text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
|
|
468
493
|
}
|
|
469
494
|
|
|
470
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
495
|
+
:scope:where([data-component~="ui-button"])[data-appearance="link"]:hover:not(:disabled, [aria-disabled="true"]) {
|
|
471
496
|
color: var(--ui-button-link-hover-text, var(--ui-text-primary));
|
|
472
497
|
text-decoration-color: currentColor;
|
|
473
498
|
background: none;
|
|
474
499
|
transform: none;
|
|
475
500
|
}
|
|
476
501
|
|
|
477
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
502
|
+
:scope:where([data-component~="ui-button"])[data-appearance="link"]:active:not(:disabled, [aria-disabled="true"]) {
|
|
478
503
|
background: none;
|
|
479
504
|
transform: none;
|
|
480
505
|
}
|
|
481
506
|
|
|
482
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
507
|
+
:scope:where([data-component~="ui-button"])[data-appearance="link"]:is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
|
|
483
508
|
background: none;
|
|
484
509
|
border-color: transparent;
|
|
485
510
|
}
|
|
486
511
|
|
|
487
|
-
:scope:where([data-component~="ui-button"])[data-
|
|
512
|
+
:scope:where([data-component~="ui-button"])[data-appearance="link"]:focus-visible {
|
|
488
513
|
box-shadow: none;
|
|
489
514
|
/* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
|
|
490
515
|
outline: var(--ui-focus-width) solid var(--ui-focus-ring);
|
package/styles/ui-card.css
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
needs no layout of its own. */
|
|
12
12
|
:scope:where([data-component~="ui-card"]) {
|
|
13
13
|
--_ui-card-surface: var(--ui-surface-raised);
|
|
14
|
+
--_ui-card-elevation: 0 0 0 transparent;
|
|
14
15
|
--_ui-selection-context-surface: initial;
|
|
15
16
|
--_ui-selection-context-border: initial;
|
|
16
17
|
--_ui-selection-context-text: initial;
|
|
@@ -45,10 +46,54 @@
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
:scope:where([data-component~="ui-card"])[data-ui-card-state~="variant=elevated"] {
|
|
49
|
+
--_ui-card-elevation: var(--ui-shadow-lg);
|
|
48
50
|
border-color: var(--ui-border-subtle);
|
|
49
51
|
box-shadow: var(--ui-shadow-lg);
|
|
50
52
|
}
|
|
51
53
|
|
|
54
|
+
:scope:where([data-component~="ui-card"])[data-ui-card-state~="treatment=expressive"] {
|
|
55
|
+
--_ui-panel-glass: clamp(0, var(--ui-glassiness, 0), 1);
|
|
56
|
+
--_ui-panel-separation: clamp(0, var(--ui-surface-separation, 0), 1);
|
|
57
|
+
--_ui-panel-rim: calc((var(--_ui-panel-separation) + var(--_ui-panel-glass) * 0.25) * 0.65 * 8px);
|
|
58
|
+
border-width: calc(var(--ui-border-width) + var(--_ui-panel-rim));
|
|
59
|
+
border-color: transparent;
|
|
60
|
+
background:
|
|
61
|
+
var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
|
|
62
|
+
linear-gradient(var(--_ui-card-surface), var(--_ui-card-surface)) padding-box,
|
|
63
|
+
linear-gradient(var(--ui-material-glass, var(--ui-surface-raised)), var(--ui-material-glass, var(--ui-surface-raised))) border-box,
|
|
64
|
+
var(--_ui-card-surface) padding-box;
|
|
65
|
+
box-shadow:
|
|
66
|
+
var(--_ui-card-elevation),
|
|
67
|
+
var(--ui-material-glow, 0 0 transparent),
|
|
68
|
+
inset 0 0 0 var(--ui-border-width) var(--ui-material-edge, var(--ui-border-strong));
|
|
69
|
+
backdrop-filter: blur(calc(var(--_ui-panel-glass) * 0.65 * 18px)) saturate(calc(1 + var(--_ui-panel-glass) * 0.65 * 0.18));
|
|
70
|
+
-webkit-backdrop-filter: blur(calc(var(--_ui-panel-glass) * 0.65 * 18px)) saturate(calc(1 + var(--_ui-panel-glass) * 0.65 * 0.18));
|
|
71
|
+
}
|
|
72
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
73
|
+
:scope:where([data-component~="ui-card"])[data-ui-card-state~="treatment=expressive"] {
|
|
74
|
+
background: var(--_ui-card-surface);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
78
|
+
:scope:where([data-component~="ui-card"])[data-ui-card-state~="treatment=expressive"] {
|
|
79
|
+
background: var(--_ui-card-surface);
|
|
80
|
+
border-width: var(--ui-border-width);
|
|
81
|
+
border-color: var(--ui-border-strong);
|
|
82
|
+
backdrop-filter: none;
|
|
83
|
+
-webkit-backdrop-filter: none;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
@media (forced-colors: active) {
|
|
87
|
+
:scope:where([data-component~="ui-card"])[data-ui-card-state~="treatment=expressive"] {
|
|
88
|
+
background: Canvas;
|
|
89
|
+
color: CanvasText;
|
|
90
|
+
border: var(--ui-border-width) solid CanvasText;
|
|
91
|
+
box-shadow: none;
|
|
92
|
+
backdrop-filter: none;
|
|
93
|
+
-webkit-backdrop-filter: none;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
52
97
|
:scope:where([data-component~="ui-card"])[data-ui-card-state~="tone=accent"] {
|
|
53
98
|
border-color: color-mix(in srgb, var(--ui-accent) 25%, var(--ui-border-default));
|
|
54
99
|
--_ui-card-surface: color-mix(in srgb, var(--ui-accent) 6%, var(--ui-surface-default));
|
|
@@ -75,10 +120,6 @@
|
|
|
75
120
|
|
|
76
121
|
:scope:where([data-component~="ui-card"])[data-ui-card-state~="tone=danger"] {
|
|
77
122
|
border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
|
|
78
|
-
border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
|
|
79
|
-
/* An accent edge keeps the corners on its side straight. */
|
|
80
|
-
border-start-start-radius: 0;
|
|
81
|
-
border-end-start-radius: 0;
|
|
82
123
|
--_ui-card-surface: var(--ui-danger-soft);
|
|
83
124
|
}
|
|
84
125
|
|
|
@@ -116,6 +157,12 @@
|
|
|
116
157
|
@scope ([data-component~="ui-card"]) to ([data-component]) {
|
|
117
158
|
/* A surface that groups content. Its children stack with even space between them, so a card
|
|
118
159
|
needs no layout of its own. */
|
|
160
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
161
|
+
}
|
|
162
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
163
|
+
}
|
|
164
|
+
@media (forced-colors: active) {
|
|
165
|
+
}
|
|
119
166
|
|
|
120
167
|
/* A colored panel shades rows in its own hue, without changing button intent. */
|
|
121
168
|
|
package/styles/ui-checkbox.css
CHANGED
|
@@ -91,7 +91,8 @@
|
|
|
91
91
|
margin: max(0px, calc((1lh - var(--_ui-checkbox-size, 1.125rem)) / 2)) 0 0 !important;
|
|
92
92
|
border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
|
|
93
93
|
border-radius: min(var(--ui-radius-sm), calc(var(--_ui-checkbox-size, 1.125rem) / 4));
|
|
94
|
-
background: var(--ui-control-surface, var(--ui-surface-default));
|
|
94
|
+
background-color: var(--ui-control-surface, var(--ui-surface-default));
|
|
95
|
+
background-image: var(--ui-surface-highlight, none);
|
|
95
96
|
box-shadow: var(--ui-control-inset);
|
|
96
97
|
cursor: pointer;
|
|
97
98
|
transition:
|
|
@@ -110,7 +111,8 @@
|
|
|
110
111
|
input:checked,
|
|
111
112
|
input:indeterminate {
|
|
112
113
|
border-color: var(--ui-accent-solid);
|
|
113
|
-
background: var(--ui-accent-solid);
|
|
114
|
+
background-color: var(--ui-accent-solid);
|
|
115
|
+
background-image: var(--ui-accent-highlight, none);
|
|
114
116
|
box-shadow: var(--ui-control-inset);
|
|
115
117
|
}
|
|
116
118
|
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
|
|
2
|
+
@supports (-moz-appearance: none) {
|
|
3
|
+
:where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
|
|
4
|
+
:where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
|
|
5
|
+
}
|
|
6
|
+
@supports (-moz-appearance: none) {
|
|
7
|
+
[data-component~="ui-curve-editor"] { --html-next-scope-owner: "ui-curve-editor" !important; }
|
|
8
|
+
}
|
|
9
|
+
@scope ([data-component~="ui-curve-editor"]) to ([data-component], [data-slotted]) {
|
|
10
|
+
:scope:where([data-component~="ui-curve-editor"]) {
|
|
11
|
+
display: grid !important;
|
|
12
|
+
gap: var(--ui-space-3) !important;
|
|
13
|
+
margin: 0 !important;
|
|
14
|
+
padding: 0 !important;
|
|
15
|
+
min-inline-size: 0;
|
|
16
|
+
}
|
|
17
|
+
.plot-frame {
|
|
18
|
+
box-sizing: border-box !important;
|
|
19
|
+
display: block !important;
|
|
20
|
+
block-size: 12rem;
|
|
21
|
+
padding: max(var(--ui-space-4), 0.75rem, calc(var(--ui-control-min-block-size) / 2)) !important;
|
|
22
|
+
margin: 0 !important;
|
|
23
|
+
border: var(--ui-border-width) solid var(--ui-control-border);
|
|
24
|
+
border-radius: var(--ui-field-radius, var(--ui-radius-md));
|
|
25
|
+
background: var(--ui-control-surface, var(--ui-surface));
|
|
26
|
+
}
|
|
27
|
+
.plot {
|
|
28
|
+
position: relative;
|
|
29
|
+
display: block !important;
|
|
30
|
+
inline-size: 100%;
|
|
31
|
+
block-size: 100%;
|
|
32
|
+
}
|
|
33
|
+
svg {
|
|
34
|
+
inline-size: 100%;
|
|
35
|
+
block-size: 100%;
|
|
36
|
+
overflow: visible;
|
|
37
|
+
}
|
|
38
|
+
path {
|
|
39
|
+
fill: none;
|
|
40
|
+
stroke: var(--ui-accent-solid);
|
|
41
|
+
stroke-width: 2;
|
|
42
|
+
vector-effect: non-scaling-stroke;
|
|
43
|
+
}
|
|
44
|
+
.guide {
|
|
45
|
+
stroke: var(--ui-control-border);
|
|
46
|
+
stroke-width: 1;
|
|
47
|
+
}
|
|
48
|
+
.handle {
|
|
49
|
+
position: absolute;
|
|
50
|
+
left: 25%;
|
|
51
|
+
top: 63.333%;
|
|
52
|
+
translate: -50% -50%;
|
|
53
|
+
inline-size: max(1.5rem, var(--ui-control-min-block-size));
|
|
54
|
+
block-size: max(1.5rem, var(--ui-control-min-block-size));
|
|
55
|
+
border: 0;
|
|
56
|
+
border-radius: 50%;
|
|
57
|
+
background: transparent;
|
|
58
|
+
color: var(--ui-text-primary);
|
|
59
|
+
touch-action: none;
|
|
60
|
+
cursor: grab;
|
|
61
|
+
padding: 0 !important;
|
|
62
|
+
margin: 0 !important;
|
|
63
|
+
}
|
|
64
|
+
.second {
|
|
65
|
+
top: 33.333%;
|
|
66
|
+
}
|
|
67
|
+
.handle:where(:not([data-component], [data-slotted]))::after {
|
|
68
|
+
content: "";
|
|
69
|
+
position: absolute;
|
|
70
|
+
inset: 25%;
|
|
71
|
+
border: var(--ui-border-width) solid var(--ui-accent-solid);
|
|
72
|
+
background: var(--ui-surface-raised);
|
|
73
|
+
border-radius: 50%;
|
|
74
|
+
box-shadow: var(--ui-shadow-xs);
|
|
75
|
+
}
|
|
76
|
+
.handle:where(:not([data-component], [data-slotted]))::before {
|
|
77
|
+
content: "";
|
|
78
|
+
position: absolute;
|
|
79
|
+
inset: 40%;
|
|
80
|
+
background: var(--ui-accent-solid);
|
|
81
|
+
border-radius: 50%;
|
|
82
|
+
z-index: 1;
|
|
83
|
+
}
|
|
84
|
+
.handle:focus-visible {
|
|
85
|
+
outline: var(--ui-focus-width) solid var(--ui-control-focus, var(--ui-accent-solid));
|
|
86
|
+
outline-offset: var(--ui-space-1);
|
|
87
|
+
}
|
|
88
|
+
.handle:disabled {
|
|
89
|
+
cursor: not-allowed;
|
|
90
|
+
}
|
|
91
|
+
.coordinates {
|
|
92
|
+
display: grid !important;
|
|
93
|
+
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
|
94
|
+
gap: var(--ui-space-2) !important;
|
|
95
|
+
}
|
|
96
|
+
.coordinate {
|
|
97
|
+
display: grid !important;
|
|
98
|
+
gap: var(--ui-space-1) !important;
|
|
99
|
+
font-size: var(--ui-font-size-sm);
|
|
100
|
+
}
|
|
101
|
+
output {
|
|
102
|
+
overflow-wrap: anywhere;
|
|
103
|
+
font-family: var(--ui-font-mono, monospace);
|
|
104
|
+
font-size: var(--ui-font-size-sm);
|
|
105
|
+
}
|
|
106
|
+
:scope:where([data-component~="ui-curve-editor"])[hidden] {
|
|
107
|
+
display: none !important;
|
|
108
|
+
}
|
|
109
|
+
}
|