@sveltia/ui 0.16.0 → 0.17.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 (156) hide show
  1. package/package/components/alert/alert.svelte +22 -7
  2. package/package/components/alert/alert.svelte.d.ts +32 -28
  3. package/package/components/button/button-group.svelte +16 -6
  4. package/package/components/button/button-group.svelte.d.ts +23 -23
  5. package/package/components/button/button.svelte +41 -136
  6. package/package/components/button/button.svelte.d.ts +5 -146
  7. package/package/components/button/select-button-group.svelte +31 -37
  8. package/package/components/button/select-button-group.svelte.d.ts +76 -34
  9. package/package/components/button/select-button.svelte +19 -62
  10. package/package/components/button/select-button.svelte.d.ts +17 -73
  11. package/package/components/button/split-button.svelte +37 -47
  12. package/package/components/button/split-button.svelte.d.ts +40 -47
  13. package/package/components/calendar/calendar.svelte +80 -55
  14. package/package/components/calendar/calendar.svelte.d.ts +13 -10
  15. package/package/components/checkbox/checkbox-group.svelte +23 -20
  16. package/package/components/checkbox/checkbox-group.svelte.d.ts +49 -27
  17. package/package/components/checkbox/checkbox.svelte +57 -67
  18. package/package/components/checkbox/checkbox.svelte.d.ts +67 -55
  19. package/package/components/dialog/alert-dialog.svelte +9 -36
  20. package/package/components/dialog/alert-dialog.svelte.d.ts +5 -44
  21. package/package/components/dialog/confirmation-dialog.svelte +9 -41
  22. package/package/components/dialog/confirmation-dialog.svelte.d.ts +5 -46
  23. package/package/components/dialog/dialog.svelte +60 -105
  24. package/package/components/dialog/dialog.svelte.d.ts +5 -102
  25. package/package/components/dialog/prompt-dialog.svelte +32 -61
  26. package/package/components/dialog/prompt-dialog.svelte.d.ts +38 -62
  27. package/package/components/disclosure/disclosure.svelte +39 -34
  28. package/package/components/disclosure/disclosure.svelte.d.ts +74 -56
  29. package/package/components/divider/divider.svelte +18 -14
  30. package/package/components/divider/divider.svelte.d.ts +31 -10
  31. package/package/components/divider/spacer.svelte +13 -8
  32. package/package/components/divider/spacer.svelte.d.ts +20 -9
  33. package/package/components/drawer/drawer.svelte +63 -76
  34. package/package/components/drawer/drawer.svelte.d.ts +102 -84
  35. package/package/components/grid/grid-body.svelte +15 -10
  36. package/package/components/grid/grid-body.svelte.d.ts +30 -24
  37. package/package/components/grid/grid-cell.svelte +16 -6
  38. package/package/components/grid/grid-cell.svelte.d.ts +23 -23
  39. package/package/components/grid/grid-col-header.svelte +16 -6
  40. package/package/components/grid/grid-col-header.svelte.d.ts +23 -23
  41. package/package/components/grid/grid-foot.svelte +16 -6
  42. package/package/components/grid/grid-foot.svelte.d.ts +23 -23
  43. package/package/components/grid/grid-head.svelte +16 -6
  44. package/package/components/grid/grid-head.svelte.d.ts +23 -23
  45. package/package/components/grid/grid-row-header.svelte +16 -6
  46. package/package/components/grid/grid-row-header.svelte.d.ts +23 -23
  47. package/package/components/grid/grid-row.svelte +19 -23
  48. package/package/components/grid/grid-row.svelte.d.ts +48 -38
  49. package/package/components/grid/grid.svelte +26 -25
  50. package/package/components/grid/grid.svelte.d.ts +56 -32
  51. package/package/components/icon/icon.svelte +14 -9
  52. package/package/components/icon/icon.svelte.d.ts +20 -9
  53. package/package/components/listbox/listbox.svelte +46 -52
  54. package/package/components/listbox/listbox.svelte.d.ts +102 -40
  55. package/package/components/listbox/option-group.svelte +23 -19
  56. package/package/components/listbox/option-group.svelte.d.ts +49 -27
  57. package/package/components/listbox/option.svelte +44 -57
  58. package/package/components/listbox/option.svelte.d.ts +54 -84
  59. package/package/components/menu/menu-button.svelte +42 -63
  60. package/package/components/menu/menu-button.svelte.d.ts +18 -72
  61. package/package/components/menu/menu-item-checkbox.svelte +29 -41
  62. package/package/components/menu/menu-item-checkbox.svelte.d.ts +5 -44
  63. package/package/components/menu/menu-item-group.svelte +22 -19
  64. package/package/components/menu/menu-item-group.svelte.d.ts +41 -27
  65. package/package/components/menu/menu-item-radio.svelte +29 -41
  66. package/package/components/menu/menu-item-radio.svelte.d.ts +5 -44
  67. package/package/components/menu/menu-item.svelte +66 -75
  68. package/package/components/menu/menu-item.svelte.d.ts +5 -80
  69. package/package/components/menu/menu.svelte +25 -22
  70. package/package/components/menu/menu.svelte.d.ts +50 -30
  71. package/package/components/radio/radio-group.svelte +36 -42
  72. package/package/components/radio/radio-group.svelte.d.ts +85 -35
  73. package/package/components/radio/radio.svelte +45 -48
  74. package/package/components/radio/radio.svelte.d.ts +96 -42
  75. package/package/components/select/combobox.svelte +76 -101
  76. package/package/components/select/combobox.svelte.d.ts +5 -56
  77. package/package/components/select/select-tags.svelte +48 -59
  78. package/package/components/select/select-tags.svelte.d.ts +109 -28
  79. package/package/components/select/select.svelte +18 -37
  80. package/package/components/select/select.svelte.d.ts +5 -40
  81. package/package/components/slider/slider.svelte +71 -68
  82. package/package/components/slider/slider.svelte.d.ts +142 -31
  83. package/package/components/switch/switch.svelte +36 -46
  84. package/package/components/switch/switch.svelte.d.ts +83 -37
  85. package/package/components/table/table-body.svelte +15 -11
  86. package/package/components/table/table-body.svelte.d.ts +30 -24
  87. package/package/components/table/table-cell.svelte +16 -6
  88. package/package/components/table/table-cell.svelte.d.ts +23 -23
  89. package/package/components/table/table-col-header.svelte +16 -6
  90. package/package/components/table/table-col-header.svelte.d.ts +23 -23
  91. package/package/components/table/table-foot.svelte +16 -6
  92. package/package/components/table/table-foot.svelte.d.ts +23 -23
  93. package/package/components/table/table-head.svelte +16 -6
  94. package/package/components/table/table-head.svelte.d.ts +23 -23
  95. package/package/components/table/table-row-header.svelte +16 -6
  96. package/package/components/table/table-row-header.svelte.d.ts +23 -23
  97. package/package/components/table/table-row.svelte +16 -6
  98. package/package/components/table/table-row.svelte.d.ts +23 -23
  99. package/package/components/table/table.svelte +16 -6
  100. package/package/components/table/table.svelte.d.ts +23 -23
  101. package/package/components/tabs/tab-box.svelte +16 -9
  102. package/package/components/tabs/tab-box.svelte.d.ts +32 -22
  103. package/package/components/tabs/tab-list.svelte +36 -35
  104. package/package/components/tabs/tab-list.svelte.d.ts +65 -33
  105. package/package/components/tabs/tab-panel.svelte +16 -6
  106. package/package/components/tabs/tab-panel.svelte.d.ts +23 -23
  107. package/package/components/tabs/tab-panels.svelte +16 -6
  108. package/package/components/tabs/tab-panels.svelte.d.ts +23 -21
  109. package/package/components/tabs/tab.svelte +28 -25
  110. package/package/components/tabs/tab.svelte.d.ts +17 -63
  111. package/package/components/text-editor/lexical-root.svelte +38 -32
  112. package/package/components/text-editor/lexical-root.svelte.d.ts +74 -13
  113. package/package/components/text-editor/text-editor.svelte +63 -79
  114. package/package/components/text-editor/text-editor.svelte.d.ts +97 -20
  115. package/package/components/text-editor/toolbar/editor-toolbar.svelte +41 -24
  116. package/package/components/text-editor/toolbar/editor-toolbar.svelte.d.ts +32 -7
  117. package/package/components/text-editor/toolbar/format-text-button.svelte +15 -5
  118. package/package/components/text-editor/toolbar/format-text-button.svelte.d.ts +13 -6
  119. package/package/components/text-editor/toolbar/insert-link-button.svelte +18 -16
  120. package/package/components/text-editor/toolbar/insert-link-button.svelte.d.ts +4 -8
  121. package/package/components/text-editor/toolbar/toggle-block-menu-item.svelte +19 -7
  122. package/package/components/text-editor/toolbar/toggle-block-menu-item.svelte.d.ts +13 -6
  123. package/package/components/text-field/number-input.svelte +63 -81
  124. package/package/components/text-field/number-input.svelte.d.ts +48 -55
  125. package/package/components/text-field/password-input.svelte +38 -57
  126. package/package/components/text-field/password-input.svelte.d.ts +16 -45
  127. package/package/components/text-field/search-bar.svelte +45 -62
  128. package/package/components/text-field/search-bar.svelte.d.ts +25 -66
  129. package/package/components/text-field/text-area.svelte +38 -54
  130. package/package/components/text-field/text-area.svelte.d.ts +100 -35
  131. package/package/components/text-field/text-input.svelte +30 -86
  132. package/package/components/text-field/text-input.svelte.d.ts +4 -78
  133. package/package/components/toast/toast.svelte +36 -30
  134. package/package/components/toast/toast.svelte.d.ts +50 -28
  135. package/package/components/toolbar/toolbar.svelte +25 -25
  136. package/package/components/toolbar/toolbar.svelte.d.ts +57 -29
  137. package/package/components/util/app-shell.svelte +22 -10
  138. package/package/components/util/app-shell.svelte.d.ts +25 -29
  139. package/package/components/util/group.svelte +20 -15
  140. package/package/components/util/group.svelte.d.ts +40 -26
  141. package/package/components/util/modal.svelte +89 -105
  142. package/package/components/util/modal.svelte.d.ts +6 -71
  143. package/package/components/util/placeholder.svelte +21 -0
  144. package/package/components/util/{portal.svelte.d.ts → placeholder.svelte.d.ts} +17 -25
  145. package/package/components/util/popup.svelte +65 -62
  146. package/package/components/util/popup.svelte.d.ts +89 -77
  147. package/package/services/{group.js → group.svelte.js} +11 -12
  148. package/package/services/{popup.js → popup.svelte.js} +6 -5
  149. package/package/typedefs.d.ts +545 -0
  150. package/package/typedefs.js +202 -0
  151. package/package.json +11 -18
  152. package/package/components/util/portal.svelte +0 -36
  153. /package/package/services/{events.d.ts → events.svelte.d.ts} +0 -0
  154. /package/package/services/{events.js → events.svelte.js} +0 -0
  155. /package/package/services/{group.d.ts → group.svelte.d.ts} +0 -0
  156. /package/package/services/{popup.d.ts → popup.svelte.d.ts} +0 -0
@@ -1,18 +1,8 @@
1
1
  export default OptionGroup;
2
- type OptionGroup = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
- [x: string]: any;
4
- class?: string | undefined;
5
- disabled?: boolean | undefined;
6
- label?: string | undefined;
7
- hidden?: boolean | undefined;
8
- }, {
9
- default: {};
10
- }>, {
2
+ type OptionGroup = SvelteComponent<Props & Record<string, any>, {
11
3
  [evt: string]: CustomEvent<any>;
12
- }, {
13
- default: {};
14
- }> & {
15
- $$bindings?: string | undefined;
4
+ }, {}> & {
5
+ $$bindings?: "" | undefined;
16
6
  };
17
7
  /**
18
8
  * A group within a `<Listbox>`. The equivalent of the HTML `<optgroup>` element. It can contain one
@@ -21,24 +11,56 @@ type OptionGroup = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
21
11
  * @see https://w3c.github.io/aria/#listbox
22
12
  * @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-grouped/
23
13
  */
24
- declare const OptionGroup: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
25
- [x: string]: any;
14
+ declare const OptionGroup: $$__sveltets_2_IsomorphicComponent<{
15
+ /**
16
+ * - The `class` attribute on the wrapper element.
17
+ */
26
18
  class?: string | undefined;
19
+ /**
20
+ * - Whether to hide the widget. An alias of the `aria-hidden`
21
+ * attribute.
22
+ */
23
+ hidden?: boolean | undefined;
24
+ /**
25
+ * - Whether to disable the widget. An alias of the `aria-disabled`
26
+ * attribute.
27
+ */
27
28
  disabled?: boolean | undefined;
29
+ /**
30
+ * - The group’s label to be displayed above the child `<Option>`s.
31
+ */
28
32
  label?: string | undefined;
29
- hidden?: boolean | undefined;
30
- }, {
31
- default: {};
32
- }>, {
33
+ /**
34
+ * - Primary slot content.
35
+ */
36
+ children?: import("svelte").Snippet<[]> | undefined;
37
+ } & Record<string, any>, {
33
38
  [evt: string]: CustomEvent<any>;
34
- }, {
35
- default: {};
36
- }, {}, string>;
37
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
38
- default: any;
39
- } ? Props extends Record<string, never> ? any : {
40
- children?: any;
41
- } : {});
39
+ }, {}, {}, "">;
40
+ type Props = {
41
+ /**
42
+ * - The `class` attribute on the wrapper element.
43
+ */
44
+ class?: string | undefined;
45
+ /**
46
+ * - Whether to hide the widget. An alias of the `aria-hidden`
47
+ * attribute.
48
+ */
49
+ hidden?: boolean | undefined;
50
+ /**
51
+ * - Whether to disable the widget. An alias of the `aria-disabled`
52
+ * attribute.
53
+ */
54
+ disabled?: boolean | undefined;
55
+ /**
56
+ * - The group’s label to be displayed above the child `<Option>`s.
57
+ */
58
+ label?: string | undefined;
59
+ /**
60
+ * - Primary slot content.
61
+ */
62
+ children?: import("svelte").Snippet<[]> | undefined;
63
+ };
42
64
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
43
65
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
44
66
  $$bindings?: Bindings;
@@ -9,50 +9,43 @@
9
9
  import Icon from '../icon/icon.svelte';
10
10
 
11
11
  /**
12
- * The `class` attribute on the wrapper element.
13
- * @type {string}
12
+ * @typedef {object} Props
13
+ * @property {string} [class] - The `class` attribute on the wrapper element.
14
+ * @property {boolean} [selected] - Whether to select the widget. An alias of the `aria-selected`
15
+ * attribute.
16
+ * @property {string} label - Text label displayed on the item.
17
+ * @property {string} [searchValue] - The value to be searched.
18
+ * @property {boolean} [wrap] - Whether to wrap a long label.
19
+ * @property {import('svelte').Snippet} [checkIcon] - Check icon slot content.
14
20
  */
15
- let className = '';
16
- export { className as class };
17
- /**
18
- * Whether to select the widget. An alias of the `aria-selected` attribute.
19
- * @type {boolean}
20
- */
21
- export let selected = false;
22
- /**
23
- * Whether to hide the widget. An alias of the `aria-hidden` attribute.
24
- * @type {boolean | undefined}
25
- */
26
- export let hidden = undefined;
27
- /**
28
- * Whether to disable the widget. An alias of the `aria-disabled` attribute.
29
- * @type {boolean}
30
- */
31
- export let disabled = false;
32
- /**
33
- * Text label displayed on the item.
34
- * @type {string}
35
- */
36
- export let label;
37
- /**
38
- * The `value` attribute on the `<button>` element.
39
- * @type {string}
40
- */
41
- export let value = label;
42
- /**
43
- * The value to be searched.
44
- * @type {string}
45
- */
46
- export let searchValue = label;
21
+
47
22
  /**
48
- * Whether to wrap a long label.
49
- * @type {boolean}
23
+ * @type {import('../../typedefs').ButtonProps & import('../../typedefs').CommonEventHandlers &
24
+ * Props & Record<string, any>}
50
25
  */
51
- export let wrap = false;
26
+ let {
27
+ /* eslint-disable prefer-const */
28
+ selected = $bindable(false),
29
+ hidden = $bindable(false),
30
+ class: className,
31
+ disabled = false,
32
+ label,
33
+ value = label,
34
+ searchValue = label,
35
+ wrap = false,
36
+ children,
37
+ checkIcon,
38
+ startIcon: _startIcon,
39
+ onChange,
40
+ onToggle,
41
+ ...restProps
42
+ /* eslint-enable prefer-const */
43
+ } = $props();
52
44
  </script>
53
45
 
54
- <div role="none" class="sui option {className}" class:wrap hidden={hidden || undefined}>
46
+ <div role="none" class="sui option {className}" class:wrap {hidden}>
55
47
  <Button
48
+ {...restProps}
56
49
  role="option"
57
50
  tabindex="-1"
58
51
  aria-selected={selected}
@@ -63,33 +56,27 @@
63
56
  data-type={typeof value}
64
57
  data-label={label}
65
58
  data-search-value={searchValue}
66
- {...$$restProps}
67
- on:click
68
- on:dblclick
69
- on:focus
70
- on:blur
71
- on:dragover
72
- on:dragleave
73
- on:dragend
74
- on:drop
75
- on:select
76
- on:change
77
- on:change={(event) => {
59
+ onChange={(event) => {
78
60
  selected = event.detail.selected;
61
+ onChange?.(event);
79
62
  }}
80
- on:toggle={(event) => {
81
- hidden = /** @type {CustomEvent} */ (event).detail.hidden;
63
+ onToggle={(event) => {
64
+ hidden = event.detail.hidden;
82
65
  selected = false;
66
+ onToggle?.(event);
83
67
  }}
84
68
  >
85
69
  {#if selected}
86
- <slot name="check-icon">
70
+ {#if checkIcon}
71
+ {@render checkIcon()}
72
+ {:else}
87
73
  <Icon class="check" name="check" />
88
- </slot>
74
+ {/if}
89
75
  {/if}
90
- <slot name="start-icon" slot="start-icon" />
91
- <slot />
92
- <slot name="end-icon" slot="end-icon" />
76
+ {#snippet startIcon()}
77
+ {@render _startIcon?.()}
78
+ {/snippet}
79
+ {@render children?.()}
93
80
  </Button>
94
81
  </div>
95
82
 
@@ -1,100 +1,70 @@
1
1
  export default Option;
2
- type Option = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
- [x: string]: any;
4
- label: string;
5
- class?: string | undefined;
6
- disabled?: boolean | undefined;
7
- value?: string | undefined;
8
- hidden?: boolean | undefined;
9
- selected?: boolean | undefined;
10
- searchValue?: string | undefined;
11
- wrap?: boolean | undefined;
12
- }, {
13
- 'check-icon': {};
14
- 'start-icon': {
15
- slot: string;
16
- };
17
- default: {};
18
- 'end-icon': {
19
- slot: string;
20
- };
21
- }>, {
22
- click: MouseEvent;
23
- dblclick: MouseEvent;
24
- focus: FocusEvent;
25
- blur: FocusEvent;
26
- dragover: DragEvent;
27
- dragleave: DragEvent;
28
- dragend: DragEvent;
29
- drop: DragEvent;
30
- select: CustomEvent<any>;
31
- change: CustomEvent<any>;
32
- } & {
2
+ type Option = SvelteComponent<ButtonProps & KeyboardEventHandlers & MouseEventHandlers & FocusEventHandlers & DragEventHandlers & Props & Record<string, any>, {
33
3
  [evt: string]: CustomEvent<any>;
34
- }, {
35
- 'check-icon': {};
36
- 'start-icon': {
37
- slot: string;
38
- };
39
- default: {};
40
- 'end-icon': {
41
- slot: string;
42
- };
43
- }> & {
44
- $$bindings?: string | undefined;
4
+ }, {}> & {
5
+ $$bindings?: "hidden" | "selected" | undefined;
45
6
  };
46
7
  /**
47
8
  * An option within the `<Listbox>` widget. The equivalent of the HTML `<option>` element.
48
9
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option
49
10
  * @see https://w3c.github.io/aria/#option
50
11
  */
51
- declare const Option: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
52
- [x: string]: any;
53
- label: string;
12
+ declare const Option: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").ButtonProps & import("../../typedefs").KeyboardEventHandlers & import("../../typedefs").MouseEventHandlers & import("../../typedefs").FocusEventHandlers & import("../../typedefs").DragEventHandlers & {
13
+ /**
14
+ * - The `class` attribute on the wrapper element.
15
+ */
54
16
  class?: string | undefined;
55
- disabled?: boolean | undefined;
56
- value?: string | undefined;
57
- hidden?: boolean | undefined;
17
+ /**
18
+ * - Whether to select the widget. An alias of the `aria-selected`
19
+ * attribute.
20
+ */
58
21
  selected?: boolean | undefined;
22
+ /**
23
+ * - Text label displayed on the item.
24
+ */
25
+ label: string;
26
+ /**
27
+ * - The value to be searched.
28
+ */
59
29
  searchValue?: string | undefined;
30
+ /**
31
+ * - Whether to wrap a long label.
32
+ */
60
33
  wrap?: boolean | undefined;
61
- }, {
62
- 'check-icon': {};
63
- 'start-icon': {
64
- slot: string;
65
- };
66
- default: {};
67
- 'end-icon': {
68
- slot: string;
69
- };
70
- }>, {
71
- click: MouseEvent;
72
- dblclick: MouseEvent;
73
- focus: FocusEvent;
74
- blur: FocusEvent;
75
- dragover: DragEvent;
76
- dragleave: DragEvent;
77
- dragend: DragEvent;
78
- drop: DragEvent;
79
- select: CustomEvent<any>;
80
- change: CustomEvent<any>;
81
- } & {
34
+ /**
35
+ * - Check icon slot content.
36
+ */
37
+ checkIcon?: import("svelte").Snippet<[]> | undefined;
38
+ } & Record<string, any>, {
82
39
  [evt: string]: CustomEvent<any>;
83
- }, {
84
- 'check-icon': {};
85
- 'start-icon': {
86
- slot: string;
87
- };
88
- default: {};
89
- 'end-icon': {
90
- slot: string;
91
- };
92
- }, {}, string>;
93
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
94
- default: any;
95
- } ? Props extends Record<string, never> ? any : {
96
- children?: any;
97
- } : {});
40
+ }, {}, {}, "hidden" | "selected">;
41
+ type Props = {
42
+ /**
43
+ * - The `class` attribute on the wrapper element.
44
+ */
45
+ class?: string | undefined;
46
+ /**
47
+ * - Whether to select the widget. An alias of the `aria-selected`
48
+ * attribute.
49
+ */
50
+ selected?: boolean | undefined;
51
+ /**
52
+ * - Text label displayed on the item.
53
+ */
54
+ label: string;
55
+ /**
56
+ * - The value to be searched.
57
+ */
58
+ searchValue?: string | undefined;
59
+ /**
60
+ * - Whether to wrap a long label.
61
+ */
62
+ wrap?: boolean | undefined;
63
+ /**
64
+ * - Check icon slot content.
65
+ */
66
+ checkIcon?: import("svelte").Snippet<[]> | undefined;
67
+ };
98
68
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
99
69
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
100
70
  $$bindings?: Bindings;
@@ -8,77 +8,53 @@
8
8
  import Popup from '../util/popup.svelte';
9
9
 
10
10
  /**
11
- * The `class` attribute on the `<button>` element.
12
- * @type {string}
11
+ * @typedef {object} Props
12
+ * @property {HTMLElement | undefined} [popupPositionBaseElement] - The base element of
13
+ * {@link popupPosition}. If omitted, this will be {@link buttonComponent}.
13
14
  */
14
- let className = '';
15
- export { className as class };
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;
26
- /**
27
- * Where to show the dropdown menu.
28
- * @type {import('../../typedefs').PopupPosition}
29
- */
30
- export let popupPosition = 'bottom-left';
31
- /**
32
- * The base element of {@link popupPosition}. If omitted, this will be {@link buttonComponent}.
33
- * @type {HTMLElement | undefined}
34
- */
35
- export let popupPositionBaseElement = undefined;
36
- /**
37
- * Whether to show the backdrop for the popup.
38
- * @type {boolean}
39
- */
40
- export let showPopupBackdrop = false;
41
- /**
42
- * Text label displayed on the button.
43
- * @type {string}
44
- */
45
- export let label = '';
46
- /**
47
- * The style variant of the button.
48
- * @type {'primary' | 'secondary' | 'tertiary' | 'ghost' | 'link' | undefined}
49
- */
50
- export let variant = undefined;
51
- /**
52
- * The size of the button.
53
- * @type {'small' | 'medium' | 'large'}
54
- */
55
- export let size = 'medium';
56
- /**
57
- * Whether to only show an icon on the button and trim the padding.
58
- */
59
- export let iconic = false;
60
15
 
61
16
  /**
62
- * Reference to the `Button` component.
63
- * @type {Button | undefined}
17
+ * @type {import('../../typedefs').ButtonProps & import('../../typedefs').CommonEventHandlers &
18
+ * Props & Record<string, any>}
64
19
  */
65
- let buttonComponent;
20
+ let {
21
+ /* eslint-disable prefer-const */
22
+ class: className,
23
+ hidden = false,
24
+ disabled = false,
25
+ popupPosition = 'bottom-left',
26
+ popupPositionBaseElement = undefined,
27
+ showPopupBackdrop = false,
28
+ label = '',
29
+ variant = undefined,
30
+ size = 'medium',
31
+ iconic = false,
32
+ children: _children,
33
+ startIcon: _startIcon,
34
+ endIcon: _endIcon,
35
+ popup,
36
+ ...restProps
37
+ /* eslint-enable prefer-const */
38
+ } = $props();
39
+
66
40
  /**
67
- * Reference to the `Popup` component.
68
- * @type {Popup | undefined}
41
+ * Reference to the `<button>` element.
42
+ * @type {HTMLButtonElement | undefined}
69
43
  */
70
- let popupComponent;
44
+ let buttonElement = $state();
71
45
 
72
46
  /**
73
47
  * Move focus to the `<button>` element.
74
48
  */
75
49
  export const focus = () => {
76
- buttonComponent?.element?.focus();
50
+ buttonElement?.focus();
77
51
  };
78
52
  </script>
79
53
 
80
54
  <div role="none" class="wrapper">
81
55
  <Button
56
+ {...restProps}
57
+ bind:element={buttonElement}
82
58
  class="sui menu-button {className}"
83
59
  {hidden}
84
60
  {disabled}
@@ -87,21 +63,24 @@
87
63
  {size}
88
64
  {iconic}
89
65
  aria-haspopup="menu"
90
- {...$$restProps}
91
- bind:this={buttonComponent}
92
66
  >
93
- <slot name="start-icon" slot="start-icon" />
94
- <slot />
95
- <slot name="end-icon" slot="end-icon" />
67
+ {#snippet startIcon()}
68
+ {@render _startIcon?.()}
69
+ {/snippet}
70
+ {#snippet children()}
71
+ {@render _children?.()}
72
+ {/snippet}
73
+ {#snippet endIcon()}
74
+ {@render _endIcon?.()}
75
+ {/snippet}
96
76
  </Button>
97
77
  </div>
98
78
 
99
79
  <Popup
100
- anchor={buttonComponent?.element}
80
+ anchor={buttonElement}
101
81
  position={popupPosition}
102
82
  positionBaseElement={popupPositionBaseElement}
103
83
  showBackdrop={showPopupBackdrop}
104
- bind:this={popupComponent}
105
84
  >
106
- <slot name="popup" />
85
+ {@render popup?.()}
107
86
  </Popup>
@@ -1,39 +1,8 @@
1
1
  export default MenuButton;
2
- type MenuButton = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
- [x: string]: any;
4
- class?: string | undefined;
5
- disabled?: boolean | undefined;
6
- focus?: (() => void) | undefined;
7
- label?: string | undefined;
8
- size?: "small" | "medium" | "large" | undefined;
9
- hidden?: boolean | undefined;
10
- variant?: "link" | "primary" | "secondary" | "tertiary" | "ghost" | undefined;
11
- iconic?: boolean | undefined;
12
- popupPosition?: PopupPosition | undefined;
13
- showPopupBackdrop?: boolean | undefined;
14
- popupPositionBaseElement?: HTMLElement | undefined;
15
- }, {
16
- 'start-icon': {
17
- slot: string;
18
- };
19
- default: {};
20
- 'end-icon': {
21
- slot: string;
22
- };
23
- popup: {};
24
- }>, {
2
+ type MenuButton = SvelteComponent<ButtonProps & KeyboardEventHandlers & MouseEventHandlers & FocusEventHandlers & DragEventHandlers & Props & Record<string, any>, {
25
3
  [evt: string]: CustomEvent<any>;
26
- }, {
27
- 'start-icon': {
28
- slot: string;
29
- };
30
- default: {};
31
- 'end-icon': {
32
- slot: string;
33
- };
34
- popup: {};
35
- }> & {
36
- $$bindings?: string | undefined;
4
+ }, {}> & {
5
+ $$bindings?: "" | undefined;
37
6
  } & {
38
7
  focus: () => void;
39
8
  };
@@ -41,47 +10,24 @@ type MenuButton = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
41
10
  * A button to open a `<Menu>` widget.
42
11
  * @see https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/
43
12
  */
44
- declare const MenuButton: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
45
- [x: string]: any;
46
- class?: string | undefined;
47
- disabled?: boolean | undefined;
48
- focus?: (() => void) | undefined;
49
- label?: string | undefined;
50
- size?: "small" | "medium" | "large" | undefined;
51
- hidden?: boolean | undefined;
52
- variant?: "primary" | "secondary" | "tertiary" | "ghost" | "link" | undefined;
53
- iconic?: boolean | undefined;
54
- popupPosition?: import("../../typedefs").PopupPosition | undefined;
55
- showPopupBackdrop?: boolean | undefined;
13
+ declare const MenuButton: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").ButtonProps & import("../../typedefs").KeyboardEventHandlers & import("../../typedefs").MouseEventHandlers & import("../../typedefs").FocusEventHandlers & import("../../typedefs").DragEventHandlers & {
14
+ /**
15
+ * - The base element of
16
+ * {@link popupPosition}. If omitted, this will be {@link buttonComponent}.
17
+ */
56
18
  popupPositionBaseElement?: HTMLElement | undefined;
57
- }, {
58
- 'start-icon': {
59
- slot: string;
60
- };
61
- default: {};
62
- 'end-icon': {
63
- slot: string;
64
- };
65
- popup: {};
66
- }>, {
19
+ } & Record<string, any>, {
67
20
  [evt: string]: CustomEvent<any>;
68
- }, {
69
- 'start-icon': {
70
- slot: string;
71
- };
72
- default: {};
73
- 'end-icon': {
74
- slot: string;
75
- };
76
- popup: {};
77
- }, {
21
+ }, {}, {
78
22
  focus: () => void;
79
- }, string>;
80
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
81
- default: any;
82
- } ? Props extends Record<string, never> ? any : {
83
- children?: any;
84
- } : {});
23
+ }, "">;
24
+ type Props = {
25
+ /**
26
+ * - The base element of
27
+ * {@link popupPosition}. If omitted, this will be {@link buttonComponent}.
28
+ */
29
+ popupPositionBaseElement?: HTMLElement | undefined;
30
+ };
85
31
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
86
32
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
87
33
  $$bindings?: Bindings;