@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
|
@@ -1,85 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
[x: string]: any;
|
|
7
|
-
class?: string | undefined;
|
|
8
|
-
close?: ((returnValue: string) => void) | undefined;
|
|
9
|
-
dialog?: HTMLDialogElement | undefined;
|
|
10
|
-
role?: "dialog" | "none" | "alertdialog" | undefined;
|
|
11
|
-
open?: boolean | undefined;
|
|
12
|
-
showBackdrop?: boolean | undefined;
|
|
13
|
-
lightDismiss?: boolean | undefined;
|
|
14
|
-
escapeDismiss?: boolean | undefined;
|
|
15
|
-
keepContent?: boolean | undefined;
|
|
16
|
-
}, {
|
|
17
|
-
opening: CustomEvent<any>;
|
|
18
|
-
open: CustomEvent<any>;
|
|
19
|
-
closing: CustomEvent<any>;
|
|
20
|
-
close: CustomEvent<any>;
|
|
1
|
+
export default Modal;
|
|
2
|
+
type Modal = SvelteComponent<ModalProps & Record<string, any>, {
|
|
3
|
+
[evt: string]: CustomEvent<any>;
|
|
4
|
+
}, {}> & {
|
|
5
|
+
$$bindings?: "dialog" | "open" | undefined;
|
|
21
6
|
} & {
|
|
7
|
+
close: (returnValue: string) => void;
|
|
8
|
+
};
|
|
9
|
+
/** A generic modal top-layer helper based on the HTML `<dialog>` element. */
|
|
10
|
+
declare const Modal: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").ModalProps & Record<string, any>, {
|
|
22
11
|
[evt: string]: CustomEvent<any>;
|
|
23
|
-
}, {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}> {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
get open(): boolean | undefined;
|
|
37
|
-
/**accessor*/
|
|
38
|
-
set showBackdrop(_: boolean | undefined);
|
|
39
|
-
get showBackdrop(): boolean | undefined;
|
|
40
|
-
/**accessor*/
|
|
41
|
-
set lightDismiss(_: boolean | undefined);
|
|
42
|
-
get lightDismiss(): boolean | undefined;
|
|
43
|
-
/**accessor*/
|
|
44
|
-
set escapeDismiss(_: boolean | undefined);
|
|
45
|
-
get escapeDismiss(): boolean | undefined;
|
|
46
|
-
/**accessor*/
|
|
47
|
-
set keepContent(_: boolean | undefined);
|
|
48
|
-
get keepContent(): boolean | undefined;
|
|
49
|
-
/**accessor*/
|
|
50
|
-
set dialog(_: HTMLDialogElement | undefined);
|
|
51
|
-
get dialog(): HTMLDialogElement | undefined;
|
|
52
|
-
}
|
|
53
|
-
export type ModalProps = typeof __propDef.props;
|
|
54
|
-
export type ModalEvents = typeof __propDef.events;
|
|
55
|
-
export type ModalSlots = typeof __propDef.slots;
|
|
56
|
-
import { SvelteComponent } from "svelte";
|
|
57
|
-
declare const __propDef: {
|
|
58
|
-
props: {
|
|
59
|
-
[x: string]: any;
|
|
60
|
-
class?: string | undefined;
|
|
61
|
-
close?: ((returnValue: string) => void) | undefined;
|
|
62
|
-
dialog?: HTMLDialogElement | undefined;
|
|
63
|
-
role?: "dialog" | "none" | "alertdialog" | undefined;
|
|
64
|
-
open?: boolean | undefined;
|
|
65
|
-
showBackdrop?: boolean | undefined;
|
|
66
|
-
lightDismiss?: boolean | undefined;
|
|
67
|
-
escapeDismiss?: boolean | undefined;
|
|
68
|
-
keepContent?: boolean | undefined;
|
|
12
|
+
}, {}, {
|
|
13
|
+
close: (returnValue: string) => void;
|
|
14
|
+
}, "dialog" | "open">;
|
|
15
|
+
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> {
|
|
16
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
17
|
+
$$bindings?: Bindings;
|
|
18
|
+
} & Exports;
|
|
19
|
+
(internal: unknown, props: Props & {
|
|
20
|
+
$$events?: Events;
|
|
21
|
+
$$slots?: Slots;
|
|
22
|
+
}): Exports & {
|
|
23
|
+
$set?: any;
|
|
24
|
+
$on?: any;
|
|
69
25
|
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
open: CustomEvent<any>;
|
|
73
|
-
closing: CustomEvent<any>;
|
|
74
|
-
close: CustomEvent<any>;
|
|
75
|
-
} & {
|
|
76
|
-
[evt: string]: CustomEvent<any>;
|
|
77
|
-
};
|
|
78
|
-
slots: {
|
|
79
|
-
'extra-content': {};
|
|
80
|
-
default: {};
|
|
81
|
-
};
|
|
82
|
-
exports?: undefined;
|
|
83
|
-
bindings?: undefined;
|
|
84
|
-
};
|
|
85
|
-
export {};
|
|
26
|
+
z_$$bindings?: Bindings;
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
@see https://github.com/sveltejs/svelte/issues/3088
|
|
4
|
+
-->
|
|
5
|
+
<script>
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {object} Props
|
|
8
|
+
* @property {import('svelte').Snippet} [children] - Primary slot content.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @type {Props & Record<string, any>}
|
|
13
|
+
*/
|
|
14
|
+
let {
|
|
15
|
+
/* eslint-disable prefer-const */
|
|
16
|
+
children,
|
|
17
|
+
/* eslint-enable prefer-const */
|
|
18
|
+
} = $props();
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
{@render children?.()}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export default Placeholder;
|
|
2
|
+
type Placeholder = SvelteComponent<Props & Record<string, any>, {
|
|
3
|
+
[evt: string]: CustomEvent<any>;
|
|
4
|
+
}, {}> & {
|
|
5
|
+
$$bindings?: "" | undefined;
|
|
6
|
+
};
|
|
7
|
+
/** @see https://github.com/sveltejs/svelte/issues/3088 */
|
|
8
|
+
declare const Placeholder: $$__sveltets_2_IsomorphicComponent<{
|
|
9
|
+
/**
|
|
10
|
+
* - Primary slot content.
|
|
11
|
+
*/
|
|
12
|
+
children?: import("svelte").Snippet<[]> | undefined;
|
|
13
|
+
} & Record<string, any>, {
|
|
14
|
+
[evt: string]: CustomEvent<any>;
|
|
15
|
+
}, {}, {}, "">;
|
|
16
|
+
type Props = {
|
|
17
|
+
/**
|
|
18
|
+
* - Primary slot content.
|
|
19
|
+
*/
|
|
20
|
+
children?: import("svelte").Snippet<[]> | undefined;
|
|
21
|
+
};
|
|
22
|
+
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> {
|
|
23
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
24
|
+
$$bindings?: Bindings;
|
|
25
|
+
} & Exports;
|
|
26
|
+
(internal: unknown, props: Props & {
|
|
27
|
+
$$events?: Events;
|
|
28
|
+
$$slots?: Slots;
|
|
29
|
+
}): Exports & {
|
|
30
|
+
$set?: any;
|
|
31
|
+
$on?: any;
|
|
32
|
+
};
|
|
33
|
+
z_$$bindings?: Bindings;
|
|
34
|
+
}
|
|
@@ -2,75 +2,70 @@
|
|
|
2
2
|
@component
|
|
3
3
|
Generic popup helper.
|
|
4
4
|
-->
|
|
5
|
-
<svelte:options accessors={true} />
|
|
6
|
-
|
|
7
5
|
<script>
|
|
8
6
|
import { sleep } from '@sveltia/utils/misc';
|
|
9
7
|
import { onMount } from 'svelte';
|
|
10
8
|
import { writable } from 'svelte/store';
|
|
11
|
-
import { activatePopup } from '../../services/popup';
|
|
9
|
+
import { activatePopup } from '../../services/popup.svelte.js';
|
|
12
10
|
import Modal from './modal.svelte';
|
|
13
11
|
|
|
14
12
|
/**
|
|
15
|
-
*
|
|
16
|
-
* @
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
* @
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
* @
|
|
28
|
-
|
|
29
|
-
export let showBackdrop = false;
|
|
30
|
-
/**
|
|
31
|
-
* A reference to the anchor element that opens the popup. Typically a `<button>`.
|
|
32
|
-
* @type {HTMLElement | undefined}
|
|
33
|
-
*/
|
|
34
|
-
export let anchor;
|
|
35
|
-
/**
|
|
36
|
-
* A reference to the content element.
|
|
37
|
-
* @type {HTMLElement | undefined}
|
|
38
|
-
*/
|
|
39
|
-
export let content = undefined;
|
|
40
|
-
/**
|
|
41
|
-
* Where to show the popup.
|
|
42
|
-
* @type {import('../../typedefs').PopupPosition}
|
|
13
|
+
* @typedef {object} Props
|
|
14
|
+
* @property {string} [class] - The `class` attribute on the content element.
|
|
15
|
+
* @property {boolean} [open] - Whether to open the popup.
|
|
16
|
+
* @property {HTMLElement} anchor - A reference to the anchor element that opens the popup.
|
|
17
|
+
* Typically a `<button>`.
|
|
18
|
+
* @property {HTMLElement | undefined} [content] - A reference to the content element.
|
|
19
|
+
* @property {import('../../typedefs').PopupPosition} [position] - Where to show the popup.
|
|
20
|
+
* @property {HTMLElement | undefined} [positionBaseElement] - The base element of
|
|
21
|
+
* {@link position}. If omitted, this will be {@link anchor}.
|
|
22
|
+
* @property {boolean} [touchOptimized] - Whether to show the popup at the center of the screen on
|
|
23
|
+
* mobile/tablet and ignore the defined dropdown `position`.
|
|
24
|
+
* @property {import('svelte').Snippet} [children] - Primary slot content.
|
|
25
|
+
* @property {import('svelte').Snippet} [extraContent] - Extra slot content.
|
|
26
|
+
* @property {(event: CustomEvent) => void} [onOpen] - Custom `Open` event handler.
|
|
43
27
|
*/
|
|
44
|
-
|
|
28
|
+
|
|
45
29
|
/**
|
|
46
|
-
*
|
|
47
|
-
* @type {HTMLElement | undefined}
|
|
30
|
+
* @type {import('../../typedefs').ModalProps & Props & Record<string, any>}
|
|
48
31
|
*/
|
|
49
|
-
|
|
32
|
+
let {
|
|
33
|
+
/* eslint-disable prefer-const */
|
|
34
|
+
open = $bindable(false),
|
|
35
|
+
content = $bindable(undefined),
|
|
36
|
+
class: className,
|
|
37
|
+
showBackdrop = false,
|
|
38
|
+
anchor,
|
|
39
|
+
position = 'bottom-left',
|
|
40
|
+
positionBaseElement = undefined,
|
|
41
|
+
touchOptimized = false,
|
|
42
|
+
children,
|
|
43
|
+
onOpen,
|
|
44
|
+
...restProps
|
|
45
|
+
/* eslint-enable prefer-const */
|
|
46
|
+
} = $props();
|
|
47
|
+
|
|
50
48
|
/**
|
|
51
|
-
* Whether to show the popup at the center of the screen on mobile/tablet and ignore the defined
|
|
52
|
-
* dropdown `position`.
|
|
53
49
|
* @type {boolean}
|
|
54
50
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
let initialized = $state(false);
|
|
57
52
|
/**
|
|
58
|
-
* A reference to the
|
|
59
|
-
* @type {
|
|
53
|
+
* A reference to the `<dialog>` element.
|
|
54
|
+
* @type {HTMLDialogElement | undefined}
|
|
60
55
|
*/
|
|
61
|
-
let
|
|
56
|
+
let dialogElement = $state();
|
|
62
57
|
/**
|
|
63
58
|
* Whether the touch is enabled on the user device.
|
|
64
59
|
* @type {boolean}
|
|
65
60
|
*/
|
|
66
|
-
let touchEnabled = false;
|
|
61
|
+
let touchEnabled = $state(false);
|
|
67
62
|
/**
|
|
68
63
|
* The type of the content displayed in the popup, defined with the `aria-haspopup` attribute on
|
|
69
64
|
* the anchor element.
|
|
70
65
|
* @type {string | undefined}
|
|
71
66
|
* @see https://w3c.github.io/aria/#aria-haspopup
|
|
72
67
|
*/
|
|
73
|
-
let contentType;
|
|
68
|
+
let contentType = $state();
|
|
74
69
|
/**
|
|
75
70
|
* Style to be applied to the content.
|
|
76
71
|
* @type {import('svelte/store').Writable<any>}
|
|
@@ -86,17 +81,30 @@
|
|
|
86
81
|
* Initialize the popup.
|
|
87
82
|
*/
|
|
88
83
|
const init = () => {
|
|
89
|
-
|
|
84
|
+
let openStore = writable(false);
|
|
85
|
+
|
|
86
|
+
({ style, open: openStore } = activatePopup(
|
|
87
|
+
anchor,
|
|
88
|
+
dialogElement,
|
|
89
|
+
position,
|
|
90
|
+
positionBaseElement,
|
|
91
|
+
));
|
|
92
|
+
|
|
93
|
+
openStore.subscribe((_open) => {
|
|
94
|
+
open = _open;
|
|
95
|
+
});
|
|
96
|
+
|
|
90
97
|
contentType = anchor?.getAttribute('aria-haspopup') ?? undefined;
|
|
98
|
+
initialized = true;
|
|
91
99
|
};
|
|
92
100
|
|
|
93
|
-
|
|
94
|
-
if (anchor &&
|
|
101
|
+
$effect(() => {
|
|
102
|
+
if (anchor && dialogElement && !initialized) {
|
|
95
103
|
init();
|
|
96
104
|
}
|
|
97
|
-
}
|
|
105
|
+
});
|
|
98
106
|
|
|
99
|
-
|
|
107
|
+
const touch = $derived(touchOptimized && touchEnabled);
|
|
100
108
|
|
|
101
109
|
onMount(() => {
|
|
102
110
|
touchEnabled = globalThis.matchMedia('(pointer: coarse)').matches;
|
|
@@ -104,21 +112,17 @@
|
|
|
104
112
|
</script>
|
|
105
113
|
|
|
106
114
|
<Modal
|
|
115
|
+
{...restProps}
|
|
116
|
+
bind:dialog={dialogElement}
|
|
107
117
|
role="none"
|
|
108
118
|
class="popup"
|
|
109
|
-
bind:open
|
|
119
|
+
bind:open
|
|
110
120
|
showBackdrop={showBackdrop ?? touch}
|
|
111
121
|
lightDismiss={true}
|
|
112
122
|
keepContent={true}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
on:open
|
|
117
|
-
on:ok
|
|
118
|
-
on:cancel
|
|
119
|
-
on:closing
|
|
120
|
-
on:close
|
|
121
|
-
on:open={async () => {
|
|
123
|
+
onOpen={async (event) => {
|
|
124
|
+
onOpen?.(event);
|
|
125
|
+
|
|
122
126
|
await sleep(100);
|
|
123
127
|
|
|
124
128
|
if (!content) {
|
|
@@ -137,8 +141,8 @@
|
|
|
137
141
|
}
|
|
138
142
|
}}
|
|
139
143
|
>
|
|
140
|
-
<slot name="extra-content" slot="extra-content" />
|
|
141
144
|
<div
|
|
145
|
+
bind:this={content}
|
|
142
146
|
role="none"
|
|
143
147
|
class="content {className} {contentType}"
|
|
144
148
|
class:touch
|
|
@@ -148,9 +152,8 @@
|
|
|
148
152
|
style:max-width={$style.maxWidth}
|
|
149
153
|
style:max-height={$style.height}
|
|
150
154
|
style:visibility={$style.inset ? undefined : 'hidden'}
|
|
151
|
-
bind:this={content}
|
|
152
155
|
>
|
|
153
|
-
|
|
156
|
+
{@render children?.()}
|
|
154
157
|
</div>
|
|
155
158
|
</Modal>
|
|
156
159
|
|
|
@@ -1,90 +1,112 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export default Popup;
|
|
2
|
+
type Popup = SvelteComponent<ModalProps & Props & Record<string, any>, {
|
|
3
|
+
[evt: string]: CustomEvent<any>;
|
|
4
|
+
}, {}> & {
|
|
5
|
+
$$bindings?: "open" | "content" | undefined;
|
|
6
|
+
};
|
|
4
7
|
/** Generic popup helper. */
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
declare const Popup: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").ModalProps & {
|
|
9
|
+
/**
|
|
10
|
+
* - The `class` attribute on the content element.
|
|
11
|
+
*/
|
|
8
12
|
class?: string | undefined;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
/**
|
|
14
|
+
* - Whether to open the popup.
|
|
15
|
+
*/
|
|
16
|
+
open?: boolean | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* - A reference to the anchor element that opens the popup.
|
|
19
|
+
* Typically a `<button>`.
|
|
20
|
+
*/
|
|
21
|
+
anchor: HTMLElement;
|
|
22
|
+
/**
|
|
23
|
+
* - A reference to the content element.
|
|
24
|
+
*/
|
|
12
25
|
content?: HTMLElement | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* - Where to show the popup.
|
|
28
|
+
*/
|
|
29
|
+
position?: import("../../typedefs").PopupPosition | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* - The base element of
|
|
32
|
+
* {@link position}. If omitted, this will be {@link anchor}.
|
|
33
|
+
*/
|
|
13
34
|
positionBaseElement?: HTMLElement | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* - Whether to show the popup at the center of the screen on
|
|
37
|
+
* mobile/tablet and ignore the defined dropdown `position`.
|
|
38
|
+
*/
|
|
14
39
|
touchOptimized?: boolean | undefined;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
40
|
+
/**
|
|
41
|
+
* - Primary slot content.
|
|
42
|
+
*/
|
|
43
|
+
children?: import("svelte").Snippet<[]> | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* - Extra slot content.
|
|
46
|
+
*/
|
|
47
|
+
extraContent?: import("svelte").Snippet<[]> | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* - Custom `Open` event handler.
|
|
50
|
+
*/
|
|
51
|
+
onOpen?: ((event: CustomEvent) => void) | undefined;
|
|
52
|
+
} & Record<string, any>, {
|
|
23
53
|
[evt: string]: CustomEvent<any>;
|
|
24
|
-
}, {
|
|
25
|
-
|
|
26
|
-
|
|
54
|
+
}, {}, {}, "open" | "content">;
|
|
55
|
+
type Props = {
|
|
56
|
+
/**
|
|
57
|
+
* - The `class` attribute on the content element.
|
|
58
|
+
*/
|
|
59
|
+
class?: string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* - Whether to open the popup.
|
|
62
|
+
*/
|
|
63
|
+
open?: boolean | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* - A reference to the anchor element that opens the popup.
|
|
66
|
+
* Typically a `<button>`.
|
|
67
|
+
*/
|
|
68
|
+
anchor: HTMLElement;
|
|
69
|
+
/**
|
|
70
|
+
* - A reference to the content element.
|
|
71
|
+
*/
|
|
72
|
+
content?: HTMLElement | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* - Where to show the popup.
|
|
75
|
+
*/
|
|
76
|
+
position?: import("../../typedefs").PopupPosition | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* - The base element of
|
|
79
|
+
* {@link position}. If omitted, this will be {@link anchor}.
|
|
80
|
+
*/
|
|
81
|
+
positionBaseElement?: HTMLElement | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* - Whether to show the popup at the center of the screen on
|
|
84
|
+
* mobile/tablet and ignore the defined dropdown `position`.
|
|
85
|
+
*/
|
|
86
|
+
touchOptimized?: boolean | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* - Primary slot content.
|
|
89
|
+
*/
|
|
90
|
+
children?: import("svelte").Snippet<[]> | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* - Extra slot content.
|
|
93
|
+
*/
|
|
94
|
+
extraContent?: import("svelte").Snippet<[]> | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* - Custom `Open` event handler.
|
|
97
|
+
*/
|
|
98
|
+
onOpen?: ((event: CustomEvent) => void) | undefined;
|
|
99
|
+
};
|
|
100
|
+
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> {
|
|
101
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
102
|
+
$$bindings?: Bindings;
|
|
103
|
+
} & Exports;
|
|
104
|
+
(internal: unknown, props: Props & {
|
|
105
|
+
$$events?: Events;
|
|
106
|
+
$$slots?: Slots;
|
|
107
|
+
}): Exports & {
|
|
108
|
+
$set?: any;
|
|
109
|
+
$on?: any;
|
|
27
110
|
};
|
|
28
|
-
|
|
29
|
-
}> {
|
|
30
|
-
/**accessor*/
|
|
31
|
-
set class(_: string | undefined);
|
|
32
|
-
get class(): string | undefined;
|
|
33
|
-
/**accessor*/
|
|
34
|
-
set open(_: import("svelte/store").Writable<boolean> | undefined);
|
|
35
|
-
get open(): import("svelte/store").Writable<boolean> | undefined;
|
|
36
|
-
/**accessor*/
|
|
37
|
-
set showBackdrop(_: boolean | undefined);
|
|
38
|
-
get showBackdrop(): boolean | undefined;
|
|
39
|
-
/**accessor*/
|
|
40
|
-
set anchor(_: HTMLElement | undefined);
|
|
41
|
-
get anchor(): HTMLElement | undefined;
|
|
42
|
-
/**accessor*/
|
|
43
|
-
set content(_: HTMLElement | undefined);
|
|
44
|
-
get content(): HTMLElement | undefined;
|
|
45
|
-
/**accessor*/
|
|
46
|
-
set position(_: import("../../typedefs").PopupPosition | undefined);
|
|
47
|
-
get position(): import("../../typedefs").PopupPosition | undefined;
|
|
48
|
-
/**accessor*/
|
|
49
|
-
set positionBaseElement(_: HTMLElement | undefined);
|
|
50
|
-
get positionBaseElement(): HTMLElement | undefined;
|
|
51
|
-
/**accessor*/
|
|
52
|
-
set touchOptimized(_: boolean | undefined);
|
|
53
|
-
get touchOptimized(): boolean | undefined;
|
|
111
|
+
z_$$bindings?: Bindings;
|
|
54
112
|
}
|
|
55
|
-
export type PopupProps = typeof __propDef.props;
|
|
56
|
-
export type PopupEvents = typeof __propDef.events;
|
|
57
|
-
export type PopupSlots = typeof __propDef.slots;
|
|
58
|
-
import { SvelteComponent } from "svelte";
|
|
59
|
-
declare const __propDef: {
|
|
60
|
-
props: {
|
|
61
|
-
[x: string]: any;
|
|
62
|
-
anchor: HTMLElement | undefined;
|
|
63
|
-
class?: string | undefined;
|
|
64
|
-
position?: import("../../typedefs").PopupPosition | undefined;
|
|
65
|
-
open?: import("svelte/store").Writable<boolean> | undefined;
|
|
66
|
-
showBackdrop?: boolean | undefined;
|
|
67
|
-
content?: HTMLElement | undefined;
|
|
68
|
-
positionBaseElement?: HTMLElement | undefined;
|
|
69
|
-
touchOptimized?: boolean | undefined;
|
|
70
|
-
};
|
|
71
|
-
events: {
|
|
72
|
-
opening: CustomEvent<any>;
|
|
73
|
-
open: CustomEvent<any>;
|
|
74
|
-
ok: CustomEvent<any>;
|
|
75
|
-
cancel: CustomEvent<any>;
|
|
76
|
-
closing: CustomEvent<any>;
|
|
77
|
-
close: CustomEvent<any>;
|
|
78
|
-
} & {
|
|
79
|
-
[evt: string]: CustomEvent<any>;
|
|
80
|
-
};
|
|
81
|
-
slots: {
|
|
82
|
-
'extra-content': {
|
|
83
|
-
slot: string;
|
|
84
|
-
};
|
|
85
|
-
default: {};
|
|
86
|
-
};
|
|
87
|
-
exports?: undefined;
|
|
88
|
-
bindings?: undefined;
|
|
89
|
-
};
|
|
90
|
-
export {};
|
|
@@ -67,7 +67,7 @@ class Group {
|
|
|
67
67
|
* @todo Check for added elements probably with `MutationObserver`.
|
|
68
68
|
*/
|
|
69
69
|
constructor(parent, { clickToSelect = true } = {}) {
|
|
70
|
-
parent.dispatchEvent(new CustomEvent('
|
|
70
|
+
parent.dispatchEvent(new CustomEvent('Initializing'));
|
|
71
71
|
|
|
72
72
|
this.parent = parent;
|
|
73
73
|
this.role = /** @type {string} */ (parent.getAttribute('role'));
|
|
@@ -148,7 +148,7 @@ class Group {
|
|
|
148
148
|
this.onKeyDown(event);
|
|
149
149
|
});
|
|
150
150
|
|
|
151
|
-
parent.dispatchEvent(new CustomEvent('
|
|
151
|
+
parent.dispatchEvent(new CustomEvent('Initialized'));
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
/**
|
|
@@ -252,11 +252,11 @@ class Group {
|
|
|
252
252
|
if (multiSelect && isTarget && (selectByClick || selectByKeydown)) {
|
|
253
253
|
element.setAttribute(this.childSelectedAttr, String(!isSelected));
|
|
254
254
|
element.dispatchEvent(
|
|
255
|
-
new CustomEvent('
|
|
255
|
+
new CustomEvent('Change', { detail: { [this.childSelectedProp]: !isSelected } }),
|
|
256
256
|
);
|
|
257
257
|
|
|
258
258
|
if (!isSelected) {
|
|
259
|
-
element.dispatchEvent(new CustomEvent('
|
|
259
|
+
element.dispatchEvent(new CustomEvent('Select'));
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
|
|
@@ -267,11 +267,11 @@ class Group {
|
|
|
267
267
|
) {
|
|
268
268
|
element.setAttribute(this.childSelectedAttr, String(isTarget));
|
|
269
269
|
element.dispatchEvent(
|
|
270
|
-
new CustomEvent('
|
|
270
|
+
new CustomEvent('Change', { detail: { [this.childSelectedProp]: isTarget } }),
|
|
271
271
|
);
|
|
272
272
|
|
|
273
273
|
if (isTarget) {
|
|
274
|
-
element.dispatchEvent(new CustomEvent('
|
|
274
|
+
element.dispatchEvent(new CustomEvent('Select'));
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
|
|
@@ -282,14 +282,14 @@ class Group {
|
|
|
282
282
|
|
|
283
283
|
if (isTarget) {
|
|
284
284
|
element.focus();
|
|
285
|
-
element.dispatchEvent(new CustomEvent('
|
|
285
|
+
element.dispatchEvent(new CustomEvent('Focus'));
|
|
286
286
|
}
|
|
287
287
|
});
|
|
288
288
|
} else {
|
|
289
289
|
element.classList.toggle('focused', isTarget);
|
|
290
290
|
|
|
291
291
|
if (isTarget) {
|
|
292
|
-
element.dispatchEvent(new CustomEvent('
|
|
292
|
+
element.dispatchEvent(new CustomEvent('Focus'));
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
|
|
@@ -326,7 +326,7 @@ class Group {
|
|
|
326
326
|
});
|
|
327
327
|
|
|
328
328
|
this.parent.dispatchEvent(
|
|
329
|
-
new CustomEvent('
|
|
329
|
+
new CustomEvent('Change', {
|
|
330
330
|
detail: {
|
|
331
331
|
value: /** @type {any} */ (newTarget).value,
|
|
332
332
|
name: /** @type {any} */ (newTarget).name,
|
|
@@ -481,14 +481,14 @@ class Group {
|
|
|
481
481
|
|
|
482
482
|
const hidden = !_terms.every((term) => searchValue.includes(term));
|
|
483
483
|
|
|
484
|
-
member.dispatchEvent(new CustomEvent('
|
|
484
|
+
member.dispatchEvent(new CustomEvent('Toggle', { detail: { hidden } }));
|
|
485
485
|
|
|
486
486
|
return hidden;
|
|
487
487
|
})
|
|
488
488
|
.filter((hidden) => !hidden).length;
|
|
489
489
|
|
|
490
490
|
this.parent.dispatchEvent(
|
|
491
|
-
new CustomEvent('
|
|
491
|
+
new CustomEvent('Filter', { detail: { matched, total: this.allMembers.length } }),
|
|
492
492
|
);
|
|
493
493
|
}
|
|
494
494
|
}
|
|
@@ -499,7 +499,6 @@ class Group {
|
|
|
499
499
|
* @param {object} [params] - Action params.
|
|
500
500
|
* @returns {import('svelte/action').ActionReturn} Action.
|
|
501
501
|
*/
|
|
502
|
-
// eslint-disable-next-line no-unused-vars
|
|
503
502
|
export const activateGroup = (parent, params) => {
|
|
504
503
|
const group = new Group(parent, params);
|
|
505
504
|
|