@sveltia/ui 0.6.6 → 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.
Files changed (97) hide show
  1. package/package/components/button/button.svelte +109 -75
  2. package/package/components/button/button.svelte.d.ts +45 -18
  3. package/package/components/button/select-button-group.svelte +51 -30
  4. package/package/components/button/select-button-group.svelte.d.ts +12 -8
  5. package/package/components/button/select-button.svelte +50 -2
  6. package/package/components/button/select-button.svelte.d.ts +16 -0
  7. package/package/components/calendar/calendar.svelte +5 -3
  8. package/package/components/checkbox/checkbox-group.svelte +28 -10
  9. package/package/components/checkbox/checkbox-group.svelte.d.ts +4 -2
  10. package/package/components/checkbox/checkbox.svelte +114 -71
  11. package/package/components/checkbox/checkbox.svelte.d.ts +13 -7
  12. package/package/components/dialog/dialog.svelte +36 -16
  13. package/package/components/dialog/dialog.svelte.d.ts +0 -4
  14. package/package/components/disclosure/disclosure.svelte +48 -21
  15. package/package/components/disclosure/disclosure.svelte.d.ts +19 -0
  16. package/package/components/divider/divider.svelte +14 -6
  17. package/package/components/divider/divider.svelte.d.ts +3 -1
  18. package/package/components/divider/spacer.svelte +17 -5
  19. package/package/components/divider/spacer.svelte.d.ts +2 -0
  20. package/package/components/drawer/drawer.svelte +12 -5
  21. package/package/components/listbox/listbox.svelte +55 -20
  22. package/package/components/listbox/listbox.svelte.d.ts +12 -13
  23. package/package/components/listbox/option-group.svelte +22 -5
  24. package/package/components/listbox/option-group.svelte.d.ts +4 -0
  25. package/package/components/listbox/option.svelte +41 -14
  26. package/package/components/listbox/option.svelte.d.ts +9 -3
  27. package/package/components/menu/menu-button.svelte +51 -5
  28. package/package/components/menu/menu-button.svelte.d.ts +15 -0
  29. package/package/components/menu/menu-item-checkbox.svelte +41 -2
  30. package/package/components/menu/menu-item-checkbox.svelte.d.ts +14 -0
  31. package/package/components/menu/menu-item-group.svelte +26 -9
  32. package/package/components/menu/menu-item-group.svelte.d.ts +4 -2
  33. package/package/components/menu/menu-item-radio.svelte +47 -3
  34. package/package/components/menu/menu-item-radio.svelte.d.ts +14 -0
  35. package/package/components/menu/menu-item.svelte +48 -21
  36. package/package/components/menu/menu-item.svelte.d.ts +10 -4
  37. package/package/components/menu/menu.svelte +17 -9
  38. package/package/components/menu/menu.svelte.d.ts +8 -8
  39. package/package/components/radio/radio-group.svelte +50 -11
  40. package/package/components/radio/radio-group.svelte.d.ts +13 -5
  41. package/package/components/radio/radio.svelte +76 -45
  42. package/package/components/radio/radio.svelte.d.ts +11 -5
  43. package/package/components/select/combobox.svelte +58 -28
  44. package/package/components/select/combobox.svelte.d.ts +8 -2
  45. package/package/components/select/select.svelte +31 -6
  46. package/package/components/select/select.svelte.d.ts +10 -2
  47. package/package/components/slider/slider.svelte +158 -70
  48. package/package/components/slider/slider.svelte.d.ts +12 -4
  49. package/package/components/switch/switch.svelte +71 -29
  50. package/package/components/switch/switch.svelte.d.ts +11 -3
  51. package/package/components/table/table-row-header.svelte +1 -0
  52. package/package/components/table/table-row.svelte +16 -3
  53. package/package/components/table/table-row.svelte.d.ts +4 -0
  54. package/package/components/table/table.svelte +2 -1
  55. package/package/components/table/table.svelte.d.ts +4 -0
  56. package/package/components/tabs/tab-list.svelte +33 -16
  57. package/package/components/tabs/tab-list.svelte.d.ts +8 -18
  58. package/package/components/tabs/tab-panel.svelte +1 -2
  59. package/package/components/tabs/tab.svelte +25 -3
  60. package/package/components/tabs/tab.svelte.d.ts +10 -0
  61. package/package/components/text-field/markdown-editor.svelte +54 -22
  62. package/package/components/text-field/markdown-editor.svelte.d.ts +11 -1
  63. package/package/components/text-field/number-input.svelte +66 -15
  64. package/package/components/text-field/number-input.svelte.d.ts +13 -5
  65. package/package/components/text-field/password-input.svelte +42 -9
  66. package/package/components/text-field/password-input.svelte.d.ts +11 -1
  67. package/package/components/text-field/search-bar.svelte +67 -17
  68. package/package/components/text-field/search-bar.svelte.d.ts +26 -1
  69. package/package/components/text-field/text-area.svelte +55 -21
  70. package/package/components/text-field/text-area.svelte.d.ts +12 -19
  71. package/package/components/text-field/text-input.svelte +71 -46
  72. package/package/components/text-field/text-input.svelte.d.ts +34 -14
  73. package/package/components/toast/toast.svelte +119 -0
  74. package/package/components/toast/toast.svelte.d.ts +36 -0
  75. package/package/components/toolbar/toolbar.svelte +33 -10
  76. package/package/components/toolbar/toolbar.svelte.d.ts +7 -1
  77. package/package/components/util/app-shell.svelte +133 -69
  78. package/package/components/util/group.svelte +21 -6
  79. package/package/components/util/group.svelte.d.ts +4 -2
  80. package/package/components/util/popup.svelte +62 -10
  81. package/package/components/util/popup.svelte.d.ts +13 -3
  82. package/package/components/util/portal.svelte +1 -1
  83. package/package/components/util/portal.svelte.d.ts +2 -0
  84. package/package/index.d.ts +2 -0
  85. package/package/index.js +4 -3
  86. package/package/{components/util → services}/events.d.ts +1 -1
  87. package/package/{components/util → services}/events.js +3 -2
  88. package/package/services/group.d.ts +1 -0
  89. package/package/{components/util → services}/group.js +15 -13
  90. package/package/{components/util → services}/util.d.ts +1 -1
  91. package/package/{components/util → services}/util.js +2 -2
  92. package/package/styles/core.scss +36 -7
  93. package/package/styles/variables.scss +98 -62
  94. package/package.json +37 -29
  95. package/package/components/util/group.d.ts +0 -1
  96. /package/package/{components/util → services}/popup.d.ts +0 -0
  97. /package/package/{components/util → services}/popup.js +0 -0
@@ -11,12 +11,41 @@
11
11
  import { createEventDispatcher, onMount } from 'svelte';
12
12
 
13
13
  /**
14
- * CSS class name on the button.
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
- ((targetValueIndex === 0 && sliderPositions[1] <= positionList[index]) ||
120
- (targetValueIndex === 1 && sliderPositions[0] >= positionList[index]))
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 `mousedown` event fired on the slider.
135
- * @param {MouseEvent} event `mousedown` event.
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 onMouseDown = (event, valueIndex = 0) => {
139
- const { clientX, screenX } = event;
167
+ const onPointerMove = (event) => {
168
+ const { screenX, pointerId } = event;
140
169
 
141
- dragging = true;
142
- startX = clientX - base.getBoundingClientRect().x;
143
- startScreenX = screenX;
144
- targetValueIndex = valueIndex;
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 `mousemove` event fired anywhere on the page.
149
- * @param {MouseEvent} event `mousemove` event.
178
+ * Handle the `pointerup` and `pointercancel` events fired anywhere on the page.
179
+ * @param {PointerEvent} event `pointerup` or `pointercancel` event.
150
180
  */
151
- const onMouseMove = (event) => {
152
- if (dragging) {
153
- moveThumb(startX + (event.screenX - startScreenX));
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 `mouseup` event fired anywhere on the page.
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 onMouseUp = () => {
161
- if (dragging) {
162
- dragging = false;
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 (!multiThumb && !dragging) {
172
- moveThumb(/** @type {any} */ (event).layerX);
228
+ if (disabled || readonly || multiThumb || dragging) {
229
+ return;
173
230
  }
174
231
 
175
- if (dragging) {
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
- onMount(() => {
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
- // @ts-ignore Arguments are triggers
207
- $: onValueChange(value, values);
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:mousedown={(event) => {
246
- onMouseDown(event, 0);
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:mousedown={(event) => {
262
- onMouseDown(event, 1);
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: 16px;
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, 200px);
292
- height: 8px;
293
- border-radius: 8px;
294
- background-color: var(--sui-control-border-color);
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: 8px;
301
- border-radius: 8px;
302
- background-color: var(--sui-primary-accent-color-lighter);
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: 2px solid var(--sui-primary-accent-color-lighter);
309
- border-radius: 8px;
310
- width: 16px;
311
- height: 16px;
312
- background-color: var(--sui-primary-accent-color-foreground);
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(-8px, -4px);
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: 12px;
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
- sliderLabel?: string;
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
- max?: number;
39
- min?: number;
42
+ invalid?: boolean;
43
+ disabled?: boolean;
44
+ max?: number | undefined;
45
+ min?: number | undefined;
40
46
  step?: number;
41
47
  value?: number;
42
- sliderLabel?: string;
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
- * CSS class name on the button.
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
- export let label = '';
17
-
18
- export let checked = false;
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
- {disabled}
53
+ type="button"
26
54
  role="switch"
27
- aria-disabled={disabled}
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:disabled {
62
- cursor: default;
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:disabled span {
65
- opacity: 0.4;
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-lighter);
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(22px);
82
- background-color: var(--sui-primary-accent-color-foreground);
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: 42px;
88
- height: 20px;
89
- padding: 2px;
90
- display: inline-block;
91
- border-radius: 16px;
92
- background-color: var(--sui-control-border-color);
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: 16px;
101
- height: 16px;
102
- border-radius: 16px;
103
- background-color: var(--sui-primary-accent-color-foreground);
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
- checked?: boolean;
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
- checked?: boolean;
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>;
@@ -20,4 +20,5 @@
20
20
 
21
21
  <style>.table-row-header {
22
22
  display: table-cell;
23
+ height: var(--sui-secondary-row-height);
23
24
  }</style>
@@ -6,18 +6,31 @@
6
6
  -->
7
7
  <script>
8
8
  /**
9
- * CSS class name on the button.
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 role="row" tabindex="0" class="sui table-row {className}" {...$$restProps} on:click>
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 '../util/group';
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: {