@sveltia/ui 0.10.6 → 0.10.7
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/button/button.svelte +3 -0
- package/package/components/button/button.svelte.d.ts +6 -0
- package/package/components/button/select-button.svelte +1 -0
- package/package/components/button/select-button.svelte.d.ts +2 -0
- package/package/components/grid/grid-row.svelte +3 -0
- package/package/components/grid/grid-row.svelte.d.ts +6 -0
- package/package/components/listbox/option.svelte +3 -0
- package/package/components/listbox/option.svelte.d.ts +6 -0
- package/package/components/menu/menu-item.svelte +2 -0
- package/package/components/menu/menu-item.svelte.d.ts +4 -0
- package/package/components/radio/radio.svelte +2 -0
- package/package/components/radio/radio.svelte.d.ts +4 -0
- package/package/components/select/combobox.svelte +29 -5
- package/package/components/tabs/tab.svelte +2 -0
- package/package/components/tabs/tab.svelte.d.ts +4 -0
- package/package/components/toolbar/toolbar.svelte +8 -0
- package/package/components/util/app-shell.svelte +6 -1
- package/package/services/group.js +5 -0
- package/package/styles/core.scss +5 -0
- package/package/styles/variables.scss +1 -1
- package/package.json +6 -6
|
@@ -137,6 +137,7 @@
|
|
|
137
137
|
on:mouseenter
|
|
138
138
|
on:mouseleave
|
|
139
139
|
on:click
|
|
140
|
+
on:dblclick
|
|
140
141
|
on:dragover
|
|
141
142
|
on:dragleave
|
|
142
143
|
on:dragend
|
|
@@ -144,6 +145,8 @@
|
|
|
144
145
|
on:keydown
|
|
145
146
|
on:keyup
|
|
146
147
|
on:keypress
|
|
148
|
+
on:focus
|
|
149
|
+
on:blur
|
|
147
150
|
on:select={(/** @type {CustomEvent} */ event) => {
|
|
148
151
|
dispatch('select', event.detail);
|
|
149
152
|
}}
|
|
@@ -31,6 +31,7 @@ export default class Button extends SvelteComponent<{
|
|
|
31
31
|
mouseenter: MouseEvent;
|
|
32
32
|
mouseleave: MouseEvent;
|
|
33
33
|
click: MouseEvent;
|
|
34
|
+
dblclick: MouseEvent;
|
|
34
35
|
dragover: DragEvent;
|
|
35
36
|
dragleave: DragEvent;
|
|
36
37
|
dragend: DragEvent;
|
|
@@ -38,6 +39,8 @@ export default class Button extends SvelteComponent<{
|
|
|
38
39
|
keydown: KeyboardEvent;
|
|
39
40
|
keyup: KeyboardEvent;
|
|
40
41
|
keypress: KeyboardEvent;
|
|
42
|
+
focus: FocusEvent;
|
|
43
|
+
blur: FocusEvent;
|
|
41
44
|
select: CustomEvent<any>;
|
|
42
45
|
change: CustomEvent<any>;
|
|
43
46
|
} & {
|
|
@@ -137,6 +140,7 @@ declare const __propDef: {
|
|
|
137
140
|
mouseenter: MouseEvent;
|
|
138
141
|
mouseleave: MouseEvent;
|
|
139
142
|
click: MouseEvent;
|
|
143
|
+
dblclick: MouseEvent;
|
|
140
144
|
dragover: DragEvent;
|
|
141
145
|
dragleave: DragEvent;
|
|
142
146
|
dragend: DragEvent;
|
|
@@ -144,6 +148,8 @@ declare const __propDef: {
|
|
|
144
148
|
keydown: KeyboardEvent;
|
|
145
149
|
keyup: KeyboardEvent;
|
|
146
150
|
keypress: KeyboardEvent;
|
|
151
|
+
focus: FocusEvent;
|
|
152
|
+
blur: FocusEvent;
|
|
147
153
|
select: CustomEvent<any>;
|
|
148
154
|
change: CustomEvent<any>;
|
|
149
155
|
} & {
|
|
@@ -19,6 +19,7 @@ export default class SelectButton extends SvelteComponent<{
|
|
|
19
19
|
selected?: boolean | undefined;
|
|
20
20
|
}, {
|
|
21
21
|
click: MouseEvent;
|
|
22
|
+
dblclick: MouseEvent;
|
|
22
23
|
select: CustomEvent<any>;
|
|
23
24
|
change: CustomEvent<any>;
|
|
24
25
|
} & {
|
|
@@ -52,6 +53,7 @@ declare const __propDef: {
|
|
|
52
53
|
};
|
|
53
54
|
events: {
|
|
54
55
|
click: MouseEvent;
|
|
56
|
+
dblclick: MouseEvent;
|
|
55
57
|
select: CustomEvent<any>;
|
|
56
58
|
change: CustomEvent<any>;
|
|
57
59
|
} & {
|
|
@@ -12,6 +12,9 @@ export default class GridRow extends SvelteComponent<{
|
|
|
12
12
|
selected?: boolean | undefined;
|
|
13
13
|
}, {
|
|
14
14
|
click: MouseEvent;
|
|
15
|
+
dblclick: MouseEvent;
|
|
16
|
+
focus: FocusEvent;
|
|
17
|
+
blur: FocusEvent;
|
|
15
18
|
select: CustomEvent<any>;
|
|
16
19
|
change: CustomEvent<any>;
|
|
17
20
|
} & {
|
|
@@ -32,6 +35,9 @@ declare const __propDef: {
|
|
|
32
35
|
};
|
|
33
36
|
events: {
|
|
34
37
|
click: MouseEvent;
|
|
38
|
+
dblclick: MouseEvent;
|
|
39
|
+
focus: FocusEvent;
|
|
40
|
+
blur: FocusEvent;
|
|
35
41
|
select: CustomEvent<any>;
|
|
36
42
|
change: CustomEvent<any>;
|
|
37
43
|
} & {
|
|
@@ -16,6 +16,9 @@ export default class Option extends SvelteComponent<{
|
|
|
16
16
|
selected?: boolean | undefined;
|
|
17
17
|
}, {
|
|
18
18
|
click: MouseEvent;
|
|
19
|
+
dblclick: MouseEvent;
|
|
20
|
+
focus: FocusEvent;
|
|
21
|
+
blur: FocusEvent;
|
|
19
22
|
dragover: DragEvent;
|
|
20
23
|
dragleave: DragEvent;
|
|
21
24
|
dragend: DragEvent;
|
|
@@ -51,6 +54,9 @@ declare const __propDef: {
|
|
|
51
54
|
};
|
|
52
55
|
events: {
|
|
53
56
|
click: MouseEvent;
|
|
57
|
+
dblclick: MouseEvent;
|
|
58
|
+
focus: FocusEvent;
|
|
59
|
+
blur: FocusEvent;
|
|
54
60
|
dragover: DragEvent;
|
|
55
61
|
dragleave: DragEvent;
|
|
56
62
|
dragend: DragEvent;
|
|
@@ -16,6 +16,8 @@ export default class MenuItem extends SvelteComponent<{
|
|
|
16
16
|
iconLabel?: string | undefined;
|
|
17
17
|
}, {
|
|
18
18
|
click: MouseEvent;
|
|
19
|
+
focus: FocusEvent;
|
|
20
|
+
blur: FocusEvent;
|
|
19
21
|
select: CustomEvent<any>;
|
|
20
22
|
change: CustomEvent<any>;
|
|
21
23
|
} & {
|
|
@@ -49,6 +51,8 @@ declare const __propDef: {
|
|
|
49
51
|
};
|
|
50
52
|
events: {
|
|
51
53
|
click: MouseEvent;
|
|
54
|
+
focus: FocusEvent;
|
|
55
|
+
blur: FocusEvent;
|
|
52
56
|
select: CustomEvent<any>;
|
|
53
57
|
change: CustomEvent<any>;
|
|
54
58
|
} & {
|
|
@@ -17,6 +17,8 @@ export default class Radio extends SvelteComponent<{
|
|
|
17
17
|
value?: string | undefined;
|
|
18
18
|
hidden?: boolean | undefined;
|
|
19
19
|
}, {
|
|
20
|
+
focus: FocusEvent;
|
|
21
|
+
blur: FocusEvent;
|
|
20
22
|
select: CustomEvent<any>;
|
|
21
23
|
change: CustomEvent<any>;
|
|
22
24
|
} & {
|
|
@@ -41,6 +43,8 @@ declare const __propDef: {
|
|
|
41
43
|
hidden?: boolean | undefined;
|
|
42
44
|
};
|
|
43
45
|
events: {
|
|
46
|
+
focus: FocusEvent;
|
|
47
|
+
blur: FocusEvent;
|
|
44
48
|
select: CustomEvent<any>;
|
|
45
49
|
change: CustomEvent<any>;
|
|
46
50
|
} & {
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
|
|
65
65
|
const dispatch = createEventDispatcher();
|
|
66
66
|
const id = getRandomId('combobox');
|
|
67
|
+
const selectedSelector = '[role="option"][aria-selected="true"]';
|
|
67
68
|
/** @type {HTMLElement} */
|
|
68
69
|
let comboboxElement;
|
|
69
70
|
/** @type {TextInput | undefined} */
|
|
@@ -75,22 +76,40 @@
|
|
|
75
76
|
let label = '';
|
|
76
77
|
|
|
77
78
|
/**
|
|
78
|
-
* Update the
|
|
79
|
+
* Update the {@link label} and selected option when the {@link value} is changed.
|
|
80
|
+
*/
|
|
81
|
+
const onChange = () => {
|
|
82
|
+
const selected = popupComponent?.content?.querySelector(selectedSelector);
|
|
83
|
+
|
|
84
|
+
const target = /** @type {HTMLButtonElement} */ (
|
|
85
|
+
popupComponent?.content?.querySelector(`[role="option"][value="${value}"]`)
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
if (target) {
|
|
89
|
+
label = target.querySelector('.label')?.textContent || target.textContent || target.value;
|
|
90
|
+
|
|
91
|
+
if (selected !== target) {
|
|
92
|
+
selected?.setAttribute('aria-selected', 'false');
|
|
93
|
+
target.setAttribute('aria-selected', 'true');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Update the {@link value} whenever an option is selected.
|
|
79
100
|
* @param {HTMLButtonElement} target - Selected option.
|
|
80
101
|
*/
|
|
81
102
|
const onSelect = (target) => {
|
|
82
103
|
// @todo support more types
|
|
83
104
|
value = target.dataset.type === 'number' ? Number(target.value) : target.value;
|
|
84
|
-
|
|
105
|
+
onChange();
|
|
85
106
|
dispatch('change', { target: inputComponent?.element, value });
|
|
86
107
|
};
|
|
87
108
|
|
|
88
109
|
$: {
|
|
89
110
|
if (popupComponent?.content) {
|
|
90
111
|
window.requestAnimationFrame(() => {
|
|
91
|
-
const selected = popupComponent?.content?.querySelector(
|
|
92
|
-
'[role="option"][aria-selected="true"]',
|
|
93
|
-
);
|
|
112
|
+
const selected = popupComponent?.content?.querySelector(selectedSelector);
|
|
94
113
|
|
|
95
114
|
if (selected) {
|
|
96
115
|
onSelect(/** @type {HTMLButtonElement} */ (selected));
|
|
@@ -98,6 +117,11 @@
|
|
|
98
117
|
});
|
|
99
118
|
}
|
|
100
119
|
}
|
|
120
|
+
|
|
121
|
+
$: {
|
|
122
|
+
void value;
|
|
123
|
+
onChange();
|
|
124
|
+
}
|
|
101
125
|
</script>
|
|
102
126
|
|
|
103
127
|
<div
|
|
@@ -13,6 +13,8 @@ export default class Tab extends SvelteComponent<{
|
|
|
13
13
|
hidden?: boolean | undefined;
|
|
14
14
|
selected?: boolean | undefined;
|
|
15
15
|
}, {
|
|
16
|
+
focus: FocusEvent;
|
|
17
|
+
blur: FocusEvent;
|
|
16
18
|
select: CustomEvent<any>;
|
|
17
19
|
change: CustomEvent<any>;
|
|
18
20
|
} & {
|
|
@@ -40,6 +42,8 @@ declare const __propDef: {
|
|
|
40
42
|
selected?: boolean | undefined;
|
|
41
43
|
};
|
|
42
44
|
events: {
|
|
45
|
+
focus: FocusEvent;
|
|
46
|
+
blur: FocusEvent;
|
|
43
47
|
select: CustomEvent<any>;
|
|
44
48
|
change: CustomEvent<any>;
|
|
45
49
|
} & {
|
|
@@ -78,13 +78,21 @@
|
|
|
78
78
|
background-color: var(--sui-selected-background-color);
|
|
79
79
|
}
|
|
80
80
|
[role=toolbar] :global(h2) {
|
|
81
|
+
flex: auto;
|
|
81
82
|
display: flex;
|
|
82
83
|
align-items: center;
|
|
83
84
|
gap: 8px;
|
|
84
85
|
margin: 0;
|
|
85
86
|
padding: 0 8px;
|
|
87
|
+
min-width: 0;
|
|
86
88
|
font-size: var(--sui-font-size-large);
|
|
87
89
|
}
|
|
90
|
+
[role=toolbar] :global(h2) :global(strong) {
|
|
91
|
+
display: block;
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
text-overflow: ellipsis;
|
|
94
|
+
white-space: nowrap;
|
|
95
|
+
}
|
|
88
96
|
[role=toolbar] :global(h2) :global(span) {
|
|
89
97
|
font-size: var(--sui-font-size-small);
|
|
90
98
|
font-weight: normal;
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
--sui-font-weight-normal: 300;
|
|
172
172
|
--sui-font-weight-bold: 600;
|
|
173
173
|
--sui-font-family-monospace: "Noto Sans Mono", monospace;
|
|
174
|
-
--sui-font-size-monospace:
|
|
174
|
+
--sui-font-size-monospace: 12.5px;
|
|
175
175
|
--sui-line-height-default: 1.25;
|
|
176
176
|
--sui-line-height-compact: 1.5;
|
|
177
177
|
--sui-line-height-comfortable: 1.75;
|
|
@@ -424,6 +424,10 @@
|
|
|
424
424
|
}
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
+
:global(::selection) {
|
|
428
|
+
background-color: var(--sui-primary-accent-color-translucent);
|
|
429
|
+
}
|
|
430
|
+
|
|
427
431
|
:global(*) {
|
|
428
432
|
-webkit-tap-highlight-color: transparent;
|
|
429
433
|
}
|
|
@@ -465,6 +469,7 @@
|
|
|
465
469
|
:global(code),
|
|
466
470
|
:global(pre) {
|
|
467
471
|
font-family: var(--sui-font-family-monospace);
|
|
472
|
+
font-size: var(--sui-font-size-monospace);
|
|
468
473
|
}
|
|
469
474
|
|
|
470
475
|
:global(pre) {
|
|
@@ -252,10 +252,15 @@ class Group {
|
|
|
252
252
|
|
|
253
253
|
if (isTarget) {
|
|
254
254
|
element.focus();
|
|
255
|
+
element.dispatchEvent(new CustomEvent('focus'));
|
|
255
256
|
}
|
|
256
257
|
});
|
|
257
258
|
} else {
|
|
258
259
|
element.classList.toggle('focused', isTarget);
|
|
260
|
+
|
|
261
|
+
if (isTarget) {
|
|
262
|
+
element.dispatchEvent(new CustomEvent('focus'));
|
|
263
|
+
}
|
|
259
264
|
}
|
|
260
265
|
|
|
261
266
|
if (controlTarget) {
|
package/package/styles/core.scss
CHANGED
|
@@ -35,6 +35,10 @@
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
::selection {
|
|
39
|
+
background-color: var(--sui-primary-accent-color-translucent);
|
|
40
|
+
}
|
|
41
|
+
|
|
38
42
|
* {
|
|
39
43
|
-webkit-tap-highlight-color: transparent;
|
|
40
44
|
}
|
|
@@ -76,6 +80,7 @@ li {
|
|
|
76
80
|
code,
|
|
77
81
|
pre {
|
|
78
82
|
font-family: var(--sui-font-family-monospace);
|
|
83
|
+
font-size: var(--sui-font-size-monospace);
|
|
79
84
|
}
|
|
80
85
|
|
|
81
86
|
pre {
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
--sui-font-weight-normal: 300;
|
|
161
161
|
--sui-font-weight-bold: 600;
|
|
162
162
|
--sui-font-family-monospace: "Noto Sans Mono", monospace;
|
|
163
|
-
--sui-font-size-monospace:
|
|
163
|
+
--sui-font-size-monospace: 12.5px;
|
|
164
164
|
--sui-line-height-default: 1.25;
|
|
165
165
|
--sui-line-height-compact: 1.5;
|
|
166
166
|
--sui-line-height-comfortable: 1.75;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sveltia/ui",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@playwright/test": "^1.42.1",
|
|
30
30
|
"@sveltejs/adapter-auto": "^3.1.1",
|
|
31
|
-
"@sveltejs/kit": "^2.5.
|
|
31
|
+
"@sveltejs/kit": "^2.5.4",
|
|
32
32
|
"@sveltejs/package": "^2.3.0",
|
|
33
33
|
"@sveltejs/vite-plugin-svelte": "^3.0.2",
|
|
34
34
|
"cspell": "^8.6.0",
|
|
@@ -43,16 +43,16 @@
|
|
|
43
43
|
"postcss-html": "^1.6.0",
|
|
44
44
|
"prettier": "^3.2.5",
|
|
45
45
|
"prettier-plugin-svelte": "^3.2.2",
|
|
46
|
-
"sass": "^1.
|
|
46
|
+
"sass": "^1.72.0",
|
|
47
47
|
"stylelint": "^16.2.1",
|
|
48
48
|
"stylelint-config-recommended-scss": "^14.0.0",
|
|
49
49
|
"stylelint-scss": "^6.2.1",
|
|
50
|
-
"svelte-check": "^3.6.
|
|
50
|
+
"svelte-check": "^3.6.7",
|
|
51
51
|
"svelte-i18n": "^4.0.0",
|
|
52
52
|
"svelte-preprocess": "^5.1.3",
|
|
53
53
|
"tslib": "^2.6.2",
|
|
54
|
-
"vite": "^5.1.
|
|
55
|
-
"vitest": "^1.
|
|
54
|
+
"vite": "^5.1.6",
|
|
55
|
+
"vitest": "^1.4.0"
|
|
56
56
|
},
|
|
57
57
|
"exports": {
|
|
58
58
|
"./package.json": "./package.json",
|