@multiplatform.one/forms 7.67.0 → 7.68.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 (419) hide show
  1. package/dist/cjs/AdaptivePopup/index.cjs +45 -5
  2. package/dist/cjs/AdaptivePopup/index.native.js +48 -6
  3. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  4. package/dist/cjs/Button/glass.cjs +30 -0
  5. package/dist/cjs/Button/glass.native.js +47 -0
  6. package/dist/cjs/Button/glass.native.js.map +1 -0
  7. package/dist/cjs/Button/index.cjs +157 -28
  8. package/dist/cjs/Button/index.native.js +158 -29
  9. package/dist/cjs/Button/index.native.js.map +1 -1
  10. package/dist/cjs/Chip/index.native.js.map +1 -1
  11. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  12. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  13. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  14. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  15. package/dist/cjs/ContextualSaveBar/index.cjs +6 -8
  16. package/dist/cjs/ContextualSaveBar/index.native.js +9 -11
  17. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  18. package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  19. package/dist/cjs/ControlGroup/index.native.js +1 -1
  20. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  21. package/dist/cjs/DescriptionList/index.cjs +0 -1
  22. package/dist/cjs/DescriptionList/index.native.js +2 -3
  23. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  24. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  25. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  26. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  27. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  28. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  29. package/dist/cjs/FieldGroup.native.js.map +1 -1
  30. package/dist/cjs/FloatingPanel/RegularPanel.native.js.map +1 -1
  31. package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
  32. package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -1
  33. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
  34. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  35. package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -1
  36. package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
  37. package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
  38. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  39. package/dist/cjs/Form/index.native.js +1 -1
  40. package/dist/cjs/Form/index.native.js.map +1 -1
  41. package/dist/cjs/Form/submissionController.native.js.map +1 -1
  42. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  43. package/dist/cjs/FormGrid.native.js.map +1 -1
  44. package/dist/cjs/FormSection.native.js.map +1 -1
  45. package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
  46. package/dist/cjs/InputParts/index.native.js.map +1 -1
  47. package/dist/cjs/Label/index.native.js.map +1 -1
  48. package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
  49. package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
  50. package/dist/cjs/MediaPicker/types.native.js.map +1 -1
  51. package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
  52. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  53. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  54. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  55. package/dist/cjs/Table/index.native.js.map +1 -1
  56. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  57. package/dist/cjs/Wheel/index.native.js.map +1 -1
  58. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  59. package/dist/cjs/actionLabel.native.js.map +1 -1
  60. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  61. package/dist/cjs/fieldLayout.native.js +1 -1
  62. package/dist/cjs/fieldLayout.native.js.map +1 -1
  63. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  64. package/dist/cjs/fields/Barcode/BarcodeScanner.cjs +7 -8
  65. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +8 -9
  66. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js.map +1 -1
  67. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  68. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  69. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  70. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  71. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  72. package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
  73. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  74. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  75. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  76. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  77. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
  78. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  79. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  80. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  81. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  82. package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
  83. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  84. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  85. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  86. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  87. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  88. package/dist/cjs/fields/Combobox/index.native.js +5 -5
  89. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  90. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  91. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  92. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  93. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +3 -3
  94. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  95. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
  96. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  97. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  98. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  99. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  100. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -2
  101. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  102. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  103. package/dist/cjs/fields/DatePicker/index.native.js +2 -2
  104. package/dist/cjs/fields/DatePicker/parts.native.js +2 -2
  105. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  106. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  107. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  108. package/dist/cjs/fields/Duration/index.native.js +3 -3
  109. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  110. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  111. package/dist/cjs/fields/FileUpload/index.cjs +83 -60
  112. package/dist/cjs/fields/FileUpload/index.native.js +98 -75
  113. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  114. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  115. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  116. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  117. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
  118. package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
  119. package/dist/cjs/fields/Geolocation/index.cjs +7 -8
  120. package/dist/cjs/fields/Geolocation/index.native.js +12 -13
  121. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  122. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  123. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  124. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  125. package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  126. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  127. package/dist/cjs/fields/Icon/index.native.js +3 -3
  128. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  129. package/dist/cjs/fields/ImageField/index.cjs +4 -6
  130. package/dist/cjs/fields/ImageField/index.native.js +6 -8
  131. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  132. package/dist/cjs/fields/Input/index.native.js +3 -3
  133. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  134. package/dist/cjs/fields/MentionInput/index.native.js +3 -3
  135. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  136. package/dist/cjs/fields/OTPInput/index.native.js +3 -3
  137. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  138. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  139. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  140. package/dist/cjs/fields/PhoneInput/index.native.js +3 -3
  141. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  142. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  143. package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
  144. package/dist/cjs/fields/Progress/index.native.js +1 -1
  145. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  146. package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
  147. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  148. package/dist/cjs/fields/Rating/index.native.js +1 -1
  149. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  150. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  151. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  152. package/dist/cjs/fields/SearchInput/index.native.js +2 -2
  153. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  154. package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
  155. package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -1
  156. package/dist/cjs/fields/Select/index.native.js +4 -4
  157. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  158. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  159. package/dist/cjs/fields/Signature/index.native.js +2 -2
  160. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  161. package/dist/cjs/fields/Slider/index.native.js +1 -1
  162. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  163. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  164. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  165. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  166. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  167. package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
  168. package/dist/cjs/fields/Switch/index.native.js +2 -2
  169. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  170. package/dist/cjs/fields/TextArea/index.native.js +2 -2
  171. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  172. package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
  173. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  174. package/dist/cjs/fields/TimePicker/index.native.js +2 -2
  175. package/dist/cjs/fields/TimePicker/parts.native.js +1 -1
  176. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  177. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  178. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +2 -2
  179. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  180. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
  181. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  182. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +20 -28
  183. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +20 -28
  184. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  185. package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  186. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  187. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  188. package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
  189. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  190. package/dist/cjs/formSpacing.native.js.map +1 -1
  191. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  192. package/dist/cjs/index.cjs +8 -1
  193. package/dist/cjs/index.native.js +52 -45
  194. package/dist/cjs/index.native.js.map +1 -1
  195. package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
  196. package/dist/cjs/keyboard/chain.native.js.map +1 -1
  197. package/dist/cjs/keyboard/index.native.js.map +1 -1
  198. package/dist/cjs/keyboard/types.native.js.map +1 -1
  199. package/dist/cjs/requiredMarking.native.js.map +1 -1
  200. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  201. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  202. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  203. package/dist/cjs/shared/choiceRowPress.native.js.map +1 -1
  204. package/dist/cjs/shared/colorRamps.cjs +0 -8
  205. package/dist/cjs/shared/colorRamps.native.js +0 -8
  206. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  207. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  208. package/dist/cjs/shared/floatingList.native.js +1 -1
  209. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  210. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  211. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  212. package/dist/cjs/shared/i18n.native.js.map +1 -1
  213. package/dist/cjs/shared/instantMotion.native.js.map +1 -1
  214. package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
  215. package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
  216. package/dist/cjs/shared/overlaySizeClass.native.js.map +1 -1
  217. package/dist/cjs/shared/overlayStack.native.js.map +1 -1
  218. package/dist/cjs/shared/panelPortal.native.js.map +1 -1
  219. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
  220. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
  221. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  222. package/dist/cjs/shared/sheetNavigation.native.js.map +1 -1
  223. package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -1
  224. package/dist/cjs/shared/systemControls.native.js.map +1 -1
  225. package/dist/cjs/shared/t.native.js.map +1 -1
  226. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  227. package/dist/cjs/shared/touchWebPicker.native.js.map +1 -1
  228. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  229. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  230. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  231. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  232. package/dist/cjs/shared/utils.native.js +1 -1
  233. package/dist/cjs/shared/utils.native.js.map +1 -1
  234. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  235. package/dist/cjs/standardActions.cjs +117 -0
  236. package/dist/cjs/standardActions.native.js +120 -0
  237. package/dist/cjs/standardActions.native.js.map +1 -0
  238. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  239. package/dist/cjs/types.native.js.map +1 -1
  240. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  241. package/dist/esm/AdaptivePopup/index.mjs +45 -5
  242. package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
  243. package/dist/esm/AdaptivePopup/index.native.js +47 -5
  244. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  245. package/dist/esm/Button/glass.mjs +5 -0
  246. package/dist/esm/Button/glass.mjs.map +1 -0
  247. package/dist/esm/Button/glass.native.js +19 -0
  248. package/dist/esm/Button/glass.native.js.map +1 -0
  249. package/dist/esm/Button/index.mjs +153 -28
  250. package/dist/esm/Button/index.mjs.map +1 -1
  251. package/dist/esm/Button/index.native.js +153 -28
  252. package/dist/esm/Button/index.native.js.map +1 -1
  253. package/dist/esm/ContextualSaveBar/index.mjs +7 -9
  254. package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
  255. package/dist/esm/ContextualSaveBar/index.native.js +7 -9
  256. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  257. package/dist/esm/DescriptionList/index.mjs +0 -1
  258. package/dist/esm/DescriptionList/index.mjs.map +1 -1
  259. package/dist/esm/DescriptionList/index.native.js +0 -1
  260. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  261. package/dist/esm/fields/Barcode/BarcodeScanner.mjs +8 -9
  262. package/dist/esm/fields/Barcode/BarcodeScanner.mjs.map +1 -1
  263. package/dist/esm/fields/Barcode/BarcodeScanner.native.js +8 -9
  264. package/dist/esm/fields/Barcode/BarcodeScanner.native.js.map +1 -1
  265. package/dist/esm/fields/FileUpload/index.mjs +84 -61
  266. package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
  267. package/dist/esm/fields/FileUpload/index.native.js +97 -74
  268. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  269. package/dist/esm/fields/Geolocation/index.mjs +8 -9
  270. package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
  271. package/dist/esm/fields/Geolocation/index.native.js +8 -9
  272. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  273. package/dist/esm/fields/ImageField/index.mjs +6 -8
  274. package/dist/esm/fields/ImageField/index.mjs.map +1 -1
  275. package/dist/esm/fields/ImageField/index.native.js +6 -8
  276. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  277. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +20 -28
  278. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  279. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +20 -28
  280. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  281. package/dist/esm/index.mjs +3 -2
  282. package/dist/esm/index.mjs.map +1 -1
  283. package/dist/esm/index.native.js +3 -2
  284. package/dist/esm/index.native.js.map +1 -1
  285. package/dist/esm/shared/colorRamps.mjs +0 -8
  286. package/dist/esm/shared/colorRamps.mjs.map +1 -1
  287. package/dist/esm/shared/colorRamps.native.js +0 -8
  288. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  289. package/dist/esm/standardActions.mjs +91 -0
  290. package/dist/esm/standardActions.mjs.map +1 -0
  291. package/dist/esm/standardActions.native.js +91 -0
  292. package/dist/esm/standardActions.native.js.map +1 -0
  293. package/dist/jsx/AdaptivePopup/index.mjs +45 -5
  294. package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
  295. package/dist/jsx/AdaptivePopup/index.native.js +47 -5
  296. package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
  297. package/dist/jsx/Button/glass.mjs +5 -0
  298. package/dist/jsx/Button/glass.mjs.map +1 -0
  299. package/dist/jsx/Button/glass.native.js +47 -0
  300. package/dist/jsx/Button/glass.native.js.map +1 -0
  301. package/dist/jsx/Button/index.mjs +153 -28
  302. package/dist/jsx/Button/index.mjs.map +1 -1
  303. package/dist/jsx/Button/index.native.js +156 -27
  304. package/dist/jsx/Button/index.native.js.map +1 -1
  305. package/dist/jsx/ContextualSaveBar/index.mjs +7 -9
  306. package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
  307. package/dist/jsx/ContextualSaveBar/index.native.js +6 -8
  308. package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
  309. package/dist/jsx/DescriptionList/index.mjs +0 -1
  310. package/dist/jsx/DescriptionList/index.mjs.map +1 -1
  311. package/dist/jsx/DescriptionList/index.native.js +0 -1
  312. package/dist/jsx/DescriptionList/index.native.js.map +1 -1
  313. package/dist/jsx/fields/Barcode/BarcodeScanner.mjs +8 -9
  314. package/dist/jsx/fields/Barcode/BarcodeScanner.mjs.map +1 -1
  315. package/dist/jsx/fields/Barcode/BarcodeScanner.native.js +7 -8
  316. package/dist/jsx/fields/Barcode/BarcodeScanner.native.js.map +1 -1
  317. package/dist/jsx/fields/FileUpload/index.mjs +84 -61
  318. package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
  319. package/dist/jsx/fields/FileUpload/index.native.js +96 -73
  320. package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
  321. package/dist/jsx/fields/Geolocation/index.mjs +8 -9
  322. package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
  323. package/dist/jsx/fields/Geolocation/index.native.js +7 -8
  324. package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
  325. package/dist/jsx/fields/ImageField/index.mjs +6 -8
  326. package/dist/jsx/fields/ImageField/index.mjs.map +1 -1
  327. package/dist/jsx/fields/ImageField/index.native.js +4 -6
  328. package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
  329. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +20 -28
  330. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  331. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +20 -28
  332. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  333. package/dist/jsx/index.js +3 -2
  334. package/dist/jsx/index.js.map +1 -1
  335. package/dist/jsx/index.mjs +3 -2
  336. package/dist/jsx/index.mjs.map +1 -1
  337. package/dist/jsx/index.native.js +7 -0
  338. package/dist/jsx/index.native.js.map +1 -1
  339. package/dist/jsx/shared/colorRamps.mjs +0 -8
  340. package/dist/jsx/shared/colorRamps.mjs.map +1 -1
  341. package/dist/jsx/shared/colorRamps.native.js +0 -8
  342. package/dist/jsx/shared/colorRamps.native.js.map +1 -1
  343. package/dist/jsx/standardActions.mjs +91 -0
  344. package/dist/jsx/standardActions.mjs.map +1 -0
  345. package/dist/jsx/standardActions.native.js +120 -0
  346. package/dist/jsx/standardActions.native.js.map +1 -0
  347. package/package.json +12 -8
  348. package/src/AdaptivePopup/AdaptivePopup.spec.tsx +44 -0
  349. package/src/AdaptivePopup/AdaptivePopup.stories.tsx +12 -32
  350. package/src/AdaptivePopup/index.tsx +65 -13
  351. package/src/Button/Button.disabledGlyph.spec.tsx +111 -0
  352. package/src/Button/Button.iconButton.spec.tsx +279 -0
  353. package/src/Button/Button.stories.tsx +59 -3
  354. package/src/Button/glass.native.ts +38 -0
  355. package/src/Button/glass.ts +18 -0
  356. package/src/Button/index.tsx +272 -40
  357. package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +3 -1
  358. package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +2 -2
  359. package/src/ContextualSaveBar/index.tsx +7 -10
  360. package/src/ControlGroup/ControlGroup.stories.tsx +3 -2
  361. package/src/DescriptionList/index.tsx +0 -1
  362. package/src/ErrorSummary.stories.tsx +2 -1
  363. package/src/FieldLayout.stories.tsx +3 -2
  364. package/src/FloatingPanel/FloatingPanel.stories.tsx +6 -10
  365. package/src/Form/Form.stories.tsx +6 -5
  366. package/src/errorSummaryStories.spec.tsx +4 -4
  367. package/src/fields/Barcode/BarcodeScanner.native.tsx +10 -9
  368. package/src/fields/Barcode/BarcodeScanner.tsx +10 -9
  369. package/src/fields/Checkbox/Checkbox.stories.tsx +3 -3
  370. package/src/fields/Checkbox/CheckboxGroup.stories.tsx +2 -2
  371. package/src/fields/ColorPicker/ColorPicker.stories.tsx +2 -2
  372. package/src/fields/Combobox/Combobox.stories.tsx +2 -2
  373. package/src/fields/DatePicker/DatePicker.stories.tsx +2 -1
  374. package/src/fields/DatePicker/DateRangePicker.stories.tsx +2 -2
  375. package/src/fields/DatePicker/DatetimePicker.stories.tsx +2 -1
  376. package/src/fields/DatePicker/MonthPicker.stories.tsx +2 -2
  377. package/src/fields/DatePicker/MultiDatePicker.stories.tsx +2 -2
  378. package/src/fields/FileUpload/FileUpload.spec.tsx +11 -6
  379. package/src/fields/FileUpload/FileUpload.stories.tsx +2 -2
  380. package/src/fields/FileUpload/index.tsx +101 -77
  381. package/src/fields/Geolocation/index.tsx +12 -7
  382. package/src/fields/ImageField/ImageField.spec.tsx +5 -5
  383. package/src/fields/ImageField/ImageField.stories.tsx +2 -2
  384. package/src/fields/ImageField/index.tsx +6 -9
  385. package/src/fields/Input/Input.stories.tsx +2 -2
  386. package/src/fields/MentionInput/MentionInput.stories.tsx +2 -1
  387. package/src/fields/Progress/Progress.stories.tsx +2 -1
  388. package/src/fields/RadioGroup/RadioGroup.stories.tsx +2 -1
  389. package/src/fields/Signature/Signature.stories.tsx +2 -2
  390. package/src/fields/Stepper/Stepper.stories.tsx +2 -2
  391. package/src/fields/TextArea/TextArea.stories.tsx +2 -2
  392. package/src/fields/ToggleGroup/ToggleGroup.stories.tsx +2 -2
  393. package/src/fields/nativeDateTime/OsDateTimeSheet.presentation.spec.tsx +6 -5
  394. package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +24 -12
  395. package/src/index.ts +10 -2
  396. package/src/shared/colorRamps.ts +1 -11
  397. package/src/standardActions.ts +96 -0
  398. package/types/AdaptivePopup/index.d.ts +13 -1
  399. package/types/AdaptivePopup/index.d.ts.map +1 -1
  400. package/types/Button/glass.d.ts +15 -0
  401. package/types/Button/glass.d.ts.map +1 -0
  402. package/types/Button/glass.native.d.ts +11 -0
  403. package/types/Button/glass.native.d.ts.map +1 -0
  404. package/types/Button/index.d.ts +45 -1
  405. package/types/Button/index.d.ts.map +1 -1
  406. package/types/ContextualSaveBar/index.d.ts.map +1 -1
  407. package/types/DescriptionList/index.d.ts.map +1 -1
  408. package/types/fields/Barcode/BarcodeScanner.d.ts.map +1 -1
  409. package/types/fields/Barcode/BarcodeScanner.native.d.ts.map +1 -1
  410. package/types/fields/FileUpload/index.d.ts.map +1 -1
  411. package/types/fields/Geolocation/index.d.ts.map +1 -1
  412. package/types/fields/ImageField/index.d.ts.map +1 -1
  413. package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts.map +1 -1
  414. package/types/index.d.ts +4 -2
  415. package/types/index.d.ts.map +1 -1
  416. package/types/shared/colorRamps.d.ts +1 -11
  417. package/types/shared/colorRamps.d.ts.map +1 -1
  418. package/types/standardActions.d.ts +24 -0
  419. package/types/standardActions.d.ts.map +1 -0
@@ -1,7 +1,8 @@
1
1
  import { useState } from "react";
2
2
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
3
- import { Preset, Paragraph, H4, Text } from "@multiplatform.one/theme";
4
- import { ScrollView, Separator, View, XStack, YStack } from "tamagui";
3
+ import { Preset, Paragraph, Text } from "@multiplatform.one/theme";
4
+ import { ScrollView, View, XStack, YStack } from "tamagui";
5
+ import { OverlayHeader } from "@multiplatform.one/components";
5
6
  import { FloatingPanel } from "./index";
6
7
  import { Button } from "../Button";
7
8
  import { Select } from "../fields/Select";
@@ -38,13 +39,11 @@ export const Basic: Story = {
38
39
  trigger={<Button>{open ? "Panel is open" : "Click to open panel"}</Button>}
39
40
  >
40
41
  <YStack gap="$3">
41
- <H4>Panel Content</H4>
42
+ <OverlayHeader title="Panel Content" onClose={() => setOpen(false)} />
42
43
  <Paragraph>
43
44
  Opens over its trigger: the top edge sits on the trigger's top edge and the trigger is
44
45
  the first row. Escape or an outside click dismisses and returns focus.
45
46
  </Paragraph>
46
- <Separator />
47
- <Button onPress={() => setOpen(false)}>Close</Button>
48
47
  </YStack>
49
48
  </FloatingPanel>
50
49
  </YStack>
@@ -185,9 +184,8 @@ export const ForceSheet: Story = {
185
184
  trigger={<Button>{open ? "Sheet open" : "Click for Sheet (forced)"}</Button>}
186
185
  >
187
186
  <YStack gap="$3">
188
- <H4>Forced Sheet</H4>
187
+ <OverlayHeader title="Forced Sheet" onClose={() => setOpen(false)} />
189
188
  <Paragraph>This panel always uses Sheet, even on large screens.</Paragraph>
190
- <Button onPress={() => setOpen(false)}>Close</Button>
191
189
  </YStack>
192
190
  </FloatingPanel>
193
191
  </YStack>
@@ -224,13 +222,11 @@ function ScrollClipPair({ where }: { where: string }) {
224
222
  trigger={<Button>{`FloatingPanel (${where})`}</Button>}
225
223
  >
226
224
  <YStack gap="$3" data-testid={`scroll-clip-panel-${where}`}>
227
- <H4>Panel {where}</H4>
225
+ <OverlayHeader title={`Panel ${where}`} onClose={() => setOpen(false)} />
228
226
  <Paragraph>
229
227
  This body is taller than the space left in the scroll view, so a clipped panel loses its
230
228
  lower half.
231
229
  </Paragraph>
232
- <Separator />
233
- <Button onPress={() => setOpen(false)}>Close</Button>
234
230
  </YStack>
235
231
  </FloatingPanel>
236
232
  </YStack>
@@ -53,6 +53,7 @@ import { formatFieldError } from "../ErrorSummary";
53
53
  import type { AnyFormApi } from "../types";
54
54
  import { Form, FormActions } from "./index";
55
55
  import { H3 } from "@multiplatform.one/theme";
56
+ import { ActionButton } from "@multiplatform.one/components";
56
57
 
57
58
  const meta: Meta<typeof Form> = {
58
59
  title: "Forms/Form",
@@ -95,7 +96,7 @@ export const Basic = () => (
95
96
  <Input label="Username" name="username" required />
96
97
  <Input label="Email" name="email" required />
97
98
  <FormActions>
98
- <Button action="submit">Submit</Button>
99
+ <ActionButton kind="submit" formAction="submit" />
99
100
  </FormActions>
100
101
  </Form>
101
102
  );
@@ -292,7 +293,7 @@ export const DynamicFields = () => {
292
293
  })()}
293
294
 
294
295
  <FormActions>
295
- <Button action="submit">Submit</Button>
296
+ <ActionButton kind="submit" formAction="submit" />
296
297
  </FormActions>
297
298
  </Form>
298
299
  );
@@ -313,7 +314,7 @@ export const ReadOnlyAndDisabledSubmit = () => (
313
314
  <Input label="Read Only" name="readOnlyField" readOnly />
314
315
  <Input label="Disabled" name="disabledField" disabled />
315
316
  <FormActions>
316
- <Button action="submit">Submit</Button>
317
+ <ActionButton kind="submit" formAction="submit" />
317
318
  </FormActions>
318
319
  </Form>
319
320
  );
@@ -342,7 +343,7 @@ export const InputWithLinkResolver = () => (
342
343
  linkResolver={(v) => (v ? (`/items/${String(v)}` as any) : null)}
343
344
  />
344
345
  <FormActions>
345
- <Button action="submit">Submit</Button>
346
+ <ActionButton kind="submit" formAction="submit" />
346
347
  </FormActions>
347
348
  </Form>
348
349
  );
@@ -999,7 +1000,7 @@ export const Layout = () => (
999
1000
  </FormSection>
1000
1001
  </FormSectionStack>
1001
1002
  <FormActions>
1002
- <Button action="submit">Save</Button>
1003
+ <ActionButton kind="save" formAction="submit" />
1003
1004
  </FormActions>
1004
1005
  </Form>
1005
1006
  );
@@ -86,17 +86,17 @@ describe("Forms/ErrorSummary stories", () => {
86
86
  });
87
87
 
88
88
  it("FocusesTheFieldOnPress starts clean and raises the summary on submit", () => {
89
- const { container, getByText } = mount(FocusesTheFieldOnPress as StoryLike);
89
+ const { container, getByRole } = mount(FocusesTheFieldOnPress as StoryLike);
90
90
  expect(container.querySelector("[data-testid='error-summary']")).toBeNull();
91
- fireEvent.click(getByText("Submit"));
91
+ fireEvent.click(getByRole("button", { name: "Submit" }));
92
92
  const summary = container.querySelector("[data-testid='error-summary']");
93
93
  expect(summary).toBeTruthy();
94
94
  expect(container.querySelectorAll("a").length).toBe(2);
95
95
  });
96
96
 
97
97
  it("FocusesTheFieldOnPress links target the ids its fields actually carry", () => {
98
- const { container, getByText } = mount(FocusesTheFieldOnPress as StoryLike);
99
- fireEvent.click(getByText("Submit"));
98
+ const { container, getByRole } = mount(FocusesTheFieldOnPress as StoryLike);
99
+ fireEvent.click(getByRole("button", { name: "Submit" }));
100
100
  const hrefs = Array.from(container.querySelectorAll("a")).map((a) => a.getAttribute("href"));
101
101
  expect(hrefs).toEqual(["#email", "#password"]);
102
102
  expect(container.querySelector("#email")).toBeTruthy();
@@ -2,7 +2,8 @@ import { Camera, CameraView, useCameraPermissions } from "expo-camera";
2
2
  import { useEffect, useRef, useState } from "react";
3
3
  import { StyleSheet } from "react-native";
4
4
  import { Text, View, XStack, YStack } from "tamagui";
5
- import { Button } from "../../Button";
5
+ import { Button, IconButton } from "../../Button";
6
+ import { standardActions } from "../../standardActions";
6
7
  import { formCommonColors, formInputColors } from "../../shared/colorRamps";
7
8
  import { t } from "../../shared/t";
8
9
  import type { BarcodeScannerProps, CameraPreflightResult } from "./scannerTypes";
@@ -95,8 +96,8 @@ export function BarcodeScanner({
95
96
  {t("Camera permission denied. Please allow camera access.")}
96
97
  </Text>
97
98
  <XStack gap="$2">
98
- <Button
99
- size={knobProps.sizeToken}
99
+ <IconButton
100
+ icon={standardActions.retry.icon}
100
101
  onPress={() => {
101
102
  setDenied(false);
102
103
  requestPermission().then((res) => {
@@ -104,12 +105,12 @@ export function BarcodeScanner({
104
105
  });
105
106
  }}
106
107
  aria-label={t("Retry camera")}
107
- >
108
- {t("Retry")}
109
- </Button>
110
- <Button size={knobProps.sizeToken} onPress={onClose} aria-label={t("Close scanner")}>
111
- {t("Close")}
112
- </Button>
108
+ />
109
+ <IconButton
110
+ icon={standardActions.close.icon}
111
+ onPress={onClose}
112
+ aria-label={t("Close scanner")}
113
+ />
113
114
  </XStack>
114
115
  </YStack>
115
116
  ) : !permission?.granted ? (
@@ -1,6 +1,7 @@
1
1
  import { useEffect, useRef, useState } from "react";
2
2
  import { Text, View, XStack, YStack, isWeb } from "tamagui";
3
- import { Button } from "../../Button";
3
+ import { Button, IconButton } from "../../Button";
4
+ import { standardActions } from "../../standardActions";
4
5
  import { queryPermissionState } from "../../shared/capabilityPreflight";
5
6
  import { formCommonColors, formInputColors } from "../../shared/colorRamps";
6
7
  import { t } from "../../shared/t";
@@ -173,16 +174,16 @@ export function BarcodeScanner({
173
174
  {errorMessage}
174
175
  </Text>
175
176
  <XStack gap="$2">
176
- <Button
177
- size={knobProps.sizeToken}
177
+ <IconButton
178
+ icon={standardActions.retry.icon}
178
179
  onPress={() => setAttempt((a) => a + 1)}
179
180
  aria-label={t("Retry camera")}
180
- >
181
- {t("Retry")}
182
- </Button>
183
- <Button size={knobProps.sizeToken} onPress={onClose} aria-label={t("Close scanner")}>
184
- {t("Close")}
185
- </Button>
181
+ />
182
+ <IconButton
183
+ icon={standardActions.close.icon}
184
+ onPress={onClose}
185
+ aria-label={t("Close scanner")}
186
+ />
186
187
  </XStack>
187
188
  </YStack>
188
189
  ) : (
@@ -6,10 +6,10 @@ import { useForm } from "@tanstack/react-form";
6
6
  import { useState } from "react";
7
7
  import { Checkbox as TamaguiCheckbox, XStack, YStack } from "tamagui";
8
8
  import { Label } from "../../Label";
9
- import { Button } from "../../Button";
10
9
  import { Form } from "../../Form";
11
10
  import { Checkbox, Checkboxes, CheckboxGroup } from "./index";
12
11
  import { Paragraph } from "@multiplatform.one/theme";
12
+ import { ActionButton } from "@multiplatform.one/components";
13
13
 
14
14
  const meta: Meta<typeof Checkbox> = {
15
15
  title: "Forms/Checkbox",
@@ -54,7 +54,7 @@ export const Main: Story = {
54
54
  validators={{ onChange: ({ value }) => (!value ? "Terms are required" : undefined) }}
55
55
  />
56
56
  <Checkbox label="Subscribe to newsletter" name="newsletter" />
57
- <Button action="submit">Submit</Button>
57
+ <ActionButton kind="submit" formAction="submit" />
58
58
  </Form>
59
59
  );
60
60
  };
@@ -274,7 +274,7 @@ export const CheckboxGroupWithForm: StoryObj = {
274
274
  helperText="Select required permissions"
275
275
  required
276
276
  />
277
- <Button action="submit">Submit</Button>
277
+ <ActionButton kind="submit" formAction="submit" />
278
278
  </YStack>
279
279
  </Form>
280
280
  );
@@ -3,9 +3,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
3
3
  import { Preset, Paragraph } from "@multiplatform.one/theme";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import { YStack } from "tamagui";
6
- import { Button } from "../../Button";
7
6
  import { Form } from "../../Form";
8
7
  import { CheckboxGroup } from "./CheckboxGroup";
8
+ import { ActionButton } from "@multiplatform.one/components";
9
9
 
10
10
  const meta: Meta<typeof CheckboxGroup> = {
11
11
  title: "Forms/CheckboxGroup",
@@ -255,7 +255,7 @@ export const RequiredForm: Story = {
255
255
  ]}
256
256
  helperText="Submit empty to trigger required error"
257
257
  />
258
- <Button action="submit">Submit</Button>
258
+ <ActionButton kind="submit" formAction="submit" />
259
259
  </YStack>
260
260
  </Form>
261
261
  );
@@ -4,9 +4,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import { useState } from "react";
6
6
  import { YStack } from "tamagui";
7
- import { Button } from "../../Button";
8
7
  import { Form } from "../../Form";
9
8
  import { ColorPicker } from "./index";
9
+ import { ActionButton } from "@multiplatform.one/components";
10
10
 
11
11
  const meta: Meta<typeof ColorPicker> = {
12
12
  title: "Forms/ColorPicker",
@@ -69,7 +69,7 @@ export const Main: Story = {
69
69
  helperText="Choose background color"
70
70
  />
71
71
  <ColorPicker label="Text Color" name="textColor" helperText="Choose text color" />
72
- <Button action="submit">Submit</Button>
72
+ <ActionButton kind="submit" formAction="submit" />
73
73
  </YStack>
74
74
  </Form>
75
75
  );
@@ -4,11 +4,11 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import { useState } from "react";
6
6
  import { XStack, YStack } from "tamagui";
7
- import { Button } from "../../Button";
8
7
  import { Form } from "../../Form";
9
8
  import { Combobox, type ComboboxOption } from "./index";
10
9
  import { authorOptions } from "./authorOptions";
11
10
  import { Text } from "@multiplatform.one/theme";
11
+ import { ActionButton } from "@multiplatform.one/components";
12
12
 
13
13
  const meta: Meta<typeof Combobox> = {
14
14
  title: "Forms/Combobox",
@@ -117,7 +117,7 @@ export const Main: StoryObj<typeof Combobox> = {
117
117
  searchPlaceholder="Type to search..."
118
118
  />
119
119
 
120
- <Button action="submit">Submit</Button>
120
+ <ActionButton kind="submit" formAction="submit" />
121
121
  </YStack>
122
122
  </Form>
123
123
  );
@@ -14,6 +14,7 @@ import { MonthPicker } from "./MonthPicker";
14
14
  import { MultiDatePicker } from "./MultiDatePicker";
15
15
  import { DatePicker } from "./index";
16
16
  import { formatCalendarDate, Text } from "@multiplatform.one/theme";
17
+ import { ActionButton } from "@multiplatform.one/components";
17
18
  import { TimePicker } from "../TimePicker";
18
19
 
19
20
  const meta: Meta<typeof DatePicker> = {
@@ -86,7 +87,7 @@ export const Main: Story = {
86
87
  name={"endDate" as any}
87
88
  helperText="Select project end date"
88
89
  />
89
- <Button action="submit">Submit</Button>
90
+ <ActionButton kind="submit" formAction="submit" />
90
91
  </YStack>
91
92
  </Form>
92
93
  );
@@ -4,10 +4,10 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import { useState } from "react";
6
6
  import { YStack } from "tamagui";
7
- import { Button } from "../../Button";
8
7
  import { Form } from "../../Form";
9
8
  import { DateRangePicker } from "./DateRangePicker";
10
9
  import { Text } from "@multiplatform.one/theme";
10
+ import { ActionButton } from "@multiplatform.one/components";
11
11
 
12
12
  const meta: Meta<typeof DateRangePicker> = {
13
13
  title: "Forms/DateRangePicker",
@@ -103,7 +103,7 @@ export const FormBound: Story = {
103
103
  <FormSubscribe selector={(s: any) => [s.values.range]}>
104
104
  {([range]: any[]) => <Text>{`form-value:${JSON.stringify(range)}`}</Text>}
105
105
  </FormSubscribe>
106
- <Button action="submit">Submit</Button>
106
+ <ActionButton kind="submit" formAction="submit" />
107
107
  </YStack>
108
108
  </Form>
109
109
  );
@@ -8,6 +8,7 @@ import { Button } from "../../Button";
8
8
  import { Form } from "../../Form";
9
9
  import { DatetimePicker } from "./DatetimePicker";
10
10
  import { Text } from "@multiplatform.one/theme";
11
+ import { ActionButton } from "@multiplatform.one/components";
11
12
 
12
13
  const meta: Meta<typeof DatetimePicker> = {
13
14
  title: "Forms/DatetimePicker",
@@ -170,7 +171,7 @@ export const FormBound: Story = {
170
171
  </Text>
171
172
  )}
172
173
  </FormSubscribe>
173
- <Button action="submit">Submit</Button>
174
+ <ActionButton kind="submit" formAction="submit" />
174
175
  </YStack>
175
176
  </Form>
176
177
  );
@@ -2,10 +2,10 @@ import { action } from "@multiplatform.one/storybook";
2
2
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
3
3
  import { useForm } from "@tanstack/react-form";
4
4
  import { YStack } from "tamagui";
5
- import { Button } from "../../Button";
6
5
  import { Form } from "../../Form";
7
6
  import { MonthPicker } from "./MonthPicker";
8
7
  import { Text } from "@multiplatform.one/theme";
8
+ import { ActionButton } from "@multiplatform.one/components";
9
9
 
10
10
  const meta: Meta<typeof MonthPicker> = {
11
11
  title: "Forms/MonthPicker",
@@ -104,7 +104,7 @@ export const FormBound: Story = {
104
104
  <FormSubscribe selector={(s: any) => [s.values.period]}>
105
105
  {([period]: any[]) => <Text>{`form-value:${JSON.stringify(period)}`}</Text>}
106
106
  </FormSubscribe>
107
- <Button action="submit">Submit</Button>
107
+ <ActionButton kind="submit" formAction="submit" />
108
108
  </YStack>
109
109
  </Form>
110
110
  );
@@ -4,10 +4,10 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import { useState } from "react";
6
6
  import { YStack } from "tamagui";
7
- import { Button } from "../../Button";
8
7
  import { Form } from "../../Form";
9
8
  import { MultiDatePicker } from "./MultiDatePicker";
10
9
  import { Text } from "@multiplatform.one/theme";
10
+ import { ActionButton } from "@multiplatform.one/components";
11
11
 
12
12
  const meta: Meta<typeof MultiDatePicker> = {
13
13
  title: "Forms/MultiDatePicker",
@@ -115,7 +115,7 @@ export const FormBound: Story = {
115
115
  </Text>
116
116
  )}
117
117
  </FormSubscribe>
118
- <Button action="submit">Submit</Button>
118
+ <ActionButton kind="submit" formAction="submit" />
119
119
  </YStack>
120
120
  </Form>
121
121
  );
@@ -67,7 +67,12 @@ describe("FileUpload", () => {
67
67
  const result = renderWithProviders(
68
68
  <FileUpload existing={{ src: "/files/sprite.png" }} onExistingRemove={remove} />,
69
69
  );
70
- expect(result.container.textContent).toContain("Replace");
70
+ // LC-260: Replace and Remove are glyphs on the media plate over the image.
71
+ const actions = result.container.querySelector('[data-file-upload="preview-actions"]');
72
+ expect(
73
+ actions?.querySelector('[aria-label="Replace"]')?.getAttribute("data-mp-icon-button"),
74
+ ).toBe("media");
75
+ expect(result.container.textContent).not.toContain("Replace");
71
76
  expect(result.container.textContent).not.toContain("Choose File");
72
77
  expect(result.container.textContent).not.toContain("Drag a file");
73
78
  expect(result.container.querySelector('[data-file-upload="preview"] img')).toBeTruthy();
@@ -344,7 +349,7 @@ describe("FileUpload bento-derived dropzone (MPO-57)", () => {
344
349
  expect(zone.textContent).toContain("Drag a file into this area");
345
350
  });
346
351
 
347
- it("renders picked files as in-zone rows: name, bold size line, filled $color12 remove disc (29 painted, hitSlop 44)", async () => {
352
+ it("renders picked files as in-zone rows: name, bold size line, bare ✕ remove (29 painted, hitSlop 44)", async () => {
348
353
  const { container } = renderWithHouseThemes(
349
354
  <FileUpload label="Attachment" name="attachment" multiple />,
350
355
  );
@@ -367,14 +372,14 @@ describe("FileUpload bento-derived dropzone (MPO-57)", () => {
367
372
  expect(sizeLine).toBeTruthy();
368
373
  expect(sizeLine.className).toMatch(/_fow-700/);
369
374
 
370
- // Remove: a circular filled $color12 disc painted at nestedControl (29)
371
- // with hitSlop restoring the 44 floor (data-mp-press-slop 8 → 29+16=45).
375
+ // Remove: LC-176's bare ✕, no fill or border, painted at nestedControl
376
+ // (29) with hitSlop restoring the 44 floor (data-mp-press-slop 8 → 45).
377
+ // The filled $color12 disc it replaced read as a plate on plain content.
372
378
  const remove = flist.querySelector('[aria-label="Remove hello.txt"]') as HTMLElement;
373
379
  expect(remove).toBeTruthy();
374
380
  expect(remove.getAttribute("data-nested-px")).toBe("29");
375
381
  expect(remove.getAttribute("data-mp-press-slop")).toBe("8");
376
- expect(remove.className).toMatch(/_bg-color12/);
377
- // The inverse ✕ rides inside the disc.
382
+ expect(remove.className).not.toMatch(/_bg-color12/);
378
383
  expect(remove.querySelector("svg")).toBeTruthy();
379
384
  // The caption is dropped once files exist; the CTA stays.
380
385
  expect(zone.textContent).not.toContain("Drag a file into this area");
@@ -4,9 +4,9 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import { useEffect, useRef, useState } from "react";
6
6
  import { YStack } from "tamagui";
7
- import { Button } from "../../Button";
8
7
  import { Form } from "../../Form";
9
8
  import { FileUpload } from "./index";
9
+ import { ActionButton } from "@multiplatform.one/components";
10
10
 
11
11
  const meta: Meta<typeof FileUpload> = {
12
12
  title: "Forms/FileUpload",
@@ -80,7 +80,7 @@ export const Main: Story = {
80
80
  helperText: "Upload multiple files",
81
81
  } as any)}
82
82
  />
83
- <Button action="submit">Submit</Button>
83
+ <ActionButton kind="submit" formAction="submit" />
84
84
  </YStack>
85
85
  </Form>
86
86
  );