@sveltia/ui 0.16.0 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/alert/alert.svelte +22 -7
- package/package/components/alert/alert.svelte.d.ts +32 -28
- package/package/components/button/button-group.svelte +16 -6
- package/package/components/button/button-group.svelte.d.ts +23 -23
- package/package/components/button/button.svelte +41 -136
- package/package/components/button/button.svelte.d.ts +5 -146
- package/package/components/button/select-button-group.svelte +31 -37
- package/package/components/button/select-button-group.svelte.d.ts +76 -34
- package/package/components/button/select-button.svelte +19 -62
- package/package/components/button/select-button.svelte.d.ts +17 -73
- package/package/components/button/split-button.svelte +37 -47
- package/package/components/button/split-button.svelte.d.ts +40 -47
- package/package/components/calendar/calendar.svelte +80 -55
- package/package/components/calendar/calendar.svelte.d.ts +13 -10
- package/package/components/checkbox/checkbox-group.svelte +23 -20
- package/package/components/checkbox/checkbox-group.svelte.d.ts +49 -27
- package/package/components/checkbox/checkbox.svelte +57 -67
- package/package/components/checkbox/checkbox.svelte.d.ts +67 -55
- package/package/components/dialog/alert-dialog.svelte +9 -36
- package/package/components/dialog/alert-dialog.svelte.d.ts +5 -44
- package/package/components/dialog/confirmation-dialog.svelte +9 -41
- package/package/components/dialog/confirmation-dialog.svelte.d.ts +5 -46
- package/package/components/dialog/dialog.svelte +60 -105
- package/package/components/dialog/dialog.svelte.d.ts +5 -102
- package/package/components/dialog/prompt-dialog.svelte +32 -61
- package/package/components/dialog/prompt-dialog.svelte.d.ts +38 -62
- package/package/components/disclosure/disclosure.svelte +39 -34
- package/package/components/disclosure/disclosure.svelte.d.ts +74 -56
- package/package/components/divider/divider.svelte +18 -14
- package/package/components/divider/divider.svelte.d.ts +31 -10
- package/package/components/divider/spacer.svelte +13 -8
- package/package/components/divider/spacer.svelte.d.ts +20 -9
- package/package/components/drawer/drawer.svelte +63 -76
- package/package/components/drawer/drawer.svelte.d.ts +102 -84
- package/package/components/grid/grid-body.svelte +15 -10
- package/package/components/grid/grid-body.svelte.d.ts +30 -24
- package/package/components/grid/grid-cell.svelte +16 -6
- package/package/components/grid/grid-cell.svelte.d.ts +23 -23
- package/package/components/grid/grid-col-header.svelte +16 -6
- package/package/components/grid/grid-col-header.svelte.d.ts +23 -23
- package/package/components/grid/grid-foot.svelte +16 -6
- package/package/components/grid/grid-foot.svelte.d.ts +23 -23
- package/package/components/grid/grid-head.svelte +16 -6
- package/package/components/grid/grid-head.svelte.d.ts +23 -23
- package/package/components/grid/grid-row-header.svelte +16 -6
- package/package/components/grid/grid-row-header.svelte.d.ts +23 -23
- package/package/components/grid/grid-row.svelte +19 -23
- package/package/components/grid/grid-row.svelte.d.ts +48 -38
- package/package/components/grid/grid.svelte +28 -25
- package/package/components/grid/grid.svelte.d.ts +56 -32
- package/package/components/icon/icon.svelte +14 -9
- package/package/components/icon/icon.svelte.d.ts +20 -9
- package/package/components/listbox/listbox.svelte +46 -52
- package/package/components/listbox/listbox.svelte.d.ts +102 -40
- package/package/components/listbox/option-group.svelte +23 -19
- package/package/components/listbox/option-group.svelte.d.ts +49 -27
- package/package/components/listbox/option.svelte +44 -57
- package/package/components/listbox/option.svelte.d.ts +54 -84
- package/package/components/menu/menu-button.svelte +42 -63
- package/package/components/menu/menu-button.svelte.d.ts +18 -72
- package/package/components/menu/menu-item-checkbox.svelte +29 -41
- package/package/components/menu/menu-item-checkbox.svelte.d.ts +5 -44
- package/package/components/menu/menu-item-group.svelte +22 -19
- package/package/components/menu/menu-item-group.svelte.d.ts +41 -27
- package/package/components/menu/menu-item-radio.svelte +29 -41
- package/package/components/menu/menu-item-radio.svelte.d.ts +5 -44
- package/package/components/menu/menu-item.svelte +66 -75
- package/package/components/menu/menu-item.svelte.d.ts +5 -80
- package/package/components/menu/menu.svelte +27 -22
- package/package/components/menu/menu.svelte.d.ts +50 -30
- package/package/components/radio/radio-group.svelte +38 -42
- package/package/components/radio/radio-group.svelte.d.ts +85 -35
- package/package/components/radio/radio.svelte +45 -48
- package/package/components/radio/radio.svelte.d.ts +96 -42
- package/package/components/select/combobox.svelte +76 -101
- package/package/components/select/combobox.svelte.d.ts +5 -56
- package/package/components/select/select-tags.svelte +48 -59
- package/package/components/select/select-tags.svelte.d.ts +109 -28
- package/package/components/select/select.svelte +18 -37
- package/package/components/select/select.svelte.d.ts +5 -40
- package/package/components/slider/slider.svelte +71 -68
- package/package/components/slider/slider.svelte.d.ts +142 -31
- package/package/components/switch/switch.svelte +36 -46
- package/package/components/switch/switch.svelte.d.ts +83 -37
- package/package/components/table/table-body.svelte +15 -11
- package/package/components/table/table-body.svelte.d.ts +30 -24
- package/package/components/table/table-cell.svelte +16 -6
- package/package/components/table/table-cell.svelte.d.ts +23 -23
- package/package/components/table/table-col-header.svelte +16 -6
- package/package/components/table/table-col-header.svelte.d.ts +23 -23
- package/package/components/table/table-foot.svelte +16 -6
- package/package/components/table/table-foot.svelte.d.ts +23 -23
- package/package/components/table/table-head.svelte +16 -6
- package/package/components/table/table-head.svelte.d.ts +23 -23
- package/package/components/table/table-row-header.svelte +16 -6
- package/package/components/table/table-row-header.svelte.d.ts +23 -23
- package/package/components/table/table-row.svelte +16 -6
- package/package/components/table/table-row.svelte.d.ts +23 -23
- package/package/components/table/table.svelte +16 -6
- package/package/components/table/table.svelte.d.ts +23 -23
- package/package/components/tabs/tab-box.svelte +16 -9
- package/package/components/tabs/tab-box.svelte.d.ts +32 -22
- package/package/components/tabs/tab-list.svelte +36 -35
- package/package/components/tabs/tab-list.svelte.d.ts +65 -33
- package/package/components/tabs/tab-panel.svelte +16 -6
- package/package/components/tabs/tab-panel.svelte.d.ts +23 -23
- package/package/components/tabs/tab-panels.svelte +16 -6
- package/package/components/tabs/tab-panels.svelte.d.ts +23 -21
- package/package/components/tabs/tab.svelte +28 -25
- package/package/components/tabs/tab.svelte.d.ts +17 -63
- package/package/components/text-editor/lexical-root.svelte +38 -32
- package/package/components/text-editor/lexical-root.svelte.d.ts +74 -13
- package/package/components/text-editor/text-editor.svelte +63 -79
- package/package/components/text-editor/text-editor.svelte.d.ts +97 -20
- package/package/components/text-editor/toolbar/editor-toolbar.svelte +41 -24
- package/package/components/text-editor/toolbar/editor-toolbar.svelte.d.ts +32 -7
- package/package/components/text-editor/toolbar/format-text-button.svelte +15 -5
- package/package/components/text-editor/toolbar/format-text-button.svelte.d.ts +13 -6
- package/package/components/text-editor/toolbar/insert-link-button.svelte +18 -16
- package/package/components/text-editor/toolbar/insert-link-button.svelte.d.ts +4 -8
- 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 +13 -6
- package/package/components/text-field/number-input.svelte +63 -81
- package/package/components/text-field/number-input.svelte.d.ts +48 -55
- package/package/components/text-field/password-input.svelte +38 -57
- package/package/components/text-field/password-input.svelte.d.ts +16 -45
- package/package/components/text-field/search-bar.svelte +45 -62
- package/package/components/text-field/search-bar.svelte.d.ts +25 -66
- package/package/components/text-field/text-area.svelte +38 -54
- package/package/components/text-field/text-area.svelte.d.ts +100 -35
- package/package/components/text-field/text-input.svelte +28 -86
- package/package/components/text-field/text-input.svelte.d.ts +4 -78
- package/package/components/toast/toast.svelte +36 -30
- package/package/components/toast/toast.svelte.d.ts +50 -28
- package/package/components/toolbar/toolbar.svelte +25 -25
- package/package/components/toolbar/toolbar.svelte.d.ts +57 -29
- package/package/components/util/app-shell.svelte +22 -10
- package/package/components/util/app-shell.svelte.d.ts +25 -29
- package/package/components/util/group.svelte +20 -15
- package/package/components/util/group.svelte.d.ts +40 -26
- package/package/components/util/modal.svelte +89 -105
- package/package/components/util/modal.svelte.d.ts +6 -71
- package/package/components/util/placeholder.svelte +21 -0
- package/package/components/util/{portal.svelte.d.ts → placeholder.svelte.d.ts} +17 -25
- package/package/components/util/popup.svelte +65 -62
- package/package/components/util/popup.svelte.d.ts +89 -77
- 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 +12 -19
- package/package/components/util/portal.svelte +0 -36
- /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
|
@@ -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,102 @@
|
|
|
1
1
|
export default Popup;
|
|
2
|
-
type Popup = SvelteComponent
|
|
3
|
-
[
|
|
4
|
-
|
|
2
|
+
type Popup = SvelteComponent<ModalProps & Props & Record<string, any>, {
|
|
3
|
+
[evt: string]: CustomEvent<any>;
|
|
4
|
+
}, {}> & {
|
|
5
|
+
$$bindings?: "open" | "content" | undefined;
|
|
6
|
+
};
|
|
7
|
+
/** Generic popup helper. */
|
|
8
|
+
declare const Popup: $$__sveltets_2_IsomorphicComponent<import("../../typedefs").ModalProps & {
|
|
9
|
+
/**
|
|
10
|
+
* - The `class` attribute on the content element.
|
|
11
|
+
*/
|
|
5
12
|
class?: string | undefined;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
+
*/
|
|
9
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
|
+
*/
|
|
10
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
|
+
*/
|
|
11
39
|
touchOptimized?: boolean | undefined;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
} & {
|
|
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>, {
|
|
25
53
|
[evt: string]: CustomEvent<any>;
|
|
26
|
-
}, {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}> & {
|
|
32
|
-
$$bindings?: string | undefined;
|
|
33
|
-
} & {
|
|
34
|
-
class: string;
|
|
35
|
-
open: Writable<boolean>;
|
|
36
|
-
showBackdrop: boolean;
|
|
37
|
-
anchor: HTMLElement | undefined;
|
|
38
|
-
content: HTMLElement | undefined;
|
|
39
|
-
position: PopupPosition;
|
|
40
|
-
positionBaseElement: HTMLElement | undefined;
|
|
41
|
-
touchOptimized: boolean;
|
|
42
|
-
};
|
|
43
|
-
/** Generic popup helper. */
|
|
44
|
-
declare const Popup: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
|
|
45
|
-
[x: string]: any;
|
|
46
|
-
anchor: HTMLElement | undefined;
|
|
54
|
+
}, {}, {}, "open" | "content">;
|
|
55
|
+
type Props = {
|
|
56
|
+
/**
|
|
57
|
+
* - The `class` attribute on the content element.
|
|
58
|
+
*/
|
|
47
59
|
class?: string | undefined;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
+
*/
|
|
51
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
|
+
*/
|
|
52
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
|
+
*/
|
|
53
86
|
touchOptimized?: boolean | undefined;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
[evt: string]: CustomEvent<any>;
|
|
68
|
-
}, {
|
|
69
|
-
'extra-content': {
|
|
70
|
-
slot: string;
|
|
71
|
-
};
|
|
72
|
-
default: {};
|
|
73
|
-
}, {
|
|
74
|
-
class: string;
|
|
75
|
-
open: import("svelte/store").Writable<boolean>;
|
|
76
|
-
showBackdrop: boolean;
|
|
77
|
-
anchor: HTMLElement | undefined;
|
|
78
|
-
content: HTMLElement | undefined;
|
|
79
|
-
position: import("../../typedefs").PopupPosition;
|
|
80
|
-
positionBaseElement: HTMLElement | undefined;
|
|
81
|
-
touchOptimized: boolean;
|
|
82
|
-
}, string>;
|
|
83
|
-
type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
|
|
84
|
-
default: any;
|
|
85
|
-
} ? Props extends Record<string, never> ? any : {
|
|
86
|
-
children?: any;
|
|
87
|
-
} : {});
|
|
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
|
+
};
|
|
88
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> {
|
|
89
101
|
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
90
102
|
$$bindings?: Bindings;
|
|
@@ -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
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { generateElementId } from '@sveltia/utils/element';
|
|
4
4
|
import { sleep } from '@sveltia/utils/misc';
|
|
5
|
+
import { on } from 'svelte/events';
|
|
5
6
|
import { get, writable } from 'svelte/store';
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -124,13 +125,13 @@ class Popup {
|
|
|
124
125
|
this.anchorElement.setAttribute('aria-controls', this.id);
|
|
125
126
|
this.popupElement.setAttribute('id', this.id);
|
|
126
127
|
|
|
127
|
-
|
|
128
|
+
on(anchorElement, 'click', () => {
|
|
128
129
|
if (!this.isDisabled && !this.isReadOnly) {
|
|
129
130
|
this.open.set(!get(this.open));
|
|
130
131
|
}
|
|
131
132
|
});
|
|
132
133
|
|
|
133
|
-
|
|
134
|
+
on(anchorElement, 'keydown', (event) => {
|
|
134
135
|
const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
|
|
135
136
|
const hasModifier = shiftKey || altKey || ctrlKey || metaKey;
|
|
136
137
|
|
|
@@ -141,7 +142,7 @@ class Popup {
|
|
|
141
142
|
}
|
|
142
143
|
});
|
|
143
144
|
|
|
144
|
-
|
|
145
|
+
on(anchorElement, 'transitionstart', () => {
|
|
145
146
|
if (this.anchorElement.closest('.hiding, .hidden, [hidden]')) {
|
|
146
147
|
this.hideImmediately();
|
|
147
148
|
}
|
|
@@ -154,7 +155,7 @@ class Popup {
|
|
|
154
155
|
}).observe(this.anchorElement);
|
|
155
156
|
|
|
156
157
|
// Close the popup when the backdrop, a menu item or an option is clicked
|
|
157
|
-
this.popupElement
|
|
158
|
+
on(this.popupElement, 'click', (event) => {
|
|
158
159
|
event.stopPropagation();
|
|
159
160
|
|
|
160
161
|
// eslint-disable-next-line prefer-destructuring
|
|
@@ -168,7 +169,7 @@ class Popup {
|
|
|
168
169
|
}
|
|
169
170
|
});
|
|
170
171
|
|
|
171
|
-
this.popupElement
|
|
172
|
+
on(this.popupElement, 'keydown', (event) => {
|
|
172
173
|
const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
|
|
173
174
|
const hasModifier = shiftKey || altKey || ctrlKey || metaKey;
|
|
174
175
|
|