@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.
Files changed (243) hide show
  1. package/dist/components/accordion.d.ts +13 -13
  2. package/dist/components/accordion.d.ts.map +1 -1
  3. package/dist/components/accordion.js +9 -9
  4. package/dist/components/accordion.js.map +1 -1
  5. package/dist/components/alert-dialog.d.ts +8 -8
  6. package/dist/components/alert-dialog.d.ts.map +1 -1
  7. package/dist/components/alert-dialog.js +2 -2
  8. package/dist/components/alert-dialog.js.map +1 -1
  9. package/dist/components/angle-slider.d.ts +13 -13
  10. package/dist/components/angle-slider.d.ts.map +1 -1
  11. package/dist/components/angle-slider.js +11 -11
  12. package/dist/components/angle-slider.js.map +1 -1
  13. package/dist/components/async-list.d.ts +7 -7
  14. package/dist/components/async-list.d.ts.map +1 -1
  15. package/dist/components/async-list.js +5 -8
  16. package/dist/components/async-list.js.map +1 -1
  17. package/dist/components/avatar.d.ts +9 -9
  18. package/dist/components/avatar.d.ts.map +1 -1
  19. package/dist/components/avatar.js +7 -7
  20. package/dist/components/avatar.js.map +1 -1
  21. package/dist/components/carousel.d.ts +18 -18
  22. package/dist/components/carousel.d.ts.map +1 -1
  23. package/dist/components/carousel.js +12 -12
  24. package/dist/components/carousel.js.map +1 -1
  25. package/dist/components/cascade-select.d.ts +12 -12
  26. package/dist/components/cascade-select.d.ts.map +1 -1
  27. package/dist/components/cascade-select.js +8 -8
  28. package/dist/components/cascade-select.js.map +1 -1
  29. package/dist/components/checkbox.d.ts +14 -14
  30. package/dist/components/checkbox.d.ts.map +1 -1
  31. package/dist/components/checkbox.js +12 -12
  32. package/dist/components/checkbox.js.map +1 -1
  33. package/dist/components/clipboard.d.ts +8 -8
  34. package/dist/components/clipboard.d.ts.map +1 -1
  35. package/dist/components/clipboard.js +6 -6
  36. package/dist/components/clipboard.js.map +1 -1
  37. package/dist/components/collapsible.d.ts +11 -11
  38. package/dist/components/collapsible.d.ts.map +1 -1
  39. package/dist/components/collapsible.js +9 -9
  40. package/dist/components/collapsible.js.map +1 -1
  41. package/dist/components/color-picker.d.ts +19 -19
  42. package/dist/components/color-picker.d.ts.map +1 -1
  43. package/dist/components/color-picker.js +21 -21
  44. package/dist/components/color-picker.js.map +1 -1
  45. package/dist/components/combobox.d.ts +25 -25
  46. package/dist/components/combobox.d.ts.map +1 -1
  47. package/dist/components/combobox.js +54 -59
  48. package/dist/components/combobox.js.map +1 -1
  49. package/dist/components/context-menu.d.ts +14 -14
  50. package/dist/components/context-menu.d.ts.map +1 -1
  51. package/dist/components/context-menu.js +15 -19
  52. package/dist/components/context-menu.js.map +1 -1
  53. package/dist/components/date-input.d.ts +13 -13
  54. package/dist/components/date-input.d.ts.map +1 -1
  55. package/dist/components/date-input.js +11 -11
  56. package/dist/components/date-input.js.map +1 -1
  57. package/dist/components/date-picker.d.ts +11 -11
  58. package/dist/components/date-picker.d.ts.map +1 -1
  59. package/dist/components/date-picker.js +7 -7
  60. package/dist/components/date-picker.js.map +1 -1
  61. package/dist/components/dialog.d.ts +15 -15
  62. package/dist/components/dialog.d.ts.map +1 -1
  63. package/dist/components/dialog.js +45 -50
  64. package/dist/components/dialog.js.map +1 -1
  65. package/dist/components/drawer.d.ts +13 -13
  66. package/dist/components/drawer.d.ts.map +1 -1
  67. package/dist/components/drawer.js +44 -49
  68. package/dist/components/drawer.js.map +1 -1
  69. package/dist/components/editable.d.ts +11 -11
  70. package/dist/components/editable.d.ts.map +1 -1
  71. package/dist/components/editable.js +9 -9
  72. package/dist/components/editable.js.map +1 -1
  73. package/dist/components/file-upload.d.ts +19 -19
  74. package/dist/components/file-upload.d.ts.map +1 -1
  75. package/dist/components/file-upload.js +14 -14
  76. package/dist/components/file-upload.js.map +1 -1
  77. package/dist/components/floating-panel.d.ts +14 -14
  78. package/dist/components/floating-panel.d.ts.map +1 -1
  79. package/dist/components/floating-panel.js +13 -14
  80. package/dist/components/floating-panel.js.map +1 -1
  81. package/dist/components/form.d.ts +9 -9
  82. package/dist/components/form.d.ts.map +1 -1
  83. package/dist/components/form.js +7 -7
  84. package/dist/components/form.js.map +1 -1
  85. package/dist/components/hover-card.d.ts +9 -9
  86. package/dist/components/hover-card.d.ts.map +1 -1
  87. package/dist/components/hover-card.js +12 -13
  88. package/dist/components/hover-card.js.map +1 -1
  89. package/dist/components/image-cropper.d.ts +8 -8
  90. package/dist/components/image-cropper.d.ts.map +1 -1
  91. package/dist/components/image-cropper.js +7 -8
  92. package/dist/components/image-cropper.js.map +1 -1
  93. package/dist/components/in-view.d.ts +6 -6
  94. package/dist/components/in-view.d.ts.map +1 -1
  95. package/dist/components/in-view.js +2 -2
  96. package/dist/components/in-view.js.map +1 -1
  97. package/dist/components/listbox.d.ts +16 -16
  98. package/dist/components/listbox.d.ts.map +1 -1
  99. package/dist/components/listbox.js +16 -16
  100. package/dist/components/listbox.js.map +1 -1
  101. package/dist/components/marquee.d.ts +8 -8
  102. package/dist/components/marquee.d.ts.map +1 -1
  103. package/dist/components/marquee.js +8 -11
  104. package/dist/components/marquee.js.map +1 -1
  105. package/dist/components/menu.d.ts +15 -15
  106. package/dist/components/menu.d.ts.map +1 -1
  107. package/dist/components/menu.js +16 -17
  108. package/dist/components/menu.js.map +1 -1
  109. package/dist/components/navigation-menu.d.ts +12 -12
  110. package/dist/components/navigation-menu.d.ts.map +1 -1
  111. package/dist/components/navigation-menu.js +8 -8
  112. package/dist/components/navigation-menu.js.map +1 -1
  113. package/dist/components/number-input.d.ts +18 -18
  114. package/dist/components/number-input.d.ts.map +1 -1
  115. package/dist/components/number-input.js +16 -20
  116. package/dist/components/number-input.js.map +1 -1
  117. package/dist/components/pagination.d.ts +13 -13
  118. package/dist/components/pagination.d.ts.map +1 -1
  119. package/dist/components/pagination.js +11 -17
  120. package/dist/components/pagination.js.map +1 -1
  121. package/dist/components/password-input.d.ts +11 -11
  122. package/dist/components/password-input.d.ts.map +1 -1
  123. package/dist/components/password-input.js +11 -11
  124. package/dist/components/password-input.js.map +1 -1
  125. package/dist/components/pin-input.d.ts +9 -9
  126. package/dist/components/pin-input.d.ts.map +1 -1
  127. package/dist/components/pin-input.js +9 -9
  128. package/dist/components/pin-input.js.map +1 -1
  129. package/dist/components/popover.d.ts +11 -11
  130. package/dist/components/popover.d.ts.map +1 -1
  131. package/dist/components/popover.js +61 -60
  132. package/dist/components/popover.js.map +1 -1
  133. package/dist/components/presence.d.ts +7 -5
  134. package/dist/components/presence.d.ts.map +1 -1
  135. package/dist/components/presence.js +5 -3
  136. package/dist/components/presence.js.map +1 -1
  137. package/dist/components/progress.d.ts +14 -14
  138. package/dist/components/progress.d.ts.map +1 -1
  139. package/dist/components/progress.js +12 -12
  140. package/dist/components/progress.js.map +1 -1
  141. package/dist/components/qr-code.d.ts +7 -7
  142. package/dist/components/qr-code.d.ts.map +1 -1
  143. package/dist/components/qr-code.js +7 -7
  144. package/dist/components/qr-code.js.map +1 -1
  145. package/dist/components/radio-group.d.ts +15 -15
  146. package/dist/components/radio-group.d.ts.map +1 -1
  147. package/dist/components/radio-group.js +12 -13
  148. package/dist/components/radio-group.js.map +1 -1
  149. package/dist/components/rating-group.d.ts +13 -13
  150. package/dist/components/rating-group.d.ts.map +1 -1
  151. package/dist/components/rating-group.js +10 -11
  152. package/dist/components/rating-group.js.map +1 -1
  153. package/dist/components/scroll-area.d.ts +10 -10
  154. package/dist/components/scroll-area.d.ts.map +1 -1
  155. package/dist/components/scroll-area.js +10 -15
  156. package/dist/components/scroll-area.js.map +1 -1
  157. package/dist/components/select.d.ts +26 -26
  158. package/dist/components/select.d.ts.map +1 -1
  159. package/dist/components/select.js +29 -33
  160. package/dist/components/select.js.map +1 -1
  161. package/dist/components/signature-pad.d.ts +12 -12
  162. package/dist/components/signature-pad.d.ts.map +1 -1
  163. package/dist/components/signature-pad.js +10 -10
  164. package/dist/components/signature-pad.js.map +1 -1
  165. package/dist/components/slider.d.ts +22 -22
  166. package/dist/components/slider.d.ts.map +1 -1
  167. package/dist/components/slider.js +17 -17
  168. package/dist/components/slider.js.map +1 -1
  169. package/dist/components/sortable.d.ts +11 -11
  170. package/dist/components/sortable.d.ts.map +1 -1
  171. package/dist/components/sortable.js +20 -20
  172. package/dist/components/sortable.js.map +1 -1
  173. package/dist/components/splitter.d.ts +15 -15
  174. package/dist/components/splitter.d.ts.map +1 -1
  175. package/dist/components/splitter.js +15 -15
  176. package/dist/components/splitter.js.map +1 -1
  177. package/dist/components/steps.d.ts +14 -14
  178. package/dist/components/steps.d.ts.map +1 -1
  179. package/dist/components/steps.js +10 -16
  180. package/dist/components/steps.js.map +1 -1
  181. package/dist/components/switch.d.ts +12 -12
  182. package/dist/components/switch.d.ts.map +1 -1
  183. package/dist/components/switch.js +10 -10
  184. package/dist/components/switch.js.map +1 -1
  185. package/dist/components/tabs.d.ts +15 -15
  186. package/dist/components/tabs.d.ts.map +1 -1
  187. package/dist/components/tabs.js +11 -11
  188. package/dist/components/tabs.js.map +1 -1
  189. package/dist/components/tags-input.d.ts +14 -14
  190. package/dist/components/tags-input.d.ts.map +1 -1
  191. package/dist/components/tags-input.js +10 -10
  192. package/dist/components/tags-input.js.map +1 -1
  193. package/dist/components/theme-switch.d.ts +5 -5
  194. package/dist/components/theme-switch.d.ts.map +1 -1
  195. package/dist/components/theme-switch.js +3 -3
  196. package/dist/components/theme-switch.js.map +1 -1
  197. package/dist/components/time-picker.d.ts +19 -19
  198. package/dist/components/time-picker.d.ts.map +1 -1
  199. package/dist/components/time-picker.js +17 -17
  200. package/dist/components/time-picker.js.map +1 -1
  201. package/dist/components/timer.d.ts +10 -10
  202. package/dist/components/timer.d.ts.map +1 -1
  203. package/dist/components/timer.js +8 -8
  204. package/dist/components/timer.js.map +1 -1
  205. package/dist/components/toast.d.ts +8 -8
  206. package/dist/components/toast.d.ts.map +1 -1
  207. package/dist/components/toast.js +4 -4
  208. package/dist/components/toast.js.map +1 -1
  209. package/dist/components/toc.d.ts +12 -12
  210. package/dist/components/toc.d.ts.map +1 -1
  211. package/dist/components/toc.js +8 -8
  212. package/dist/components/toc.js.map +1 -1
  213. package/dist/components/toggle-group.d.ts +13 -13
  214. package/dist/components/toggle-group.d.ts.map +1 -1
  215. package/dist/components/toggle-group.js +9 -9
  216. package/dist/components/toggle-group.js.map +1 -1
  217. package/dist/components/toggle.d.ts +8 -8
  218. package/dist/components/toggle.d.ts.map +1 -1
  219. package/dist/components/toggle.js +6 -6
  220. package/dist/components/toggle.js.map +1 -1
  221. package/dist/components/tooltip.d.ts +10 -10
  222. package/dist/components/tooltip.d.ts.map +1 -1
  223. package/dist/components/tooltip.js +13 -14
  224. package/dist/components/tooltip.js.map +1 -1
  225. package/dist/components/tour.d.ts +7 -7
  226. package/dist/components/tour.d.ts.map +1 -1
  227. package/dist/components/tour.js +5 -5
  228. package/dist/components/tour.js.map +1 -1
  229. package/dist/components/tree-view.d.ts +19 -19
  230. package/dist/components/tree-view.d.ts.map +1 -1
  231. package/dist/components/tree-view.js +23 -23
  232. package/dist/components/tree-view.js.map +1 -1
  233. package/dist/patterns/confirm-dialog.d.ts +4 -4
  234. package/dist/patterns/confirm-dialog.d.ts.map +1 -1
  235. package/dist/patterns/confirm-dialog.js +7 -9
  236. package/dist/patterns/confirm-dialog.js.map +1 -1
  237. package/package.json +3 -3
  238. package/dist/components/enter-view.d.ts +0 -73
  239. package/dist/components/enter-view.d.ts.map +0 -1
  240. package/dist/components/enter-view.js +0 -51
  241. package/dist/utils/validators.d.ts +0 -34
  242. package/dist/utils/validators.d.ts.map +0 -1
  243. 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<S> {
63
+ export interface ColorPickerParts {
64
64
  root: {
65
65
  'data-scope': 'color-picker';
66
66
  'data-part': 'root';
67
- 'data-disabled': (s: S) => '' | undefined;
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 | ((s: S) => string);
75
- disabled: (s: S) => boolean;
76
- value: (s: S) => string;
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 | ((s: S) => string);
87
- disabled: (s: S) => boolean;
88
- value: (s: S) => string;
89
- style: (s: S) => string;
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 | ((s: S) => string);
100
- disabled: (s: S) => boolean;
101
- value: (s: S) => string;
102
- style: (s: S) => string;
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 | ((s: S) => string);
111
- disabled: (s: S) => boolean;
112
- value: (s: S) => string;
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: (s: S) => string;
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<S>(get: (s: S) => ColorPickerState, send: Send<ColorPickerMsg>, opts?: ConnectOptions): ColorPickerParts<S>;
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":"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"}
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(get, send, opts = {}) {
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) => (get(s).disabled ? '' : undefined),
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 ?? ((s) => locale(s).colorPicker.hue),
124
- disabled: (s) => get(s).disabled,
125
- value: (s) => String(get(s).hsl.h),
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 ?? ((s) => locale(s).colorPicker.saturation),
136
- disabled: (s) => get(s).disabled,
137
- value: (s) => String(get(s).hsl.s),
138
- style: (s) => {
139
- const { h, l } = get(s).hsl;
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 ?? ((s) => locale(s).colorPicker.lightness),
152
- disabled: (s) => get(s).disabled,
153
- value: (s) => String(get(s).hsl.l),
154
- style: (s) => {
155
- const { h, s: sat } = get(s).hsl;
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 ?? ((s) => locale(s).colorPicker.hex),
166
- disabled: (s) => get(s).disabled,
167
- value: (s) => toHex(get(s).hsl),
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(get(s).hsl)};`,
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<S> {
89
+ export interface ComboboxItemParts {
90
90
  item: {
91
91
  role: 'option';
92
92
  id: string;
93
- 'aria-selected': (s: S) => boolean;
94
- 'aria-disabled': (s: S) => 'true' | undefined;
95
- 'data-state': (s: S) => 'selected' | undefined;
96
- 'data-highlighted': (s: S) => '' | undefined;
97
- 'data-disabled': (s: S) => '' | undefined;
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<S> {
106
+ export interface ComboboxParts {
107
107
  root: {
108
108
  role: 'combobox';
109
- 'aria-expanded': (s: S) => boolean;
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': (s: S) => 'open' | 'closed';
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': (s: S) => boolean;
121
+ 'aria-expanded': Signal<boolean>;
122
122
  'aria-controls': string;
123
- 'aria-activedescendant': (s: S) => string | undefined;
124
- 'aria-disabled': (s: S) => 'true' | undefined;
123
+ 'aria-activedescendant': Signal<string | undefined>;
124
+ 'aria-disabled': Signal<'true' | undefined>;
125
125
  id: string;
126
- disabled: (s: S) => boolean;
127
- value: (s: S) => string;
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 | ((s: S) => string);
137
- 'aria-expanded': (s: S) => boolean;
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': (s: S) => 'open' | 'closed';
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<S>;
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<S>(get: (s: S) => ComboboxState, send: Send<ComboboxMsg>, opts: ConnectOptions): ComboboxParts<S>;
169
- export interface OverlayOptions<S> {
170
- get: (s: S) => ComboboxState;
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<S>;
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<S>(opts: OverlayOptions<S>): Node[];
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":"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"}
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(get, send, opts) {
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 ?? ((s) => locale(s).combobox.toggle);
185
+ const triggerLabel = opts.triggerLabel ?? locale.combobox.toggle;
186
186
  return {
187
187
  root: {
188
188
  role: 'combobox',
189
- 'aria-expanded': (s) => get(s).open,
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) => (get(s).open ? 'open' : 'closed'),
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) => get(s).open,
201
+ 'aria-expanded': state.map((s) => s.open),
202
202
  'aria-controls': contentId,
203
- 'aria-activedescendant': (s) => {
204
- const idx = get(s).highlightedIndex;
203
+ 'aria-activedescendant': state.map((s) => {
204
+ const idx = s.highlightedIndex;
205
205
  return idx === null ? undefined : itemId(idx);
206
- },
207
- 'aria-disabled': (s) => (get(s).disabled ? 'true' : undefined),
206
+ }),
207
+ 'aria-disabled': state.map((s) => (s.disabled ? 'true' : undefined)),
208
208
  id: inputId,
209
- disabled: (s) => get(s).disabled,
210
- value: (s) => get(s).inputValue,
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) => get(s).open,
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) => (get(s).open ? 'open' : 'closed'),
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) => get(s).value.includes(value),
286
- 'aria-disabled': (s) => (get(s).disabledItems.includes(value) ? 'true' : undefined),
287
- 'data-state': (s) => (get(s).value.includes(value) ? 'selected' : undefined),
288
- 'data-highlighted': (s) => (get(s).highlightedIndex === index ? '' : undefined),
289
- 'data-disabled': (s) => (get(s).disabledItems.includes(value) ? '' : undefined),
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 target = opts.target ?? 'body';
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
- return show({
315
- when: (s) => opts.get(s).open,
316
- render: () => portal({
317
- target,
318
- render: () => {
319
- onMount(() => {
320
- const contentEl = document.getElementById(contentId);
321
- const inputEl = document.getElementById(inputId);
322
- if (!contentEl || !inputEl)
323
- return;
324
- const cleanups = [];
325
- const positioner = contentEl.closest('[data-part="positioner"]');
326
- const floatingEl = positioner ?? contentEl;
327
- if (sameWidth) {
328
- floatingEl.style.minWidth = `${inputEl.offsetWidth}px`;
329
- }
330
- cleanups.push(attachFloating({
331
- anchor: inputEl,
332
- floating: floatingEl,
333
- placement,
334
- offset,
335
- flip,
336
- shift,
337
- }));
338
- cleanups.push(pushDismissable({
339
- element: contentEl,
340
- ignore: () => [inputEl],
341
- onDismiss: () => opts.send({ type: 'close' }),
342
- }));
343
- return () => {
344
- for (let i = cleanups.length - 1; i >= 0; i--)
345
- cleanups[i]();
346
- };
347
- });
348
- return [div(parts.positioner, opts.content())];
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