@sveltia/ui 0.2.3 → 0.2.5
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/composite/calendar.svelte +4 -1
- package/package/components/composite/calendar.svelte.d.ts +1 -1
- package/package/components/composite/checkbox-group.svelte +4 -4
- package/package/components/composite/combobox.svelte +11 -8
- package/package/components/composite/combobox.svelte.d.ts +5 -5
- package/package/components/composite/disclosure.svelte +3 -3
- package/package/components/composite/disclosure.svelte.d.ts +1 -1
- package/package/components/composite/grid.svelte +2 -2
- package/package/components/composite/grid.svelte.d.ts +1 -1
- package/package/components/composite/listbox.svelte +4 -4
- package/package/components/composite/listbox.svelte.d.ts +2 -2
- package/package/components/composite/menu-item-group.svelte +1 -1
- package/package/components/composite/menu.svelte +3 -3
- package/package/components/composite/menu.svelte.d.ts +2 -2
- package/package/components/composite/{radio-button-group.svelte → radio-group.svelte} +11 -10
- package/package/components/composite/radio-group.svelte.d.ts +40 -0
- package/package/components/composite/select-button-group.svelte +4 -4
- package/package/components/composite/select-button-group.svelte.d.ts +3 -3
- package/package/components/composite/select.svelte +2 -2
- package/package/components/composite/select.svelte.d.ts +1 -1
- package/package/components/composite/tab-list.svelte +4 -4
- package/package/components/composite/tab-list.svelte.d.ts +2 -2
- package/package/components/core/button.svelte +12 -13
- package/package/components/core/button.svelte.d.ts +10 -10
- package/package/components/core/checkbox.svelte +40 -21
- package/package/components/core/checkbox.svelte.d.ts +4 -2
- package/package/components/core/dialog.svelte +14 -4
- package/package/components/core/dialog.svelte.d.ts +3 -3
- package/package/components/core/drawer.svelte +13 -3
- package/package/components/core/drawer.svelte.d.ts +1 -1
- package/package/components/core/grid-cell.svelte +1 -2
- package/package/components/core/group.svelte +1 -1
- package/package/components/core/icon.svelte +1 -1
- package/package/components/core/menu-button.svelte +3 -3
- package/package/components/core/menu-button.svelte.d.ts +3 -3
- package/package/components/core/menu-item-checkbox.svelte +1 -1
- package/package/components/core/menu-item-radio.svelte +1 -1
- package/package/components/core/number-input.svelte +19 -9
- package/package/components/core/number-input.svelte.d.ts +1 -1
- package/package/components/core/option.svelte +1 -1
- package/package/components/core/password-input.svelte +3 -3
- package/package/components/core/password-input.svelte.d.ts +1 -1
- package/package/components/core/{radio-button.svelte → radio.svelte} +45 -20
- package/package/components/core/radio.svelte.d.ts +41 -0
- package/package/components/core/row-group.svelte +1 -2
- package/package/components/core/row.svelte +1 -2
- package/package/components/core/search-bar.svelte +2 -2
- package/package/components/core/select-button.svelte +3 -3
- package/package/components/core/select-button.svelte.d.ts +2 -2
- package/package/components/core/separator.svelte +2 -1
- package/package/components/core/separator.svelte.d.ts +2 -2
- package/package/components/core/slider.svelte +54 -18
- package/package/components/core/spacer.svelte +2 -2
- package/package/components/core/switch.svelte +3 -3
- package/package/components/core/switch.svelte.d.ts +1 -1
- package/package/components/core/tab-panel.svelte +2 -3
- package/package/components/core/tab-panel.svelte.d.ts +1 -1
- package/package/components/core/tab.svelte +2 -2
- package/package/components/core/tab.svelte.d.ts +1 -1
- package/package/components/core/text-area.svelte +7 -7
- package/package/components/core/text-area.svelte.d.ts +2 -2
- package/package/components/core/text-input.svelte +7 -7
- package/package/components/core/text-input.svelte.d.ts +5 -5
- package/package/components/core/toolbar.svelte +2 -3
- package/package/components/core/toolbar.svelte.d.ts +1 -1
- package/package/components/editor/markdown.svelte +1 -1
- package/package/components/editor/markdown.svelte.d.ts +1 -1
- package/package/components/helpers/group.d.ts +1 -37
- package/package/components/helpers/group.js +26 -19
- package/package/components/helpers/popup.d.ts +1 -2
- package/package/components/helpers/popup.js +18 -8
- package/package/components/helpers/util.js +6 -0
- package/package/components/util/app-shell.svelte +15 -6
- package/package/components/util/misc.js +0 -2
- package/package/components/util/popup.svelte +14 -4
- package/package/components/util/popup.svelte.d.ts +10 -10
- package/package/components/util/portal.svelte +1 -1
- package/package/index.d.ts +6 -3
- package/package/index.js +47 -2
- package/package/styles/variables.scss +8 -5
- package/package/typedef.d.ts +1 -0
- package/package/typedef.js +4 -0
- package/package.json +30 -32
- package/package/components/composite/radio-button-group.svelte.d.ts +0 -36
- package/package/components/core/radio-button.svelte.d.ts +0 -37
|
@@ -9,7 +9,7 @@ export default class TextInput extends SvelteComponentTyped<{
|
|
|
9
9
|
role?: "textbox" | "searchbox" | "combobox" | "spinbutton";
|
|
10
10
|
disabled?: boolean;
|
|
11
11
|
name?: string;
|
|
12
|
-
value?: string;
|
|
12
|
+
value?: string | number;
|
|
13
13
|
readOnly?: boolean;
|
|
14
14
|
}, {
|
|
15
15
|
input: Event;
|
|
@@ -39,8 +39,8 @@ export default class TextInput extends SvelteComponentTyped<{
|
|
|
39
39
|
set name(arg: string);
|
|
40
40
|
get name(): string;
|
|
41
41
|
/**accessor*/
|
|
42
|
-
set value(arg: string);
|
|
43
|
-
get value(): string;
|
|
42
|
+
set value(arg: string | number);
|
|
43
|
+
get value(): string | number;
|
|
44
44
|
}
|
|
45
45
|
export type TextInputProps = typeof __propDef.props;
|
|
46
46
|
export type TextInputEvents = typeof __propDef.events;
|
|
@@ -50,11 +50,11 @@ declare const __propDef: {
|
|
|
50
50
|
props: {
|
|
51
51
|
[x: string]: any;
|
|
52
52
|
class?: string;
|
|
53
|
-
element?:
|
|
53
|
+
element?: HTMLInputElement | null;
|
|
54
54
|
role?: ('textbox' | 'searchbox' | 'combobox' | 'spinbutton');
|
|
55
55
|
disabled?: boolean;
|
|
56
56
|
name?: string;
|
|
57
|
-
value?: (string | undefined);
|
|
57
|
+
value?: (string | number | undefined);
|
|
58
58
|
readOnly?: boolean;
|
|
59
59
|
};
|
|
60
60
|
events: {
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
3
|
@see https://w3c.github.io/aria/#toolbar
|
|
4
|
-
@see https://
|
|
4
|
+
@see https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/
|
|
5
5
|
-->
|
|
6
6
|
<script>
|
|
7
7
|
/**
|
|
8
8
|
* CSS class name on the button.
|
|
9
|
-
* @type {
|
|
9
|
+
* @type {string}
|
|
10
10
|
*/
|
|
11
|
-
// eslint-disable-next-line padding-line-between-statements
|
|
12
11
|
let className = '';
|
|
13
12
|
|
|
14
13
|
export { className as class };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/** @typedef {typeof __propDef.slots} ToolbarSlots */
|
|
4
4
|
/**
|
|
5
5
|
* @see https://w3c.github.io/aria/#toolbar
|
|
6
|
-
* @see https://
|
|
6
|
+
* @see https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/
|
|
7
7
|
*/
|
|
8
8
|
export default class Toolbar extends SvelteComponentTyped<{
|
|
9
9
|
[x: string]: any;
|
|
@@ -1,37 +1 @@
|
|
|
1
|
-
export function activateGroup(...args: any[]):
|
|
2
|
-
/**
|
|
3
|
-
* Implement keyboard and mouse interactions for a grouping composite widget.
|
|
4
|
-
*/
|
|
5
|
-
declare class Group {
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* @param {HTMLElement} parent
|
|
9
|
-
* @todo Check for added elements probably with `MutationObserver`.
|
|
10
|
-
*/
|
|
11
|
-
constructor(parent: HTMLElement);
|
|
12
|
-
parent: HTMLElement;
|
|
13
|
-
role: string;
|
|
14
|
-
grid: boolean;
|
|
15
|
-
multi: boolean;
|
|
16
|
-
id: string;
|
|
17
|
-
parentGroupSelector: string;
|
|
18
|
-
orientation: any;
|
|
19
|
-
childSelectedAttr: any;
|
|
20
|
-
/** @type {string} */
|
|
21
|
-
get selector(): string;
|
|
22
|
-
/** @type {HTMLElement[]} */
|
|
23
|
-
get allMembers(): HTMLElement[];
|
|
24
|
-
/** @type {HTMLElement[]} */
|
|
25
|
-
get activeMembers(): HTMLElement[];
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* @param {KeyboardEvent}
|
|
29
|
-
*/
|
|
30
|
-
onClick(event: any): void;
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
* @param {KeyboardEvent}
|
|
34
|
-
*/
|
|
35
|
-
onKeyDown(event: any): void;
|
|
36
|
-
}
|
|
37
|
-
export {};
|
|
1
|
+
export function activateGroup(...args: any[]): void;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/* eslint-disable no-plusplus */
|
|
2
|
-
/* eslint-disable no-param-reassign */
|
|
3
|
-
|
|
4
1
|
import { sleep } from '../util/misc';
|
|
5
2
|
import { getRandomId } from './util';
|
|
6
3
|
|
|
@@ -43,7 +40,7 @@ const config = {
|
|
|
43
40
|
class Group {
|
|
44
41
|
/**
|
|
45
42
|
*
|
|
46
|
-
* @param {HTMLElement} parent
|
|
43
|
+
* @param {HTMLElement} parent Parent element.
|
|
47
44
|
* @todo Check for added elements probably with `MutationObserver`.
|
|
48
45
|
*/
|
|
49
46
|
constructor(parent) {
|
|
@@ -73,13 +70,15 @@ class Group {
|
|
|
73
70
|
|
|
74
71
|
element.id ||= `${this.id}-item-${index}`;
|
|
75
72
|
element.tabIndex ||= isSelected || (!hasSelected && index === 0) ? 0 : -1;
|
|
76
|
-
element.setAttribute(this.childSelectedAttr, isSelected);
|
|
73
|
+
element.setAttribute(this.childSelectedAttr, String(isSelected));
|
|
77
74
|
controls?.setAttribute('aria-labelledby', element.id);
|
|
78
|
-
controls?.setAttribute('aria-hidden', !isSelected);
|
|
75
|
+
controls?.setAttribute('aria-hidden', String(!isSelected));
|
|
79
76
|
});
|
|
80
77
|
|
|
81
78
|
parent.addEventListener('click', (event) => {
|
|
82
|
-
|
|
79
|
+
if (/** @type {HTMLElement} */ (event.target).matches(this.selector)) {
|
|
80
|
+
this.onClick(event);
|
|
81
|
+
}
|
|
83
82
|
});
|
|
84
83
|
|
|
85
84
|
parent.addEventListener('keydown', (event) => {
|
|
@@ -96,6 +95,7 @@ class Group {
|
|
|
96
95
|
|
|
97
96
|
/** @type {HTMLElement[]} */
|
|
98
97
|
get allMembers() {
|
|
98
|
+
// @ts-ignore
|
|
99
99
|
return [...this.parent.querySelectorAll(this.selector)];
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -106,10 +106,11 @@ class Group {
|
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
108
|
*
|
|
109
|
-
* @param {
|
|
109
|
+
* @param {MouseEvent} event `click` event.
|
|
110
110
|
*/
|
|
111
111
|
onClick(event) {
|
|
112
|
-
|
|
112
|
+
// eslint-disable-next-line prefer-destructuring
|
|
113
|
+
const target = /** @type {HTMLButtonElement} */ (event.target);
|
|
113
114
|
|
|
114
115
|
if (!target.matches(this.selector)) {
|
|
115
116
|
return;
|
|
@@ -129,13 +130,13 @@ class Group {
|
|
|
129
130
|
(element.matches('[role="row"], [role="option"], [role="tab"]') && !this.multi)) &&
|
|
130
131
|
element.closest(this.parentGroupSelector) === targetParentGroup
|
|
131
132
|
) {
|
|
132
|
-
element.setAttribute(this.childSelectedAttr, isTarget);
|
|
133
|
+
element.setAttribute(this.childSelectedAttr, String(isTarget));
|
|
133
134
|
}
|
|
134
135
|
|
|
135
136
|
const controls = element.getAttribute('aria-controls');
|
|
136
137
|
|
|
137
138
|
if (controls) {
|
|
138
|
-
document.getElementById(controls)?.setAttribute('aria-hidden', !isTarget);
|
|
139
|
+
document.getElementById(controls)?.setAttribute('aria-hidden', String(!isTarget));
|
|
139
140
|
}
|
|
140
141
|
});
|
|
141
142
|
|
|
@@ -151,10 +152,12 @@ class Group {
|
|
|
151
152
|
|
|
152
153
|
/**
|
|
153
154
|
*
|
|
154
|
-
* @param {KeyboardEvent}
|
|
155
|
+
* @param {KeyboardEvent} event `keydown` event.
|
|
155
156
|
*/
|
|
156
157
|
onKeyDown(event) {
|
|
157
|
-
|
|
158
|
+
// eslint-disable-next-line prefer-destructuring
|
|
159
|
+
const target = /** @type {HTMLElement} */ (event.target);
|
|
160
|
+
const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
|
|
158
161
|
|
|
159
162
|
if (target.matches(this.selector) && !ctrlKey && !metaKey && !shiftKey && !altKey) {
|
|
160
163
|
if ([' ', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {
|
|
@@ -236,11 +239,15 @@ class Group {
|
|
|
236
239
|
}
|
|
237
240
|
|
|
238
241
|
/**
|
|
239
|
-
*
|
|
242
|
+
* Activate a new group.
|
|
243
|
+
* @param {...any} args Arguments.
|
|
240
244
|
*/
|
|
241
|
-
export const activateGroup =
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
245
|
+
export const activateGroup = (...args) => {
|
|
246
|
+
(async () => {
|
|
247
|
+
// Wait a bit before the relevant components, including the `aria-controls` target are mounted
|
|
248
|
+
await sleep(100);
|
|
249
|
+
|
|
250
|
+
// @ts-ignore
|
|
251
|
+
return new Group(...args);
|
|
252
|
+
})();
|
|
246
253
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export function activatePopup(...args: any[]): Popup;
|
|
2
|
-
export type PopupPosition = ('top-left' | 'top-right' | 'right-top' | 'right-bottom' | 'bottom-left' | 'bottom-right' | 'left-top' | 'left-bottom');
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
*
|
|
5
4
|
*/
|
|
6
5
|
declare class Popup {
|
|
7
6
|
/**
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
/* eslint-disable max-len */
|
|
2
1
|
/* eslint-disable no-nested-ternary */
|
|
3
2
|
|
|
4
3
|
import { get, writable } from 'svelte/store';
|
|
5
4
|
import { getRandomId } from './util';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
7
|
+
*
|
|
9
8
|
*/
|
|
10
|
-
|
|
11
9
|
class Popup {
|
|
12
10
|
open = writable(false);
|
|
13
11
|
|
|
@@ -30,7 +28,7 @@ class Popup {
|
|
|
30
28
|
if (position.startsWith('bottom-')) {
|
|
31
29
|
if (contentHeight > bottomMargin) {
|
|
32
30
|
if (topMargin > bottomMargin) {
|
|
33
|
-
position = position.replace('bottom-', 'top-');
|
|
31
|
+
position = /** @type {PopupPosition} */ (position.replace('bottom-', 'top-'));
|
|
34
32
|
height = topMargin;
|
|
35
33
|
} else {
|
|
36
34
|
height = bottomMargin;
|
|
@@ -62,7 +60,7 @@ class Popup {
|
|
|
62
60
|
? `${Math.round(intersectionRect.left)}px`
|
|
63
61
|
: 'auto';
|
|
64
62
|
|
|
65
|
-
const anchorPopup = this.anchorElement.closest('.popup');
|
|
63
|
+
const anchorPopup = /** @type {HTMLElement} */ (this.anchorElement.closest('.popup'));
|
|
66
64
|
|
|
67
65
|
const style = {
|
|
68
66
|
inset: [top, right, bottom, left].join(' '),
|
|
@@ -109,8 +107,17 @@ class Popup {
|
|
|
109
107
|
}
|
|
110
108
|
});
|
|
111
109
|
|
|
110
|
+
// Close the popup when the backdrop, a menu item or an option is clicked
|
|
112
111
|
this.popupElement.addEventListener('click', (event) => {
|
|
113
|
-
|
|
112
|
+
event.stopPropagation();
|
|
113
|
+
|
|
114
|
+
// eslint-disable-next-line prefer-destructuring
|
|
115
|
+
const target = /** @type {HTMLElement} */ (event.target);
|
|
116
|
+
|
|
117
|
+
if (
|
|
118
|
+
get(this.open) &&
|
|
119
|
+
(target === this.popupElement || target.matches('[role^="menuitem"], [role="option"]'))
|
|
120
|
+
) {
|
|
114
121
|
this.open.set(false);
|
|
115
122
|
}
|
|
116
123
|
});
|
|
@@ -139,7 +146,7 @@ class Popup {
|
|
|
139
146
|
this.anchorElement.focus();
|
|
140
147
|
}
|
|
141
148
|
|
|
142
|
-
this.anchorElement.setAttribute('aria-expanded', open);
|
|
149
|
+
this.anchorElement.setAttribute('aria-expanded', String(open));
|
|
143
150
|
});
|
|
144
151
|
}
|
|
145
152
|
|
|
@@ -160,6 +167,9 @@ class Popup {
|
|
|
160
167
|
}
|
|
161
168
|
|
|
162
169
|
/**
|
|
163
|
-
*
|
|
170
|
+
* Activate a new popup.
|
|
171
|
+
* @param {...any} args Arguments.
|
|
172
|
+
* @returns {Popup} New popup.
|
|
164
173
|
*/
|
|
174
|
+
// @ts-ignore
|
|
165
175
|
export const activatePopup = (...args) => new Popup(...args);
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a random ID that can be used for elements.
|
|
3
|
+
* @param {string} [prefix] Prefix to be added to the ID, e.g. `popup`.
|
|
4
|
+
* @param {number} [length] Number of characters to be used in the ID.
|
|
5
|
+
* @returns {string} Generated ID.
|
|
6
|
+
*/
|
|
1
7
|
export const getRandomId = (prefix = '', length = 7) =>
|
|
2
8
|
[
|
|
3
9
|
prefix,
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
12
12
|
const { dataset } = document.documentElement;
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
14
17
|
const applyTheme = () => {
|
|
15
18
|
if (dataset.autoTheming !== 'false') {
|
|
16
19
|
dataset.theme = mediaQuery.matches ? 'dark' : 'light';
|
|
@@ -19,6 +22,9 @@
|
|
|
19
22
|
|
|
20
23
|
applyTheme();
|
|
21
24
|
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
22
28
|
mediaQuery.onchange = () => {
|
|
23
29
|
applyTheme();
|
|
24
30
|
};
|
|
@@ -31,7 +37,7 @@
|
|
|
31
37
|
on:drop|preventDefault
|
|
32
38
|
on:contextmenu={(event) => {
|
|
33
39
|
// Disable the native context menu
|
|
34
|
-
if (!event.target?.matches('input[type="text"], textarea')) {
|
|
40
|
+
if (!(/** @type {HTMLElement} */ (event.target)?.matches('input[type="text"], textarea'))) {
|
|
35
41
|
event.preventDefault();
|
|
36
42
|
}
|
|
37
43
|
}}
|
|
@@ -46,8 +52,9 @@
|
|
|
46
52
|
--foreground-color-2-hsl: var(--base-hue) 5% 20%;
|
|
47
53
|
--foreground-color-3-hsl: var(--base-hue) 5% 40%;
|
|
48
54
|
--foreground-color-4-hsl: var(--base-hue) 5% 60%;
|
|
49
|
-
--border-color-1-hsl: var(--base-hue) 5%
|
|
50
|
-
--border-color-2-hsl: var(--base-hue) 5%
|
|
55
|
+
--border-color-1-hsl: var(--base-hue) 5% 30%;
|
|
56
|
+
--border-color-2-hsl: var(--base-hue) 5% 50%;
|
|
57
|
+
--border-color-3-hsl: var(--base-hue) 5% 70%;
|
|
51
58
|
--background-color-1-hsl: var(--base-hue) 5% 100%;
|
|
52
59
|
--background-color-2-hsl: var(--base-hue) 5% 98%;
|
|
53
60
|
--background-color-3-hsl: var(--base-hue) 5% 94%;
|
|
@@ -75,8 +82,9 @@
|
|
|
75
82
|
--foreground-color-2-hsl: var(--base-hue) 10% 80%;
|
|
76
83
|
--foreground-color-3-hsl: var(--base-hue) 10% 60%;
|
|
77
84
|
--foreground-color-4-hsl: var(--base-hue) 10% 40%;
|
|
78
|
-
--border-color-1-hsl: var(--base-hue) 10%
|
|
79
|
-
--border-color-2-hsl: var(--base-hue) 10%
|
|
85
|
+
--border-color-1-hsl: var(--base-hue) 10% 70%;
|
|
86
|
+
--border-color-2-hsl: var(--base-hue) 10% 50%;
|
|
87
|
+
--border-color-3-hsl: var(--base-hue) 10% 30%;
|
|
80
88
|
--background-color-1-hsl: var(--base-hue) 10% 10%;
|
|
81
89
|
--background-color-2-hsl: var(--base-hue) 10% 12%;
|
|
82
90
|
--background-color-3-hsl: var(--base-hue) 10% 16%;
|
|
@@ -150,7 +158,8 @@
|
|
|
150
158
|
);
|
|
151
159
|
--primary-border-color: hsl(var(--border-color-1-hsl));
|
|
152
160
|
--secondary-border-color: hsl(var(--border-color-2-hsl));
|
|
153
|
-
--control-border-color: hsl(var(--border-color-2-hsl));
|
|
161
|
+
--primary-control-border-color: hsl(var(--border-color-2-hsl));
|
|
162
|
+
--secondary-control-border-color: hsl(var(--border-color-3-hsl));
|
|
154
163
|
--danger-border-color: hsl(
|
|
155
164
|
var(--danger-color-hue) var(--alert-border-color-saturation) var(--alert-border-color-lightness)
|
|
156
165
|
);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Check if the given input is a simple object.
|
|
3
|
-
*
|
|
4
3
|
* @param {*} input Input, probably an object.
|
|
5
4
|
* @returns {boolean} Result.
|
|
6
5
|
*/
|
|
@@ -10,7 +9,6 @@ export const isObject = (input) =>
|
|
|
10
9
|
/**
|
|
11
10
|
* Return a simple `Promise` to resolve in the given time, making it easier to wait for a bit in the
|
|
12
11
|
* code, particularly while making sequential HTTP requests.
|
|
13
|
-
*
|
|
14
12
|
* @param {number} [ms] Milliseconds to wait.
|
|
15
13
|
* @returns {Promise} Nothing.
|
|
16
14
|
*/
|
|
@@ -9,18 +9,18 @@
|
|
|
9
9
|
import { writable } from 'svelte/store';
|
|
10
10
|
import { activatePopup } from '../helpers/popup';
|
|
11
11
|
|
|
12
|
-
/** @type {
|
|
12
|
+
/** @type {HTMLElement?} */
|
|
13
13
|
export let anchor = undefined;
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Reference to the popup element.
|
|
17
|
-
* @type {
|
|
17
|
+
* @type {HTMLDialogElement?}
|
|
18
18
|
*/
|
|
19
19
|
export let dialog = undefined;
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Reference to the content element.
|
|
23
|
-
* @type {
|
|
23
|
+
* @type {HTMLElement?}
|
|
24
24
|
*/
|
|
25
25
|
export let content = undefined;
|
|
26
26
|
|
|
@@ -50,6 +50,9 @@
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
/**
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
53
56
|
const openDialog = () => {
|
|
54
57
|
(document.querySelector('.sui.app-shell') || document.body).appendChild(dialog);
|
|
55
58
|
showContent = true;
|
|
@@ -59,11 +62,14 @@
|
|
|
59
62
|
showDialog = true;
|
|
60
63
|
|
|
61
64
|
window.requestAnimationFrame(() => {
|
|
62
|
-
(dialog.querySelector('[tabindex]') || dialog).focus();
|
|
65
|
+
/** @type {HTMLElement} */ (dialog.querySelector('[tabindex]') || dialog).focus();
|
|
63
66
|
});
|
|
64
67
|
});
|
|
65
68
|
};
|
|
66
69
|
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
67
73
|
const closeDialog = async () => {
|
|
68
74
|
showDialog = false;
|
|
69
75
|
|
|
@@ -76,6 +82,9 @@
|
|
|
76
82
|
dialog?.remove();
|
|
77
83
|
};
|
|
78
84
|
|
|
85
|
+
/**
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
79
88
|
const toggleDialog = () => {
|
|
80
89
|
if (dialog) {
|
|
81
90
|
if ($open) {
|
|
@@ -87,6 +96,7 @@
|
|
|
87
96
|
};
|
|
88
97
|
|
|
89
98
|
// Call the function only when the `$open` prop is changed
|
|
99
|
+
// @ts-ignore
|
|
90
100
|
$: toggleDialog($open);
|
|
91
101
|
|
|
92
102
|
onMount(() => {
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
/** Generic popup helper. */
|
|
5
5
|
export default class Popup extends SvelteComponentTyped<{
|
|
6
6
|
[x: string]: any;
|
|
7
|
-
dialog?:
|
|
8
|
-
position?:
|
|
7
|
+
dialog?: HTMLDialogElement;
|
|
8
|
+
position?: PopupPosition;
|
|
9
9
|
anchor?: HTMLElement;
|
|
10
10
|
content?: HTMLElement;
|
|
11
11
|
open?: import("svelte/store").Writable<boolean>;
|
|
@@ -18,14 +18,14 @@ export default class Popup extends SvelteComponentTyped<{
|
|
|
18
18
|
set anchor(arg: HTMLElement);
|
|
19
19
|
get anchor(): HTMLElement;
|
|
20
20
|
/**accessor*/
|
|
21
|
-
set dialog(arg:
|
|
22
|
-
get dialog():
|
|
21
|
+
set dialog(arg: HTMLDialogElement);
|
|
22
|
+
get dialog(): HTMLDialogElement;
|
|
23
23
|
/**accessor*/
|
|
24
24
|
set content(arg: HTMLElement);
|
|
25
25
|
get content(): HTMLElement;
|
|
26
26
|
/**accessor*/
|
|
27
|
-
set position(arg:
|
|
28
|
-
get position():
|
|
27
|
+
set position(arg: PopupPosition);
|
|
28
|
+
get position(): PopupPosition;
|
|
29
29
|
/**accessor*/
|
|
30
30
|
set open(arg: import("svelte/store").Writable<boolean>);
|
|
31
31
|
get open(): import("svelte/store").Writable<boolean>;
|
|
@@ -37,10 +37,10 @@ import { SvelteComponentTyped } from "svelte";
|
|
|
37
37
|
declare const __propDef: {
|
|
38
38
|
props: {
|
|
39
39
|
[x: string]: any;
|
|
40
|
-
dialog?:
|
|
41
|
-
position?:
|
|
42
|
-
anchor?:
|
|
43
|
-
content?:
|
|
40
|
+
dialog?: HTMLDialogElement | null;
|
|
41
|
+
position?: PopupPosition;
|
|
42
|
+
anchor?: HTMLElement | null;
|
|
43
|
+
content?: HTMLElement | null;
|
|
44
44
|
open?: import("svelte/store").Writable<boolean>;
|
|
45
45
|
};
|
|
46
46
|
events: {
|
package/package/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export function initLocales({ fallbackLocale, initialLocale }?:
|
|
1
|
+
export function initLocales({ fallbackLocale, initialLocale }?: {
|
|
2
|
+
fallbackLocale?: string;
|
|
3
|
+
initialLocale?: string;
|
|
4
|
+
}): void;
|
|
2
5
|
export { default as Calendar } from "./components/composite/calendar.svelte";
|
|
3
6
|
export { default as CheckboxGroup } from "./components/composite/checkbox-group.svelte";
|
|
4
7
|
export { default as Combobox } from "./components/composite/combobox.svelte";
|
|
@@ -7,7 +10,7 @@ export { default as Grid } from "./components/composite/grid.svelte";
|
|
|
7
10
|
export { default as Listbox } from "./components/composite/listbox.svelte";
|
|
8
11
|
export { default as MenuItemGroup } from "./components/composite/menu-item-group.svelte";
|
|
9
12
|
export { default as Menu } from "./components/composite/menu.svelte";
|
|
10
|
-
export { default as
|
|
13
|
+
export { default as RadioGroup } from "./components/composite/radio-group.svelte";
|
|
11
14
|
export { default as SelectButtonGroup } from "./components/composite/select-button-group.svelte";
|
|
12
15
|
export { default as Select } from "./components/composite/select.svelte";
|
|
13
16
|
export { default as TabList } from "./components/composite/tab-list.svelte";
|
|
@@ -25,7 +28,7 @@ export { default as MenuItem } from "./components/core/menu-item.svelte";
|
|
|
25
28
|
export { default as NumberInput } from "./components/core/number-input.svelte";
|
|
26
29
|
export { default as Option } from "./components/core/option.svelte";
|
|
27
30
|
export { default as PasswordInput } from "./components/core/password-input.svelte";
|
|
28
|
-
export { default as
|
|
31
|
+
export { default as Radio } from "./components/core/radio.svelte";
|
|
29
32
|
export { default as RowGroup } from "./components/core/row-group.svelte";
|
|
30
33
|
export { default as Row } from "./components/core/row.svelte";
|
|
31
34
|
export { default as SearchBar } from "./components/core/search-bar.svelte";
|
package/package/index.js
CHANGED
|
@@ -3,10 +3,13 @@ import { addMessages, init } from 'svelte-i18n';
|
|
|
3
3
|
/**
|
|
4
4
|
* Load strings and initialize the locales.
|
|
5
5
|
* @param {object} [init] Initialize options.
|
|
6
|
+
* @param {string} [init.fallbackLocale] Fallback locale.
|
|
7
|
+
* @param {string} [init.initialLocale] Initial locale.
|
|
6
8
|
* @see https://github.com/kaisermann/svelte-i18n/blob/main/docs/Getting%20Started.md
|
|
7
9
|
* @see https://vitejs.dev/guide/features.html#glob-import
|
|
8
10
|
*/
|
|
9
11
|
export const initLocales = ({ fallbackLocale = 'en', initialLocale = 'en' } = {}) => {
|
|
12
|
+
/** @type {{ [key: string]: { strings: object }}} */
|
|
10
13
|
const modules = import.meta.glob('./locales/*.js', { eager: true });
|
|
11
14
|
|
|
12
15
|
Object.entries(modules).forEach(([path, { strings }]) => {
|
|
@@ -24,45 +27,87 @@ export const initLocales = ({ fallbackLocale = 'en', initialLocale = 'en' } = {}
|
|
|
24
27
|
|
|
25
28
|
initLocales();
|
|
26
29
|
|
|
30
|
+
// @ts-ignore
|
|
27
31
|
export { default as Calendar } from './components/composite/calendar.svelte';
|
|
32
|
+
// @ts-ignore
|
|
28
33
|
export { default as CheckboxGroup } from './components/composite/checkbox-group.svelte';
|
|
34
|
+
// @ts-ignore
|
|
29
35
|
export { default as Combobox } from './components/composite/combobox.svelte';
|
|
36
|
+
// @ts-ignore
|
|
30
37
|
export { default as Disclosure } from './components/composite/disclosure.svelte';
|
|
38
|
+
// @ts-ignore
|
|
31
39
|
export { default as Grid } from './components/composite/grid.svelte';
|
|
40
|
+
// @ts-ignore
|
|
32
41
|
export { default as Listbox } from './components/composite/listbox.svelte';
|
|
42
|
+
// @ts-ignore
|
|
33
43
|
export { default as MenuItemGroup } from './components/composite/menu-item-group.svelte';
|
|
44
|
+
// @ts-ignore
|
|
34
45
|
export { default as Menu } from './components/composite/menu.svelte';
|
|
35
|
-
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
export { default as RadioGroup } from './components/composite/radio-group.svelte';
|
|
48
|
+
// @ts-ignore
|
|
36
49
|
export { default as SelectButtonGroup } from './components/composite/select-button-group.svelte';
|
|
50
|
+
// @ts-ignore
|
|
37
51
|
export { default as Select } from './components/composite/select.svelte';
|
|
52
|
+
// @ts-ignore
|
|
38
53
|
export { default as TabList } from './components/composite/tab-list.svelte';
|
|
54
|
+
// @ts-ignore
|
|
39
55
|
export { default as Button } from './components/core/button.svelte';
|
|
56
|
+
// @ts-ignore
|
|
40
57
|
export { default as Checkbox } from './components/core/checkbox.svelte';
|
|
58
|
+
// @ts-ignore
|
|
41
59
|
export { default as Dialog } from './components/core/dialog.svelte';
|
|
60
|
+
// @ts-ignore
|
|
42
61
|
export { default as Drawer } from './components/core/drawer.svelte';
|
|
62
|
+
// @ts-ignore
|
|
43
63
|
export { default as GridCell } from './components/core/grid-cell.svelte';
|
|
64
|
+
// @ts-ignore
|
|
44
65
|
export { default as Group } from './components/core/group.svelte';
|
|
66
|
+
// @ts-ignore
|
|
45
67
|
export { default as Icon } from './components/core/icon.svelte';
|
|
68
|
+
// @ts-ignore
|
|
46
69
|
export { default as MenuButton } from './components/core/menu-button.svelte';
|
|
70
|
+
// @ts-ignore
|
|
47
71
|
export { default as MenuItemCheckbox } from './components/core/menu-item-checkbox.svelte';
|
|
72
|
+
// @ts-ignore
|
|
48
73
|
export { default as MenuItemRadio } from './components/core/menu-item-radio.svelte';
|
|
74
|
+
// @ts-ignore
|
|
49
75
|
export { default as MenuItem } from './components/core/menu-item.svelte';
|
|
76
|
+
// @ts-ignore
|
|
50
77
|
export { default as NumberInput } from './components/core/number-input.svelte';
|
|
78
|
+
// @ts-ignore
|
|
51
79
|
export { default as Option } from './components/core/option.svelte';
|
|
80
|
+
// @ts-ignore
|
|
52
81
|
export { default as PasswordInput } from './components/core/password-input.svelte';
|
|
53
|
-
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
export { default as Radio } from './components/core/radio.svelte';
|
|
84
|
+
// @ts-ignore
|
|
54
85
|
export { default as RowGroup } from './components/core/row-group.svelte';
|
|
86
|
+
// @ts-ignore
|
|
55
87
|
export { default as Row } from './components/core/row.svelte';
|
|
88
|
+
// @ts-ignore
|
|
56
89
|
export { default as SearchBar } from './components/core/search-bar.svelte';
|
|
90
|
+
// @ts-ignore
|
|
57
91
|
export { default as SelectButton } from './components/core/select-button.svelte';
|
|
92
|
+
// @ts-ignore
|
|
58
93
|
export { default as Separator } from './components/core/separator.svelte';
|
|
94
|
+
// @ts-ignore
|
|
59
95
|
export { default as Slider } from './components/core/slider.svelte';
|
|
96
|
+
// @ts-ignore
|
|
60
97
|
export { default as Spacer } from './components/core/spacer.svelte';
|
|
98
|
+
// @ts-ignore
|
|
61
99
|
export { default as Switch } from './components/core/switch.svelte';
|
|
100
|
+
// @ts-ignore
|
|
62
101
|
export { default as TabPanel } from './components/core/tab-panel.svelte';
|
|
102
|
+
// @ts-ignore
|
|
63
103
|
export { default as Tab } from './components/core/tab.svelte';
|
|
104
|
+
// @ts-ignore
|
|
64
105
|
export { default as TextArea } from './components/core/text-area.svelte';
|
|
106
|
+
// @ts-ignore
|
|
65
107
|
export { default as TextInput } from './components/core/text-input.svelte';
|
|
108
|
+
// @ts-ignore
|
|
66
109
|
export { default as Toolbar } from './components/core/toolbar.svelte';
|
|
110
|
+
// @ts-ignore
|
|
67
111
|
export { default as MarkdownEditor } from './components/editor/markdown.svelte';
|
|
112
|
+
// @ts-ignore
|
|
68
113
|
export { default as AppShell } from './components/util/app-shell.svelte';
|