@threadlabs/looma 0.39.1 → 0.39.3

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 (50) hide show
  1. package/components/ui-button/ui-button.html +24 -3
  2. package/components/ui-checkbox/ui-checkbox.html +34 -18
  3. package/components/ui-combobox/ui-combobox.html +8 -3
  4. package/components/ui-combobox/ui-combobox.js +3 -2
  5. package/components/ui-dialog/ui-dialog.html +6 -52
  6. package/components/ui-input/ui-input.html +21 -3
  7. package/components/ui-input-group/ui-input-group.html +1 -0
  8. package/components/ui-light-editor/ui-light-editor.html +26 -25
  9. package/components/ui-select/ui-select.html +10 -3
  10. package/dist/index.js +1 -1
  11. package/docs/README.md +18 -7
  12. package/docs/catalog.json +2 -26
  13. package/docs/customizer-render.mjs +37 -33
  14. package/docs/customizer.js +82 -47
  15. package/docs/site.mjs +10 -6
  16. package/docs/theme-session.mjs +7 -8
  17. package/docs/theme.mjs +10 -22
  18. package/package.json +1 -1
  19. package/styles/ui-button.css +24 -1
  20. package/styles/ui-checkbox.css +39 -19
  21. package/styles/ui-combobox.css +16 -6
  22. package/styles/ui-dialog.css +6 -107
  23. package/styles/ui-input-group.css +1 -0
  24. package/styles/ui-input.css +24 -3
  25. package/styles/ui-light-editor.css +111 -0
  26. package/styles/ui-select.css +10 -3
  27. package/theme-system.css +4 -1
  28. package/tokens.css +9 -2
  29. package/vanilla/UiButton.js +14 -12
  30. package/vanilla/UiDialog.js +2 -2
  31. package/vanilla/UiLightEditor.js +2 -2
  32. package/vue/UiButton.vue +28 -7
  33. package/vue/UiCheckbox.vue +34 -19
  34. package/vue/UiCombobox.vue +22 -6
  35. package/vue/UiDialog.d.ts +3 -3
  36. package/vue/UiDialog.vue +18 -111
  37. package/vue/UiInput.vue +30 -3
  38. package/vue/UiInputGroup.vue +1 -0
  39. package/vue/UiLightEditor.vue +156 -40
  40. package/vue/UiSelect.vue +16 -3
  41. package/vue/chunks/UiButton.js +18 -10
  42. package/vue/chunks/UiCheckbox.js +1 -1
  43. package/vue/chunks/UiCombobox.js +1 -1
  44. package/vue/chunks/UiDialog.js +22 -14
  45. package/vue/chunks/UiInput.js +1 -1
  46. package/vue/chunks/UiInputGroup.js +1 -1
  47. package/vue/chunks/UiLightEditor.js +66 -58
  48. package/vue/chunks/UiSelect.js +1 -1
  49. package/vue/components.css +337 -160
  50. package/vue/editor/index.js +46 -36
@@ -96,7 +96,7 @@
96
96
  from:tabindex="{ true: '0', false: null }[concat(($loading or $pending) and not $disabled)]"
97
97
  >
98
98
  <span $if="$loading or $pending" class="spinner-wrap"><ui-spinner size="sm"></ui-spinner></span>
99
- <slot></slot>
99
+ <span class="label"><slot></slot></span>
100
100
  <span class="badge"><slot name="badge"></slot></span>
101
101
  </a>
102
102
  <button
@@ -109,7 +109,7 @@
109
109
  from:aria-busy="$loading or $pending"
110
110
  >
111
111
  <span $if="$loading or $pending" class="spinner-wrap"><ui-spinner size="sm"></ui-spinner></span>
112
- <slot></slot>
112
+ <span class="label"><slot></slot></span>
113
113
  <span class="badge"><slot name="badge"></slot></span>
114
114
  </button>
115
115
  </template>
@@ -237,6 +237,7 @@
237
237
 
238
238
  :host {
239
239
  --_button-square-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
240
+ box-sizing: border-box !important;
240
241
  appearance: none;
241
242
  min-block-size: var(--ui-button-min-block-size, var(--ui-control-size-md));
242
243
  border-style: solid;
@@ -283,6 +284,21 @@
283
284
  padding-block: var(--ui-space-0-5) !important;
284
285
  }
285
286
 
287
+ /* Trim the text line itself: an anonymous flex item retains font-metric space in some fonts. */
288
+ .label {
289
+ display: block !important;
290
+ align-content: center !important;
291
+ min-inline-size: 0 !important;
292
+ min-block-size: 1lh !important;
293
+ }
294
+
295
+ .label:has(svg) {
296
+ display: inline-flex !important;
297
+ align-items: center !important;
298
+ gap: var(--ui-space-2) !important;
299
+ text-box-trim: none;
300
+ }
301
+
286
302
  .badge {
287
303
  display: inline-flex !important;
288
304
  align-items: center !important;
@@ -294,7 +310,7 @@
294
310
  }
295
311
 
296
312
  @supports (text-box-trim: trim-both) {
297
- :host {
313
+ .label:not(:has(svg)) {
298
314
  text-box-trim: trim-both;
299
315
  text-box-edge: cap alphabetic;
300
316
  }
@@ -622,6 +638,11 @@
622
638
  transition: color var(--ui-motion-fast) var(--ui-motion-ease), text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
623
639
  }
624
640
 
641
+ :host[data-appearance="link"] .label {
642
+ display: inline !important;
643
+ text-box-trim: none;
644
+ }
645
+
625
646
  :host[data-appearance="link"]:hover:not(:disabled, [aria-disabled="true"]) {
626
647
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
627
648
  text-decoration-color: currentColor;
@@ -142,7 +142,8 @@
142
142
 
143
143
  input::after {
144
144
  content: "";
145
- position: absolute;
145
+ position: absolute !important;
146
+ transform: none !important;
146
147
  opacity: 0;
147
148
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
148
149
  }
@@ -155,43 +156,44 @@
155
156
  box-shadow: var(--ui-control-inset);
156
157
  }
157
158
 
158
- /* Centre the tick's box and lift it slightly for the rotated check shape. */
159
+ /* The SVG's painted bounds are centred in its viewBox, including its round stroke.
160
+ Centre that box directly; rotated border boxes do not centre the visible check. */
159
161
  input:checked::after {
160
- inset: 0;
161
- margin: auto !important;
162
- inline-size: calc(var(--_ui-checkbox-size) * 0.28 / 1.125);
163
- block-size: calc(var(--_ui-checkbox-size) * 0.5 / 1.125);
164
- /* Longhands, not `border: solid var(...)`: lowering drops a shorthand that omits a
165
- component, which left the tick with no style and no colour. */
166
- border-style: solid;
167
- border-color: var(--ui-text-on-accent);
168
- border-width: 0 calc(var(--_ui-checkbox-size) * 0.125 / 1.125) calc(var(--_ui-checkbox-size) * 0.125 / 1.125) 0;
162
+ inset: 50% auto auto 50% !important;
163
+ inline-size: calc(var(--_ui-checkbox-size) * 0.7) !important;
164
+ block-size: calc(var(--_ui-checkbox-size) * 0.7) !important;
165
+ background: var(--ui-text-on-accent);
166
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 11.5 5 5 9-9'/%3E%3C/svg%3E")
167
+ center / contain no-repeat;
169
168
  opacity: 1;
170
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg);
169
+ translate: -50% -50% !important;
171
170
  animation: ui-checkbox-check var(--ui-motion-base) var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
172
171
  }
173
172
 
174
173
  input:indeterminate::after {
175
- inset: 50% calc(var(--_ui-checkbox-size) * 0.23 / 1.125) auto;
176
- block-size: calc(var(--_ui-checkbox-size) * 0.125 / 1.125);
174
+ mask: none;
175
+ animation: none;
176
+ inset: 50% calc(var(--_ui-checkbox-size) * 0.23 / 1.125) auto !important;
177
+ inline-size: auto !important;
178
+ block-size: calc(var(--_ui-checkbox-size) * 0.125 / 1.125) !important;
177
179
  border-radius: var(--ui-radius-round);
178
180
  background: var(--ui-text-on-accent);
179
181
  opacity: 1;
180
- transform: translateY(-50%);
182
+ translate: 0 -50% !important;
181
183
  }
182
184
 
183
185
  @keyframes ui-checkbox-check {
184
186
  from {
185
187
  opacity: 0;
186
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(0.55);
188
+ scale: 0.55;
187
189
  }
188
190
  65% {
189
191
  opacity: 1;
190
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(1.12);
192
+ scale: 1.12;
191
193
  }
192
194
  to {
193
195
  opacity: 1;
194
- transform: translateY(calc(var(--_ui-checkbox-size) * -0.09 / 1.125)) rotate(45deg) scale(1);
196
+ scale: 1;
195
197
  }
196
198
  }
197
199
 
@@ -202,6 +204,20 @@
202
204
  }
203
205
  }
204
206
 
207
+ @media (forced-colors: active) {
208
+ input:checked,
209
+ input:indeterminate {
210
+ forced-color-adjust: none;
211
+ background: Highlight;
212
+ border-color: Highlight;
213
+ }
214
+ input:checked::after,
215
+ input:indeterminate::after {
216
+ forced-color-adjust: none;
217
+ background: HighlightText;
218
+ }
219
+ }
220
+
205
221
  input:hover:enabled {
206
222
  border-color: var(--ui-accent-solid);
207
223
  }
@@ -762,10 +762,12 @@
762
762
  color: inherit;
763
763
  }
764
764
  input {
765
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
765
766
  appearance: none;
766
767
  width: 100%;
767
768
  min-inline-size: 0;
768
769
  min-block-size: calc(var(--_row) - 2 * var(--ui-border-width));
770
+ max-block-size: max(calc(var(--_row) - 2 * var(--ui-border-width)), calc(1em * var(--ui-line-height-tight) + 2 * var(--_ui-combobox-inset-block)));
769
771
  box-sizing: border-box !important;
770
772
  border: 0;
771
773
  border-radius: inherit;
@@ -773,7 +775,7 @@
773
775
  color: inherit;
774
776
  font: inherit;
775
777
  line-height: var(--ui-line-height-tight);
776
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
778
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-3) !important;
777
779
  margin: 0 !important;
778
780
  outline: none;
779
781
  }
@@ -781,14 +783,16 @@
781
783
  --_row: var(--ui-control-size-sm);
782
784
  }
783
785
  :host([size="sm"]) input {
784
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
786
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
787
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-2) !important;
785
788
  font-size: var(--ui-font-size-sm);
786
789
  }
787
790
  :host([size="lg"]) {
788
791
  --_row: var(--ui-control-size-lg);
789
792
  }
790
793
  :host([size="lg"]) input {
791
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
794
+ --_ui-combobox-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
795
+ padding: var(--_ui-combobox-inset-block) var(--ui-space-4) !important;
792
796
  font-size: var(--ui-font-size-md);
793
797
  }
794
798
  button {
@@ -923,6 +927,7 @@
923
927
  display: none !important;
924
928
  }
925
929
  :host([multiple]) input {
930
+ max-block-size: none;
926
931
  flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
927
932
  width: auto;
928
933
  min-block-size: 1.75rem;
@@ -485,7 +485,8 @@ export function connect(host) {
485
485
  input.focus();
486
486
  }
487
487
  };
488
- const onPointerdown = (event) => { if (event.target.closest?.('[role="option"]')) event.preventDefault(); };
488
+ // Keep input focus through selection without cancelling Safari's touch-generated click.
489
+ const onMousedown = (event) => { if (event.target.closest?.('[role="option"]')) event.preventDefault(); };
489
490
  const onFocusout = (event) => {
490
491
  if (event.relatedTarget instanceof Node && element.contains(event.relatedTarget)) return;
491
492
  close();
@@ -529,7 +530,7 @@ export function connect(host) {
529
530
  const onValidate = (event) => {
530
531
  if (event.target === element) void validateCurrent();
531
532
  };
532
- const listeners = { input: onInput, keydown: onKeydown, click: onClick, pointerdown: onPointerdown, focusin: onFocusin, focusout: onFocusout, compositionstart: onCompositionstart, compositionend: onCompositionend, open: onTooltipOpen, close: onTooltipClose, command: onCommand, validate: onValidate };
533
+ const listeners = { input: onInput, keydown: onKeydown, click: onClick, mousedown: onMousedown, focusin: onFocusin, focusout: onFocusout, compositionstart: onCompositionstart, compositionend: onCompositionend, open: onTooltipOpen, close: onTooltipClose, command: onCommand, validate: onValidate };
533
534
  for (const [name, listener] of Object.entries(listeners)) element.addEventListener(name, listener);
534
535
  // Authored options can change after mount (renamed, replaced, or arriving late). A selected value
535
536
  // then shows its current label, unless the user is editing the text.
@@ -1,4 +1,6 @@
1
1
  <link rel="component" href="../ui-scroll-area/ui-scroll-area.html">
2
+ <link rel="component" href="../ui-icon-button/ui-icon-button.html">
3
+ <link rel="component" href="../ui-icon/ui-icon.html">
2
4
  <template component="ui-dialog" module="./ui-dialog.js">
3
5
  <defs>
4
6
  <prop name="open" type="boolean" default="false">Whether the dialog is open initially or when set externally.</prop>
@@ -39,7 +41,7 @@
39
41
  <dialog from:aria-label="$accessibleLabel">
40
42
  <header $ref="header">
41
43
  <h2 class="title" $if="$label">{$label}</h2>
42
- <button class="close" $ref="close" type="button" aria-label="Close"></button>
44
+ <div class="close"><ui-icon-button $ref="close" size="sm" round label="Close"><ui-icon name="x"></ui-icon></ui-icon-button></div>
43
45
  </header>
44
46
  <div class="body" $ref="body"><ui-scroll-area from:trim="true"><slot></slot></ui-scroll-area></div>
45
47
  <footer $ref="footer"><slot name="actions"></slot></footer>
@@ -231,58 +233,10 @@
231
233
  }
232
234
 
233
235
  .close {
234
- display: inline-grid !important;
235
- place-items: center;
236
- flex: none;
236
+ display: flex !important;
237
+ align-items: center !important;
238
+ flex: none !important;
237
239
  margin-inline-start: auto !important;
238
- inline-size: var(--ui-control-size-sm);
239
- block-size: var(--ui-control-size-sm);
240
- padding: 0 !important;
241
- border: 0;
242
- border-radius: var(--ui-radius-round);
243
- background: transparent;
244
- color: var(--ui-text-secondary);
245
- cursor: pointer;
246
- transition: background-color var(--ui-motion-fast) var(--ui-motion-ease), color var(--ui-motion-fast) var(--ui-motion-ease);
247
- }
248
-
249
- /* A CSS-drawn X. */
250
- .close::before,
251
- .close::after {
252
- content: "";
253
- grid-area: 1 / 1;
254
- inline-size: 0.875rem;
255
- block-size: 1.5px;
256
- border-radius: 1px;
257
- background: currentColor;
258
- transform: rotate(45deg);
259
- }
260
-
261
- .close::after {
262
- transform: rotate(-45deg);
263
- }
264
-
265
- .close:hover {
266
- background: var(--ui-surface-muted);
267
- color: var(--ui-text-primary);
268
- }
269
-
270
- .close:focus-visible {
271
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
272
- outline-offset: var(--ui-focus-width);
273
- }
274
-
275
- /* A touch target, like Button on coarse pointers. */
276
- @media (pointer: coarse) {
277
- .close {
278
- inline-size: var(--ui-control-min-block-size);
279
- block-size: var(--ui-control-min-block-size);
280
- }
281
- }
282
-
283
- html[data-ui-input-modality="touch"] :host .close {
284
- inline-size: var(--ui-control-min-block-size);
285
- block-size: var(--ui-control-min-block-size);
286
240
  }
287
241
 
288
242
  .body {
@@ -94,15 +94,24 @@
94
94
  syntax: "*";
95
95
  inherits: false;
96
96
  }
97
+ /* Normalize a unitless zero border to a length before the box calculation. */
98
+ @property --_ui-input-stroke {
99
+ syntax: "<length>";
100
+ inherits: false;
101
+ initial-value: 1px;
102
+ }
97
103
 
98
104
  :host {
105
+ --_ui-input-size: var(--ui-control-size-md);
106
+ --_ui-input-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
107
+ --_ui-input-stroke: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width)));
99
108
  box-sizing: border-box !important;
100
109
  display: inline-block !important;
101
110
  inline-size: var(--ui-input-inline-size, 100%);
102
111
  min-inline-size: 0;
103
112
  min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-md)));
104
113
  margin: 0 !important;
105
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
114
+ padding: var(--_ui-input-inset-block) var(--ui-space-3) !important;
106
115
  appearance: none;
107
116
  padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3)) !important;
108
117
  border: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width))) solid
@@ -120,16 +129,25 @@
120
129
  background-color var(--ui-motion-fast) var(--ui-motion-ease);
121
130
  }
122
131
 
132
+ /* Cap Safari's excess text metrics without changing native date, file, color or range widgets. */
133
+ :host:is([type="text"], [type="search"], [type="tel"], [type="url"], [type="email"], [type="password"], [type="number"]) {
134
+ max-block-size: max(calc(var(--_ui-input-size) - var(--_ui-default-input-frame-width, 0px)), calc(1em * var(--ui-line-height-tight) + 2 * var(--_ui-input-inset-block) + 2 * var(--_ui-input-stroke)));
135
+ }
136
+
123
137
  /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
124
138
  :host([size="sm"]) {
139
+ --_ui-input-size: var(--ui-control-size-sm);
140
+ --_ui-input-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
125
141
  min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-sm)));
126
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
142
+ padding: var(--_ui-input-inset-block) var(--ui-space-2) !important;
127
143
  font-size: var(--ui-font-size-sm);
128
144
  }
129
145
 
130
146
  :host([size="lg"]) {
147
+ --_ui-input-size: var(--ui-control-size-lg);
148
+ --_ui-input-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
131
149
  min-block-size: var(--ui-input-min-block-size, var(--_ui-default-input-min-block-size, var(--ui-control-size-lg)));
132
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
150
+ padding: var(--_ui-input-inset-block) var(--ui-space-4) !important;
133
151
  font-size: var(--ui-font-size-md);
134
152
  }
135
153
 
@@ -43,6 +43,7 @@
43
43
  Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
44
44
  --_ui-default-input-border-width: 0;
45
45
  --_ui-default-input-min-block-size: 0;
46
+ --_ui-default-input-frame-width: calc(2 * var(--ui-border-width));
46
47
  --_ui-default-input-border: transparent;
47
48
  --_ui-default-input-border-hover: transparent;
48
49
  --_ui-default-input-focus-border: transparent;
@@ -1,5 +1,6 @@
1
1
  <link rel="component" href="../ui-icon/ui-icon.html">
2
2
  <link rel="component" href="../ui-number-input/ui-number-input.html">
3
+ <link rel="component" href="../ui-disclosure/ui-disclosure.html">
3
4
  <template component="ui-light-editor" module="./ui-light-editor.js">
4
5
  <defs>
5
6
  <state name="horizontal" type="string" value="50"></state>
@@ -29,31 +30,31 @@
29
30
  </button>
30
31
  </span>
31
32
  </span>
32
- <span class="coordinates">
33
- <ui-number-input
34
- data-coordinate="x"
35
- from:value="$horizontal"
36
- min="0"
37
- max="100"
38
- step="1"
39
- unit="%"
40
- label="Light horizontal position"
41
- from:size="$size"
42
- from:disabled="$disabled"
43
- ></ui-number-input>
44
- <ui-number-input
45
- data-coordinate="y"
46
- from:value="$vertical"
47
- min="0"
48
- max="100"
49
- step="1"
50
- unit="%"
51
- label="Light vertical position"
52
- from:size="$size"
53
- from:disabled="$disabled"
54
- ></ui-number-input>
55
- </span>
56
- <span class="hint">Drag the light, tap the background, use arrow keys, or enter its position. Escape cancels a drag. Top centre is 50%, 0%.</span>
33
+ <span class="hint">Drag or tap to move the light. Arrow keys adjust; Escape cancels.</span>
34
+ <ui-disclosure summary="Exact position"><span class="coordinates">
35
+ <ui-number-input
36
+ data-coordinate="x"
37
+ from:value="$horizontal"
38
+ min="0"
39
+ max="100"
40
+ step="1"
41
+ unit="%"
42
+ label="Light horizontal position"
43
+ from:size="$size"
44
+ from:disabled="$disabled"
45
+ ></ui-number-input>
46
+ <ui-number-input
47
+ data-coordinate="y"
48
+ from:value="$vertical"
49
+ min="0"
50
+ max="100"
51
+ step="1"
52
+ unit="%"
53
+ label="Light vertical position"
54
+ from:size="$size"
55
+ from:disabled="$disabled"
56
+ ></ui-number-input>
57
+ </span></ui-disclosure>
57
58
  </span>
58
59
  <style>
59
60
  :host {
@@ -60,13 +60,16 @@
60
60
  }
61
61
 
62
62
  :host {
63
+ --_ui-select-size: var(--ui-control-size-md);
64
+ --_ui-select-inset-block: var(--ui-control-inset-block-md, var(--ui-space-2));
63
65
  box-sizing: border-box !important;
64
66
  display: inline-block !important;
65
67
  inline-size: var(--ui-select-inline-size, 100%);
66
68
  min-inline-size: 0;
69
+ max-block-size: max(var(--_ui-select-size), calc(1em * var(--ui-line-height-tight) + 2 * var(--_ui-select-inset-block) + 2 * var(--ui-border-width)));
67
70
  min-block-size: var(--ui-control-size-md);
68
71
  margin: 0 !important;
69
- padding: var(--ui-control-inset-block-md, var(--ui-space-2)) var(--ui-space-3) !important;
72
+ padding: var(--_ui-select-inset-block) var(--ui-space-3) !important;
70
73
  border: var(--ui-border-width) solid var(--ui-select-border, var(--ui-control-border, var(--ui-border-strong)));
71
74
  border-radius: var(--ui-select-radius, var(--ui-field-radius, var(--ui-radius-md)));
72
75
  background-color: var(--ui-select-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
@@ -144,8 +147,10 @@
144
147
  }
145
148
 
146
149
  :host([size="sm"]) {
150
+ --_ui-select-size: var(--ui-control-size-sm);
151
+ --_ui-select-inset-block: var(--ui-control-inset-block-sm, var(--ui-space-1));
147
152
  min-block-size: var(--ui-control-size-sm);
148
- padding: var(--ui-control-inset-block-sm, var(--ui-space-1)) var(--ui-space-2) !important;
153
+ padding: var(--_ui-select-inset-block) var(--ui-space-2) !important;
149
154
  padding-inline-end: calc(var(--ui-space-2) + var(--ui-icon-size-sm) + var(--ui-space-1)) !important;
150
155
  background-position: right var(--ui-space-2) center, center;
151
156
  background-size:
@@ -155,8 +160,10 @@
155
160
  }
156
161
 
157
162
  :host([size="lg"]) {
163
+ --_ui-select-size: var(--ui-control-size-lg);
164
+ --_ui-select-inset-block: var(--ui-control-inset-block-lg, var(--ui-space-3));
158
165
  min-block-size: var(--ui-control-size-lg);
159
- padding: var(--ui-control-inset-block-lg, var(--ui-space-3)) var(--ui-space-4) !important;
166
+ padding: var(--_ui-select-inset-block) var(--ui-space-4) !important;
160
167
  padding-inline-end: calc(var(--ui-space-4) + 1.5rem) !important;
161
168
  background-position: right var(--ui-space-4) center, center;
162
169
  font-size: var(--ui-font-size-md);