@cerberus-design/react 0.25.0-rc.7 → 0.25.1-rc.1

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 (165) hide show
  1. package/dist/components/combobox/combobox.cjs +1 -2
  2. package/dist/components/combobox/combobox.d.cts +1 -3
  3. package/dist/components/combobox/combobox.d.ts +1 -3
  4. package/dist/components/combobox/combobox.js +1 -2
  5. package/dist/components/cta-dialog/provider.cjs +3 -1
  6. package/dist/components/cta-dialog/provider.d.cts +2 -1
  7. package/dist/components/cta-dialog/provider.d.ts +2 -1
  8. package/dist/components/cta-dialog/provider.js +3 -1
  9. package/dist/components/date-picker/calendar.cjs +3 -1
  10. package/dist/components/date-picker/calendar.d.cts +4 -8
  11. package/dist/components/date-picker/calendar.d.ts +4 -8
  12. package/dist/components/date-picker/calendar.js +3 -1
  13. package/dist/components/date-picker/content.cjs +1 -3
  14. package/dist/components/date-picker/content.d.cts +1 -2
  15. package/dist/components/date-picker/content.d.ts +1 -2
  16. package/dist/components/date-picker/content.js +1 -3
  17. package/dist/components/date-picker/date-picker.cjs +47 -2
  18. package/dist/components/date-picker/date-picker.d.cts +1 -6
  19. package/dist/components/date-picker/date-picker.d.ts +1 -6
  20. package/dist/components/date-picker/date-picker.js +47 -2
  21. package/dist/components/date-picker/index.cjs +3 -3
  22. package/dist/components/date-picker/index.js +3 -3
  23. package/dist/components/date-picker/input.cjs +1 -1
  24. package/dist/components/date-picker/input.js +1 -1
  25. package/dist/components/date-picker/primitives.cjs +4 -1
  26. package/dist/components/date-picker/primitives.d.cts +1 -4
  27. package/dist/components/date-picker/primitives.d.ts +1 -4
  28. package/dist/components/date-picker/primitives.js +4 -1
  29. package/dist/components/date-picker/range-input.cjs +2 -2
  30. package/dist/components/date-picker/range-input.js +2 -2
  31. package/dist/components/field/status-indicator.cjs +1 -2
  32. package/dist/components/field/status-indicator.d.cts +1 -1
  33. package/dist/components/field/status-indicator.d.ts +1 -1
  34. package/dist/components/field/status-indicator.js +1 -2
  35. package/dist/components/file-upload/file-status.cjs +26 -43
  36. package/dist/components/file-upload/file-status.js +27 -44
  37. package/dist/components/file-upload/file-uploader.cjs +21 -47
  38. package/dist/components/file-upload/file-uploader.d.cts +7 -10
  39. package/dist/components/file-upload/file-uploader.d.ts +7 -10
  40. package/dist/components/file-upload/file-uploader.js +22 -48
  41. package/dist/components/file-upload/helpers.cjs +17 -0
  42. package/dist/components/file-upload/helpers.d.cts +16 -0
  43. package/dist/components/file-upload/helpers.d.ts +16 -0
  44. package/dist/components/file-upload/helpers.js +13 -0
  45. package/dist/components/file-upload/img-preview.cjs +30 -0
  46. package/dist/components/file-upload/img-preview.d.cts +2 -0
  47. package/dist/components/file-upload/img-preview.d.ts +2 -0
  48. package/dist/components/file-upload/img-preview.js +26 -0
  49. package/dist/components/file-upload/index.cjs +24 -0
  50. package/dist/components/file-upload/index.d.cts +4 -0
  51. package/dist/components/file-upload/index.d.ts +4 -0
  52. package/dist/components/file-upload/index.js +4 -0
  53. package/dist/components/file-upload/parts.cjs +28 -0
  54. package/dist/components/file-upload/parts.d.cts +86 -0
  55. package/dist/components/file-upload/parts.d.ts +86 -0
  56. package/dist/components/file-upload/parts.js +24 -0
  57. package/dist/components/file-upload/primitives.cjs +81 -0
  58. package/dist/components/file-upload/primitives.d.cts +45 -0
  59. package/dist/components/file-upload/primitives.d.ts +45 -0
  60. package/dist/components/file-upload/primitives.js +61 -0
  61. package/dist/components/file-upload/utils.cjs +18 -0
  62. package/dist/components/file-upload/utils.d.cts +7 -0
  63. package/dist/components/file-upload/utils.d.ts +7 -0
  64. package/dist/components/file-upload/utils.js +14 -0
  65. package/dist/components/select/select.cjs +6 -3
  66. package/dist/components/select/select.d.cts +1 -3
  67. package/dist/components/select/select.d.ts +1 -3
  68. package/dist/components/select/select.js +6 -3
  69. package/dist/context/confirm-modal.cjs +3 -1
  70. package/dist/context/confirm-modal.d.cts +2 -1
  71. package/dist/context/confirm-modal.d.ts +2 -1
  72. package/dist/context/confirm-modal.js +3 -1
  73. package/dist/context/prompt-modal.cjs +4 -2
  74. package/dist/context/prompt-modal.d.cts +2 -1
  75. package/dist/context/prompt-modal.d.ts +2 -1
  76. package/dist/context/prompt-modal.js +5 -3
  77. package/dist/index.cjs +163 -131
  78. package/dist/index.client.d.cts +1 -1
  79. package/dist/index.client.d.ts +1 -1
  80. package/dist/index.js +8 -4
  81. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-clear-trigger.cjs +19 -0
  82. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-clear-trigger.js +15 -0
  83. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-context.cjs +10 -0
  84. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-context.js +6 -0
  85. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-dropzone.cjs +22 -0
  86. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-dropzone.js +18 -0
  87. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-hidden-input.cjs +21 -0
  88. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-hidden-input.js +17 -0
  89. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-delete-trigger.cjs +23 -0
  90. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-delete-trigger.js +19 -0
  91. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-group.cjs +23 -0
  92. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-group.js +19 -0
  93. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-name.cjs +22 -0
  94. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-name.js +18 -0
  95. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-preview-image.cjs +28 -0
  96. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-preview-image.js +24 -0
  97. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-preview.cjs +22 -0
  98. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-preview.js +18 -0
  99. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-size-text.cjs +22 -0
  100. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item-size-text.js +18 -0
  101. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item.cjs +26 -0
  102. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-item.js +22 -0
  103. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-label.cjs +19 -0
  104. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-label.js +15 -0
  105. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-root.cjs +47 -0
  106. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-root.js +43 -0
  107. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-trigger.cjs +19 -0
  108. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/file-upload-trigger.js +15 -0
  109. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload-context.cjs +15 -0
  110. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload-context.js +10 -0
  111. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload-item-group-props-context.cjs +15 -0
  112. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload-item-group-props-context.js +10 -0
  113. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload-item-props-context.cjs +15 -0
  114. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload-item-props-context.js +10 -0
  115. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload.cjs +36 -0
  116. package/dist/node_modules/.pnpm/@ark-ui_react@5.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@ark-ui/react/dist/components/file-upload/use-file-upload.js +32 -0
  117. package/dist/node_modules/.pnpm/@internationalized_date@3.10.0/node_modules/@internationalized/date/src/CalendarDate.js +3 -3
  118. package/dist/node_modules/.pnpm/@internationalized_date@3.10.0/node_modules/@internationalized/date/src/conversion.js +1 -1
  119. package/dist/node_modules/.pnpm/@internationalized_date@3.10.0/node_modules/@internationalized/date/src/queries.js +1 -1
  120. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/CalendarDate.cjs +218 -0
  121. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/CalendarDate.js +212 -0
  122. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/DateFormatter.cjs +135 -0
  123. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/DateFormatter.js +131 -0
  124. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/calendars/GregorianCalendar.cjs +101 -0
  125. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/calendars/GregorianCalendar.js +93 -0
  126. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/conversion.cjs +200 -0
  127. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/conversion.js +186 -0
  128. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/manipulation.cjs +352 -0
  129. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/manipulation.js +336 -0
  130. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/queries.cjs +39 -0
  131. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/queries.js +30 -0
  132. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/string.cjs +44 -0
  133. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/string.js +37 -0
  134. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/utils.cjs +10 -0
  135. package/dist/node_modules/.pnpm/@internationalized_date@3.10.1/node_modules/@internationalized/date/src/utils.js +6 -0
  136. package/dist/node_modules/.pnpm/@zag-js_file-upload@1.31.1/node_modules/@zag-js/file-upload/dist/index.cjs +649 -0
  137. package/dist/node_modules/.pnpm/@zag-js_file-upload@1.31.1/node_modules/@zag-js/file-upload/dist/index.js +643 -0
  138. package/dist/node_modules/.pnpm/@zag-js_file-utils@1.31.1/node_modules/@zag-js/file-utils/dist/index.cjs +147 -0
  139. package/dist/node_modules/.pnpm/@zag-js_file-utils@1.31.1/node_modules/@zag-js/file-utils/dist/index.js +138 -0
  140. package/dist/node_modules/.pnpm/@zag-js_i18n-utils@1.31.1/node_modules/@zag-js/i18n-utils/dist/index.cjs +53 -0
  141. package/dist/node_modules/.pnpm/@zag-js_i18n-utils@1.31.1/node_modules/@zag-js/i18n-utils/dist/index.js +48 -0
  142. package/dist/node_modules/.pnpm/@zag-js_utils@1.31.1/node_modules/@zag-js/utils/dist/index.cjs +9 -0
  143. package/dist/node_modules/.pnpm/@zag-js_utils@1.31.1/node_modules/@zag-js/utils/dist/index.js +9 -1
  144. package/package.json +7 -7
  145. package/src/components/combobox/combobox.tsx +7 -13
  146. package/src/components/cta-dialog/provider.tsx +8 -3
  147. package/src/components/date-picker/calendar.tsx +10 -9
  148. package/src/components/date-picker/content.tsx +4 -11
  149. package/src/components/date-picker/date-picker.tsx +55 -18
  150. package/src/components/date-picker/input.tsx +1 -1
  151. package/src/components/date-picker/primitives.tsx +4 -1
  152. package/src/components/date-picker/range-input.tsx +2 -2
  153. package/src/components/field/status-indicator.tsx +2 -5
  154. package/src/components/file-upload/file-status.tsx +14 -21
  155. package/src/components/file-upload/file-uploader.tsx +37 -49
  156. package/src/components/file-upload/helpers.ts +28 -0
  157. package/src/components/file-upload/img-preview.tsx +41 -0
  158. package/src/components/file-upload/index.ts +4 -0
  159. package/src/components/file-upload/parts.tsx +126 -0
  160. package/src/components/file-upload/primitives.ts +156 -0
  161. package/src/components/file-upload/utils.ts +20 -0
  162. package/src/components/select/select.tsx +11 -12
  163. package/src/context/confirm-modal.tsx +7 -2
  164. package/src/context/prompt-modal.tsx +9 -4
  165. package/src/index.client.ts +2 -0
@@ -0,0 +1,649 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const index$4 = require('../../../../../@zag-js_anatomy@1.31.1/node_modules/@zag-js/anatomy/dist/index.cjs');
6
+ const index$3 = require('../../../../../@zag-js_dom-query@1.31.1/node_modules/@zag-js/dom-query/dist/index.cjs');
7
+ const index$1 = require('../../../../../@zag-js_file-utils@1.31.1/node_modules/@zag-js/file-utils/dist/index.cjs');
8
+ const index$5 = require('../../../../../@zag-js_i18n-utils@1.31.1/node_modules/@zag-js/i18n-utils/dist/index.cjs');
9
+ const index$6 = require('../../../../../@zag-js_types@1.31.1/node_modules/@zag-js/types/dist/index.cjs');
10
+ const index$2 = require('../../../../../@zag-js_utils@1.31.1/node_modules/@zag-js/utils/dist/index.cjs');
11
+ const index = require('../../../../../@zag-js_core@1.31.1/node_modules/@zag-js/core/dist/index.cjs');
12
+
13
+ // src/file-upload.anatomy.ts
14
+ var anatomy = index$4.createAnatomy("file-upload").parts(
15
+ "root",
16
+ "dropzone",
17
+ "item",
18
+ "itemDeleteTrigger",
19
+ "itemGroup",
20
+ "itemName",
21
+ "itemPreview",
22
+ "itemPreviewImage",
23
+ "itemSizeText",
24
+ "label",
25
+ "trigger",
26
+ "clearTrigger"
27
+ );
28
+ var parts = anatomy.build();
29
+
30
+ // src/file-upload.dom.ts
31
+ var getRootId = (ctx) => ctx.ids?.root ?? `file:${ctx.id}`;
32
+ var getDropzoneId = (ctx) => ctx.ids?.dropzone ?? `file:${ctx.id}:dropzone`;
33
+ var getHiddenInputId = (ctx) => ctx.ids?.hiddenInput ?? `file:${ctx.id}:input`;
34
+ var getTriggerId = (ctx) => ctx.ids?.trigger ?? `file:${ctx.id}:trigger`;
35
+ var getLabelId = (ctx) => ctx.ids?.label ?? `file:${ctx.id}:label`;
36
+ var getItemId = (ctx, id) => ctx.ids?.item?.(id) ?? `file:${ctx.id}:item:${id}`;
37
+ var getItemNameId = (ctx, id) => ctx.ids?.itemName?.(id) ?? `file:${ctx.id}:item-name:${id}`;
38
+ var getItemSizeTextId = (ctx, id) => ctx.ids?.itemSizeText?.(id) ?? `file:${ctx.id}:item-size:${id}`;
39
+ var getItemPreviewId = (ctx, id) => ctx.ids?.itemPreview?.(id) ?? `file:${ctx.id}:item-preview:${id}`;
40
+ var getRootEl = (ctx) => ctx.getById(getRootId(ctx));
41
+ var getHiddenInputEl = (ctx) => ctx.getById(getHiddenInputId(ctx));
42
+ var getDropzoneEl = (ctx) => ctx.getById(getDropzoneId(ctx));
43
+ function isEventWithFiles(event) {
44
+ const target = index$3.getEventTarget(event);
45
+ if (!event.dataTransfer) return !!target && "files" in target;
46
+ return event.dataTransfer.types.some((type) => {
47
+ return type === "Files" || type === "application/x-moz-file";
48
+ });
49
+ }
50
+ function isFilesWithinRange(ctx, incomingCount, currentAcceptedFiles) {
51
+ const { prop, computed } = ctx;
52
+ if (!computed("multiple") && incomingCount > 1) return false;
53
+ if (!computed("multiple") && incomingCount + currentAcceptedFiles.length === 2) return true;
54
+ if (incomingCount + currentAcceptedFiles.length > prop("maxFiles")) return false;
55
+ return true;
56
+ }
57
+ function getEventFiles(ctx, files, currentAcceptedFiles = [], currentRejectedFiles = []) {
58
+ const { prop, computed } = ctx;
59
+ const acceptedFiles = [];
60
+ const rejectedFiles = [];
61
+ const validateParams = {
62
+ acceptedFiles: currentAcceptedFiles,
63
+ rejectedFiles: currentRejectedFiles
64
+ };
65
+ files.forEach((file) => {
66
+ const [accepted, acceptError] = index$1.isValidFileType(file, computed("acceptAttr"));
67
+ const [sizeMatch, sizeError] = index$1.isValidFileSize(file, prop("minFileSize"), prop("maxFileSize"));
68
+ const validateErrors = prop("validate")?.(file, validateParams);
69
+ const valid = validateErrors ? validateErrors.length === 0 : true;
70
+ if (accepted && sizeMatch && valid) {
71
+ acceptedFiles.push(file);
72
+ } else {
73
+ const errors = [acceptError, sizeError];
74
+ if (!valid) errors.push(...validateErrors ?? []);
75
+ rejectedFiles.push({ file, errors: errors.filter(Boolean) });
76
+ }
77
+ });
78
+ if (!isFilesWithinRange(ctx, acceptedFiles.length, currentAcceptedFiles)) {
79
+ acceptedFiles.forEach((file) => {
80
+ rejectedFiles.push({ file, errors: ["TOO_MANY_FILES"] });
81
+ });
82
+ acceptedFiles.splice(0);
83
+ }
84
+ return {
85
+ acceptedFiles,
86
+ rejectedFiles
87
+ };
88
+ }
89
+ function setInputFiles(inputEl, files) {
90
+ const win = index$3.getWindow(inputEl);
91
+ try {
92
+ if ("DataTransfer" in win) {
93
+ const dataTransfer = new win.DataTransfer();
94
+ files.forEach((file) => {
95
+ dataTransfer.items.add(file);
96
+ });
97
+ inputEl.files = dataTransfer.files;
98
+ }
99
+ } catch {
100
+ }
101
+ }
102
+
103
+ // src/file-upload.connect.ts
104
+ var DEFAULT_ITEM_TYPE = "accepted";
105
+ var INTERACTIVE_SELECTOR = "button, a[href], input:not([type='file']), select, textarea, [tabindex], [contenteditable]";
106
+ function isInteractiveTarget(element, container) {
107
+ if (!element || element.getAttribute("type") === "file") return false;
108
+ const interactive = element.closest(INTERACTIVE_SELECTOR);
109
+ return interactive != container && index$3.contains(container, interactive);
110
+ }
111
+ function connect(service, normalize) {
112
+ const { state, send, prop, computed, scope, context } = service;
113
+ const disabled = !!prop("disabled");
114
+ const required = !!prop("required");
115
+ const allowDrop = prop("allowDrop");
116
+ const translations = prop("translations");
117
+ const dragging = state.matches("dragging");
118
+ const focused = state.matches("focused") && !disabled;
119
+ return {
120
+ dragging,
121
+ focused,
122
+ disabled: !!disabled,
123
+ transforming: context.get("transforming"),
124
+ openFilePicker() {
125
+ if (disabled) return;
126
+ send({ type: "OPEN" });
127
+ },
128
+ deleteFile(file, type = DEFAULT_ITEM_TYPE) {
129
+ send({ type: "FILE.DELETE", file, itemType: type });
130
+ },
131
+ acceptedFiles: context.get("acceptedFiles"),
132
+ rejectedFiles: context.get("rejectedFiles"),
133
+ setFiles(files) {
134
+ send({ type: "FILES.SET", files, count: files.length });
135
+ },
136
+ clearRejectedFiles() {
137
+ send({ type: "REJECTED_FILES.CLEAR" });
138
+ },
139
+ clearFiles() {
140
+ send({ type: "FILES.CLEAR" });
141
+ },
142
+ getFileSize(file) {
143
+ return index$5.formatBytes(file.size, prop("locale"));
144
+ },
145
+ createFileUrl(file, cb) {
146
+ const win = scope.getWin();
147
+ const url = win.URL.createObjectURL(file);
148
+ cb(url);
149
+ return () => win.URL.revokeObjectURL(url);
150
+ },
151
+ setClipboardFiles(dt) {
152
+ if (disabled) return false;
153
+ const items = Array.from(dt?.items ?? []);
154
+ const files = items.reduce((acc, item) => {
155
+ if (item.kind !== "file") return acc;
156
+ const file = item.getAsFile();
157
+ if (!file) return acc;
158
+ return [...acc, file];
159
+ }, []);
160
+ if (!files.length) return false;
161
+ send({ type: "FILES.SET", files });
162
+ return true;
163
+ },
164
+ getRootProps() {
165
+ return normalize.element({
166
+ ...parts.root.attrs,
167
+ dir: prop("dir"),
168
+ id: getRootId(scope),
169
+ "data-disabled": index$3.dataAttr(disabled),
170
+ "data-dragging": index$3.dataAttr(dragging)
171
+ });
172
+ },
173
+ getDropzoneProps(props2 = {}) {
174
+ return normalize.element({
175
+ ...parts.dropzone.attrs,
176
+ dir: prop("dir"),
177
+ id: getDropzoneId(scope),
178
+ tabIndex: disabled || props2.disableClick ? void 0 : 0,
179
+ role: props2.disableClick ? "application" : "button",
180
+ "aria-label": translations.dropzone,
181
+ "aria-disabled": disabled,
182
+ "data-invalid": index$3.dataAttr(prop("invalid")),
183
+ "data-disabled": index$3.dataAttr(disabled),
184
+ "data-dragging": index$3.dataAttr(dragging),
185
+ onKeyDown(event) {
186
+ if (disabled) return;
187
+ if (event.defaultPrevented) return;
188
+ const target = index$3.getEventTarget(event);
189
+ if (!index$3.contains(event.currentTarget, target)) return;
190
+ if (isInteractiveTarget(target, event.currentTarget)) return;
191
+ if (props2.disableClick) return;
192
+ if (event.key !== "Enter" && event.key !== " ") return;
193
+ send({ type: "DROPZONE.CLICK", src: "keydown" });
194
+ },
195
+ onClick(event) {
196
+ if (disabled) return;
197
+ if (event.defaultPrevented) return;
198
+ if (props2.disableClick) return;
199
+ const target = index$3.getEventTarget(event);
200
+ if (!index$3.contains(event.currentTarget, target)) return;
201
+ if (isInteractiveTarget(target, event.currentTarget)) return;
202
+ if (event.currentTarget.localName === "label") {
203
+ event.preventDefault();
204
+ }
205
+ send({ type: "DROPZONE.CLICK" });
206
+ },
207
+ onDragOver(event) {
208
+ if (disabled) return;
209
+ if (!allowDrop) return;
210
+ event.preventDefault();
211
+ event.stopPropagation();
212
+ try {
213
+ event.dataTransfer.dropEffect = "copy";
214
+ } catch {
215
+ }
216
+ const hasFiles = isEventWithFiles(event);
217
+ if (!hasFiles) return;
218
+ const count = event.dataTransfer.items.length;
219
+ send({ type: "DROPZONE.DRAG_OVER", count });
220
+ },
221
+ onDragLeave(event) {
222
+ if (disabled) return;
223
+ if (!allowDrop) return;
224
+ if (index$3.contains(event.currentTarget, event.relatedTarget)) return;
225
+ send({ type: "DROPZONE.DRAG_LEAVE" });
226
+ },
227
+ onDrop(event) {
228
+ if (disabled) return;
229
+ if (allowDrop) {
230
+ event.preventDefault();
231
+ event.stopPropagation();
232
+ }
233
+ const hasFiles = isEventWithFiles(event);
234
+ if (disabled || !hasFiles) return;
235
+ index$1.getFileEntries(event.dataTransfer.items, prop("directory")).then((files) => {
236
+ send({ type: "DROPZONE.DROP", files: index$2.flatArray(files) });
237
+ });
238
+ },
239
+ onFocus() {
240
+ if (disabled) return;
241
+ send({ type: "DROPZONE.FOCUS" });
242
+ },
243
+ onBlur() {
244
+ if (disabled) return;
245
+ send({ type: "DROPZONE.BLUR" });
246
+ }
247
+ });
248
+ },
249
+ getTriggerProps() {
250
+ return normalize.button({
251
+ ...parts.trigger.attrs,
252
+ dir: prop("dir"),
253
+ id: getTriggerId(scope),
254
+ disabled,
255
+ "data-disabled": index$3.dataAttr(disabled),
256
+ "data-invalid": index$3.dataAttr(prop("invalid")),
257
+ type: "button",
258
+ onClick(event) {
259
+ if (disabled) return;
260
+ if (index$3.contains(getDropzoneEl(scope), event.currentTarget)) {
261
+ event.stopPropagation();
262
+ }
263
+ send({ type: "OPEN" });
264
+ }
265
+ });
266
+ },
267
+ getHiddenInputProps() {
268
+ return normalize.input({
269
+ id: getHiddenInputId(scope),
270
+ tabIndex: -1,
271
+ disabled,
272
+ type: "file",
273
+ required: prop("required"),
274
+ capture: prop("capture"),
275
+ name: prop("name"),
276
+ accept: computed("acceptAttr"),
277
+ webkitdirectory: prop("directory") ? "" : void 0,
278
+ multiple: computed("multiple") || prop("maxFiles") > 1,
279
+ onClick(event) {
280
+ event.stopPropagation();
281
+ event.currentTarget.value = "";
282
+ },
283
+ onInput(event) {
284
+ if (disabled) return;
285
+ const { files } = event.currentTarget;
286
+ send({ type: "FILE.SELECT", files: files ? Array.from(files) : [] });
287
+ },
288
+ style: index$3.visuallyHiddenStyle
289
+ });
290
+ },
291
+ getItemGroupProps(props2 = {}) {
292
+ const { type = DEFAULT_ITEM_TYPE } = props2;
293
+ return normalize.element({
294
+ ...parts.itemGroup.attrs,
295
+ dir: prop("dir"),
296
+ "data-disabled": index$3.dataAttr(disabled),
297
+ "data-type": type
298
+ });
299
+ },
300
+ getItemProps(props2) {
301
+ const { file, type = DEFAULT_ITEM_TYPE } = props2;
302
+ return normalize.element({
303
+ ...parts.item.attrs,
304
+ dir: prop("dir"),
305
+ id: getItemId(scope, file.name),
306
+ "data-disabled": index$3.dataAttr(disabled),
307
+ "data-type": type
308
+ });
309
+ },
310
+ getItemNameProps(props2) {
311
+ const { file, type = DEFAULT_ITEM_TYPE } = props2;
312
+ return normalize.element({
313
+ ...parts.itemName.attrs,
314
+ dir: prop("dir"),
315
+ id: getItemNameId(scope, file.name),
316
+ "data-disabled": index$3.dataAttr(disabled),
317
+ "data-type": type
318
+ });
319
+ },
320
+ getItemSizeTextProps(props2) {
321
+ const { file, type = DEFAULT_ITEM_TYPE } = props2;
322
+ return normalize.element({
323
+ ...parts.itemSizeText.attrs,
324
+ dir: prop("dir"),
325
+ id: getItemSizeTextId(scope, file.name),
326
+ "data-disabled": index$3.dataAttr(disabled),
327
+ "data-type": type
328
+ });
329
+ },
330
+ getItemPreviewProps(props2) {
331
+ const { file, type = DEFAULT_ITEM_TYPE } = props2;
332
+ return normalize.element({
333
+ ...parts.itemPreview.attrs,
334
+ dir: prop("dir"),
335
+ id: getItemPreviewId(scope, file.name),
336
+ "data-disabled": index$3.dataAttr(disabled),
337
+ "data-type": type
338
+ });
339
+ },
340
+ getItemPreviewImageProps(props2) {
341
+ const { file, url, type = DEFAULT_ITEM_TYPE } = props2;
342
+ const isImage = file.type.startsWith("image/");
343
+ if (!isImage) {
344
+ throw new Error("Preview Image is only supported for image files");
345
+ }
346
+ return normalize.img({
347
+ ...parts.itemPreviewImage.attrs,
348
+ alt: translations.itemPreview?.(file),
349
+ src: url,
350
+ "data-disabled": index$3.dataAttr(disabled),
351
+ "data-type": type
352
+ });
353
+ },
354
+ getItemDeleteTriggerProps(props2) {
355
+ const { file, type = DEFAULT_ITEM_TYPE } = props2;
356
+ return normalize.button({
357
+ ...parts.itemDeleteTrigger.attrs,
358
+ dir: prop("dir"),
359
+ type: "button",
360
+ disabled,
361
+ "data-disabled": index$3.dataAttr(disabled),
362
+ "data-type": type,
363
+ "aria-label": translations.deleteFile?.(file),
364
+ onClick() {
365
+ if (disabled) return;
366
+ send({ type: "FILE.DELETE", file, itemType: type });
367
+ }
368
+ });
369
+ },
370
+ getLabelProps() {
371
+ return normalize.label({
372
+ ...parts.label.attrs,
373
+ dir: prop("dir"),
374
+ id: getLabelId(scope),
375
+ htmlFor: getHiddenInputId(scope),
376
+ "data-disabled": index$3.dataAttr(disabled),
377
+ "data-required": index$3.dataAttr(required)
378
+ });
379
+ },
380
+ getClearTriggerProps() {
381
+ return normalize.button({
382
+ ...parts.clearTrigger.attrs,
383
+ dir: prop("dir"),
384
+ type: "button",
385
+ disabled,
386
+ hidden: context.get("acceptedFiles").length === 0,
387
+ "data-disabled": index$3.dataAttr(disabled),
388
+ onClick(event) {
389
+ if (event.defaultPrevented) return;
390
+ if (disabled) return;
391
+ send({ type: "FILES.CLEAR" });
392
+ }
393
+ });
394
+ }
395
+ };
396
+ }
397
+ var machine = index.createMachine({
398
+ props({ props: props2 }) {
399
+ return {
400
+ minFileSize: 0,
401
+ maxFileSize: Number.POSITIVE_INFINITY,
402
+ maxFiles: 1,
403
+ allowDrop: true,
404
+ preventDocumentDrop: true,
405
+ defaultAcceptedFiles: [],
406
+ ...props2,
407
+ translations: {
408
+ dropzone: "dropzone",
409
+ itemPreview: (file) => `preview of ${file.name}`,
410
+ deleteFile: (file) => `delete file ${file.name}`,
411
+ ...props2.translations
412
+ }
413
+ };
414
+ },
415
+ initialState() {
416
+ return "idle";
417
+ },
418
+ context({ prop, bindable, getContext }) {
419
+ return {
420
+ acceptedFiles: bindable(() => ({
421
+ defaultValue: prop("defaultAcceptedFiles"),
422
+ value: prop("acceptedFiles"),
423
+ isEqual: (a, b) => a.length === b?.length && a.every((file, i) => index$1.isFileEqual(file, b[i])),
424
+ hash(value) {
425
+ return value.map((file) => `${file.name}-${file.size}`).join(",");
426
+ },
427
+ onChange(value) {
428
+ const ctx = getContext();
429
+ prop("onFileAccept")?.({ files: value });
430
+ prop("onFileChange")?.({ acceptedFiles: value, rejectedFiles: ctx.get("rejectedFiles") });
431
+ }
432
+ })),
433
+ rejectedFiles: bindable(() => ({
434
+ defaultValue: [],
435
+ isEqual: (a, b) => a.length === b?.length && a.every((file, i) => index$1.isFileEqual(file.file, b[i].file)),
436
+ onChange(value) {
437
+ const ctx = getContext();
438
+ prop("onFileReject")?.({ files: value });
439
+ prop("onFileChange")?.({ acceptedFiles: ctx.get("acceptedFiles"), rejectedFiles: value });
440
+ }
441
+ })),
442
+ transforming: bindable(() => ({
443
+ defaultValue: false
444
+ }))
445
+ };
446
+ },
447
+ computed: {
448
+ acceptAttr: ({ prop }) => index$1.getAcceptAttrString(prop("accept")),
449
+ multiple: ({ prop }) => prop("maxFiles") > 1
450
+ },
451
+ watch({ track, context, action }) {
452
+ track([() => context.hash("acceptedFiles")], () => {
453
+ action(["syncInputElement"]);
454
+ });
455
+ },
456
+ on: {
457
+ "FILES.SET": {
458
+ actions: ["setFiles"]
459
+ },
460
+ "FILE.SELECT": {
461
+ actions: ["setEventFiles"]
462
+ },
463
+ "FILE.DELETE": {
464
+ actions: ["removeFile"]
465
+ },
466
+ "FILES.CLEAR": {
467
+ actions: ["clearFiles"]
468
+ },
469
+ "REJECTED_FILES.CLEAR": {
470
+ actions: ["clearRejectedFiles"]
471
+ }
472
+ },
473
+ effects: ["preventDocumentDrop"],
474
+ states: {
475
+ idle: {
476
+ on: {
477
+ OPEN: {
478
+ actions: ["openFilePicker"]
479
+ },
480
+ "DROPZONE.CLICK": {
481
+ actions: ["openFilePicker"]
482
+ },
483
+ "DROPZONE.FOCUS": {
484
+ target: "focused"
485
+ },
486
+ "DROPZONE.DRAG_OVER": {
487
+ target: "dragging"
488
+ }
489
+ }
490
+ },
491
+ focused: {
492
+ on: {
493
+ "DROPZONE.BLUR": {
494
+ target: "idle"
495
+ },
496
+ OPEN: {
497
+ actions: ["openFilePicker"]
498
+ },
499
+ "DROPZONE.CLICK": {
500
+ actions: ["openFilePicker"]
501
+ },
502
+ "DROPZONE.DRAG_OVER": {
503
+ target: "dragging"
504
+ }
505
+ }
506
+ },
507
+ dragging: {
508
+ on: {
509
+ "DROPZONE.DROP": {
510
+ target: "idle",
511
+ actions: ["setEventFiles"]
512
+ },
513
+ "DROPZONE.DRAG_LEAVE": {
514
+ target: "idle"
515
+ }
516
+ }
517
+ }
518
+ },
519
+ implementations: {
520
+ effects: {
521
+ preventDocumentDrop({ prop, scope }) {
522
+ if (!prop("preventDocumentDrop")) return;
523
+ if (!prop("allowDrop")) return;
524
+ if (prop("disabled")) return;
525
+ const doc = scope.getDoc();
526
+ const onDragOver = (event) => {
527
+ event?.preventDefault();
528
+ };
529
+ const onDrop = (event) => {
530
+ if (index$3.contains(getRootEl(scope), index$3.getEventTarget(event))) return;
531
+ event.preventDefault();
532
+ };
533
+ return index$2.callAll(index$3.addDomEvent(doc, "dragover", onDragOver, false), index$3.addDomEvent(doc, "drop", onDrop, false));
534
+ }
535
+ },
536
+ actions: {
537
+ syncInputElement({ scope, context }) {
538
+ queueMicrotask(() => {
539
+ const inputEl = getHiddenInputEl(scope);
540
+ if (!inputEl) return;
541
+ setInputFiles(inputEl, context.get("acceptedFiles"));
542
+ const win = scope.getWin();
543
+ inputEl.dispatchEvent(new win.Event("change", { bubbles: true }));
544
+ });
545
+ },
546
+ openFilePicker({ scope }) {
547
+ index$3.raf(() => {
548
+ getHiddenInputEl(scope)?.click();
549
+ });
550
+ },
551
+ setFiles(params) {
552
+ const { computed, context, event } = params;
553
+ const { acceptedFiles, rejectedFiles } = getEventFiles(params, event.files);
554
+ context.set(
555
+ "acceptedFiles",
556
+ computed("multiple") ? acceptedFiles : acceptedFiles.length > 0 ? [acceptedFiles[0]] : []
557
+ );
558
+ context.set("rejectedFiles", rejectedFiles);
559
+ },
560
+ setEventFiles(params) {
561
+ const { computed, context, event, prop } = params;
562
+ const currentAcceptedFiles = context.get("acceptedFiles");
563
+ const currentRejectedFiles = context.get("rejectedFiles");
564
+ const { acceptedFiles, rejectedFiles } = getEventFiles(
565
+ params,
566
+ event.files,
567
+ currentAcceptedFiles,
568
+ currentRejectedFiles
569
+ );
570
+ const set = (files) => {
571
+ if (computed("multiple")) {
572
+ context.set("acceptedFiles", (prev) => [...prev, ...files]);
573
+ context.set("rejectedFiles", rejectedFiles);
574
+ return;
575
+ }
576
+ if (files.length) {
577
+ context.set("acceptedFiles", [files[0]]);
578
+ context.set("rejectedFiles", rejectedFiles);
579
+ return;
580
+ }
581
+ if (rejectedFiles.length) {
582
+ context.set("acceptedFiles", context.get("acceptedFiles"));
583
+ context.set("rejectedFiles", rejectedFiles);
584
+ }
585
+ };
586
+ const transform = prop("transformFiles");
587
+ if (transform) {
588
+ context.set("transforming", true);
589
+ transform(acceptedFiles).then(set).catch((err) => {
590
+ index$2.warn(`[zag-js/file-upload] error transforming files
591
+ ${err}`);
592
+ }).finally(() => {
593
+ context.set("transforming", false);
594
+ });
595
+ } else {
596
+ set(acceptedFiles);
597
+ }
598
+ },
599
+ removeFile({ context, event }) {
600
+ if (event.itemType === "rejected") {
601
+ const rejectedFiles = context.get("rejectedFiles").filter((item) => !index$1.isFileEqual(item.file, event.file));
602
+ context.set("rejectedFiles", rejectedFiles);
603
+ } else {
604
+ const files = context.get("acceptedFiles").filter((file) => !index$1.isFileEqual(file, event.file));
605
+ context.set("acceptedFiles", files);
606
+ }
607
+ },
608
+ clearRejectedFiles({ context }) {
609
+ context.set("rejectedFiles", []);
610
+ },
611
+ clearFiles({ context }) {
612
+ context.set("acceptedFiles", []);
613
+ context.set("rejectedFiles", []);
614
+ }
615
+ }
616
+ }
617
+ });
618
+ index$6.createProps()([
619
+ "accept",
620
+ "acceptedFiles",
621
+ "allowDrop",
622
+ "capture",
623
+ "defaultAcceptedFiles",
624
+ "dir",
625
+ "directory",
626
+ "disabled",
627
+ "getRootNode",
628
+ "id",
629
+ "ids",
630
+ "invalid",
631
+ "locale",
632
+ "maxFiles",
633
+ "maxFileSize",
634
+ "minFileSize",
635
+ "name",
636
+ "onFileAccept",
637
+ "onFileChange",
638
+ "onFileReject",
639
+ "preventDocumentDrop",
640
+ "required",
641
+ "transformFiles",
642
+ "translations",
643
+ "validate"
644
+ ]);
645
+ index$6.createProps()(["file", "type"]);
646
+
647
+ exports.anatomy = anatomy;
648
+ exports.connect = connect;
649
+ exports.machine = machine;