@threadlabs/looma 0.37.5 → 0.38.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 (56) hide show
  1. package/components/ui-button/ui-button.html +20 -5
  2. package/components/ui-combobox/ui-combobox.html +24 -3
  3. package/components/ui-combobox/ui-combobox.js +18 -3
  4. package/components/ui-icon-button/ui-icon-button.html +17 -8
  5. package/components/ui-menu-item/ui-menu-item.html +6 -1
  6. package/components/ui-select/ui-select.html +12 -0
  7. package/components/ui-skeleton/ui-skeleton.html +91 -0
  8. package/dist/index.js +1 -1
  9. package/docs/README.md +23 -10
  10. package/docs/catalog.json +246 -31
  11. package/docs/customizer-render.mjs +36 -20
  12. package/docs/customizer.js +76 -25
  13. package/docs/documentation.css +2 -0
  14. package/docs/palette.mjs +3 -3
  15. package/docs/site.mjs +1 -1
  16. package/docs/theme-session.mjs +1 -0
  17. package/docs/theme.mjs +11 -10
  18. package/package.json +2 -2
  19. package/styles/ui-button.css +19 -9
  20. package/styles/ui-combobox.css +40 -2
  21. package/styles/ui-icon-button.css +12 -2
  22. package/styles/ui-menu-item.css +6 -1
  23. package/styles/ui-select.css +9 -0
  24. package/styles/ui-skeleton.css +91 -0
  25. package/theme-system.css +7 -2
  26. package/vanilla/UiButton.js +1 -1
  27. package/vanilla/UiCombobox.d.ts +1 -0
  28. package/vanilla/UiCombobox.js +38 -37
  29. package/vanilla/UiIconButton.d.ts +1 -1
  30. package/vanilla/UiIconButton.js +1 -1
  31. package/vanilla/UiSelect.d.ts +1 -0
  32. package/vanilla/UiSelect.js +7 -7
  33. package/vanilla/UiSkeleton.d.ts +26 -0
  34. package/vanilla/UiSkeleton.js +42 -0
  35. package/vanilla/index.js +1 -0
  36. package/vue/UiButton.vue +30 -12
  37. package/vue/UiCombobox.d.ts +6 -0
  38. package/vue/UiCombobox.vue +70 -6
  39. package/vue/UiIconButton.d.ts +2 -2
  40. package/vue/UiIconButton.vue +23 -18
  41. package/vue/UiMenuItem.vue +6 -1
  42. package/vue/UiSelect.d.ts +6 -0
  43. package/vue/UiSelect.vue +30 -1
  44. package/vue/UiSkeleton.d.ts +37 -0
  45. package/vue/UiSkeleton.js +2 -0
  46. package/vue/UiSkeleton.vue +235 -0
  47. package/vue/chunks/UiButton.js +4 -4
  48. package/vue/chunks/UiCombobox.js +72 -46
  49. package/vue/chunks/UiIconButton.js +6 -7
  50. package/vue/chunks/UiMenuItem.js +1 -1
  51. package/vue/chunks/UiSelect.js +27 -2
  52. package/vue/chunks/UiSkeleton.js +151 -0
  53. package/vue/components.css +197 -25
  54. package/vue/editor/index.js +2 -3
  55. package/vue/index.d.ts +1 -0
  56. package/vue/index.js +2 -1
@@ -268,7 +268,6 @@
268
268
  background-color: var(--ui-button-hover-surface, oklch(from var(--_tone) l c h / 12%));
269
269
  }
270
270
 
271
- /* A neutral card encloses content quietly; ordinary outlines keep their action-tone edge. */
272
271
  :scope:where([data-component~="ui-button"])[data-appearance="card"][data-tone="neutral"] {
273
272
  border-color: var(--ui-button-border, var(--ui-border));
274
273
  }
@@ -277,6 +276,12 @@
277
276
  border-color: var(--ui-button-hover-border, var(--ui-border-strong));
278
277
  }
279
278
 
279
+ :scope:where([data-component~="ui-button"])[data-appearance="card"][aria-pressed="true"] {
280
+ background-color: var(--ui-selection-surface);
281
+ border-color: var(--ui-selection-border);
282
+ color: var(--ui-selection-text);
283
+ }
284
+
280
285
  /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
281
286
  :scope:where([data-component~="ui-button"]):active:not(:disabled, [aria-disabled="true"]) {
282
287
  scale: var(--ui-press-scale, 1);
@@ -324,6 +329,18 @@
324
329
  background-color: var(--ui-button-surface, var(--ui-neutral-surface));
325
330
  color: var(--ui-button-text, var(--ui-text));
326
331
  }
332
+ :scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="outline"] {
333
+ border-color: var(--ui-button-border, var(--ui-control-border));
334
+ background-color: var(--ui-button-surface, transparent);
335
+ }
336
+ :scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="outline"]:hover:not(:disabled, [aria-disabled="true"]) {
337
+ border-color: var(--ui-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border)));
338
+ background-color: var(--ui-button-hover-surface, var(--ui-neutral-hover));
339
+ }
340
+ :scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="outline"]:active:not(:disabled, [aria-disabled="true"]) {
341
+ border-color: var(--ui-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border)));
342
+ background-color: var(--ui-button-active-surface, var(--ui-neutral-active));
343
+ }
327
344
  :scope:where([data-component~="ui-button"])[data-tone="neutral"][data-appearance="solid"]:hover:not(:disabled, [aria-disabled="true"]) {
328
345
  background-color: var(--ui-button-hover-surface, var(--ui-neutral-hover));
329
346
  }
@@ -411,10 +428,8 @@
411
428
  border-color: transparent;
412
429
  }
413
430
 
414
- /* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
415
- edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
416
431
  :scope:where([data-component~="ui-button"])[data-appearance="ghost"]:is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
417
- background-color: var(--ui-button-ghost-active-surface, color-mix(in oklch, var(--ui-surface), var(--_tone) 3%));
432
+ background-color: var(--ui-button-ghost-active-surface, oklch(from var(--_tone) l c h / 18%));
418
433
  border-color: transparent;
419
434
  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%);
420
435
  }
@@ -548,8 +563,6 @@
548
563
  /* A link is never :enabled, so interactive states test "not unavailable" instead: for a button that
549
564
  is exactly :enabled, at the same specificity, and it also matches a link that can be followed. */
550
565
 
551
- /* A neutral card encloses content quietly; ordinary outlines keep their action-tone edge. */
552
-
553
566
  /* Pressed reads as pressed in: the highlight goes, and the shadow moves inside. */
554
567
 
555
568
  /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
@@ -559,9 +572,6 @@
559
572
 
560
573
  /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
561
574
 
562
- /* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
563
- edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
564
-
565
575
  /* A soft halo that transitions in with the other box-shadow changes, layered on the raised shadow. */
566
576
 
567
577
  /* A loading action stays visually active; only an explicitly disabled action takes the
@@ -136,6 +136,21 @@
136
136
  flex: 1 1 auto;
137
137
  min-inline-size: 0;
138
138
  }
139
+ .start {
140
+ display: flex !important;
141
+ align-items: center !important;
142
+ flex: none;
143
+ padding-inline-start: var(--ui-space-3) !important;
144
+ }
145
+ .start:empty {
146
+ display: none !important;
147
+ }
148
+ :scope:where([data-component~="ui-combobox"])[data-ui-combobox-state~="size=sm"] .start {
149
+ padding-inline-start: var(--ui-space-2) !important;
150
+ }
151
+ :scope:where([data-component~="ui-combobox"])[data-ui-combobox-state~="size=lg"] .start {
152
+ padding-inline-start: var(--ui-space-4) !important;
153
+ }
139
154
  /* A ghost icon button: the affordance is the mark, not a box around it. */
140
155
  .help {
141
156
  flex: none;
@@ -174,6 +189,10 @@
174
189
  block-size: var(--ui-icon-size-sm);
175
190
  }
176
191
 
192
+ :scope:where([data-component~="ui-combobox"])[data-ui-combobox-state~="muted"] input:not(:disabled) {
193
+ color: var(--ui-text-secondary);
194
+ }
195
+
177
196
  input:where(:not([data-component], [data-slotted]))::selection {
178
197
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
179
198
  color: inherit;
@@ -258,7 +277,7 @@
258
277
  padding: var(--ui-space-1) !important;
259
278
  border: var(--ui-border-width) solid var(--_ui-combobox-popup-border, var(--ui-overlay-border, var(--ui-border-strong)));
260
279
  border-radius: var(--_ui-combobox-popup-radius, var(--ui-overlay-radius, var(--ui-radius-md)));
261
- background: var(--_ui-combobox-popup-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
280
+ background: var(--_ui-combobox-popup-surface, var(--ui-material-content, var(--ui-surface-elevated)));
262
281
  color: var(--ui-text-primary);
263
282
  box-shadow: var(--_ui-combobox-popup-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
264
283
  }
@@ -537,6 +556,21 @@
537
556
  flex: 1 1 auto;
538
557
  min-inline-size: 0;
539
558
  }
559
+ .start:where(:scope, :scope *) {
560
+ display: flex !important;
561
+ align-items: center !important;
562
+ flex: none;
563
+ padding-inline-start: var(--ui-space-3) !important;
564
+ }
565
+ .start:empty:where(:scope, :scope *) {
566
+ display: none !important;
567
+ }
568
+ :where([data-component~="ui-combobox"])[data-ui-combobox-state~="size=sm"] .start:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-combobox"]))) {
569
+ padding-inline-start: var(--ui-space-2) !important;
570
+ }
571
+ :where([data-component~="ui-combobox"])[data-ui-combobox-state~="size=lg"] .start:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-combobox"]))) {
572
+ padding-inline-start: var(--ui-space-4) !important;
573
+ }
540
574
  /* A ghost icon button: the affordance is the mark, not a box around it. */
541
575
  .help:where(:scope, :scope *) {
542
576
  flex: none;
@@ -574,6 +608,10 @@
574
608
  block-size: var(--ui-icon-size-sm);
575
609
  }
576
610
 
611
+ :where([data-component~="ui-combobox"])[data-ui-combobox-state~="muted"] input:not(:disabled):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-combobox"]))) {
612
+ color: var(--ui-text-secondary);
613
+ }
614
+
577
615
  input:where(:not([data-component], [data-slotted]:not([data-slotted~="ui-combobox"]))):where(:scope, :scope *)::selection {
578
616
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
579
617
  color: inherit;
@@ -657,7 +695,7 @@
657
695
  padding: var(--ui-space-1) !important;
658
696
  border: var(--ui-border-width) solid var(--_ui-combobox-popup-border, var(--ui-overlay-border, var(--ui-border-strong)));
659
697
  border-radius: var(--_ui-combobox-popup-radius, var(--ui-overlay-radius, var(--ui-radius-md)));
660
- background: var(--_ui-combobox-popup-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
698
+ background: var(--_ui-combobox-popup-surface, var(--ui-material-content, var(--ui-surface-elevated)));
661
699
  color: var(--ui-text-primary);
662
700
  box-shadow: var(--_ui-combobox-popup-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
663
701
  }
@@ -172,10 +172,14 @@
172
172
  color: var(--_icon-button-text);
173
173
  }
174
174
 
175
- /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
175
+ /* Neutral actions share the same quiet surface and border roles as fields. */
176
176
  :scope:where([data-component~="ui-icon-button"])[data-tone="neutral"] {
177
177
  --_tone-highlight: var(--ui-neutral-highlight, none);
178
178
  --_tone-glow: var(--ui-neutral-glow, 0 0 transparent);
179
+ --_icon-button-outline-surface: transparent;
180
+ --_icon-button-border: var(--ui-control-border);
181
+ --_icon-button-hover-border: var(--ui-control-border-hover, var(--ui-control-border));
182
+ --_icon-button-text: var(--ui-text);
179
183
  --_icon-button-solid-surface: var(--ui-neutral-surface);
180
184
  --_icon-button-solid-hover-surface: var(--ui-neutral-hover);
181
185
  --_icon-button-solid-text: var(--ui-text);
@@ -363,6 +367,12 @@
363
367
  :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"]:hover:enabled:not([aria-disabled="true"]) {
364
368
  border-color: var(--ui-icon-button-hover-border, var(--_icon-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border))));
365
369
  }
370
+ :scope:where([data-component~="ui-icon-button"])[data-tone="neutral"][data-appearance="outline"]:hover:enabled:not([aria-disabled="true"]) {
371
+ background-color: var(--ui-icon-button-hover-surface, var(--ui-neutral-hover));
372
+ }
373
+ :scope:where([data-component~="ui-icon-button"])[data-tone="neutral"][data-appearance="outline"]:active:enabled:not([aria-disabled="true"]) {
374
+ background-color: var(--ui-icon-button-active-surface, var(--ui-neutral-active));
375
+ }
366
376
 
367
377
  :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"]:hover:enabled:not([aria-disabled="true"]) {
368
378
  background-color: var(--ui-icon-button-solid-hover-surface, var(--_icon-button-solid-hover-surface, var(--ui-accent-hover)));
@@ -487,7 +497,7 @@
487
497
  @scope ([data-component~="ui-icon-button"]) to ([data-component]) {
488
498
  /* This component's hooks style the element they are set on, and never a nested one. */
489
499
 
490
- /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
500
+ /* Neutral actions share the same quiet surface and border roles as fields. */
491
501
 
492
502
  /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
493
503
  proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
@@ -131,7 +131,12 @@
131
131
  }
132
132
 
133
133
  :scope:where([data-component~="ui-menu-item"]):is(:hover, :focus-visible):not([aria-disabled="true"]) {
134
- background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
134
+ background: var(--ui-menu-item-hover-surface, var(--ui-accent-subtle));
135
+ }
136
+
137
+ :scope:where([data-component~="ui-menu-item"])[aria-checked="true"]:not([aria-disabled="true"]) {
138
+ background: var(--ui-selection-surface);
139
+ color: var(--ui-selection-text);
135
140
  }
136
141
 
137
142
  :scope:where([data-component~="ui-menu-item"]):focus-visible {
@@ -88,6 +88,10 @@
88
88
  background-size: 1.125rem 1.125rem, 100% 100%;
89
89
  }
90
90
 
91
+ :scope:where([data-component~="ui-select"])[data-ui-select-state~="muted"] {
92
+ color: var(--ui-text-secondary);
93
+ }
94
+
91
95
  :scope:where([data-component~="ui-select"]):hover:not(:focus):not(:disabled):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
92
96
  border-color: var(--ui-select-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)));
93
97
  }
@@ -160,6 +164,11 @@
160
164
 
161
165
  /* The select draws its own chevron: the native caret cannot be inset or sized consistently.
162
166
  * The root stays a native <s-lect>, so the icon is a background image rather than an element. */
167
+ :scope:where([data-component~="ui-select"])[data-ui-select-state~="muted"] :where([data-slotted], [data-slotted] *):is(option),
168
+ :scope:where([data-component~="ui-select"])[data-ui-select-state~="muted"] :where([data-slotted], [data-slotted] *):is(optgroup) {
169
+ color: var(--ui-text-primary);
170
+ background-color: var(--ui-control-surface);
171
+ }
163
172
 
164
173
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
165
174
 
@@ -0,0 +1,91 @@
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-skeleton"] { --html-next-scope-owner: "ui-skeleton" !important; }
8
+ }
9
+ @scope ([data-component~="ui-skeleton"]) to ([data-component], [data-slotted]) {
10
+ /* Dimensions belong to this placeholder, never a nested or neighbouring one. */
11
+ @property --ui-skeleton-width {
12
+ syntax: "*";
13
+ inherits: false;
14
+ }
15
+ @property --ui-skeleton-height {
16
+ syntax: "*";
17
+ inherits: false;
18
+ }
19
+
20
+ :scope:where([data-component~="ui-skeleton"]) {
21
+ display: block !important;
22
+ position: relative;
23
+ box-sizing: border-box !important;
24
+ flex: none;
25
+ min-inline-size: 0;
26
+ max-inline-size: 100%;
27
+ inline-size: var(--ui-skeleton-width, 100%);
28
+ block-size: var(--ui-skeleton-height, 1lh);
29
+ margin: 0 !important;
30
+ font: inherit;
31
+ }
32
+
33
+ :scope:where([data-component~="ui-skeleton"])::before {
34
+ content: "";
35
+ position: absolute;
36
+ inset: 0;
37
+ border-radius: var(--ui-radius-sm);
38
+ background: color-mix(in srgb, var(--ui-text-primary) 16%, transparent);
39
+ }
40
+
41
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="shape=text"]::before {
42
+ inset-block: 22%;
43
+ }
44
+
45
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="shape=circle"] {
46
+ inline-size: var(--ui-skeleton-width, calc(2.5rem + 2 * var(--ui-border-width)));
47
+ block-size: var(--ui-skeleton-height, auto);
48
+ aspect-ratio: 1;
49
+ }
50
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="shape=circle"]::before {
51
+ border-radius: var(--ui-radius-round);
52
+ }
53
+
54
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="shape=rectangle"] {
55
+ block-size: var(--ui-skeleton-height, 8rem);
56
+ }
57
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="shape=rectangle"]::before {
58
+ border-radius: var(--ui-radius-md);
59
+ }
60
+
61
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="animated"]::before {
62
+ animation: ui-skeleton-pulse 1.6s ease-in-out infinite;
63
+ }
64
+ @keyframes ui-skeleton-pulse {
65
+ 50% {
66
+ opacity: 0.45;
67
+ }
68
+ }
69
+ @media (prefers-reduced-motion: reduce) {
70
+ :scope:where([data-component~="ui-skeleton"])[data-ui-skeleton-state~="animated"]::before {
71
+ animation: none;
72
+ }
73
+ }
74
+ @media (forced-colors: active) {
75
+ :scope:where([data-component~="ui-skeleton"])::before {
76
+ background: CanvasText;
77
+ opacity: 0.2;
78
+ animation: none;
79
+ }
80
+ }
81
+ :scope:where([data-component~="ui-skeleton"])[hidden] {
82
+ display: none !important;
83
+ }
84
+ }
85
+ @scope ([data-component~="ui-skeleton"]) to ([data-component]) {
86
+ /* Dimensions belong to this placeholder, never a nested or neighbouring one. */
87
+ @media (prefers-reduced-motion: reduce) {
88
+ }
89
+ @media (forced-colors: active) {
90
+ }
91
+ }
package/theme-system.css CHANGED
@@ -14,6 +14,7 @@
14
14
  @layer theme {
15
15
  :root {
16
16
  --ui-spacing: 1;
17
+ --ui-rhythm: 1;
17
18
  --ui-control-roominess: 2.5;
18
19
  --ui-scale-ratio: 1.2;
19
20
  --ui-space-curve: 1;
@@ -36,7 +37,11 @@
36
37
  contrast cannot unexpectedly turn linear spacing into quadratic spacing. */
37
38
  --ui-control-size: calc(1rem * var(--ui-control-roominess));
38
39
  --_ui-theme-ratio: max(1, var(--ui-scale-ratio));
39
- --_ui-theme-unit: calc(1rem * 0.25 * max(0, var(--ui-spacing)));
40
+ --_ui-theme-unit: calc(1rem * 0.25 * max(0, var(--ui-spacing)) * clamp(0.75, var(--ui-rhythm), 1.5));
41
+ --ui-line-height-tight: clamp(1.1, calc(1.2 + (var(--ui-rhythm) - 1) * 0.2), 1.3);
42
+ --ui-line-height: clamp(1.35, calc(1.4 + (var(--ui-rhythm) - 1) * 0.4), 1.6);
43
+ --ui-line-height-md: var(--ui-line-height);
44
+ --ui-line-height-relaxed: calc(var(--ui-line-height) * 1.15);
40
45
  --_ui-theme-curve: max(0, var(--ui-space-curve));
41
46
  --ui-control-size-sm: calc(var(--ui-control-size) / var(--_ui-theme-ratio));
42
47
  --ui-control-size-md: var(--ui-control-size);
@@ -89,7 +94,7 @@
89
94
  --ui-elevation-dialog: var(--ui-shadow-lg);
90
95
  --ui-control-inset: inset calc(var(--_ui-light-inline) * var(--_ui-theme-inner)) calc(var(--_ui-light-block) * var(--_ui-theme-inner)) calc(3px * var(--_ui-theme-inner)) rgb(0 0 0 / 0.15), inset calc(-1 * var(--_ui-light-inline)) calc(-1 * var(--_ui-light-block)) 0 rgb(255 255 255 / calc(var(--_ui-theme-edge) * var(--ui-light-strength) * 0.18)), var(--ui-material-glow);
91
96
  --ui-pressed: inset calc(2 * var(--_ui-light-inline) * var(--_ui-theme-inner)) calc(2 * var(--_ui-light-block) * var(--_ui-theme-inner)) calc(4px * var(--_ui-theme-inner)) rgb(0 0 0 / 0.2);
92
- --ui-overlay-surface: color-mix(in srgb, var(--ui-surface-raised) calc((1 - clamp(0, var(--ui-overlay-translucency), 1)) * 100%), transparent);
97
+ --ui-overlay-surface: var(--ui-surface-raised);
93
98
  /* Decorative outer material is allowed to transmit the scene. Content keeps
94
99
  its own opaque plane; changing the scene cannot undermine text contrast. */
95
100
  --ui-material-content: var(--ui-surface-raised);
@@ -27,7 +27,7 @@ let P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P
27
27
  const S = { n: ["appearance","colorTone"], t: ["?","?"], f: import.meta.url, g: "ui-button", k: 0, r: readonlyView, a: (host, I) => C(host, I), b: generatedInputs };
28
28
  const A = [["a",{},[],"",[],["data-ui-button-state","data-ui-button-prop-align","data-ui-button-prop-as","data-ui-button-prop-disabled","data-ui-button-prop-href","data-ui-button-prop-loading","data-ui-button-prop-pending","data-ui-button-prop-preset","data-ui-button-prop-rel","data-ui-button-prop-shape","data-ui-button-prop-size","data-ui-button-prop-square","data-ui-button-prop-stretch","data-ui-button-prop-target","data-ui-button-prop-tone","data-ui-button-prop-type","data-ui-button-prop-variant","data-appearance","data-tone","href","target","rel","aria-disabled","aria-busy","tabindex"]],["button",{},[],"",[],["data-ui-button-state","data-ui-button-prop-align","data-ui-button-prop-as","data-ui-button-prop-disabled","data-ui-button-prop-href","data-ui-button-prop-loading","data-ui-button-prop-pending","data-ui-button-prop-preset","data-ui-button-prop-rel","data-ui-button-prop-shape","data-ui-button-prop-size","data-ui-button-prop-square","data-ui-button-prop-stretch","data-ui-button-prop-target","data-ui-button-prop-tone","data-ui-button-prop-type","data-ui-button-prop-variant","data-appearance","data-tone","type","disabled","aria-disabled","aria-busy"]],["a",{},[],"",[],["data-ui-button-state","data-ui-button-prop-align","data-ui-button-prop-as","data-ui-button-prop-disabled","data-ui-button-prop-href","data-ui-button-prop-loading","data-ui-button-prop-pending","data-ui-button-prop-preset","data-ui-button-prop-rel","data-ui-button-prop-shape","data-ui-button-prop-size","data-ui-button-prop-square","data-ui-button-prop-stretch","data-ui-button-prop-target","data-ui-button-prop-tone","data-ui-button-prop-type","data-ui-button-prop-variant","data-appearance","data-tone","href","target","rel","aria-disabled","aria-busy","tabindex"]],["button",{},[],"",[],["data-ui-button-state","data-ui-button-prop-align","data-ui-button-prop-as","data-ui-button-prop-disabled","data-ui-button-prop-href","data-ui-button-prop-loading","data-ui-button-prop-pending","data-ui-button-prop-preset","data-ui-button-prop-rel","data-ui-button-prop-shape","data-ui-button-prop-size","data-ui-button-prop-square","data-ui-button-prop-stretch","data-ui-button-prop-target","data-ui-button-prop-tone","data-ui-button-prop-type","data-ui-button-prop-variant","data-appearance","data-tone","type","disabled","aria-disabled","aria-busy"]]];
29
29
  const Q = [[],[],[],[]];
30
- const D = { g: "ui-button", props: { "align": { "required":false,"values":["center","start"],"default":"center", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "as": { "required":false,"values":["button","a"],"default":"button", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "disabled": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "href": { "required":false, c: checkString, t: "string", j: 0, m: "s" }, "loading": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "pending": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "preset": { "required":false,"values":["none","primary","standard","quiet","destructive"],"default":"none", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "rel": { "required":false, c: checkString, t: "string", j: 0, m: "s" }, "shape": { "required":false,"values":["rounded","pill"],"default":"rounded", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "size": { "required":false,"values":["xs","sm","md","lg"],"default":"md", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "square": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "stretch": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "target": { "required":false, c: checkString, t: "string", j: 0, m: "s" }, "tone": { "required":false,"values":["accent","neutral","danger","success","warning","info"],"default":"accent", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "type": { "required":false,"values":["button","submit","reset"],"default":"button", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "variant": { "required":false,"values":["outline","solid","danger","ghost","link","card","field"],"default":"outline", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] } } };
30
+ const D = { g: "ui-button", props: { "align": { "required":false,"values":["center","start"],"default":"center", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "as": { "required":false,"values":["button","a"],"default":"button", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "disabled": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "href": { "required":false, c: checkString, t: "string", j: 0, m: "s" }, "loading": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "pending": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "preset": { "required":false,"values":["none","primary","standard","quiet","destructive"],"default":"none", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "rel": { "required":false, c: checkString, t: "string", j: 0, m: "s" }, "shape": { "required":false,"values":["rounded","pill"],"default":"rounded", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "size": { "required":false,"values":["xs","sm","md","lg"],"default":"md", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "square": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "stretch": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "target": { "required":false, c: checkString, t: "string", j: 0, m: "s" }, "tone": { "required":false,"values":["accent","neutral","danger","success","warning","info"],"default":"neutral", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "type": { "required":false,"values":["button","submit","reset"],"default":"button", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "variant": { "required":false,"values":["outline","solid","danger","ghost","link","card","field"],"default":"outline", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] } } };
31
31
  const C = (host) => activateModule(controller, host);
32
32
 
33
33
  export function createUiButton(options = {}, html) {
@@ -36,6 +36,7 @@ export interface UiComboboxProps {
36
36
  labelVisibility?: "visible" | "sr-only" | null;
37
37
  loading?: boolean | null;
38
38
  multiple?: boolean | null;
39
+ muted?: boolean | null;
39
40
  name?: string | null;
40
41
  openOnFocus?: boolean | null;
41
42
  placeholder?: string | null;