@sveltia/ui 0.15.16 → 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 (157) hide show
  1. package/package/components/alert/alert.svelte +22 -7
  2. package/package/components/alert/alert.svelte.d.ts +47 -31
  3. package/package/components/button/button-group.svelte +16 -6
  4. package/package/components/button/button-group.svelte.d.ts +38 -28
  5. package/package/components/button/button.svelte +41 -136
  6. package/package/components/button/button.svelte.d.ts +20 -162
  7. package/package/components/button/select-button-group.svelte +31 -37
  8. package/package/components/button/select-button-group.svelte.d.ts +91 -39
  9. package/package/components/button/select-button.svelte +19 -62
  10. package/package/components/button/select-button.svelte.d.ts +31 -65
  11. package/package/components/button/split-button.svelte +37 -47
  12. package/package/components/button/split-button.svelte.d.ts +54 -60
  13. package/package/components/calendar/calendar.svelte +80 -55
  14. package/package/components/calendar/calendar.svelte.d.ts +30 -26
  15. package/package/components/checkbox/checkbox-group.svelte +23 -20
  16. package/package/components/checkbox/checkbox-group.svelte.d.ts +64 -32
  17. package/package/components/checkbox/checkbox.svelte +57 -67
  18. package/package/components/checkbox/checkbox.svelte.d.ts +81 -53
  19. package/package/components/dialog/alert-dialog.svelte +9 -36
  20. package/package/components/dialog/alert-dialog.svelte.d.ts +20 -49
  21. package/package/components/dialog/confirmation-dialog.svelte +9 -41
  22. package/package/components/dialog/confirmation-dialog.svelte.d.ts +20 -51
  23. package/package/components/dialog/dialog.svelte +60 -105
  24. package/package/components/dialog/dialog.svelte.d.ts +19 -86
  25. package/package/components/dialog/prompt-dialog.svelte +32 -61
  26. package/package/components/dialog/prompt-dialog.svelte.d.ts +53 -65
  27. package/package/components/disclosure/disclosure.svelte +39 -34
  28. package/package/components/disclosure/disclosure.svelte.d.ts +88 -57
  29. package/package/components/divider/divider.svelte +18 -14
  30. package/package/components/divider/divider.svelte.d.ts +48 -26
  31. package/package/components/divider/spacer.svelte +13 -8
  32. package/package/components/divider/spacer.svelte.d.ts +37 -25
  33. package/package/components/drawer/drawer.svelte +63 -76
  34. package/package/components/drawer/drawer.svelte.d.ts +116 -70
  35. package/package/components/grid/grid-body.svelte +15 -10
  36. package/package/components/grid/grid-body.svelte.d.ts +45 -29
  37. package/package/components/grid/grid-cell.svelte +16 -6
  38. package/package/components/grid/grid-cell.svelte.d.ts +38 -28
  39. package/package/components/grid/grid-col-header.svelte +16 -6
  40. package/package/components/grid/grid-col-header.svelte.d.ts +38 -28
  41. package/package/components/grid/grid-foot.svelte +16 -6
  42. package/package/components/grid/grid-foot.svelte.d.ts +38 -28
  43. package/package/components/grid/grid-head.svelte +16 -6
  44. package/package/components/grid/grid-head.svelte.d.ts +38 -28
  45. package/package/components/grid/grid-row-header.svelte +16 -6
  46. package/package/components/grid/grid-row-header.svelte.d.ts +38 -28
  47. package/package/components/grid/grid-row.svelte +19 -23
  48. package/package/components/grid/grid-row.svelte.d.ts +63 -43
  49. package/package/components/grid/grid.svelte +26 -25
  50. package/package/components/grid/grid.svelte.d.ts +71 -37
  51. package/package/components/icon/icon.svelte +14 -9
  52. package/package/components/icon/icon.svelte.d.ts +37 -25
  53. package/package/components/listbox/listbox.svelte +46 -52
  54. package/package/components/listbox/listbox.svelte.d.ts +117 -45
  55. package/package/components/listbox/option-group.svelte +23 -19
  56. package/package/components/listbox/option-group.svelte.d.ts +64 -32
  57. package/package/components/listbox/option.svelte +44 -57
  58. package/package/components/listbox/option.svelte.d.ts +68 -74
  59. package/package/components/menu/menu-button.svelte +42 -63
  60. package/package/components/menu/menu-button.svelte.d.ts +35 -62
  61. package/package/components/menu/menu-item-checkbox.svelte +29 -41
  62. package/package/components/menu/menu-item-checkbox.svelte.d.ts +20 -49
  63. package/package/components/menu/menu-item-group.svelte +22 -19
  64. package/package/components/menu/menu-item-group.svelte.d.ts +56 -32
  65. package/package/components/menu/menu-item-radio.svelte +29 -41
  66. package/package/components/menu/menu-item-radio.svelte.d.ts +20 -49
  67. package/package/components/menu/menu-item.svelte +66 -75
  68. package/package/components/menu/menu-item.svelte.d.ts +19 -68
  69. package/package/components/menu/menu.svelte +25 -22
  70. package/package/components/menu/menu.svelte.d.ts +65 -35
  71. package/package/components/radio/radio-group.svelte +36 -42
  72. package/package/components/radio/radio-group.svelte.d.ts +100 -40
  73. package/package/components/radio/radio.svelte +45 -48
  74. package/package/components/radio/radio.svelte.d.ts +111 -47
  75. package/package/components/select/combobox.svelte +76 -101
  76. package/package/components/select/combobox.svelte.d.ts +19 -54
  77. package/package/components/select/select-tags.svelte +48 -59
  78. package/package/components/select/select-tags.svelte.d.ts +127 -45
  79. package/package/components/select/select.svelte +18 -37
  80. package/package/components/select/select.svelte.d.ts +20 -45
  81. package/package/components/slider/slider.svelte +71 -68
  82. package/package/components/slider/slider.svelte.d.ts +159 -47
  83. package/package/components/switch/switch.svelte +36 -46
  84. package/package/components/switch/switch.svelte.d.ts +98 -42
  85. package/package/components/table/table-body.svelte +15 -11
  86. package/package/components/table/table-body.svelte.d.ts +45 -29
  87. package/package/components/table/table-cell.svelte +16 -6
  88. package/package/components/table/table-cell.svelte.d.ts +38 -28
  89. package/package/components/table/table-col-header.svelte +16 -6
  90. package/package/components/table/table-col-header.svelte.d.ts +38 -28
  91. package/package/components/table/table-foot.svelte +16 -6
  92. package/package/components/table/table-foot.svelte.d.ts +38 -28
  93. package/package/components/table/table-head.svelte +16 -6
  94. package/package/components/table/table-head.svelte.d.ts +38 -28
  95. package/package/components/table/table-row-header.svelte +16 -6
  96. package/package/components/table/table-row-header.svelte.d.ts +38 -28
  97. package/package/components/table/table-row.svelte +16 -6
  98. package/package/components/table/table-row.svelte.d.ts +38 -28
  99. package/package/components/table/table.svelte +16 -6
  100. package/package/components/table/table.svelte.d.ts +38 -28
  101. package/package/components/tabs/tab-box.svelte +16 -9
  102. package/package/components/tabs/tab-box.svelte.d.ts +47 -27
  103. package/package/components/tabs/tab-list.svelte +36 -35
  104. package/package/components/tabs/tab-list.svelte.d.ts +80 -38
  105. package/package/components/tabs/tab-panel.svelte +16 -6
  106. package/package/components/tabs/tab-panel.svelte.d.ts +38 -28
  107. package/package/components/tabs/tab-panels.svelte +16 -6
  108. package/package/components/tabs/tab-panels.svelte.d.ts +38 -26
  109. package/package/components/tabs/tab.svelte +28 -25
  110. package/package/components/tabs/tab.svelte.d.ts +31 -55
  111. package/package/components/text-editor/lexical-root.svelte +38 -32
  112. package/package/components/text-editor/lexical-root.svelte.d.ts +91 -29
  113. package/package/components/text-editor/text-editor.svelte +63 -79
  114. package/package/components/text-editor/text-editor.svelte.d.ts +114 -36
  115. package/package/components/text-editor/toolbar/editor-toolbar.svelte +41 -24
  116. package/package/components/text-editor/toolbar/editor-toolbar.svelte.d.ts +49 -23
  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 +30 -22
  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 +20 -23
  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 +30 -22
  123. package/package/components/text-field/number-input.svelte +63 -81
  124. package/package/components/text-field/number-input.svelte.d.ts +62 -68
  125. package/package/components/text-field/password-input.svelte +38 -57
  126. package/package/components/text-field/password-input.svelte.d.ts +30 -58
  127. package/package/components/text-field/search-bar.svelte +45 -62
  128. package/package/components/text-field/search-bar.svelte.d.ts +42 -87
  129. package/package/components/text-field/text-area.svelte +38 -54
  130. package/package/components/text-field/text-area.svelte.d.ts +116 -50
  131. package/package/components/text-field/text-input.svelte +30 -86
  132. package/package/components/text-field/text-input.svelte.d.ts +20 -105
  133. package/package/components/toast/toast.svelte +36 -30
  134. package/package/components/toast/toast.svelte.d.ts +65 -33
  135. package/package/components/toolbar/toolbar.svelte +25 -25
  136. package/package/components/toolbar/toolbar.svelte.d.ts +72 -34
  137. package/package/components/util/app-shell.svelte +22 -10
  138. package/package/components/util/app-shell.svelte.d.ts +40 -34
  139. package/package/components/util/group.svelte +20 -15
  140. package/package/components/util/group.svelte.d.ts +55 -31
  141. package/package/components/util/modal.svelte +89 -105
  142. package/package/components/util/modal.svelte.d.ts +24 -82
  143. package/package/components/util/placeholder.svelte +21 -0
  144. package/package/components/util/placeholder.svelte.d.ts +34 -0
  145. package/package/components/util/popup.svelte +65 -62
  146. package/package/components/util/popup.svelte.d.ts +104 -82
  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 +16 -23
  152. package/package/components/util/portal.svelte +0 -36
  153. package/package/components/util/portal.svelte.d.ts +0 -32
  154. /package/package/services/{events.d.ts → events.svelte.d.ts} +0 -0
  155. /package/package/services/{events.js → events.svelte.js} +0 -0
  156. /package/package/services/{group.d.ts → group.svelte.d.ts} +0 -0
  157. /package/package/services/{popup.d.ts → popup.svelte.d.ts} +0 -0
@@ -8,41 +8,44 @@
8
8
  import Button from '../button/button.svelte';
9
9
 
10
10
  /**
11
- * The `class` attribute on the `<button>` element.
12
- * @type {string}
11
+ * @typedef {object} Props
12
+ * @property {boolean} [selected] - Whether to select the widget. An alias of the `aria-selected`
13
+ * attribute.
13
14
  */
14
- let className = '';
15
- export { className as class };
16
- /**
17
- * Whether to select the widget. An alias of the `aria-selected` attribute.
18
- * @type {boolean}
19
- */
20
- export let selected = false;
21
- /**
22
- * Whether to hide the widget. An alias of the `aria-hidden` attribute.
23
- * @type {boolean | undefined}
24
- */
25
- export let hidden = undefined;
15
+
26
16
  /**
27
- * Whether to disable the widget. An alias of the `aria-disabled` attribute.
28
- * @type {boolean}
17
+ * @type {import('../../typedefs').ButtonProps & import('../../typedefs').CommonEventHandlers &
18
+ * Props & Record<string, any>}
29
19
  */
30
- export let disabled = false;
20
+ let {
21
+ /* eslint-disable prefer-const */
22
+ class: className,
23
+ hidden = false,
24
+ disabled = false,
25
+ selected = false,
26
+ children: _children,
27
+ startIcon: _startIcon,
28
+ endIcon: _endIcon,
29
+ ...restProps
30
+ /* eslint-enable prefer-const */
31
+ } = $props();
31
32
  </script>
32
33
 
33
34
  <Button
35
+ {...restProps}
34
36
  role="tab"
35
37
  class="sui tab {className}"
36
38
  {hidden}
37
39
  {disabled}
38
40
  aria-selected={selected}
39
- {...$$restProps}
40
- on:focus
41
- on:blur
42
- on:select
43
- on:change
44
41
  >
45
- <slot name="start-icon" slot="start-icon" />
46
- <slot />
47
- <slot name="end-icon" slot="end-icon" />
42
+ {#snippet startIcon()}
43
+ {@render _startIcon?.()}
44
+ {/snippet}
45
+ {#snippet children()}
46
+ {@render _children?.()}
47
+ {/snippet}
48
+ {#snippet endIcon()}
49
+ {@render _endIcon?.()}
50
+ {/snippet}
48
51
  </Button>
@@ -1,64 +1,40 @@
1
- /** @typedef {typeof __propDef.props} TabProps */
2
- /** @typedef {typeof __propDef.events} TabEvents */
3
- /** @typedef {typeof __propDef.slots} TabSlots */
1
+ export default Tab;
2
+ type Tab = SvelteComponent<ButtonProps & KeyboardEventHandlers & MouseEventHandlers & FocusEventHandlers & DragEventHandlers & Props & Record<string, any>, {
3
+ [evt: string]: CustomEvent<any>;
4
+ }, {}> & {
5
+ $$bindings?: "" | undefined;
6
+ };
4
7
  /**
5
8
  * A tab widget.
6
9
  * @see https://w3c.github.io/aria/#tab
7
10
  * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/
8
11
  */
9
- export default class Tab extends SvelteComponent<{
10
- [x: string]: any;
11
- class?: string | undefined;
12
- disabled?: boolean | undefined;
13
- hidden?: boolean | undefined;
12
+ declare const Tab: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").ButtonProps & import("../../typedefs").KeyboardEventHandlers & import("../../typedefs").MouseEventHandlers & import("../../typedefs").FocusEventHandlers & import("../../typedefs").DragEventHandlers & {
13
+ /**
14
+ * - Whether to select the widget. An alias of the `aria-selected`
15
+ * attribute.
16
+ */
14
17
  selected?: boolean | undefined;
15
- }, {
16
- focus: FocusEvent;
17
- blur: FocusEvent;
18
- select: CustomEvent<any>;
19
- change: CustomEvent<any>;
20
- } & {
18
+ } & Record<string, any>, {
21
19
  [evt: string]: CustomEvent<any>;
22
- }, {
23
- 'start-icon': {
24
- slot: string;
25
- };
26
- default: {};
27
- 'end-icon': {
28
- slot: string;
20
+ }, {}, {}, "">;
21
+ type Props = {
22
+ /**
23
+ * - Whether to select the widget. An alias of the `aria-selected`
24
+ * attribute.
25
+ */
26
+ selected?: boolean | undefined;
27
+ };
28
+ 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> {
29
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
30
+ $$bindings?: Bindings;
31
+ } & Exports;
32
+ (internal: unknown, props: Props & {
33
+ $$events?: Events;
34
+ $$slots?: Slots;
35
+ }): Exports & {
36
+ $set?: any;
37
+ $on?: any;
29
38
  };
30
- }> {
39
+ z_$$bindings?: Bindings;
31
40
  }
32
- export type TabProps = typeof __propDef.props;
33
- export type TabEvents = typeof __propDef.events;
34
- export type TabSlots = typeof __propDef.slots;
35
- import { SvelteComponent } from "svelte";
36
- declare const __propDef: {
37
- props: {
38
- [x: string]: any;
39
- class?: string | undefined;
40
- disabled?: boolean | undefined;
41
- hidden?: boolean | undefined;
42
- selected?: boolean | undefined;
43
- };
44
- events: {
45
- focus: FocusEvent;
46
- blur: FocusEvent;
47
- select: CustomEvent<any>;
48
- change: CustomEvent<any>;
49
- } & {
50
- [evt: string]: CustomEvent<any>;
51
- };
52
- slots: {
53
- 'start-icon': {
54
- slot: string;
55
- };
56
- default: {};
57
- 'end-icon': {
58
- slot: string;
59
- };
60
- };
61
- exports?: undefined;
62
- bindings?: undefined;
63
- };
64
- export {};
@@ -2,35 +2,37 @@
2
2
  import { getContext, onMount } from 'svelte';
3
3
 
4
4
  /**
5
- * Whether to hide the widget. An alias of the `aria-hidden` attribute.
6
- * @type {boolean | undefined}
5
+ * @typedef {object} Props
6
+ * @property {string | undefined} [value] - Input value.
7
+ * @property {string} [class] - The `class` attribute on the wrapper element.
8
+ * @property {boolean} [hidden] - Whether to hide the widget.
9
+ * @property {boolean} [disabled] - Whether to disable the widget. An alias of the `aria-disabled`
10
+ * attribute.
11
+ * @property {boolean} [readonly] - Whether to make the widget read-only. An alias of the
12
+ * `aria-readonly` attribute.
13
+ * @property {boolean} [required] - Whether to mark the widget required. An alias of the
14
+ * `aria-required` attribute.
15
+ * @property {boolean} [invalid] - Whether to mark the widget invalid. An alias of the
16
+ * `aria-invalid` attribute.
17
+ * @property {import('svelte').Snippet} [children] - Primary slot content.
7
18
  */
8
- export let hidden = undefined;
9
- /**
10
- * Whether to disable the widget. An alias of the `aria-disabled` attribute.
11
- * @type {boolean}
12
- */
13
- export let disabled = false;
14
- /**
15
- * Whether to disable the widget. An alias of `aria-readonly` attribute.
16
- * @type {boolean}
17
- */
18
- export let readonly = false;
19
- /**
20
- * Whether to mark the widget required. An alias of the `aria-required` attribute.
21
- * @type {boolean}
22
- */
23
- export let required = false;
24
- /**
25
- * Whether to mark the widget invalid. An alias of the `aria-invalid` attribute.
26
- * @type {boolean}
27
- */
28
- export let invalid = false;
19
+
29
20
  /**
30
- * Input value.
31
- * @type {string | undefined}
21
+ * @type {Props & Record<string, any>}
32
22
  */
33
- export let value = undefined;
23
+ let {
24
+ /* eslint-disable prefer-const */
25
+ value = $bindable(),
26
+ class: className,
27
+ hidden = false,
28
+ disabled = false,
29
+ readonly = false,
30
+ required = false,
31
+ invalid = false,
32
+ children,
33
+ ...restProps
34
+ /* eslint-enable prefer-const */
35
+ } = $props();
34
36
 
35
37
  /**
36
38
  * Text editor state.
@@ -43,10 +45,13 @@
43
45
  * Reference to the Lexical editor root element.
44
46
  * @type {HTMLElement | undefined}
45
47
  */
46
- let lexicalRoot = undefined;
48
+ let lexicalRoot = $state();
47
49
 
48
- $: editable = !(disabled || readonly);
49
- $: $editor?.setEditable(editable);
50
+ const editable = $derived(!(disabled || readonly));
51
+
52
+ $effect(() => {
53
+ $editor?.setEditable(editable);
54
+ });
50
55
 
51
56
  /**
52
57
  * Update {@link value} and other state variables whenever the editor content is updated.
@@ -88,14 +93,16 @@
88
93
  };
89
94
  });
90
95
 
91
- $: {
96
+ $effect(() => {
92
97
  if ($editor && lexicalRoot) {
93
98
  $editor.setRootElement(lexicalRoot);
94
99
  }
95
- }
100
+ });
96
101
  </script>
97
102
 
98
103
  <div
104
+ bind:this={lexicalRoot}
105
+ {...restProps}
99
106
  role="textbox"
100
107
  aria-multiline="true"
101
108
  aria-hidden={hidden}
@@ -107,7 +114,6 @@
107
114
  id="{$editorId}-lexical-root"
108
115
  contenteditable={editable}
109
116
  {hidden}
110
- bind:this={lexicalRoot}
111
117
  ></div>
112
118
 
113
119
  <style>.lexical-root {
@@ -1,35 +1,97 @@
1
- /** @typedef {typeof __propDef.props} LexicalRootProps */
2
- /** @typedef {typeof __propDef.events} LexicalRootEvents */
3
- /** @typedef {typeof __propDef.slots} LexicalRootSlots */
4
- export default class LexicalRoot extends SvelteComponent<{
1
+ export default LexicalRoot;
2
+ type LexicalRoot = SvelteComponent<Props & Record<string, any>, {
3
+ [evt: string]: CustomEvent<any>;
4
+ }, {}> & {
5
+ $$bindings?: "value" | undefined;
6
+ };
7
+ declare const LexicalRoot: $$__sveltets_2_IsomorphicComponent<{
8
+ /**
9
+ * - Input value.
10
+ */
11
+ value?: string | undefined;
12
+ /**
13
+ * - The `class` attribute on the wrapper element.
14
+ */
15
+ class?: string | undefined;
16
+ /**
17
+ * - Whether to hide the widget.
18
+ */
19
+ hidden?: boolean | undefined;
20
+ /**
21
+ * - Whether to disable the widget. An alias of the `aria-disabled`
22
+ * attribute.
23
+ */
5
24
  disabled?: boolean | undefined;
6
- invalid?: boolean | undefined;
25
+ /**
26
+ * - Whether to make the widget read-only. An alias of the
27
+ * `aria-readonly` attribute.
28
+ */
29
+ readonly?: boolean | undefined;
30
+ /**
31
+ * - Whether to mark the widget required. An alias of the
32
+ * `aria-required` attribute.
33
+ */
7
34
  required?: boolean | undefined;
35
+ /**
36
+ * - Whether to mark the widget invalid. An alias of the
37
+ * `aria-invalid` attribute.
38
+ */
39
+ invalid?: boolean | undefined;
40
+ /**
41
+ * - Primary slot content.
42
+ */
43
+ children?: import("svelte").Snippet<[]> | undefined;
44
+ } & Record<string, any>, {
45
+ [evt: string]: CustomEvent<any>;
46
+ }, {}, {}, "value">;
47
+ type Props = {
48
+ /**
49
+ * - Input value.
50
+ */
8
51
  value?: string | undefined;
52
+ /**
53
+ * - The `class` attribute on the wrapper element.
54
+ */
55
+ class?: string | undefined;
56
+ /**
57
+ * - Whether to hide the widget.
58
+ */
9
59
  hidden?: boolean | undefined;
60
+ /**
61
+ * - Whether to disable the widget. An alias of the `aria-disabled`
62
+ * attribute.
63
+ */
64
+ disabled?: boolean | undefined;
65
+ /**
66
+ * - Whether to make the widget read-only. An alias of the
67
+ * `aria-readonly` attribute.
68
+ */
10
69
  readonly?: boolean | undefined;
11
- }, {
12
- [evt: string]: CustomEvent<any>;
13
- }, {}> {
14
- }
15
- export type LexicalRootProps = typeof __propDef.props;
16
- export type LexicalRootEvents = typeof __propDef.events;
17
- export type LexicalRootSlots = typeof __propDef.slots;
18
- import { SvelteComponent } from "svelte";
19
- declare const __propDef: {
20
- props: {
21
- disabled?: boolean | undefined;
22
- invalid?: boolean | undefined;
23
- required?: boolean | undefined;
24
- value?: string | undefined;
25
- hidden?: boolean | undefined;
26
- readonly?: boolean | undefined;
27
- };
28
- events: {
29
- [evt: string]: CustomEvent<any>;
30
- };
31
- slots: {};
32
- exports?: undefined;
33
- bindings?: undefined;
70
+ /**
71
+ * - Whether to mark the widget required. An alias of the
72
+ * `aria-required` attribute.
73
+ */
74
+ required?: boolean | undefined;
75
+ /**
76
+ * - Whether to mark the widget invalid. An alias of the
77
+ * `aria-invalid` attribute.
78
+ */
79
+ invalid?: boolean | undefined;
80
+ /**
81
+ * - Primary slot content.
82
+ */
83
+ children?: import("svelte").Snippet<[]> | undefined;
34
84
  };
35
- export {};
85
+ 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
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
87
+ $$bindings?: Bindings;
88
+ } & Exports;
89
+ (internal: unknown, props: Props & {
90
+ $$events?: Events;
91
+ $$slots?: Slots;
92
+ }): Exports & {
93
+ $set?: any;
94
+ $on?: any;
95
+ };
96
+ z_$$bindings?: Bindings;
97
+ }
@@ -4,7 +4,7 @@
4
4
  -->
5
5
  <script>
6
6
  import { generateElementId } from '@sveltia/utils/element';
7
- import { onMount, setContext } from 'svelte';
7
+ import { onMount, setContext, untrack } from 'svelte';
8
8
  import { _ } from 'svelte-i18n';
9
9
  import { writable } from 'svelte/store';
10
10
  import { blockButtonTypes, inlineButtonTypes } from '.';
@@ -16,51 +16,43 @@
16
16
  import EditorToolbar from './toolbar/editor-toolbar.svelte';
17
17
 
18
18
  /**
19
- * Make the text input container flexible.
20
- * @type {boolean}
19
+ * @typedef {object} Props
20
+ * @property {string | undefined} [value] - Input value.
21
+ * @property {boolean} [flex] - Make the text input container flexible.
22
+ * @property {import('../../typedefs').TextEditorMode[]} [modes] - Enabled modes.
23
+ * @property {(import('../../typedefs').TextEditorBlockType |
24
+ * import('../../typedefs').TextEditorInlineType)[]} [buttons] - Enabled buttons.
25
+ * @property {string} [class] - The `class` attribute on the wrapper element.
26
+ * @property {boolean} [hidden] - Whether to hide the widget.
27
+ * @property {boolean} [disabled] - Whether to disable the widget. An alias of the `aria-disabled`
28
+ * attribute.
29
+ * @property {boolean} [readonly] - Whether to make the widget read-only. An alias of the
30
+ * `aria-readonly` attribute.
31
+ * @property {boolean} [required] - Whether to mark the widget required. An alias of the
32
+ * `aria-required` attribute.
33
+ * @property {boolean} [invalid] - Whether to mark the widget invalid. An alias of the
34
+ * `aria-invalid` attribute.
35
+ * @property {import('svelte').Snippet} [children] - Primary slot content.
21
36
  */
22
- export let flex = 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
- * Whether to disable the widget. An alias of `aria-readonly` attribute.
35
- * @type {boolean}
36
- */
37
- export let readonly = false;
38
- /**
39
- * Whether to mark the widget required. An alias of the `aria-required` attribute.
40
- * @type {boolean}
41
- */
42
- export let required = false;
43
- /**
44
- * Whether to mark the widget invalid. An alias of the `aria-invalid` attribute.
45
- * @type {boolean}
46
- */
47
- export let invalid = false;
48
- /**
49
- * Input value.
50
- * @type {string | undefined}
51
- */
52
- export let value = undefined;
53
- /**
54
- * Enabled modes.
55
- * @type {import('../../typedefs').TextEditorMode[]}
56
- */
57
- export let modes = ['rich-text', 'plain-text'];
37
+
58
38
  /**
59
- * Enabled buttons.
60
- * @type {(import('../../typedefs').TextEditorBlockType |
61
- * import('../../typedefs').TextEditorInlineType)[]}
39
+ * @type {Props & Record<string, any>}
62
40
  */
63
- export let buttons = [...inlineButtonTypes, ...blockButtonTypes];
41
+ let {
42
+ /* eslint-disable prefer-const */
43
+ value = $bindable(''),
44
+ flex = false,
45
+ modes = ['rich-text', 'plain-text'],
46
+ buttons = [...inlineButtonTypes, ...blockButtonTypes],
47
+ hidden = false,
48
+ disabled = false,
49
+ readonly = false,
50
+ required = false,
51
+ invalid = false,
52
+ children,
53
+ ...restProps
54
+ /* eslint-enable prefer-const */
55
+ } = $props();
64
56
 
65
57
  /** @type {import('svelte/store').Writable<import('lexical').LexicalEditor | undefined>} */
66
58
  const editor = writable();
@@ -69,8 +61,8 @@
69
61
  const editorId = writable(generateElementId('editor'));
70
62
  const useRichText = writable(modes[0] === 'rich-text');
71
63
  const hasConverterError = writable(false);
72
- let inputValue = '';
73
- let showConverterError = false;
64
+ let inputValue = $state('');
65
+ let showConverterError = $state(false);
74
66
 
75
67
  /**
76
68
  * Convert the Markdown {@link inputValue} to Lexical nodes. Disable the rich text mode and
@@ -94,54 +86,46 @@
94
86
  }
95
87
  };
96
88
 
97
- /**
98
- * Update {@link inputValue} based on {@link value}.
99
- */
100
- const setInputValue = () => {
89
+ $effect(() => {
90
+ if (!$editor) {
91
+ return;
92
+ }
93
+
101
94
  const newValue = value;
102
95
 
103
96
  // Avoid a cycle dependency & infinite loop
104
- if (inputValue !== newValue) {
105
- inputValue = newValue ?? '';
97
+ untrack(() => {
98
+ if (inputValue !== newValue) {
99
+ inputValue = newValue ?? '';
106
100
 
107
- if ($useRichText) {
108
- convertMarkdown();
101
+ if ($useRichText) {
102
+ convertMarkdown();
103
+ }
109
104
  }
105
+ });
106
+ });
107
+
108
+ $effect(() => {
109
+ if (!$editor) {
110
+ return;
110
111
  }
111
- };
112
112
 
113
- /**
114
- * Update {@link value} based on {@link inputValue}.
115
- */
116
- const setCurrentValue = () => {
117
113
  const newValue = inputValue;
118
114
 
119
115
  // Avoid a cycle dependency & infinite loop
120
- if (value !== newValue) {
121
- value = newValue;
122
- }
123
- };
124
-
125
- $: {
126
- if ($editor) {
127
- void value;
128
- setInputValue();
129
- }
130
- }
131
-
132
- $: {
133
- if ($editor) {
134
- void inputValue;
135
- setCurrentValue();
136
- }
137
- }
116
+ untrack(() => {
117
+ if (value !== newValue) {
118
+ value = newValue;
119
+ }
120
+ });
121
+ });
138
122
 
139
- $: {
123
+ $effect(() => {
140
124
  if ($hasConverterError) {
141
125
  $useRichText = false;
142
126
  showConverterError = true;
143
127
  }
144
- }
128
+ });
145
129
 
146
130
  // The editor has to be initialized in the browser
147
131
  onMount(() => {
@@ -164,7 +148,7 @@
164
148
  );
165
149
  </script>
166
150
 
167
- <div role="none" class="sui text-editor" hidden={hidden || undefined} {...$$restProps}>
151
+ <div {...restProps} role="none" class="sui text-editor" {hidden}>
168
152
  <EditorToolbar {disabled} {readonly} />
169
153
  <LexicalRoot
170
154
  bind:value={inputValue}