@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
  * File upload — input element + drag-and-drop zone. Tracks selected files,
4
4
  * drag state, accept filters, validation errors. Multiple or single selection.
@@ -137,7 +137,7 @@ export declare function totalSize(state: FileUploadState): number;
137
137
  * page. Call from onMount and invoke the returned disposer on unmount.
138
138
  */
139
139
  export declare function preventDocumentDrop(): () => void;
140
- export interface FileUploadItemParts<S> {
140
+ export interface FileUploadItemParts {
141
141
  item: {
142
142
  'data-scope': 'file-upload';
143
143
  'data-part': 'item';
@@ -157,7 +157,7 @@ export interface FileUploadItemParts<S> {
157
157
  };
158
158
  removeTrigger: {
159
159
  type: 'button';
160
- 'aria-label': string | ((s: S) => string);
160
+ 'aria-label': string;
161
161
  'data-scope': 'file-upload';
162
162
  'data-part': 'item-remove';
163
163
  onClick: (e: MouseEvent) => void;
@@ -165,25 +165,25 @@ export interface FileUploadItemParts<S> {
165
165
  /** Zag-aligned alias for removeTrigger. Same wiring. */
166
166
  itemDeleteTrigger: {
167
167
  type: 'button';
168
- 'aria-label': string | ((s: S) => string);
168
+ 'aria-label': string;
169
169
  'data-scope': 'file-upload';
170
170
  'data-part': 'item-delete-trigger';
171
171
  onClick: (e: MouseEvent) => void;
172
172
  };
173
173
  }
174
- export interface FileUploadParts<S> {
174
+ export interface FileUploadParts {
175
175
  root: {
176
176
  'data-scope': 'file-upload';
177
177
  'data-part': 'root';
178
- 'data-disabled': (s: S) => '' | undefined;
179
- 'data-dragging': (s: S) => '' | undefined;
180
- 'data-invalid': (s: S) => '' | undefined;
181
- 'data-readonly': (s: S) => '' | undefined;
178
+ 'data-disabled': Signal<'' | undefined>;
179
+ 'data-dragging': Signal<'' | undefined>;
180
+ 'data-invalid': Signal<'' | undefined>;
181
+ 'data-readonly': Signal<'' | undefined>;
182
182
  };
183
183
  dropzone: {
184
184
  'data-scope': 'file-upload';
185
185
  'data-part': 'dropzone';
186
- 'data-dragging': (s: S) => '' | undefined;
186
+ 'data-dragging': Signal<'' | undefined>;
187
187
  onClick: (e: MouseEvent) => void;
188
188
  onDragEnter: (e: DragEvent) => void;
189
189
  onDragOver: (e: DragEvent) => void;
@@ -194,7 +194,7 @@ export interface FileUploadParts<S> {
194
194
  type: 'button';
195
195
  'data-scope': 'file-upload';
196
196
  'data-part': 'trigger';
197
- disabled: (s: S) => boolean;
197
+ disabled: Signal<boolean>;
198
198
  onClick: (e: MouseEvent) => void;
199
199
  };
200
200
  hiddenInput: {
@@ -202,11 +202,11 @@ export interface FileUploadParts<S> {
202
202
  tabIndex: -1;
203
203
  'aria-hidden': 'true';
204
204
  style: string;
205
- disabled: (s: S) => boolean;
206
- multiple: (s: S) => boolean;
207
- accept: (s: S) => string;
208
- required: (s: S) => boolean;
209
- 'aria-invalid': (s: S) => 'true' | undefined;
205
+ disabled: Signal<boolean>;
206
+ multiple: Signal<boolean>;
207
+ accept: Signal<string>;
208
+ required: Signal<boolean>;
209
+ 'aria-invalid': Signal<'true' | undefined>;
210
210
  capture?: string | boolean;
211
211
  webkitdirectory?: '' | undefined;
212
212
  'data-scope': 'file-upload';
@@ -221,7 +221,7 @@ export interface FileUploadParts<S> {
221
221
  };
222
222
  clearTrigger: {
223
223
  type: 'button';
224
- 'aria-label': string | ((s: S) => string);
224
+ 'aria-label': string;
225
225
  'data-scope': 'file-upload';
226
226
  'data-part': 'clear-trigger';
227
227
  onClick: (e: MouseEvent) => void;
@@ -230,7 +230,7 @@ export interface FileUploadParts<S> {
230
230
  'data-scope': 'file-upload';
231
231
  'data-part': 'item-group';
232
232
  };
233
- item: (index: number) => FileUploadItemParts<S>;
233
+ item: (index: number) => FileUploadItemParts;
234
234
  }
235
235
  export interface ConnectOptions {
236
236
  id: string;
@@ -258,7 +258,7 @@ export interface ConnectOptions {
258
258
  */
259
259
  transformFiles?: (files: File[]) => File[] | Promise<File[]>;
260
260
  }
261
- export declare function connect<S>(get: (s: S) => FileUploadState, send: Send<FileUploadMsg>, opts: ConnectOptions): FileUploadParts<S>;
261
+ export declare function connect(state: Signal<FileUploadState>, send: Send<FileUploadMsg>, opts: ConnectOptions): FileUploadParts;
262
262
  export declare const fileUpload: {
263
263
  init: typeof init;
264
264
  update: typeof update;
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../src/components/file-upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../src/components/file-upload.ts"],"names":[],"mappings":"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"}
@@ -165,11 +165,11 @@ export function preventDocumentDrop() {
165
165
  };
166
166
  }
167
167
  const HIDDEN_STYLE = 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;';
168
- export function connect(get, send, opts) {
168
+ export function connect(state, send, opts) {
169
169
  const locale = useContext(LocaleContext);
170
170
  const inputId = `${opts.id}:input`;
171
- const removeLabel = opts.removeLabel ?? ((s) => locale(s).fileUpload.remove);
172
- const clearLabel = opts.clearLabel ?? ((s) => locale(s).fileUpload.clear);
171
+ const removeLabel = opts.removeLabel ?? locale.fileUpload.remove;
172
+ const clearLabel = opts.clearLabel ?? locale.fileUpload.clear;
173
173
  const runPipeline = async (raw) => {
174
174
  let files = raw;
175
175
  if (opts.transformFiles)
@@ -210,15 +210,15 @@ export function connect(get, send, opts) {
210
210
  root: {
211
211
  'data-scope': 'file-upload',
212
212
  'data-part': 'root',
213
- 'data-disabled': (s) => (get(s).disabled ? '' : undefined),
214
- 'data-dragging': (s) => (get(s).dragging ? '' : undefined),
215
- 'data-invalid': (s) => (get(s).invalid ? '' : undefined),
216
- 'data-readonly': (s) => (get(s).readOnly ? '' : undefined),
213
+ 'data-disabled': state.map((st) => (st.disabled ? '' : undefined)),
214
+ 'data-dragging': state.map((st) => (st.dragging ? '' : undefined)),
215
+ 'data-invalid': state.map((st) => (st.invalid ? '' : undefined)),
216
+ 'data-readonly': state.map((st) => (st.readOnly ? '' : undefined)),
217
217
  },
218
218
  dropzone: {
219
219
  'data-scope': 'file-upload',
220
220
  'data-part': 'dropzone',
221
- 'data-dragging': (s) => (get(s).dragging ? '' : undefined),
221
+ 'data-dragging': state.map((st) => (st.dragging ? '' : undefined)),
222
222
  onClick: openPicker,
223
223
  onDragEnter: tagSend(send, ['dragEnter'], (e) => {
224
224
  e.preventDefault();
@@ -240,7 +240,7 @@ export function connect(get, send, opts) {
240
240
  type: 'button',
241
241
  'data-scope': 'file-upload',
242
242
  'data-part': 'trigger',
243
- disabled: (s) => get(s).disabled,
243
+ disabled: state.map((st) => st.disabled),
244
244
  onClick: openPicker,
245
245
  },
246
246
  hiddenInput: {
@@ -248,11 +248,11 @@ export function connect(get, send, opts) {
248
248
  tabIndex: -1,
249
249
  'aria-hidden': 'true',
250
250
  style: HIDDEN_STYLE,
251
- disabled: (s) => get(s).disabled,
252
- multiple: (s) => get(s).multiple,
253
- accept: (s) => acceptToString(get(s).accept),
254
- required: (s) => get(s).required,
255
- 'aria-invalid': (s) => (get(s).invalid ? 'true' : undefined),
251
+ disabled: state.map((st) => st.disabled),
252
+ multiple: state.map((st) => st.multiple),
253
+ accept: state.map((st) => acceptToString(st.accept)),
254
+ required: state.map((st) => st.required),
255
+ 'aria-invalid': state.map((st) => (st.invalid ? 'true' : undefined)),
256
256
  ...(opts.capture !== undefined ? { capture: opts.capture } : {}),
257
257
  ...(opts.directory === true ? { webkitdirectory: '' } : {}),
258
258
  'data-scope': 'file-upload',
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../src/components/file-upload.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 * File upload — input element + drag-and-drop zone. Tracks selected files,\n * drag state, accept filters, validation errors. Multiple or single selection.\n *\n * `accept` can be either a raw HTML-accept string (`\"image/*,.pdf\"`) or a\n * MIME-object (`{ 'image/*': ['.png', '.jpg'], 'application/pdf': [] }`).\n * The object form is validated client-side per file; the raw string form\n * only drives the browser's native picker filter.\n *\n * Files that fail validation (too large, too small, wrong type, over the\n * count limit) flow into `rejectedFiles` with a list of `FileError` codes\n * attached. The view can render them alongside accepted files.\n */\n\nexport type AcceptValue = string | Record<string, string[]>\n\nexport type FileError =\n | { code: 'TOO_LARGE'; max: number }\n | { code: 'TOO_SMALL'; min: number }\n | { code: 'INVALID_TYPE' }\n | { code: 'TOO_MANY'; max: number }\n | { code: 'CUSTOM'; message: string }\n\nexport interface RejectedFile {\n file: File\n errors: FileError[]\n}\n\nexport interface FileUploadState {\n files: File[]\n rejectedFiles: RejectedFile[]\n disabled: boolean\n multiple: boolean\n accept: AcceptValue\n maxFiles: number\n maxSize: number\n minFileSize: number\n required: boolean\n readOnly: boolean\n invalid: boolean\n dragging: boolean\n}\n\nexport type FileUploadMsg =\n /** @humanOnly */\n | { type: 'setFiles'; files: File[]; customRejected?: RejectedFile[] }\n /** @humanOnly */\n | { type: 'addFiles'; files: File[]; customRejected?: RejectedFile[] }\n /** @intent(\"Remove the accepted file at the given index\") */\n | { type: 'removeFile'; index: number }\n /** @intent(\"Remove the rejected file at the given index\") */\n | { type: 'removeRejected'; index: number }\n /** @intent(\"Clear all accepted files\") */\n | { type: 'clear' }\n /** @intent(\"Clear the rejected-files list\") */\n | { type: 'clearRejected' }\n /** @humanOnly */\n | { type: 'dragEnter' }\n /** @humanOnly */\n | { type: 'dragLeave' }\n /** @humanOnly */\n | { type: 'drop' }\n /** @humanOnly */\n | { type: 'setInvalid'; invalid: boolean }\n\nexport interface FileUploadInit {\n files?: File[]\n disabled?: boolean\n multiple?: boolean\n accept?: AcceptValue\n maxFiles?: number\n maxSize?: number\n minFileSize?: number\n required?: boolean\n readOnly?: boolean\n invalid?: boolean\n}\n\nexport function init(opts: FileUploadInit = {}): FileUploadState {\n return {\n files: opts.files ?? [],\n rejectedFiles: [],\n disabled: opts.disabled ?? false,\n multiple: opts.multiple ?? false,\n accept: opts.accept ?? '',\n maxFiles: opts.maxFiles ?? 0,\n maxSize: opts.maxSize ?? 0,\n minFileSize: opts.minFileSize ?? 0,\n required: opts.required ?? false,\n readOnly: opts.readOnly ?? false,\n invalid: opts.invalid ?? false,\n dragging: false,\n }\n}\n\n/**\n * Serialize an AcceptValue into a comma-joined string suitable for the\n * HTML `accept` attribute. Both MIME types and extensions are emitted.\n */\nexport function acceptToString(accept: AcceptValue): string {\n if (typeof accept === 'string') return accept\n const parts: string[] = []\n for (const [mime, exts] of Object.entries(accept)) {\n parts.push(mime)\n for (const ext of exts) parts.push(ext)\n }\n return parts.join(',')\n}\n\n/**\n * Check whether a file matches the accept configuration. Raw-string accept\n * is passed through to the browser picker so we always return true here;\n * MIME-object accept is validated by checking MIME type (with wildcards)\n * and extension membership.\n */\nexport function fileMatchesAccept(file: File, accept: AcceptValue): boolean {\n if (typeof accept === 'string' || Object.keys(accept).length === 0) return true\n const name = file.name.toLowerCase()\n for (const [mime, exts] of Object.entries(accept)) {\n if (matchMime(file.type, mime)) return true\n for (const ext of exts) {\n if (name.endsWith(ext.toLowerCase())) return true\n }\n }\n return false\n}\n\nfunction matchMime(fileType: string, pattern: string): boolean {\n if (!fileType) return false\n if (pattern === fileType) return true\n // Wildcard support: \"image/*\" matches \"image/png\"\n if (pattern.endsWith('/*')) {\n const prefix = pattern.slice(0, -1) // \"image/\"\n return fileType.startsWith(prefix)\n }\n return false\n}\n\n/**\n * Partition incoming files into accepted and rejected based on state's\n * accept/size/count constraints. The current accepted-file count is used\n * to enforce `maxFiles` — the caller is responsible for passing the\n * post-combine accepted total when appending.\n */\nexport function validateFiles(\n incoming: File[],\n state: FileUploadState,\n existingAcceptedCount: number,\n): { accepted: File[]; rejected: RejectedFile[] } {\n const accepted: File[] = []\n const rejected: RejectedFile[] = []\n let count = existingAcceptedCount\n for (const f of incoming) {\n const errors: FileError[] = []\n if (state.maxSize > 0 && f.size > state.maxSize) {\n errors.push({ code: 'TOO_LARGE', max: state.maxSize })\n }\n if (state.minFileSize > 0 && f.size < state.minFileSize) {\n errors.push({ code: 'TOO_SMALL', min: state.minFileSize })\n }\n if (!fileMatchesAccept(f, state.accept)) {\n errors.push({ code: 'INVALID_TYPE' })\n }\n if (state.maxFiles > 0 && count >= state.maxFiles) {\n errors.push({ code: 'TOO_MANY', max: state.maxFiles })\n }\n if (errors.length > 0) {\n rejected.push({ file: f, errors })\n } else {\n accepted.push(f)\n count++\n }\n }\n return { accepted, rejected }\n}\n\nexport function update(state: FileUploadState, msg: FileUploadMsg): [FileUploadState, never[]] {\n if (state.disabled && msg.type !== 'clear' && msg.type !== 'clearRejected') {\n return [state, []]\n }\n if (state.readOnly && (msg.type === 'setFiles' || msg.type === 'addFiles')) {\n return [state, []]\n }\n switch (msg.type) {\n case 'setFiles': {\n const { accepted, rejected } = validateFiles(msg.files, state, 0)\n const merged = msg.customRejected ? [...rejected, ...msg.customRejected] : rejected\n return [{ ...state, files: accepted, rejectedFiles: merged }, []]\n }\n case 'addFiles': {\n const base = state.multiple ? state.files : []\n const { accepted, rejected } = validateFiles(msg.files, state, base.length)\n const combined = state.multiple ? [...base, ...accepted] : accepted\n const merged = msg.customRejected ? [...rejected, ...msg.customRejected] : rejected\n return [{ ...state, files: combined, rejectedFiles: merged }, []]\n }\n case 'removeFile':\n return [{ ...state, files: state.files.filter((_, i) => i !== msg.index) }, []]\n case 'removeRejected':\n return [\n { ...state, rejectedFiles: state.rejectedFiles.filter((_, i) => i !== msg.index) },\n [],\n ]\n case 'clear':\n return [{ ...state, files: [], rejectedFiles: [] }, []]\n case 'clearRejected':\n return [{ ...state, rejectedFiles: [] }, []]\n case 'setInvalid':\n return [{ ...state, invalid: msg.invalid }, []]\n case 'dragEnter':\n return [{ ...state, dragging: true }, []]\n case 'dragLeave':\n case 'drop':\n return [{ ...state, dragging: false }, []]\n }\n}\n\nexport function totalSize(state: FileUploadState): number {\n let total = 0\n for (const f of state.files) total += f.size\n return total\n}\n\n/**\n * Install a document-level dragover/drop blocker. Without this, dragging a\n * file outside the dropzone causes the browser to navigate away from the\n * page. Call from onMount and invoke the returned disposer on unmount.\n */\nexport function preventDocumentDrop(): () => void {\n const prevent = (e: DragEvent): void => {\n // Only prevent default if the drop is NOT on an element inside a\n // file-upload dropzone — let those handle their own drops.\n const target = e.target as Element | null\n if (target?.closest('[data-scope=\"file-upload\"][data-part=\"dropzone\"]')) return\n e.preventDefault()\n }\n document.addEventListener('dragover', prevent)\n document.addEventListener('drop', prevent)\n return () => {\n document.removeEventListener('dragover', prevent)\n document.removeEventListener('drop', prevent)\n }\n}\n\nexport interface FileUploadItemParts<S> {\n item: {\n 'data-scope': 'file-upload'\n 'data-part': 'item'\n 'data-index': string\n }\n itemName: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-name'\n }\n itemSizeText: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-size-text'\n }\n itemPreview: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-preview'\n }\n removeTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n 'data-scope': 'file-upload'\n 'data-part': 'item-remove'\n onClick: (e: MouseEvent) => void\n }\n /** Zag-aligned alias for removeTrigger. Same wiring. */\n itemDeleteTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n 'data-scope': 'file-upload'\n 'data-part': 'item-delete-trigger'\n onClick: (e: MouseEvent) => void\n }\n}\n\nexport interface FileUploadParts<S> {\n root: {\n 'data-scope': 'file-upload'\n 'data-part': 'root'\n 'data-disabled': (s: S) => '' | undefined\n 'data-dragging': (s: S) => '' | undefined\n 'data-invalid': (s: S) => '' | undefined\n 'data-readonly': (s: S) => '' | undefined\n }\n dropzone: {\n 'data-scope': 'file-upload'\n 'data-part': 'dropzone'\n 'data-dragging': (s: S) => '' | undefined\n onClick: (e: MouseEvent) => void\n onDragEnter: (e: DragEvent) => void\n onDragOver: (e: DragEvent) => void\n onDragLeave: (e: DragEvent) => void\n onDrop: (e: DragEvent) => void\n }\n trigger: {\n type: 'button'\n 'data-scope': 'file-upload'\n 'data-part': 'trigger'\n disabled: (s: S) => boolean\n onClick: (e: MouseEvent) => void\n }\n hiddenInput: {\n type: 'file'\n tabIndex: -1\n 'aria-hidden': 'true'\n style: string\n disabled: (s: S) => boolean\n multiple: (s: S) => boolean\n accept: (s: S) => string\n required: (s: S) => boolean\n 'aria-invalid': (s: S) => 'true' | undefined\n capture?: string | boolean\n webkitdirectory?: '' | undefined\n 'data-scope': 'file-upload'\n 'data-part': 'hidden-input'\n id: string\n onChange: (e: Event) => void\n }\n label: {\n for: string\n 'data-scope': 'file-upload'\n 'data-part': 'label'\n }\n clearTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n 'data-scope': 'file-upload'\n 'data-part': 'clear-trigger'\n onClick: (e: MouseEvent) => void\n }\n itemGroup: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-group'\n }\n item: (index: number) => FileUploadItemParts<S>\n}\n\nexport interface ConnectOptions {\n id: string\n removeLabel?: string\n clearLabel?: string\n /**\n * Hints the browser to use the device camera/microphone for capture. Only\n * applies to mobile. Pass `'user'` for the front camera, `'environment'`\n * for the back, or `true` to accept either.\n */\n capture?: 'user' | 'environment' | boolean\n /** Show a directory-picker instead of a file-picker (webkit only). */\n directory?: boolean\n /**\n * Per-file synchronous validator. Return a non-empty array of `FileError`\n * codes to reject the file, or null/empty to accept. Runs in addition to\n * the state-driven accept/size/count checks — its errors accumulate into\n * `rejectedFiles` alongside the built-in errors.\n */\n validate?: (file: File) => FileError[] | null\n /**\n * Optional transform pipeline. Runs before validation. Can return a\n * Promise; onChange awaits it before dispatching. Use for image resizing,\n * format conversion, etc.\n */\n transformFiles?: (files: File[]) => File[] | Promise<File[]>\n}\n\nconst HIDDEN_STYLE =\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;'\n\nexport function connect<S>(\n get: (s: S) => FileUploadState,\n send: Send<FileUploadMsg>,\n opts: ConnectOptions,\n): FileUploadParts<S> {\n const locale = useContext<S, Locale>(LocaleContext)\n const inputId = `${opts.id}:input`\n const removeLabel: string | ((s: S) => string) =\n opts.removeLabel ?? ((s: S) => locale(s).fileUpload.remove)\n const clearLabel: string | ((s: S) => string) =\n opts.clearLabel ?? ((s: S) => locale(s).fileUpload.clear)\n\n const runPipeline = async (\n raw: File[],\n ): Promise<{ files: File[]; customRejected: RejectedFile[] }> => {\n let files = raw\n if (opts.transformFiles) files = await opts.transformFiles(files)\n const customRejected: RejectedFile[] = []\n if (opts.validate) {\n const passed: File[] = []\n for (const f of files) {\n const errors = opts.validate(f)\n if (errors && errors.length > 0) customRejected.push({ file: f, errors })\n else passed.push(f)\n }\n files = passed\n }\n return { files, customRejected }\n }\n\n const dispatchAdd = (raw: File[]): void => {\n if (!opts.transformFiles && !opts.validate) {\n send({ type: 'addFiles', files: raw })\n return\n }\n // Fire-and-forget — transforms may be async.\n void runPipeline(raw).then(({ files, customRejected }) => {\n send({ type: 'addFiles', files, customRejected })\n })\n }\n\n const openPicker = (e: MouseEvent): void => {\n const target = e.target as HTMLElement\n if (target.getAttribute('data-part') === 'hidden-input') return\n const root = (e.currentTarget as HTMLElement).closest(\n '[data-scope=\"file-upload\"][data-part=\"root\"]',\n )\n const input = root?.querySelector<HTMLInputElement>(\n '[data-scope=\"file-upload\"][data-part=\"hidden-input\"]',\n )\n input?.click()\n }\n\n return {\n root: {\n 'data-scope': 'file-upload',\n 'data-part': 'root',\n 'data-disabled': (s) => (get(s).disabled ? '' : undefined),\n 'data-dragging': (s) => (get(s).dragging ? '' : undefined),\n 'data-invalid': (s) => (get(s).invalid ? '' : undefined),\n 'data-readonly': (s) => (get(s).readOnly ? '' : undefined),\n },\n dropzone: {\n 'data-scope': 'file-upload',\n 'data-part': 'dropzone',\n 'data-dragging': (s) => (get(s).dragging ? '' : undefined),\n onClick: openPicker,\n onDragEnter: tagSend(send, ['dragEnter'], (e) => {\n e.preventDefault()\n send({ type: 'dragEnter' })\n }),\n onDragOver: (e) => e.preventDefault(),\n onDragLeave: tagSend(send, ['dragLeave'], (e) => {\n e.preventDefault()\n send({ type: 'dragLeave' })\n }),\n onDrop: tagSend(send, ['drop'], (e) => {\n e.preventDefault()\n const files = Array.from(e.dataTransfer?.files ?? [])\n send({ type: 'drop' })\n dispatchAdd(files)\n }),\n },\n trigger: {\n type: 'button',\n 'data-scope': 'file-upload',\n 'data-part': 'trigger',\n disabled: (s) => get(s).disabled,\n onClick: openPicker,\n },\n hiddenInput: {\n type: 'file',\n tabIndex: -1,\n 'aria-hidden': 'true',\n style: HIDDEN_STYLE,\n disabled: (s) => get(s).disabled,\n multiple: (s) => get(s).multiple,\n accept: (s) => acceptToString(get(s).accept),\n required: (s) => get(s).required,\n 'aria-invalid': (s) => (get(s).invalid ? 'true' : undefined),\n ...(opts.capture !== undefined ? { capture: opts.capture } : {}),\n ...(opts.directory === true ? { webkitdirectory: '' as const } : {}),\n 'data-scope': 'file-upload',\n 'data-part': 'hidden-input',\n id: inputId,\n onChange: (e) => {\n const input = e.target as HTMLInputElement\n const files = input.files ? Array.from(input.files) : []\n dispatchAdd(files)\n input.value = ''\n },\n },\n label: {\n for: inputId,\n 'data-scope': 'file-upload',\n 'data-part': 'label',\n },\n clearTrigger: {\n type: 'button',\n 'aria-label': clearLabel,\n 'data-scope': 'file-upload',\n 'data-part': 'clear-trigger',\n onClick: tagSend(send, ['clear'], () => send({ type: 'clear' })),\n },\n itemGroup: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-group',\n },\n item: (index: number): FileUploadItemParts<S> => ({\n item: {\n 'data-scope': 'file-upload',\n 'data-part': 'item',\n 'data-index': String(index),\n },\n itemName: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-name',\n },\n itemSizeText: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-size-text',\n },\n itemPreview: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-preview',\n },\n removeTrigger: {\n type: 'button',\n 'aria-label': removeLabel,\n 'data-scope': 'file-upload',\n 'data-part': 'item-remove',\n onClick: tagSend(send, ['removeFile'], () => send({ type: 'removeFile', index })),\n },\n itemDeleteTrigger: {\n type: 'button',\n 'aria-label': removeLabel,\n 'data-scope': 'file-upload',\n 'data-part': 'item-delete-trigger',\n onClick: tagSend(send, ['removeFile'], () => send({ type: 'removeFile', index })),\n },\n }),\n }\n}\n\nexport const fileUpload = {\n init,\n update,\n connect,\n totalSize,\n acceptToString,\n fileMatchesAccept,\n validateFiles,\n preventDocumentDrop,\n}\n"]}
1
+ {"version":3,"file":"file-upload.js","sourceRoot":"","sources":["../../src/components/file-upload.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 * File upload — input element + drag-and-drop zone. Tracks selected files,\n * drag state, accept filters, validation errors. Multiple or single selection.\n *\n * `accept` can be either a raw HTML-accept string (`\"image/*,.pdf\"`) or a\n * MIME-object (`{ 'image/*': ['.png', '.jpg'], 'application/pdf': [] }`).\n * The object form is validated client-side per file; the raw string form\n * only drives the browser's native picker filter.\n *\n * Files that fail validation (too large, too small, wrong type, over the\n * count limit) flow into `rejectedFiles` with a list of `FileError` codes\n * attached. The view can render them alongside accepted files.\n */\n\nexport type AcceptValue = string | Record<string, string[]>\n\nexport type FileError =\n | { code: 'TOO_LARGE'; max: number }\n | { code: 'TOO_SMALL'; min: number }\n | { code: 'INVALID_TYPE' }\n | { code: 'TOO_MANY'; max: number }\n | { code: 'CUSTOM'; message: string }\n\nexport interface RejectedFile {\n file: File\n errors: FileError[]\n}\n\nexport interface FileUploadState {\n files: File[]\n rejectedFiles: RejectedFile[]\n disabled: boolean\n multiple: boolean\n accept: AcceptValue\n maxFiles: number\n maxSize: number\n minFileSize: number\n required: boolean\n readOnly: boolean\n invalid: boolean\n dragging: boolean\n}\n\nexport type FileUploadMsg =\n /** @humanOnly */\n | { type: 'setFiles'; files: File[]; customRejected?: RejectedFile[] }\n /** @humanOnly */\n | { type: 'addFiles'; files: File[]; customRejected?: RejectedFile[] }\n /** @intent(\"Remove the accepted file at the given index\") */\n | { type: 'removeFile'; index: number }\n /** @intent(\"Remove the rejected file at the given index\") */\n | { type: 'removeRejected'; index: number }\n /** @intent(\"Clear all accepted files\") */\n | { type: 'clear' }\n /** @intent(\"Clear the rejected-files list\") */\n | { type: 'clearRejected' }\n /** @humanOnly */\n | { type: 'dragEnter' }\n /** @humanOnly */\n | { type: 'dragLeave' }\n /** @humanOnly */\n | { type: 'drop' }\n /** @humanOnly */\n | { type: 'setInvalid'; invalid: boolean }\n\nexport interface FileUploadInit {\n files?: File[]\n disabled?: boolean\n multiple?: boolean\n accept?: AcceptValue\n maxFiles?: number\n maxSize?: number\n minFileSize?: number\n required?: boolean\n readOnly?: boolean\n invalid?: boolean\n}\n\nexport function init(opts: FileUploadInit = {}): FileUploadState {\n return {\n files: opts.files ?? [],\n rejectedFiles: [],\n disabled: opts.disabled ?? false,\n multiple: opts.multiple ?? false,\n accept: opts.accept ?? '',\n maxFiles: opts.maxFiles ?? 0,\n maxSize: opts.maxSize ?? 0,\n minFileSize: opts.minFileSize ?? 0,\n required: opts.required ?? false,\n readOnly: opts.readOnly ?? false,\n invalid: opts.invalid ?? false,\n dragging: false,\n }\n}\n\n/**\n * Serialize an AcceptValue into a comma-joined string suitable for the\n * HTML `accept` attribute. Both MIME types and extensions are emitted.\n */\nexport function acceptToString(accept: AcceptValue): string {\n if (typeof accept === 'string') return accept\n const parts: string[] = []\n for (const [mime, exts] of Object.entries(accept)) {\n parts.push(mime)\n for (const ext of exts) parts.push(ext)\n }\n return parts.join(',')\n}\n\n/**\n * Check whether a file matches the accept configuration. Raw-string accept\n * is passed through to the browser picker so we always return true here;\n * MIME-object accept is validated by checking MIME type (with wildcards)\n * and extension membership.\n */\nexport function fileMatchesAccept(file: File, accept: AcceptValue): boolean {\n if (typeof accept === 'string' || Object.keys(accept).length === 0) return true\n const name = file.name.toLowerCase()\n for (const [mime, exts] of Object.entries(accept)) {\n if (matchMime(file.type, mime)) return true\n for (const ext of exts) {\n if (name.endsWith(ext.toLowerCase())) return true\n }\n }\n return false\n}\n\nfunction matchMime(fileType: string, pattern: string): boolean {\n if (!fileType) return false\n if (pattern === fileType) return true\n // Wildcard support: \"image/*\" matches \"image/png\"\n if (pattern.endsWith('/*')) {\n const prefix = pattern.slice(0, -1) // \"image/\"\n return fileType.startsWith(prefix)\n }\n return false\n}\n\n/**\n * Partition incoming files into accepted and rejected based on state's\n * accept/size/count constraints. The current accepted-file count is used\n * to enforce `maxFiles` — the caller is responsible for passing the\n * post-combine accepted total when appending.\n */\nexport function validateFiles(\n incoming: File[],\n state: FileUploadState,\n existingAcceptedCount: number,\n): { accepted: File[]; rejected: RejectedFile[] } {\n const accepted: File[] = []\n const rejected: RejectedFile[] = []\n let count = existingAcceptedCount\n for (const f of incoming) {\n const errors: FileError[] = []\n if (state.maxSize > 0 && f.size > state.maxSize) {\n errors.push({ code: 'TOO_LARGE', max: state.maxSize })\n }\n if (state.minFileSize > 0 && f.size < state.minFileSize) {\n errors.push({ code: 'TOO_SMALL', min: state.minFileSize })\n }\n if (!fileMatchesAccept(f, state.accept)) {\n errors.push({ code: 'INVALID_TYPE' })\n }\n if (state.maxFiles > 0 && count >= state.maxFiles) {\n errors.push({ code: 'TOO_MANY', max: state.maxFiles })\n }\n if (errors.length > 0) {\n rejected.push({ file: f, errors })\n } else {\n accepted.push(f)\n count++\n }\n }\n return { accepted, rejected }\n}\n\nexport function update(state: FileUploadState, msg: FileUploadMsg): [FileUploadState, never[]] {\n if (state.disabled && msg.type !== 'clear' && msg.type !== 'clearRejected') {\n return [state, []]\n }\n if (state.readOnly && (msg.type === 'setFiles' || msg.type === 'addFiles')) {\n return [state, []]\n }\n switch (msg.type) {\n case 'setFiles': {\n const { accepted, rejected } = validateFiles(msg.files, state, 0)\n const merged = msg.customRejected ? [...rejected, ...msg.customRejected] : rejected\n return [{ ...state, files: accepted, rejectedFiles: merged }, []]\n }\n case 'addFiles': {\n const base = state.multiple ? state.files : []\n const { accepted, rejected } = validateFiles(msg.files, state, base.length)\n const combined = state.multiple ? [...base, ...accepted] : accepted\n const merged = msg.customRejected ? [...rejected, ...msg.customRejected] : rejected\n return [{ ...state, files: combined, rejectedFiles: merged }, []]\n }\n case 'removeFile':\n return [{ ...state, files: state.files.filter((_, i) => i !== msg.index) }, []]\n case 'removeRejected':\n return [\n { ...state, rejectedFiles: state.rejectedFiles.filter((_, i) => i !== msg.index) },\n [],\n ]\n case 'clear':\n return [{ ...state, files: [], rejectedFiles: [] }, []]\n case 'clearRejected':\n return [{ ...state, rejectedFiles: [] }, []]\n case 'setInvalid':\n return [{ ...state, invalid: msg.invalid }, []]\n case 'dragEnter':\n return [{ ...state, dragging: true }, []]\n case 'dragLeave':\n case 'drop':\n return [{ ...state, dragging: false }, []]\n }\n}\n\nexport function totalSize(state: FileUploadState): number {\n let total = 0\n for (const f of state.files) total += f.size\n return total\n}\n\n/**\n * Install a document-level dragover/drop blocker. Without this, dragging a\n * file outside the dropzone causes the browser to navigate away from the\n * page. Call from onMount and invoke the returned disposer on unmount.\n */\nexport function preventDocumentDrop(): () => void {\n const prevent = (e: DragEvent): void => {\n // Only prevent default if the drop is NOT on an element inside a\n // file-upload dropzone — let those handle their own drops.\n const target = e.target as Element | null\n if (target?.closest('[data-scope=\"file-upload\"][data-part=\"dropzone\"]')) return\n e.preventDefault()\n }\n document.addEventListener('dragover', prevent)\n document.addEventListener('drop', prevent)\n return () => {\n document.removeEventListener('dragover', prevent)\n document.removeEventListener('drop', prevent)\n }\n}\n\nexport interface FileUploadItemParts {\n item: {\n 'data-scope': 'file-upload'\n 'data-part': 'item'\n 'data-index': string\n }\n itemName: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-name'\n }\n itemSizeText: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-size-text'\n }\n itemPreview: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-preview'\n }\n removeTrigger: {\n type: 'button'\n 'aria-label': string\n 'data-scope': 'file-upload'\n 'data-part': 'item-remove'\n onClick: (e: MouseEvent) => void\n }\n /** Zag-aligned alias for removeTrigger. Same wiring. */\n itemDeleteTrigger: {\n type: 'button'\n 'aria-label': string\n 'data-scope': 'file-upload'\n 'data-part': 'item-delete-trigger'\n onClick: (e: MouseEvent) => void\n }\n}\n\nexport interface FileUploadParts {\n root: {\n 'data-scope': 'file-upload'\n 'data-part': 'root'\n 'data-disabled': Signal<'' | undefined>\n 'data-dragging': Signal<'' | undefined>\n 'data-invalid': Signal<'' | undefined>\n 'data-readonly': Signal<'' | undefined>\n }\n dropzone: {\n 'data-scope': 'file-upload'\n 'data-part': 'dropzone'\n 'data-dragging': Signal<'' | undefined>\n onClick: (e: MouseEvent) => void\n onDragEnter: (e: DragEvent) => void\n onDragOver: (e: DragEvent) => void\n onDragLeave: (e: DragEvent) => void\n onDrop: (e: DragEvent) => void\n }\n trigger: {\n type: 'button'\n 'data-scope': 'file-upload'\n 'data-part': 'trigger'\n disabled: Signal<boolean>\n onClick: (e: MouseEvent) => void\n }\n hiddenInput: {\n type: 'file'\n tabIndex: -1\n 'aria-hidden': 'true'\n style: string\n disabled: Signal<boolean>\n multiple: Signal<boolean>\n accept: Signal<string>\n required: Signal<boolean>\n 'aria-invalid': Signal<'true' | undefined>\n capture?: string | boolean\n webkitdirectory?: '' | undefined\n 'data-scope': 'file-upload'\n 'data-part': 'hidden-input'\n id: string\n onChange: (e: Event) => void\n }\n label: {\n for: string\n 'data-scope': 'file-upload'\n 'data-part': 'label'\n }\n clearTrigger: {\n type: 'button'\n 'aria-label': string\n 'data-scope': 'file-upload'\n 'data-part': 'clear-trigger'\n onClick: (e: MouseEvent) => void\n }\n itemGroup: {\n 'data-scope': 'file-upload'\n 'data-part': 'item-group'\n }\n item: (index: number) => FileUploadItemParts\n}\n\nexport interface ConnectOptions {\n id: string\n removeLabel?: string\n clearLabel?: string\n /**\n * Hints the browser to use the device camera/microphone for capture. Only\n * applies to mobile. Pass `'user'` for the front camera, `'environment'`\n * for the back, or `true` to accept either.\n */\n capture?: 'user' | 'environment' | boolean\n /** Show a directory-picker instead of a file-picker (webkit only). */\n directory?: boolean\n /**\n * Per-file synchronous validator. Return a non-empty array of `FileError`\n * codes to reject the file, or null/empty to accept. Runs in addition to\n * the state-driven accept/size/count checks — its errors accumulate into\n * `rejectedFiles` alongside the built-in errors.\n */\n validate?: (file: File) => FileError[] | null\n /**\n * Optional transform pipeline. Runs before validation. Can return a\n * Promise; onChange awaits it before dispatching. Use for image resizing,\n * format conversion, etc.\n */\n transformFiles?: (files: File[]) => File[] | Promise<File[]>\n}\n\nconst HIDDEN_STYLE =\n 'position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;'\n\nexport function connect(\n state: Signal<FileUploadState>,\n send: Send<FileUploadMsg>,\n opts: ConnectOptions,\n): FileUploadParts {\n const locale = useContext(LocaleContext)\n const inputId = `${opts.id}:input`\n const removeLabel = opts.removeLabel ?? locale.fileUpload.remove\n const clearLabel = opts.clearLabel ?? locale.fileUpload.clear\n\n const runPipeline = async (\n raw: File[],\n ): Promise<{ files: File[]; customRejected: RejectedFile[] }> => {\n let files = raw\n if (opts.transformFiles) files = await opts.transformFiles(files)\n const customRejected: RejectedFile[] = []\n if (opts.validate) {\n const passed: File[] = []\n for (const f of files) {\n const errors = opts.validate(f)\n if (errors && errors.length > 0) customRejected.push({ file: f, errors })\n else passed.push(f)\n }\n files = passed\n }\n return { files, customRejected }\n }\n\n const dispatchAdd = (raw: File[]): void => {\n if (!opts.transformFiles && !opts.validate) {\n send({ type: 'addFiles', files: raw })\n return\n }\n // Fire-and-forget — transforms may be async.\n void runPipeline(raw).then(({ files, customRejected }) => {\n send({ type: 'addFiles', files, customRejected })\n })\n }\n\n const openPicker = (e: MouseEvent): void => {\n const target = e.target as HTMLElement\n if (target.getAttribute('data-part') === 'hidden-input') return\n const root = (e.currentTarget as HTMLElement).closest(\n '[data-scope=\"file-upload\"][data-part=\"root\"]',\n )\n const input = root?.querySelector<HTMLInputElement>(\n '[data-scope=\"file-upload\"][data-part=\"hidden-input\"]',\n )\n input?.click()\n }\n\n return {\n root: {\n 'data-scope': 'file-upload',\n 'data-part': 'root',\n 'data-disabled': state.map((st) => (st.disabled ? '' : undefined)),\n 'data-dragging': state.map((st) => (st.dragging ? '' : undefined)),\n 'data-invalid': state.map((st) => (st.invalid ? '' : undefined)),\n 'data-readonly': state.map((st) => (st.readOnly ? '' : undefined)),\n },\n dropzone: {\n 'data-scope': 'file-upload',\n 'data-part': 'dropzone',\n 'data-dragging': state.map((st) => (st.dragging ? '' : undefined)),\n onClick: openPicker,\n onDragEnter: tagSend(send, ['dragEnter'], (e) => {\n e.preventDefault()\n send({ type: 'dragEnter' })\n }),\n onDragOver: (e) => e.preventDefault(),\n onDragLeave: tagSend(send, ['dragLeave'], (e) => {\n e.preventDefault()\n send({ type: 'dragLeave' })\n }),\n onDrop: tagSend(send, ['drop'], (e) => {\n e.preventDefault()\n const files = Array.from(e.dataTransfer?.files ?? [])\n send({ type: 'drop' })\n dispatchAdd(files)\n }),\n },\n trigger: {\n type: 'button',\n 'data-scope': 'file-upload',\n 'data-part': 'trigger',\n disabled: state.map((st) => st.disabled),\n onClick: openPicker,\n },\n hiddenInput: {\n type: 'file',\n tabIndex: -1,\n 'aria-hidden': 'true',\n style: HIDDEN_STYLE,\n disabled: state.map((st) => st.disabled),\n multiple: state.map((st) => st.multiple),\n accept: state.map((st) => acceptToString(st.accept)),\n required: state.map((st) => st.required),\n 'aria-invalid': state.map((st) => (st.invalid ? 'true' : undefined)),\n ...(opts.capture !== undefined ? { capture: opts.capture } : {}),\n ...(opts.directory === true ? { webkitdirectory: '' as const } : {}),\n 'data-scope': 'file-upload',\n 'data-part': 'hidden-input',\n id: inputId,\n onChange: (e) => {\n const input = e.target as HTMLInputElement\n const files = input.files ? Array.from(input.files) : []\n dispatchAdd(files)\n input.value = ''\n },\n },\n label: {\n for: inputId,\n 'data-scope': 'file-upload',\n 'data-part': 'label',\n },\n clearTrigger: {\n type: 'button',\n 'aria-label': clearLabel,\n 'data-scope': 'file-upload',\n 'data-part': 'clear-trigger',\n onClick: tagSend(send, ['clear'], () => send({ type: 'clear' })),\n },\n itemGroup: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-group',\n },\n item: (index: number): FileUploadItemParts => ({\n item: {\n 'data-scope': 'file-upload',\n 'data-part': 'item',\n 'data-index': String(index),\n },\n itemName: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-name',\n },\n itemSizeText: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-size-text',\n },\n itemPreview: {\n 'data-scope': 'file-upload',\n 'data-part': 'item-preview',\n },\n removeTrigger: {\n type: 'button',\n 'aria-label': removeLabel,\n 'data-scope': 'file-upload',\n 'data-part': 'item-remove',\n onClick: tagSend(send, ['removeFile'], () => send({ type: 'removeFile', index })),\n },\n itemDeleteTrigger: {\n type: 'button',\n 'aria-label': removeLabel,\n 'data-scope': 'file-upload',\n 'data-part': 'item-delete-trigger',\n onClick: tagSend(send, ['removeFile'], () => send({ type: 'removeFile', index })),\n },\n }),\n }\n}\n\nexport const fileUpload = {\n init,\n update,\n connect,\n totalSize,\n acceptToString,\n fileMatchesAccept,\n validateFiles,\n preventDocumentDrop,\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { Send } from '@llui/dom';
1
+ import type { Send, Signal } from '@llui/dom';
2
2
  /**
3
3
  * Floating panel — a draggable + resizable window-like surface, useful
4
4
  * for dev tools overlays, pop-out inspectors, preview panels, etc. The
@@ -137,18 +137,18 @@ export interface FloatingPanelInit {
137
137
  }
138
138
  export declare function init(opts?: FloatingPanelInit): FloatingPanelState;
139
139
  export declare function update(state: FloatingPanelState, msg: FloatingPanelMsg): [FloatingPanelState, never[]];
140
- export interface FloatingPanelParts<S> {
140
+ export interface FloatingPanelParts {
141
141
  root: {
142
142
  role: 'dialog';
143
- 'aria-label': string | ((s: S) => string);
143
+ 'aria-label': string;
144
144
  'data-scope': 'floating-panel';
145
145
  'data-part': 'root';
146
- 'data-dragging': (s: S) => '' | undefined;
147
- 'data-resizing': (s: S) => '' | undefined;
148
- 'data-minimized': (s: S) => '' | undefined;
149
- 'data-maximized': (s: S) => '' | undefined;
150
- hidden: (s: S) => boolean;
151
- style: (s: S) => string;
146
+ 'data-dragging': Signal<'' | undefined>;
147
+ 'data-resizing': Signal<'' | undefined>;
148
+ 'data-minimized': Signal<'' | undefined>;
149
+ 'data-maximized': Signal<'' | undefined>;
150
+ hidden: Signal<boolean>;
151
+ style: Signal<string>;
152
152
  };
153
153
  dragHandle: {
154
154
  'data-scope': 'floating-panel';
@@ -158,25 +158,25 @@ export interface FloatingPanelParts<S> {
158
158
  content: {
159
159
  'data-scope': 'floating-panel';
160
160
  'data-part': 'content';
161
- hidden: (s: S) => boolean;
161
+ hidden: Signal<boolean>;
162
162
  };
163
163
  minimizeTrigger: {
164
164
  type: 'button';
165
- 'aria-label': string | ((s: S) => string);
165
+ 'aria-label': string;
166
166
  'data-scope': 'floating-panel';
167
167
  'data-part': 'minimize-trigger';
168
168
  onClick: (e: MouseEvent) => void;
169
169
  };
170
170
  maximizeTrigger: {
171
171
  type: 'button';
172
- 'aria-label': string | ((s: S) => string);
172
+ 'aria-label': string;
173
173
  'data-scope': 'floating-panel';
174
174
  'data-part': 'maximize-trigger';
175
175
  onClick: (e: MouseEvent) => void;
176
176
  };
177
177
  closeTrigger: {
178
178
  type: 'button';
179
- 'aria-label': string | ((s: S) => string);
179
+ 'aria-label': string;
180
180
  'data-scope': 'floating-panel';
181
181
  'data-part': 'close-trigger';
182
182
  onClick: (e: MouseEvent) => void;
@@ -194,7 +194,7 @@ export interface ConnectOptions {
194
194
  maximizeLabel?: string;
195
195
  closeLabel?: string;
196
196
  }
197
- export declare function connect<S>(get: (s: S) => FloatingPanelState, send: Send<FloatingPanelMsg>, opts?: ConnectOptions): FloatingPanelParts<S>;
197
+ export declare function connect(state: Signal<FloatingPanelState>, send: Send<FloatingPanelMsg>, opts?: ConnectOptions): FloatingPanelParts;
198
198
  export declare const floatingPanel: {
199
199
  init: typeof init;
200
200
  update: typeof update;
@@ -1 +1 @@
1
- {"version":3,"file":"floating-panel.d.ts","sourceRoot":"","sources":["../../src/components/floating-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAKrC;;;;;;;;;GASG;AAEH,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE5E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACjD,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IAC7B,2DAA2D;IAC3D,aAAa,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC7E,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,MAAM,gBAAgB;AAC1B,yCAAyC;AACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,0CAA0C;GACxC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE;AACnB,6DAA6D;GAC3D;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,4DAA4D;GAC1D;IAAE,IAAI,EAAE,sBAAsB,CAAA;CAAE;AAClC,yDAAyD;GACvD;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,gEAAgE;GAC9D;IAAE,IAAI,EAAE,sBAAsB,CAAA;CAAE;AAClC,qDAAqD;GACnD;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE;AAC5B,qDAAqD;GACnD;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE;AAC5B,iBAAiB;GACf;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,iBAAiB;GACf;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC9C,iBAAiB;GACf;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,iBAAiB;GACf;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE;AAC/C,iBAAiB;GACf;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAChD,iBAAiB;GACf;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,6DAA6D;GAC3D;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAC/C,qEAAqE;GACnE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAClD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAMD,wBAAgB,IAAI,CAAC,IAAI,GAAE,iBAAsB,GAAG,kBAAkB,CAcrE;AAyCD,wBAAgB,MAAM,CACpB,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,gBAAgB,GACpB,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAiF/B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,MAAM,CAAA;QACnB,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,CAAA;QACzC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,CAAA;QACzC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,CAAA;QAC1C,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,CAAA;QAC1C,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;QACzB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;KACxB,CAAA;IACD,UAAU,EAAE;QACV,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,aAAa,CAAA;QAC1B,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;KACzC,CAAA;IACD,OAAO,EAAE;QACP,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,SAAS,CAAA;QACtB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;KAC1B,CAAA;IACD,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,kBAAkB,CAAA;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;IACD,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,kBAAkB,CAAA;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAA;QACd,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAA;QACzC,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,eAAe,CAAA;QAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;KACjC,CAAA;IACD,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK;QACtC,YAAY,EAAE,gBAAgB,CAAA;QAC9B,WAAW,EAAE,eAAe,CAAA;QAC5B,aAAa,EAAE,YAAY,CAAA;QAC3B,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;KACzC,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,kBAAkB,EACjC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAC5B,IAAI,GAAE,cAAmB,GACxB,kBAAkB,CAAC,CAAC,CAAC,CA6DvB;AAED,eAAO,MAAM,aAAa;;;;CAA4B,CAAA"}
1
+ {"version":3,"file":"floating-panel.d.ts","sourceRoot":"","sources":["../../src/components/floating-panel.ts"],"names":[],"mappings":"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"}
@@ -137,27 +137,26 @@ export function update(state, msg) {
137
137
  }
138
138
  }
139
139
  }
140
- export function connect(get, send, opts = {}) {
140
+ export function connect(state, send, opts = {}) {
141
141
  const locale = useContext(LocaleContext);
142
142
  return {
143
143
  root: {
144
144
  role: 'dialog',
145
- 'aria-label': opts.label ?? ((s) => locale(s).floatingPanel.label),
145
+ 'aria-label': opts.label ?? locale.floatingPanel.label,
146
146
  'data-scope': 'floating-panel',
147
147
  'data-part': 'root',
148
- 'data-dragging': (s) => (get(s).dragging ? '' : undefined),
149
- 'data-resizing': (s) => (get(s).resizing !== null ? '' : undefined),
150
- 'data-minimized': (s) => (get(s).minimized ? '' : undefined),
151
- 'data-maximized': (s) => (get(s).maximized ? '' : undefined),
152
- hidden: (s) => !get(s).open,
153
- style: (s) => {
154
- const st = get(s);
148
+ 'data-dragging': state.map((st) => (st.dragging ? '' : undefined)),
149
+ 'data-resizing': state.map((st) => (st.resizing !== null ? '' : undefined)),
150
+ 'data-minimized': state.map((st) => (st.minimized ? '' : undefined)),
151
+ 'data-maximized': state.map((st) => (st.maximized ? '' : undefined)),
152
+ hidden: state.map((st) => !st.open),
153
+ style: state.map((st) => {
155
154
  if (st.maximized)
156
155
  return 'position:fixed;inset:0;width:auto;height:auto;';
157
156
  return (`position:fixed;` +
158
157
  `left:${st.position.x}px;top:${st.position.y}px;` +
159
158
  `width:${st.size.width}px;height:${st.size.height}px;`);
160
- },
159
+ }),
161
160
  },
162
161
  dragHandle: {
163
162
  'data-scope': 'floating-panel',
@@ -167,25 +166,25 @@ export function connect(get, send, opts = {}) {
167
166
  content: {
168
167
  'data-scope': 'floating-panel',
169
168
  'data-part': 'content',
170
- hidden: (s) => get(s).minimized,
169
+ hidden: state.map((st) => st.minimized),
171
170
  },
172
171
  minimizeTrigger: {
173
172
  type: 'button',
174
- 'aria-label': opts.minimizeLabel ?? ((s) => locale(s).floatingPanel.minimize),
173
+ 'aria-label': opts.minimizeLabel ?? locale.floatingPanel.minimize,
175
174
  'data-scope': 'floating-panel',
176
175
  'data-part': 'minimize-trigger',
177
176
  onClick: tagSend(send, ['toggleMinimize'], () => send({ type: 'toggleMinimize' })),
178
177
  },
179
178
  maximizeTrigger: {
180
179
  type: 'button',
181
- 'aria-label': opts.maximizeLabel ?? ((s) => locale(s).floatingPanel.maximize),
180
+ 'aria-label': opts.maximizeLabel ?? locale.floatingPanel.maximize,
182
181
  'data-scope': 'floating-panel',
183
182
  'data-part': 'maximize-trigger',
184
183
  onClick: tagSend(send, ['toggleMaximize'], () => send({ type: 'toggleMaximize' })),
185
184
  },
186
185
  closeTrigger: {
187
186
  type: 'button',
188
- 'aria-label': opts.closeLabel ?? ((s) => locale(s).floatingPanel.close),
187
+ 'aria-label': opts.closeLabel ?? locale.floatingPanel.close,
189
188
  'data-scope': 'floating-panel',
190
189
  'data-part': 'close-trigger',
191
190
  onClick: tagSend(send, ['close'], () => send({ type: 'close' })),