@sveltia/ui 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/button/button.svelte +114 -79
- package/package/components/button/button.svelte.d.ts +45 -18
- package/package/components/button/select-button-group.svelte +51 -30
- package/package/components/button/select-button-group.svelte.d.ts +12 -8
- package/package/components/button/select-button.svelte +50 -2
- package/package/components/button/select-button.svelte.d.ts +16 -0
- package/package/components/calendar/calendar.svelte +6 -4
- package/package/components/checkbox/checkbox-group.svelte +28 -10
- package/package/components/checkbox/checkbox-group.svelte.d.ts +4 -2
- package/package/components/checkbox/checkbox.svelte +115 -71
- package/package/components/checkbox/checkbox.svelte.d.ts +13 -7
- package/package/components/dialog/dialog.svelte +39 -19
- package/package/components/dialog/dialog.svelte.d.ts +0 -4
- package/package/components/disclosure/disclosure.svelte +48 -21
- package/package/components/disclosure/disclosure.svelte.d.ts +19 -0
- package/package/components/divider/divider.svelte +14 -6
- package/package/components/divider/divider.svelte.d.ts +3 -1
- package/package/components/divider/spacer.svelte +17 -5
- package/package/components/divider/spacer.svelte.d.ts +2 -0
- package/package/components/drawer/drawer.svelte +14 -7
- package/package/components/drawer/drawer.svelte.d.ts +2 -2
- package/package/components/listbox/listbox.svelte +55 -20
- package/package/components/listbox/listbox.svelte.d.ts +12 -13
- package/package/components/listbox/option-group.svelte +22 -5
- package/package/components/listbox/option-group.svelte.d.ts +4 -0
- package/package/components/listbox/option.svelte +41 -14
- package/package/components/listbox/option.svelte.d.ts +9 -3
- package/package/components/menu/menu-button.svelte +51 -5
- package/package/components/menu/menu-button.svelte.d.ts +15 -0
- package/package/components/menu/menu-item-checkbox.svelte +41 -2
- package/package/components/menu/menu-item-checkbox.svelte.d.ts +14 -0
- package/package/components/menu/menu-item-group.svelte +26 -9
- package/package/components/menu/menu-item-group.svelte.d.ts +4 -2
- package/package/components/menu/menu-item-radio.svelte +47 -3
- package/package/components/menu/menu-item-radio.svelte.d.ts +14 -0
- package/package/components/menu/menu-item.svelte +48 -21
- package/package/components/menu/menu-item.svelte.d.ts +10 -4
- package/package/components/menu/menu.svelte +17 -9
- package/package/components/menu/menu.svelte.d.ts +8 -8
- package/package/components/radio/radio-group.svelte +50 -11
- package/package/components/radio/radio-group.svelte.d.ts +13 -5
- package/package/components/radio/radio.svelte +76 -45
- package/package/components/radio/radio.svelte.d.ts +11 -5
- package/package/components/select/combobox.svelte +59 -29
- package/package/components/select/combobox.svelte.d.ts +11 -8
- package/package/components/select/select.svelte +31 -6
- package/package/components/select/select.svelte.d.ts +10 -2
- package/package/components/slider/slider.svelte +158 -70
- package/package/components/slider/slider.svelte.d.ts +12 -4
- package/package/components/switch/switch.svelte +71 -29
- package/package/components/switch/switch.svelte.d.ts +11 -3
- package/package/components/table/table-row-header.svelte +1 -0
- package/package/components/table/table-row.svelte +16 -3
- package/package/components/table/table-row.svelte.d.ts +4 -0
- package/package/components/table/table.svelte +2 -1
- package/package/components/table/table.svelte.d.ts +4 -0
- package/package/components/tabs/tab-list.svelte +33 -16
- package/package/components/tabs/tab-list.svelte.d.ts +8 -18
- package/package/components/tabs/tab-panel.svelte +1 -2
- package/package/components/tabs/tab.svelte +25 -3
- package/package/components/tabs/tab.svelte.d.ts +10 -0
- package/package/components/text-field/markdown-editor.svelte +54 -22
- package/package/components/text-field/markdown-editor.svelte.d.ts +11 -1
- package/package/components/text-field/number-input.svelte +66 -15
- package/package/components/text-field/number-input.svelte.d.ts +13 -5
- package/package/components/text-field/password-input.svelte +42 -9
- package/package/components/text-field/password-input.svelte.d.ts +11 -1
- package/package/components/text-field/search-bar.svelte +68 -18
- package/package/components/text-field/search-bar.svelte.d.ts +26 -1
- package/package/components/text-field/text-area.svelte +55 -21
- package/package/components/text-field/text-area.svelte.d.ts +12 -19
- package/package/components/text-field/text-input.svelte +71 -46
- package/package/components/text-field/text-input.svelte.d.ts +34 -14
- package/package/components/toast/toast.svelte +119 -0
- package/package/components/toast/toast.svelte.d.ts +36 -0
- package/package/components/toolbar/toolbar.svelte +33 -10
- package/package/components/toolbar/toolbar.svelte.d.ts +7 -1
- package/package/components/util/app-shell.svelte +133 -68
- package/package/components/util/group.svelte +21 -6
- package/package/components/util/group.svelte.d.ts +4 -2
- package/package/components/util/popup.svelte +62 -10
- package/package/components/util/popup.svelte.d.ts +13 -3
- package/package/components/util/portal.svelte +1 -1
- package/package/components/util/portal.svelte.d.ts +2 -0
- package/package/index.d.ts +2 -0
- package/package/index.js +4 -3
- package/package/locales/en.d.ts +7 -9
- package/package/locales/en.js +7 -9
- package/package/locales/ja.d.ts +7 -9
- package/package/locales/ja.js +7 -9
- package/package/{components/util → services}/events.d.ts +1 -1
- package/package/{components/util → services}/events.js +3 -2
- package/package/services/group.d.ts +1 -0
- package/package/{components/util → services}/group.js +15 -13
- package/package/{components/util → services}/popup.js +10 -1
- package/package/{components/util → services}/util.d.ts +1 -1
- package/package/{components/util → services}/util.js +2 -2
- package/package/styles/core.scss +36 -7
- package/package/styles/variables.scss +98 -61
- package/package.json +40 -32
- package/package/components/util/group.d.ts +0 -1
- /package/package/{components/util → services}/popup.d.ts +0 -0
|
@@ -11,12 +11,41 @@
|
|
|
11
11
|
import { createEventDispatcher, onMount } from 'svelte';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* The `class` attribute on the wrapper element.
|
|
15
15
|
* @type {string}
|
|
16
16
|
*/
|
|
17
17
|
let className = '';
|
|
18
|
-
|
|
19
18
|
export { className as class };
|
|
19
|
+
/**
|
|
20
|
+
* Whether to hide the widget. An alias of the `aria-hidden` attribute.
|
|
21
|
+
* @type {boolean | undefined}
|
|
22
|
+
*/
|
|
23
|
+
export let hidden = undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Whether to disable the widget. An alias of the `aria-disabled` attribute.
|
|
26
|
+
* @type {boolean}
|
|
27
|
+
*/
|
|
28
|
+
export let disabled = false;
|
|
29
|
+
/**
|
|
30
|
+
* Whether to disable the widget. An alias of the `aria-readonly` attribute.
|
|
31
|
+
* @type {boolean}
|
|
32
|
+
*/
|
|
33
|
+
export let readonly = false;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to disable the widget. An alias of the `aria-invalid` attribute.
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
*/
|
|
38
|
+
export let invalid = false;
|
|
39
|
+
/**
|
|
40
|
+
* Minimum allowed value. An alias of the `aria-valuemin` attribute.
|
|
41
|
+
* @type {number | undefined}
|
|
42
|
+
*/
|
|
43
|
+
export let min = 0;
|
|
44
|
+
/**
|
|
45
|
+
* Maximum allowed value. An alias of the `aria-valuemax` attribute.
|
|
46
|
+
* @type {number | undefined}
|
|
47
|
+
*/
|
|
48
|
+
export let max = 100;
|
|
20
49
|
|
|
21
50
|
export let value = 0;
|
|
22
51
|
export let sliderLabel = '';
|
|
@@ -24,8 +53,6 @@
|
|
|
24
53
|
export let values = undefined;
|
|
25
54
|
/** @type {[string, string]} */
|
|
26
55
|
export let sliderLabels = undefined;
|
|
27
|
-
export let min = 0;
|
|
28
|
-
export let max = 100;
|
|
29
56
|
export let step = 1;
|
|
30
57
|
/** @type {(string[] | number[])} */
|
|
31
58
|
export let optionLabels = [];
|
|
@@ -33,15 +60,18 @@
|
|
|
33
60
|
$: multiThumb = !!values;
|
|
34
61
|
|
|
35
62
|
const dispatch = createEventDispatcher();
|
|
36
|
-
/** @type {HTMLElement
|
|
63
|
+
/** @type {HTMLElement | undefined} */
|
|
37
64
|
let base = undefined;
|
|
38
65
|
let barWidth = 0;
|
|
66
|
+
/** @type {number[]} */
|
|
39
67
|
let positionList = [];
|
|
68
|
+
/** @type {number[]} */
|
|
40
69
|
let valueList = [];
|
|
41
70
|
let startX = 0;
|
|
42
71
|
let startScreenX = 0;
|
|
43
72
|
const sliderPositions = [0, 0];
|
|
44
73
|
let dragging = false;
|
|
74
|
+
let targetPointerId = 0;
|
|
45
75
|
let targetValueIndex = 0;
|
|
46
76
|
|
|
47
77
|
/**
|
|
@@ -88,7 +118,7 @@
|
|
|
88
118
|
const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
|
|
89
119
|
const hasModifier = shiftKey || altKey || ctrlKey || metaKey;
|
|
90
120
|
|
|
91
|
-
if (hasModifier) {
|
|
121
|
+
if (disabled || readonly || hasModifier) {
|
|
92
122
|
return;
|
|
93
123
|
}
|
|
94
124
|
|
|
@@ -116,8 +146,8 @@
|
|
|
116
146
|
if (index > -1) {
|
|
117
147
|
if (
|
|
118
148
|
multiThumb &&
|
|
119
|
-
((
|
|
120
|
-
(
|
|
149
|
+
((valueIndex === 0 && sliderPositions[1] <= positionList[index]) ||
|
|
150
|
+
(valueIndex === 1 && sliderPositions[0] >= positionList[index]))
|
|
121
151
|
) {
|
|
122
152
|
return;
|
|
123
153
|
}
|
|
@@ -131,36 +161,63 @@
|
|
|
131
161
|
};
|
|
132
162
|
|
|
133
163
|
/**
|
|
134
|
-
* Handle the `
|
|
135
|
-
* @param {
|
|
136
|
-
* @param {number} [valueIndex] Index in the {@link values} array to be used to get/set the value.
|
|
164
|
+
* Handle the `pointermove` event fired anywhere on the page.
|
|
165
|
+
* @param {PointerEvent} event `pointermove` event.
|
|
137
166
|
*/
|
|
138
|
-
const
|
|
139
|
-
const {
|
|
167
|
+
const onPointerMove = (event) => {
|
|
168
|
+
const { screenX, pointerId } = event;
|
|
140
169
|
|
|
141
|
-
dragging
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
170
|
+
if (disabled || readonly || !dragging || pointerId !== targetPointerId) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
moveThumb(startX + (screenX - startScreenX));
|
|
145
175
|
};
|
|
146
176
|
|
|
147
177
|
/**
|
|
148
|
-
* Handle the `
|
|
149
|
-
* @param {
|
|
178
|
+
* Handle the `pointerup` and `pointercancel` events fired anywhere on the page.
|
|
179
|
+
* @param {PointerEvent} event `pointerup` or `pointercancel` event.
|
|
150
180
|
*/
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
181
|
+
const onPointerUp = (event) => {
|
|
182
|
+
const { pointerId } = event;
|
|
183
|
+
|
|
184
|
+
if (disabled || readonly || !dragging || pointerId !== targetPointerId) {
|
|
185
|
+
return;
|
|
154
186
|
}
|
|
187
|
+
|
|
188
|
+
// Reset everything
|
|
189
|
+
dragging = false;
|
|
190
|
+
startX = 0;
|
|
191
|
+
startScreenX = 0;
|
|
192
|
+
targetPointerId = 0;
|
|
193
|
+
targetValueIndex = 0;
|
|
194
|
+
|
|
195
|
+
document.removeEventListener('pointermove', onPointerMove);
|
|
196
|
+
document.removeEventListener('pointerup', onPointerUp);
|
|
197
|
+
document.removeEventListener('pointercancel', onPointerUp);
|
|
155
198
|
};
|
|
156
199
|
|
|
157
200
|
/**
|
|
158
|
-
* Handle the `
|
|
201
|
+
* Handle the `pointerdown` event fired on the slider.
|
|
202
|
+
* @param {PointerEvent} event `pointerdown` event.
|
|
203
|
+
* @param {number} [valueIndex] Index in the {@link values} array to be used to get/set the value.
|
|
159
204
|
*/
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
205
|
+
const onPointerDown = (event, valueIndex = 0) => {
|
|
206
|
+
const { clientX, screenX, pointerId } = event;
|
|
207
|
+
|
|
208
|
+
if (disabled || readonly) {
|
|
209
|
+
return;
|
|
163
210
|
}
|
|
211
|
+
|
|
212
|
+
dragging = true;
|
|
213
|
+
startX = clientX - base.getBoundingClientRect().x;
|
|
214
|
+
startScreenX = screenX;
|
|
215
|
+
targetPointerId = pointerId;
|
|
216
|
+
targetValueIndex = valueIndex;
|
|
217
|
+
|
|
218
|
+
document.addEventListener('pointermove', onPointerMove);
|
|
219
|
+
document.addEventListener('pointerup', onPointerUp);
|
|
220
|
+
document.addEventListener('pointercancel', onPointerUp);
|
|
164
221
|
};
|
|
165
222
|
|
|
166
223
|
/**
|
|
@@ -168,13 +225,11 @@
|
|
|
168
225
|
* @param {MouseEvent} event `click` event.
|
|
169
226
|
*/
|
|
170
227
|
const onClick = (event) => {
|
|
171
|
-
if (
|
|
172
|
-
|
|
228
|
+
if (disabled || readonly || multiThumb || dragging) {
|
|
229
|
+
return;
|
|
173
230
|
}
|
|
174
231
|
|
|
175
|
-
|
|
176
|
-
dragging = false;
|
|
177
|
-
}
|
|
232
|
+
moveThumb(/** @type {any} */ (event).layerX);
|
|
178
233
|
};
|
|
179
234
|
|
|
180
235
|
/**
|
|
@@ -191,7 +246,10 @@
|
|
|
191
246
|
}
|
|
192
247
|
};
|
|
193
248
|
|
|
194
|
-
|
|
249
|
+
/**
|
|
250
|
+
* Initialize the variables.
|
|
251
|
+
*/
|
|
252
|
+
const init = () => {
|
|
195
253
|
barWidth = base.clientWidth;
|
|
196
254
|
|
|
197
255
|
const stepCount = (max - min) / step + 1;
|
|
@@ -201,15 +259,27 @@
|
|
|
201
259
|
positionList = new Array(stepCount).fill(0).map((_, index) => index * stepWidth);
|
|
202
260
|
|
|
203
261
|
onValueChange();
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
onMount(() => {
|
|
265
|
+
const query = window.matchMedia('(pointer: coarse)');
|
|
266
|
+
|
|
267
|
+
query.addEventListener('change', init);
|
|
268
|
+
init();
|
|
269
|
+
|
|
270
|
+
return () => {
|
|
271
|
+
query.removeEventListener('change', init);
|
|
272
|
+
};
|
|
204
273
|
});
|
|
205
274
|
|
|
206
|
-
|
|
207
|
-
|
|
275
|
+
$: {
|
|
276
|
+
void value;
|
|
277
|
+
void values;
|
|
278
|
+
onValueChange();
|
|
279
|
+
}
|
|
208
280
|
</script>
|
|
209
281
|
|
|
210
282
|
<svelte:body
|
|
211
|
-
on:mousemove={onMouseMove}
|
|
212
|
-
on:mouseup={onMouseUp}
|
|
213
283
|
on:click={() => {
|
|
214
284
|
dragging = false;
|
|
215
285
|
}}
|
|
@@ -217,7 +287,9 @@
|
|
|
217
287
|
|
|
218
288
|
<div
|
|
219
289
|
class="sui slider {className}"
|
|
290
|
+
class:disabled
|
|
220
291
|
role="none"
|
|
292
|
+
hidden={hidden || undefined}
|
|
221
293
|
{...$$restProps}
|
|
222
294
|
on:click|preventDefault|stopPropagation
|
|
223
295
|
>
|
|
@@ -225,45 +297,44 @@
|
|
|
225
297
|
class="base"
|
|
226
298
|
role="none"
|
|
227
299
|
bind:this={base}
|
|
228
|
-
on:click|preventDefault|stopPropagation={(event) =>
|
|
229
|
-
onClick(event);
|
|
230
|
-
}}
|
|
300
|
+
on:click|preventDefault|stopPropagation={(event) => onClick(event)}
|
|
231
301
|
>
|
|
302
|
+
<div class="base-bar" />
|
|
232
303
|
<div
|
|
233
|
-
class="bar"
|
|
304
|
+
class="slider-bar"
|
|
234
305
|
style:left="{multiThumb ? sliderPositions[0] : 0}px"
|
|
235
306
|
style:width="{multiThumb ? sliderPositions[1] - sliderPositions[0] : sliderPositions[0]}px"
|
|
236
307
|
/>
|
|
237
308
|
<div
|
|
238
|
-
tabindex="0"
|
|
239
309
|
role="slider"
|
|
310
|
+
tabindex={disabled ? -1 : 0}
|
|
240
311
|
aria-label={multiThumb ? sliderLabels?.[0] || '' : sliderLabel}
|
|
312
|
+
aria-hidden={hidden}
|
|
313
|
+
aria-disabled={disabled}
|
|
314
|
+
aria-readonly={readonly}
|
|
315
|
+
aria-invalid={invalid}
|
|
241
316
|
aria-valuemin={min}
|
|
242
317
|
aria-valuemax={max}
|
|
243
318
|
aria-valuenow={multiThumb ? values[0] : value}
|
|
244
319
|
style:left="{sliderPositions[0]}px"
|
|
245
|
-
on:
|
|
246
|
-
|
|
247
|
-
}}
|
|
248
|
-
on:keydown={(event) => {
|
|
249
|
-
onKeyDown(event, 0);
|
|
250
|
-
}}
|
|
320
|
+
on:pointerdown={(event) => onPointerDown(event, 0)}
|
|
321
|
+
on:keydown={(event) => onKeyDown(event, 0)}
|
|
251
322
|
/>
|
|
252
323
|
{#if multiThumb}
|
|
253
324
|
<div
|
|
254
|
-
tabindex="0"
|
|
255
325
|
role="slider"
|
|
326
|
+
tabindex={disabled ? -1 : 0}
|
|
256
327
|
aria-label={sliderLabels?.[1] || ''}
|
|
328
|
+
aria-hidden={hidden}
|
|
329
|
+
aria-disabled={disabled}
|
|
330
|
+
aria-readonly={readonly}
|
|
331
|
+
aria-invalid={invalid}
|
|
257
332
|
aria-valuemin={min}
|
|
258
333
|
aria-valuemax={max}
|
|
259
334
|
aria-valuenow={values[1]}
|
|
260
335
|
style:left="{sliderPositions[1]}px"
|
|
261
|
-
on:
|
|
262
|
-
|
|
263
|
-
}}
|
|
264
|
-
on:keydown={(event) => {
|
|
265
|
-
onKeyDown(event, 1);
|
|
266
|
-
}}
|
|
336
|
+
on:pointerdown={(event) => onPointerDown(event, 1)}
|
|
337
|
+
on:keydown={(event) => onKeyDown(event, 1)}
|
|
267
338
|
/>
|
|
268
339
|
{/if}
|
|
269
340
|
{#if optionLabels.length}
|
|
@@ -283,40 +354,57 @@
|
|
|
283
354
|
<style>.slider {
|
|
284
355
|
position: relative;
|
|
285
356
|
display: inline-block;
|
|
286
|
-
padding:
|
|
357
|
+
padding: var(--sui-checkbox-height) calc(var(--sui-checkbox-height) / 2);
|
|
358
|
+
touch-action: none;
|
|
359
|
+
}
|
|
360
|
+
.slider:hover .base-bar {
|
|
361
|
+
background-color: var(--sui-hover-background-color);
|
|
362
|
+
}
|
|
363
|
+
.slider:active .base-bar {
|
|
364
|
+
background-color: var(--sui-active-background-color);
|
|
287
365
|
}
|
|
288
366
|
|
|
289
367
|
.base {
|
|
290
368
|
position: relative;
|
|
291
|
-
width: var(--sui-slider-base-width,
|
|
292
|
-
height:
|
|
293
|
-
|
|
294
|
-
|
|
369
|
+
width: var(--sui-slider-base-width, calc(var(--sui-checkbox-height) * 10));
|
|
370
|
+
height: calc(var(--sui-checkbox-height) / 2);
|
|
371
|
+
cursor: pointer;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.base-bar {
|
|
375
|
+
border-width: 1px;
|
|
376
|
+
border-style: solid;
|
|
377
|
+
border-color: var(--sui-control-border-color);
|
|
378
|
+
border-radius: var(--sui-checkbox-height);
|
|
379
|
+
background-color: var(--sui-button-background-color);
|
|
380
|
+
transition: all 200ms;
|
|
381
|
+
width: 100%;
|
|
382
|
+
height: 100%;
|
|
295
383
|
}
|
|
296
384
|
|
|
297
|
-
.bar {
|
|
385
|
+
.slider-bar {
|
|
298
386
|
position: absolute;
|
|
299
387
|
top: 0;
|
|
300
|
-
height:
|
|
301
|
-
border-radius:
|
|
302
|
-
background-color: var(--sui-primary-accent-color-
|
|
388
|
+
height: calc(var(--sui-checkbox-height) / 2);
|
|
389
|
+
border-radius: var(--sui-checkbox-height);
|
|
390
|
+
background-color: var(--sui-primary-accent-color-light);
|
|
303
391
|
}
|
|
304
392
|
|
|
305
393
|
[role=slider] {
|
|
306
394
|
position: absolute;
|
|
307
395
|
top: 0;
|
|
308
|
-
border:
|
|
309
|
-
border-radius:
|
|
310
|
-
width:
|
|
311
|
-
height:
|
|
312
|
-
background-color: var(--sui-primary-accent-color-
|
|
396
|
+
border: 3px solid var(--sui-primary-accent-color-light);
|
|
397
|
+
border-radius: var(--sui-checkbox-height);
|
|
398
|
+
width: calc(var(--sui-checkbox-height) - 2px);
|
|
399
|
+
height: calc(var(--sui-checkbox-height) - 2px);
|
|
400
|
+
background-color: var(--sui-primary-accent-color-inverted);
|
|
313
401
|
cursor: pointer;
|
|
314
|
-
transform: translate(-
|
|
402
|
+
transform: translate(calc((var(--sui-checkbox-height) / 2 - 1px) * -1), calc((var(--sui-checkbox-height) / 4 - 1px) * -1));
|
|
315
403
|
}
|
|
316
404
|
|
|
317
405
|
.label {
|
|
318
406
|
position: absolute;
|
|
319
|
-
top:
|
|
407
|
+
top: calc(var(--sui-checkbox-height) / 2 + 8px);
|
|
320
408
|
transform: translateX(-50%);
|
|
321
409
|
font-size: var(--sui-font-size-x-small);
|
|
322
410
|
}</style>
|
|
@@ -12,12 +12,16 @@
|
|
|
12
12
|
export default class Slider extends SvelteComponent<{
|
|
13
13
|
[x: string]: any;
|
|
14
14
|
class?: string;
|
|
15
|
+
invalid?: boolean;
|
|
16
|
+
disabled?: boolean;
|
|
15
17
|
max?: number;
|
|
16
18
|
min?: number;
|
|
17
19
|
step?: number;
|
|
18
20
|
value?: number;
|
|
19
|
-
|
|
21
|
+
hidden?: boolean;
|
|
22
|
+
readonly?: boolean;
|
|
20
23
|
values?: [number, number];
|
|
24
|
+
sliderLabel?: string;
|
|
21
25
|
sliderLabels?: [string, string];
|
|
22
26
|
optionLabels?: string[] | number[];
|
|
23
27
|
}, {
|
|
@@ -35,12 +39,16 @@ declare const __propDef: {
|
|
|
35
39
|
props: {
|
|
36
40
|
[x: string]: any;
|
|
37
41
|
class?: string;
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
invalid?: boolean;
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
max?: number | undefined;
|
|
45
|
+
min?: number | undefined;
|
|
40
46
|
step?: number;
|
|
41
47
|
value?: number;
|
|
42
|
-
|
|
48
|
+
hidden?: boolean | undefined;
|
|
49
|
+
readonly?: boolean;
|
|
43
50
|
values?: [number, number];
|
|
51
|
+
sliderLabel?: string;
|
|
44
52
|
sliderLabels?: [string, string];
|
|
45
53
|
optionLabels?: (string[] | number[]);
|
|
46
54
|
};
|
|
@@ -6,26 +6,60 @@
|
|
|
6
6
|
-->
|
|
7
7
|
<script>
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* The `class` attribute on the wrapper element.
|
|
10
10
|
* @type {string}
|
|
11
11
|
*/
|
|
12
12
|
let className = '';
|
|
13
|
-
|
|
14
13
|
export { className as class };
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Whether to hide the widget. An alias of the `aria-hidden` attribute.
|
|
16
|
+
* @type {boolean | undefined}
|
|
17
|
+
*/
|
|
18
|
+
export let hidden = undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to disable the widget. An alias of the `aria-disabled` attribute.
|
|
21
|
+
* @type {boolean}
|
|
22
|
+
*/
|
|
20
23
|
export let disabled = false;
|
|
24
|
+
/**
|
|
25
|
+
* Whether to disable the widget. An alias of the `aria-readonly` attribute.
|
|
26
|
+
* @type {boolean}
|
|
27
|
+
*/
|
|
28
|
+
export let readonly = false;
|
|
29
|
+
/**
|
|
30
|
+
* Whether to disable the widget. An alias of the `aria-required` attribute.
|
|
31
|
+
* @type {boolean}
|
|
32
|
+
*/
|
|
33
|
+
export let required = false;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to disable the widget. An alias of the `aria-invalid` attribute.
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
*/
|
|
38
|
+
export let invalid = false;
|
|
39
|
+
/**
|
|
40
|
+
* Whether to check the widget. An alias of the `aria-checked` attribute.
|
|
41
|
+
* @type {boolean | 'mixed'}
|
|
42
|
+
*/
|
|
43
|
+
export let checked = false;
|
|
44
|
+
/**
|
|
45
|
+
* Text label displayed next to the switch.
|
|
46
|
+
* @type {string | undefined}
|
|
47
|
+
*/
|
|
48
|
+
export let label = undefined;
|
|
21
49
|
</script>
|
|
22
50
|
|
|
23
51
|
<button
|
|
24
52
|
class="sui switch {className}"
|
|
25
|
-
|
|
53
|
+
type="button"
|
|
26
54
|
role="switch"
|
|
27
|
-
|
|
55
|
+
hidden={hidden || undefined}
|
|
56
|
+
disabled={disabled || undefined}
|
|
28
57
|
aria-checked={checked}
|
|
58
|
+
aria-hidden={hidden}
|
|
59
|
+
aria-disabled={disabled}
|
|
60
|
+
aria-readonly={readonly}
|
|
61
|
+
aria-required={required}
|
|
62
|
+
aria-invalid={invalid}
|
|
29
63
|
{...$$restProps}
|
|
30
64
|
on:click={() => {
|
|
31
65
|
checked = !checked;
|
|
@@ -58,11 +92,17 @@
|
|
|
58
92
|
-webkit-user-select: none;
|
|
59
93
|
user-select: none;
|
|
60
94
|
}
|
|
61
|
-
button:
|
|
62
|
-
|
|
95
|
+
button:hover[aria-checked=false] span {
|
|
96
|
+
background-color: var(--sui-hover-background-color);
|
|
97
|
+
}
|
|
98
|
+
button:hover[aria-checked=true] span {
|
|
99
|
+
background-color: var(--sui-primary-accent-color-light);
|
|
100
|
+
}
|
|
101
|
+
button:active[aria-checked=false] span {
|
|
102
|
+
background-color: var(--sui-active-background-color);
|
|
63
103
|
}
|
|
64
|
-
button:
|
|
65
|
-
|
|
104
|
+
button:active[aria-checked=true] span {
|
|
105
|
+
background-color: var(--sui-primary-accent-color-dark);
|
|
66
106
|
}
|
|
67
107
|
button:focus-visible {
|
|
68
108
|
outline: 0;
|
|
@@ -71,36 +111,38 @@ button:focus-visible span::before {
|
|
|
71
111
|
outline-offset: 1px;
|
|
72
112
|
outline-width: 2px;
|
|
73
113
|
outline-style: solid;
|
|
74
|
-
outline-color: var(--sui-primary-accent-color-
|
|
114
|
+
outline-color: var(--sui-primary-accent-color-light);
|
|
75
115
|
}
|
|
76
116
|
button[aria-checked=true] span {
|
|
77
117
|
background-color: var(--sui-primary-accent-color);
|
|
78
118
|
border-color: transparent;
|
|
79
119
|
}
|
|
80
120
|
button[aria-checked=true] span::before {
|
|
81
|
-
transform: translateX(
|
|
82
|
-
|
|
121
|
+
transform: translateX(calc(var(--sui-checkbox-height) * 2 - var(--sui-checkbox-height)));
|
|
122
|
+
border-color: var(--sui-primary-accent-color);
|
|
123
|
+
background-color: var(--sui-primary-accent-color-inverted);
|
|
83
124
|
}
|
|
84
125
|
|
|
85
126
|
span {
|
|
86
127
|
position: relative;
|
|
87
|
-
width:
|
|
88
|
-
height:
|
|
89
|
-
padding: 2px;
|
|
90
|
-
display: inline-
|
|
91
|
-
|
|
92
|
-
|
|
128
|
+
width: calc(var(--sui-checkbox-height) * 2);
|
|
129
|
+
height: var(--sui-checkbox-height);
|
|
130
|
+
padding: 0 2px;
|
|
131
|
+
display: inline-flex;
|
|
132
|
+
align-items: center;
|
|
133
|
+
border-width: 1.5px;
|
|
134
|
+
border-style: solid;
|
|
135
|
+
border-color: var(--sui-control-border-color);
|
|
136
|
+
border-radius: var(--sui-checkbox-height);
|
|
137
|
+
background-color: var(--sui-control-background-color);
|
|
93
138
|
transition: all 200ms;
|
|
94
139
|
}
|
|
95
|
-
span:hover {
|
|
96
|
-
background-color: var(--sui-highlight-background-color);
|
|
97
|
-
}
|
|
98
140
|
span::before {
|
|
99
141
|
display: inline-block;
|
|
100
|
-
width:
|
|
101
|
-
height:
|
|
102
|
-
border-radius:
|
|
103
|
-
background-color: var(--sui-
|
|
142
|
+
width: calc(var(--sui-checkbox-height) - 6px);
|
|
143
|
+
height: calc(var(--sui-checkbox-height) - 6px);
|
|
144
|
+
border-radius: var(--sui-checkbox-height);
|
|
145
|
+
background-color: var(--sui-control-border-color);
|
|
104
146
|
transition: all 200ms;
|
|
105
147
|
content: "";
|
|
106
148
|
}</style>
|
|
@@ -10,8 +10,12 @@ export default class Switch extends SvelteComponent<{
|
|
|
10
10
|
[x: string]: any;
|
|
11
11
|
class?: string;
|
|
12
12
|
label?: string;
|
|
13
|
-
|
|
13
|
+
invalid?: boolean;
|
|
14
|
+
checked?: boolean | "mixed";
|
|
14
15
|
disabled?: boolean;
|
|
16
|
+
required?: boolean;
|
|
17
|
+
hidden?: boolean;
|
|
18
|
+
readonly?: boolean;
|
|
15
19
|
}, {
|
|
16
20
|
[evt: string]: CustomEvent<any>;
|
|
17
21
|
}, {
|
|
@@ -26,9 +30,13 @@ declare const __propDef: {
|
|
|
26
30
|
props: {
|
|
27
31
|
[x: string]: any;
|
|
28
32
|
class?: string;
|
|
29
|
-
label?: string;
|
|
30
|
-
|
|
33
|
+
label?: string | undefined;
|
|
34
|
+
invalid?: boolean;
|
|
35
|
+
checked?: boolean | 'mixed';
|
|
31
36
|
disabled?: boolean;
|
|
37
|
+
required?: boolean;
|
|
38
|
+
hidden?: boolean | undefined;
|
|
39
|
+
readonly?: boolean;
|
|
32
40
|
};
|
|
33
41
|
events: {
|
|
34
42
|
[evt: string]: CustomEvent<any>;
|
|
@@ -6,18 +6,31 @@
|
|
|
6
6
|
-->
|
|
7
7
|
<script>
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* The `class` attribute on the wrapper element.
|
|
10
10
|
* @type {string}
|
|
11
11
|
*/
|
|
12
12
|
let className = '';
|
|
13
|
-
|
|
14
13
|
export { className as class };
|
|
14
|
+
/**
|
|
15
|
+
* Whether to select the widget. An alias of the `aria-selected` attribute.
|
|
16
|
+
* @type {boolean}
|
|
17
|
+
*/
|
|
18
|
+
export let selected = false;
|
|
15
19
|
</script>
|
|
16
20
|
|
|
17
|
-
<div
|
|
21
|
+
<div
|
|
22
|
+
class="sui table-row {className}"
|
|
23
|
+
role="row"
|
|
24
|
+
tabindex="0"
|
|
25
|
+
aria-selected={selected}
|
|
26
|
+
{...$$restProps}
|
|
27
|
+
on:click
|
|
28
|
+
on:select
|
|
29
|
+
>
|
|
18
30
|
<slot />
|
|
19
31
|
</div>
|
|
20
32
|
|
|
21
33
|
<style>.table-row {
|
|
22
34
|
display: table-row;
|
|
35
|
+
height: var(--sui-primary-row-height);
|
|
23
36
|
}</style>
|
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
export default class TableRow extends SvelteComponent<{
|
|
10
10
|
[x: string]: any;
|
|
11
11
|
class?: string;
|
|
12
|
+
selected?: boolean;
|
|
12
13
|
}, {
|
|
13
14
|
click: MouseEvent;
|
|
15
|
+
select: Event;
|
|
14
16
|
} & {
|
|
15
17
|
[evt: string]: CustomEvent<any>;
|
|
16
18
|
}, {
|
|
@@ -25,9 +27,11 @@ declare const __propDef: {
|
|
|
25
27
|
props: {
|
|
26
28
|
[x: string]: any;
|
|
27
29
|
class?: string;
|
|
30
|
+
selected?: boolean;
|
|
28
31
|
};
|
|
29
32
|
events: {
|
|
30
33
|
click: MouseEvent;
|
|
34
|
+
select: Event;
|
|
31
35
|
} & {
|
|
32
36
|
[evt: string]: CustomEvent<any>;
|
|
33
37
|
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
@see https://w3c.github.io/aria/#grid
|
|
6
6
|
-->
|
|
7
7
|
<script>
|
|
8
|
-
import { activateGroup } from '
|
|
8
|
+
import { activateGroup } from '../../services/group';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* CSS class name on the button.
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
{...$$restProps}
|
|
26
26
|
bind:this={element}
|
|
27
27
|
use:activateGroup
|
|
28
|
+
on:change
|
|
28
29
|
>
|
|
29
30
|
<slot />
|
|
30
31
|
</div>
|
|
@@ -11,6 +11,8 @@ export default class Table extends SvelteComponent<{
|
|
|
11
11
|
class?: string;
|
|
12
12
|
element?: HTMLElement;
|
|
13
13
|
}, {
|
|
14
|
+
change: Event;
|
|
15
|
+
} & {
|
|
14
16
|
[evt: string]: CustomEvent<any>;
|
|
15
17
|
}, {
|
|
16
18
|
default: {};
|
|
@@ -27,6 +29,8 @@ declare const __propDef: {
|
|
|
27
29
|
element?: HTMLElement | null;
|
|
28
30
|
};
|
|
29
31
|
events: {
|
|
32
|
+
change: Event;
|
|
33
|
+
} & {
|
|
30
34
|
[evt: string]: CustomEvent<any>;
|
|
31
35
|
};
|
|
32
36
|
slots: {
|