@sveltia/ui 0.16.0 → 0.17.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 (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 +28 -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 +27 -22
  70. package/package/components/menu/menu.svelte.d.ts +50 -30
  71. package/package/components/radio/radio-group.svelte +38 -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 +28 -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 +12 -19
  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
@@ -12,13 +12,22 @@
12
12
  import { getContext } from 'svelte';
13
13
  import { _ } from 'svelte-i18n';
14
14
  import { availableButtons } from '..';
15
+ import Icon from '../../icon/icon.svelte';
15
16
  import MenuItemCheckbox from '../../menu/menu-item-checkbox.svelte';
16
17
 
17
18
  /**
18
- * Button type.
19
- * @type {import('../../../typedefs').TextEditorBlockType}
19
+ * @typedef {object} Props
20
+ * @property {import('../../../typedefs').TextEditorBlockType} type - Button type.
20
21
  */
21
- export let type;
22
+
23
+ /**
24
+ * @type {Props & Record<string, any>}
25
+ */
26
+ let {
27
+ /* eslint-disable prefer-const */
28
+ type,
29
+ /* eslint-enable prefer-const */
30
+ } = $props();
22
31
 
23
32
  /**
24
33
  * Text editor state.
@@ -29,7 +38,7 @@
29
38
  /**
30
39
  * Whether the current selection matches the button {@link type}.
31
40
  */
32
- $: selectionTypeMatches = $selectionBlockType === type;
41
+ const selectionTypeMatches = $derived($selectionBlockType === type);
33
42
 
34
43
  /**
35
44
  * Change the current selection’s type to {@link type}.
@@ -76,13 +85,16 @@
76
85
 
77
86
  {#key selectionTypeMatches}
78
87
  <MenuItemCheckbox
79
- iconName={availableButtons[type].icon}
80
88
  label={$_(`_sui.text_editor.${availableButtons[type].labelKey}`)}
81
89
  checked={selectionTypeMatches}
82
- on:click={() => {
90
+ onclick={() => {
83
91
  if (!selectionTypeMatches) {
84
92
  changeBlockType();
85
93
  }
86
94
  }}
87
- />
95
+ >
96
+ {#snippet startIcon()}
97
+ <Icon name={availableButtons[type].icon} />
98
+ {/snippet}
99
+ </MenuItemCheckbox>
88
100
  {/key}
@@ -1,16 +1,23 @@
1
1
  export default ToggleBlockMenuItem;
2
- type ToggleBlockMenuItem = SvelteComponent<{
3
- type: TextEditorBlockType;
4
- }, {
2
+ type ToggleBlockMenuItem = SvelteComponent<Props & Record<string, any>, {
5
3
  [evt: string]: CustomEvent<any>;
6
4
  }, {}> & {
7
- $$bindings?: string | undefined;
5
+ $$bindings?: "" | undefined;
8
6
  };
9
7
  declare const ToggleBlockMenuItem: $$__sveltets_2_IsomorphicComponent<{
8
+ /**
9
+ * - Button type.
10
+ */
10
11
  type: import("../../../typedefs").TextEditorBlockType;
11
- }, {
12
+ } & Record<string, any>, {
12
13
  [evt: string]: CustomEvent<any>;
13
- }, {}, {}, string>;
14
+ }, {}, {}, "">;
15
+ type Props = {
16
+ /**
17
+ * - Button type.
18
+ */
19
+ type: import("../../../typedefs").TextEditorBlockType;
20
+ };
14
21
  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> {
15
22
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
23
  $$bindings?: Bindings;
@@ -12,77 +12,56 @@
12
12
  import TextInput from './text-input.svelte';
13
13
 
14
14
  /**
15
- * The `class` attribute on the wrapper element.
16
- * @type {string}
15
+ * @typedef {object} Props
16
+ * @property {number | undefined} [min] - Minimum allowed value.
17
+ * @property {number | undefined} [max] - Maximum allowed value.
18
+ * @property {number} [step] - Value to be added or removed when using the up/down arrow key or
19
+ * button.
20
+ * @property {import('svelte').Snippet} [increaseIcon] - Increase icon slot content.
21
+ * @property {import('svelte').Snippet} [decreaseIcon] - Decrease icon slot content.
17
22
  */
18
- let className = '';
19
- export { className as class };
20
- /**
21
- * Make the text input container flexible.
22
- * @type {boolean}
23
- */
24
- export let flex = false;
25
- /**
26
- * Whether to hide the widget. An alias of the `aria-hidden` attribute.
27
- * @type {boolean | undefined}
28
- */
29
- export let hidden = undefined;
30
- /**
31
- * Whether to disable the widget. An alias of the `aria-disabled` attribute.
32
- * @type {boolean}
33
- */
34
- export let disabled = false;
35
- /**
36
- * Whether to disable the widget. An alias of `aria-readonly` attribute.
37
- * @type {boolean}
38
- */
39
- export let readonly = false;
40
- /**
41
- * Whether to mark the widget required. An alias of the `aria-required` attribute.
42
- * @type {boolean}
43
- */
44
- export let required = false;
45
- /**
46
- * Whether to mark the widget invalid. An alias of the `aria-invalid` attribute.
47
- * @type {boolean}
48
- */
49
- export let invalid = false;
50
- /**
51
- * Input value.
52
- * @type {string | undefined}
53
- */
54
- export let value = undefined;
55
- /**
56
- * Minimum allowed value.
57
- * @type {number | undefined}
58
- */
59
- export let min = undefined;
60
- /**
61
- * Maximum allowed value.
62
- * @type {number | undefined}
63
- */
64
- export let max = undefined;
23
+
65
24
  /**
66
- * Value to be added or removed when using the up/down arrow key or button.
25
+ * @type {import('../../typedefs').TextInputProps & import('../../typedefs').CommonEventHandlers &
26
+ * import('../../typedefs').InputEventHandlers & Props & Record<string, any>}
67
27
  */
68
- export let step = 1;
28
+ let {
29
+ /* eslint-disable prefer-const */
30
+ value = $bindable(),
31
+ invalid = $bindable(false),
32
+ flex = false,
33
+ min = undefined,
34
+ max = undefined,
35
+ step = 1,
36
+ class: className,
37
+ hidden = false,
38
+ disabled = false,
39
+ readonly = false,
40
+ required = false,
41
+ children,
42
+ increaseIcon,
43
+ decreaseIcon,
44
+ onChange,
45
+ ...restProps
46
+ /* eslint-enable prefer-const */
47
+ } = $props();
69
48
 
70
49
  const id = generateElementId('input');
71
- let edited = false;
72
-
73
- $: maximumFractionDigits = String(step).split('.')[1]?.length || 0;
74
- $: isMin = typeof min === 'number' && Number(value || 0) <= min;
75
- $: isMax = typeof max === 'number' && Number(value || 0) >= max;
50
+ let edited = $state(false);
76
51
 
77
- $: invalid =
78
- (required && edited && (value === undefined || value === '')) ||
79
- (value !== undefined &&
80
- value !== '' &&
81
- (Number.isNaN(Number(value)) ||
82
- (typeof min === 'number' && Number(value || 0) < min) ||
83
- (typeof max === 'number' && Number(value || 0) > max)));
52
+ const maximumFractionDigits = $derived(String(step).split('.')[1]?.length || 0);
53
+ const isMin = $derived(typeof min === 'number' && Number(value || 0) <= min);
54
+ const isMax = $derived(typeof max === 'number' && Number(value || 0) >= max);
84
55
 
85
- let component;
56
+ $effect(() => {
57
+ invalid =
58
+ (required && edited && (value === undefined || value === '')) ||
59
+ (value !== undefined &&
60
+ value !== '' &&
61
+ (Number.isNaN(Number(value)) ||
62
+ (typeof min === 'number' && Number(value || 0) < min) ||
63
+ (typeof max === 'number' && Number(value || 0) > max)));
64
+ });
86
65
 
87
66
  /**
88
67
  * Decrease the number.
@@ -113,7 +92,7 @@
113
92
  class:flex
114
93
  class:disabled
115
94
  class:readonly
116
- hidden={hidden || undefined}
95
+ {hidden}
117
96
  >
118
97
  <div role="none" class="buttons">
119
98
  <Button
@@ -121,29 +100,38 @@
121
100
  disabled={disabled || readonly || Number.isNaN(Number(value)) || isMax}
122
101
  aria-label={$_('_sui.number_input.increase')}
123
102
  aria-controls={id}
124
- on:click={() => {
103
+ onclick={() => {
125
104
  increase();
126
105
  }}
127
106
  >
128
- <slot name="increase-icon" slot="start-icon">
129
- <Icon name="expand_less" />
130
- </slot>
107
+ {#snippet startIcon()}
108
+ {#if increaseIcon}
109
+ {@render increaseIcon()}
110
+ {:else}
111
+ <Icon name="expand_less" />
112
+ {/if}
113
+ {/snippet}
131
114
  </Button>
132
115
  <Button
133
116
  iconic
134
117
  disabled={disabled || readonly || Number.isNaN(Number(value)) || isMin}
135
118
  aria-label={$_('_sui.number_input.decrease')}
136
119
  aria-controls={id}
137
- on:click={() => {
120
+ onclick={() => {
138
121
  decrease();
139
122
  }}
140
123
  >
141
- <slot name="decrease-icon" slot="start-icon">
142
- <Icon name="expand_more" />
143
- </slot>
124
+ {#snippet startIcon()}
125
+ {#if decreaseIcon}
126
+ {@render decreaseIcon()}
127
+ {:else}
128
+ <Icon name="expand_more" />
129
+ {/if}
130
+ {/snippet}
144
131
  </Button>
145
132
  </div>
146
133
  <TextInput
134
+ {...restProps}
147
135
  role="spinbutton"
148
136
  {id}
149
137
  bind:value
@@ -158,9 +146,7 @@
158
146
  aria-valuemin={min}
159
147
  aria-valuemax={max}
160
148
  inputmode={maximumFractionDigits > 0 ? 'decimal' : 'numeric'}
161
- {...$$restProps}
162
- bind:this={component}
163
- on:keydown={(event) => {
149
+ onkeydown={(event) => {
164
150
  const { key, ctrlKey, metaKey, altKey, shiftKey } = event;
165
151
  const hasModifier = shiftKey || altKey || ctrlKey || metaKey;
166
152
 
@@ -178,11 +164,7 @@
178
164
  edited = true;
179
165
  }
180
166
  }}
181
- on:keydown
182
- on:keyup
183
- on:keypress
184
- on:input
185
- on:change
167
+ {onChange}
186
168
  />
187
169
  </div>
188
170
 
@@ -1,69 +1,62 @@
1
1
  export default NumberInput;
2
- type NumberInput = SvelteComponent<{
3
- [x: string]: any;
4
- class?: string | undefined;
5
- disabled?: boolean | undefined;
6
- invalid?: boolean | undefined;
7
- max?: number | undefined;
8
- min?: number | undefined;
9
- required?: boolean | undefined;
10
- step?: number | undefined;
11
- value?: string | undefined;
12
- hidden?: boolean | undefined;
13
- readonly?: boolean | undefined;
14
- flex?: boolean | undefined;
15
- }, {
16
- keydown: KeyboardEvent;
17
- keyup: KeyboardEvent;
18
- keypress: KeyboardEvent;
19
- input: Event;
20
- change: Event;
21
- } & {
2
+ type NumberInput = SvelteComponent<TextInputProps & KeyboardEventHandlers & MouseEventHandlers & FocusEventHandlers & DragEventHandlers & InputEventHandlers & Props & Record<string, any>, {
22
3
  [evt: string]: CustomEvent<any>;
23
- }, {
24
- 'increase-icon': {
25
- slot: string;
26
- };
27
- 'decrease-icon': {
28
- slot: string;
29
- };
30
- }> & {
31
- $$bindings?: string | undefined;
4
+ }, {}> & {
5
+ $$bindings?: "invalid" | "value" | undefined;
32
6
  };
33
7
  /**
34
8
  * The equivalent of the HTML `<input type="number">` element.
35
9
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number
36
10
  * @see https://w3c.github.io/aria/#textbox
37
11
  */
38
- declare const NumberInput: $$__sveltets_2_IsomorphicComponent<{
39
- [x: string]: any;
40
- class?: string | undefined;
41
- disabled?: boolean | undefined;
42
- invalid?: boolean | undefined;
43
- max?: number | undefined;
12
+ declare const NumberInput: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").TextInputProps & import("../../typedefs").KeyboardEventHandlers & import("../../typedefs").MouseEventHandlers & import("../../typedefs").FocusEventHandlers & import("../../typedefs").DragEventHandlers & import("../../typedefs").InputEventHandlers & {
13
+ /**
14
+ * - Minimum allowed value.
15
+ */
44
16
  min?: number | undefined;
45
- required?: boolean | undefined;
17
+ /**
18
+ * - Maximum allowed value.
19
+ */
20
+ max?: number | undefined;
21
+ /**
22
+ * - Value to be added or removed when using the up/down arrow key or
23
+ * button.
24
+ */
46
25
  step?: number | undefined;
47
- value?: string | undefined;
48
- hidden?: boolean | undefined;
49
- readonly?: boolean | undefined;
50
- flex?: boolean | undefined;
51
- }, {
52
- keydown: KeyboardEvent;
53
- keyup: KeyboardEvent;
54
- keypress: KeyboardEvent;
55
- input: Event;
56
- change: Event;
57
- } & {
26
+ /**
27
+ * - Increase icon slot content.
28
+ */
29
+ increaseIcon?: import("svelte").Snippet<[]> | undefined;
30
+ /**
31
+ * - Decrease icon slot content.
32
+ */
33
+ decreaseIcon?: import("svelte").Snippet<[]> | undefined;
34
+ } & Record<string, any>, {
58
35
  [evt: string]: CustomEvent<any>;
59
- }, {
60
- 'increase-icon': {
61
- slot: string;
62
- };
63
- 'decrease-icon': {
64
- slot: string;
65
- };
66
- }, {}, string>;
36
+ }, {}, {}, "invalid" | "value">;
37
+ type Props = {
38
+ /**
39
+ * - Minimum allowed value.
40
+ */
41
+ min?: number | undefined;
42
+ /**
43
+ * - Maximum allowed value.
44
+ */
45
+ max?: number | undefined;
46
+ /**
47
+ * - Value to be added or removed when using the up/down arrow key or
48
+ * button.
49
+ */
50
+ step?: number | undefined;
51
+ /**
52
+ * - Increase icon slot content.
53
+ */
54
+ increaseIcon?: import("svelte").Snippet<[]> | undefined;
55
+ /**
56
+ * - Decrease icon slot content.
57
+ */
58
+ decreaseIcon?: import("svelte").Snippet<[]> | undefined;
59
+ };
67
60
  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> {
68
61
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
69
62
  $$bindings?: Bindings;
@@ -13,60 +13,42 @@
13
13
  import TextInput from './text-input.svelte';
14
14
 
15
15
  /**
16
- * The `class` attribute on the wrapper element.
17
- * @type {string}
16
+ * @typedef {object} Props
17
+ * @property {import('svelte').Snippet} [visibilityIcon] - Visibility icon slot content.
18
18
  */
19
- let className = '';
20
- export { className as class };
21
- /**
22
- * Make the text input container flexible.
23
- * @type {boolean}
24
- */
25
- export let flex = false;
26
- /**
27
- * Whether to hide the widget. An alias of the `aria-hidden` attribute.
28
- * @type {boolean | undefined}
29
- */
30
- export let hidden = undefined;
31
- /**
32
- * Whether to disable the widget. An alias of the `aria-disabled` attribute.
33
- * @type {boolean}
34
- */
35
- export let disabled = false;
36
- /**
37
- * Whether to disable the widget. An alias of `aria-readonly` attribute.
38
- * @type {boolean}
39
- */
40
- export let readonly = false;
41
- /**
42
- * Whether to mark the widget required. An alias of the `aria-required` attribute.
43
- * @type {boolean}
44
- */
45
- export let required = false;
46
- /**
47
- * Whether to mark the widget invalid. An alias of the `aria-invalid` attribute.
48
- * @type {boolean}
49
- */
50
- export let invalid = false;
19
+
51
20
  /**
52
- * Input value.
53
- * @type {string | undefined}
21
+ * @type {import('../../typedefs').TextInputProps & import('../../typedefs').CommonEventHandlers &
22
+ * import('../../typedefs').InputEventHandlers & Props & Record<string, any>}
54
23
  */
55
- export let value = undefined;
24
+ let {
25
+ /* eslint-disable prefer-const */
26
+ value = $bindable(),
27
+ flex = false,
28
+ class: className,
29
+ hidden = false,
30
+ disabled = false,
31
+ readonly = false,
32
+ required = false,
33
+ invalid = false,
34
+ children,
35
+ visibilityIcon,
36
+ ...restProps
37
+ /* eslint-enable prefer-const */
38
+ } = $props();
56
39
 
57
40
  const id = generateElementId('input');
58
41
 
59
42
  /**
60
- * @type {TextInput}
43
+ * Reference to the `<input>` element.
44
+ * @type {HTMLInputElement | undefined}
61
45
  */
62
- let inputComponent;
63
- let passwordVisible = false;
46
+ let inputElement = $state();
47
+ let passwordVisible = $state(false);
64
48
 
65
- $: {
66
- if (inputComponent) {
67
- inputComponent.element?.setAttribute('type', passwordVisible ? 'text' : 'password');
68
- }
69
- }
49
+ $effect(() => {
50
+ inputElement?.setAttribute('type', passwordVisible ? 'text' : 'password');
51
+ });
70
52
  </script>
71
53
 
72
54
  <div
@@ -75,9 +57,11 @@
75
57
  class:flex
76
58
  class:disabled
77
59
  class:readonly
78
- hidden={hidden || undefined}
60
+ {hidden}
79
61
  >
80
62
  <TextInput
63
+ bind:element={inputElement}
64
+ {...restProps}
81
65
  {id}
82
66
  bind:value
83
67
  type="password"
@@ -88,13 +72,6 @@
88
72
  {readonly}
89
73
  {required}
90
74
  {invalid}
91
- {...$$restProps}
92
- bind:this={inputComponent}
93
- on:keydown
94
- on:keyup
95
- on:keypress
96
- on:input
97
- on:change
98
75
  />
99
76
  <Button
100
77
  iconic
@@ -104,13 +81,17 @@
104
81
  passwordVisible ? '_sui.password_input.hide_password' : '_sui.password_input.show_password',
105
82
  )}
106
83
  aria-controls={id}
107
- on:click={() => {
84
+ onclick={() => {
108
85
  passwordVisible = !passwordVisible;
109
86
  }}
110
87
  >
111
- <slot name="visibility-icon" slot="start-icon">
112
- <Icon name={passwordVisible ? 'visibility_off' : 'visibility'} />
113
- </slot>
88
+ {#snippet startIcon()}
89
+ {#if visibilityIcon}
90
+ {@render visibilityIcon()}
91
+ {:else}
92
+ <Icon name={passwordVisible ? 'visibility_off' : 'visibility'} />
93
+ {/if}
94
+ {/snippet}
114
95
  </Button>
115
96
  </div>
116
97
 
@@ -1,28 +1,8 @@
1
1
  export default PasswordInput;
2
- type PasswordInput = SvelteComponent<{
3
- [x: string]: any;
4
- class?: string | undefined;
5
- disabled?: boolean | undefined;
6
- invalid?: boolean | undefined;
7
- required?: boolean | undefined;
8
- value?: string | undefined;
9
- hidden?: boolean | undefined;
10
- readonly?: boolean | undefined;
11
- flex?: boolean | undefined;
12
- }, {
13
- keydown: KeyboardEvent;
14
- keyup: KeyboardEvent;
15
- keypress: KeyboardEvent;
16
- input: Event;
17
- change: Event;
18
- } & {
2
+ type PasswordInput = SvelteComponent<TextInputProps & KeyboardEventHandlers & MouseEventHandlers & FocusEventHandlers & DragEventHandlers & InputEventHandlers & Props & Record<string, any>, {
19
3
  [evt: string]: CustomEvent<any>;
20
- }, {
21
- 'visibility-icon': {
22
- slot: string;
23
- };
24
- }> & {
25
- $$bindings?: string | undefined;
4
+ }, {}> & {
5
+ $$bindings?: "value" | undefined;
26
6
  };
27
7
  /**
28
8
  * The equivalent of the HTML `<input type="password">` element, but it comes with the Show/Hide
@@ -30,29 +10,20 @@ type PasswordInput = SvelteComponent<{
30
10
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password
31
11
  * @see https://w3c.github.io/aria/#textbox
32
12
  */
33
- declare const PasswordInput: $$__sveltets_2_IsomorphicComponent<{
34
- [x: string]: any;
35
- class?: string | undefined;
36
- disabled?: boolean | undefined;
37
- invalid?: boolean | undefined;
38
- required?: boolean | undefined;
39
- value?: string | undefined;
40
- hidden?: boolean | undefined;
41
- readonly?: boolean | undefined;
42
- flex?: boolean | undefined;
43
- }, {
44
- keydown: KeyboardEvent;
45
- keyup: KeyboardEvent;
46
- keypress: KeyboardEvent;
47
- input: Event;
48
- change: Event;
49
- } & {
13
+ declare const PasswordInput: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").TextInputProps & import("../../typedefs").KeyboardEventHandlers & import("../../typedefs").MouseEventHandlers & import("../../typedefs").FocusEventHandlers & import("../../typedefs").DragEventHandlers & import("../../typedefs").InputEventHandlers & {
14
+ /**
15
+ * - Visibility icon slot content.
16
+ */
17
+ visibilityIcon?: import("svelte").Snippet<[]> | undefined;
18
+ } & Record<string, any>, {
50
19
  [evt: string]: CustomEvent<any>;
51
- }, {
52
- 'visibility-icon': {
53
- slot: string;
54
- };
55
- }, {}, string>;
20
+ }, {}, {}, "value">;
21
+ type Props = {
22
+ /**
23
+ * - Visibility icon slot content.
24
+ */
25
+ visibilityIcon?: import("svelte").Snippet<[]> | undefined;
26
+ };
56
27
  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> {
57
28
  new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
58
29
  $$bindings?: Bindings;