@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
@@ -10,12 +10,29 @@ export default class Disclosure extends SvelteComponent<{
10
10
  [x: string]: any;
11
11
  class?: string;
12
12
  label?: string;
13
+ disabled?: boolean;
14
+ hidden?: boolean;
13
15
  expanded?: boolean;
14
16
  }, {
15
17
  [evt: string]: CustomEvent<any>;
16
18
  }, {
17
19
  default: {};
18
20
  }> {
21
+ /**accessor*/
22
+ set class(arg: string);
23
+ get class(): string;
24
+ /**accessor*/
25
+ set hidden(arg: boolean);
26
+ get hidden(): boolean;
27
+ /**accessor*/
28
+ set disabled(arg: boolean);
29
+ get disabled(): boolean;
30
+ /**accessor*/
31
+ set expanded(arg: boolean);
32
+ get expanded(): boolean;
33
+ /**accessor*/
34
+ set label(arg: string);
35
+ get label(): string;
19
36
  }
20
37
  export type DisclosureProps = typeof __propDef.props;
21
38
  export type DisclosureEvents = typeof __propDef.events;
@@ -26,6 +43,8 @@ declare const __propDef: {
26
43
  [x: string]: any;
27
44
  class?: string;
28
45
  label?: string;
46
+ disabled?: boolean;
47
+ hidden?: boolean | undefined;
29
48
  expanded?: boolean;
30
49
  };
31
50
  events: {
@@ -4,21 +4,29 @@
4
4
  @see https://w3c.github.io/aria/#separator
5
5
  -->
6
6
  <script>
7
- /** @type {('horizontal' | 'vertical')} */
8
- export let orientation = 'horizontal';
9
-
10
7
  /**
11
- * CSS class name on the button.
8
+ * CSS class name on the wrapper element.
12
9
  * @type {string}
13
10
  */
14
11
  let className = '';
15
-
16
12
  export { className as class };
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
+ * Orientation of the widget. An alias of the `aria-orientation` attribute.
20
+ * @type {'horizontal' | 'vertical'}
21
+ */
22
+ export let orientation = 'horizontal';
17
23
  </script>
18
24
 
19
25
  <div
20
- role="separator"
21
26
  class="sui divider {className}"
27
+ role="separator"
28
+ hidden={hidden || undefined}
29
+ aria-hidden={hidden}
22
30
  aria-orientation={orientation}
23
31
  {...$$restProps}
24
32
  />
@@ -8,6 +8,7 @@
8
8
  export default class Divider extends SvelteComponent<{
9
9
  [x: string]: any;
10
10
  class?: string;
11
+ hidden?: boolean;
11
12
  orientation?: "vertical" | "horizontal";
12
13
  }, {
13
14
  [evt: string]: CustomEvent<any>;
@@ -21,7 +22,8 @@ declare const __propDef: {
21
22
  props: {
22
23
  [x: string]: any;
23
24
  class?: string;
24
- orientation?: ('horizontal' | 'vertical');
25
+ hidden?: boolean | undefined;
26
+ orientation?: 'horizontal' | 'vertical';
25
27
  };
26
28
  events: {
27
29
  [evt: string]: CustomEvent<any>;
@@ -4,18 +4,30 @@
4
4
  -->
5
5
  <script>
6
6
  /**
7
- * CSS class name on the button.
7
+ * CSS class name on the wrapper element.
8
8
  * @type {string}
9
9
  */
10
10
  let className = '';
11
-
12
11
  export { className as class };
13
-
14
- /** @type {boolean} */
12
+ /**
13
+ * Whether to hide the widget. An alias of the `aria-hidden` attribute.
14
+ * @type {boolean | undefined}
15
+ */
16
+ export let hidden = undefined;
17
+ /**
18
+ * Whether to make the spacer flexible.
19
+ * @type {boolean}
20
+ */
15
21
  export let flex = false;
16
22
  </script>
17
23
 
18
- <div class="sui spacer {className}" class:flex {...$$restProps} />
24
+ <div
25
+ class="sui spacer {className}"
26
+ class:flex
27
+ hidden={hidden || undefined}
28
+ aria-hidden={hidden}
29
+ {...$$restProps}
30
+ />
19
31
 
20
32
  <style>.spacer.flex {
21
33
  flex: auto;
@@ -5,6 +5,7 @@
5
5
  export default class Spacer extends SvelteComponent<{
6
6
  [x: string]: any;
7
7
  class?: string;
8
+ hidden?: boolean;
8
9
  flex?: boolean;
9
10
  }, {
10
11
  [evt: string]: CustomEvent<any>;
@@ -18,6 +19,7 @@ declare const __propDef: {
18
19
  props: {
19
20
  [x: string]: any;
20
21
  class?: string;
22
+ hidden?: boolean | undefined;
21
23
  flex?: boolean;
22
24
  };
23
25
  events: {
@@ -113,9 +113,10 @@
113
113
  }
114
114
  };
115
115
 
116
- // Call the function only when the `open` prop is changed
117
- // @ts-ignore
118
- $: toggleDialog(open);
116
+ $: {
117
+ void open;
118
+ toggleDialog();
119
+ }
119
120
 
120
121
  onMount(() => {
121
122
  dialog.remove();
@@ -149,7 +150,9 @@
149
150
  <div class="extra-control">
150
151
  {#if showClose === 'outside'}
151
152
  <Button
152
- class="ghost iconic close"
153
+ variant="ghost"
154
+ iconic
155
+ class="close"
153
156
  on:click={() => {
154
157
  dialog.returnValue = 'close';
155
158
  open = false;
@@ -174,7 +177,9 @@
174
177
  {/if}
175
178
  {#if showClose === 'inside'}
176
179
  <Button
177
- class="ghost iconic close"
180
+ variant="ghost"
181
+ iconic
182
+ class="close"
178
183
  on:click={() => {
179
184
  dialog.returnValue = 'close';
180
185
  open = false;
@@ -232,6 +237,8 @@ dialog form {
232
237
  display: flex;
233
238
  flex-direction: column;
234
239
  border-radius: 4px;
240
+ max-width: 100vw;
241
+ max-height: 100vh;
235
242
  background-color: var(--sui-secondary-background-color-translucent);
236
243
  -webkit-backdrop-filter: blur(16px);
237
244
  backdrop-filter: blur(16px);
@@ -5,37 +5,67 @@
5
5
  @see https://w3c.github.io/aria/#listbox
6
6
  @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/
7
7
  -->
8
- <svelte:options accessors={true} />
9
-
10
8
  <script>
11
- import { activateGroup } from '../util/group';
9
+ import { activateGroup } from '../../services/group';
12
10
 
13
11
  /**
14
- * CSS class name on the button.
12
+ * The `class` attribute on the wrapper element.
15
13
  * @type {string}
16
14
  */
17
15
  let className = '';
18
-
19
16
  export { className as class };
20
-
21
- /** @type {HTMLElement?} */
22
- export let element = undefined;
23
-
17
+ /**
18
+ * Whether to hide the widget. An alias of the `aria-hidden` attribute.
19
+ * @type {boolean | undefined}
20
+ */
21
+ export let hidden = undefined;
22
+ /**
23
+ * Whether to disable the widget. An alias of the `aria-disabled` attribute.
24
+ * @type {boolean}
25
+ */
26
+ export let disabled = false;
27
+ /**
28
+ * Whether to disable the widget. An alias of the `aria-readonly` attribute.
29
+ * @type {boolean}
30
+ */
31
+ export let readonly = false;
32
+ /**
33
+ * Whether to disable the widget. An alias of the `aria-required` attribute.
34
+ * @type {boolean}
35
+ */
36
+ export let required = false;
37
+ /**
38
+ * Whether to disable the widget. An alias of the `aria-invalid` attribute.
39
+ * @type {boolean}
40
+ */
41
+ export let invalid = false;
42
+ /**
43
+ * Whether to allow selecting more than one `<Option>`. An alias of the `aria-multiselectable`
44
+ * attribute.
45
+ * @type {boolean}
46
+ */
24
47
  export let multiple = false;
25
48
  </script>
26
49
 
27
50
  <div
28
51
  class="sui listbox {className}"
29
- tabindex="0"
52
+ tabindex={disabled ? -1 : 0}
30
53
  role="listbox"
54
+ hidden={hidden || undefined}
55
+ aria-hidden={hidden}
56
+ aria-disabled={disabled}
57
+ aria-readonly={readonly}
58
+ aria-required={required}
59
+ aria-invalid={invalid}
31
60
  aria-multiselectable={multiple}
32
61
  {...$$restProps}
33
- bind:this={element}
34
- on:click
35
- on:select
36
62
  use:activateGroup
63
+ on:click
64
+ on:change
37
65
  >
38
- <slot />
66
+ <div class="inner" inert={disabled}>
67
+ <slot />
68
+ </div>
39
69
  </div>
40
70
 
41
71
  <style>[role=listbox] {
@@ -43,18 +73,19 @@
43
73
  flex-direction: column;
44
74
  margin: 0;
45
75
  border-width: 1px;
46
- border-color: var(--sui-control-border-color);
47
- border-radius: 4px;
76
+ border-color: var(--sui-listbox-border-color);
77
+ border-radius: var(--sui-listbox-border-radius);
48
78
  padding: 4px;
49
- min-width: 160px;
50
- color: var(--sui-control-foreground-color);
51
- background-color: var(--sui-control-background-color);
79
+ min-width: var(--sui-listbox-min-width, calc(var(--sui-option-height) * 5));
80
+ color: var(--sui-listbox-foreground-color);
81
+ background-color: var(--sui-listbox-background-color);
52
82
  font-family: var(--sui-control-font-family);
53
83
  font-size: var(--sui-control-font-size);
54
84
  line-height: var(--sui-control-line-height);
55
85
  }
56
86
  [role=listbox] :global([role="separator"]) {
57
87
  margin: 4px;
88
+ background-color: var(--sui-control-border-color);
58
89
  }
59
90
  [role=listbox]:global(.tabs) {
60
91
  padding: 0;
@@ -74,5 +105,9 @@
74
105
  display: none;
75
106
  }
76
107
  [role=listbox]:global(.tabs) :global(.option button[aria-selected="true"]) {
77
- border-color: var(--sui-primary-accent-color-lighter);
108
+ border-color: var(--sui-primary-accent-color-light);
109
+ }
110
+
111
+ .inner {
112
+ display: contents;
78
113
  }</style>
@@ -10,25 +10,20 @@
10
10
  export default class Listbox extends SvelteComponent<{
11
11
  [x: string]: any;
12
12
  class?: string;
13
+ invalid?: boolean;
14
+ disabled?: boolean;
13
15
  multiple?: boolean;
14
- element?: HTMLElement;
16
+ required?: boolean;
17
+ hidden?: boolean;
18
+ readonly?: boolean;
15
19
  }, {
16
20
  click: MouseEvent;
17
- select: Event;
21
+ change: Event;
18
22
  } & {
19
23
  [evt: string]: CustomEvent<any>;
20
24
  }, {
21
25
  default: {};
22
26
  }> {
23
- /**accessor*/
24
- set class(arg: string);
25
- get class(): string;
26
- /**accessor*/
27
- set element(arg: HTMLElement);
28
- get element(): HTMLElement;
29
- /**accessor*/
30
- set multiple(arg: boolean);
31
- get multiple(): boolean;
32
27
  }
33
28
  export type ListboxProps = typeof __propDef.props;
34
29
  export type ListboxEvents = typeof __propDef.events;
@@ -38,12 +33,16 @@ declare const __propDef: {
38
33
  props: {
39
34
  [x: string]: any;
40
35
  class?: string;
36
+ invalid?: boolean;
37
+ disabled?: boolean;
41
38
  multiple?: boolean;
42
- element?: HTMLElement | null;
39
+ required?: boolean;
40
+ hidden?: boolean | undefined;
41
+ readonly?: boolean;
43
42
  };
44
43
  events: {
45
44
  click: MouseEvent;
46
- select: Event;
45
+ change: Event;
47
46
  } & {
48
47
  [evt: string]: CustomEvent<any>;
49
48
  };
@@ -7,16 +7,24 @@
7
7
  @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-grouped/
8
8
  -->
9
9
  <script>
10
- import { getRandomId } from '../util/util';
10
+ import { getRandomId } from '../../services/util';
11
11
 
12
12
  /**
13
- * CSS class name on the group.
13
+ * The `class` attribute on the wrapper element.
14
14
  * @type {string}
15
15
  */
16
16
  let className = '';
17
-
18
17
  export { className as class };
19
-
18
+ /**
19
+ * Whether to hide the widget. An alias of the `aria-hidden` attribute.
20
+ * @type {boolean | undefined}
21
+ */
22
+ export let hidden = undefined;
23
+ /**
24
+ * Whether to disable the widget. An alias of the `aria-disabled` attribute.
25
+ * @type {boolean}
26
+ */
27
+ export let disabled = false;
20
28
  /**
21
29
  * The group’s label to be displayed above the child `<Option>`s.
22
30
  */
@@ -29,11 +37,16 @@
29
37
  {id}
30
38
  class="sui optgroup {className}"
31
39
  role="group"
40
+ hidden={hidden || undefined}
41
+ aria-hidden={hidden}
42
+ aria-disabled={disabled}
32
43
  aria-labelledby="{id}-label"
33
44
  {...$$restProps}
34
45
  >
35
46
  <div id="{id}-label" class="label" role="none">{label}</div>
36
- <slot />
47
+ <div class="inner" inert={disabled}>
48
+ <slot />
49
+ </div>
37
50
  </div>
38
51
 
39
52
  <style>.optgroup:not(:first-child) {
@@ -44,4 +57,8 @@
44
57
  margin: 8px;
45
58
  color: var(--sui-secondary-foreground-color);
46
59
  font-size: var(--sui-font-size-small);
60
+ }
61
+
62
+ .inner {
63
+ display: contents;
47
64
  }</style>
@@ -12,6 +12,8 @@ export default class OptionGroup extends SvelteComponent<{
12
12
  [x: string]: any;
13
13
  class?: string;
14
14
  label?: string;
15
+ disabled?: boolean;
16
+ hidden?: boolean;
15
17
  }, {
16
18
  [evt: string]: CustomEvent<any>;
17
19
  }, {
@@ -27,6 +29,8 @@ declare const __propDef: {
27
29
  [x: string]: any;
28
30
  class?: string;
29
31
  label?: string;
32
+ disabled?: boolean;
33
+ hidden?: boolean | undefined;
30
34
  };
31
35
  events: {
32
36
  [evt: string]: CustomEvent<any>;
@@ -10,19 +10,40 @@
10
10
  import Icon from '../icon/icon.svelte';
11
11
 
12
12
  /**
13
- * CSS class name on the button.
13
+ * The `class` attribute on the wrapper element.
14
14
  * @type {string}
15
15
  */
16
16
  let className = '';
17
-
18
17
  export { className as class };
19
-
18
+ /**
19
+ * Whether to select the widget. An alias of the `aria-selected` attribute.
20
+ * @type {boolean}
21
+ */
22
+ export let selected = false;
23
+ /**
24
+ * Whether to hide the widget. An alias of the `aria-hidden` attribute.
25
+ * @type {boolean | undefined}
26
+ */
27
+ export let hidden = undefined;
28
+ /**
29
+ * Whether to disable the widget. An alias of the `aria-disabled` attribute.
30
+ * @type {boolean}
31
+ */
32
+ export let disabled = false;
33
+ /**
34
+ * Text label displayed on the item.
35
+ * @type {string | undefined}
36
+ */
20
37
  export let label = '';
38
+ /**
39
+ * The `value` attribute on the `<button>` element.
40
+ * @type {string | undefined}
41
+ */
21
42
  export let value = undefined;
22
- export let selected = false;
23
43
 
24
44
  /**
25
- * @type {Button}
45
+ * Reference to the `Button` component.
46
+ * @type {Button | undefined}
26
47
  */
27
48
  let buttonComponent;
28
49
 
@@ -45,7 +66,7 @@
45
66
  });
46
67
  </script>
47
68
 
48
- <div class="sui option {className}">
69
+ <div class="sui option {className}" hidden={hidden || undefined}>
49
70
  <Button
50
71
  bind:this={buttonComponent}
51
72
  tabindex="-1"
@@ -53,6 +74,8 @@
53
74
  aria-selected={selected}
54
75
  {label}
55
76
  {value}
77
+ {hidden}
78
+ {disabled}
56
79
  data-type={typeof value}
57
80
  {...$$restProps}
58
81
  on:click
@@ -60,6 +83,7 @@
60
83
  on:dragleave
61
84
  on:dragend
62
85
  on:drop
86
+ on:select
63
87
  >
64
88
  {#if selected}
65
89
  <Icon class="check" name="check" />
@@ -76,22 +100,25 @@
76
100
  .option:focus-visible {
77
101
  outline-width: 0 !important;
78
102
  }
79
- .option :global([role="option"]) {
103
+ .option :global(button) {
80
104
  flex: none;
81
105
  display: flex;
82
106
  justify-content: space-between;
83
107
  gap: 4px;
84
- border-radius: 4px;
85
- padding: 0 8px 0 16px;
108
+ border-radius: var(--sui-option-border-radius);
109
+ padding: var(--sui-option-padding);
86
110
  width: 100%;
87
- height: var(--sui-option-medium-height);
111
+ height: var(--sui-option-height);
88
112
  white-space: nowrap;
89
113
  }
90
114
  .option :global(.focused),
91
- .option :global([role="option"]:hover) {
115
+ .option :global(button:hover) {
92
116
  color: var(--sui-highlight-foreground-color);
93
- background-color: var(--sui-highlight-background-color);
117
+ background-color: var(--sui-hover-background-color);
118
+ }
119
+ .option :global(button:active) {
120
+ background-color: var(--sui-active-background-color);
94
121
  }
95
- .option :global([role="option"][aria-selected="true"]) :global(.icon) {
96
- color: var(--sui-primary-accent-color-lighter);
122
+ .option :global(button[aria-selected="true"]) :global(.icon) {
123
+ color: var(--sui-primary-accent-color-text);
97
124
  }</style>
@@ -10,7 +10,9 @@ export default class Option extends SvelteComponent<{
10
10
  [x: string]: any;
11
11
  class?: string;
12
12
  label?: string;
13
- value?: any;
13
+ disabled?: boolean;
14
+ value?: string;
15
+ hidden?: boolean;
14
16
  selected?: boolean;
15
17
  }, {
16
18
  click: MouseEvent;
@@ -18,6 +20,7 @@ export default class Option extends SvelteComponent<{
18
20
  dragleave: DragEvent;
19
21
  dragend: DragEvent;
20
22
  drop: DragEvent;
23
+ select: Event;
21
24
  } & {
22
25
  [evt: string]: CustomEvent<any>;
23
26
  }, {
@@ -38,8 +41,10 @@ declare const __propDef: {
38
41
  props: {
39
42
  [x: string]: any;
40
43
  class?: string;
41
- label?: string;
42
- value?: any;
44
+ label?: string | undefined;
45
+ disabled?: boolean;
46
+ value?: string | undefined;
47
+ hidden?: boolean | undefined;
43
48
  selected?: boolean;
44
49
  };
45
50
  events: {
@@ -48,6 +53,7 @@ declare const __propDef: {
48
53
  dragleave: DragEvent;
49
54
  dragend: DragEvent;
50
55
  drop: DragEvent;
56
+ select: Event;
51
57
  } & {
52
58
  [evt: string]: CustomEvent<any>;
53
59
  };
@@ -8,27 +8,73 @@
8
8
  import Popup from '../util/popup.svelte';
9
9
 
10
10
  /**
11
- * CSS class name on the button.
11
+ * The `class` attribute on the `<button>` element.
12
12
  * @type {string}
13
13
  */
14
14
  let className = '';
15
-
16
15
  export { className as class };
17
-
16
+ /**
17
+ * Whether to hide the widget. An alias of the `aria-hidden` attribute.
18
+ * @type {boolean | undefined}
19
+ */
20
+ export let hidden = undefined;
21
+ /**
22
+ * Whether to disable the widget. An alias of the `aria-disabled` attribute.
23
+ * @type {boolean}
24
+ */
25
+ export let disabled = false;
18
26
  /**
19
27
  * Where to show the dropdown menu.
20
28
  * @type {PopupPosition}
21
29
  */
22
30
  export let popupPosition = 'bottom-left';
31
+ /**
32
+ * Text label displayed on the button.
33
+ * @type {string}
34
+ */
35
+ export let label = '';
36
+ /**
37
+ * The style variant of the button.
38
+ * @type {'primary' | 'secondary' | 'tertiary' | 'ghost' | 'link' | undefined}
39
+ */
40
+ export let variant = undefined;
41
+ /**
42
+ * The size of the button.
43
+ * @type {'small' | 'medium' | 'large'}
44
+ */
45
+ export let size = 'medium';
46
+ /**
47
+ * Whether to only show an icon on the button and trim the padding.
48
+ */
49
+ export let iconic = false;
23
50
 
24
- /** @type {?Button} */
51
+ /**
52
+ * Reference to the `Button` component.
53
+ * @type {Button | undefined}
54
+ */
25
55
  let buttonComponent;
26
- /** @type {?Popup} */
56
+ /**
57
+ * Reference to the `Popup` component.
58
+ * @type {Popup | undefined}
59
+ */
27
60
  let popupComponent;
61
+
62
+ /**
63
+ * Move focus to the `<button>` element.
64
+ */
65
+ export const focus = () => {
66
+ buttonComponent?.element.focus();
67
+ };
28
68
  </script>
29
69
 
30
70
  <Button
31
71
  class="sui menu-button {className}"
72
+ {hidden}
73
+ {disabled}
74
+ {label}
75
+ {variant}
76
+ {size}
77
+ {iconic}
32
78
  aria-haspopup="menu"
33
79
  {...$$restProps}
34
80
  bind:this={buttonComponent}
@@ -8,6 +8,13 @@
8
8
  export default class MenuButton extends SvelteComponent<{
9
9
  [x: string]: any;
10
10
  class?: string;
11
+ label?: string;
12
+ focus?: () => void;
13
+ disabled?: boolean;
14
+ size?: "small" | "medium" | "large";
15
+ hidden?: boolean;
16
+ variant?: "link" | "primary" | "secondary" | "tertiary" | "ghost";
17
+ iconic?: boolean;
11
18
  popupPosition?: PopupPosition;
12
19
  }, {
13
20
  [evt: string]: CustomEvent<any>;
@@ -21,6 +28,7 @@ export default class MenuButton extends SvelteComponent<{
21
28
  };
22
29
  popup: {};
23
30
  }> {
31
+ get focus(): () => void;
24
32
  }
25
33
  export type MenuButtonProps = typeof __propDef.props;
26
34
  export type MenuButtonEvents = typeof __propDef.events;
@@ -30,6 +38,13 @@ declare const __propDef: {
30
38
  props: {
31
39
  [x: string]: any;
32
40
  class?: string;
41
+ label?: string;
42
+ focus?: () => void;
43
+ disabled?: boolean;
44
+ size?: 'small' | 'medium' | 'large';
45
+ hidden?: boolean | undefined;
46
+ variant?: 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'link' | undefined;
47
+ iconic?: boolean;
33
48
  popupPosition?: PopupPosition;
34
49
  };
35
50
  events: {