@sveltia/ui 0.9.0 → 0.10.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 +2 -4
- package/package/components/alert/alert.svelte.d.ts +2 -2
- package/package/components/button/button.svelte +78 -26
- package/package/components/button/button.svelte.d.ts +73 -63
- package/package/components/button/select-button-group.svelte +6 -1
- package/package/components/button/select-button-group.svelte.d.ts +13 -13
- package/package/components/button/select-button.svelte +2 -1
- package/package/components/button/select-button.svelte.d.ts +19 -19
- package/package/components/button/split-button.svelte +10 -2
- package/package/components/button/split-button.svelte.d.ts +19 -11
- package/package/components/calendar/calendar.svelte +2 -2
- package/package/components/calendar/calendar.svelte.d.ts +2 -2
- package/package/components/checkbox/checkbox-group.svelte.d.ts +7 -7
- package/package/components/checkbox/checkbox.svelte +8 -6
- package/package/components/checkbox/checkbox.svelte.d.ts +22 -16
- package/package/components/dialog/alert-dialog.svelte.d.ts +6 -6
- package/package/components/dialog/confirmation-dialog.svelte.d.ts +8 -8
- package/package/components/dialog/dialog.svelte +17 -15
- package/package/components/dialog/dialog.svelte.d.ts +30 -24
- package/package/components/dialog/prompt-dialog.svelte +1 -1
- package/package/components/dialog/prompt-dialog.svelte.d.ts +12 -12
- package/package/components/disclosure/disclosure.svelte +6 -1
- package/package/components/disclosure/disclosure.svelte.d.ts +29 -19
- package/package/components/divider/divider.svelte.d.ts +5 -5
- package/package/components/divider/spacer.svelte.d.ts +4 -4
- package/package/components/drawer/drawer.svelte +34 -16
- package/package/components/drawer/drawer.svelte.d.ts +22 -16
- package/package/components/grid/grid-body.svelte.d.ts +4 -4
- package/package/components/grid/grid-cell.svelte.d.ts +2 -2
- package/package/components/grid/grid-col-header.svelte.d.ts +2 -2
- package/package/components/grid/grid-foot.svelte.d.ts +2 -2
- package/package/components/grid/grid-head.svelte.d.ts +2 -2
- package/package/components/grid/grid-row-header.svelte.d.ts +2 -2
- package/package/components/grid/grid-row.svelte +10 -2
- package/package/components/grid/grid-row.svelte.d.ts +8 -8
- package/package/components/grid/grid.svelte +7 -2
- package/package/components/grid/grid.svelte.d.ts +8 -8
- package/package/components/icon/icon.svelte.d.ts +4 -4
- package/package/components/listbox/listbox.svelte +11 -5
- package/package/components/listbox/listbox.svelte.d.ts +15 -15
- package/package/components/listbox/option-group.svelte.d.ts +7 -7
- package/package/components/listbox/option.svelte +4 -2
- package/package/components/listbox/option.svelte.d.ts +15 -13
- package/package/components/menu/menu-button.svelte +8 -2
- package/package/components/menu/menu-button.svelte.d.ts +20 -18
- package/package/components/menu/menu-item-checkbox.svelte +1 -1
- package/package/components/menu/menu-item-checkbox.svelte.d.ts +16 -16
- package/package/components/menu/menu-item-group.svelte +1 -1
- package/package/components/menu/menu-item-group.svelte.d.ts +7 -7
- package/package/components/menu/menu-item-radio.svelte +1 -1
- package/package/components/menu/menu-item-radio.svelte.d.ts +16 -16
- package/package/components/menu/menu-item.svelte +32 -19
- package/package/components/menu/menu-item.svelte.d.ts +32 -18
- package/package/components/menu/menu.svelte +13 -7
- package/package/components/menu/menu.svelte.d.ts +7 -7
- package/package/components/radio/radio-group.svelte +6 -1
- package/package/components/radio/radio-group.svelte.d.ts +15 -15
- package/package/components/radio/radio.svelte +1 -1
- package/package/components/radio/radio.svelte.d.ts +14 -14
- package/package/components/select/combobox.svelte +10 -8
- package/package/components/select/combobox.svelte.d.ts +22 -16
- package/package/components/select/select.svelte.d.ts +12 -12
- package/package/components/slider/slider.svelte +26 -22
- package/package/components/slider/slider.svelte.d.ts +23 -23
- package/package/components/switch/switch.svelte +5 -0
- package/package/components/switch/switch.svelte.d.ts +18 -14
- package/package/components/table/table-body.svelte.d.ts +4 -4
- package/package/components/table/table-cell.svelte.d.ts +2 -2
- package/package/components/table/table-col-header.svelte.d.ts +2 -2
- package/package/components/table/table-foot.svelte.d.ts +2 -2
- package/package/components/table/table-head.svelte.d.ts +2 -2
- package/package/components/table/table-row-header.svelte.d.ts +2 -2
- package/package/components/table/table-row.svelte.d.ts +2 -2
- package/package/components/table/table.svelte.d.ts +2 -2
- package/package/components/tabs/tab-box.svelte +30 -0
- package/package/components/tabs/tab-box.svelte.d.ts +33 -0
- package/package/components/tabs/tab-list.svelte +105 -22
- package/package/components/tabs/tab-list.svelte.d.ts +10 -10
- package/package/components/tabs/tab-panel.svelte +6 -2
- package/package/components/tabs/tab-panel.svelte.d.ts +2 -2
- package/package/components/tabs/tab-panels.svelte +32 -0
- package/package/components/tabs/tab-panels.svelte.d.ts +31 -0
- package/package/components/tabs/tab.svelte.d.ts +11 -11
- package/package/components/text-field/markdown-editor.svelte.d.ts +12 -12
- package/package/components/text-field/number-input.svelte +11 -4
- package/package/components/text-field/number-input.svelte.d.ts +40 -20
- package/package/components/text-field/password-input.svelte +7 -3
- package/package/components/text-field/password-input.svelte.d.ts +30 -18
- package/package/components/text-field/search-bar.svelte +7 -3
- package/package/components/text-field/search-bar.svelte.d.ts +46 -36
- package/package/components/text-field/text-area.svelte +4 -2
- package/package/components/text-field/text-area.svelte.d.ts +25 -21
- package/package/components/text-field/text-input.svelte +17 -2
- package/package/components/text-field/text-input.svelte.d.ts +53 -53
- package/package/components/toast/toast.svelte +16 -12
- package/package/components/toast/toast.svelte.d.ts +8 -8
- package/package/components/toolbar/toolbar.svelte.d.ts +8 -8
- package/package/components/util/app-shell.svelte +22 -6
- package/package/components/util/app-shell.svelte.d.ts +2 -0
- package/package/components/util/group.svelte.d.ts +5 -5
- package/package/components/util/modal.svelte +26 -9
- package/package/components/util/modal.svelte.d.ts +34 -34
- package/package/components/util/popup.svelte +35 -13
- package/package/components/util/popup.svelte.d.ts +33 -28
- package/package/components/util/portal.svelte +5 -3
- package/package/components/util/portal.svelte.d.ts +2 -2
- package/package/index.d.ts +5 -3
- package/package/index.js +6 -4
- package/package/services/events.d.ts +1 -1
- package/package/services/events.js +11 -8
- package/package/services/group.js +73 -30
- package/package/services/popup.d.ts +27 -13
- package/package/services/popup.js +23 -9
- package/package/services/util.d.ts +2 -2
- package/package/services/util.js +5 -5
- package/package/styles/core.scss +1 -0
- package/package/styles/variables.scss +1 -0
- package/package.json +39 -23
|
@@ -2,10 +2,10 @@ import { getRandomId, sleep } from './util';
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @type {{ [role: string]: {
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* orientation: 'vertical' | 'horizontal',
|
|
6
|
+
* childRoles: string[],
|
|
7
|
+
* childSelectedAttr: 'aria-selected' | 'aria-checked',
|
|
8
|
+
* focusChild: boolean
|
|
9
9
|
* } }}
|
|
10
10
|
*/
|
|
11
11
|
const config = {
|
|
@@ -53,12 +53,14 @@ const config = {
|
|
|
53
53
|
class Group {
|
|
54
54
|
/**
|
|
55
55
|
* Initialize a new `Group` instance.
|
|
56
|
-
* @param {HTMLElement} parent Parent element.
|
|
56
|
+
* @param {HTMLElement} parent - Parent element.
|
|
57
57
|
* @todo Check for added elements probably with `MutationObserver`.
|
|
58
58
|
*/
|
|
59
59
|
constructor(parent) {
|
|
60
|
+
parent.dispatchEvent(new CustomEvent('initializing'));
|
|
61
|
+
|
|
60
62
|
this.parent = parent;
|
|
61
|
-
this.role = parent.getAttribute('role');
|
|
63
|
+
this.role = /** @type {string} */ (parent.getAttribute('role'));
|
|
62
64
|
this.grid = this.role === 'listbox' && parent.matches('.grid');
|
|
63
65
|
this.multi = this.parent.getAttribute('aria-multiselectable') === 'true';
|
|
64
66
|
this.id = getRandomId(this.role);
|
|
@@ -74,21 +76,29 @@ class Group {
|
|
|
74
76
|
this.childSelectedProp = childSelectedAttr.replace('aria-', '');
|
|
75
77
|
this.focusChild = focusChild;
|
|
76
78
|
|
|
77
|
-
const { allMembers } = this;
|
|
78
|
-
|
|
79
|
-
const hasSelected = allMembers.some((element) =>
|
|
80
|
-
element.matches(`[${childSelectedAttr}="true"]`),
|
|
81
|
-
);
|
|
79
|
+
const { allMembers, selected: defaultSelected } = this;
|
|
82
80
|
|
|
83
81
|
allMembers.forEach((element, index) => {
|
|
84
|
-
|
|
85
|
-
const
|
|
82
|
+
// Select the first one if no member has the `selected` attribute
|
|
83
|
+
const isSelected = defaultSelected ? element === defaultSelected : index === 0;
|
|
84
|
+
|
|
85
|
+
const controlTarget = /** @type {HTMLElement | null} */ (
|
|
86
|
+
document.querySelector(`#${element.getAttribute('aria-controls')}`)
|
|
87
|
+
);
|
|
86
88
|
|
|
87
89
|
element.id ||= `${this.id}-item-${index + 1}`;
|
|
88
|
-
element.tabIndex ||= isSelected
|
|
90
|
+
element.tabIndex ||= isSelected ? 0 : -1;
|
|
89
91
|
element.setAttribute(this.childSelectedAttr, String(isSelected));
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
|
|
93
|
+
if (controlTarget) {
|
|
94
|
+
controlTarget.inert = !isSelected;
|
|
95
|
+
controlTarget.setAttribute('aria-labelledby', element.id);
|
|
96
|
+
controlTarget.setAttribute('aria-hidden', String(!isSelected));
|
|
97
|
+
|
|
98
|
+
if (isSelected) {
|
|
99
|
+
controlTarget.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'auto' });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
92
102
|
});
|
|
93
103
|
|
|
94
104
|
parent.addEventListener('click', (event) => {
|
|
@@ -100,39 +110,66 @@ class Group {
|
|
|
100
110
|
parent.addEventListener('keydown', (event) => {
|
|
101
111
|
this.onKeyDown(event);
|
|
102
112
|
});
|
|
113
|
+
|
|
114
|
+
parent.dispatchEvent(new CustomEvent('initialized'));
|
|
103
115
|
}
|
|
104
116
|
|
|
105
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* CSS selector to retrieve the members.
|
|
119
|
+
* @type {string}
|
|
120
|
+
*/
|
|
106
121
|
get selector() {
|
|
107
122
|
return this.childRoles.map((role) => `[role="${role}"]`).join(',');
|
|
108
123
|
}
|
|
109
124
|
|
|
110
|
-
/**
|
|
125
|
+
/**
|
|
126
|
+
* List of all the members.
|
|
127
|
+
* @type {HTMLElement[]}
|
|
128
|
+
*/
|
|
111
129
|
get allMembers() {
|
|
112
130
|
return /** @type {HTMLElement[]} */ ([...this.parent.querySelectorAll(this.selector)]);
|
|
113
131
|
}
|
|
114
132
|
|
|
115
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* List of the enabled and visible members.
|
|
135
|
+
* @type {HTMLElement[]}
|
|
136
|
+
*/
|
|
116
137
|
get activeMembers() {
|
|
117
138
|
return this.allMembers.filter(
|
|
118
139
|
(element) => !element.matches('[aria-disabled="true"], [aria-hidden="true"]'),
|
|
119
140
|
);
|
|
120
141
|
}
|
|
121
142
|
|
|
122
|
-
/**
|
|
143
|
+
/**
|
|
144
|
+
* Get the currently selected member.
|
|
145
|
+
* @type {HTMLElement | undefined}
|
|
146
|
+
*/
|
|
147
|
+
get selected() {
|
|
148
|
+
return this.activeMembers.find((element) =>
|
|
149
|
+
element.matches(`[${this.childSelectedAttr}="true"]`),
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Whether the parent is disabled.
|
|
155
|
+
* @type {boolean}
|
|
156
|
+
*/
|
|
123
157
|
get isDisabled() {
|
|
124
158
|
return this.parent.matches('[aria-disabled="true"]');
|
|
125
159
|
}
|
|
126
160
|
|
|
127
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* Whether the parent is read-only.
|
|
163
|
+
* @type {boolean}
|
|
164
|
+
*/
|
|
128
165
|
get isReadOnly() {
|
|
129
166
|
return this.parent.matches('[aria-readonly="true"]');
|
|
130
167
|
}
|
|
131
168
|
|
|
132
169
|
/**
|
|
133
170
|
* Select (and move focus to) the given target.
|
|
134
|
-
* @param {(MouseEvent | KeyboardEvent)} event Triggered event.
|
|
135
|
-
* @param {HTMLElement} newTarget Target element.
|
|
171
|
+
* @param {(MouseEvent | KeyboardEvent)} event - Triggered event.
|
|
172
|
+
* @param {HTMLElement} newTarget - Target element.
|
|
136
173
|
*/
|
|
137
174
|
selectTarget(event, newTarget) {
|
|
138
175
|
if (this.isDisabled || this.isReadOnly) {
|
|
@@ -164,7 +201,8 @@ class Group {
|
|
|
164
201
|
const singleSelect = isMenuItemRadio || !multiSelect;
|
|
165
202
|
const isTarget = element === newTarget;
|
|
166
203
|
const isSelected = element.matches(`[${this.childSelectedAttr}="true"]`);
|
|
167
|
-
const
|
|
204
|
+
const controlTargetId = element.getAttribute('aria-controls');
|
|
205
|
+
const controlTarget = controlTargetId ? document.getElementById(controlTargetId) : null;
|
|
168
206
|
|
|
169
207
|
if (multiSelect && isTarget && (selectByClick || selectByKeydown)) {
|
|
170
208
|
element.setAttribute(this.childSelectedAttr, String(!isSelected));
|
|
@@ -202,13 +240,18 @@ class Group {
|
|
|
202
240
|
element.classList.toggle('focused', isTarget);
|
|
203
241
|
}
|
|
204
242
|
|
|
205
|
-
if (
|
|
206
|
-
|
|
243
|
+
if (controlTarget) {
|
|
244
|
+
controlTarget.inert = !isTarget;
|
|
245
|
+
controlTarget.setAttribute('aria-hidden', String(!isTarget));
|
|
246
|
+
|
|
247
|
+
if (isTarget) {
|
|
248
|
+
controlTarget.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'auto' });
|
|
249
|
+
}
|
|
207
250
|
}
|
|
208
251
|
|
|
209
252
|
if (isTarget) {
|
|
210
253
|
this.parent.setAttribute('aria-activedescendant', element.id);
|
|
211
|
-
element.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: '
|
|
254
|
+
element.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'auto' });
|
|
212
255
|
}
|
|
213
256
|
});
|
|
214
257
|
|
|
@@ -224,7 +267,7 @@ class Group {
|
|
|
224
267
|
|
|
225
268
|
/**
|
|
226
269
|
* Handle the `click` event on the widget.
|
|
227
|
-
* @param {MouseEvent} event `click` event.
|
|
270
|
+
* @param {MouseEvent} event - `click` event.
|
|
228
271
|
*/
|
|
229
272
|
onClick(event) {
|
|
230
273
|
// eslint-disable-next-line prefer-destructuring
|
|
@@ -240,7 +283,7 @@ class Group {
|
|
|
240
283
|
|
|
241
284
|
/**
|
|
242
285
|
* Handle the `keydown` event on the widget.
|
|
243
|
-
* @param {KeyboardEvent} event `keydown` event.
|
|
286
|
+
* @param {KeyboardEvent} event - `keydown` event.
|
|
244
287
|
*/
|
|
245
288
|
onKeyDown(event) {
|
|
246
289
|
const { key, ctrlKey, metaKey, shiftKey, altKey } = event;
|
|
@@ -349,7 +392,7 @@ class Group {
|
|
|
349
392
|
|
|
350
393
|
/**
|
|
351
394
|
* Activate a new group.
|
|
352
|
-
* @param {HTMLElement} parent Parent element.
|
|
395
|
+
* @param {HTMLElement} parent - Parent element.
|
|
353
396
|
*/
|
|
354
397
|
export const activateGroup = (parent) => {
|
|
355
398
|
(async () => {
|
|
@@ -6,19 +6,27 @@ export function activatePopup(...args: any[]): Popup;
|
|
|
6
6
|
declare class Popup {
|
|
7
7
|
/**
|
|
8
8
|
* Initialize a new `Popup` instance.
|
|
9
|
-
* @param {HTMLButtonElement} anchorElement `<button>` element that triggers the popup.
|
|
10
|
-
* @param {HTMLDialogElement} popupElement `<dialog>` element to be used for the popup.
|
|
11
|
-
* @param {PopupPosition} position Where to show the popup content.
|
|
12
|
-
* @param {HTMLElement} [positionBaseElement] The base element of the `position`. If omitted,
|
|
13
|
-
* will be the `anchorElement`.
|
|
9
|
+
* @param {HTMLButtonElement} anchorElement - `<button>` element that triggers the popup.
|
|
10
|
+
* @param {HTMLDialogElement} popupElement - `<dialog>` element to be used for the popup.
|
|
11
|
+
* @param {PopupPosition} position - Where to show the popup content.
|
|
12
|
+
* @param {HTMLElement} [positionBaseElement] - The base element of the `position`. If omitted,
|
|
13
|
+
* this will be the `anchorElement`.
|
|
14
14
|
*/
|
|
15
|
-
constructor(anchorElement: HTMLButtonElement, popupElement: HTMLDialogElement, position: PopupPosition, positionBaseElement?: HTMLElement);
|
|
15
|
+
constructor(anchorElement: HTMLButtonElement, popupElement: HTMLDialogElement, position: PopupPosition, positionBaseElement?: HTMLElement | undefined);
|
|
16
16
|
open: import("svelte/store").Writable<boolean>;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
/**
|
|
18
|
+
* @type {import('svelte/store').Writable<{
|
|
19
|
+
* inset: string | undefined,
|
|
20
|
+
* zIndex: number | undefined,
|
|
21
|
+
* width: string | undefined,
|
|
22
|
+
* height: string | undefined,
|
|
23
|
+
* }>}
|
|
24
|
+
*/
|
|
25
|
+
style: import('svelte/store').Writable<{
|
|
26
|
+
inset: string | undefined;
|
|
27
|
+
zIndex: number | undefined;
|
|
28
|
+
width: string | undefined;
|
|
29
|
+
height: string | undefined;
|
|
22
30
|
}>;
|
|
23
31
|
observer: IntersectionObserver;
|
|
24
32
|
anchorElement: HTMLButtonElement;
|
|
@@ -26,9 +34,15 @@ declare class Popup {
|
|
|
26
34
|
position: PopupPosition;
|
|
27
35
|
positionBaseElement: HTMLElement;
|
|
28
36
|
id: string;
|
|
29
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Whether the anchor element is disabled.
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
*/
|
|
30
41
|
get isDisabled(): boolean;
|
|
31
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Whether the anchor element is read-only.
|
|
44
|
+
* @type {boolean}
|
|
45
|
+
*/
|
|
32
46
|
get isReadOnly(): boolean;
|
|
33
47
|
/**
|
|
34
48
|
* Check the position of the anchor element.
|
|
@@ -9,6 +9,14 @@ import { getRandomId } from './util';
|
|
|
9
9
|
class Popup {
|
|
10
10
|
open = writable(false);
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* @type {import('svelte/store').Writable<{
|
|
14
|
+
* inset: string | undefined,
|
|
15
|
+
* zIndex: number | undefined,
|
|
16
|
+
* width: string | undefined,
|
|
17
|
+
* height: string | undefined,
|
|
18
|
+
* }>}
|
|
19
|
+
*/
|
|
12
20
|
style = writable({ inset: undefined, zIndex: undefined, width: undefined, height: undefined });
|
|
13
21
|
|
|
14
22
|
observer = new IntersectionObserver((entries) => {
|
|
@@ -18,7 +26,7 @@ class Popup {
|
|
|
18
26
|
}
|
|
19
27
|
|
|
20
28
|
const { scrollHeight: contentHeight, scrollWidth: contentWidth } =
|
|
21
|
-
this.popupElement.querySelector('.content');
|
|
29
|
+
/** @type {HTMLElement} */ (this.popupElement.querySelector('.content'));
|
|
22
30
|
|
|
23
31
|
const topMargin = intersectionRect.top - 8;
|
|
24
32
|
const bottomMargin = rootBounds.height - intersectionRect.bottom - 8;
|
|
@@ -86,11 +94,11 @@ class Popup {
|
|
|
86
94
|
|
|
87
95
|
/**
|
|
88
96
|
* Initialize a new `Popup` instance.
|
|
89
|
-
* @param {HTMLButtonElement} anchorElement `<button>` element that triggers the popup.
|
|
90
|
-
* @param {HTMLDialogElement} popupElement `<dialog>` element to be used for the popup.
|
|
91
|
-
* @param {PopupPosition} position Where to show the popup content.
|
|
92
|
-
* @param {HTMLElement} [positionBaseElement] The base element of the `position`. If omitted,
|
|
93
|
-
* will be the `anchorElement`.
|
|
97
|
+
* @param {HTMLButtonElement} anchorElement - `<button>` element that triggers the popup.
|
|
98
|
+
* @param {HTMLDialogElement} popupElement - `<dialog>` element to be used for the popup.
|
|
99
|
+
* @param {PopupPosition} position - Where to show the popup content.
|
|
100
|
+
* @param {HTMLElement} [positionBaseElement] - The base element of the `position`. If omitted,
|
|
101
|
+
* this will be the `anchorElement`.
|
|
94
102
|
*/
|
|
95
103
|
constructor(anchorElement, popupElement, position, positionBaseElement) {
|
|
96
104
|
this.anchorElement = anchorElement;
|
|
@@ -157,12 +165,18 @@ class Popup {
|
|
|
157
165
|
});
|
|
158
166
|
}
|
|
159
167
|
|
|
160
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Whether the anchor element is disabled.
|
|
170
|
+
* @type {boolean}
|
|
171
|
+
*/
|
|
161
172
|
get isDisabled() {
|
|
162
173
|
return this.anchorElement.matches('[aria-disabled="true"]');
|
|
163
174
|
}
|
|
164
175
|
|
|
165
|
-
/**
|
|
176
|
+
/**
|
|
177
|
+
* Whether the anchor element is read-only.
|
|
178
|
+
* @type {boolean}
|
|
179
|
+
*/
|
|
166
180
|
get isReadOnly() {
|
|
167
181
|
return this.anchorElement.matches('[aria-readonly="true"]');
|
|
168
182
|
}
|
|
@@ -178,7 +192,7 @@ class Popup {
|
|
|
178
192
|
|
|
179
193
|
/**
|
|
180
194
|
* Activate a new popup.
|
|
181
|
-
* @param {...any} args Arguments.
|
|
195
|
+
* @param {...any} args - Arguments.
|
|
182
196
|
* @returns {Popup} New popup.
|
|
183
197
|
*/
|
|
184
198
|
// @ts-ignore
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export function getRandomId(prefix?: string, length?: number): string;
|
|
1
|
+
export function getRandomId(prefix?: string | undefined, length?: number | undefined): string;
|
|
2
2
|
export function isObject(input: any): boolean;
|
|
3
|
-
export function sleep(ms?: number): Promise<void>;
|
|
3
|
+
export function sleep(ms?: number | undefined): Promise<void>;
|
package/package/services/util.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
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.
|
|
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
5
|
* @returns {string} Generated ID.
|
|
6
6
|
*/
|
|
7
7
|
export const getRandomId = (prefix = 'e', length = 7) =>
|
|
8
8
|
[
|
|
9
9
|
prefix,
|
|
10
10
|
new Array(length)
|
|
11
|
-
.fill()
|
|
11
|
+
.fill(0)
|
|
12
12
|
.map(() => '0123456789abcdef'[Math.floor(Math.random() * 12)])
|
|
13
13
|
.join(''),
|
|
14
14
|
].join('-');
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Check if the given input is a simple object.
|
|
18
|
-
* @param {*} input Input, probably an object.
|
|
18
|
+
* @param {*} input - Input, probably an object.
|
|
19
19
|
* @returns {boolean} Result.
|
|
20
20
|
*/
|
|
21
21
|
export const isObject = (input) =>
|
|
@@ -24,7 +24,7 @@ export const isObject = (input) =>
|
|
|
24
24
|
/**
|
|
25
25
|
* Return a simple `Promise` to resolve in the given time, making it easier to wait for a bit in the
|
|
26
26
|
* code, particularly while making sequential HTTP requests.
|
|
27
|
-
* @param {number} [ms] Milliseconds to wait.
|
|
27
|
+
* @param {number} [ms] - Milliseconds to wait.
|
|
28
28
|
* @returns {Promise<void>} Nothing.
|
|
29
29
|
*/
|
|
30
30
|
export const sleep = (ms = 1000) =>
|
package/package/styles/core.scss
CHANGED
|
@@ -222,6 +222,7 @@
|
|
|
222
222
|
--sui-textbox-multiline-min-width: 480px;
|
|
223
223
|
--sui-textbox-multiline-line-height: var(--sui-line-height-comfortable);
|
|
224
224
|
// Tab
|
|
225
|
+
--sui-tab-height: var(--sui-control-medium-height);
|
|
225
226
|
--sui-tab-small-height: var(--sui-control-small-height);
|
|
226
227
|
--sui-tab-medium-height: var(--sui-control-medium-height);
|
|
227
228
|
--sui-tab-large-height: var(--sui-control-large-height);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sveltia/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -23,36 +23,36 @@
|
|
|
23
23
|
"test:unit": "vitest"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"svelte": "^4.2.
|
|
26
|
+
"svelte": "^4.2.8"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@playwright/test": "^1.40.
|
|
30
|
-
"@sveltejs/adapter-auto": "
|
|
31
|
-
"@sveltejs/kit": "^
|
|
32
|
-
"@sveltejs/package": "^2.2.
|
|
33
|
-
"
|
|
34
|
-
"
|
|
29
|
+
"@playwright/test": "^1.40.1",
|
|
30
|
+
"@sveltejs/adapter-auto": "^3.1.0",
|
|
31
|
+
"@sveltejs/kit": "^2.3.2",
|
|
32
|
+
"@sveltejs/package": "^2.2.5",
|
|
33
|
+
"@sveltejs/vite-plugin-svelte": "^3.0.1",
|
|
34
|
+
"cspell": "^8.3.2",
|
|
35
|
+
"eslint": "^8.56.0",
|
|
35
36
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
36
|
-
"eslint-config-prettier": "^9.
|
|
37
|
-
"eslint-plugin-import": "^2.29.
|
|
38
|
-
"eslint-plugin-jsdoc": "^
|
|
37
|
+
"eslint-config-prettier": "^9.1.0",
|
|
38
|
+
"eslint-plugin-import": "^2.29.1",
|
|
39
|
+
"eslint-plugin-jsdoc": "^48.0.2",
|
|
39
40
|
"eslint-plugin-svelte": "^2.35.1",
|
|
40
41
|
"npm-run-all": "^4.1.5",
|
|
41
|
-
"postcss": "^8.4.
|
|
42
|
-
"postcss-html": "^1.
|
|
43
|
-
"prettier": "^3.
|
|
42
|
+
"postcss": "^8.4.33",
|
|
43
|
+
"postcss-html": "^1.6.0",
|
|
44
|
+
"prettier": "^3.2.2",
|
|
44
45
|
"prettier-plugin-svelte": "^3.1.2",
|
|
45
|
-
"sass": "^1.69.
|
|
46
|
-
"stylelint": "^
|
|
47
|
-
"stylelint-config-recommended-scss": "^
|
|
48
|
-
"stylelint-scss": "^
|
|
49
|
-
"svelte-check": "^3.6.
|
|
46
|
+
"sass": "^1.69.7",
|
|
47
|
+
"stylelint": "^16.1.0",
|
|
48
|
+
"stylelint-config-recommended-scss": "^14.0.0",
|
|
49
|
+
"stylelint-scss": "^6.0.0",
|
|
50
|
+
"svelte-check": "^3.6.3",
|
|
50
51
|
"svelte-i18n": "^4.0.0",
|
|
51
|
-
"svelte-
|
|
52
|
-
"svelte-preprocess": "^5.1.1",
|
|
52
|
+
"svelte-preprocess": "^5.1.3",
|
|
53
53
|
"tslib": "^2.6.2",
|
|
54
|
-
"vite": "^
|
|
55
|
-
"vitest": "^
|
|
54
|
+
"vite": "^5.0.11",
|
|
55
|
+
"vitest": "^1.2.0"
|
|
56
56
|
},
|
|
57
57
|
"exports": {
|
|
58
58
|
"./package.json": "./package.json",
|
|
@@ -296,6 +296,11 @@
|
|
|
296
296
|
"svelte": "./package/components/table/table.svelte",
|
|
297
297
|
"default": "./package/components/table/table.svelte"
|
|
298
298
|
},
|
|
299
|
+
"./components/tabs/tab-box.svelte": {
|
|
300
|
+
"types": "./package/components/tabs/tab-box.svelte.d.ts",
|
|
301
|
+
"svelte": "./package/components/tabs/tab-box.svelte",
|
|
302
|
+
"default": "./package/components/tabs/tab-box.svelte"
|
|
303
|
+
},
|
|
299
304
|
"./components/tabs/tab-list.svelte": {
|
|
300
305
|
"types": "./package/components/tabs/tab-list.svelte.d.ts",
|
|
301
306
|
"svelte": "./package/components/tabs/tab-list.svelte",
|
|
@@ -306,6 +311,11 @@
|
|
|
306
311
|
"svelte": "./package/components/tabs/tab-panel.svelte",
|
|
307
312
|
"default": "./package/components/tabs/tab-panel.svelte"
|
|
308
313
|
},
|
|
314
|
+
"./components/tabs/tab-panels.svelte": {
|
|
315
|
+
"types": "./package/components/tabs/tab-panels.svelte.d.ts",
|
|
316
|
+
"svelte": "./package/components/tabs/tab-panels.svelte",
|
|
317
|
+
"default": "./package/components/tabs/tab-panels.svelte"
|
|
318
|
+
},
|
|
309
319
|
"./components/tabs/tab.svelte": {
|
|
310
320
|
"types": "./package/components/tabs/tab.svelte.d.ts",
|
|
311
321
|
"svelte": "./package/components/tabs/tab.svelte",
|
|
@@ -562,12 +572,18 @@
|
|
|
562
572
|
"components/table/table.svelte": [
|
|
563
573
|
"./package/components/table/table.svelte.d.ts"
|
|
564
574
|
],
|
|
575
|
+
"components/tabs/tab-box.svelte": [
|
|
576
|
+
"./package/components/tabs/tab-box.svelte.d.ts"
|
|
577
|
+
],
|
|
565
578
|
"components/tabs/tab-list.svelte": [
|
|
566
579
|
"./package/components/tabs/tab-list.svelte.d.ts"
|
|
567
580
|
],
|
|
568
581
|
"components/tabs/tab-panel.svelte": [
|
|
569
582
|
"./package/components/tabs/tab-panel.svelte.d.ts"
|
|
570
583
|
],
|
|
584
|
+
"components/tabs/tab-panels.svelte": [
|
|
585
|
+
"./package/components/tabs/tab-panels.svelte.d.ts"
|
|
586
|
+
],
|
|
571
587
|
"components/tabs/tab.svelte": [
|
|
572
588
|
"./package/components/tabs/tab.svelte.d.ts"
|
|
573
589
|
],
|