@threadlabs/looma 0.6.1 → 0.6.2

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 (37) hide show
  1. package/components/ui-avatar/ui-avatar.html +13 -0
  2. package/components/ui-avatar-group/ui-avatar-group.html +7 -2
  3. package/components/ui-avatar-group/ui-avatar-group.js +3 -3
  4. package/components/ui-badge/ui-badge.html +14 -0
  5. package/components/ui-combobox/ui-combobox.html +112 -46
  6. package/components/ui-combobox/ui-combobox.js +14 -2
  7. package/components/ui-menu-item/ui-menu-item.html +13 -0
  8. package/components/ui-tabs/ui-tabs.html +13 -0
  9. package/components/ui-tooltip/ui-tooltip.html +3 -0
  10. package/components/ui-tooltip/ui-tooltip.js +24 -3
  11. package/dist/index.js +1 -1
  12. package/package.json +1 -1
  13. package/styles/ui-avatar-group.css +7 -2
  14. package/styles/ui-avatar.css +19 -0
  15. package/styles/ui-badge.css +21 -1
  16. package/styles/ui-combobox.css +52 -1
  17. package/styles/ui-menu-item.css +20 -1
  18. package/styles/ui-tabs.css +19 -0
  19. package/vanilla/UiCombobox.js +141 -119
  20. package/vanilla/UiTooltip.d.ts +1 -0
  21. package/vanilla/UiTooltip.js +1 -1
  22. package/vue/UiAvatar.vue +13 -0
  23. package/vue/UiAvatarGroup.vue +7 -2
  24. package/vue/UiBadge.vue +14 -0
  25. package/vue/UiCombobox.vue +135 -53
  26. package/vue/UiMenuItem.vue +13 -0
  27. package/vue/UiTabs.vue +13 -0
  28. package/vue/UiTooltip.d.ts +4 -0
  29. package/vue/UiTooltip.vue +6 -0
  30. package/vue/chunks/UiAvatar.js +1 -1
  31. package/vue/chunks/UiAvatarGroup.js +1 -1
  32. package/vue/chunks/UiBadge.js +1 -1
  33. package/vue/chunks/UiCombobox.js +66 -41
  34. package/vue/chunks/UiMenuItem.js +1 -1
  35. package/vue/chunks/UiTabs.js +1 -1
  36. package/vue/chunks/UiTooltip.js +5 -2
  37. package/vue/components.css +191 -89
@@ -12,7 +12,7 @@
12
12
  display: none;
13
13
  }
14
14
 
15
- [data-component~="ui-avatar"][data-v-038b6eb1] {
15
+ [data-component~="ui-avatar"][data-v-3a27ff1d] {
16
16
  display: inline-grid;
17
17
  place-items: center;
18
18
  overflow: hidden;
@@ -27,13 +27,13 @@
27
27
  font-weight: 600;
28
28
  text-transform: uppercase;
29
29
  }
30
- .image[data-v-038b6eb1],img[data-v-038b6eb1-s] {
30
+ .image[data-v-3a27ff1d],img[data-v-3a27ff1d-s] {
31
31
  grid-area: 1 / 1;
32
32
  inline-size: 100%;
33
33
  block-size: 100%;
34
34
  object-fit: cover;
35
35
  }
36
- .fallback[data-v-038b6eb1] {
36
+ .fallback[data-v-3a27ff1d] {
37
37
  grid-area: 1 / 1;
38
38
  display: inline-flex;
39
39
  align-items: center;
@@ -41,16 +41,34 @@
41
41
  inline-size: 100%;
42
42
  block-size: 100%;
43
43
  }
44
- [hidden][data-v-038b6eb1] {
44
+
45
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
46
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
47
+ * Trimming applies to block containers, so the box is a block with centred content. */
48
+ @supports (text-box-trim: trim-both) {
49
+ .fallback[data-v-3a27ff1d] {
50
+ display: block;
51
+ text-align: center;
52
+ align-content: center;
53
+ text-box-trim: trim-both;
54
+ text-box-edge: cap alphabetic;
55
+ }
56
+ }
57
+ [hidden][data-v-3a27ff1d] {
45
58
  display: none;
46
59
  }
47
60
 
48
61
  /* A component that sets its display still honours the hidden attribute on its root. */
49
- [data-component~="ui-avatar"][hidden][data-v-038b6eb1] {
62
+ [data-component~="ui-avatar"][hidden][data-v-3a27ff1d] {
50
63
  display: none;
51
64
  }
52
65
 
53
- [data-component~="ui-avatar-group"][data-v-6029679e] {
66
+ [data-component~="ui-avatar-group"][data-v-2ad5d86f] {
67
+ /* Avatars separate with a tight, crisp edge, matching Looma's 1px borders rather than the
68
+ * diffuse elevation overlays use. */
69
+ --_overlap-shadow: -2px 0 2px -1px rgba(0, 0, 0, 0.22);
70
+ --_edge-ring: 0 0 0 1px rgba(0, 0, 0, 0.08);
71
+
54
72
  display: flex;
55
73
  align-items: center;
56
74
  flex-direction: row;
@@ -59,15 +77,15 @@
59
77
 
60
78
  /* Overlap and the separating shadow are applied by the controller: slotted avatars are nested
61
79
  * component roots outside this style scope. */
62
- [data-v-6029679e-s] {
80
+ [data-v-2ad5d86f-s] {
63
81
  margin-inline-start: -0.625rem;
64
82
  flex-shrink: 0;
65
83
  border-radius: 999px;
66
84
  }
67
- [data-v-6029679e-s]:first-child {
85
+ [data-v-2ad5d86f-s]:first-child {
68
86
  margin-inline-start: 0;
69
87
  }
70
- .overflow[data-v-6029679e] {
88
+ .overflow[data-v-2ad5d86f] {
71
89
  margin-inline-start: -0.625rem;
72
90
  display: inline-flex;
73
91
  align-items: center;
@@ -79,23 +97,23 @@
79
97
  background: var(--ui-surface-elevated);
80
98
  color: var(--ui-text-primary);
81
99
  box-shadow:
82
- var(--ui-avatar-group-overlap-shadow, -2px 0 5px -1px rgb(0 0 0 / 0.28)),
83
- 0 0 0 1px rgb(0 0 0 / 0.06);
100
+ var(--ui-avatar-group-overlap-shadow, var(--_overlap-shadow)),
101
+ var(--ui-avatar-group-edge-ring, var(--_edge-ring));
84
102
  font: inherit;
85
103
  font-size: 0.75rem;
86
104
  font-weight: 600;
87
105
  flex-shrink: 0;
88
106
  }
89
- .overflow[hidden][data-v-6029679e] {
107
+ .overflow[hidden][data-v-2ad5d86f] {
90
108
  display: none;
91
109
  }
92
110
 
93
111
  /* A component that sets its display still honours the hidden attribute on its root. */
94
- [data-component~="ui-avatar-group"][hidden][data-v-6029679e] {
112
+ [data-component~="ui-avatar-group"][hidden][data-v-2ad5d86f] {
95
113
  display: none;
96
114
  }
97
115
 
98
- [data-component~="ui-badge"][data-v-43aa138f] {
116
+ [data-component~="ui-badge"][data-v-7e9b5784] {
99
117
  --_badge-surface: var(--ui-surface-subtle);
100
118
  --_badge-text: var(--ui-text-secondary);
101
119
  --_badge-border: color-mix(in srgb, var(--ui-text-secondary) 30%, transparent);
@@ -116,59 +134,73 @@
116
134
  line-height: var(--ui-badge-line-height, var(--ui-line-height-tight));
117
135
  white-space: nowrap;
118
136
  }
119
- [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-43aa138f] {
137
+
138
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
139
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
140
+ * Trimming applies to block containers, so the box is a block with centred content. */
141
+ @supports (text-box-trim: trim-both) {
142
+ [data-component~="ui-badge"][data-v-7e9b5784] {
143
+ display: block;
144
+ min-block-size: var(--ui-badge-min-block-size, 1.5rem);
145
+ text-align: center;
146
+ align-content: center;
147
+ text-box-trim: trim-both;
148
+ text-box-edge: cap alphabetic;
149
+ }
150
+ }
151
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=accent"][data-v-7e9b5784] {
120
152
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
121
153
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
122
154
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
123
155
  }
124
- [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-43aa138f] {
156
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=danger"][data-v-7e9b5784] {
125
157
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
126
158
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
127
159
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
128
160
  }
129
- [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-43aa138f] {
161
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=success"][data-v-7e9b5784] {
130
162
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
131
163
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
132
164
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
133
165
  }
134
- [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-43aa138f] {
166
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=warning"][data-v-7e9b5784] {
135
167
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
136
168
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
137
169
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
138
170
  }
139
- [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-43aa138f] {
171
+ [data-component~="ui-badge"][data-ui-badge-state~="tone=info"][data-v-7e9b5784] {
140
172
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
141
173
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
142
174
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
143
175
  }
144
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-43aa138f] {
176
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=accent"][data-v-7e9b5784] {
145
177
  --_badge-surface: var(--ui-accent-soft);
146
178
  --_badge-border: var(--ui-accent-soft);
147
179
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
148
180
  }
149
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-43aa138f] {
181
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=danger"][data-v-7e9b5784] {
150
182
  --_badge-surface: var(--ui-danger-soft);
151
183
  --_badge-border: var(--ui-danger-soft);
152
184
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
153
185
  }
154
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-43aa138f] {
186
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=success"][data-v-7e9b5784] {
155
187
  --_badge-surface: var(--ui-success-soft);
156
188
  --_badge-border: var(--ui-success-soft);
157
189
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
158
190
  }
159
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-43aa138f] {
191
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=warning"][data-v-7e9b5784] {
160
192
  --_badge-surface: var(--ui-warning-soft);
161
193
  --_badge-border: var(--ui-warning-soft);
162
194
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
163
195
  }
164
- [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-43aa138f] {
196
+ [data-component~="ui-badge"][data-ui-badge-state~="variant=subtle"][data-ui-badge-state~="tone=info"][data-v-7e9b5784] {
165
197
  --_badge-surface: var(--ui-info-soft);
166
198
  --_badge-border: var(--ui-info-soft);
167
199
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
168
200
  }
169
201
 
170
202
  /* A component that sets its display still honours the hidden attribute on its root. */
171
- [data-component~="ui-badge"][hidden][data-v-43aa138f] {
203
+ [data-component~="ui-badge"][hidden][data-v-7e9b5784] {
172
204
  display: none;
173
205
  }
174
206
 
@@ -596,7 +628,7 @@ input[data-v-acf71232]:focus-visible {
596
628
  display: none;
597
629
  }
598
630
 
599
- [data-component~="ui-tooltip"][data-v-3099b119] {
631
+ [data-component~="ui-tooltip"][data-v-3af2132e] {
600
632
  position: fixed;
601
633
  inset: auto;
602
634
  margin: 0;
@@ -617,7 +649,7 @@ input[data-v-acf71232]:focus-visible {
617
649
  display var(--ui-motion-fast) allow-discrete,
618
650
  overlay var(--ui-motion-fast) allow-discrete;
619
651
  }
620
- .surface[data-v-3099b119] {
652
+ .surface[data-v-3af2132e] {
621
653
  --_tooltip-line: var(--ui-tooltip-border, var(--ui-border-default));
622
654
  position: relative;
623
655
  box-sizing: border-box;
@@ -632,7 +664,7 @@ input[data-v-acf71232]:focus-visible {
632
664
  line-height: var(--ui-line-height-tight);
633
665
  box-shadow: var(--ui-tooltip-shadow, var(--ui-elevation-tooltip, var(--ui-shadow-md)));
634
666
  }
635
- [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface[data-v-3099b119] {
667
+ [data-component~="ui-tooltip"][data-ui-tooltip-state~="inverse"] .surface[data-v-3af2132e] {
636
668
  --_tooltip-line: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
637
669
  background: var(--ui-tooltip-inverse-surface, var(--ui-text-primary));
638
670
  color: var(--ui-tooltip-inverse-text, var(--ui-surface-default));
@@ -640,7 +672,7 @@ input[data-v-acf71232]:focus-visible {
640
672
 
641
673
  /* A rotated square shares the surface fill and draws the two outward border edges. Its centre sits on
642
674
  * the surface border line, so the fill covers that stretch of border and the outline runs unbroken. */
643
- .surface[data-v-3099b119]::after {
675
+ .surface[data-v-3af2132e]::after {
644
676
  content: "";
645
677
  position: absolute;
646
678
  z-index: 1;
@@ -657,7 +689,7 @@ input[data-v-acf71232]:focus-visible {
657
689
  transform: rotate(45deg);
658
690
  }
659
691
  :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-start"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"])
660
- .surface[data-v-3099b119]::after {
692
+ .surface[data-v-3af2132e]::after {
661
693
  inset-block-start: calc(var(--ui-tooltip-arrow-size, 0.5rem) / -2 - 0.5px);
662
694
  inset-block-end: auto;
663
695
  border-inline-end-width: 0;
@@ -668,42 +700,51 @@ input[data-v-acf71232]:focus-visible {
668
700
  border-start-start-radius: 1px;
669
701
  }
670
702
  :is([data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=top-end"], [data-component~="ui-tooltip"][data-ui-tooltip-state~="placement=bottom-end"])
671
- .surface[data-v-3099b119]::after {
703
+ .surface[data-v-3af2132e]::after {
672
704
  inset-inline-start: auto;
673
705
  inset-inline-end: var(--ui-space-3);
674
706
  }
675
- [data-component~="ui-tooltip"][data-v-3099b119]:popover-open {
707
+ [data-component~="ui-tooltip"][data-v-3af2132e]:popover-open {
676
708
  opacity: 1;
677
709
  transform: translateY(0);
678
710
  }
679
711
  @starting-style {
680
- [data-component~="ui-tooltip"][data-v-3099b119]:popover-open {
712
+ [data-component~="ui-tooltip"][data-v-3af2132e]:popover-open {
681
713
  opacity: 0;
682
714
  transform: translateY(4px);
683
715
  }
684
716
  }
685
- [data-component~="ui-tooltip"][hidden][data-v-3099b119] {
717
+ [data-component~="ui-tooltip"][hidden][data-v-3af2132e] {
686
718
  display: none;
687
719
  }
688
720
  @media (prefers-reduced-motion: reduce) {
689
- [data-component~="ui-tooltip"][data-v-3099b119] {
721
+ [data-component~="ui-tooltip"][data-v-3af2132e] {
690
722
  transition: none;
691
723
  }
692
724
  }
693
725
 
694
- [data-component~="ui-combobox"][data-v-147b231f] {
726
+ [data-component~="ui-combobox"][data-v-f1d9bb8a] {
695
727
  display: grid;
696
728
  gap: var(--ui-space-1);
697
729
  min-inline-size: 0;
698
730
  color: var(--ui-text-primary);
699
731
  font: inherit;
700
732
  }
701
- label[data-v-147b231f] {
733
+ label[data-v-f1d9bb8a] {
702
734
  color: var(--ui-combobox-label-text, var(--ui-text-primary));
703
735
  font-size: var(--ui-combobox-label-font-size, 0.875rem);
704
736
  font-weight: 500;
705
737
  }
706
- .field[data-v-147b231f] {
738
+ /* The field and anything that annotates it sit on one row; the help button is beside the box,
739
+ not inside it, because a control's box holds its value. */
740
+ .control[data-v-f1d9bb8a] {
741
+ display: flex;
742
+ align-items: center;
743
+ gap: var(--ui-space-2);
744
+ min-inline-size: 0;
745
+ }
746
+ .field[data-v-f1d9bb8a] {
747
+ flex: 1 1 auto;
707
748
  display: flex;
708
749
  min-inline-size: 0;
709
750
  border: 1px solid var(--ui-control-border, var(--ui-border-default));
@@ -714,17 +755,52 @@ label[data-v-147b231f] {
714
755
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
715
756
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
716
757
  }
717
- .field[data-v-147b231f]:focus-within {
758
+ .field[data-v-f1d9bb8a]:focus-within {
718
759
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
719
760
  box-shadow:
720
761
  var(--ui-control-inset),
721
762
  var(--ui-control-focus-halo-shadow);
722
763
  }
723
- input[data-v-147b231f]::selection {
764
+ /* A ghost icon button: the affordance is the mark, not a box around it. */
765
+ .help[data-v-f1d9bb8a] {
766
+ flex: none;
767
+ display: inline-flex;
768
+ align-items: center;
769
+ justify-content: center;
770
+ inline-size: var(--ui-control-size-sm);
771
+ block-size: var(--ui-control-size-sm);
772
+ padding: 0;
773
+ border: 0;
774
+ border-radius: var(--ui-radius-round);
775
+ background: transparent;
776
+ color: var(--ui-text-secondary);
777
+ cursor: pointer;
778
+ transition:
779
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
780
+ color var(--ui-motion-fast) var(--ui-motion-ease);
781
+ }
782
+ .help[data-v-f1d9bb8a]:hover:enabled,
783
+ .help[aria-expanded="true"][data-v-f1d9bb8a] {
784
+ background: color-mix(in srgb, currentColor 8%, transparent);
785
+ color: var(--ui-text-primary);
786
+ }
787
+ .help[data-v-f1d9bb8a]:focus-visible {
788
+ outline: none;
789
+ box-shadow: var(--ui-focus-halo);
790
+ }
791
+ .help[data-v-f1d9bb8a]:disabled {
792
+ color: var(--ui-disabled-text);
793
+ cursor: not-allowed;
794
+ }
795
+ .help-icon[data-v-f1d9bb8a] {
796
+ inline-size: var(--ui-icon-size-sm);
797
+ block-size: var(--ui-icon-size-sm);
798
+ }
799
+ input[data-v-f1d9bb8a]::selection {
724
800
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
725
801
  color: inherit;
726
802
  }
727
- input[data-v-147b231f] {
803
+ input[data-v-f1d9bb8a] {
728
804
  appearance: none;
729
805
  width: 100%;
730
806
  min-inline-size: 0;
@@ -740,11 +816,11 @@ input[data-v-147b231f] {
740
816
  margin: 0;
741
817
  outline: none;
742
818
  }
743
- [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-147b231f] {
819
+ [data-component~="ui-combobox"][data-ui-combobox-state~="size=sm"] input[data-v-f1d9bb8a] {
744
820
  min-block-size: calc(var(--ui-control-size-sm) - 2px);
745
821
  padding: var(--ui-space-1) var(--ui-space-2);
746
822
  }
747
- button[data-v-147b231f] {
823
+ button[data-v-f1d9bb8a] {
748
824
  appearance: none;
749
825
  display: inline-grid;
750
826
  place-items: center;
@@ -759,31 +835,31 @@ button[data-v-147b231f] {
759
835
  padding: 0 var(--ui-space-1);
760
836
  cursor: pointer;
761
837
  }
762
- .affordance-icon[data-v-147b231f] {
838
+ .affordance-icon[data-v-f1d9bb8a] {
763
839
  display: block;
764
840
  inline-size: var(--ui-icon-size-sm);
765
841
  block-size: var(--ui-icon-size-sm);
766
842
  }
767
- button[data-v-147b231f]:hover:enabled {
843
+ button[data-v-f1d9bb8a]:hover:enabled {
768
844
  background: var(--ui-surface-muted);
769
845
  color: var(--ui-text-primary);
770
846
  }
771
- button[data-v-147b231f]:focus-visible {
847
+ button[data-v-f1d9bb8a]:focus-visible {
772
848
  outline: none;
773
849
  background: var(--ui-surface-muted);
774
850
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
775
851
  }
776
- input[data-v-147b231f]:disabled, button[data-v-147b231f]:disabled {
852
+ input[data-v-f1d9bb8a]:disabled, button[data-v-f1d9bb8a]:disabled {
777
853
  color: var(--ui-text-muted);
778
854
  cursor: not-allowed;
779
855
  }
780
- .field[data-v-147b231f]:has(input:disabled) {
856
+ .field[data-v-f1d9bb8a]:has(input:disabled) {
781
857
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
782
858
  }
783
- [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-147b231f] {
859
+ [data-component~="ui-combobox"][data-ui-combobox-state~="validationStatus=error"] .field[data-v-f1d9bb8a] {
784
860
  border-color: var(--ui-danger-solid, var(--ui-accent-active));
785
861
  }
786
- .popup[data-v-147b231f] {
862
+ .popup[data-v-f1d9bb8a] {
787
863
  box-sizing: border-box;
788
864
  min-inline-size: 12rem;
789
865
  max-inline-size: calc(100vw - 1rem);
@@ -797,40 +873,40 @@ input[data-v-147b231f]:disabled, button[data-v-147b231f]:disabled {
797
873
  color: var(--ui-text-primary);
798
874
  box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
799
875
  }
800
- [hidden][data-v-147b231f] {
876
+ [hidden][data-v-f1d9bb8a] {
801
877
  display: none;
802
878
  }
803
- .option[data-v-147b231f] {
879
+ .option[data-v-f1d9bb8a] {
804
880
  padding: var(--ui-space-2) var(--ui-space-3);
805
881
  border-radius: var(--ui-radius-sm);
806
882
  cursor: pointer;
807
883
  overflow-wrap: anywhere;
808
884
  }
809
- .option[data-v-147b231f]:hover, .option.active[data-v-147b231f] {
885
+ .option[data-v-f1d9bb8a]:hover, .option.active[data-v-f1d9bb8a] {
810
886
  background: var(--ui-surface-muted);
811
887
  outline: 1px solid var(--ui-focus-ring);
812
888
  outline-offset: -1px;
813
889
  }
814
- .option[aria-disabled="true"][data-v-147b231f] {
890
+ .option[aria-disabled="true"][data-v-f1d9bb8a] {
815
891
  color: var(--ui-text-muted);
816
892
  cursor: not-allowed;
817
893
  }
818
- .primary[data-v-147b231f] {
894
+ .primary[data-v-f1d9bb8a] {
819
895
  display: block;
820
896
  color: var(--ui-combobox-option-text, var(--ui-text-primary));
821
897
  font-weight: 500;
822
898
  }
823
- .message[data-v-147b231f], .group[data-v-147b231f] {
899
+ .message[data-v-f1d9bb8a], .group[data-v-f1d9bb8a] {
824
900
  color: var(--ui-combobox-message-text, var(--ui-text-secondary));
825
901
  font-weight: 400;
826
902
  font-size: var(--ui-font-size-sm);
827
903
  line-height: var(--ui-line-height-md);
828
904
  overflow-wrap: anywhere;
829
905
  }
830
- .group[data-v-147b231f], .popup .message[data-v-147b231f] {
906
+ .group[data-v-f1d9bb8a], .popup .message[data-v-f1d9bb8a] {
831
907
  padding: var(--ui-space-2) var(--ui-space-3);
832
908
  }
833
- .sr-only[data-v-147b231f] {
909
+ .sr-only[data-v-f1d9bb8a] {
834
910
  position: absolute;
835
911
  inline-size: 1px;
836
912
  block-size: 1px;
@@ -839,35 +915,35 @@ input[data-v-147b231f]:disabled, button[data-v-147b231f]:disabled {
839
915
  white-space: nowrap;
840
916
  }
841
917
  @media (pointer: coarse) {
842
- button[data-v-147b231f] {
918
+ button[data-v-f1d9bb8a] {
843
919
  min-inline-size: 2.75rem;
844
920
  min-block-size: 2.75rem;
845
921
  }
846
922
  }
847
923
  @media (forced-colors: active) {
848
- .field[data-v-147b231f], .popup[data-v-147b231f] {
924
+ .field[data-v-f1d9bb8a], .popup[data-v-f1d9bb8a] {
849
925
  border-color: CanvasText;
850
926
  }
851
- .option.active[data-v-147b231f] {
927
+ .option.active[data-v-f1d9bb8a] {
852
928
  outline-color: Highlight;
853
929
  }
854
930
  }
855
931
 
856
932
  /* Multiple mode: chips wrap before the cursor on one flexible field line. */
857
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-147b231f] {
933
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] .field[data-v-f1d9bb8a] {
858
934
  flex-wrap: wrap;
859
935
  align-items: center;
860
936
  gap: var(--ui-space-1);
861
937
  min-block-size: var(--ui-combobox-item-min-block-size, 2.5rem);
862
938
  padding: var(--ui-space-1);
863
939
  }
864
- [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-147b231f] {
940
+ [data-component~="ui-combobox"][data-ui-combobox-state~="multiple"] input[data-v-f1d9bb8a] {
865
941
  flex: 1 0 var(--ui-combobox-item-input-min-inline-size, 5rem);
866
942
  width: auto;
867
943
  min-block-size: 1.75rem;
868
944
  padding: var(--ui-space-0-5) var(--ui-space-1);
869
945
  }
870
- .item[data-v-147b231f] {
946
+ .item[data-v-f1d9bb8a] {
871
947
  appearance: none;
872
948
  display: inline-flex;
873
949
  min-inline-size: 0;
@@ -881,16 +957,16 @@ button[data-v-147b231f] {
881
957
  font: inherit;
882
958
  cursor: default;
883
959
  }
884
- .item[data-v-147b231f]:focus-visible {
960
+ .item[data-v-f1d9bb8a]:focus-visible {
885
961
  outline: 2px solid var(--ui-focus-ring);
886
962
  outline-offset: 1px;
887
963
  }
888
- .item[data-v-147b231f]:disabled {
964
+ .item[data-v-f1d9bb8a]:disabled {
889
965
  opacity: 0.6;
890
966
  }
891
967
 
892
968
  /* A component that sets its display still honours the hidden attribute on its root. */
893
- [data-component~="ui-combobox"][hidden][data-v-147b231f] {
969
+ [data-component~="ui-combobox"][hidden][data-v-f1d9bb8a] {
894
970
  display: none;
895
971
  }
896
972
 
@@ -2763,7 +2839,7 @@ svg[data-v-80722d12-s] {
2763
2839
  }
2764
2840
  }
2765
2841
 
2766
- [data-component~="ui-menu-item"][data-v-deb5a674] {
2842
+ [data-component~="ui-menu-item"][data-v-69407da9] {
2767
2843
  display: block;
2768
2844
  box-sizing: border-box;
2769
2845
  width: 100%;
@@ -2780,16 +2856,29 @@ svg[data-v-80722d12-s] {
2780
2856
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
2781
2857
  color var(--ui-motion-fast) var(--ui-motion-ease);
2782
2858
  }
2783
- [data-component~="ui-menu-item"][data-v-deb5a674]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
2859
+
2860
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
2861
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
2862
+ * Trimming applies to block containers, so the box is a block with centred content. */
2863
+ @supports (text-box-trim: trim-both) {
2864
+ [data-component~="ui-menu-item"][data-v-69407da9] {
2865
+ display: block;
2866
+ min-block-size: var(--ui-menu-item-min-block-size, var(--ui-control-size-md, 2.5rem));
2867
+ align-content: center;
2868
+ text-box-trim: trim-both;
2869
+ text-box-edge: cap alphabetic;
2870
+ }
2871
+ }
2872
+ [data-component~="ui-menu-item"][data-v-69407da9]:is(:hover, :focus-visible):not([aria-disabled="true"]) {
2784
2873
  background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
2785
2874
  }
2786
- [data-component~="ui-menu-item"][aria-disabled="true"][data-v-deb5a674] {
2875
+ [data-component~="ui-menu-item"][aria-disabled="true"][data-v-69407da9] {
2787
2876
  opacity: 0.6;
2788
2877
  cursor: not-allowed;
2789
2878
  }
2790
2879
 
2791
2880
  /* A component that sets its display still honours the hidden attribute on its root. */
2792
- [data-component~="ui-menu-item"][hidden][data-v-deb5a674] {
2881
+ [data-component~="ui-menu-item"][hidden][data-v-69407da9] {
2793
2882
  display: none;
2794
2883
  }
2795
2884
 
@@ -3574,22 +3663,22 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3574
3663
  }
3575
3664
 
3576
3665
  /* Density resolves into the tab row's own values; the public tokens still override them. */
3577
- [data-component~="ui-tabs"][data-v-b9e876c6] {
3666
+ [data-component~="ui-tabs"][data-v-3e89baea] {
3578
3667
  --_tab-min-block-size: var(--ui-control-size);
3579
3668
  --_tab-padding-block: var(--ui-space-2);
3580
3669
  --_tab-padding-inline: var(--ui-space-3);
3581
3670
  }
3582
- [data-component~="ui-tabs"][data-ui-tabs-state~="density=compact"][data-v-b9e876c6] {
3671
+ [data-component~="ui-tabs"][data-ui-tabs-state~="density=compact"][data-v-3e89baea] {
3583
3672
  --_tab-min-block-size: var(--ui-control-size-sm);
3584
3673
  --_tab-padding-block: var(--ui-space-1);
3585
3674
  --_tab-padding-inline: var(--ui-space-2);
3586
3675
  }
3587
- [data-component~="ui-tabs"][data-v-b9e876c6] {
3676
+ [data-component~="ui-tabs"][data-v-3e89baea] {
3588
3677
  display: grid;
3589
3678
  inline-size: 100%;
3590
3679
  min-inline-size: 0;
3591
3680
  }
3592
- .list[data-v-b9e876c6] {
3681
+ .list[data-v-3e89baea] {
3593
3682
  display: grid;
3594
3683
  grid-auto-flow: column;
3595
3684
  grid-auto-columns: max-content;
@@ -3605,7 +3694,7 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3605
3694
  scrollbar-width: thin;
3606
3695
  border-block-end: 1px solid var(--ui-border-default);
3607
3696
  }
3608
- .list button[data-v-b9e876c6] {
3697
+ .list button[data-v-3e89baea] {
3609
3698
  min-block-size: var(--ui-tabs-tab-min-block-size, var(--_tab-min-block-size));
3610
3699
  margin: 0 0 -1px;
3611
3700
  padding: var(--ui-tabs-tab-padding-block, var(--_tab-padding-block))
@@ -3623,43 +3712,56 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3623
3712
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
3624
3713
  border-color var(--ui-motion-fast) var(--ui-motion-ease);
3625
3714
  }
3626
- [data-component~="ui-tabs"][data-ui-tabs-state~="stretch"] .list[data-v-b9e876c6] {
3715
+
3716
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high. */
3717
+ /* Centre the glyphs, not the line box: a label without descenders otherwise reads high.
3718
+ * Trimming applies to block containers, so the box is a block with centred content. */
3719
+ @supports (text-box-trim: trim-both) {
3720
+ .list button[data-v-3e89baea] {
3721
+ display: block;
3722
+ text-align: center;
3723
+ align-content: center;
3724
+ text-box-trim: trim-both;
3725
+ text-box-edge: cap alphabetic;
3726
+ }
3727
+ }
3728
+ [data-component~="ui-tabs"][data-ui-tabs-state~="stretch"] .list[data-v-3e89baea] {
3627
3729
  grid-auto-columns: minmax(max-content, 1fr);
3628
3730
  }
3629
- .list button[data-v-b9e876c6] {
3731
+ .list button[data-v-3e89baea] {
3630
3732
  white-space: nowrap;
3631
3733
  }
3632
- .list button[data-v-b9e876c6]:hover {
3734
+ .list button[data-v-3e89baea]:hover {
3633
3735
  color: var(--ui-text-primary);
3634
3736
  background: var(--ui-surface-muted);
3635
3737
  }
3636
- .list button[aria-selected="true"][data-v-b9e876c6] {
3738
+ .list button[aria-selected="true"][data-v-3e89baea] {
3637
3739
  color: var(--ui-accent-solid);
3638
3740
  border-block-end-color: var(--ui-accent-solid);
3639
3741
  }
3640
- .list button[data-v-b9e876c6]:focus-visible {
3742
+ .list button[data-v-3e89baea]:focus-visible {
3641
3743
  position: relative;
3642
3744
  outline: none;
3643
3745
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
3644
3746
  border-radius: var(--ui-radius-sm);
3645
3747
  }
3646
- .panels[data-v-b9e876c6] {
3748
+ .panels[data-v-3e89baea] {
3647
3749
  min-inline-size: 0;
3648
3750
  }
3649
- [data-v-b9e876c6-s] {
3751
+ [data-v-3e89baea-s] {
3650
3752
  padding: var(--ui-space-4);
3651
3753
  }
3652
- [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"][data-v-b9e876c6] {
3754
+ [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"][data-v-3e89baea] {
3653
3755
  grid-template-columns: max-content minmax(0, 1fr);
3654
3756
  align-items: start;
3655
3757
  }
3656
- [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list[data-v-b9e876c6] {
3758
+ [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list[data-v-3e89baea] {
3657
3759
  grid-auto-flow: row;
3658
3760
  grid-auto-columns: auto;
3659
3761
  border-block-end: 0;
3660
3762
  border-inline-end: 1px solid var(--ui-border-default);
3661
3763
  }
3662
- [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list button[data-v-b9e876c6] {
3764
+ [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"] .list button[data-v-3e89baea] {
3663
3765
  margin: 0 -1px 0 0;
3664
3766
  border-block-end: 0;
3665
3767
  border-inline-end: 2px solid transparent;
@@ -3667,17 +3769,17 @@ input[data-v-44eb48fd], input[data-v-44eb48fd]::after {
3667
3769
  }
3668
3770
  [data-component~="ui-tabs"][data-ui-tabs-state~="orientation=vertical"]
3669
3771
  .list
3670
- button[aria-selected="true"][data-v-b9e876c6] {
3772
+ button[aria-selected="true"][data-v-3e89baea] {
3671
3773
  border-inline-end-color: var(--ui-accent-solid);
3672
3774
  }
3673
3775
  @media (prefers-reduced-motion: reduce) {
3674
- .list button[data-v-b9e876c6] {
3776
+ .list button[data-v-3e89baea] {
3675
3777
  transition: none;
3676
3778
  }
3677
3779
  }
3678
3780
 
3679
3781
  /* A component that sets its display still honours the hidden attribute on its root. */
3680
- [data-component~="ui-tabs"][hidden][data-v-b9e876c6] {
3782
+ [data-component~="ui-tabs"][hidden][data-v-3e89baea] {
3681
3783
  display: none;
3682
3784
  }
3683
3785