@multiplatform.one/forms 8.3.0 → 8.4.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 (265) hide show
  1. package/dist/cjs/ControlGroup/index.cjs +2 -1
  2. package/dist/cjs/ControlGroup/index.native.js +2 -1
  3. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  4. package/dist/cjs/FloatingPanel/index.native.js +20 -2
  5. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  6. package/dist/cjs/InputParts/index.cjs +1 -0
  7. package/dist/cjs/InputParts/index.native.js +1 -0
  8. package/dist/cjs/InputParts/index.native.js.map +1 -1
  9. package/dist/cjs/Wheel/index.cjs +22 -6
  10. package/dist/cjs/Wheel/index.native.js +26 -8
  11. package/dist/cjs/Wheel/index.native.js.map +1 -1
  12. package/dist/cjs/fields/DatePicker/parts.cjs +33 -30
  13. package/dist/cjs/fields/DatePicker/parts.native.js +34 -30
  14. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  15. package/dist/cjs/fields/FileUpload/index.cjs +32 -15
  16. package/dist/cjs/fields/FileUpload/index.native.js +40 -19
  17. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  18. package/dist/cjs/fields/ImageField/index.cjs +35 -20
  19. package/dist/cjs/fields/ImageField/index.native.js +37 -20
  20. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  21. package/dist/cjs/fields/Progress/index.cjs +5 -0
  22. package/dist/cjs/fields/Progress/index.native.js +5 -0
  23. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  24. package/dist/cjs/fields/Slider/index.cjs +38 -12
  25. package/dist/cjs/fields/Slider/index.native.js +39 -11
  26. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  27. package/dist/cjs/fields/Switch/index.cjs +10 -6
  28. package/dist/cjs/fields/Switch/index.native.js +10 -6
  29. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  30. package/dist/cjs/fields/TimePicker/parts.cjs +9 -10
  31. package/dist/cjs/fields/TimePicker/parts.native.js +9 -10
  32. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  33. package/dist/cjs/fields/ToggleGroup/index.cjs +1 -0
  34. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -0
  35. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  36. package/dist/cjs/fields/pickerHandle.cjs +18 -0
  37. package/dist/cjs/fields/pickerHandle.native.js +21 -0
  38. package/dist/cjs/fields/pickerHandle.native.js.map +1 -0
  39. package/dist/cjs/hooks/useHoldCue.cjs +54 -0
  40. package/dist/cjs/hooks/useHoldCue.native.js +62 -0
  41. package/dist/cjs/hooks/useHoldCue.native.js.map +1 -0
  42. package/dist/cjs/index.cjs +4 -0
  43. package/dist/cjs/index.gnome.cjs +4 -0
  44. package/dist/cjs/index.gnome.native.js +4 -0
  45. package/dist/cjs/index.gnome.native.js.map +1 -1
  46. package/dist/cjs/index.native.js +4 -0
  47. package/dist/cjs/index.native.js.map +1 -1
  48. package/dist/cjs/shared/colorRamps.cjs +9 -7
  49. package/dist/cjs/shared/colorRamps.native.js +9 -7
  50. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  51. package/dist/cjs/shared/controlTrack.cjs +32 -0
  52. package/dist/cjs/shared/controlTrack.native.js +35 -0
  53. package/dist/cjs/shared/controlTrack.native.js.map +1 -0
  54. package/dist/esm/ControlGroup/index.mjs +2 -1
  55. package/dist/esm/ControlGroup/index.mjs.map +1 -1
  56. package/dist/esm/ControlGroup/index.native.js +2 -1
  57. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  58. package/dist/esm/FloatingPanel/index.native.js +20 -2
  59. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  60. package/dist/esm/InputParts/index.mjs +1 -0
  61. package/dist/esm/InputParts/index.mjs.map +1 -1
  62. package/dist/esm/InputParts/index.native.js +1 -0
  63. package/dist/esm/InputParts/index.native.js.map +1 -1
  64. package/dist/esm/Wheel/index.mjs +23 -7
  65. package/dist/esm/Wheel/index.mjs.map +1 -1
  66. package/dist/esm/Wheel/index.native.js +27 -9
  67. package/dist/esm/Wheel/index.native.js.map +1 -1
  68. package/dist/esm/fields/DatePicker/parts.mjs +35 -32
  69. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  70. package/dist/esm/fields/DatePicker/parts.native.js +36 -32
  71. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  72. package/dist/esm/fields/FileUpload/index.mjs +33 -16
  73. package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
  74. package/dist/esm/fields/FileUpload/index.native.js +41 -20
  75. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  76. package/dist/esm/fields/ImageField/index.mjs +36 -21
  77. package/dist/esm/fields/ImageField/index.mjs.map +1 -1
  78. package/dist/esm/fields/ImageField/index.native.js +38 -21
  79. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  80. package/dist/esm/fields/Progress/index.mjs +5 -0
  81. package/dist/esm/fields/Progress/index.mjs.map +1 -1
  82. package/dist/esm/fields/Progress/index.native.js +5 -0
  83. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  84. package/dist/esm/fields/Slider/index.mjs +38 -12
  85. package/dist/esm/fields/Slider/index.mjs.map +1 -1
  86. package/dist/esm/fields/Slider/index.native.js +39 -11
  87. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  88. package/dist/esm/fields/Switch/index.mjs +10 -6
  89. package/dist/esm/fields/Switch/index.mjs.map +1 -1
  90. package/dist/esm/fields/Switch/index.native.js +10 -6
  91. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  92. package/dist/esm/fields/TimePicker/parts.mjs +9 -10
  93. package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
  94. package/dist/esm/fields/TimePicker/parts.native.js +9 -10
  95. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  96. package/dist/esm/fields/ToggleGroup/index.mjs +2 -1
  97. package/dist/esm/fields/ToggleGroup/index.mjs.map +1 -1
  98. package/dist/esm/fields/ToggleGroup/index.native.js +2 -1
  99. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  100. package/dist/esm/fields/pickerHandle.mjs +2 -0
  101. package/dist/esm/fields/pickerHandle.mjs.map +1 -0
  102. package/dist/esm/fields/pickerHandle.native.js +2 -0
  103. package/dist/esm/fields/pickerHandle.native.js.map +1 -0
  104. package/dist/esm/hooks/useHoldCue.mjs +27 -0
  105. package/dist/esm/hooks/useHoldCue.mjs.map +1 -0
  106. package/dist/esm/hooks/useHoldCue.native.js +32 -0
  107. package/dist/esm/hooks/useHoldCue.native.js.map +1 -0
  108. package/dist/esm/index.gnome.mjs +2 -1
  109. package/dist/esm/index.gnome.mjs.map +1 -1
  110. package/dist/esm/index.gnome.native.js +2 -1
  111. package/dist/esm/index.gnome.native.js.map +1 -1
  112. package/dist/esm/index.mjs +2 -1
  113. package/dist/esm/index.mjs.map +1 -1
  114. package/dist/esm/index.native.js +2 -1
  115. package/dist/esm/index.native.js.map +1 -1
  116. package/dist/esm/shared/colorRamps.mjs +9 -7
  117. package/dist/esm/shared/colorRamps.mjs.map +1 -1
  118. package/dist/esm/shared/colorRamps.native.js +9 -7
  119. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  120. package/dist/esm/shared/controlTrack.mjs +7 -0
  121. package/dist/esm/shared/controlTrack.mjs.map +1 -0
  122. package/dist/esm/shared/controlTrack.native.js +7 -0
  123. package/dist/esm/shared/controlTrack.native.js.map +1 -0
  124. package/dist/esm/shared/nativeOverlayWindow.mjs.map +1 -1
  125. package/dist/esm/shared/systemControls.mjs.map +1 -1
  126. package/dist/esm/shared/systemControls.native.js.map +1 -1
  127. package/dist/jsx/ControlGroup/index.mjs +2 -1
  128. package/dist/jsx/ControlGroup/index.mjs.map +1 -1
  129. package/dist/jsx/ControlGroup/index.native.js +2 -1
  130. package/dist/jsx/ControlGroup/index.native.js.map +1 -1
  131. package/dist/jsx/FloatingPanel/index.native.js +20 -2
  132. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  133. package/dist/jsx/InputParts/index.mjs +1 -0
  134. package/dist/jsx/InputParts/index.mjs.map +1 -1
  135. package/dist/jsx/InputParts/index.native.js +1 -0
  136. package/dist/jsx/InputParts/index.native.js.map +1 -1
  137. package/dist/jsx/Wheel/index.mjs +23 -7
  138. package/dist/jsx/Wheel/index.mjs.map +1 -1
  139. package/dist/jsx/Wheel/index.native.js +26 -8
  140. package/dist/jsx/Wheel/index.native.js.map +1 -1
  141. package/dist/jsx/fields/DatePicker/parts.mjs +35 -32
  142. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  143. package/dist/jsx/fields/DatePicker/parts.native.js +34 -30
  144. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  145. package/dist/jsx/fields/FileUpload/index.mjs +33 -16
  146. package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
  147. package/dist/jsx/fields/FileUpload/index.native.js +40 -19
  148. package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
  149. package/dist/jsx/fields/ImageField/index.mjs +36 -21
  150. package/dist/jsx/fields/ImageField/index.mjs.map +1 -1
  151. package/dist/jsx/fields/ImageField/index.native.js +37 -20
  152. package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
  153. package/dist/jsx/fields/Progress/index.mjs +5 -0
  154. package/dist/jsx/fields/Progress/index.mjs.map +1 -1
  155. package/dist/jsx/fields/Progress/index.native.js +5 -0
  156. package/dist/jsx/fields/Progress/index.native.js.map +1 -1
  157. package/dist/jsx/fields/Slider/index.mjs +38 -12
  158. package/dist/jsx/fields/Slider/index.mjs.map +1 -1
  159. package/dist/jsx/fields/Slider/index.native.js +39 -11
  160. package/dist/jsx/fields/Slider/index.native.js.map +1 -1
  161. package/dist/jsx/fields/Switch/index.mjs +10 -6
  162. package/dist/jsx/fields/Switch/index.mjs.map +1 -1
  163. package/dist/jsx/fields/Switch/index.native.js +10 -6
  164. package/dist/jsx/fields/Switch/index.native.js.map +1 -1
  165. package/dist/jsx/fields/TimePicker/parts.mjs +9 -10
  166. package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
  167. package/dist/jsx/fields/TimePicker/parts.native.js +9 -10
  168. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  169. package/dist/jsx/fields/ToggleGroup/index.mjs +2 -1
  170. package/dist/jsx/fields/ToggleGroup/index.mjs.map +1 -1
  171. package/dist/jsx/fields/ToggleGroup/index.native.js +1 -0
  172. package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
  173. package/dist/jsx/fields/pickerHandle.mjs +2 -0
  174. package/dist/jsx/fields/pickerHandle.mjs.map +1 -0
  175. package/dist/jsx/fields/pickerHandle.native.js +21 -0
  176. package/dist/jsx/fields/pickerHandle.native.js.map +1 -0
  177. package/dist/jsx/hooks/useHoldCue.mjs +27 -0
  178. package/dist/jsx/hooks/useHoldCue.mjs.map +1 -0
  179. package/dist/jsx/hooks/useHoldCue.native.js +62 -0
  180. package/dist/jsx/hooks/useHoldCue.native.js.map +1 -0
  181. package/dist/jsx/index.gnome.mjs +2 -1
  182. package/dist/jsx/index.gnome.mjs.map +1 -1
  183. package/dist/jsx/index.gnome.native.js +4 -0
  184. package/dist/jsx/index.gnome.native.js.map +1 -1
  185. package/dist/jsx/index.js +2 -1
  186. package/dist/jsx/index.js.map +1 -1
  187. package/dist/jsx/index.mjs +2 -1
  188. package/dist/jsx/index.mjs.map +1 -1
  189. package/dist/jsx/index.native.js +4 -0
  190. package/dist/jsx/index.native.js.map +1 -1
  191. package/dist/jsx/shared/colorRamps.mjs +9 -7
  192. package/dist/jsx/shared/colorRamps.mjs.map +1 -1
  193. package/dist/jsx/shared/colorRamps.native.js +9 -7
  194. package/dist/jsx/shared/colorRamps.native.js.map +1 -1
  195. package/dist/jsx/shared/controlTrack.mjs +7 -0
  196. package/dist/jsx/shared/controlTrack.mjs.map +1 -0
  197. package/dist/jsx/shared/controlTrack.native.js +35 -0
  198. package/dist/jsx/shared/controlTrack.native.js.map +1 -0
  199. package/dist/jsx/shared/nativeOverlayWindow.mjs.map +1 -1
  200. package/dist/jsx/shared/nativeOverlayWindow.native.js.map +1 -1
  201. package/dist/jsx/shared/systemControls.mjs.map +1 -1
  202. package/package.json +11 -10
  203. package/src/Button/Button.controlTiers.spec.tsx +2 -2
  204. package/src/ControlGroup/index.tsx +2 -1
  205. package/src/FloatingPanel/FloatingPanel.holdCue.native.spec.tsx +72 -0
  206. package/src/FloatingPanel/index.native.tsx +9 -1
  207. package/src/InputParts/index.tsx +1 -0
  208. package/src/Wheel/Wheel.edgeFade.spec.tsx +74 -0
  209. package/src/Wheel/index.tsx +25 -11
  210. package/src/fields/DatePicker/dateFieldMarks.spec.tsx +154 -0
  211. package/src/fields/DatePicker/parts.tsx +33 -30
  212. package/src/fields/FileUpload/index.tsx +45 -16
  213. package/src/fields/ImageField/index.tsx +42 -19
  214. package/src/fields/Progress/index.tsx +3 -0
  215. package/src/fields/Slider/Slider.system.native.spec.tsx +44 -0
  216. package/src/fields/Slider/index.tsx +40 -12
  217. package/src/fields/Stepper/Stepper.stories.tsx +42 -0
  218. package/src/fields/Switch/Switch.spec.tsx +14 -10
  219. package/src/fields/Switch/index.tsx +11 -7
  220. package/src/fields/TimePicker/parts.tsx +8 -8
  221. package/src/fields/ToggleGroup/index.tsx +7 -1
  222. package/src/fields/fieldTriggerSlot.spec.tsx +89 -0
  223. package/src/fields/pickerHandle.ts +13 -0
  224. package/src/hooks/useHoldCue.ts +26 -0
  225. package/src/index.gnome.ts +1 -0
  226. package/src/index.ts +2 -0
  227. package/src/overlayGround.spec.ts +5 -3
  228. package/src/shared/OverlayWindow.tsx +2 -2
  229. package/src/shared/colorRamps.ts +9 -6
  230. package/src/shared/controlTrack.ts +7 -0
  231. package/src/shared/nativeOverlayWindow.tsx +1 -1
  232. package/src/shared/systemControls.ts +10 -2
  233. package/types/ControlGroup/index.d.ts.map +1 -1
  234. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  235. package/types/InputParts/index.d.ts +4 -4
  236. package/types/InputParts/index.d.ts.map +1 -1
  237. package/types/Wheel/index.d.ts.map +1 -1
  238. package/types/fields/DatePicker/parts.d.ts +4 -3
  239. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  240. package/types/fields/FileUpload/index.d.ts +6 -1
  241. package/types/fields/FileUpload/index.d.ts.map +1 -1
  242. package/types/fields/ImageField/index.d.ts +7 -2
  243. package/types/fields/ImageField/index.d.ts.map +1 -1
  244. package/types/fields/Progress/index.d.ts.map +1 -1
  245. package/types/fields/Slider/index.d.ts.map +1 -1
  246. package/types/fields/Switch/index.d.ts.map +1 -1
  247. package/types/fields/ToggleGroup/index.d.ts.map +1 -1
  248. package/types/fields/pickerHandle.d.ts +12 -0
  249. package/types/fields/pickerHandle.d.ts.map +1 -0
  250. package/types/hooks/useHoldCue.d.ts +10 -0
  251. package/types/hooks/useHoldCue.d.ts.map +1 -0
  252. package/types/index.d.ts +2 -0
  253. package/types/index.d.ts.map +1 -1
  254. package/types/index.gnome.d.ts +1 -0
  255. package/types/index.gnome.d.ts.map +1 -1
  256. package/types/shared/OverlayWindow.d.ts +2 -2
  257. package/types/shared/OverlayWindow.d.ts.map +1 -1
  258. package/types/shared/colorRamps.d.ts +8 -6
  259. package/types/shared/colorRamps.d.ts.map +1 -1
  260. package/types/shared/controlTrack.d.ts +3 -0
  261. package/types/shared/controlTrack.d.ts.map +1 -0
  262. package/types/shared/nativeOverlayWindow.d.ts +1 -1
  263. package/types/shared/nativeOverlayWindow.d.ts.map +1 -1
  264. package/types/shared/systemControls.d.ts +2 -1
  265. package/types/shared/systemControls.d.ts.map +1 -1
@@ -112,6 +112,10 @@ const UploadTileGridFrame = (0, import_tamagui2.styled)(import_tamagui2.XStack,
112
112
  function FileUpload(props) {
113
113
  const hydrationTouch = (0, import_theme2.useTouchSurface)();
114
114
  const media = (0, import_tamagui.useMedia)();
115
+ const {
116
+ ref: pickerRef,
117
+ trigger
118
+ } = props;
115
119
  const {
116
120
  defaultValue,
117
121
  form,
@@ -139,6 +143,8 @@ function FileUpload(props) {
139
143
  existing,
140
144
  onExistingRemove,
141
145
  id: idProp,
146
+ ref: _ref,
147
+ trigger: _trigger,
142
148
  ...fieldProps
143
149
  } = (0, import_tamagui.useProps)(props);
144
150
  const {
@@ -430,6 +436,10 @@ function FileUpload(props) {
430
436
  if (disabled || readOnly) return;
431
437
  fileInputRef.current?.click();
432
438
  }, [disabled, readOnly]);
439
+ const requestFilesRef = (0, import_react2.useRef)(openFileDialog);
440
+ (0, import_react2.useImperativeHandle)(pickerRef, () => ({
441
+ open: () => requestFilesRef.current()
442
+ }), []);
433
443
  const nativePickInFlightRef = (0, import_react2.useRef)(false);
434
444
  const openNativePicker = (0, import_react2.useCallback)(async (onValueChange, onBlurHandler) => {
435
445
  if (disabled || readOnly || nativePickInFlightRef.current) return;
@@ -649,6 +659,27 @@ function FileUpload(props) {
649
659
  const requestFiles = import_tamagui2.isWeb ? openFileDialog : () => {
650
660
  void openNativePicker(onValueChange, onBlurHandler);
651
661
  };
662
+ requestFilesRef.current = requestFiles;
663
+ const hiddenInput = import_tamagui2.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)("input", {
664
+ ref: fileInputRef,
665
+ type: "file",
666
+ accept,
667
+ multiple,
668
+ tabIndex: -1,
669
+ onChange: e => {
670
+ handleFileSelect(e.target.files, onValueChange, e.target.files);
671
+ onBlurHandler?.();
672
+ },
673
+ style: {
674
+ display: "none"
675
+ },
676
+ disabled: !canInteract
677
+ }) : null;
678
+ if (trigger) return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui2.YStack, {
679
+ "data-file-upload": "trigger",
680
+ alignItems: "flex-start",
681
+ children: [trigger(requestFiles), hiddenInput]
682
+ });
652
683
  const zoneInteractionProps = canInteract ? import_tamagui2.isWeb ? {
653
684
  // DROPZONE-FULL-TARGET: the entire surface is the click target.
654
685
  role: filled ? "group" : "button",
@@ -848,21 +879,7 @@ function FileUpload(props) {
848
879
  textAlign: "center",
849
880
  ...knobProps.body,
850
881
  children: placeholder
851
- }), import_tamagui2.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)("input", {
852
- ref: fileInputRef,
853
- type: "file",
854
- accept,
855
- multiple,
856
- tabIndex: -1,
857
- onChange: e => {
858
- handleFileSelect(e.target.files, onValueChange, e.target.files);
859
- onBlurHandler?.();
860
- },
861
- style: {
862
- display: "none"
863
- },
864
- disabled: !canInteract
865
- }) : null]
882
+ }), hiddenInput]
866
883
  }), (multiple && hasRows || transfers.length > 0) && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(UploadFileListFrame, {
867
884
  "data-file-upload": "files",
868
885
  borderTopWidth: knobProps.borderRadius.borderWidth ?? 1,
@@ -124,6 +124,10 @@ function FileUpload(props) {
124
124
  var _ref, _ref1, _ref2;
125
125
  var hydrationTouch = (0, import_theme2.useTouchSurface)();
126
126
  var media = (0, import_tamagui.useMedia)();
127
+ var {
128
+ ref: pickerRef,
129
+ trigger
130
+ } = props;
127
131
  var {
128
132
  defaultValue,
129
133
  form,
@@ -151,6 +155,8 @@ function FileUpload(props) {
151
155
  existing,
152
156
  onExistingRemove,
153
157
  id: idProp,
158
+ ref: _ref3,
159
+ trigger: _trigger,
154
160
  ...fieldProps
155
161
  } = (0, import_tamagui.useProps)(props);
156
162
  var {
@@ -498,6 +504,14 @@ function FileUpload(props) {
498
504
  if (disabled || readOnly) return;
499
505
  (_fileInputRef_current = fileInputRef.current) === null || _fileInputRef_current === void 0 ? void 0 : _fileInputRef_current.click();
500
506
  }, [disabled, readOnly]);
507
+ var requestFilesRef = (0, import_react2.useRef)(openFileDialog);
508
+ (0, import_react2.useImperativeHandle)(pickerRef, function () {
509
+ return {
510
+ open: function open() {
511
+ return requestFilesRef.current();
512
+ }
513
+ };
514
+ }, []);
501
515
  var nativePickInFlightRef = (0, import_react2.useRef)(false);
502
516
  var openNativePicker = (0, import_react2.useCallback)(async function (onValueChange, onBlurHandler) {
503
517
  if (disabled || readOnly || nativePickInFlightRef.current) return;
@@ -620,7 +634,7 @@ function FileUpload(props) {
620
634
  }) : null;
621
635
  };
622
636
  var previewActions = function previewActions2(overMedia, onValueChange) {
623
- var _ref3;
637
+ var _ref4;
624
638
  var plate = overMedia ? {
625
639
  plate: "media"
626
640
  } : void 0;
@@ -660,7 +674,7 @@ function FileUpload(props) {
660
674
  ...plate,
661
675
  icon: import_standardActions.standardActions.remove.icon,
662
676
  "aria-label": (0, import_t.t)("Remove {{name}}", {
663
- name: (_ref3 = singleFile === null || singleFile === void 0 ? void 0 : singleFile.name) !== null && _ref3 !== void 0 ? _ref3 : existingName
677
+ name: (_ref4 = singleFile === null || singleFile === void 0 ? void 0 : singleFile.name) !== null && _ref4 !== void 0 ? _ref4 : existingName
664
678
  }),
665
679
  onPress: function onPress(event) {
666
680
  stop(event);
@@ -751,11 +765,32 @@ function FileUpload(props) {
751
765
  }, `${file.name}-${file.size}-${file.lastModified}`);
752
766
  };
753
767
  var renderUploadArea = function renderUploadArea2(errorProp, onValueChange, onBlurHandler) {
754
- var _knobProps_borderRadius_borderWidth, _knobProps_borderRadius_borderWidth1, _ref3, _ref12, _knobProps_borderRadius_borderWidth2;
768
+ var _knobProps_borderRadius_borderWidth, _knobProps_borderRadius_borderWidth1, _ref4, _ref12, _knobProps_borderRadius_borderWidth2;
755
769
  emitFieldRef.current = onValueChange;
756
770
  var requestFiles = import_tamagui2.isWeb ? openFileDialog : function () {
757
771
  void openNativePicker(onValueChange, onBlurHandler);
758
772
  };
773
+ requestFilesRef.current = requestFiles;
774
+ var hiddenInput = import_tamagui2.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)("input", {
775
+ ref: fileInputRef,
776
+ type: "file",
777
+ accept,
778
+ multiple,
779
+ tabIndex: -1,
780
+ onChange: function onChange(e) {
781
+ handleFileSelect(e.target.files, onValueChange, e.target.files);
782
+ onBlurHandler === null || onBlurHandler === void 0 ? void 0 : onBlurHandler();
783
+ },
784
+ style: {
785
+ display: "none"
786
+ },
787
+ disabled: !canInteract
788
+ }) : null;
789
+ if (trigger) return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui2.YStack, {
790
+ "data-file-upload": "trigger",
791
+ alignItems: "flex-start",
792
+ children: [trigger(requestFiles), hiddenInput]
793
+ });
759
794
  var zoneInteractionProps = canInteract ? import_tamagui2.isWeb ? {
760
795
  // DROPZONE-FULL-TARGET: the entire surface is the click target.
761
796
  role: filled ? "group" : "button",
@@ -908,7 +943,7 @@ function FileUpload(props) {
908
943
  backgroundColor: "$color5",
909
944
  children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui2.Image, {
910
945
  src: singlePreview,
911
- alt: (_ref3 = singleFile === null || singleFile === void 0 ? void 0 : singleFile.name) !== null && _ref3 !== void 0 ? _ref3 : existingName,
946
+ alt: (_ref4 = singleFile === null || singleFile === void 0 ? void 0 : singleFile.name) !== null && _ref4 !== void 0 ? _ref4 : existingName,
912
947
  width: "100%",
913
948
  height: "100%",
914
949
  objectFit: "contain",
@@ -981,21 +1016,7 @@ function FileUpload(props) {
981
1016
  textAlign: "center",
982
1017
  ...knobProps.body,
983
1018
  children: placeholder
984
- }), import_tamagui2.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)("input", {
985
- ref: fileInputRef,
986
- type: "file",
987
- accept,
988
- multiple,
989
- tabIndex: -1,
990
- onChange: function onChange(e) {
991
- handleFileSelect(e.target.files, onValueChange, e.target.files);
992
- onBlurHandler === null || onBlurHandler === void 0 ? void 0 : onBlurHandler();
993
- },
994
- style: {
995
- display: "none"
996
- },
997
- disabled: !canInteract
998
- }) : null]
1019
+ }), hiddenInput]
999
1020
  }), (multiple && hasRows || transfers.length > 0) && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(UploadFileListFrame, {
1000
1021
  "data-file-upload": "files",
1001
1022
  // The hairline tracks the frame edge's knob width — one dash voice.