@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.
- package/components/ui-button/ui-button.html +24 -3
- package/components/ui-checkbox/ui-checkbox.html +34 -18
- package/components/ui-combobox/ui-combobox.html +8 -3
- package/components/ui-combobox/ui-combobox.js +3 -2
- package/components/ui-dialog/ui-dialog.html +6 -52
- package/components/ui-input/ui-input.html +21 -3
- package/components/ui-input-group/ui-input-group.html +1 -0
- package/components/ui-light-editor/ui-light-editor.html +26 -25
- package/components/ui-select/ui-select.html +10 -3
- package/dist/index.js +1 -1
- package/docs/README.md +18 -7
- package/docs/catalog.json +2 -26
- package/docs/customizer-render.mjs +37 -33
- package/docs/customizer.js +82 -47
- package/docs/site.mjs +10 -6
- package/docs/theme-session.mjs +7 -8
- package/docs/theme.mjs +10 -22
- package/package.json +1 -1
- package/styles/ui-button.css +24 -1
- package/styles/ui-checkbox.css +39 -19
- package/styles/ui-combobox.css +16 -6
- package/styles/ui-dialog.css +6 -107
- package/styles/ui-input-group.css +1 -0
- package/styles/ui-input.css +24 -3
- package/styles/ui-light-editor.css +111 -0
- package/styles/ui-select.css +10 -3
- package/theme-system.css +4 -1
- package/tokens.css +9 -2
- package/vanilla/UiButton.js +14 -12
- package/vanilla/UiDialog.js +2 -2
- package/vanilla/UiLightEditor.js +2 -2
- package/vue/UiButton.vue +28 -7
- package/vue/UiCheckbox.vue +34 -19
- package/vue/UiCombobox.vue +22 -6
- package/vue/UiDialog.d.ts +3 -3
- package/vue/UiDialog.vue +18 -111
- package/vue/UiInput.vue +30 -3
- package/vue/UiInputGroup.vue +1 -0
- package/vue/UiLightEditor.vue +156 -40
- package/vue/UiSelect.vue +16 -3
- package/vue/chunks/UiButton.js +18 -10
- package/vue/chunks/UiCheckbox.js +1 -1
- package/vue/chunks/UiCombobox.js +1 -1
- package/vue/chunks/UiDialog.js +22 -14
- package/vue/chunks/UiInput.js +1 -1
- package/vue/chunks/UiInputGroup.js +1 -1
- package/vue/chunks/UiLightEditor.js +66 -58
- package/vue/chunks/UiSelect.js +1 -1
- package/vue/components.css +337 -160
- 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
|
-
:
|
|
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
|
-
/*
|
|
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:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
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
|
-
|
|
176
|
-
|
|
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
|
-
|
|
182
|
+
translate: 0 -50% !important;
|
|
181
183
|
}
|
|
182
184
|
|
|
183
185
|
@keyframes ui-checkbox-check {
|
|
184
186
|
from {
|
|
185
187
|
opacity: 0;
|
|
186
|
-
|
|
188
|
+
scale: 0.55;
|
|
187
189
|
}
|
|
188
190
|
65% {
|
|
189
191
|
opacity: 1;
|
|
190
|
-
|
|
192
|
+
scale: 1.12;
|
|
191
193
|
}
|
|
192
194
|
to {
|
|
193
195
|
opacity: 1;
|
|
194
|
-
|
|
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(--
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
<
|
|
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:
|
|
235
|
-
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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="
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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);
|