@llui/components 0.4.10 → 0.5.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/dist/components/accordion.d.ts +13 -13
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/accordion.js +9 -9
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.d.ts +8 -8
- package/dist/components/alert-dialog.d.ts.map +1 -1
- package/dist/components/alert-dialog.js +2 -2
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/angle-slider.d.ts +13 -13
- package/dist/components/angle-slider.d.ts.map +1 -1
- package/dist/components/angle-slider.js +11 -11
- package/dist/components/angle-slider.js.map +1 -1
- package/dist/components/async-list.d.ts +7 -7
- package/dist/components/async-list.d.ts.map +1 -1
- package/dist/components/async-list.js +5 -8
- package/dist/components/async-list.js.map +1 -1
- package/dist/components/avatar.d.ts +9 -9
- package/dist/components/avatar.d.ts.map +1 -1
- package/dist/components/avatar.js +7 -7
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/carousel.d.ts +18 -18
- package/dist/components/carousel.d.ts.map +1 -1
- package/dist/components/carousel.js +12 -12
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/cascade-select.d.ts +12 -12
- package/dist/components/cascade-select.d.ts.map +1 -1
- package/dist/components/cascade-select.js +8 -8
- package/dist/components/cascade-select.js.map +1 -1
- package/dist/components/checkbox.d.ts +14 -14
- package/dist/components/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox.js +12 -12
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/clipboard.d.ts +8 -8
- package/dist/components/clipboard.d.ts.map +1 -1
- package/dist/components/clipboard.js +6 -6
- package/dist/components/clipboard.js.map +1 -1
- package/dist/components/collapsible.d.ts +11 -11
- package/dist/components/collapsible.d.ts.map +1 -1
- package/dist/components/collapsible.js +9 -9
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/color-picker.d.ts +19 -19
- package/dist/components/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker.js +21 -21
- package/dist/components/color-picker.js.map +1 -1
- package/dist/components/combobox.d.ts +25 -25
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/combobox.js +54 -59
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/context-menu.d.ts +14 -14
- package/dist/components/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu.js +15 -19
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/date-input.d.ts +13 -13
- package/dist/components/date-input.d.ts.map +1 -1
- package/dist/components/date-input.js +11 -11
- package/dist/components/date-input.js.map +1 -1
- package/dist/components/date-picker.d.ts +11 -11
- package/dist/components/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker.js +7 -7
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.d.ts +15 -15
- package/dist/components/dialog.d.ts.map +1 -1
- package/dist/components/dialog.js +45 -50
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/drawer.d.ts +13 -13
- package/dist/components/drawer.d.ts.map +1 -1
- package/dist/components/drawer.js +44 -49
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/editable.d.ts +11 -11
- package/dist/components/editable.d.ts.map +1 -1
- package/dist/components/editable.js +9 -9
- package/dist/components/editable.js.map +1 -1
- package/dist/components/file-upload.d.ts +19 -19
- package/dist/components/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload.js +14 -14
- package/dist/components/file-upload.js.map +1 -1
- package/dist/components/floating-panel.d.ts +14 -14
- package/dist/components/floating-panel.d.ts.map +1 -1
- package/dist/components/floating-panel.js +13 -14
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/form.d.ts +9 -9
- package/dist/components/form.d.ts.map +1 -1
- package/dist/components/form.js +7 -7
- package/dist/components/form.js.map +1 -1
- package/dist/components/hover-card.d.ts +9 -9
- package/dist/components/hover-card.d.ts.map +1 -1
- package/dist/components/hover-card.js +12 -13
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/image-cropper.d.ts +8 -8
- package/dist/components/image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper.js +7 -8
- package/dist/components/image-cropper.js.map +1 -1
- package/dist/components/in-view.d.ts +6 -6
- package/dist/components/in-view.d.ts.map +1 -1
- package/dist/components/in-view.js +2 -2
- package/dist/components/in-view.js.map +1 -1
- package/dist/components/listbox.d.ts +16 -16
- package/dist/components/listbox.d.ts.map +1 -1
- package/dist/components/listbox.js +16 -16
- package/dist/components/listbox.js.map +1 -1
- package/dist/components/marquee.d.ts +8 -8
- package/dist/components/marquee.d.ts.map +1 -1
- package/dist/components/marquee.js +8 -11
- package/dist/components/marquee.js.map +1 -1
- package/dist/components/menu.d.ts +15 -15
- package/dist/components/menu.d.ts.map +1 -1
- package/dist/components/menu.js +16 -17
- package/dist/components/menu.js.map +1 -1
- package/dist/components/navigation-menu.d.ts +12 -12
- package/dist/components/navigation-menu.d.ts.map +1 -1
- package/dist/components/navigation-menu.js +8 -8
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/number-input.d.ts +18 -18
- package/dist/components/number-input.d.ts.map +1 -1
- package/dist/components/number-input.js +16 -20
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/pagination.d.ts +13 -13
- package/dist/components/pagination.d.ts.map +1 -1
- package/dist/components/pagination.js +11 -17
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/password-input.d.ts +11 -11
- package/dist/components/password-input.d.ts.map +1 -1
- package/dist/components/password-input.js +11 -11
- package/dist/components/password-input.js.map +1 -1
- package/dist/components/pin-input.d.ts +9 -9
- package/dist/components/pin-input.d.ts.map +1 -1
- package/dist/components/pin-input.js +9 -9
- package/dist/components/pin-input.js.map +1 -1
- package/dist/components/popover.d.ts +11 -11
- package/dist/components/popover.d.ts.map +1 -1
- package/dist/components/popover.js +61 -60
- package/dist/components/popover.js.map +1 -1
- package/dist/components/presence.d.ts +7 -5
- package/dist/components/presence.d.ts.map +1 -1
- package/dist/components/presence.js +5 -3
- package/dist/components/presence.js.map +1 -1
- package/dist/components/progress.d.ts +14 -14
- package/dist/components/progress.d.ts.map +1 -1
- package/dist/components/progress.js +12 -12
- package/dist/components/progress.js.map +1 -1
- package/dist/components/qr-code.d.ts +7 -7
- package/dist/components/qr-code.d.ts.map +1 -1
- package/dist/components/qr-code.js +7 -7
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/radio-group.d.ts +15 -15
- package/dist/components/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group.js +12 -13
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/rating-group.d.ts +13 -13
- package/dist/components/rating-group.d.ts.map +1 -1
- package/dist/components/rating-group.js +10 -11
- package/dist/components/rating-group.js.map +1 -1
- package/dist/components/scroll-area.d.ts +10 -10
- package/dist/components/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area.js +10 -15
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/select.d.ts +26 -26
- package/dist/components/select.d.ts.map +1 -1
- package/dist/components/select.js +29 -33
- package/dist/components/select.js.map +1 -1
- package/dist/components/signature-pad.d.ts +12 -12
- package/dist/components/signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad.js +10 -10
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/slider.d.ts +22 -22
- package/dist/components/slider.d.ts.map +1 -1
- package/dist/components/slider.js +17 -17
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sortable.d.ts +11 -11
- package/dist/components/sortable.d.ts.map +1 -1
- package/dist/components/sortable.js +20 -20
- package/dist/components/sortable.js.map +1 -1
- package/dist/components/splitter.d.ts +15 -15
- package/dist/components/splitter.d.ts.map +1 -1
- package/dist/components/splitter.js +15 -15
- package/dist/components/splitter.js.map +1 -1
- package/dist/components/steps.d.ts +14 -14
- package/dist/components/steps.d.ts.map +1 -1
- package/dist/components/steps.js +10 -16
- package/dist/components/steps.js.map +1 -1
- package/dist/components/switch.d.ts +12 -12
- package/dist/components/switch.d.ts.map +1 -1
- package/dist/components/switch.js +10 -10
- package/dist/components/switch.js.map +1 -1
- package/dist/components/tabs.d.ts +15 -15
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +11 -11
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tags-input.d.ts +14 -14
- package/dist/components/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input.js +10 -10
- package/dist/components/tags-input.js.map +1 -1
- package/dist/components/theme-switch.d.ts +5 -5
- package/dist/components/theme-switch.d.ts.map +1 -1
- package/dist/components/theme-switch.js +3 -3
- package/dist/components/theme-switch.js.map +1 -1
- package/dist/components/time-picker.d.ts +19 -19
- package/dist/components/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker.js +17 -17
- package/dist/components/time-picker.js.map +1 -1
- package/dist/components/timer.d.ts +10 -10
- package/dist/components/timer.d.ts.map +1 -1
- package/dist/components/timer.js +8 -8
- package/dist/components/timer.js.map +1 -1
- package/dist/components/toast.d.ts +8 -8
- package/dist/components/toast.d.ts.map +1 -1
- package/dist/components/toast.js +4 -4
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toc.d.ts +12 -12
- package/dist/components/toc.d.ts.map +1 -1
- package/dist/components/toc.js +8 -8
- package/dist/components/toc.js.map +1 -1
- package/dist/components/toggle-group.d.ts +13 -13
- package/dist/components/toggle-group.d.ts.map +1 -1
- package/dist/components/toggle-group.js +9 -9
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.d.ts +8 -8
- package/dist/components/toggle.d.ts.map +1 -1
- package/dist/components/toggle.js +6 -6
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tooltip.d.ts +10 -10
- package/dist/components/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip.js +13 -14
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/tour.d.ts +7 -7
- package/dist/components/tour.d.ts.map +1 -1
- package/dist/components/tour.js +5 -5
- package/dist/components/tour.js.map +1 -1
- package/dist/components/tree-view.d.ts +19 -19
- package/dist/components/tree-view.d.ts.map +1 -1
- package/dist/components/tree-view.js +23 -23
- package/dist/components/tree-view.js.map +1 -1
- package/dist/patterns/confirm-dialog.d.ts +4 -4
- package/dist/patterns/confirm-dialog.d.ts.map +1 -1
- package/dist/patterns/confirm-dialog.js +7 -9
- package/dist/patterns/confirm-dialog.js.map +1 -1
- package/package.json +3 -3
- package/dist/components/enter-view.d.ts +0 -73
- package/dist/components/enter-view.d.ts.map +0 -1
- package/dist/components/enter-view.js +0 -51
- package/dist/utils/validators.d.ts +0 -34
- package/dist/utils/validators.d.ts.map +0 -1
- package/dist/utils/validators.js +0 -83
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Send } from '@llui/dom';
|
|
1
|
+
import type { Send, Signal } from '@llui/dom';
|
|
2
2
|
/**
|
|
3
3
|
* Color picker — HSL/HSV color selection. Tracks hue (0-360), saturation
|
|
4
4
|
* (0-100), and lightness (0-100). Emits hex strings for convenience.
|
|
@@ -60,20 +60,20 @@ export declare function hslToRgb(hsl: Hsl): {
|
|
|
60
60
|
};
|
|
61
61
|
export declare function toHex(hsl: Hsl): string;
|
|
62
62
|
export declare function hexToHsl(hex: string): Hsl | null;
|
|
63
|
-
export interface ColorPickerParts
|
|
63
|
+
export interface ColorPickerParts {
|
|
64
64
|
root: {
|
|
65
65
|
'data-scope': 'color-picker';
|
|
66
66
|
'data-part': 'root';
|
|
67
|
-
'data-disabled':
|
|
67
|
+
'data-disabled': Signal<'' | undefined>;
|
|
68
68
|
};
|
|
69
69
|
hueSlider: {
|
|
70
70
|
type: 'range';
|
|
71
71
|
min: 0;
|
|
72
72
|
max: 360;
|
|
73
73
|
step: 1;
|
|
74
|
-
'aria-label': string
|
|
75
|
-
disabled:
|
|
76
|
-
value:
|
|
74
|
+
'aria-label': string;
|
|
75
|
+
disabled: Signal<boolean>;
|
|
76
|
+
value: Signal<string>;
|
|
77
77
|
'data-scope': 'color-picker';
|
|
78
78
|
'data-part': 'hue-slider';
|
|
79
79
|
onInput: (e: Event) => void;
|
|
@@ -83,10 +83,10 @@ export interface ColorPickerParts<S> {
|
|
|
83
83
|
min: 0;
|
|
84
84
|
max: 100;
|
|
85
85
|
step: 1;
|
|
86
|
-
'aria-label': string
|
|
87
|
-
disabled:
|
|
88
|
-
value:
|
|
89
|
-
style:
|
|
86
|
+
'aria-label': string;
|
|
87
|
+
disabled: Signal<boolean>;
|
|
88
|
+
value: Signal<string>;
|
|
89
|
+
style: Signal<string>;
|
|
90
90
|
'data-scope': 'color-picker';
|
|
91
91
|
'data-part': 'saturation-slider';
|
|
92
92
|
onInput: (e: Event) => void;
|
|
@@ -96,10 +96,10 @@ export interface ColorPickerParts<S> {
|
|
|
96
96
|
min: 0;
|
|
97
97
|
max: 100;
|
|
98
98
|
step: 1;
|
|
99
|
-
'aria-label': string
|
|
100
|
-
disabled:
|
|
101
|
-
value:
|
|
102
|
-
style:
|
|
99
|
+
'aria-label': string;
|
|
100
|
+
disabled: Signal<boolean>;
|
|
101
|
+
value: Signal<string>;
|
|
102
|
+
style: Signal<string>;
|
|
103
103
|
'data-scope': 'color-picker';
|
|
104
104
|
'data-part': 'lightness-slider';
|
|
105
105
|
onInput: (e: Event) => void;
|
|
@@ -107,9 +107,9 @@ export interface ColorPickerParts<S> {
|
|
|
107
107
|
hexInput: {
|
|
108
108
|
type: 'text';
|
|
109
109
|
autoComplete: 'off';
|
|
110
|
-
'aria-label': string
|
|
111
|
-
disabled:
|
|
112
|
-
value:
|
|
110
|
+
'aria-label': string;
|
|
111
|
+
disabled: Signal<boolean>;
|
|
112
|
+
value: Signal<string>;
|
|
113
113
|
'data-scope': 'color-picker';
|
|
114
114
|
'data-part': 'hex-input';
|
|
115
115
|
onInput: (e: Event) => void;
|
|
@@ -118,7 +118,7 @@ export interface ColorPickerParts<S> {
|
|
|
118
118
|
'data-scope': 'color-picker';
|
|
119
119
|
'data-part': 'swatch';
|
|
120
120
|
'aria-hidden': 'true';
|
|
121
|
-
style:
|
|
121
|
+
style: Signal<string>;
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
124
|
export interface ConnectOptions {
|
|
@@ -127,7 +127,7 @@ export interface ConnectOptions {
|
|
|
127
127
|
lightnessLabel?: string;
|
|
128
128
|
hexLabel?: string;
|
|
129
129
|
}
|
|
130
|
-
export declare function connect
|
|
130
|
+
export declare function connect(state: Signal<ColorPickerState>, send: Send<ColorPickerMsg>, opts?: ConnectOptions): ColorPickerParts;
|
|
131
131
|
export declare const colorPicker: {
|
|
132
132
|
init: typeof init;
|
|
133
133
|
update: typeof update;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../../src/components/color-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../../src/components/color-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,22 +107,22 @@ export function hexToHsl(hex) {
|
|
|
107
107
|
l: Math.round(l * 100),
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
|
-
export function connect(
|
|
110
|
+
export function connect(state, send, opts = {}) {
|
|
111
111
|
const locale = useContext(LocaleContext);
|
|
112
112
|
return {
|
|
113
113
|
root: {
|
|
114
114
|
'data-scope': 'color-picker',
|
|
115
115
|
'data-part': 'root',
|
|
116
|
-
'data-disabled': (s) => (
|
|
116
|
+
'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),
|
|
117
117
|
},
|
|
118
118
|
hueSlider: {
|
|
119
119
|
type: 'range',
|
|
120
120
|
min: 0,
|
|
121
121
|
max: 360,
|
|
122
122
|
step: 1,
|
|
123
|
-
'aria-label': opts.hueLabel ??
|
|
124
|
-
disabled: (s) =>
|
|
125
|
-
value: (s) => String(
|
|
123
|
+
'aria-label': opts.hueLabel ?? locale.colorPicker.hue,
|
|
124
|
+
disabled: state.map((s) => s.disabled),
|
|
125
|
+
value: state.map((s) => String(s.hsl.h)),
|
|
126
126
|
'data-scope': 'color-picker',
|
|
127
127
|
'data-part': 'hue-slider',
|
|
128
128
|
onInput: tagSend(send, ['setHue'], (e) => send({ type: 'setHue', h: Number(e.target.value) })),
|
|
@@ -132,13 +132,13 @@ export function connect(get, send, opts = {}) {
|
|
|
132
132
|
min: 0,
|
|
133
133
|
max: 100,
|
|
134
134
|
step: 1,
|
|
135
|
-
'aria-label': opts.saturationLabel ??
|
|
136
|
-
disabled: (s) =>
|
|
137
|
-
value: (s) => String(
|
|
138
|
-
style: (s) => {
|
|
139
|
-
const { h, l } =
|
|
135
|
+
'aria-label': opts.saturationLabel ?? locale.colorPicker.saturation,
|
|
136
|
+
disabled: state.map((s) => s.disabled),
|
|
137
|
+
value: state.map((s) => String(s.hsl.s)),
|
|
138
|
+
style: state.map((s) => {
|
|
139
|
+
const { h, l } = s.hsl;
|
|
140
140
|
return `background: linear-gradient(to right, hsl(${h} 0% ${l}%), hsl(${h} 100% ${l}%))`;
|
|
141
|
-
},
|
|
141
|
+
}),
|
|
142
142
|
'data-scope': 'color-picker',
|
|
143
143
|
'data-part': 'saturation-slider',
|
|
144
144
|
onInput: tagSend(send, ['setSaturation'], (e) => send({ type: 'setSaturation', s: Number(e.target.value) })),
|
|
@@ -148,13 +148,13 @@ export function connect(get, send, opts = {}) {
|
|
|
148
148
|
min: 0,
|
|
149
149
|
max: 100,
|
|
150
150
|
step: 1,
|
|
151
|
-
'aria-label': opts.lightnessLabel ??
|
|
152
|
-
disabled: (s) =>
|
|
153
|
-
value: (s) => String(
|
|
154
|
-
style: (s) => {
|
|
155
|
-
const { h, s: sat } =
|
|
151
|
+
'aria-label': opts.lightnessLabel ?? locale.colorPicker.lightness,
|
|
152
|
+
disabled: state.map((s) => s.disabled),
|
|
153
|
+
value: state.map((s) => String(s.hsl.l)),
|
|
154
|
+
style: state.map((s) => {
|
|
155
|
+
const { h, s: sat } = s.hsl;
|
|
156
156
|
return `background: linear-gradient(to right, hsl(${h} ${sat}% 0%), hsl(${h} ${sat}% 50%), hsl(${h} ${sat}% 100%))`;
|
|
157
|
-
},
|
|
157
|
+
}),
|
|
158
158
|
'data-scope': 'color-picker',
|
|
159
159
|
'data-part': 'lightness-slider',
|
|
160
160
|
onInput: tagSend(send, ['setLightness'], (e) => send({ type: 'setLightness', l: Number(e.target.value) })),
|
|
@@ -162,9 +162,9 @@ export function connect(get, send, opts = {}) {
|
|
|
162
162
|
hexInput: {
|
|
163
163
|
type: 'text',
|
|
164
164
|
autoComplete: 'off',
|
|
165
|
-
'aria-label': opts.hexLabel ??
|
|
166
|
-
disabled: (s) =>
|
|
167
|
-
value: (s) => toHex(
|
|
165
|
+
'aria-label': opts.hexLabel ?? locale.colorPicker.hex,
|
|
166
|
+
disabled: state.map((s) => s.disabled),
|
|
167
|
+
value: state.map((s) => toHex(s.hsl)),
|
|
168
168
|
'data-scope': 'color-picker',
|
|
169
169
|
'data-part': 'hex-input',
|
|
170
170
|
onInput: tagSend(send, ['setHex'], (e) => send({ type: 'setHex', hex: e.target.value })),
|
|
@@ -173,7 +173,7 @@ export function connect(get, send, opts = {}) {
|
|
|
173
173
|
'data-scope': 'color-picker',
|
|
174
174
|
'data-part': 'swatch',
|
|
175
175
|
'aria-hidden': 'true',
|
|
176
|
-
style: (s) => `background-color:${toHex(
|
|
176
|
+
style: state.map((s) => `background-color:${toHex(s.hsl)};`),
|
|
177
177
|
},
|
|
178
178
|
};
|
|
179
179
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-picker.js","sourceRoot":"","sources":["../../src/components/color-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { LocaleContext } from '../locale.js'\nimport type { Locale } from '../locale.js'\n\n/**\n * Color picker — HSL/HSV color selection. Tracks hue (0-360), saturation\n * (0-100), and lightness (0-100). Emits hex strings for convenience.\n */\n\nexport interface Hsl {\n h: number\n s: number\n l: number\n}\n\nexport interface ColorPickerState {\n hsl: Hsl\n /** Alpha channel 0..1. */\n alpha: number\n disabled: boolean\n}\n\nexport type ColorPickerMsg =\n /** @intent(\"Set the full HSL color at once\") */\n | { type: 'setHsl'; hsl: Hsl }\n /** @intent(\"Set the hue channel (0–360)\") */\n | { type: 'setHue'; h: number }\n /** @intent(\"Set the saturation channel (0–100)\") */\n | { type: 'setSaturation'; s: number }\n /** @intent(\"Set the lightness channel (0–100)\") */\n | { type: 'setLightness'; l: number }\n /** @intent(\"Set the alpha channel (0–1)\") */\n | { type: 'setAlpha'; alpha: number }\n /** @intent(\"Set the color from a hex string (#RRGGBB or #RGB)\") */\n | { type: 'setHex'; hex: string }\n\nexport interface ColorPickerInit {\n hsl?: Hsl\n alpha?: number\n disabled?: boolean\n}\n\nexport function init(opts: ColorPickerInit = {}): ColorPickerState {\n return {\n hsl: opts.hsl ?? { h: 0, s: 100, l: 50 },\n alpha: opts.alpha ?? 1,\n disabled: opts.disabled ?? false,\n }\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n))\n}\n\nexport function update(state: ColorPickerState, msg: ColorPickerMsg): [ColorPickerState, never[]] {\n if (state.disabled) return [state, []]\n switch (msg.type) {\n case 'setHsl':\n return [{ ...state, hsl: msg.hsl }, []]\n case 'setHue':\n return [{ ...state, hsl: { ...state.hsl, h: ((msg.h % 360) + 360) % 360 } }, []]\n case 'setSaturation':\n return [{ ...state, hsl: { ...state.hsl, s: clamp(msg.s, 0, 100) } }, []]\n case 'setLightness':\n return [{ ...state, hsl: { ...state.hsl, l: clamp(msg.l, 0, 100) } }, []]\n case 'setAlpha':\n return [{ ...state, alpha: clamp(msg.alpha, 0, 1) }, []]\n case 'setHex': {\n const hsl = hexToHsl(msg.hex)\n return hsl ? [{ ...state, hsl }, []] : [state, []]\n }\n }\n}\n\n/** Convert HSL (h 0-360, s/l 0-100) to RGB (0-255 each). */\nexport function hslToRgb(hsl: Hsl): { r: number; g: number; b: number } {\n const s = hsl.s / 100\n const l = hsl.l / 100\n const c = (1 - Math.abs(2 * l - 1)) * s\n const x = c * (1 - Math.abs(((hsl.h / 60) % 2) - 1))\n const m = l - c / 2\n let r: number\n let g: number\n let b: number\n const h = hsl.h\n if (h < 60) [r, g, b] = [c, x, 0]\n else if (h < 120) [r, g, b] = [x, c, 0]\n else if (h < 180) [r, g, b] = [0, c, x]\n else if (h < 240) [r, g, b] = [0, x, c]\n else if (h < 300) [r, g, b] = [x, 0, c]\n else [r, g, b] = [c, 0, x]\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n }\n}\n\nexport function toHex(hsl: Hsl): string {\n const { r, g, b } = hslToRgb(hsl)\n const hex = (n: number): string => n.toString(16).padStart(2, '0')\n return `#${hex(r)}${hex(g)}${hex(b)}`\n}\n\nexport function hexToHsl(hex: string): Hsl | null {\n const normalized = hex.trim().replace(/^#/, '')\n if (!/^[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(normalized)) return null\n let r: number\n let g: number\n let b: number\n if (normalized.length === 3) {\n r = parseInt(normalized[0]! + normalized[0]!, 16)\n g = parseInt(normalized[1]! + normalized[1]!, 16)\n b = parseInt(normalized[2]! + normalized[2]!, 16)\n } else {\n r = parseInt(normalized.slice(0, 2), 16)\n g = parseInt(normalized.slice(2, 4), 16)\n b = parseInt(normalized.slice(4, 6), 16)\n }\n const rf = r / 255\n const gf = g / 255\n const bf = b / 255\n const max = Math.max(rf, gf, bf)\n const min = Math.min(rf, gf, bf)\n const d = max - min\n let h = 0\n if (d !== 0) {\n if (max === rf) h = ((gf - bf) / d) % 6\n else if (max === gf) h = (bf - rf) / d + 2\n else h = (rf - gf) / d + 4\n h *= 60\n if (h < 0) h += 360\n }\n const l = (max + min) / 2\n const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1))\n return {\n h: Math.round(h),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n }\n}\n\nexport interface ColorPickerParts<S> {\n root: {\n 'data-scope': 'color-picker'\n 'data-part': 'root'\n 'data-disabled': (s: S) => '' | undefined\n }\n hueSlider: {\n type: 'range'\n min: 0\n max: 360\n step: 1\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n value: (s: S) => string\n 'data-scope': 'color-picker'\n 'data-part': 'hue-slider'\n onInput: (e: Event) => void\n }\n saturationSlider: {\n type: 'range'\n min: 0\n max: 100\n step: 1\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n value: (s: S) => string\n style: (s: S) => string\n 'data-scope': 'color-picker'\n 'data-part': 'saturation-slider'\n onInput: (e: Event) => void\n }\n lightnessSlider: {\n type: 'range'\n min: 0\n max: 100\n step: 1\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n value: (s: S) => string\n style: (s: S) => string\n 'data-scope': 'color-picker'\n 'data-part': 'lightness-slider'\n onInput: (e: Event) => void\n }\n hexInput: {\n type: 'text'\n autoComplete: 'off'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n value: (s: S) => string\n 'data-scope': 'color-picker'\n 'data-part': 'hex-input'\n onInput: (e: Event) => void\n }\n swatch: {\n 'data-scope': 'color-picker'\n 'data-part': 'swatch'\n 'aria-hidden': 'true'\n style: (s: S) => string\n }\n}\n\nexport interface ConnectOptions {\n hueLabel?: string\n saturationLabel?: string\n lightnessLabel?: string\n hexLabel?: string\n}\n\nexport function connect<S>(\n get: (s: S) => ColorPickerState,\n send: Send<ColorPickerMsg>,\n opts: ConnectOptions = {},\n): ColorPickerParts<S> {\n const locale = useContext<S, Locale>(LocaleContext)\n return {\n root: {\n 'data-scope': 'color-picker',\n 'data-part': 'root',\n 'data-disabled': (s) => (get(s).disabled ? '' : undefined),\n },\n hueSlider: {\n type: 'range',\n min: 0,\n max: 360,\n step: 1,\n 'aria-label': opts.hueLabel ?? ((s: S) => locale(s).colorPicker.hue),\n disabled: (s) => get(s).disabled,\n value: (s) => String(get(s).hsl.h),\n 'data-scope': 'color-picker',\n 'data-part': 'hue-slider',\n onInput: tagSend(send, ['setHue'], (e) =>\n send({ type: 'setHue', h: Number((e.target as HTMLInputElement).value) }),\n ),\n },\n saturationSlider: {\n type: 'range',\n min: 0,\n max: 100,\n step: 1,\n 'aria-label': opts.saturationLabel ?? ((s: S) => locale(s).colorPicker.saturation),\n disabled: (s) => get(s).disabled,\n value: (s) => String(get(s).hsl.s),\n style: (s) => {\n const { h, l } = get(s).hsl\n return `background: linear-gradient(to right, hsl(${h} 0% ${l}%), hsl(${h} 100% ${l}%))`\n },\n 'data-scope': 'color-picker',\n 'data-part': 'saturation-slider',\n onInput: tagSend(send, ['setSaturation'], (e) =>\n send({ type: 'setSaturation', s: Number((e.target as HTMLInputElement).value) }),\n ),\n },\n lightnessSlider: {\n type: 'range',\n min: 0,\n max: 100,\n step: 1,\n 'aria-label': opts.lightnessLabel ?? ((s: S) => locale(s).colorPicker.lightness),\n disabled: (s) => get(s).disabled,\n value: (s) => String(get(s).hsl.l),\n style: (s) => {\n const { h, s: sat } = get(s).hsl\n return `background: linear-gradient(to right, hsl(${h} ${sat}% 0%), hsl(${h} ${sat}% 50%), hsl(${h} ${sat}% 100%))`\n },\n 'data-scope': 'color-picker',\n 'data-part': 'lightness-slider',\n onInput: tagSend(send, ['setLightness'], (e) =>\n send({ type: 'setLightness', l: Number((e.target as HTMLInputElement).value) }),\n ),\n },\n hexInput: {\n type: 'text',\n autoComplete: 'off',\n 'aria-label': opts.hexLabel ?? ((s: S) => locale(s).colorPicker.hex),\n disabled: (s) => get(s).disabled,\n value: (s) => toHex(get(s).hsl),\n 'data-scope': 'color-picker',\n 'data-part': 'hex-input',\n onInput: tagSend(send, ['setHex'], (e) =>\n send({ type: 'setHex', hex: (e.target as HTMLInputElement).value }),\n ),\n },\n swatch: {\n 'data-scope': 'color-picker',\n 'data-part': 'swatch',\n 'aria-hidden': 'true',\n style: (s) => `background-color:${toHex(get(s).hsl)};`,\n },\n }\n}\n\nexport const colorPicker = { init, update, connect, toHex, hexToHsl, hslToRgb }\n"]}
|
|
1
|
+
{"version":3,"file":"color-picker.js","sourceRoot":"","sources":["../../src/components/color-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send, Signal } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { LocaleContext } from '../locale.js'\n\n/**\n * Color picker — HSL/HSV color selection. Tracks hue (0-360), saturation\n * (0-100), and lightness (0-100). Emits hex strings for convenience.\n */\n\nexport interface Hsl {\n h: number\n s: number\n l: number\n}\n\nexport interface ColorPickerState {\n hsl: Hsl\n /** Alpha channel 0..1. */\n alpha: number\n disabled: boolean\n}\n\nexport type ColorPickerMsg =\n /** @intent(\"Set the full HSL color at once\") */\n | { type: 'setHsl'; hsl: Hsl }\n /** @intent(\"Set the hue channel (0–360)\") */\n | { type: 'setHue'; h: number }\n /** @intent(\"Set the saturation channel (0–100)\") */\n | { type: 'setSaturation'; s: number }\n /** @intent(\"Set the lightness channel (0–100)\") */\n | { type: 'setLightness'; l: number }\n /** @intent(\"Set the alpha channel (0–1)\") */\n | { type: 'setAlpha'; alpha: number }\n /** @intent(\"Set the color from a hex string (#RRGGBB or #RGB)\") */\n | { type: 'setHex'; hex: string }\n\nexport interface ColorPickerInit {\n hsl?: Hsl\n alpha?: number\n disabled?: boolean\n}\n\nexport function init(opts: ColorPickerInit = {}): ColorPickerState {\n return {\n hsl: opts.hsl ?? { h: 0, s: 100, l: 50 },\n alpha: opts.alpha ?? 1,\n disabled: opts.disabled ?? false,\n }\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n))\n}\n\nexport function update(state: ColorPickerState, msg: ColorPickerMsg): [ColorPickerState, never[]] {\n if (state.disabled) return [state, []]\n switch (msg.type) {\n case 'setHsl':\n return [{ ...state, hsl: msg.hsl }, []]\n case 'setHue':\n return [{ ...state, hsl: { ...state.hsl, h: ((msg.h % 360) + 360) % 360 } }, []]\n case 'setSaturation':\n return [{ ...state, hsl: { ...state.hsl, s: clamp(msg.s, 0, 100) } }, []]\n case 'setLightness':\n return [{ ...state, hsl: { ...state.hsl, l: clamp(msg.l, 0, 100) } }, []]\n case 'setAlpha':\n return [{ ...state, alpha: clamp(msg.alpha, 0, 1) }, []]\n case 'setHex': {\n const hsl = hexToHsl(msg.hex)\n return hsl ? [{ ...state, hsl }, []] : [state, []]\n }\n }\n}\n\n/** Convert HSL (h 0-360, s/l 0-100) to RGB (0-255 each). */\nexport function hslToRgb(hsl: Hsl): { r: number; g: number; b: number } {\n const s = hsl.s / 100\n const l = hsl.l / 100\n const c = (1 - Math.abs(2 * l - 1)) * s\n const x = c * (1 - Math.abs(((hsl.h / 60) % 2) - 1))\n const m = l - c / 2\n let r: number\n let g: number\n let b: number\n const h = hsl.h\n if (h < 60) [r, g, b] = [c, x, 0]\n else if (h < 120) [r, g, b] = [x, c, 0]\n else if (h < 180) [r, g, b] = [0, c, x]\n else if (h < 240) [r, g, b] = [0, x, c]\n else if (h < 300) [r, g, b] = [x, 0, c]\n else [r, g, b] = [c, 0, x]\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n }\n}\n\nexport function toHex(hsl: Hsl): string {\n const { r, g, b } = hslToRgb(hsl)\n const hex = (n: number): string => n.toString(16).padStart(2, '0')\n return `#${hex(r)}${hex(g)}${hex(b)}`\n}\n\nexport function hexToHsl(hex: string): Hsl | null {\n const normalized = hex.trim().replace(/^#/, '')\n if (!/^[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(normalized)) return null\n let r: number\n let g: number\n let b: number\n if (normalized.length === 3) {\n r = parseInt(normalized[0]! + normalized[0]!, 16)\n g = parseInt(normalized[1]! + normalized[1]!, 16)\n b = parseInt(normalized[2]! + normalized[2]!, 16)\n } else {\n r = parseInt(normalized.slice(0, 2), 16)\n g = parseInt(normalized.slice(2, 4), 16)\n b = parseInt(normalized.slice(4, 6), 16)\n }\n const rf = r / 255\n const gf = g / 255\n const bf = b / 255\n const max = Math.max(rf, gf, bf)\n const min = Math.min(rf, gf, bf)\n const d = max - min\n let h = 0\n if (d !== 0) {\n if (max === rf) h = ((gf - bf) / d) % 6\n else if (max === gf) h = (bf - rf) / d + 2\n else h = (rf - gf) / d + 4\n h *= 60\n if (h < 0) h += 360\n }\n const l = (max + min) / 2\n const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1))\n return {\n h: Math.round(h),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n }\n}\n\nexport interface ColorPickerParts {\n root: {\n 'data-scope': 'color-picker'\n 'data-part': 'root'\n 'data-disabled': Signal<'' | undefined>\n }\n hueSlider: {\n type: 'range'\n min: 0\n max: 360\n step: 1\n 'aria-label': string\n disabled: Signal<boolean>\n value: Signal<string>\n 'data-scope': 'color-picker'\n 'data-part': 'hue-slider'\n onInput: (e: Event) => void\n }\n saturationSlider: {\n type: 'range'\n min: 0\n max: 100\n step: 1\n 'aria-label': string\n disabled: Signal<boolean>\n value: Signal<string>\n style: Signal<string>\n 'data-scope': 'color-picker'\n 'data-part': 'saturation-slider'\n onInput: (e: Event) => void\n }\n lightnessSlider: {\n type: 'range'\n min: 0\n max: 100\n step: 1\n 'aria-label': string\n disabled: Signal<boolean>\n value: Signal<string>\n style: Signal<string>\n 'data-scope': 'color-picker'\n 'data-part': 'lightness-slider'\n onInput: (e: Event) => void\n }\n hexInput: {\n type: 'text'\n autoComplete: 'off'\n 'aria-label': string\n disabled: Signal<boolean>\n value: Signal<string>\n 'data-scope': 'color-picker'\n 'data-part': 'hex-input'\n onInput: (e: Event) => void\n }\n swatch: {\n 'data-scope': 'color-picker'\n 'data-part': 'swatch'\n 'aria-hidden': 'true'\n style: Signal<string>\n }\n}\n\nexport interface ConnectOptions {\n hueLabel?: string\n saturationLabel?: string\n lightnessLabel?: string\n hexLabel?: string\n}\n\nexport function connect(\n state: Signal<ColorPickerState>,\n send: Send<ColorPickerMsg>,\n opts: ConnectOptions = {},\n): ColorPickerParts {\n const locale = useContext(LocaleContext)\n return {\n root: {\n 'data-scope': 'color-picker',\n 'data-part': 'root',\n 'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),\n },\n hueSlider: {\n type: 'range',\n min: 0,\n max: 360,\n step: 1,\n 'aria-label': opts.hueLabel ?? locale.colorPicker.hue,\n disabled: state.map((s) => s.disabled),\n value: state.map((s) => String(s.hsl.h)),\n 'data-scope': 'color-picker',\n 'data-part': 'hue-slider',\n onInput: tagSend(send, ['setHue'], (e) =>\n send({ type: 'setHue', h: Number((e.target as HTMLInputElement).value) }),\n ),\n },\n saturationSlider: {\n type: 'range',\n min: 0,\n max: 100,\n step: 1,\n 'aria-label': opts.saturationLabel ?? locale.colorPicker.saturation,\n disabled: state.map((s) => s.disabled),\n value: state.map((s) => String(s.hsl.s)),\n style: state.map((s) => {\n const { h, l } = s.hsl\n return `background: linear-gradient(to right, hsl(${h} 0% ${l}%), hsl(${h} 100% ${l}%))`\n }),\n 'data-scope': 'color-picker',\n 'data-part': 'saturation-slider',\n onInput: tagSend(send, ['setSaturation'], (e) =>\n send({ type: 'setSaturation', s: Number((e.target as HTMLInputElement).value) }),\n ),\n },\n lightnessSlider: {\n type: 'range',\n min: 0,\n max: 100,\n step: 1,\n 'aria-label': opts.lightnessLabel ?? locale.colorPicker.lightness,\n disabled: state.map((s) => s.disabled),\n value: state.map((s) => String(s.hsl.l)),\n style: state.map((s) => {\n const { h, s: sat } = s.hsl\n return `background: linear-gradient(to right, hsl(${h} ${sat}% 0%), hsl(${h} ${sat}% 50%), hsl(${h} ${sat}% 100%))`\n }),\n 'data-scope': 'color-picker',\n 'data-part': 'lightness-slider',\n onInput: tagSend(send, ['setLightness'], (e) =>\n send({ type: 'setLightness', l: Number((e.target as HTMLInputElement).value) }),\n ),\n },\n hexInput: {\n type: 'text',\n autoComplete: 'off',\n 'aria-label': opts.hexLabel ?? locale.colorPicker.hex,\n disabled: state.map((s) => s.disabled),\n value: state.map((s) => toHex(s.hsl)),\n 'data-scope': 'color-picker',\n 'data-part': 'hex-input',\n onInput: tagSend(send, ['setHex'], (e) =>\n send({ type: 'setHex', hex: (e.target as HTMLInputElement).value }),\n ),\n },\n swatch: {\n 'data-scope': 'color-picker',\n 'data-part': 'swatch',\n 'aria-hidden': 'true',\n style: state.map((s) => `background-color:${toHex(s.hsl)};`),\n },\n }\n}\n\nexport const colorPicker = { init, update, connect, toHex, hexToHsl, hslToRgb }\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Send, TransitionOptions } from '@llui/dom';
|
|
1
|
+
import type { Send, Signal, TransitionOptions } from '@llui/dom';
|
|
2
2
|
import { type Placement } from '../utils/floating.js';
|
|
3
3
|
/**
|
|
4
4
|
* Combobox — text input paired with a filtered listbox dropdown. User
|
|
@@ -86,15 +86,15 @@ export interface ComboboxInit {
|
|
|
86
86
|
}
|
|
87
87
|
export declare function init(opts?: ComboboxInit): ComboboxState;
|
|
88
88
|
export declare function update(state: ComboboxState, msg: ComboboxMsg): [ComboboxState, never[]];
|
|
89
|
-
export interface ComboboxItemParts
|
|
89
|
+
export interface ComboboxItemParts {
|
|
90
90
|
item: {
|
|
91
91
|
role: 'option';
|
|
92
92
|
id: string;
|
|
93
|
-
'aria-selected':
|
|
94
|
-
'aria-disabled':
|
|
95
|
-
'data-state':
|
|
96
|
-
'data-highlighted':
|
|
97
|
-
'data-disabled':
|
|
93
|
+
'aria-selected': Signal<boolean>;
|
|
94
|
+
'aria-disabled': Signal<'true' | undefined>;
|
|
95
|
+
'data-state': Signal<'selected' | undefined>;
|
|
96
|
+
'data-highlighted': Signal<'' | undefined>;
|
|
97
|
+
'data-disabled': Signal<'' | undefined>;
|
|
98
98
|
'data-scope': 'combobox';
|
|
99
99
|
'data-part': 'item';
|
|
100
100
|
'data-value': string;
|
|
@@ -103,28 +103,28 @@ export interface ComboboxItemParts<S> {
|
|
|
103
103
|
onPointerMove: (e: PointerEvent) => void;
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
export interface ComboboxParts
|
|
106
|
+
export interface ComboboxParts {
|
|
107
107
|
root: {
|
|
108
108
|
role: 'combobox';
|
|
109
|
-
'aria-expanded':
|
|
109
|
+
'aria-expanded': Signal<boolean>;
|
|
110
110
|
'aria-controls': string;
|
|
111
111
|
'aria-haspopup': 'listbox';
|
|
112
112
|
'data-scope': 'combobox';
|
|
113
113
|
'data-part': 'root';
|
|
114
|
-
'data-state':
|
|
114
|
+
'data-state': Signal<'open' | 'closed'>;
|
|
115
115
|
};
|
|
116
116
|
input: {
|
|
117
117
|
type: 'text';
|
|
118
118
|
role: 'combobox';
|
|
119
119
|
autoComplete: 'off';
|
|
120
120
|
'aria-autocomplete': 'list';
|
|
121
|
-
'aria-expanded':
|
|
121
|
+
'aria-expanded': Signal<boolean>;
|
|
122
122
|
'aria-controls': string;
|
|
123
|
-
'aria-activedescendant':
|
|
124
|
-
'aria-disabled':
|
|
123
|
+
'aria-activedescendant': Signal<string | undefined>;
|
|
124
|
+
'aria-disabled': Signal<'true' | undefined>;
|
|
125
125
|
id: string;
|
|
126
|
-
disabled:
|
|
127
|
-
value:
|
|
126
|
+
disabled: Signal<boolean>;
|
|
127
|
+
value: Signal<string>;
|
|
128
128
|
'data-scope': 'combobox';
|
|
129
129
|
'data-part': 'input';
|
|
130
130
|
onInput: (e: Event) => void;
|
|
@@ -133,8 +133,8 @@ export interface ComboboxParts<S> {
|
|
|
133
133
|
};
|
|
134
134
|
trigger: {
|
|
135
135
|
type: 'button';
|
|
136
|
-
'aria-label': string
|
|
137
|
-
'aria-expanded':
|
|
136
|
+
'aria-label': string;
|
|
137
|
+
'aria-expanded': Signal<boolean>;
|
|
138
138
|
'aria-controls': string;
|
|
139
139
|
tabIndex: -1;
|
|
140
140
|
'data-scope': 'combobox';
|
|
@@ -151,11 +151,11 @@ export interface ComboboxParts<S> {
|
|
|
151
151
|
id: string;
|
|
152
152
|
'aria-labelledby': string;
|
|
153
153
|
tabIndex: -1;
|
|
154
|
-
'data-state':
|
|
154
|
+
'data-state': Signal<'open' | 'closed'>;
|
|
155
155
|
'data-scope': 'combobox';
|
|
156
156
|
'data-part': 'content';
|
|
157
157
|
};
|
|
158
|
-
item: (value: string, index: number) => ComboboxItemParts
|
|
158
|
+
item: (value: string, index: number) => ComboboxItemParts;
|
|
159
159
|
empty: {
|
|
160
160
|
'data-scope': 'combobox';
|
|
161
161
|
'data-part': 'empty';
|
|
@@ -165,12 +165,12 @@ export interface ConnectOptions {
|
|
|
165
165
|
id: string;
|
|
166
166
|
triggerLabel?: string;
|
|
167
167
|
}
|
|
168
|
-
export declare function connect
|
|
169
|
-
export interface OverlayOptions
|
|
170
|
-
|
|
168
|
+
export declare function connect(state: Signal<ComboboxState>, send: Send<ComboboxMsg>, opts: ConnectOptions): ComboboxParts;
|
|
169
|
+
export interface OverlayOptions {
|
|
170
|
+
state: Signal<ComboboxState>;
|
|
171
171
|
send: Send<ComboboxMsg>;
|
|
172
|
-
parts: ComboboxParts
|
|
173
|
-
content: () => Node[];
|
|
172
|
+
parts: ComboboxParts;
|
|
173
|
+
content: () => readonly Node[];
|
|
174
174
|
placement?: Placement;
|
|
175
175
|
offset?: number;
|
|
176
176
|
flip?: boolean;
|
|
@@ -179,7 +179,7 @@ export interface OverlayOptions<S> {
|
|
|
179
179
|
transition?: TransitionOptions;
|
|
180
180
|
target?: string | HTMLElement;
|
|
181
181
|
}
|
|
182
|
-
export declare function overlay
|
|
182
|
+
export declare function overlay(opts: OverlayOptions): Node;
|
|
183
183
|
export declare const combobox: {
|
|
184
184
|
init: typeof init;
|
|
185
185
|
update: typeof update;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../src/components/combobox.ts"],"names":[],"mappings":"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"}
|
|
@@ -176,38 +176,38 @@ export function update(state, msg) {
|
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
export function connect(
|
|
179
|
+
export function connect(state, send, opts) {
|
|
180
180
|
const locale = useContext(LocaleContext);
|
|
181
181
|
const base = opts.id;
|
|
182
182
|
const inputId = `${base}:input`;
|
|
183
183
|
const contentId = `${base}:content`;
|
|
184
184
|
const itemId = (index) => `${base}:item:${index}`;
|
|
185
|
-
const triggerLabel = opts.triggerLabel ??
|
|
185
|
+
const triggerLabel = opts.triggerLabel ?? locale.combobox.toggle;
|
|
186
186
|
return {
|
|
187
187
|
root: {
|
|
188
188
|
role: 'combobox',
|
|
189
|
-
'aria-expanded': (s) =>
|
|
189
|
+
'aria-expanded': state.map((s) => s.open),
|
|
190
190
|
'aria-controls': contentId,
|
|
191
191
|
'aria-haspopup': 'listbox',
|
|
192
192
|
'data-scope': 'combobox',
|
|
193
193
|
'data-part': 'root',
|
|
194
|
-
'data-state': (s) => (
|
|
194
|
+
'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
|
|
195
195
|
},
|
|
196
196
|
input: {
|
|
197
197
|
type: 'text',
|
|
198
198
|
role: 'combobox',
|
|
199
199
|
autoComplete: 'off',
|
|
200
200
|
'aria-autocomplete': 'list',
|
|
201
|
-
'aria-expanded': (s) =>
|
|
201
|
+
'aria-expanded': state.map((s) => s.open),
|
|
202
202
|
'aria-controls': contentId,
|
|
203
|
-
'aria-activedescendant': (s) => {
|
|
204
|
-
const idx =
|
|
203
|
+
'aria-activedescendant': state.map((s) => {
|
|
204
|
+
const idx = s.highlightedIndex;
|
|
205
205
|
return idx === null ? undefined : itemId(idx);
|
|
206
|
-
},
|
|
207
|
-
'aria-disabled': (s) => (
|
|
206
|
+
}),
|
|
207
|
+
'aria-disabled': state.map((s) => (s.disabled ? 'true' : undefined)),
|
|
208
208
|
id: inputId,
|
|
209
|
-
disabled: (s) =>
|
|
210
|
-
value: (s) =>
|
|
209
|
+
disabled: state.map((s) => s.disabled),
|
|
210
|
+
value: state.map((s) => s.inputValue),
|
|
211
211
|
'data-scope': 'combobox',
|
|
212
212
|
'data-part': 'input',
|
|
213
213
|
onInput: tagSend(send, ['setInputValue'], (e) => {
|
|
@@ -257,7 +257,7 @@ export function connect(get, send, opts) {
|
|
|
257
257
|
trigger: {
|
|
258
258
|
type: 'button',
|
|
259
259
|
'aria-label': triggerLabel,
|
|
260
|
-
'aria-expanded': (s) =>
|
|
260
|
+
'aria-expanded': state.map((s) => s.open),
|
|
261
261
|
'aria-controls': contentId,
|
|
262
262
|
tabIndex: -1,
|
|
263
263
|
'data-scope': 'combobox',
|
|
@@ -274,7 +274,7 @@ export function connect(get, send, opts) {
|
|
|
274
274
|
id: contentId,
|
|
275
275
|
'aria-labelledby': inputId,
|
|
276
276
|
tabIndex: -1,
|
|
277
|
-
'data-state': (s) => (
|
|
277
|
+
'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
|
|
278
278
|
'data-scope': 'combobox',
|
|
279
279
|
'data-part': 'content',
|
|
280
280
|
},
|
|
@@ -282,11 +282,11 @@ export function connect(get, send, opts) {
|
|
|
282
282
|
item: {
|
|
283
283
|
role: 'option',
|
|
284
284
|
id: itemId(index),
|
|
285
|
-
'aria-selected': (s) =>
|
|
286
|
-
'aria-disabled': (s) => (
|
|
287
|
-
'data-state': (s) => (
|
|
288
|
-
'data-highlighted': (s) => (
|
|
289
|
-
'data-disabled': (s) => (
|
|
285
|
+
'aria-selected': state.map((s) => s.value.includes(value)),
|
|
286
|
+
'aria-disabled': state.map((s) => (s.disabledItems.includes(value) ? 'true' : undefined)),
|
|
287
|
+
'data-state': state.map((s) => (s.value.includes(value) ? 'selected' : undefined)),
|
|
288
|
+
'data-highlighted': state.map((s) => (s.highlightedIndex === index ? '' : undefined)),
|
|
289
|
+
'data-disabled': state.map((s) => (s.disabledItems.includes(value) ? '' : undefined)),
|
|
290
290
|
'data-scope': 'combobox',
|
|
291
291
|
'data-part': 'item',
|
|
292
292
|
'data-value': value,
|
|
@@ -302,7 +302,7 @@ export function connect(get, send, opts) {
|
|
|
302
302
|
};
|
|
303
303
|
}
|
|
304
304
|
export function overlay(opts) {
|
|
305
|
-
const
|
|
305
|
+
const targetOpt = opts.target ?? 'body';
|
|
306
306
|
const placement = opts.placement ?? 'bottom-start';
|
|
307
307
|
const offset = opts.offset ?? 4;
|
|
308
308
|
const flip = opts.flip !== false;
|
|
@@ -311,46 +311,41 @@ export function overlay(opts) {
|
|
|
311
311
|
const parts = opts.parts;
|
|
312
312
|
const contentId = parts.content.id;
|
|
313
313
|
const inputId = parts.input.id;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
},
|
|
350
|
-
}),
|
|
351
|
-
enter: opts.transition?.enter,
|
|
352
|
-
leave: opts.transition?.leave,
|
|
353
|
-
});
|
|
314
|
+
const host = typeof targetOpt === 'string' ? (document.querySelector(targetOpt) ?? document.body) : targetOpt;
|
|
315
|
+
return show(opts.state.map((s) => s.open), () => [
|
|
316
|
+
portal(() => {
|
|
317
|
+
onMount(() => {
|
|
318
|
+
const contentEl = document.getElementById(contentId);
|
|
319
|
+
const inputEl = document.getElementById(inputId);
|
|
320
|
+
if (!contentEl || !inputEl)
|
|
321
|
+
return;
|
|
322
|
+
const cleanups = [];
|
|
323
|
+
const positioner = contentEl.closest('[data-part="positioner"]');
|
|
324
|
+
const floatingEl = positioner ?? contentEl;
|
|
325
|
+
if (sameWidth) {
|
|
326
|
+
floatingEl.style.minWidth = `${inputEl.offsetWidth}px`;
|
|
327
|
+
}
|
|
328
|
+
cleanups.push(attachFloating({
|
|
329
|
+
anchor: inputEl,
|
|
330
|
+
floating: floatingEl,
|
|
331
|
+
placement,
|
|
332
|
+
offset,
|
|
333
|
+
flip,
|
|
334
|
+
shift,
|
|
335
|
+
}));
|
|
336
|
+
cleanups.push(pushDismissable({
|
|
337
|
+
element: contentEl,
|
|
338
|
+
ignore: () => [inputEl],
|
|
339
|
+
onDismiss: () => opts.send({ type: 'close' }),
|
|
340
|
+
}));
|
|
341
|
+
return () => {
|
|
342
|
+
for (let i = cleanups.length - 1; i >= 0; i--)
|
|
343
|
+
cleanups[i]();
|
|
344
|
+
};
|
|
345
|
+
});
|
|
346
|
+
return [div(parts.positioner, opts.content())];
|
|
347
|
+
}, host),
|
|
348
|
+
]);
|
|
354
349
|
}
|
|
355
350
|
export const combobox = { init, update, connect, overlay };
|
|
356
351
|
//# sourceMappingURL=combobox.js.map
|