juxscript 1.1.159 → 1.1.161

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 (48) hide show
  1. package/index.d.ts +4 -0
  2. package/index.d.ts.map +1 -1
  3. package/index.js +5 -0
  4. package/lib/components/checkbox.js +4 -4
  5. package/lib/components/checkbox.ts +5 -5
  6. package/lib/components/datepicker.d.ts.map +1 -1
  7. package/lib/components/datepicker.js +5 -4
  8. package/lib/components/datepicker.ts +5 -4
  9. package/lib/components/dialog.d.ts.map +1 -1
  10. package/lib/components/dialog.js +2 -0
  11. package/lib/components/dialog.ts +2 -0
  12. package/lib/components/dropdown.d.ts +1 -0
  13. package/lib/components/dropdown.d.ts.map +1 -1
  14. package/lib/components/dropdown.js +5 -6
  15. package/lib/components/dropdown.ts +6 -9
  16. package/lib/components/fileupload.d.ts +6 -0
  17. package/lib/components/fileupload.d.ts.map +1 -1
  18. package/lib/components/fileupload.js +31 -61
  19. package/lib/components/fileupload.ts +38 -67
  20. package/lib/components/input.js +6 -6
  21. package/lib/components/input.ts +6 -6
  22. package/lib/components/modal.d.ts.map +1 -1
  23. package/lib/components/modal.js +2 -0
  24. package/lib/components/modal.ts +2 -0
  25. package/lib/components/select.d.ts.map +1 -1
  26. package/lib/components/select.js +5 -0
  27. package/lib/components/select.ts +6 -0
  28. package/lib/components/switch.js +4 -4
  29. package/lib/components/switch.ts +5 -5
  30. package/lib/components/tabs.js +4 -4
  31. package/lib/components/tabs.ts +4 -4
  32. package/lib/storage/DataFrame.d.ts +59 -0
  33. package/lib/storage/DataFrame.d.ts.map +1 -0
  34. package/lib/storage/DataFrame.js +443 -0
  35. package/lib/storage/DataFrame.ts +472 -0
  36. package/lib/storage/FileStorage.d.ts +53 -0
  37. package/lib/storage/FileStorage.d.ts.map +1 -0
  38. package/lib/storage/FileStorage.js +80 -0
  39. package/lib/storage/FileStorage.ts +95 -0
  40. package/lib/storage/IndexedDBDriver.d.ts +75 -0
  41. package/lib/storage/IndexedDBDriver.d.ts.map +1 -0
  42. package/lib/storage/IndexedDBDriver.js +177 -0
  43. package/lib/storage/IndexedDBDriver.ts +226 -0
  44. package/lib/storage/TabularDriver.d.ts +75 -0
  45. package/lib/storage/TabularDriver.d.ts.map +1 -0
  46. package/lib/storage/TabularDriver.js +399 -0
  47. package/lib/storage/TabularDriver.ts +491 -0
  48. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -48,6 +48,10 @@ import { registry } from './lib/components/registry.js';
48
48
  import { stateHistory } from './lib/components/history/StateHistory.js';
49
49
  import { watcher } from './lib/components/watcher.js';
50
50
  export { state, registry, stateHistory };
51
+ export { tabularDriver } from './lib/storage/TabularDriver.js';
52
+ export { DataFrame } from './lib/storage/DataFrame.js';
53
+ export { indexedDBDriver } from './lib/storage/IndexedDBDriver.js';
54
+ export { fileStorage } from './lib/storage/FileStorage.js';
51
55
  import { VStack, vstack } from './lib/components/stack/VStack.js';
52
56
  import { HStack, hstack } from './lib/components/stack/HStack.js';
53
57
  import { ZStack, zstack } from './lib/components/stack/ZStack.js';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAGlE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAG3D;;GAEG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Df,CAAC;AAGF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -50,6 +50,11 @@ import { registry } from './lib/components/registry.js';
50
50
  import { stateHistory } from './lib/components/history/StateHistory.js';
51
51
  import { watcher } from './lib/components/watcher.js';
52
52
  export { state, registry, stateHistory };
53
+ // Storage
54
+ export { tabularDriver } from './lib/storage/TabularDriver.js';
55
+ export { DataFrame } from './lib/storage/DataFrame.js';
56
+ export { indexedDBDriver } from './lib/storage/IndexedDBDriver.js';
57
+ export { fileStorage } from './lib/storage/FileStorage.js';
53
58
  // Import Stack components (already added earlier)
54
59
  import { VStack, vstack } from './lib/components/stack/VStack.js';
55
60
  import { HStack, hstack } from './lib/components/stack/HStack.js';
@@ -156,7 +156,7 @@ export class Checkbox extends BaseComponent {
156
156
  this.setValue(transformed);
157
157
  });
158
158
  // Component → State
159
- inputEl.addEventListener('change', () => {
159
+ inputEl.addEventListener('change', (e) => {
160
160
  if (isUpdating)
161
161
  return;
162
162
  isUpdating = true;
@@ -166,17 +166,17 @@ export class Checkbox extends BaseComponent {
166
166
  const transformed = transformToState(checked);
167
167
  stateObj.set(transformed);
168
168
  // 🎯 Fire the change callback event
169
- this._triggerCallback('change', checked);
169
+ this._triggerCallback('change', checked, e, this);
170
170
  setTimeout(() => { isUpdating = false; }, 0);
171
171
  });
172
172
  }
173
173
  else {
174
174
  // Default behavior without sync
175
- inputEl.addEventListener('change', () => {
175
+ inputEl.addEventListener('change', (e) => {
176
176
  this.state.checked = inputEl.checked;
177
177
  this._clearError();
178
178
  // 🎯 Fire the change callback event
179
- this._triggerCallback('change', inputEl.checked);
179
+ this._triggerCallback('change', inputEl.checked, e, this);
180
180
  });
181
181
  }
182
182
  // Always add blur validation
@@ -207,11 +207,11 @@ export class Checkbox extends BaseComponent<CheckboxState> {
207
207
  });
208
208
 
209
209
  // Component → State
210
- inputEl.addEventListener('change', () => {
210
+ inputEl.addEventListener('change', (e) => {
211
211
  if (isUpdating) return;
212
212
  isUpdating = true;
213
213
 
214
- const checked = inputEl.checked;
214
+ const checked = (inputEl as HTMLInputElement).checked;
215
215
  this.state.checked = checked;
216
216
  this._clearError();
217
217
 
@@ -219,18 +219,18 @@ export class Checkbox extends BaseComponent<CheckboxState> {
219
219
  stateObj.set(transformed);
220
220
 
221
221
  // 🎯 Fire the change callback event
222
- this._triggerCallback('change', checked);
222
+ this._triggerCallback('change', checked, e, this);
223
223
 
224
224
  setTimeout(() => { isUpdating = false; }, 0);
225
225
  });
226
226
  } else {
227
227
  // Default behavior without sync
228
- inputEl.addEventListener('change', () => {
228
+ inputEl.addEventListener('change', (e) => {
229
229
  this.state.checked = inputEl.checked;
230
230
  this._clearError();
231
231
 
232
232
  // 🎯 Fire the change callback event
233
- this._triggerCallback('change', inputEl.checked);
233
+ this._triggerCallback('change', inputEl.checked, e, this);
234
234
  });
235
235
  }
236
236
 
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["datepicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQnE,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC;CACpD;AAED,UAAU,eAAgB,SAAQ,SAAS;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAW,SAAQ,aAAa,CAAC,eAAe,CAAC;gBAC9C,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAuBvD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASxB,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B,OAAO,IAAI,IAAI,GAAG,IAAI;IAMtB,QAAQ,IAAI,OAAO;IAcnB,OAAO,IAAI,OAAO;IAKlB,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAuCzD,SAAS,CAAC,kBAAkB,IAAI,WAAW;IAuB3C,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CA0DrE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAElF"}
1
+ {"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["datepicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQnE,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC;CACpD;AAED,UAAU,eAAgB,SAAQ,SAAS;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAW,SAAQ,aAAa,CAAC,eAAe,CAAC;gBAC9C,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAuBvD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASxB,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B,OAAO,IAAI,IAAI,GAAG,IAAI;IAMtB,QAAQ,IAAI,OAAO;IAcnB,OAAO,IAAI,OAAO;IAKlB,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAuCzD,SAAS,CAAC,kBAAkB,IAAI,WAAW;IAuB3C,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CA2DrE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAElF"}
@@ -170,10 +170,11 @@ export class DatePicker extends BaseComponent {
170
170
  // Wire events
171
171
  this._wireStandardEvents(wrapper);
172
172
  this._wireFormSync(inputEl, 'change');
173
- // 🎯 Fire change event when date changes
174
- inputEl.addEventListener('change', () => {
175
- const input = inputEl;
176
- this._triggerCallback('change', input.value);
173
+ // Find the existing change listener and replace with:
174
+ inputEl.addEventListener('change', (e) => {
175
+ const date = inputEl.value;
176
+ this.state.value = date;
177
+ this._triggerCallback('change', date, e, this);
177
178
  });
178
179
  // Sync label changes
179
180
  const labelSync = this._syncBindings.find(b => b.property === 'label');
@@ -225,10 +225,11 @@ export class DatePicker extends BaseComponent<DatePickerState> {
225
225
  this._wireStandardEvents(wrapper);
226
226
  this._wireFormSync(inputEl, 'change');
227
227
 
228
- // 🎯 Fire change event when date changes
229
- inputEl.addEventListener('change', () => {
230
- const input = inputEl as HTMLInputElement;
231
- this._triggerCallback('change', input.value);
228
+ // Find the existing change listener and replace with:
229
+ inputEl.addEventListener('change', (e) => {
230
+ const date = (inputEl as HTMLInputElement).value;
231
+ this.state.value = date;
232
+ this._triggerCallback('change', date, e, this);
232
233
  });
233
234
 
234
235
  // Sync label changes
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAMxD,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,WAAW,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,MAAO,SAAQ,aAAa,CAAC,WAAW,CAAC;IAClD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAanD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI;IAKtD,IAAI,IAAI,IAAI;IAQZ,KAAK,IAAI,IAAI;IAQb,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAQtC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CAkErE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAEtE"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAMxD,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,WAAW,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,MAAO,SAAQ,aAAa,CAAC,WAAW,CAAC;IAClD,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAanD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI;IAKtD,IAAI,IAAI,IAAI;IASZ,KAAK,IAAI,IAAI;IASb,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAQtC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CAkErE;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAEtE"}
@@ -51,6 +51,7 @@ export class Dialog extends BaseComponent {
51
51
  if (this._overlay) {
52
52
  this._overlay.style.display = 'flex';
53
53
  }
54
+ this._triggerCallback('open', true, null, this);
54
55
  return this;
55
56
  }
56
57
  close() {
@@ -58,6 +59,7 @@ export class Dialog extends BaseComponent {
58
59
  if (this._overlay) {
59
60
  this._overlay.style.display = 'none';
60
61
  }
62
+ this._triggerCallback('close', false, null, this);
61
63
  return this;
62
64
  }
63
65
  update(prop, value) {
@@ -84,6 +84,7 @@ export class Dialog extends BaseComponent<DialogState> {
84
84
  if (this._overlay) {
85
85
  this._overlay.style.display = 'flex';
86
86
  }
87
+ this._triggerCallback('open', true, null, this);
87
88
  return this;
88
89
  }
89
90
 
@@ -92,6 +93,7 @@ export class Dialog extends BaseComponent<DialogState> {
92
93
  if (this._overlay) {
93
94
  this._overlay.style.display = 'none';
94
95
  }
96
+ this._triggerCallback('close', false, null, this);
95
97
  return this;
96
98
  }
97
99
 
@@ -4,6 +4,7 @@ export interface DropdownItem {
4
4
  icon?: string;
5
5
  divider?: boolean;
6
6
  click?: () => void;
7
+ value?: string;
7
8
  }
8
9
  export interface DropdownOptions {
9
10
  triggerLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOxD,MAAM,WAAW,YAAY;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,aAAa,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,QAAS,SAAQ,aAAa,CAAC,aAAa,CAAC;IACtD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAA4B;gBAE7B,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAWrD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAKlC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI;IAKhF,IAAI,IAAI,IAAI;IAQZ,KAAK,IAAI,IAAI;IAQb,MAAM,IAAI,IAAI;IAQd,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAsFlE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;CAGzC;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAE5E"}
1
+ {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOxD,MAAM,WAAW,YAAY;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,aAAa,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,QAAS,SAAQ,aAAa,CAAC,aAAa,CAAC;IACtD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAA4B;gBAE7B,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAWrD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAKlC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI;IAKhF,IAAI,IAAI,IAAI;IAQZ,KAAK,IAAI,IAAI;IAQb,MAAM,IAAI,IAAI;IAQd,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;IAkFlE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;CAGzC;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAE5E"}
@@ -98,13 +98,12 @@ export class Dropdown extends BaseComponent {
98
98
  label.textContent = item.label;
99
99
  menuItem.appendChild(label);
100
100
  }
101
- menuItem.addEventListener('click', () => {
102
- // 🎯 Fire the select callback event
103
- this._triggerCallback('select', item);
104
- // Then fire item-specific click handler
105
- if (item.click) {
101
+ // For each item click handler in the dropdown, replace with:
102
+ menuItem.addEventListener('click', (e) => {
103
+ const value = item.value || item.label || '';
104
+ if (item.click)
106
105
  item.click();
107
- }
106
+ this._triggerCallback('select', value, e, this);
108
107
  this.close();
109
108
  });
110
109
  menu.appendChild(menuItem);
@@ -10,6 +10,7 @@ export interface DropdownItem {
10
10
  icon?: string;
11
11
  divider?: boolean;
12
12
  click?: () => void;
13
+ value?: string;
13
14
  }
14
15
 
15
16
  export interface DropdownOptions {
@@ -141,15 +142,11 @@ export class Dropdown extends BaseComponent<DropdownState> {
141
142
  menuItem.appendChild(label);
142
143
  }
143
144
 
144
- menuItem.addEventListener('click', () => {
145
- // 🎯 Fire the select callback event
146
- this._triggerCallback('select', item);
147
-
148
- // Then fire item-specific click handler
149
- if (item.click) {
150
- item.click();
151
- }
152
-
145
+ // For each item click handler in the dropdown, replace with:
146
+ menuItem.addEventListener('click', (e) => {
147
+ const value = item.value || item.label || '';
148
+ if (item.click) item.click();
149
+ this._triggerCallback('select', value, e, this);
153
150
  this.close();
154
151
  });
155
152
 
@@ -1,4 +1,5 @@
1
1
  import { BaseComponent, BaseState } from './base/BaseComponent.js';
2
+ import { FileStorage } from '../storage/FileStorage.js';
2
3
  export interface FileUploadOptions {
3
4
  label?: string;
4
5
  accept?: string;
@@ -10,6 +11,8 @@ export interface FileUploadOptions {
10
11
  style?: string;
11
12
  class?: string;
12
13
  onValidate?: (files: File[]) => boolean | string;
14
+ storage?: FileStorage;
15
+ metadata?: Record<string, any>;
13
16
  }
14
17
  interface FileUploadState extends BaseState {
15
18
  files: File[];
@@ -19,12 +22,15 @@ interface FileUploadState extends BaseState {
19
22
  }
20
23
  export declare class FileUpload extends BaseComponent<FileUploadState> {
21
24
  private _fileListElement;
25
+ private _storage;
26
+ private _metadata;
22
27
  constructor(id: string, options?: FileUploadOptions);
23
28
  protected getTriggerEvents(): readonly string[];
24
29
  protected getCallbackEvents(): readonly string[];
25
30
  accept(value: string): this;
26
31
  multiple(value: boolean): this;
27
32
  icon(value: string): this;
33
+ storage(store: FileStorage, metadata?: Record<string, any>): this;
28
34
  clear(): this;
29
35
  getValue(): File[];
30
36
  setValue(files: File[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"fileupload.d.ts","sourceRoot":"","sources":["fileupload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAQnE,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,GAAG,MAAM,CAAC;CACpD;AAED,UAAU,eAAgB,SAAQ,SAAS;IACvC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAW,SAAQ,aAAa,CAAC,eAAe,CAAC;IAC1D,OAAO,CAAC,gBAAgB,CAA4B;gBAExC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAuBvD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB,KAAK,IAAI,IAAI;IAgBb,QAAQ,IAAI,IAAI,EAAE;IAIlB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAM7B,QAAQ,IAAI,OAAO;IAcnB,OAAO,IAAI,OAAO;IAKlB,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,GAAG,MAAM;IAiBzD,SAAS,CAAC,kBAAkB,IAAI,WAAW;IAiB3C,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,eAAe;IAYvB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CAsIrE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAElF"}
1
+ {"version":3,"file":"fileupload.d.ts","sourceRoot":"","sources":["fileupload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAMxD,MAAM,WAAW,iBAAiB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,GAAG,MAAM,CAAC;IACjD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,UAAU,eAAgB,SAAQ,SAAS;IACvC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAW,SAAQ,aAAa,CAAC,eAAe,CAAC;IAC1D,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAkC;gBAEvC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IA0BvD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMjE,KAAK,IAAI,IAAI;IAgBb,QAAQ,IAAI,IAAI,EAAE;IAIlB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAM7B,QAAQ,IAAI,OAAO;IAcnB,OAAO,IAAI,OAAO;IAKlB,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,GAAG,MAAM;IAiBzD,SAAS,CAAC,kBAAkB,IAAI,WAAW;IAiB3C,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,eAAe;IAYvB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI;CA2FrE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAElF"}
@@ -1,9 +1,9 @@
1
1
  import { BaseComponent } from './base/BaseComponent.js';
2
2
  import { renderIcon } from './icons.js';
3
- import { formatIdAsLabel } from '../utils/formatId.js'; // ✅ Import
3
+ import { formatIdAsLabel } from '../utils/formatId.js';
4
4
  // Event definitions
5
5
  const TRIGGER_EVENTS = [];
6
- const CALLBACK_EVENTS = ['change', 'filesSelected', 'clear'];
6
+ const CALLBACK_EVENTS = ['change', 'filesSelected', 'clear', 'stored'];
7
7
  export class FileUpload extends BaseComponent {
8
8
  constructor(id, options = {}) {
9
9
  super(id, {
@@ -13,7 +13,7 @@ export class FileUpload extends BaseComponent {
13
13
  class: options.class ?? '',
14
14
  style: options.style ?? '',
15
15
  attributes: {},
16
- label: options.label ?? formatIdAsLabel(id), // ✅ Auto-generate
16
+ label: options.label ?? formatIdAsLabel(id),
17
17
  required: options.required ?? false,
18
18
  name: options.name ?? id,
19
19
  errorMessage: undefined,
@@ -23,9 +23,12 @@ export class FileUpload extends BaseComponent {
23
23
  icon: options.icon ?? 'upload'
24
24
  });
25
25
  this._fileListElement = null;
26
+ this._storage = null;
26
27
  if (options.onValidate) {
27
28
  this._onValidate = options.onValidate;
28
29
  }
30
+ this._storage = options.storage ?? null;
31
+ this._metadata = options.metadata;
29
32
  }
30
33
  getTriggerEvents() {
31
34
  return TRIGGER_EVENTS;
@@ -48,6 +51,11 @@ export class FileUpload extends BaseComponent {
48
51
  this.state.icon = value;
49
52
  return this;
50
53
  }
54
+ storage(store, metadata) {
55
+ this._storage = store;
56
+ this._metadata = metadata;
57
+ return this;
58
+ }
51
59
  clear() {
52
60
  this.state.files = [];
53
61
  if (this._inputElement) {
@@ -56,7 +64,7 @@ export class FileUpload extends BaseComponent {
56
64
  if (this._fileListElement) {
57
65
  this._fileListElement.innerHTML = '';
58
66
  }
59
- this._triggerCallback('clear');
67
+ this._triggerCallback('clear', null, null, this);
60
68
  return this;
61
69
  }
62
70
  /* ═════════════════════════════════════════════════════════════════
@@ -111,12 +119,12 @@ export class FileUpload extends BaseComponent {
111
119
  input.multiple = multiple;
112
120
  input.required = required;
113
121
  input.disabled = disabled;
114
- input.style.display = 'none'; // Hidden, triggered by button
122
+ input.style.display = 'none';
115
123
  return input;
116
124
  }
117
125
  _updateFileList() {
118
126
  if (!this._fileListElement)
119
- return; // Safety check
127
+ return;
120
128
  this._fileListElement.innerHTML = '';
121
129
  if (this.state.files.length === 0) {
122
130
  return;
@@ -133,9 +141,9 @@ export class FileUpload extends BaseComponent {
133
141
  removeBtn?.addEventListener('click', () => {
134
142
  this.state.files = this.state.files.filter((_, i) => i !== index);
135
143
  this._updateFileList();
136
- this._triggerCallback('change', this.state.files);
144
+ this._triggerCallback('change', this.state.files, null, this);
137
145
  });
138
- this._fileListElement.appendChild(fileItem); // ✅ Non-null assertion safe here
146
+ this._fileListElement.appendChild(fileItem);
139
147
  });
140
148
  }
141
149
  _formatFileSize(bytes) {
@@ -152,7 +160,6 @@ export class FileUpload extends BaseComponent {
152
160
  render(targetId) {
153
161
  const container = this._setupContainer(targetId);
154
162
  const { icon, style, class: className } = this.state;
155
- // Build wrapper
156
163
  const wrapper = document.createElement('div');
157
164
  wrapper.className = 'jux-input jux-fileupload';
158
165
  wrapper.id = this._id;
@@ -160,15 +167,12 @@ export class FileUpload extends BaseComponent {
160
167
  wrapper.className += ` ${className}`;
161
168
  if (style)
162
169
  wrapper.setAttribute('style', style);
163
- // Label
164
170
  if (this.state.label) {
165
171
  wrapper.appendChild(this._renderLabel());
166
172
  }
167
- // Hidden file input
168
173
  const inputEl = this._buildInputElement();
169
174
  this._inputElement = inputEl;
170
175
  wrapper.appendChild(inputEl);
171
- // Button container
172
176
  const buttonContainer = document.createElement('div');
173
177
  buttonContainer.className = 'jux-fileupload-button-container';
174
178
  if (icon) {
@@ -184,67 +188,33 @@ export class FileUpload extends BaseComponent {
184
188
  button.disabled = this.state.disabled;
185
189
  buttonContainer.appendChild(button);
186
190
  wrapper.appendChild(buttonContainer);
187
- // File list
188
191
  const fileList = document.createElement('div');
189
192
  fileList.className = 'jux-fileupload-list';
190
193
  this._fileListElement = fileList;
191
194
  wrapper.appendChild(fileList);
192
- // Error element
193
195
  wrapper.appendChild(this._renderError());
194
- // Button click triggers file input
195
196
  button.addEventListener('click', () => inputEl.click());
196
- // Wire events
197
+ inputEl.addEventListener('change', (e) => {
198
+ const files = Array.from(inputEl.files || []);
199
+ this.state.files = files;
200
+ this._updateFileList();
201
+ this._clearError();
202
+ this._triggerCallback('change', files, e, this);
203
+ this._triggerCallback('filesSelected', files, e, this);
204
+ if (this._storage && files.length > 0) {
205
+ this._storage.storeAll(files, this._metadata).then((stored) => {
206
+ this._triggerCallback('stored', stored, e, this);
207
+ }).catch((err) => {
208
+ console.error('[FileUpload] Storage error:', err);
209
+ });
210
+ }
211
+ });
197
212
  this._wireStandardEvents(wrapper);
198
- // Wire file-specific sync
199
- const filesSync = this._syncBindings.find(b => b.property === 'files' || b.property === 'value');
200
- if (filesSync) {
201
- const { stateObj, toState, toComponent } = filesSync;
202
- const transformToState = toState || ((v) => v);
203
- const transformToComponent = toComponent || ((v) => v);
204
- let isUpdating = false;
205
- // State → Component
206
- stateObj.subscribe((val) => {
207
- if (isUpdating)
208
- return;
209
- const transformed = transformToComponent(val);
210
- this.setValue(transformed);
211
- });
212
- // Component → State
213
- inputEl.addEventListener('change', () => {
214
- if (isUpdating)
215
- return;
216
- isUpdating = true;
217
- const files = Array.from(inputEl.files || []);
218
- this.state.files = files;
219
- this._updateFileList();
220
- this._clearError();
221
- const transformed = transformToState(files);
222
- stateObj.set(transformed);
223
- // 🎯 Fire the callback events
224
- this._triggerCallback('change', files);
225
- this._triggerCallback('filesSelected', files);
226
- setTimeout(() => { isUpdating = false; }, 0);
227
- });
228
- }
229
- else {
230
- // Default behavior without sync
231
- inputEl.addEventListener('change', () => {
232
- const files = Array.from(inputEl.files || []);
233
- this.state.files = files;
234
- this._updateFileList();
235
- this._clearError();
236
- // 🎯 Fire the callback events
237
- this._triggerCallback('change', files);
238
- this._triggerCallback('filesSelected', files);
239
- });
240
- }
241
- // Always add blur validation
242
213
  inputEl.addEventListener('blur', () => {
243
214
  if (this._hasBeenValidated) {
244
215
  this.validate();
245
216
  }
246
217
  });
247
- // Sync label changes
248
218
  const labelSync = this._syncBindings.find(b => b.property === 'label');
249
219
  if (labelSync) {
250
220
  const transform = labelSync.toComponent || ((v) => String(v));