@llui/components 0.0.5 → 0.0.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/dist/components/angle-slider.d.ts.map +1 -1
- package/dist/components/angle-slider.js +3 -1
- package/dist/components/carousel.d.ts +6 -6
- package/dist/components/carousel.d.ts.map +1 -1
- package/dist/components/carousel.js +10 -7
- package/dist/components/cascade-select.d.ts +1 -1
- package/dist/components/cascade-select.d.ts.map +1 -1
- package/dist/components/cascade-select.js +4 -1
- package/dist/components/clipboard.d.ts +1 -1
- package/dist/components/clipboard.d.ts.map +1 -1
- package/dist/components/clipboard.js +4 -1
- package/dist/components/color-picker.d.ts +4 -4
- package/dist/components/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker.js +7 -4
- package/dist/components/combobox.d.ts +1 -1
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/combobox.js +4 -2
- package/dist/components/date-input.d.ts +1 -1
- package/dist/components/date-input.d.ts.map +1 -1
- package/dist/components/date-input.js +4 -1
- package/dist/components/date-picker.d.ts +14 -2
- package/dist/components/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker.js +27 -19
- package/dist/components/dialog.d.ts +1 -1
- package/dist/components/dialog.d.ts.map +1 -1
- package/dist/components/dialog.js +4 -2
- package/dist/components/drawer.d.ts +1 -1
- package/dist/components/drawer.d.ts.map +1 -1
- package/dist/components/drawer.js +4 -2
- package/dist/components/enter-view.d.ts +73 -0
- package/dist/components/enter-view.d.ts.map +1 -0
- package/dist/components/enter-view.js +51 -0
- package/dist/components/file-upload.d.ts +5 -4
- package/dist/components/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload.js +6 -2
- package/dist/components/floating-panel.d.ts +4 -4
- package/dist/components/floating-panel.d.ts.map +1 -1
- package/dist/components/floating-panel.js +7 -4
- package/dist/components/form.d.ts +115 -0
- package/dist/components/form.d.ts.map +1 -0
- package/dist/components/form.js +102 -0
- package/dist/components/hover-card.d.ts +0 -1
- package/dist/components/hover-card.d.ts.map +1 -1
- package/dist/components/hover-card.js +0 -1
- package/dist/components/image-cropper.d.ts +1 -1
- package/dist/components/image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper.js +4 -1
- package/dist/components/in-view.d.ts +69 -0
- package/dist/components/in-view.d.ts.map +1 -0
- package/dist/components/in-view.js +51 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/navigation-menu.d.ts +1 -1
- package/dist/components/navigation-menu.d.ts.map +1 -1
- package/dist/components/navigation-menu.js +4 -1
- package/dist/components/number-input.d.ts +2 -2
- package/dist/components/number-input.d.ts.map +1 -1
- package/dist/components/number-input.js +5 -2
- package/dist/components/pagination.d.ts +3 -3
- package/dist/components/pagination.d.ts.map +1 -1
- package/dist/components/pagination.js +7 -4
- package/dist/components/password-input.d.ts.map +1 -1
- package/dist/components/password-input.js +8 -3
- package/dist/components/pin-input.d.ts.map +1 -1
- package/dist/components/pin-input.js +7 -4
- package/dist/components/popover.d.ts +1 -1
- package/dist/components/popover.d.ts.map +1 -1
- package/dist/components/popover.js +4 -2
- package/dist/components/progress.d.ts.map +1 -1
- package/dist/components/progress.js +2 -1
- package/dist/components/qr-code.d.ts +2 -2
- package/dist/components/qr-code.d.ts.map +1 -1
- package/dist/components/qr-code.js +5 -2
- package/dist/components/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group.js +3 -1
- package/dist/components/rating-group.d.ts.map +1 -1
- package/dist/components/rating-group.js +3 -1
- package/dist/components/scroll-area.d.ts +1 -0
- package/dist/components/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area.js +1 -0
- package/dist/components/signature-pad.d.ts +3 -3
- package/dist/components/signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad.js +6 -3
- package/dist/components/slider.d.ts.map +1 -1
- package/dist/components/slider.js +3 -1
- package/dist/components/sortable.d.ts +106 -0
- package/dist/components/sortable.d.ts.map +1 -0
- package/dist/components/sortable.js +97 -0
- package/dist/components/splitter.d.ts.map +1 -1
- package/dist/components/splitter.js +3 -1
- package/dist/components/steps.d.ts +1 -1
- package/dist/components/steps.d.ts.map +1 -1
- package/dist/components/steps.js +4 -1
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +3 -1
- package/dist/components/tags-input.d.ts +3 -4
- package/dist/components/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input.js +16 -11
- package/dist/components/theme-switch.d.ts +89 -0
- package/dist/components/theme-switch.d.ts.map +1 -0
- package/dist/components/theme-switch.js +96 -0
- package/dist/components/time-picker.d.ts +4 -4
- package/dist/components/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker.js +7 -4
- package/dist/components/timer.d.ts +3 -3
- package/dist/components/timer.d.ts.map +1 -1
- package/dist/components/timer.js +6 -3
- package/dist/components/toast.d.ts +3 -3
- package/dist/components/toast.d.ts.map +1 -1
- package/dist/components/toast.js +5 -2
- package/dist/components/toc.d.ts +2 -2
- package/dist/components/toc.d.ts.map +1 -1
- package/dist/components/toc.js +5 -2
- package/dist/components/toggle-group.d.ts +0 -1
- package/dist/components/toggle-group.d.ts.map +1 -1
- package/dist/components/toggle-group.js +3 -2
- package/dist/components/tour.d.ts +1 -1
- package/dist/components/tour.d.ts.map +1 -1
- package/dist/components/tour.js +4 -1
- package/dist/components/tree-view.d.ts.map +1 -1
- package/dist/components/tree-view.js +3 -1
- package/dist/format/cache.d.ts +3 -0
- package/dist/format/cache.d.ts.map +1 -0
- package/dist/format/cache.js +24 -0
- package/dist/format/defaults.d.ts +3 -0
- package/dist/format/defaults.d.ts.map +1 -0
- package/dist/format/defaults.js +4 -0
- package/dist/format/format-date.d.ts +41 -0
- package/dist/format/format-date.d.ts.map +1 -0
- package/dist/format/format-date.js +48 -0
- package/dist/format/format-display-name.d.ts +9 -0
- package/dist/format/format-display-name.d.ts.map +1 -0
- package/dist/format/format-display-name.js +21 -0
- package/dist/format/format-file-size.d.ts +7 -0
- package/dist/format/format-file-size.d.ts.map +1 -0
- package/dist/format/format-file-size.js +27 -0
- package/dist/format/format-list.d.ts +7 -0
- package/dist/format/format-list.d.ts.map +1 -0
- package/dist/format/format-list.js +12 -0
- package/dist/format/format-number.d.ts +19 -0
- package/dist/format/format-number.d.ts.map +1 -0
- package/dist/format/format-number.js +37 -0
- package/dist/format/format-plural.d.ts +16 -0
- package/dist/format/format-plural.d.ts.map +1 -0
- package/dist/format/format-plural.js +30 -0
- package/dist/format/format-relative-time.d.ts +8 -0
- package/dist/format/format-relative-time.d.ts.map +1 -0
- package/dist/format/format-relative-time.js +12 -0
- package/dist/format/index.d.ts +8 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +7 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/locale.d.ts +127 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +73 -0
- package/dist/styles/theme.css +2 -2
- package/dist/utils/direction.d.ts +11 -0
- package/dist/utils/direction.d.ts.map +1 -0
- package/dist/utils/direction.js +26 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/validators.d.ts +34 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +83 -0
- package/package.json +4 -3
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { useContext } from '@llui/dom';
|
|
2
|
+
import { flipArrow } from '../utils/direction';
|
|
3
|
+
import { LocaleContext } from '../locale';
|
|
1
4
|
export function init(opts = {}) {
|
|
2
5
|
return {
|
|
3
6
|
value: opts.value ?? [],
|
|
@@ -58,9 +61,10 @@ export function update(state, msg) {
|
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
export function connect(get, send, opts = {}) {
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
+
const locale = useContext(LocaleContext);
|
|
65
|
+
const inputLabel = opts.inputLabel ?? ((s) => locale(s).tagsInput.input);
|
|
66
|
+
const removeLabel = opts.removeLabel ?? ((s) => locale(s).tagsInput.remove);
|
|
67
|
+
const clearLabel = opts.clearLabel ?? ((s) => locale(s).tagsInput.clear);
|
|
64
68
|
const delimiters = opts.delimiters ?? [','];
|
|
65
69
|
const commitOnBlur = opts.commitOnBlur !== false;
|
|
66
70
|
const validate = opts.validate;
|
|
@@ -95,21 +99,22 @@ export function connect(get, send, opts = {}) {
|
|
|
95
99
|
send({ type: 'setInput', value: currentInput });
|
|
96
100
|
},
|
|
97
101
|
onKeyDown: (e) => {
|
|
98
|
-
|
|
102
|
+
const key = flipArrow(e.key, e.currentTarget);
|
|
103
|
+
if (key === 'Enter') {
|
|
99
104
|
e.preventDefault();
|
|
100
105
|
tryAddTag();
|
|
101
106
|
}
|
|
102
|
-
else if (delimiters.includes(
|
|
107
|
+
else if (delimiters.includes(key)) {
|
|
103
108
|
e.preventDefault();
|
|
104
109
|
tryAddTag();
|
|
105
110
|
}
|
|
106
|
-
else if (
|
|
111
|
+
else if (key === 'Backspace') {
|
|
107
112
|
const target = e.target;
|
|
108
113
|
if (target.value === '') {
|
|
109
114
|
send({ type: 'removeLast' });
|
|
110
115
|
}
|
|
111
116
|
}
|
|
112
|
-
else if (
|
|
117
|
+
else if (key === 'ArrowLeft') {
|
|
113
118
|
const target = e.target;
|
|
114
119
|
if (target.value === '') {
|
|
115
120
|
e.preventDefault();
|
|
@@ -124,7 +129,6 @@ export function connect(get, send, opts = {}) {
|
|
|
124
129
|
},
|
|
125
130
|
tag: (value, index) => ({
|
|
126
131
|
root: {
|
|
127
|
-
role: 'button',
|
|
128
132
|
tabIndex: (s) => (get(s).focusedIndex === index ? 0 : -1),
|
|
129
133
|
'data-scope': 'tags-input',
|
|
130
134
|
'data-part': 'tag',
|
|
@@ -133,15 +137,16 @@ export function connect(get, send, opts = {}) {
|
|
|
133
137
|
'data-focused': (s) => (get(s).focusedIndex === index ? '' : undefined),
|
|
134
138
|
onFocus: () => send({ type: 'focusTag', index }),
|
|
135
139
|
onKeyDown: (e) => {
|
|
136
|
-
|
|
140
|
+
const key = flipArrow(e.key, e.currentTarget);
|
|
141
|
+
if (key === 'ArrowLeft') {
|
|
137
142
|
e.preventDefault();
|
|
138
143
|
send({ type: 'focusTagPrev' });
|
|
139
144
|
}
|
|
140
|
-
else if (
|
|
145
|
+
else if (key === 'ArrowRight') {
|
|
141
146
|
e.preventDefault();
|
|
142
147
|
send({ type: 'focusTagNext' });
|
|
143
148
|
}
|
|
144
|
-
else if (
|
|
149
|
+
else if (key === 'Backspace' || key === 'Delete') {
|
|
145
150
|
e.preventDefault();
|
|
146
151
|
send({ type: 'removeTag', index });
|
|
147
152
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Send } from '@llui/dom';
|
|
2
|
+
/**
|
|
3
|
+
* Theme Switch — light/dark/system theme toggle.
|
|
4
|
+
*
|
|
5
|
+
* State machine tracks the user's explicit preference (`light`, `dark`, or
|
|
6
|
+
* `system`). Use `resolveTheme()` to compute the effective theme (reading
|
|
7
|
+
* `prefers-color-scheme` when `system`), and `applyTheme()` to set
|
|
8
|
+
* `data-theme` on `<html>` so CSS selectors like `[data-theme='dark']` work.
|
|
9
|
+
*
|
|
10
|
+
* Typically wired via `onMount` or in app init:
|
|
11
|
+
* ```ts
|
|
12
|
+
* onMount(() => {
|
|
13
|
+
* applyTheme(resolveTheme(state.theme.theme))
|
|
14
|
+
* })
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* For persistence, the app reducer reads/writes `localStorage.theme` in its
|
|
18
|
+
* `init`/`update` — the state machine itself is storage-agnostic.
|
|
19
|
+
*/
|
|
20
|
+
export type Theme = 'light' | 'dark' | 'system';
|
|
21
|
+
export type ResolvedTheme = 'light' | 'dark';
|
|
22
|
+
export interface ThemeSwitchState {
|
|
23
|
+
theme: Theme;
|
|
24
|
+
}
|
|
25
|
+
export type ThemeSwitchMsg = {
|
|
26
|
+
type: 'setTheme';
|
|
27
|
+
theme: Theme;
|
|
28
|
+
} | {
|
|
29
|
+
type: 'toggle';
|
|
30
|
+
};
|
|
31
|
+
export declare function init(theme?: Theme): ThemeSwitchState;
|
|
32
|
+
export declare function update(state: ThemeSwitchState, msg: ThemeSwitchMsg): [ThemeSwitchState, never[]];
|
|
33
|
+
/**
|
|
34
|
+
* Resolve a theme preference to the actual theme to apply. Returns 'dark' or
|
|
35
|
+
* 'light' based on the user's setting, consulting `prefers-color-scheme` for
|
|
36
|
+
* 'system'.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveTheme(theme: Theme): ResolvedTheme;
|
|
39
|
+
/**
|
|
40
|
+
* Set `data-theme="light"` or `data-theme="dark"` on `<html>`. CSS selectors
|
|
41
|
+
* like `[data-theme='dark'] { ... }` will then take effect.
|
|
42
|
+
*/
|
|
43
|
+
export declare function applyTheme(resolved: ResolvedTheme): void;
|
|
44
|
+
/**
|
|
45
|
+
* Listen for system theme changes (when user has selected 'system'). Returns
|
|
46
|
+
* a cleanup function. Call this in `onMount` and dispatch `setTheme` on
|
|
47
|
+
* change if you want the UI to auto-follow OS settings.
|
|
48
|
+
*/
|
|
49
|
+
export declare function watchSystemTheme(callback: (theme: ResolvedTheme) => void): () => void;
|
|
50
|
+
export interface ThemeSwitchParts<S> {
|
|
51
|
+
root: {
|
|
52
|
+
'data-scope': 'theme-switch';
|
|
53
|
+
'data-part': 'root';
|
|
54
|
+
role: 'group';
|
|
55
|
+
'aria-label': string;
|
|
56
|
+
};
|
|
57
|
+
option: (theme: Theme) => {
|
|
58
|
+
type: 'button';
|
|
59
|
+
'data-scope': 'theme-switch';
|
|
60
|
+
'data-part': 'option';
|
|
61
|
+
'data-theme': Theme;
|
|
62
|
+
'aria-pressed': (s: S) => boolean;
|
|
63
|
+
'aria-label': string;
|
|
64
|
+
onClick: (e: MouseEvent) => void;
|
|
65
|
+
};
|
|
66
|
+
toggle: {
|
|
67
|
+
type: 'button';
|
|
68
|
+
'data-scope': 'theme-switch';
|
|
69
|
+
'data-part': 'toggle';
|
|
70
|
+
'data-theme': (s: S) => Theme;
|
|
71
|
+
'aria-label': string;
|
|
72
|
+
onClick: (e: MouseEvent) => void;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface ConnectOptions {
|
|
76
|
+
id: string;
|
|
77
|
+
/** Accessible label for the theme group (default: 'Theme'). */
|
|
78
|
+
label?: string;
|
|
79
|
+
}
|
|
80
|
+
export declare function connect<S>(get: (s: S) => ThemeSwitchState, send: Send<ThemeSwitchMsg>, opts: ConnectOptions): ThemeSwitchParts<S>;
|
|
81
|
+
export declare const themeSwitch: {
|
|
82
|
+
init: typeof init;
|
|
83
|
+
update: typeof update;
|
|
84
|
+
connect: typeof connect;
|
|
85
|
+
resolveTheme: typeof resolveTheme;
|
|
86
|
+
applyTheme: typeof applyTheme;
|
|
87
|
+
watchSystemTheme: typeof watchSystemTheme;
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=theme-switch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-switch.d.ts","sourceRoot":"","sources":["../../src/components/theme-switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAC/C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAA;CACb;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEpF,wBAAgB,IAAI,CAAC,KAAK,GAAE,KAAgB,GAAG,gBAAgB,CAE9D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAYhG;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAOxD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAQrF;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE;QACJ,YAAY,EAAE,cAAc,CAAA;QAC5B,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,OAAO,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK;QACxB,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,cAAc,CAAA;QAC5B,WAAW,EAAE,QAAQ,CAAA;QACrB,YAAY,EAAE,KAAK,CAAA;QACnB,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;QACjC,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,cAAc,CAAA;QAC5B,WAAW,EAAE,QAAQ,CAAA;QACrB,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAA;QAC7B,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAQD,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,gBAAgB,EAC/B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAC1B,IAAI,EAAE,cAAc,GACnB,gBAAgB,CAAC,CAAC,CAAC,CA2BrB;AAED,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export function init(theme = 'system') {
|
|
2
|
+
return { theme };
|
|
3
|
+
}
|
|
4
|
+
export function update(state, msg) {
|
|
5
|
+
switch (msg.type) {
|
|
6
|
+
case 'setTheme':
|
|
7
|
+
if (state.theme === msg.theme)
|
|
8
|
+
return [state, []];
|
|
9
|
+
return [{ theme: msg.theme }, []];
|
|
10
|
+
case 'toggle': {
|
|
11
|
+
// light → dark → system → light
|
|
12
|
+
const next = state.theme === 'light' ? 'dark' : state.theme === 'dark' ? 'system' : 'light';
|
|
13
|
+
return [{ theme: next }, []];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a theme preference to the actual theme to apply. Returns 'dark' or
|
|
19
|
+
* 'light' based on the user's setting, consulting `prefers-color-scheme` for
|
|
20
|
+
* 'system'.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveTheme(theme) {
|
|
23
|
+
if (theme === 'dark')
|
|
24
|
+
return 'dark';
|
|
25
|
+
if (theme === 'light')
|
|
26
|
+
return 'light';
|
|
27
|
+
if (typeof window !== 'undefined' && window.matchMedia) {
|
|
28
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
29
|
+
}
|
|
30
|
+
return 'light';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set `data-theme="light"` or `data-theme="dark"` on `<html>`. CSS selectors
|
|
34
|
+
* like `[data-theme='dark'] { ... }` will then take effect.
|
|
35
|
+
*/
|
|
36
|
+
export function applyTheme(resolved) {
|
|
37
|
+
if (typeof document === 'undefined')
|
|
38
|
+
return;
|
|
39
|
+
document.documentElement.dataset.theme = resolved;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Listen for system theme changes (when user has selected 'system'). Returns
|
|
43
|
+
* a cleanup function. Call this in `onMount` and dispatch `setTheme` on
|
|
44
|
+
* change if you want the UI to auto-follow OS settings.
|
|
45
|
+
*/
|
|
46
|
+
export function watchSystemTheme(callback) {
|
|
47
|
+
if (typeof window === 'undefined' || !window.matchMedia)
|
|
48
|
+
return () => { };
|
|
49
|
+
const mq = window.matchMedia('(prefers-color-scheme: dark)');
|
|
50
|
+
const handler = (e) => {
|
|
51
|
+
callback(e.matches ? 'dark' : 'light');
|
|
52
|
+
};
|
|
53
|
+
mq.addEventListener('change', handler);
|
|
54
|
+
return () => mq.removeEventListener('change', handler);
|
|
55
|
+
}
|
|
56
|
+
const LABELS = {
|
|
57
|
+
light: 'Light theme',
|
|
58
|
+
dark: 'Dark theme',
|
|
59
|
+
system: 'Use system theme',
|
|
60
|
+
};
|
|
61
|
+
export function connect(get, send, opts) {
|
|
62
|
+
const label = opts.label ?? 'Theme';
|
|
63
|
+
return {
|
|
64
|
+
root: {
|
|
65
|
+
'data-scope': 'theme-switch',
|
|
66
|
+
'data-part': 'root',
|
|
67
|
+
role: 'group',
|
|
68
|
+
'aria-label': label,
|
|
69
|
+
},
|
|
70
|
+
option: (theme) => ({
|
|
71
|
+
type: 'button',
|
|
72
|
+
'data-scope': 'theme-switch',
|
|
73
|
+
'data-part': 'option',
|
|
74
|
+
'data-theme': theme,
|
|
75
|
+
'aria-pressed': (s) => get(s).theme === theme,
|
|
76
|
+
'aria-label': LABELS[theme],
|
|
77
|
+
onClick: () => send({ type: 'setTheme', theme }),
|
|
78
|
+
}),
|
|
79
|
+
toggle: {
|
|
80
|
+
type: 'button',
|
|
81
|
+
'data-scope': 'theme-switch',
|
|
82
|
+
'data-part': 'toggle',
|
|
83
|
+
'data-theme': (s) => get(s).theme,
|
|
84
|
+
'aria-label': 'Toggle theme',
|
|
85
|
+
onClick: () => send({ type: 'toggle' }),
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export const themeSwitch = {
|
|
90
|
+
init,
|
|
91
|
+
update,
|
|
92
|
+
connect,
|
|
93
|
+
resolveTheme,
|
|
94
|
+
applyTheme,
|
|
95
|
+
watchSystemTheme,
|
|
96
|
+
};
|
|
@@ -59,7 +59,7 @@ export declare function formatTime(state: TimePickerState): string;
|
|
|
59
59
|
export interface TimePickerParts<S> {
|
|
60
60
|
root: {
|
|
61
61
|
role: 'group';
|
|
62
|
-
'aria-label': string;
|
|
62
|
+
'aria-label': string | ((s: S) => string);
|
|
63
63
|
'data-scope': 'time-picker';
|
|
64
64
|
'data-part': 'root';
|
|
65
65
|
'data-format': (s: S) => TimeFormat;
|
|
@@ -67,7 +67,7 @@ export interface TimePickerParts<S> {
|
|
|
67
67
|
hoursInput: {
|
|
68
68
|
type: 'number';
|
|
69
69
|
role: 'spinbutton';
|
|
70
|
-
'aria-label': string;
|
|
70
|
+
'aria-label': string | ((s: S) => string);
|
|
71
71
|
'aria-valuemin': (s: S) => number;
|
|
72
72
|
'aria-valuemax': (s: S) => number;
|
|
73
73
|
'aria-valuenow': (s: S) => number;
|
|
@@ -81,7 +81,7 @@ export interface TimePickerParts<S> {
|
|
|
81
81
|
minutesInput: {
|
|
82
82
|
type: 'number';
|
|
83
83
|
role: 'spinbutton';
|
|
84
|
-
'aria-label': string;
|
|
84
|
+
'aria-label': string | ((s: S) => string);
|
|
85
85
|
'aria-valuemin': 0;
|
|
86
86
|
'aria-valuemax': 59;
|
|
87
87
|
'aria-valuenow': (s: S) => number;
|
|
@@ -94,7 +94,7 @@ export interface TimePickerParts<S> {
|
|
|
94
94
|
};
|
|
95
95
|
periodTrigger: {
|
|
96
96
|
type: 'button';
|
|
97
|
-
'aria-label': string;
|
|
97
|
+
'aria-label': string | ((s: S) => string);
|
|
98
98
|
disabled: (s: S) => boolean;
|
|
99
99
|
'data-scope': 'time-picker';
|
|
100
100
|
'data-part': 'period-trigger';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../../src/components/time-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../../src/components/time-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { useContext } from '@llui/dom';
|
|
2
|
+
import { LocaleContext } from '../locale';
|
|
1
3
|
export function init(opts = {}) {
|
|
2
4
|
return {
|
|
3
5
|
value: opts.value ?? { hours: 0, minutes: 0, seconds: 0 },
|
|
@@ -70,10 +72,11 @@ export function formatTime(state) {
|
|
|
70
72
|
return `${h}:${m}`;
|
|
71
73
|
}
|
|
72
74
|
export function connect(get, send, opts = {}) {
|
|
75
|
+
const locale = useContext(LocaleContext);
|
|
73
76
|
return {
|
|
74
77
|
root: {
|
|
75
78
|
role: 'group',
|
|
76
|
-
'aria-label': opts.label ??
|
|
79
|
+
'aria-label': opts.label ?? ((s) => locale(s).timePicker.label),
|
|
77
80
|
'data-scope': 'time-picker',
|
|
78
81
|
'data-part': 'root',
|
|
79
82
|
'data-format': (s) => get(s).format,
|
|
@@ -81,7 +84,7 @@ export function connect(get, send, opts = {}) {
|
|
|
81
84
|
hoursInput: {
|
|
82
85
|
type: 'number',
|
|
83
86
|
role: 'spinbutton',
|
|
84
|
-
'aria-label': opts.hoursLabel ??
|
|
87
|
+
'aria-label': opts.hoursLabel ?? ((s) => locale(s).timePicker.hours),
|
|
85
88
|
'aria-valuemin': (s) => (get(s).format === '12' ? 1 : 0),
|
|
86
89
|
'aria-valuemax': (s) => (get(s).format === '12' ? 12 : 23),
|
|
87
90
|
'aria-valuenow': (s) => displayHours(get(s)),
|
|
@@ -108,7 +111,7 @@ export function connect(get, send, opts = {}) {
|
|
|
108
111
|
minutesInput: {
|
|
109
112
|
type: 'number',
|
|
110
113
|
role: 'spinbutton',
|
|
111
|
-
'aria-label': opts.minutesLabel ??
|
|
114
|
+
'aria-label': opts.minutesLabel ?? ((s) => locale(s).timePicker.minutes),
|
|
112
115
|
'aria-valuemin': 0,
|
|
113
116
|
'aria-valuemax': 59,
|
|
114
117
|
'aria-valuenow': (s) => get(s).value.minutes,
|
|
@@ -134,7 +137,7 @@ export function connect(get, send, opts = {}) {
|
|
|
134
137
|
},
|
|
135
138
|
periodTrigger: {
|
|
136
139
|
type: 'button',
|
|
137
|
-
'aria-label': opts.periodLabel ??
|
|
140
|
+
'aria-label': opts.periodLabel ?? ((s) => locale(s).timePicker.period),
|
|
138
141
|
disabled: (s) => get(s).disabled,
|
|
139
142
|
'data-scope': 'time-picker',
|
|
140
143
|
'data-part': 'period-trigger',
|
|
@@ -84,7 +84,7 @@ export interface TimerParts<S> {
|
|
|
84
84
|
};
|
|
85
85
|
startTrigger: {
|
|
86
86
|
type: 'button';
|
|
87
|
-
'aria-label': string;
|
|
87
|
+
'aria-label': string | ((s: S) => string);
|
|
88
88
|
'data-scope': 'timer';
|
|
89
89
|
'data-part': 'start-trigger';
|
|
90
90
|
disabled: (s: S) => boolean;
|
|
@@ -92,7 +92,7 @@ export interface TimerParts<S> {
|
|
|
92
92
|
};
|
|
93
93
|
pauseTrigger: {
|
|
94
94
|
type: 'button';
|
|
95
|
-
'aria-label': string;
|
|
95
|
+
'aria-label': string | ((s: S) => string);
|
|
96
96
|
'data-scope': 'timer';
|
|
97
97
|
'data-part': 'pause-trigger';
|
|
98
98
|
disabled: (s: S) => boolean;
|
|
@@ -100,7 +100,7 @@ export interface TimerParts<S> {
|
|
|
100
100
|
};
|
|
101
101
|
resetTrigger: {
|
|
102
102
|
type: 'button';
|
|
103
|
-
'aria-label': string;
|
|
103
|
+
'aria-label': string | ((s: S) => string);
|
|
104
104
|
'data-scope': 'timer';
|
|
105
105
|
'data-part': 'reset-trigger';
|
|
106
106
|
onClick: (e: MouseEvent) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../src/components/timer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../src/components/timer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAKrC;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAA;AAErC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3C,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,IAAI,CAAC,IAAI,GAAE,SAAc,GAAG,UAAU,CAQrD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAwB9E;AAED,wFAAwF;AACxF,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAErD;AAED,oFAAoF;AACpF,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAOjG;AAID;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,CAAA;QACxC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAA;KACtC,CAAA;IACD,OAAO,EAAE;QACP,IAAI,EAAE,OAAO,CAAA;QACb,WAAW,EAAE,KAAK,GAAG,QAAQ,CAAA;QAC7B,YAAY,EAAE,OAAO,CAAA;QACrB,WAAW,EAAE,SAAS,CAAA;KACvB,CAAA;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,OAAO,CAAA;QACrB,WAAW,EAAE,eAAe,CAAA;QAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;QAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,OAAO,CAAA;QACrB,WAAW,EAAE,eAAe,CAAA;QAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;QAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,OAAO,CAAA;QACrB,WAAW,EAAE,eAAe,CAAA;QAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;CAC5B;AAED,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,EACzB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,IAAI,GAAE,cAAmB,GACxB,UAAU,CAAC,CAAC,CAAC,CAuCf;AAED,eAAO,MAAM,KAAK;;;;;;;;CAAkE,CAAA"}
|
package/dist/components/timer.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { useContext } from '@llui/dom';
|
|
2
|
+
import { LocaleContext } from '../locale';
|
|
1
3
|
export function init(opts = {}) {
|
|
2
4
|
return {
|
|
3
5
|
running: false,
|
|
@@ -76,6 +78,7 @@ export function formatMs(ms, template) {
|
|
|
76
78
|
.replace(/S/g, String(p.ms));
|
|
77
79
|
}
|
|
78
80
|
export function connect(get, send, opts = {}) {
|
|
81
|
+
const locale = useContext(LocaleContext);
|
|
79
82
|
return {
|
|
80
83
|
root: {
|
|
81
84
|
'data-scope': 'timer',
|
|
@@ -91,7 +94,7 @@ export function connect(get, send, opts = {}) {
|
|
|
91
94
|
},
|
|
92
95
|
startTrigger: {
|
|
93
96
|
type: 'button',
|
|
94
|
-
'aria-label': opts.startLabel ??
|
|
97
|
+
'aria-label': opts.startLabel ?? ((s) => locale(s).timer.start),
|
|
95
98
|
'data-scope': 'timer',
|
|
96
99
|
'data-part': 'start-trigger',
|
|
97
100
|
disabled: (s) => get(s).running,
|
|
@@ -99,7 +102,7 @@ export function connect(get, send, opts = {}) {
|
|
|
99
102
|
},
|
|
100
103
|
pauseTrigger: {
|
|
101
104
|
type: 'button',
|
|
102
|
-
'aria-label': opts.pauseLabel ??
|
|
105
|
+
'aria-label': opts.pauseLabel ?? ((s) => locale(s).timer.pause),
|
|
103
106
|
'data-scope': 'timer',
|
|
104
107
|
'data-part': 'pause-trigger',
|
|
105
108
|
disabled: (s) => !get(s).running,
|
|
@@ -107,7 +110,7 @@ export function connect(get, send, opts = {}) {
|
|
|
107
110
|
},
|
|
108
111
|
resetTrigger: {
|
|
109
112
|
type: 'button',
|
|
110
|
-
'aria-label': opts.resetLabel ??
|
|
113
|
+
'aria-label': opts.resetLabel ?? ((s) => locale(s).timer.reset),
|
|
111
114
|
'data-scope': 'timer',
|
|
112
115
|
'data-part': 'reset-trigger',
|
|
113
116
|
onClick: () => send({ type: 'reset' }),
|
|
@@ -61,7 +61,7 @@ export interface ToasterInit {
|
|
|
61
61
|
export declare function init(opts?: ToasterInit): ToasterState;
|
|
62
62
|
export declare function update(state: ToasterState, msg: ToasterMsg): [ToasterState, never[]];
|
|
63
63
|
export declare function nextToastId(): string;
|
|
64
|
-
export interface ToastItemParts<
|
|
64
|
+
export interface ToastItemParts<S> {
|
|
65
65
|
root: {
|
|
66
66
|
role: 'status';
|
|
67
67
|
'aria-atomic': 'true';
|
|
@@ -88,7 +88,7 @@ export interface ToastItemParts<_S> {
|
|
|
88
88
|
};
|
|
89
89
|
closeTrigger: {
|
|
90
90
|
type: 'button';
|
|
91
|
-
'aria-label': string;
|
|
91
|
+
'aria-label': string | ((s: S) => string);
|
|
92
92
|
'data-scope': 'toast';
|
|
93
93
|
'data-part': 'close-trigger';
|
|
94
94
|
onClick: (e: MouseEvent) => void;
|
|
@@ -97,7 +97,7 @@ export interface ToastItemParts<_S> {
|
|
|
97
97
|
export interface ToasterParts<S> {
|
|
98
98
|
region: {
|
|
99
99
|
role: 'region';
|
|
100
|
-
'aria-label': string;
|
|
100
|
+
'aria-label': string | ((s: S) => string);
|
|
101
101
|
tabIndex: -1;
|
|
102
102
|
'data-scope': 'toast';
|
|
103
103
|
'data-part': 'region';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../src/components/toast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../src/components/toast.ts"],"names":[],"mappings":"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"}
|
package/dist/components/toast.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { useContext } from '@llui/dom';
|
|
2
|
+
import { LocaleContext } from '../locale';
|
|
1
3
|
export function init(opts = {}) {
|
|
2
4
|
return {
|
|
3
5
|
toasts: [],
|
|
@@ -53,8 +55,9 @@ export function nextToastId() {
|
|
|
53
55
|
return `toast-${++toastIdCounter}`;
|
|
54
56
|
}
|
|
55
57
|
export function connect(_get, send, opts = {}) {
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
+
const locale = useContext(LocaleContext);
|
|
59
|
+
const regionLabel = opts.regionLabel ?? ((s) => locale(s).toast.region);
|
|
60
|
+
const closeLabel = opts.closeLabel ?? ((s) => locale(s).toast.dismiss);
|
|
58
61
|
return {
|
|
59
62
|
region: {
|
|
60
63
|
role: 'region',
|
package/dist/components/toc.d.ts
CHANGED
|
@@ -71,7 +71,7 @@ export interface TocItemParts<S> {
|
|
|
71
71
|
expandTrigger: {
|
|
72
72
|
type: 'button';
|
|
73
73
|
'aria-expanded': (s: S) => boolean;
|
|
74
|
-
'aria-label': string;
|
|
74
|
+
'aria-label': string | ((s: S) => string);
|
|
75
75
|
'data-scope': 'toc';
|
|
76
76
|
'data-part': 'expand-trigger';
|
|
77
77
|
'data-state': (s: S) => 'open' | 'closed';
|
|
@@ -81,7 +81,7 @@ export interface TocItemParts<S> {
|
|
|
81
81
|
export interface TocParts<S> {
|
|
82
82
|
root: {
|
|
83
83
|
role: 'navigation';
|
|
84
|
-
'aria-label': string;
|
|
84
|
+
'aria-label': string | ((s: S) => string);
|
|
85
85
|
'data-scope': 'toc';
|
|
86
86
|
'data-part': 'root';
|
|
87
87
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/components/toc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/components/toc.ts"],"names":[],"mappings":"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"}
|
package/dist/components/toc.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { useContext } from '@llui/dom';
|
|
2
|
+
import { LocaleContext } from '../locale';
|
|
1
3
|
export function init(opts = {}) {
|
|
2
4
|
return {
|
|
3
5
|
items: opts.items ?? [],
|
|
@@ -32,12 +34,13 @@ export function isExpanded(state, id) {
|
|
|
32
34
|
return state.expanded.includes(id);
|
|
33
35
|
}
|
|
34
36
|
export function connect(get, send, opts = {}) {
|
|
37
|
+
const locale = useContext(LocaleContext);
|
|
35
38
|
const prefix = opts.hrefPrefix ?? '#';
|
|
36
|
-
const expandLabel = opts.expandLabel ??
|
|
39
|
+
const expandLabel = opts.expandLabel ?? ((s) => locale(s).toc.expand);
|
|
37
40
|
return {
|
|
38
41
|
root: {
|
|
39
42
|
role: 'navigation',
|
|
40
|
-
'aria-label': opts.label ??
|
|
43
|
+
'aria-label': opts.label ?? ((s) => locale(s).toc.label),
|
|
41
44
|
'data-scope': 'toc',
|
|
42
45
|
'data-part': 'root',
|
|
43
46
|
},
|
|
@@ -62,7 +62,6 @@ export interface ToggleGroupItemParts<S> {
|
|
|
62
62
|
export interface ToggleGroupParts<S> {
|
|
63
63
|
root: {
|
|
64
64
|
role: 'group';
|
|
65
|
-
'aria-orientation': (s: S) => Orientation;
|
|
66
65
|
'aria-disabled': (s: S) => 'true' | undefined;
|
|
67
66
|
'data-scope': 'toggle-group';
|
|
68
67
|
'data-part': 'root';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../src/components/toggle-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../src/components/toggle-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { flipArrow } from '../utils/direction';
|
|
1
2
|
export function init(opts = {}) {
|
|
2
3
|
return {
|
|
3
4
|
value: opts.value ?? [],
|
|
@@ -47,7 +48,6 @@ export function connect(get, send) {
|
|
|
47
48
|
return {
|
|
48
49
|
root: {
|
|
49
50
|
role: 'group',
|
|
50
|
-
'aria-orientation': (s) => get(s).orientation,
|
|
51
51
|
'aria-disabled': (s) => (get(s).disabled ? 'true' : undefined),
|
|
52
52
|
'data-scope': 'toggle-group',
|
|
53
53
|
'data-part': 'root',
|
|
@@ -68,7 +68,8 @@ export function connect(get, send) {
|
|
|
68
68
|
'data-value': value,
|
|
69
69
|
onClick: () => send({ type: 'toggle', value }),
|
|
70
70
|
onKeyDown: (e) => {
|
|
71
|
-
|
|
71
|
+
const key = flipArrow(e.key, e.currentTarget);
|
|
72
|
+
switch (key) {
|
|
72
73
|
case 'ArrowRight':
|
|
73
74
|
case 'ArrowDown':
|
|
74
75
|
e.preventDefault();
|