@sveltia/ui 0.6.6 → 0.7.1

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 +112 -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 +37 -17
  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 +13 -6
  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 +59 -29
  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 +120 -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 +63 -11
  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 +17 -15
  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 +42 -34
  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
@@ -0,0 +1,120 @@
1
+ <!--
2
+ @component
3
+ Toast notification. Use the Popover API if possible to acquire a non-modal top layer.
4
+ @see https://w3c.github.io/aria/#alert
5
+ @see https://developer.chrome.com/blog/introducing-popover-api/
6
+ -->
7
+ <script>
8
+ import { onMount } from 'svelte';
9
+ import Alert from '../alert/alert.svelte';
10
+
11
+ /**
12
+ * @type {boolean}
13
+ */
14
+ export let show = false;
15
+ /**
16
+ * Duration to automatically hide the toast. Use `0` to hide it manually from the consumer.
17
+ * @type {number}
18
+ */
19
+ export let duration = 5000;
20
+ /**
21
+ * Alert type.
22
+ * @type {'error' | 'warning' | 'info' | 'success'}
23
+ */
24
+ export let type = 'info';
25
+
26
+ /**
27
+ * @type {HTMLElement}
28
+ */
29
+ let popoverBase;
30
+ /**
31
+ * @type {HTMLElement}
32
+ */
33
+ let popover;
34
+ /**
35
+ * @type {HTMLElement}
36
+ */
37
+ let toast;
38
+
39
+ onMount(() => {
40
+ popover = document.querySelector('.sui.toast-base.enabled');
41
+
42
+ if (popover) {
43
+ popoverBase.remove();
44
+ } else {
45
+ popover = popoverBase;
46
+ popover.classList.add('enabled');
47
+ (document.querySelector('.sui.app-shell') ?? document.body).appendChild(popover);
48
+
49
+ // Move the element to top layer
50
+ if (popover.showPopover) {
51
+ popover.popover = 'manual';
52
+ popover.showPopover();
53
+ }
54
+ }
55
+
56
+ return () => {
57
+ toast?.remove();
58
+ };
59
+ });
60
+
61
+ $: {
62
+ if (popover && toast) {
63
+ popover.appendChild(toast);
64
+ }
65
+ }
66
+
67
+ $: {
68
+ if (show && duration) {
69
+ window.setTimeout(() => {
70
+ show = false;
71
+ }, duration);
72
+ }
73
+ }
74
+ </script>
75
+
76
+ <div class="sui toast-base" bind:this={popoverBase} />
77
+
78
+ <div class="sui toast" hidden={!show || undefined} bind:this={toast}>
79
+ <Alert {type}>
80
+ {#if show}
81
+ <slot />
82
+ {/if}
83
+ </Alert>
84
+ </div>
85
+
86
+ <style>.toast-base {
87
+ position: fixed;
88
+ inset: 0;
89
+ z-index: 99999;
90
+ display: flex;
91
+ flex-direction: column;
92
+ justify-content: flex-end;
93
+ align-items: flex-end;
94
+ gap: 8px;
95
+ margin: 0;
96
+ border: 0;
97
+ padding: 16px;
98
+ width: 100vw;
99
+ height: 100vh;
100
+ background-color: transparent;
101
+ font-family: var(--sui-font-family-default);
102
+ font-size: var(--sui-font-size-default);
103
+ font-weight: var(--sui-font-weight-normal);
104
+ pointer-events: none;
105
+ -webkit-user-select: none;
106
+ user-select: none;
107
+ }
108
+
109
+ .toast {
110
+ position: absolute;
111
+ inset: auto 16px 16px auto;
112
+ box-shadow: 0 8px 16px var(--sui-popup-shadow-color);
113
+ opacity: 1;
114
+ transition-duration: 250ms;
115
+ will-change: opacity;
116
+ }
117
+ .toast[hidden] {
118
+ display: block;
119
+ opacity: 0;
120
+ }</style>
@@ -0,0 +1,36 @@
1
+ /** @typedef {typeof __propDef.props} ToastProps */
2
+ /** @typedef {typeof __propDef.events} ToastEvents */
3
+ /** @typedef {typeof __propDef.slots} ToastSlots */
4
+ /**
5
+ * Toast notification. Use the Popover API if possible to acquire a non-modal top layer.
6
+ * @see https://w3c.github.io/aria/#alert
7
+ * @see https://developer.chrome.com/blog/introducing-popover-api/
8
+ */
9
+ export default class Toast extends SvelteComponent<{
10
+ type?: "error" | "warning" | "info" | "success";
11
+ show?: boolean;
12
+ duration?: number;
13
+ }, {
14
+ [evt: string]: CustomEvent<any>;
15
+ }, {
16
+ default: {};
17
+ }> {
18
+ }
19
+ export type ToastProps = typeof __propDef.props;
20
+ export type ToastEvents = typeof __propDef.events;
21
+ export type ToastSlots = typeof __propDef.slots;
22
+ import { SvelteComponent } from "svelte";
23
+ declare const __propDef: {
24
+ props: {
25
+ type?: 'error' | 'warning' | 'info' | 'success';
26
+ show?: boolean;
27
+ duration?: number;
28
+ };
29
+ events: {
30
+ [evt: string]: CustomEvent<any>;
31
+ };
32
+ slots: {
33
+ default: {};
34
+ };
35
+ };
36
+ export {};
@@ -6,31 +6,49 @@
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
14
  /**
17
- * Define the `aria-orientation` property on the toolbar element.
18
- * @type {('horizontal'|'vertical')}
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
+ */
23
+ export let disabled = false;
24
+ /**
25
+ * Orientation of the widget. An alias of the `aria-orientation` attribute.
26
+ * @type {'horizontal' | 'vertical'}
19
27
  */
20
28
  export let orientation = 'horizontal';
29
+ /**
30
+ * The style variant of the toolbar.
31
+ * @type {'primary' | 'secondary' | undefined}
32
+ */
33
+ export let variant = undefined;
21
34
  </script>
22
35
 
23
36
  <div
24
- class="sui toolbar {orientation} {className}"
37
+ class="sui toolbar {orientation} {variant ?? ''} {className}"
25
38
  role="toolbar"
39
+ hidden={hidden || undefined}
40
+ aria-hidden={hidden}
41
+ aria-disabled={disabled}
26
42
  aria-orientation={orientation}
27
43
  {...$$restProps}
28
44
  >
29
- <slot />
45
+ <div class="inner" inert={disabled}>
46
+ <slot />
47
+ </div>
30
48
  </div>
31
49
 
32
50
  <style>[role=toolbar] {
33
- --toolbar-size: 40px;
51
+ --toolbar-size: var(--sui-secondary-toolbar-size);
34
52
  flex: none !important;
35
53
  display: flex;
36
54
  align-items: center;
@@ -38,7 +56,8 @@
38
56
  padding: 8px;
39
57
  }
40
58
  [role=toolbar].primary {
41
- --toolbar-size: 48px;
59
+ --toolbar-size: var(--sui-primary-toolbar-size);
60
+ border-color: var(--sui-primary-border-color);
42
61
  background-color: var(--sui-secondary-background-color);
43
62
  }
44
63
  [role=toolbar].secondary {
@@ -57,7 +76,7 @@
57
76
  }
58
77
  [role=toolbar] :global(button[role="button"][aria-pressed="true"]),
59
78
  [role=toolbar] :global(button[role="button"][aria-checked="true"]) {
60
- background-color: var(--sui-highlight-background-color);
79
+ background-color: var(--sui-selected-background-color);
61
80
  }
62
81
  [role=toolbar] :global(h2) {
63
82
  display: flex;
@@ -71,4 +90,8 @@
71
90
  font-size: var(--sui-font-size-small);
72
91
  font-weight: normal;
73
92
  opacity: 0.8;
93
+ }
94
+
95
+ .inner {
96
+ display: contents;
74
97
  }</style>
@@ -9,6 +9,9 @@
9
9
  export default class Toolbar extends SvelteComponent<{
10
10
  [x: string]: any;
11
11
  class?: string;
12
+ disabled?: boolean;
13
+ hidden?: boolean;
14
+ variant?: "primary" | "secondary";
12
15
  orientation?: "vertical" | "horizontal";
13
16
  }, {
14
17
  [evt: string]: CustomEvent<any>;
@@ -24,7 +27,10 @@ declare const __propDef: {
24
27
  props: {
25
28
  [x: string]: any;
26
29
  class?: string;
27
- orientation?: ('horizontal' | 'vertical');
30
+ disabled?: boolean;
31
+ hidden?: boolean | undefined;
32
+ variant?: 'primary' | 'secondary' | undefined;
33
+ orientation?: 'horizontal' | 'vertical';
28
34
  };
29
35
  events: {
30
36
  [evt: string]: CustomEvent<any>;
@@ -41,7 +41,7 @@
41
41
  };
42
42
 
43
43
  window.setTimeout(() => {
44
- fontLoader.remove();
44
+ fontLoader?.remove();
45
45
  }, 1000);
46
46
  });
47
47
  </script>
@@ -59,7 +59,8 @@
59
59
 
60
60
  <!-- Preload fonts, including the icons -->
61
61
  <div class="font-loader" aria-hidden="true" bind:this={fontLoader} style:opacity="0">
62
- <strong>Sveltia</strong> <em>UI</em> <span class="material-symbols-outlined">favorite</span>
62
+ Loading <strong>Sveltia</strong> <em>UI</em>
63
+ <span class="material-symbols-outlined">favorite</span>
63
64
  </div>
64
65
 
65
66
  <div
@@ -85,60 +86,66 @@
85
86
  @import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block");
86
87
  :global(:root[data-theme=light]),
87
88
  :global(:host[data-theme=light]) {
88
- --sui-foreground-color-1-hsl: var(--sui-base-hue) 5% 0%;
89
- --sui-foreground-color-2-hsl: var(--sui-base-hue) 5% 20%;
90
- --sui-foreground-color-3-hsl: var(--sui-base-hue) 5% 40%;
91
- --sui-foreground-color-4-hsl: var(--sui-base-hue) 5% 60%;
89
+ --sui-foreground-color-1-hsl: var(--sui-base-hue) 5% 5%;
90
+ --sui-foreground-color-2-hsl: var(--sui-base-hue) 5% 25%;
91
+ --sui-foreground-color-3-hsl: var(--sui-base-hue) 5% 35%;
92
+ --sui-foreground-color-4-hsl: var(--sui-base-hue) 5% 45%;
93
+ --sui-foreground-color-5-hsl: var(--sui-base-hue) 5% 65%;
92
94
  --sui-background-color-1-hsl: var(--sui-base-hue) 5% 100%;
93
95
  --sui-background-color-2-hsl: var(--sui-base-hue) 5% 98%;
94
- --sui-background-color-3-hsl: var(--sui-base-hue) 5% 94%;
95
- --sui-background-color-4-hsl: var(--sui-base-hue) 5% 90%;
96
- --sui-background-color-5-hsl: var(--sui-base-hue) 5% 86%;
97
- --sui-border-color-1-hsl: var(--sui-base-hue) 5% 78%;
98
- --sui-border-color-2-hsl: var(--sui-base-hue) 5% 82%;
96
+ --sui-background-color-3-hsl: var(--sui-base-hue) 5% 96%;
97
+ --sui-background-color-4-hsl: var(--sui-base-hue) 5% 94%;
98
+ --sui-background-color-5-hsl: var(--sui-base-hue) 5% 74%;
99
+ --sui-border-color-1-hsl: var(--sui-base-hue) 5% 65%;
100
+ --sui-border-color-2-hsl: var(--sui-base-hue) 5% 74%;
101
+ --sui-border-color-3-hsl: var(--sui-base-hue) 5% 70%;
99
102
  --sui-shadow-color: var(--sui-base-hue) 10% 0%;
100
- --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 45%);
101
- --sui-primary-accent-color-lighter: hsl(var(--sui-base-hue) 80% 40%);
102
- --sui-primary-accent-color-darker: hsl(var(--sui-base-hue) 80% 50%);
103
- --sui-primary-accent-color-foreground: hsl(var(--sui-base-hue) 10% 100%);
103
+ --sui-primary-accent-color-text: hsl(var(--sui-base-hue) 80% 40%);
104
+ --sui-primary-accent-color-light: hsl(var(--sui-base-hue) 80% 45%);
105
+ --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);
106
+ --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);
107
+ --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);
104
108
  --sui-error-color-hue: 0;
105
109
  --sui-warning-color-hue: 40;
106
110
  --sui-info-color-hue: 210;
107
111
  --sui-success-color-hue: 100;
108
- --sui-alert-foreground-color-saturation: 88%;
109
- --sui-alert-foreground-color-lightness: 28%;
110
- --sui-alert-background-color-saturation: 68%;
111
- --sui-alert-background-color-lightness: 88%;
112
+ --sui-alert-foreground-color-saturation: 85%;
113
+ --sui-alert-foreground-color-lightness: 25%;
114
+ --sui-alert-background-color-saturation: 65%;
115
+ --sui-alert-background-color-lightness: 90%;
112
116
  --sui-alert-border-color-saturation: 48%;
113
117
  --sui-alert-border-color-lightness: 68%;
114
118
  }
115
119
 
116
120
  :global(:root[data-theme=dark]),
117
121
  :global(:host[data-theme=dark]) {
118
- --sui-foreground-color-1-hsl: var(--sui-base-hue) 10% 100%;
119
- --sui-foreground-color-2-hsl: var(--sui-base-hue) 10% 80%;
120
- --sui-foreground-color-3-hsl: var(--sui-base-hue) 10% 60%;
121
- --sui-foreground-color-4-hsl: var(--sui-base-hue) 10% 40%;
122
+ --sui-foreground-color-1-hsl: var(--sui-base-hue) 10% 95%;
123
+ --sui-foreground-color-2-hsl: var(--sui-base-hue) 10% 75%;
124
+ --sui-foreground-color-3-hsl: var(--sui-base-hue) 10% 65%;
125
+ --sui-foreground-color-4-hsl: var(--sui-base-hue) 10% 55%;
126
+ --sui-foreground-color-5-hsl: var(--sui-base-hue) 10% 35%;
122
127
  --sui-background-color-1-hsl: var(--sui-base-hue) 10% 10%;
123
128
  --sui-background-color-2-hsl: var(--sui-base-hue) 10% 12%;
124
- --sui-background-color-3-hsl: var(--sui-base-hue) 10% 16%;
125
- --sui-background-color-4-hsl: var(--sui-base-hue) 10% 20%;
126
- --sui-background-color-5-hsl: var(--sui-base-hue) 10% 24%;
127
- --sui-border-color-1-hsl: var(--sui-base-hue) 10% 32%;
128
- --sui-border-color-2-hsl: var(--sui-base-hue) 10% 28%;
129
+ --sui-background-color-3-hsl: var(--sui-base-hue) 10% 14%;
130
+ --sui-background-color-4-hsl: var(--sui-base-hue) 10% 16%;
131
+ --sui-background-color-5-hsl: var(--sui-base-hue) 10% 26%;
132
+ --sui-border-color-1-hsl: var(--sui-base-hue) 10% 35%;
133
+ --sui-border-color-2-hsl: var(--sui-base-hue) 10% 26%;
134
+ --sui-border-color-3-hsl: var(--sui-base-hue) 10% 22%;
129
135
  --sui-shadow-color: var(--sui-base-hue) 10% 0%;
130
- --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 45%);
131
- --sui-primary-accent-color-lighter: hsl(var(--sui-base-hue) 100% 55%);
132
- --sui-primary-accent-color-darker: hsl(var(--sui-base-hue) 100% 35%);
133
- --sui-primary-accent-color-foreground: hsl(var(--sui-base-hue) 10% 100%);
136
+ --sui-primary-accent-color-text: hsl(var(--sui-base-hue) 100% 60%);
137
+ --sui-primary-accent-color-light: hsl(var(--sui-base-hue) 100% 45%);
138
+ --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);
139
+ --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);
140
+ --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);
134
141
  --sui-error-color-hue: 0;
135
142
  --sui-warning-color-hue: 40;
136
143
  --sui-info-color-hue: 210;
137
144
  --sui-success-color-hue: 100;
138
- --sui-alert-foreground-color-saturation: 48%;
139
- --sui-alert-foreground-color-lightness: 68%;
140
- --sui-alert-background-color-saturation: 88%;
141
- --sui-alert-background-color-lightness: 8%;
145
+ --sui-alert-foreground-color-saturation: 85%;
146
+ --sui-alert-foreground-color-lightness: 75%;
147
+ --sui-alert-background-color-saturation: 40%;
148
+ --sui-alert-background-color-lightness: 10%;
142
149
  --sui-alert-border-color-saturation: 38%;
143
150
  --sui-alert-border-color-lightness: 18%;
144
151
  }
@@ -149,8 +156,8 @@
149
156
  --sui-highlight-foreground-color: hsl(var(--sui-foreground-color-1-hsl));
150
157
  --sui-primary-foreground-color: hsl(var(--sui-foreground-color-2-hsl));
151
158
  --sui-secondary-foreground-color: hsl(var(--sui-foreground-color-3-hsl));
152
- --sui-tertiary-foreground-color: hsl(var(--sui-foreground-color-3-hsl));
153
- --sui-disabled-foreground-color: hsl(var(--sui-foreground-color-4-hsl));
159
+ --sui-tertiary-foreground-color: hsl(var(--sui-foreground-color-4-hsl));
160
+ --sui-disabled-foreground-color: hsl(var(--sui-foreground-color-5-hsl));
154
161
  --sui-error-foreground-color: hsl(
155
162
  var(--sui-error-color-hue) var(--sui-alert-foreground-color-saturation)
156
163
  var(--sui-alert-foreground-color-lightness)
@@ -167,7 +174,9 @@
167
174
  var(--sui-success-color-hue) var(--sui-alert-foreground-color-saturation)
168
175
  var(--sui-alert-foreground-color-lightness)
169
176
  );
170
- --sui-highlight-background-color: hsl(var(--sui-background-color-5-hsl));
177
+ --sui-hover-background-color: hsl(var(--sui-background-color-5-hsl) / 50%);
178
+ --sui-selected-background-color: hsl(var(--sui-background-color-5-hsl) / 75%);
179
+ --sui-active-background-color: hsl(var(--sui-background-color-5-hsl) / 100%);
171
180
  --sui-content-background-color: hsl(var(--sui-background-color-1-hsl));
172
181
  --sui-primary-background-color: hsl(var(--sui-background-color-2-hsl));
173
182
  --sui-primary-background-color-translucent: hsl(var(--sui-background-color-2-hsl) / 80%);
@@ -192,10 +201,8 @@
192
201
  var(--sui-success-color-hue) var(--sui-alert-background-color-saturation)
193
202
  var(--sui-alert-background-color-lightness)
194
203
  );
195
- --sui-primary-border-color: hsl(var(--sui-border-color-1-hsl));
196
- --sui-secondary-border-color: hsl(var(--sui-border-color-2-hsl));
197
- --sui-checkbox-border-color: hsl(var(--sui-foreground-color-4-hsl));
198
- --sui-checkbox-background-color: hsl(var(--sui-background-color-5-hsl));
204
+ --sui-primary-border-color: hsl(var(--sui-border-color-2-hsl));
205
+ --sui-secondary-border-color: hsl(var(--sui-border-color-3-hsl));
199
206
  --sui-error-border-color: hsl(
200
207
  var(--sui-error-color-hue) var(--sui-alert-border-color-saturation)
201
208
  var(--sui-alert-border-color-lightness)
@@ -230,40 +237,50 @@
230
237
  --sui-line-height-compact: 1.5;
231
238
  --sui-line-height-comfortable: 1.75;
232
239
  --sui-control-small-border-width: 1px;
233
- --sui-control-small-border-radius: 2px;
240
+ --sui-control-small-border-radius: calc(var(--sui-control-small-height) / 8);
241
+ --sui-control-small-padding: 0 calc((var(--sui-control-small-height) / 5));
234
242
  --sui-control-small-height: 24px;
235
243
  --sui-control-medium-border-width: 1px;
236
- --sui-control-medium-border-radius: 4px;
244
+ --sui-control-medium-border-radius: calc(var(--sui-control-medium-height) / 8);
245
+ --sui-control-medium-padding: 0 calc((var(--sui-control-medium-height) / 4));
237
246
  --sui-control-medium-height: 32px;
238
247
  --sui-control-large-border-width: 1px;
239
- --sui-control-large-border-radius: 8px;
240
- --sui-control-large-height: 40px;
241
- --sui-control-border-color: hsl(var(--sui-border-color-2-hsl));
248
+ --sui-control-large-border-radius: calc(var(--sui-control-large-height) / 8);
249
+ --sui-control-large-padding: 0 calc((var(--sui-control-large-height) / 3));
250
+ --sui-control-large-height: 48px;
251
+ --sui-control-border-color: hsl(var(--sui-border-color-1-hsl));
242
252
  --sui-control-foreground-color: var(--sui-primary-foreground-color);
243
- --sui-control-background-color: hsl(var(--sui-background-color-1-hsl));
253
+ --sui-control-background-color: hsl(var(--sui-background-color-4-hsl));
244
254
  --sui-control-font-family: var(--sui-font-family-default);
245
255
  --sui-control-font-size: var(--sui-font-size-default);
246
256
  --sui-control-line-height: var(--sui-line-height-default);
247
257
  --sui-button-small-border-radius: var(--sui-control-small-border-radius);
258
+ --sui-button-small-padding: var(--sui-control-small-padding);
248
259
  --sui-button-small-height: var(--sui-control-small-height);
249
260
  --sui-button-medium-border-radius: var(--sui-control-medium-border-radius);
261
+ --sui-button-medium-padding: var(--sui-control-medium-padding);
250
262
  --sui-button-medium-height: var(--sui-control-medium-height);
251
263
  --sui-button-large-border-radius: var(--sui-control-large-border-radius);
264
+ --sui-button-large-padding: var(--sui-control-large-padding);
252
265
  --sui-button-large-height: var(--sui-control-large-height);
253
- --sui-option-small-border-radius: var(--sui-control-small-border-radius);
254
- --sui-option-small-height: var(--sui-control-small-height);
255
- --sui-option-medium-border-radius: var(--sui-control-medium-border-radius);
256
- --sui-option-medium-height: var(--sui-control-medium-height);
257
- --sui-option-large-border-radius: var(--sui-control-large-border-radius);
258
- --sui-option-large-height: var(--sui-control-large-height);
259
- --sui-textbox-small-border-radius: var(--sui-control-small-border-radius);
260
- --sui-textbox-small-height: var(--sui-control-small-height);
261
- --sui-textbox-medium-border-radius: var(--sui-control-medium-border-radius);
262
- --sui-textbox-medium-height: var(--sui-control-medium-height);
263
- --sui-textbox-large-border-radius: var(--sui-control-large-border-radius);
264
- --sui-textbox-large-height: var(--sui-control-large-height);
266
+ --sui-button-border-color: var(--sui-control-border-color);
267
+ --sui-button-background-color: var(--sui-control-background-color);
268
+ --sui-checkbox-border-radius: var(--sui-control-medium-border-radius);
269
+ --sui-checkbox-height: 20px;
270
+ --sui-checkbox-border-color: var(--sui-control-border-color);
271
+ --sui-checkbox-background-color: var(--sui-control-background-color);
272
+ --sui-option-border-radius: var(--sui-control-medium-border-radius);
273
+ --sui-option-padding: var(--sui-control-medium-padding);
274
+ --sui-option-height: var(--sui-control-medium-height);
275
+ --sui-listbox-border-radius: var(--sui-control-medium-border-radius);
276
+ --sui-listbox-border-color: hsl(var(--sui-border-color-2-hsl));
277
+ --sui-listbox-foreground-color: var(--sui-control-foreground-color);
278
+ --sui-listbox-background-color: hsl(var(--sui-background-color-1-hsl));
279
+ --sui-textbox-border-radius: var(--sui-control-medium-border-radius);
280
+ --sui-textbox-height: var(--sui-control-medium-height);
281
+ --sui-textbox-border-color: hsl(var(--sui-border-color-2-hsl));
265
282
  --sui-textbox-foreground-color: var(--sui-control-foreground-color);
266
- --sui-textbox-background-color: var(--sui-control-background-color);
283
+ --sui-textbox-background-color: hsl(var(--sui-background-color-1-hsl));
267
284
  --sui-textbox-font-family: var(--sui-font-family-default);
268
285
  --sui-textbox-font-size: var(--sui-font-size-default);
269
286
  --sui-textbox-singleline-line-height: var(--sui-line-height-compact);
@@ -271,13 +288,32 @@
271
288
  --sui-tab-small-height: var(--sui-control-small-height);
272
289
  --sui-tab-medium-height: var(--sui-control-medium-height);
273
290
  --sui-tab-large-height: var(--sui-control-large-height);
291
+ --sui-primary-toolbar-size: 48px;
292
+ --sui-secondary-toolbar-size: 40px;
293
+ --sui-primary-row-height: 48px;
294
+ --sui-secondary-row-height: 40px;
295
+ }
296
+ @media (pointer: coarse) {
297
+ :global(:root),
298
+ :global(:host) {
299
+ --sui-control-small-height: 30px;
300
+ --sui-control-medium-height: 40px;
301
+ --sui-control-large-height: 60px;
302
+ --sui-checkbox-height: 24px;
303
+ --sui-primary-toolbar-size: 56px;
304
+ --sui-secondary-toolbar-size: 48px;
305
+ --sui-primary-row-height: 56px;
306
+ --sui-secondary-row-height: 48px;
307
+ }
274
308
  }
275
309
 
276
310
  :global(.material-symbols-outlined) {
277
311
  font-variation-settings: "FILL" 0, "wght" 300, "GRAD" 0, "opsz" 24;
278
312
  }
279
313
 
280
- :global(*) {
314
+ :global(*),
315
+ :global(::before),
316
+ :global(::after) {
281
317
  overflow-anchor: none;
282
318
  scroll-behavior: smooth;
283
319
  box-sizing: border-box;
@@ -290,13 +326,17 @@
290
326
  vertical-align: top;
291
327
  }
292
328
 
329
+ :global(*) {
330
+ -webkit-tap-highlight-color: transparent;
331
+ }
332
+
293
333
  :global(:focus) {
294
334
  z-index: 1;
295
335
  outline-width: 0;
296
336
  }
297
337
 
298
338
  :global(:focus-visible) {
299
- outline-color: var(--sui-primary-accent-color-lighter);
339
+ outline-color: var(--sui-primary-accent-color-light);
300
340
  }
301
341
 
302
342
  :global(h1),
@@ -314,7 +354,7 @@
314
354
  }
315
355
 
316
356
  :global(a) {
317
- color: var(--sui-primary-accent-color-lighter);
357
+ color: var(--sui-primary-accent-color-text);
318
358
  text-decoration: none;
319
359
  }
320
360
 
@@ -341,10 +381,10 @@
341
381
  margin: 0;
342
382
  border: 0;
343
383
  padding: 0;
344
- width: 100%;
345
- max-width: 100%;
346
- height: 100%;
347
- max-height: 100%;
384
+ width: 100vw;
385
+ max-width: 100vw;
386
+ height: 100vh;
387
+ max-height: 100vh;
348
388
  color: var(--sui-primary-foreground-color);
349
389
  background: transparent;
350
390
  -webkit-user-select: none;
@@ -356,6 +396,30 @@
356
396
  background: transparent;
357
397
  }
358
398
 
399
+ :global(.disabled),
400
+ :global([aria-disabled=true]),
401
+ :global([inert]) {
402
+ cursor: default;
403
+ pointer-events: none;
404
+ -webkit-user-select: none;
405
+ user-select: none;
406
+ filter: grayscale(1) opacity(0.35);
407
+ }
408
+ :global(.disabled) :global(*),
409
+ :global([aria-disabled=true]) :global(*),
410
+ :global([inert]) :global(*) {
411
+ filter: grayscale(0) opacity(1);
412
+ }
413
+
414
+ :global(.disabled) :global(*),
415
+ :global([aria-disabled=true]) :global(*),
416
+ :global([inert]) :global(*) {
417
+ cursor: default;
418
+ pointer-events: none;
419
+ -webkit-user-select: none;
420
+ user-select: none;
421
+ }
422
+
359
423
  :global(.font-loader) {
360
424
  position: absolute;
361
425
  left: -99999px;
@@ -5,21 +5,36 @@
5
5
  -->
6
6
  <script>
7
7
  /**
8
- * CSS class name on the button.
8
+ * The `class` attribute on the wrapper element.
9
9
  * @type {string}
10
10
  */
11
11
  let className = '';
12
-
13
12
  export { className as class };
14
-
15
- export let ariaLabel = '';
13
+ /**
14
+ * Whether to hide the widget. An alias of the `aria-hidden` attribute.
15
+ * @type {boolean | undefined}
16
+ */
17
+ export let hidden = undefined;
18
+ /**
19
+ * Whether to disable the widget. An alias of the `aria-disabled` attribute.
20
+ * @type {boolean}
21
+ */
22
+ export let disabled = false;
16
23
  </script>
17
24
 
18
25
  <div
19
26
  class="sui group {className}"
20
27
  role="group"
21
- aria-label={ariaLabel || undefined}
28
+ hidden={hidden || undefined}
29
+ aria-hidden={hidden}
30
+ aria-disabled={disabled}
22
31
  {...$$restProps}
23
32
  >
24
- <slot />
33
+ <div class="inner" inert={disabled}>
34
+ <slot />
35
+ </div>
25
36
  </div>
37
+
38
+ <style>.inner {
39
+ display: contents;
40
+ }</style>
@@ -8,7 +8,8 @@
8
8
  export default class Group extends SvelteComponent<{
9
9
  [x: string]: any;
10
10
  class?: string;
11
- ariaLabel?: string;
11
+ disabled?: boolean;
12
+ hidden?: boolean;
12
13
  }, {
13
14
  [evt: string]: CustomEvent<any>;
14
15
  }, {
@@ -23,7 +24,8 @@ declare const __propDef: {
23
24
  props: {
24
25
  [x: string]: any;
25
26
  class?: string;
26
- ariaLabel?: string;
27
+ disabled?: boolean;
28
+ hidden?: boolean | undefined;
27
29
  };
28
30
  events: {
29
31
  [evt: string]: CustomEvent<any>;