@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.
- package/package/components/alert/alert.svelte +22 -7
- package/package/components/alert/alert.svelte.d.ts +47 -31
- package/package/components/button/button-group.svelte +16 -6
- package/package/components/button/button-group.svelte.d.ts +38 -28
- package/package/components/button/button.svelte +41 -136
- package/package/components/button/button.svelte.d.ts +20 -162
- package/package/components/button/select-button-group.svelte +31 -37
- package/package/components/button/select-button-group.svelte.d.ts +91 -39
- package/package/components/button/select-button.svelte +19 -62
- package/package/components/button/select-button.svelte.d.ts +31 -65
- package/package/components/button/split-button.svelte +37 -47
- package/package/components/button/split-button.svelte.d.ts +54 -60
- package/package/components/calendar/calendar.svelte +80 -55
- package/package/components/calendar/calendar.svelte.d.ts +30 -26
- package/package/components/checkbox/checkbox-group.svelte +23 -20
- package/package/components/checkbox/checkbox-group.svelte.d.ts +64 -32
- package/package/components/checkbox/checkbox.svelte +57 -67
- package/package/components/checkbox/checkbox.svelte.d.ts +81 -53
- package/package/components/dialog/alert-dialog.svelte +9 -36
- package/package/components/dialog/alert-dialog.svelte.d.ts +20 -49
- package/package/components/dialog/confirmation-dialog.svelte +9 -41
- package/package/components/dialog/confirmation-dialog.svelte.d.ts +20 -51
- package/package/components/dialog/dialog.svelte +60 -105
- package/package/components/dialog/dialog.svelte.d.ts +19 -86
- package/package/components/dialog/prompt-dialog.svelte +32 -61
- package/package/components/dialog/prompt-dialog.svelte.d.ts +53 -65
- package/package/components/disclosure/disclosure.svelte +39 -34
- package/package/components/disclosure/disclosure.svelte.d.ts +88 -57
- package/package/components/divider/divider.svelte +18 -14
- package/package/components/divider/divider.svelte.d.ts +48 -26
- package/package/components/divider/spacer.svelte +13 -8
- package/package/components/divider/spacer.svelte.d.ts +37 -25
- package/package/components/drawer/drawer.svelte +63 -76
- package/package/components/drawer/drawer.svelte.d.ts +116 -70
- package/package/components/grid/grid-body.svelte +15 -10
- package/package/components/grid/grid-body.svelte.d.ts +45 -29
- package/package/components/grid/grid-cell.svelte +16 -6
- package/package/components/grid/grid-cell.svelte.d.ts +38 -28
- package/package/components/grid/grid-col-header.svelte +16 -6
- package/package/components/grid/grid-col-header.svelte.d.ts +38 -28
- package/package/components/grid/grid-foot.svelte +16 -6
- package/package/components/grid/grid-foot.svelte.d.ts +38 -28
- package/package/components/grid/grid-head.svelte +16 -6
- package/package/components/grid/grid-head.svelte.d.ts +38 -28
- package/package/components/grid/grid-row-header.svelte +16 -6
- package/package/components/grid/grid-row-header.svelte.d.ts +38 -28
- package/package/components/grid/grid-row.svelte +19 -23
- package/package/components/grid/grid-row.svelte.d.ts +63 -43
- package/package/components/grid/grid.svelte +26 -25
- package/package/components/grid/grid.svelte.d.ts +71 -37
- package/package/components/icon/icon.svelte +14 -9
- package/package/components/icon/icon.svelte.d.ts +37 -25
- package/package/components/listbox/listbox.svelte +46 -52
- package/package/components/listbox/listbox.svelte.d.ts +117 -45
- package/package/components/listbox/option-group.svelte +23 -19
- package/package/components/listbox/option-group.svelte.d.ts +64 -32
- package/package/components/listbox/option.svelte +44 -57
- package/package/components/listbox/option.svelte.d.ts +68 -74
- package/package/components/menu/menu-button.svelte +42 -63
- package/package/components/menu/menu-button.svelte.d.ts +35 -62
- package/package/components/menu/menu-item-checkbox.svelte +29 -41
- package/package/components/menu/menu-item-checkbox.svelte.d.ts +20 -49
- package/package/components/menu/menu-item-group.svelte +22 -19
- package/package/components/menu/menu-item-group.svelte.d.ts +56 -32
- package/package/components/menu/menu-item-radio.svelte +29 -41
- package/package/components/menu/menu-item-radio.svelte.d.ts +20 -49
- package/package/components/menu/menu-item.svelte +66 -75
- package/package/components/menu/menu-item.svelte.d.ts +19 -68
- package/package/components/menu/menu.svelte +25 -22
- package/package/components/menu/menu.svelte.d.ts +65 -35
- package/package/components/radio/radio-group.svelte +36 -42
- package/package/components/radio/radio-group.svelte.d.ts +100 -40
- package/package/components/radio/radio.svelte +45 -48
- package/package/components/radio/radio.svelte.d.ts +111 -47
- package/package/components/select/combobox.svelte +76 -101
- package/package/components/select/combobox.svelte.d.ts +19 -54
- package/package/components/select/select-tags.svelte +48 -59
- package/package/components/select/select-tags.svelte.d.ts +127 -45
- package/package/components/select/select.svelte +18 -37
- package/package/components/select/select.svelte.d.ts +20 -45
- package/package/components/slider/slider.svelte +71 -68
- package/package/components/slider/slider.svelte.d.ts +159 -47
- package/package/components/switch/switch.svelte +36 -46
- package/package/components/switch/switch.svelte.d.ts +98 -42
- package/package/components/table/table-body.svelte +15 -11
- package/package/components/table/table-body.svelte.d.ts +45 -29
- package/package/components/table/table-cell.svelte +16 -6
- package/package/components/table/table-cell.svelte.d.ts +38 -28
- package/package/components/table/table-col-header.svelte +16 -6
- package/package/components/table/table-col-header.svelte.d.ts +38 -28
- package/package/components/table/table-foot.svelte +16 -6
- package/package/components/table/table-foot.svelte.d.ts +38 -28
- package/package/components/table/table-head.svelte +16 -6
- package/package/components/table/table-head.svelte.d.ts +38 -28
- package/package/components/table/table-row-header.svelte +16 -6
- package/package/components/table/table-row-header.svelte.d.ts +38 -28
- package/package/components/table/table-row.svelte +16 -6
- package/package/components/table/table-row.svelte.d.ts +38 -28
- package/package/components/table/table.svelte +16 -6
- package/package/components/table/table.svelte.d.ts +38 -28
- package/package/components/tabs/tab-box.svelte +16 -9
- package/package/components/tabs/tab-box.svelte.d.ts +47 -27
- package/package/components/tabs/tab-list.svelte +36 -35
- package/package/components/tabs/tab-list.svelte.d.ts +80 -38
- package/package/components/tabs/tab-panel.svelte +16 -6
- package/package/components/tabs/tab-panel.svelte.d.ts +38 -28
- package/package/components/tabs/tab-panels.svelte +16 -6
- package/package/components/tabs/tab-panels.svelte.d.ts +38 -26
- package/package/components/tabs/tab.svelte +28 -25
- package/package/components/tabs/tab.svelte.d.ts +31 -55
- package/package/components/text-editor/lexical-root.svelte +38 -32
- package/package/components/text-editor/lexical-root.svelte.d.ts +91 -29
- package/package/components/text-editor/text-editor.svelte +63 -79
- package/package/components/text-editor/text-editor.svelte.d.ts +114 -36
- package/package/components/text-editor/toolbar/editor-toolbar.svelte +41 -24
- package/package/components/text-editor/toolbar/editor-toolbar.svelte.d.ts +49 -23
- package/package/components/text-editor/toolbar/format-text-button.svelte +15 -5
- package/package/components/text-editor/toolbar/format-text-button.svelte.d.ts +30 -22
- package/package/components/text-editor/toolbar/insert-link-button.svelte +18 -16
- package/package/components/text-editor/toolbar/insert-link-button.svelte.d.ts +20 -23
- package/package/components/text-editor/toolbar/toggle-block-menu-item.svelte +19 -7
- package/package/components/text-editor/toolbar/toggle-block-menu-item.svelte.d.ts +30 -22
- package/package/components/text-field/number-input.svelte +63 -81
- package/package/components/text-field/number-input.svelte.d.ts +62 -68
- package/package/components/text-field/password-input.svelte +38 -57
- package/package/components/text-field/password-input.svelte.d.ts +30 -58
- package/package/components/text-field/search-bar.svelte +45 -62
- package/package/components/text-field/search-bar.svelte.d.ts +42 -87
- package/package/components/text-field/text-area.svelte +38 -54
- package/package/components/text-field/text-area.svelte.d.ts +116 -50
- package/package/components/text-field/text-input.svelte +30 -86
- package/package/components/text-field/text-input.svelte.d.ts +20 -105
- package/package/components/toast/toast.svelte +36 -30
- package/package/components/toast/toast.svelte.d.ts +65 -33
- package/package/components/toolbar/toolbar.svelte +25 -25
- package/package/components/toolbar/toolbar.svelte.d.ts +72 -34
- package/package/components/util/app-shell.svelte +22 -10
- package/package/components/util/app-shell.svelte.d.ts +40 -34
- package/package/components/util/group.svelte +20 -15
- package/package/components/util/group.svelte.d.ts +55 -31
- package/package/components/util/modal.svelte +89 -105
- package/package/components/util/modal.svelte.d.ts +24 -82
- package/package/components/util/placeholder.svelte +21 -0
- package/package/components/util/placeholder.svelte.d.ts +34 -0
- package/package/components/util/popup.svelte +65 -62
- package/package/components/util/popup.svelte.d.ts +104 -82
- package/package/services/{group.js → group.svelte.js} +11 -12
- package/package/services/{popup.js → popup.svelte.js} +6 -5
- package/package/typedefs.d.ts +545 -0
- package/package/typedefs.js +202 -0
- package/package.json +16 -23
- package/package/components/util/portal.svelte +0 -36
- package/package/components/util/portal.svelte.d.ts +0 -32
- /package/package/services/{events.d.ts → events.svelte.d.ts} +0 -0
- /package/package/services/{events.js → events.svelte.js} +0 -0
- /package/package/services/{group.d.ts → group.svelte.d.ts} +0 -0
- /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
|
-
*
|
|
12
|
-
* @
|
|
11
|
+
* @typedef {object} Props
|
|
12
|
+
* @property {boolean} [selected] - Whether to select the widget. An alias of the `aria-selected`
|
|
13
|
+
* attribute.
|
|
13
14
|
*/
|
|
14
|
-
|
|
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
|
-
*
|
|
28
|
-
*
|
|
17
|
+
* @type {import('../../typedefs').ButtonProps & import('../../typedefs').CommonEventHandlers &
|
|
18
|
+
* Props & Record<string, any>}
|
|
29
19
|
*/
|
|
30
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
*
|
|
6
|
-
* @
|
|
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
|
-
|
|
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
|
-
*
|
|
31
|
-
* @type {string | undefined}
|
|
21
|
+
* @type {Props & Record<string, any>}
|
|
32
22
|
*/
|
|
33
|
-
|
|
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 =
|
|
48
|
+
let lexicalRoot = $state();
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
20
|
-
* @
|
|
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
|
-
|
|
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
|
-
*
|
|
60
|
-
* @type {(import('../../typedefs').TextEditorBlockType |
|
|
61
|
-
* import('../../typedefs').TextEditorInlineType)[]}
|
|
39
|
+
* @type {Props & Record<string, any>}
|
|
62
40
|
*/
|
|
63
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
105
|
-
inputValue
|
|
97
|
+
untrack(() => {
|
|
98
|
+
if (inputValue !== newValue) {
|
|
99
|
+
inputValue = newValue ?? '';
|
|
106
100
|
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
121
|
-
value
|
|
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"
|
|
151
|
+
<div {...restProps} role="none" class="sui text-editor" {hidden}>
|
|
168
152
|
<EditorToolbar {disabled} {readonly} />
|
|
169
153
|
<LexicalRoot
|
|
170
154
|
bind:value={inputValue}
|