@multiplatform.one/forms 7.45.1 → 7.47.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 (823) hide show
  1. package/dist/cjs/AdaptivePopup/index.native.js +1 -1
  2. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  3. package/dist/cjs/Button/index.cjs +14 -3
  4. package/dist/cjs/Button/index.native.js +19 -8
  5. package/dist/cjs/Button/index.native.js.map +1 -1
  6. package/dist/cjs/Chip/index.native.js.map +1 -1
  7. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  8. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  9. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  10. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  11. package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
  12. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  13. package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  14. package/dist/cjs/ControlGroup/index.native.js +1 -1
  15. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  16. package/dist/cjs/DescriptionList/index.native.js +2 -2
  17. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  18. package/dist/cjs/ErrorSummary.cjs +1 -1
  19. package/dist/cjs/ErrorSummary.native.js +1 -1
  20. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  21. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  22. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  23. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  24. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  25. package/dist/cjs/FieldGroup.native.js.map +1 -1
  26. package/dist/cjs/FloatingPanel/PanelPortal.cjs +1 -1
  27. package/dist/cjs/FloatingPanel/index.cjs +171 -44
  28. package/dist/cjs/FloatingPanel/index.native.js +9 -2
  29. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  30. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
  31. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  32. package/dist/cjs/FloatingPanel/trailingAction.cjs +59 -0
  33. package/dist/cjs/FloatingPanel/trailingAction.native.js +64 -0
  34. package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -0
  35. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  36. package/dist/cjs/Form/index.native.js +1 -1
  37. package/dist/cjs/Form/index.native.js.map +1 -1
  38. package/dist/cjs/Form/submissionController.native.js.map +1 -1
  39. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  40. package/dist/cjs/FormGrid.cjs +1 -0
  41. package/dist/cjs/FormGrid.native.js +1 -0
  42. package/dist/cjs/FormGrid.native.js.map +1 -1
  43. package/dist/cjs/FormSection.native.js.map +1 -1
  44. package/dist/cjs/InputParts/PasswordReveal.cjs +96 -0
  45. package/dist/cjs/InputParts/PasswordReveal.native.js +104 -0
  46. package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -0
  47. package/dist/cjs/InputParts/index.cjs +95 -5
  48. package/dist/cjs/InputParts/index.native.js +99 -5
  49. package/dist/cjs/InputParts/index.native.js.map +1 -1
  50. package/dist/cjs/Label/index.native.js.map +1 -1
  51. package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
  52. package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
  53. package/dist/cjs/MediaPicker/types.native.js.map +1 -1
  54. package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
  55. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  56. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  57. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  58. package/dist/cjs/Table/index.native.js.map +1 -1
  59. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  60. package/dist/cjs/Wheel/index.native.js.map +1 -1
  61. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  62. package/dist/cjs/actionLabel.native.js.map +1 -1
  63. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  64. package/dist/cjs/fieldLayout.native.js +1 -1
  65. package/dist/cjs/fieldLayout.native.js.map +1 -1
  66. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  67. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
  68. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  69. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  70. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  71. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  72. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  73. package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
  74. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  75. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  76. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  77. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  78. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
  79. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  80. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  81. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  82. package/dist/cjs/fields/ColorPicker/index.cjs +8 -17
  83. package/dist/cjs/fields/ColorPicker/index.native.js +11 -20
  84. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  85. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  86. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  87. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  88. package/dist/cjs/fields/Combobox/index.cjs +28 -44
  89. package/dist/cjs/fields/Combobox/index.native.js +35 -50
  90. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  91. package/dist/cjs/fields/DatePicker/Calendar.cjs +3 -4
  92. package/dist/cjs/fields/DatePicker/Calendar.native.js +3 -4
  93. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  94. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  95. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  96. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +3 -3
  97. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  98. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
  99. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  100. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  101. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  102. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  103. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -2
  104. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  105. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  106. package/dist/cjs/fields/DatePicker/index.native.js +2 -2
  107. package/dist/cjs/fields/DatePicker/parts.cjs +5 -9
  108. package/dist/cjs/fields/DatePicker/parts.native.js +7 -11
  109. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  110. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  111. package/dist/cjs/fields/Duration/durationMath.cjs +1 -1
  112. package/dist/cjs/fields/Duration/durationMath.native.js +1 -1
  113. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  114. package/dist/cjs/fields/Duration/index.cjs +100 -90
  115. package/dist/cjs/fields/Duration/index.native.js +111 -101
  116. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  117. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  118. package/dist/cjs/fields/FileUpload/index.cjs +134 -24
  119. package/dist/cjs/fields/FileUpload/index.native.js +151 -36
  120. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  121. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  122. package/dist/cjs/fields/Geolocation/GeolocationMap.cjs +2 -1
  123. package/dist/cjs/fields/Geolocation/GeolocationMap.native.js +3 -2
  124. package/dist/cjs/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  125. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  126. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  127. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
  128. package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
  129. package/dist/cjs/fields/Geolocation/index.cjs +10 -8
  130. package/dist/cjs/fields/Geolocation/index.native.js +15 -13
  131. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  132. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  133. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  134. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  135. package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  136. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  137. package/dist/cjs/fields/Icon/index.cjs +6 -13
  138. package/dist/cjs/fields/Icon/index.native.js +9 -16
  139. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  140. package/dist/cjs/fields/ImageField/index.cjs +5 -5
  141. package/dist/cjs/fields/ImageField/index.native.js +7 -7
  142. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  143. package/dist/cjs/fields/Input/index.cjs +27 -21
  144. package/dist/cjs/fields/Input/index.native.js +31 -24
  145. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  146. package/dist/cjs/fields/MentionInput/index.cjs +7 -8
  147. package/dist/cjs/fields/MentionInput/index.native.js +10 -11
  148. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  149. package/dist/cjs/fields/OTPInput/index.cjs +1 -1
  150. package/dist/cjs/fields/OTPInput/index.native.js +4 -4
  151. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  152. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  153. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  154. package/dist/cjs/fields/PhoneInput/index.cjs +3 -3
  155. package/dist/cjs/fields/PhoneInput/index.native.js +6 -6
  156. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  157. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  158. package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
  159. package/dist/cjs/fields/Progress/index.native.js +1 -1
  160. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  161. package/dist/cjs/fields/RadioGroup/index.cjs +1 -0
  162. package/dist/cjs/fields/RadioGroup/index.native.js +2 -1
  163. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  164. package/dist/cjs/fields/Rating/index.native.js +1 -1
  165. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  166. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  167. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  168. package/dist/cjs/fields/SearchInput/index.cjs +4 -48
  169. package/dist/cjs/fields/SearchInput/index.native.js +6 -48
  170. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  171. package/dist/cjs/fields/Select/index.cjs +14 -12
  172. package/dist/cjs/fields/Select/index.native.js +18 -16
  173. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  174. package/dist/cjs/fields/Signature/index.cjs +1 -1
  175. package/dist/cjs/fields/Signature/index.native.js +3 -3
  176. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  177. package/dist/cjs/fields/Slider/index.cjs +1 -1
  178. package/dist/cjs/fields/Slider/index.native.js +2 -2
  179. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  180. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  181. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  182. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  183. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  184. package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
  185. package/dist/cjs/fields/Switch/index.native.js +2 -2
  186. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  187. package/dist/cjs/fields/TextArea/index.native.js +2 -2
  188. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  189. package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
  190. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  191. package/dist/cjs/fields/TimePicker/index.native.js +2 -2
  192. package/dist/cjs/fields/TimePicker/parts.cjs +5 -9
  193. package/dist/cjs/fields/TimePicker/parts.native.js +6 -10
  194. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  195. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  196. package/dist/cjs/fields/TimeRangeScrubber/index.cjs +14 -9
  197. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +16 -11
  198. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  199. package/dist/cjs/fields/ToggleGroup/index.cjs +1 -1
  200. package/dist/cjs/fields/ToggleGroup/index.native.js +2 -2
  201. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  202. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +5 -5
  203. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +5 -5
  204. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  205. package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  206. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  207. package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
  208. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  209. package/dist/cjs/formSpacing.native.js.map +1 -1
  210. package/dist/cjs/hooks/useFocusManagement.cjs +3 -2
  211. package/dist/cjs/hooks/useFocusManagement.native.js +3 -2
  212. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  213. package/dist/cjs/index.cjs +7 -0
  214. package/dist/cjs/index.native.js +51 -44
  215. package/dist/cjs/index.native.js.map +1 -1
  216. package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
  217. package/dist/cjs/keyboard/chain.native.js.map +1 -1
  218. package/dist/cjs/keyboard/index.native.js.map +1 -1
  219. package/dist/cjs/keyboard/types.native.js.map +1 -1
  220. package/dist/cjs/requiredMarking.native.js.map +1 -1
  221. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  222. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  223. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  224. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  225. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  226. package/dist/cjs/shared/floatingList.native.js +1 -1
  227. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  228. package/dist/cjs/shared/focusManagement.cjs +4 -4
  229. package/dist/cjs/shared/focusManagement.native.js +4 -4
  230. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  231. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  232. package/dist/cjs/shared/i18n.native.js.map +1 -1
  233. package/dist/cjs/shared/instantMotion.native.js.map +1 -1
  234. package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
  235. package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
  236. package/dist/cjs/shared/panelPortal.cjs +1 -1
  237. package/dist/cjs/shared/panelPortal.native.js +1 -1
  238. package/dist/cjs/shared/panelPortal.native.js.map +1 -1
  239. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
  240. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
  241. package/dist/cjs/shared/t.native.js.map +1 -1
  242. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  243. package/dist/cjs/shared/useDragScroll.cjs +2 -2
  244. package/dist/cjs/shared/useDragScroll.native.js +2 -2
  245. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  246. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  247. package/dist/cjs/shared/useSheetEscapeDismiss.cjs +5 -4
  248. package/dist/cjs/shared/useSheetEscapeDismiss.native.js +5 -3
  249. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  250. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  251. package/dist/cjs/shared/utils.native.js +1 -1
  252. package/dist/cjs/shared/utils.native.js.map +1 -1
  253. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  254. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  255. package/dist/cjs/types.native.js.map +1 -1
  256. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  257. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  258. package/dist/esm/Button/index.mjs +17 -6
  259. package/dist/esm/Button/index.mjs.map +1 -1
  260. package/dist/esm/Button/index.native.js +21 -10
  261. package/dist/esm/Button/index.native.js.map +1 -1
  262. package/dist/esm/Chip/index.native.js.map +1 -1
  263. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  264. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  265. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  266. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  267. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  268. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  269. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  270. package/dist/esm/ErrorSummary.mjs +2 -2
  271. package/dist/esm/ErrorSummary.mjs.map +1 -1
  272. package/dist/esm/ErrorSummary.native.js +2 -2
  273. package/dist/esm/ErrorSummary.native.js.map +1 -1
  274. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  275. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  276. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  277. package/dist/esm/FieldGroup.native.js.map +1 -1
  278. package/dist/esm/FloatingPanel/PanelPortal.mjs +1 -1
  279. package/dist/esm/FloatingPanel/PanelPortal.mjs.map +1 -1
  280. package/dist/esm/FloatingPanel/index.mjs +173 -46
  281. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  282. package/dist/esm/FloatingPanel/index.native.js +9 -2
  283. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  284. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
  285. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  286. package/dist/esm/FloatingPanel/trailingAction.mjs +33 -0
  287. package/dist/esm/FloatingPanel/trailingAction.mjs.map +1 -0
  288. package/dist/esm/FloatingPanel/trailingAction.native.js +35 -0
  289. package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -0
  290. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  291. package/dist/esm/Form/index.native.js.map +1 -1
  292. package/dist/esm/Form/submissionController.native.js.map +1 -1
  293. package/dist/esm/Form/validateOn.native.js.map +1 -1
  294. package/dist/esm/FormGrid.mjs +1 -0
  295. package/dist/esm/FormGrid.mjs.map +1 -1
  296. package/dist/esm/FormGrid.native.js +1 -0
  297. package/dist/esm/FormGrid.native.js.map +1 -1
  298. package/dist/esm/FormSection.native.js.map +1 -1
  299. package/dist/esm/InputParts/PasswordReveal.mjs +68 -0
  300. package/dist/esm/InputParts/PasswordReveal.mjs.map +1 -0
  301. package/dist/esm/InputParts/PasswordReveal.native.js +73 -0
  302. package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -0
  303. package/dist/esm/InputParts/index.mjs +97 -8
  304. package/dist/esm/InputParts/index.mjs.map +1 -1
  305. package/dist/esm/InputParts/index.native.js +101 -8
  306. package/dist/esm/InputParts/index.native.js.map +1 -1
  307. package/dist/esm/Label/index.native.js.map +1 -1
  308. package/dist/esm/MediaPicker/base64.native.js.map +1 -1
  309. package/dist/esm/MediaPicker/payload.native.js.map +1 -1
  310. package/dist/esm/MediaPicker/types.native.js.map +1 -1
  311. package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
  312. package/dist/esm/Skeleton/index.native.js.map +1 -1
  313. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  314. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  315. package/dist/esm/Table/index.native.js.map +1 -1
  316. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  317. package/dist/esm/Wheel/index.native.js.map +1 -1
  318. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  319. package/dist/esm/actionLabel.native.js.map +1 -1
  320. package/dist/esm/fieldDefaults.native.js.map +1 -1
  321. package/dist/esm/fieldLayout.native.js.map +1 -1
  322. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  323. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  324. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  325. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  326. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  327. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  328. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  329. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  330. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  331. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  332. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  333. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  334. package/dist/esm/fields/ColorPicker/index.mjs +8 -17
  335. package/dist/esm/fields/ColorPicker/index.mjs.map +1 -1
  336. package/dist/esm/fields/ColorPicker/index.native.js +9 -18
  337. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  338. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  339. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  340. package/dist/esm/fields/Combobox/index.mjs +29 -45
  341. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  342. package/dist/esm/fields/Combobox/index.native.js +31 -46
  343. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  344. package/dist/esm/fields/DatePicker/Calendar.mjs +4 -5
  345. package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
  346. package/dist/esm/fields/DatePicker/Calendar.native.js +4 -5
  347. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  348. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  349. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  350. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  351. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  352. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  353. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  354. package/dist/esm/fields/DatePicker/parts.mjs +5 -9
  355. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  356. package/dist/esm/fields/DatePicker/parts.native.js +5 -9
  357. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  358. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  359. package/dist/esm/fields/Duration/durationMath.mjs +1 -1
  360. package/dist/esm/fields/Duration/durationMath.mjs.map +1 -1
  361. package/dist/esm/fields/Duration/durationMath.native.js +1 -1
  362. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  363. package/dist/esm/fields/Duration/index.mjs +100 -90
  364. package/dist/esm/fields/Duration/index.mjs.map +1 -1
  365. package/dist/esm/fields/Duration/index.native.js +108 -98
  366. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  367. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  368. package/dist/esm/fields/FileUpload/index.mjs +135 -25
  369. package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
  370. package/dist/esm/fields/FileUpload/index.native.js +150 -35
  371. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  372. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  373. package/dist/esm/fields/Geolocation/GeolocationMap.mjs +2 -1
  374. package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  375. package/dist/esm/fields/Geolocation/GeolocationMap.native.js +2 -1
  376. package/dist/esm/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  377. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  378. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  379. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
  380. package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
  381. package/dist/esm/fields/Geolocation/index.mjs +13 -11
  382. package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
  383. package/dist/esm/fields/Geolocation/index.native.js +13 -11
  384. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  385. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  386. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  387. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  388. package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  389. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  390. package/dist/esm/fields/Icon/index.mjs +8 -15
  391. package/dist/esm/fields/Icon/index.mjs.map +1 -1
  392. package/dist/esm/fields/Icon/index.native.js +8 -15
  393. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  394. package/dist/esm/fields/ImageField/index.mjs +7 -7
  395. package/dist/esm/fields/ImageField/index.mjs.map +1 -1
  396. package/dist/esm/fields/ImageField/index.native.js +7 -7
  397. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  398. package/dist/esm/fields/Input/index.mjs +28 -22
  399. package/dist/esm/fields/Input/index.mjs.map +1 -1
  400. package/dist/esm/fields/Input/index.native.js +29 -22
  401. package/dist/esm/fields/Input/index.native.js.map +1 -1
  402. package/dist/esm/fields/MentionInput/index.mjs +13 -14
  403. package/dist/esm/fields/MentionInput/index.mjs.map +1 -1
  404. package/dist/esm/fields/MentionInput/index.native.js +13 -14
  405. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  406. package/dist/esm/fields/OTPInput/index.mjs +2 -2
  407. package/dist/esm/fields/OTPInput/index.mjs.map +1 -1
  408. package/dist/esm/fields/OTPInput/index.native.js +2 -2
  409. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  410. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  411. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  412. package/dist/esm/fields/PhoneInput/index.mjs +5 -5
  413. package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
  414. package/dist/esm/fields/PhoneInput/index.native.js +5 -5
  415. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  416. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  417. package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
  418. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  419. package/dist/esm/fields/RadioGroup/index.mjs +1 -0
  420. package/dist/esm/fields/RadioGroup/index.mjs.map +1 -1
  421. package/dist/esm/fields/RadioGroup/index.native.js +1 -0
  422. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  423. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  424. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  425. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  426. package/dist/esm/fields/SearchInput/index.mjs +5 -49
  427. package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
  428. package/dist/esm/fields/SearchInput/index.native.js +5 -47
  429. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  430. package/dist/esm/fields/Select/index.mjs +15 -13
  431. package/dist/esm/fields/Select/index.mjs.map +1 -1
  432. package/dist/esm/fields/Select/index.native.js +15 -13
  433. package/dist/esm/fields/Select/index.native.js.map +1 -1
  434. package/dist/esm/fields/Signature/index.mjs +2 -2
  435. package/dist/esm/fields/Signature/index.mjs.map +1 -1
  436. package/dist/esm/fields/Signature/index.native.js +2 -2
  437. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  438. package/dist/esm/fields/Slider/index.mjs +2 -2
  439. package/dist/esm/fields/Slider/index.mjs.map +1 -1
  440. package/dist/esm/fields/Slider/index.native.js +2 -2
  441. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  442. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  443. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  444. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  445. package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
  446. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  447. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  448. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  449. package/dist/esm/fields/TimePicker/parts.mjs +5 -9
  450. package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
  451. package/dist/esm/fields/TimePicker/parts.native.js +5 -9
  452. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  453. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  454. package/dist/esm/fields/TimeRangeScrubber/index.mjs +20 -15
  455. package/dist/esm/fields/TimeRangeScrubber/index.mjs.map +1 -1
  456. package/dist/esm/fields/TimeRangeScrubber/index.native.js +20 -15
  457. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  458. package/dist/esm/fields/ToggleGroup/index.mjs +3 -3
  459. package/dist/esm/fields/ToggleGroup/index.mjs.map +1 -1
  460. package/dist/esm/fields/ToggleGroup/index.native.js +3 -3
  461. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  462. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +2 -2
  463. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  464. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +2 -2
  465. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  466. package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  467. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  468. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  469. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  470. package/dist/esm/formSpacing.native.js.map +1 -1
  471. package/dist/esm/hooks/useFocusManagement.mjs +3 -2
  472. package/dist/esm/hooks/useFocusManagement.mjs.map +1 -1
  473. package/dist/esm/hooks/useFocusManagement.native.js +3 -2
  474. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  475. package/dist/esm/index.mjs +3 -1
  476. package/dist/esm/index.mjs.map +1 -1
  477. package/dist/esm/index.native.js +3 -1
  478. package/dist/esm/index.native.js.map +1 -1
  479. package/dist/esm/keyboard/chain.native.js.map +1 -1
  480. package/dist/esm/keyboard/index.native.js.map +1 -1
  481. package/dist/esm/keyboard/types.native.js.map +1 -1
  482. package/dist/esm/requiredMarking.native.js.map +1 -1
  483. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  484. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  485. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  486. package/dist/esm/shared/devWarn.native.js.map +1 -1
  487. package/dist/esm/shared/floatingList.native.js.map +1 -1
  488. package/dist/esm/shared/focusManagement.mjs +4 -4
  489. package/dist/esm/shared/focusManagement.mjs.map +1 -1
  490. package/dist/esm/shared/focusManagement.native.js +4 -4
  491. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  492. package/dist/esm/shared/groupContext.native.js.map +1 -1
  493. package/dist/esm/shared/i18n.native.js.map +1 -1
  494. package/dist/esm/shared/instantMotion.native.js.map +1 -1
  495. package/dist/esm/shared/nativeA11y.native.js.map +1 -1
  496. package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
  497. package/dist/esm/shared/panelPortal.mjs +1 -1
  498. package/dist/esm/shared/panelPortal.mjs.map +1 -1
  499. package/dist/esm/shared/panelPortal.native.js +1 -1
  500. package/dist/esm/shared/panelPortal.native.js.map +1 -1
  501. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  502. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  503. package/dist/esm/shared/t.native.js.map +1 -1
  504. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  505. package/dist/esm/shared/useDragScroll.mjs +2 -2
  506. package/dist/esm/shared/useDragScroll.mjs.map +1 -1
  507. package/dist/esm/shared/useDragScroll.native.js +2 -2
  508. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  509. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  510. package/dist/esm/shared/useSheetEscapeDismiss.mjs +5 -4
  511. package/dist/esm/shared/useSheetEscapeDismiss.mjs.map +1 -1
  512. package/dist/esm/shared/useSheetEscapeDismiss.native.js +5 -3
  513. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  514. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  515. package/dist/esm/shared/utils.native.js.map +1 -1
  516. package/dist/esm/shared/zIndex.native.js.map +1 -1
  517. package/dist/esm/themedPrimitives.native.js.map +1 -1
  518. package/dist/esm/types.native.js.map +1 -1
  519. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  520. package/dist/jsx/Button/index.mjs +17 -6
  521. package/dist/jsx/Button/index.mjs.map +1 -1
  522. package/dist/jsx/Button/index.native.js +18 -7
  523. package/dist/jsx/Button/index.native.js.map +1 -1
  524. package/dist/jsx/ErrorSummary.mjs +2 -2
  525. package/dist/jsx/ErrorSummary.mjs.map +1 -1
  526. package/dist/jsx/ErrorSummary.native.js +1 -1
  527. package/dist/jsx/ErrorSummary.native.js.map +1 -1
  528. package/dist/jsx/FloatingPanel/PanelPortal.mjs +1 -1
  529. package/dist/jsx/FloatingPanel/PanelPortal.mjs.map +1 -1
  530. package/dist/jsx/FloatingPanel/index.mjs +173 -46
  531. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  532. package/dist/jsx/FloatingPanel/index.native.js +9 -2
  533. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  534. package/dist/jsx/FloatingPanel/trailingAction.mjs +33 -0
  535. package/dist/jsx/FloatingPanel/trailingAction.mjs.map +1 -0
  536. package/dist/jsx/FloatingPanel/trailingAction.native.js +64 -0
  537. package/dist/jsx/FloatingPanel/trailingAction.native.js.map +1 -0
  538. package/dist/jsx/FormGrid.mjs +1 -0
  539. package/dist/jsx/FormGrid.mjs.map +1 -1
  540. package/dist/jsx/FormGrid.native.js +1 -0
  541. package/dist/jsx/FormGrid.native.js.map +1 -1
  542. package/dist/jsx/InputParts/PasswordReveal.mjs +68 -0
  543. package/dist/jsx/InputParts/PasswordReveal.mjs.map +1 -0
  544. package/dist/jsx/InputParts/PasswordReveal.native.js +104 -0
  545. package/dist/jsx/InputParts/PasswordReveal.native.js.map +1 -0
  546. package/dist/jsx/InputParts/index.mjs +97 -8
  547. package/dist/jsx/InputParts/index.mjs.map +1 -1
  548. package/dist/jsx/InputParts/index.native.js +99 -5
  549. package/dist/jsx/InputParts/index.native.js.map +1 -1
  550. package/dist/jsx/fields/ColorPicker/index.mjs +8 -17
  551. package/dist/jsx/fields/ColorPicker/index.mjs.map +1 -1
  552. package/dist/jsx/fields/ColorPicker/index.native.js +9 -18
  553. package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
  554. package/dist/jsx/fields/Combobox/index.mjs +29 -45
  555. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  556. package/dist/jsx/fields/Combobox/index.native.js +30 -45
  557. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  558. package/dist/jsx/fields/DatePicker/Calendar.mjs +4 -5
  559. package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
  560. package/dist/jsx/fields/DatePicker/Calendar.native.js +3 -4
  561. package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
  562. package/dist/jsx/fields/DatePicker/parts.mjs +5 -9
  563. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  564. package/dist/jsx/fields/DatePicker/parts.native.js +5 -9
  565. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  566. package/dist/jsx/fields/Duration/durationMath.mjs +1 -1
  567. package/dist/jsx/fields/Duration/durationMath.mjs.map +1 -1
  568. package/dist/jsx/fields/Duration/durationMath.native.js +1 -1
  569. package/dist/jsx/fields/Duration/durationMath.native.js.map +1 -1
  570. package/dist/jsx/fields/Duration/index.mjs +100 -90
  571. package/dist/jsx/fields/Duration/index.mjs.map +1 -1
  572. package/dist/jsx/fields/Duration/index.native.js +108 -98
  573. package/dist/jsx/fields/Duration/index.native.js.map +1 -1
  574. package/dist/jsx/fields/FileUpload/index.mjs +135 -25
  575. package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
  576. package/dist/jsx/fields/FileUpload/index.native.js +149 -34
  577. package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
  578. package/dist/jsx/fields/Geolocation/GeolocationMap.mjs +2 -1
  579. package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  580. package/dist/jsx/fields/Geolocation/GeolocationMap.native.js +3 -2
  581. package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  582. package/dist/jsx/fields/Geolocation/index.mjs +13 -11
  583. package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
  584. package/dist/jsx/fields/Geolocation/index.native.js +10 -8
  585. package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
  586. package/dist/jsx/fields/Icon/index.mjs +8 -15
  587. package/dist/jsx/fields/Icon/index.mjs.map +1 -1
  588. package/dist/jsx/fields/Icon/index.native.js +6 -13
  589. package/dist/jsx/fields/Icon/index.native.js.map +1 -1
  590. package/dist/jsx/fields/ImageField/index.mjs +7 -7
  591. package/dist/jsx/fields/ImageField/index.mjs.map +1 -1
  592. package/dist/jsx/fields/ImageField/index.native.js +5 -5
  593. package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
  594. package/dist/jsx/fields/Input/index.mjs +28 -22
  595. package/dist/jsx/fields/Input/index.mjs.map +1 -1
  596. package/dist/jsx/fields/Input/index.native.js +28 -21
  597. package/dist/jsx/fields/Input/index.native.js.map +1 -1
  598. package/dist/jsx/fields/MentionInput/index.mjs +13 -14
  599. package/dist/jsx/fields/MentionInput/index.mjs.map +1 -1
  600. package/dist/jsx/fields/MentionInput/index.native.js +7 -8
  601. package/dist/jsx/fields/MentionInput/index.native.js.map +1 -1
  602. package/dist/jsx/fields/OTPInput/index.mjs +2 -2
  603. package/dist/jsx/fields/OTPInput/index.mjs.map +1 -1
  604. package/dist/jsx/fields/OTPInput/index.native.js +1 -1
  605. package/dist/jsx/fields/OTPInput/index.native.js.map +1 -1
  606. package/dist/jsx/fields/PhoneInput/index.mjs +5 -5
  607. package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
  608. package/dist/jsx/fields/PhoneInput/index.native.js +3 -3
  609. package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
  610. package/dist/jsx/fields/RadioGroup/index.mjs +1 -0
  611. package/dist/jsx/fields/RadioGroup/index.mjs.map +1 -1
  612. package/dist/jsx/fields/RadioGroup/index.native.js +1 -0
  613. package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
  614. package/dist/jsx/fields/SearchInput/index.mjs +5 -49
  615. package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
  616. package/dist/jsx/fields/SearchInput/index.native.js +4 -46
  617. package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
  618. package/dist/jsx/fields/Select/index.mjs +15 -13
  619. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  620. package/dist/jsx/fields/Select/index.native.js +14 -12
  621. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  622. package/dist/jsx/fields/Signature/index.mjs +2 -2
  623. package/dist/jsx/fields/Signature/index.mjs.map +1 -1
  624. package/dist/jsx/fields/Signature/index.native.js +1 -1
  625. package/dist/jsx/fields/Signature/index.native.js.map +1 -1
  626. package/dist/jsx/fields/Slider/index.mjs +2 -2
  627. package/dist/jsx/fields/Slider/index.mjs.map +1 -1
  628. package/dist/jsx/fields/Slider/index.native.js +1 -1
  629. package/dist/jsx/fields/Slider/index.native.js.map +1 -1
  630. package/dist/jsx/fields/TimePicker/parts.mjs +5 -9
  631. package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
  632. package/dist/jsx/fields/TimePicker/parts.native.js +5 -9
  633. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  634. package/dist/jsx/fields/TimeRangeScrubber/index.mjs +20 -15
  635. package/dist/jsx/fields/TimeRangeScrubber/index.mjs.map +1 -1
  636. package/dist/jsx/fields/TimeRangeScrubber/index.native.js +14 -9
  637. package/dist/jsx/fields/TimeRangeScrubber/index.native.js.map +1 -1
  638. package/dist/jsx/fields/ToggleGroup/index.mjs +3 -3
  639. package/dist/jsx/fields/ToggleGroup/index.mjs.map +1 -1
  640. package/dist/jsx/fields/ToggleGroup/index.native.js +1 -1
  641. package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
  642. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +2 -2
  643. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  644. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +5 -5
  645. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  646. package/dist/jsx/hooks/useFocusManagement.mjs +3 -2
  647. package/dist/jsx/hooks/useFocusManagement.mjs.map +1 -1
  648. package/dist/jsx/hooks/useFocusManagement.native.js +3 -2
  649. package/dist/jsx/hooks/useFocusManagement.native.js.map +1 -1
  650. package/dist/jsx/index.js +3 -1
  651. package/dist/jsx/index.js.map +1 -1
  652. package/dist/jsx/index.mjs +3 -1
  653. package/dist/jsx/index.mjs.map +1 -1
  654. package/dist/jsx/index.native.js +7 -0
  655. package/dist/jsx/index.native.js.map +1 -1
  656. package/dist/jsx/shared/focusManagement.mjs +4 -4
  657. package/dist/jsx/shared/focusManagement.mjs.map +1 -1
  658. package/dist/jsx/shared/focusManagement.native.js +4 -4
  659. package/dist/jsx/shared/focusManagement.native.js.map +1 -1
  660. package/dist/jsx/shared/panelPortal.mjs +1 -1
  661. package/dist/jsx/shared/panelPortal.mjs.map +1 -1
  662. package/dist/jsx/shared/panelPortal.native.js +1 -1
  663. package/dist/jsx/shared/panelPortal.native.js.map +1 -1
  664. package/dist/jsx/shared/useDragScroll.mjs +2 -2
  665. package/dist/jsx/shared/useDragScroll.mjs.map +1 -1
  666. package/dist/jsx/shared/useDragScroll.native.js +2 -2
  667. package/dist/jsx/shared/useDragScroll.native.js.map +1 -1
  668. package/dist/jsx/shared/useSheetEscapeDismiss.mjs +5 -4
  669. package/dist/jsx/shared/useSheetEscapeDismiss.mjs.map +1 -1
  670. package/dist/jsx/shared/useSheetEscapeDismiss.native.js +5 -3
  671. package/dist/jsx/shared/useSheetEscapeDismiss.native.js.map +1 -1
  672. package/package.json +8 -8
  673. package/src/AdaptivePopup/AdaptivePopup.stories.tsx +2 -1
  674. package/src/Button/Button.borderLadder.spec.tsx +32 -7
  675. package/src/Button/Button.edge.spec.tsx +68 -0
  676. package/src/Button/Button.stories.tsx +2 -1
  677. package/src/Button/index.tsx +37 -11
  678. package/src/Chip/Chip.stories.tsx +2 -1
  679. package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +2 -1
  680. package/src/ContextualSaveBar/UnsavedChangesDialog.stories.tsx +2 -1
  681. package/src/ControlGroup/ControlGroup.stories.tsx +2 -1
  682. package/src/DescriptionList/DescriptionList.stories.tsx +2 -1
  683. package/src/ErrorSummary.stories.tsx +2 -1
  684. package/src/ErrorSummary.tsx +2 -2
  685. package/src/FieldDisplay/FieldDisplay.stories.tsx +2 -1
  686. package/src/FieldLayout.stories.tsx +2 -2
  687. package/src/FloatingPanel/FloatingPanel.coverTrigger.spec.tsx +184 -0
  688. package/src/FloatingPanel/FloatingPanel.spec.tsx +3 -5
  689. package/src/FloatingPanel/FloatingPanel.stories.tsx +28 -2
  690. package/src/FloatingPanel/PanelPortal.tsx +1 -0
  691. package/src/FloatingPanel/index.native.tsx +4 -2
  692. package/src/FloatingPanel/index.tsx +267 -61
  693. package/src/FloatingPanel/trailingAction.tsx +37 -0
  694. package/src/FloatingPanel/useFloatingPanel.spec.tsx +4 -2
  695. package/src/Form/Form.stories.tsx +2 -1
  696. package/src/FormGrid.stories.tsx +2 -1
  697. package/src/FormGrid.tsx +1 -0
  698. package/src/FormsIntegration.stories.tsx +4 -18
  699. package/src/InputParts/InputParts.stories.tsx +11 -11
  700. package/src/InputParts/PasswordReveal.tsx +94 -0
  701. package/src/InputParts/index.tsx +144 -2
  702. package/src/InputParts/inputPartsStories.spec.tsx +3 -1
  703. package/src/Skeleton/Skeleton.stories.tsx +2 -2
  704. package/src/Spinner/Spinner.stories.tsx +2 -2
  705. package/src/Wheel/Wheel.stories.tsx +2 -2
  706. package/src/fieldTrailingAction.spec.tsx +188 -0
  707. package/src/fields/Barcode/Barcode.stories.tsx +2 -1
  708. package/src/fields/Barcode/BarcodePreview.stories.tsx +2 -1
  709. package/src/fields/Checkbox/Checkbox.stories.tsx +3 -1
  710. package/src/fields/Checkbox/CheckboxGroup.stories.tsx +2 -2
  711. package/src/fields/Checkbox/Checkboxes.stories.tsx +2 -1
  712. package/src/fields/ColorPicker/PresetSwatches.stories.tsx +2 -1
  713. package/src/fields/ColorPicker/index.tsx +6 -12
  714. package/src/fields/Combobox/Combobox.stories.tsx +2 -1
  715. package/src/fields/Combobox/index.tsx +39 -41
  716. package/src/fields/DatePicker/Calendar.stories.tsx +2 -1
  717. package/src/fields/DatePicker/Calendar.tsx +4 -5
  718. package/src/fields/DatePicker/DatePicker.spec.tsx +2 -2
  719. package/src/fields/DatePicker/DatePicker.stories.tsx +2 -1
  720. package/src/fields/DatePicker/DateRangePicker.stories.tsx +2 -1
  721. package/src/fields/DatePicker/DatetimePicker.stories.tsx +2 -1
  722. package/src/fields/DatePicker/MonthPicker.stories.tsx +2 -1
  723. package/src/fields/DatePicker/MultiDatePicker.spec.tsx +1 -1
  724. package/src/fields/DatePicker/MultiDatePicker.stories.tsx +2 -1
  725. package/src/fields/DatePicker/parts.tsx +6 -10
  726. package/src/fields/Duration/Duration.spec.tsx +25 -1
  727. package/src/fields/Duration/Duration.stories.tsx +6 -1
  728. package/src/fields/Duration/durationMath.spec.ts +2 -2
  729. package/src/fields/Duration/durationMath.ts +1 -1
  730. package/src/fields/Duration/index.tsx +91 -70
  731. package/src/fields/FileUpload/FileUpload.spec.tsx +86 -3
  732. package/src/fields/FileUpload/FileUpload.stories.tsx +15 -0
  733. package/src/fields/FileUpload/index.tsx +170 -50
  734. package/src/fields/Geolocation/Geolocation.stories.tsx +2 -1
  735. package/src/fields/Geolocation/GeolocationMap.native.tsx +2 -1
  736. package/src/fields/Geolocation/GeolocationMap.tsx +2 -1
  737. package/src/fields/Geolocation/index.tsx +39 -16
  738. package/src/fields/Icon/index.tsx +9 -15
  739. package/src/fields/ImageField/index.tsx +9 -8
  740. package/src/fields/Input/Input.stories.tsx +39 -1
  741. package/src/fields/Input/index.tsx +45 -25
  742. package/src/fields/MentionInput/index.tsx +17 -18
  743. package/src/fields/OTPInput/OtpInput.stories.tsx +2 -1
  744. package/src/fields/OTPInput/index.tsx +2 -2
  745. package/src/fields/PhoneInput/PhoneInput.stories.tsx +2 -1
  746. package/src/fields/PhoneInput/index.tsx +10 -6
  747. package/src/fields/Progress/Progress.stories.tsx +2 -1
  748. package/src/fields/RadioGroup/RadioGroup.stories.tsx +3 -2
  749. package/src/fields/RadioGroup/index.tsx +1 -0
  750. package/src/fields/Rating/Rating.stories.tsx +2 -1
  751. package/src/fields/SearchInput/SearchInput.stories.tsx +2 -1
  752. package/src/fields/SearchInput/index.tsx +8 -45
  753. package/src/fields/Select/Select.stories.tsx +2 -2
  754. package/src/fields/Select/index.tsx +18 -12
  755. package/src/fields/Signature/Signature.stories.tsx +2 -1
  756. package/src/fields/Signature/index.tsx +6 -1
  757. package/src/fields/Slider/Slider.stories.tsx +2 -1
  758. package/src/fields/Slider/index.tsx +6 -2
  759. package/src/fields/Stepper/Stepper.stories.tsx +2 -1
  760. package/src/fields/Switch/Switch.stories.tsx +3 -1
  761. package/src/fields/TextArea/TextArea.stories.tsx +2 -1
  762. package/src/fields/TimePicker/TimePicker.stories.tsx +2 -1
  763. package/src/fields/TimePicker/parts.tsx +6 -10
  764. package/src/fields/TimeRangeScrubber/index.tsx +20 -18
  765. package/src/fields/ToggleGroup/ToggleGroup.stories.tsx +2 -8
  766. package/src/fields/ToggleGroup/index.tsx +10 -4
  767. package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +2 -2
  768. package/src/fields/pickerActivation.spec.tsx +7 -3
  769. package/src/hooks/useFocusManagement.ts +3 -2
  770. package/src/index.ts +9 -0
  771. package/src/shared/focusManagement.spec.tsx +11 -1
  772. package/src/shared/focusManagement.ts +17 -8
  773. package/src/shared/interactionHooks.spec.tsx +13 -0
  774. package/src/shared/panelPortal.ts +2 -1
  775. package/src/shared/useDragScroll.ts +2 -2
  776. package/src/shared/useSheetEscapeDismiss.ts +9 -4
  777. package/types/Button/index.d.ts +9 -1
  778. package/types/Button/index.d.ts.map +1 -1
  779. package/types/FloatingPanel/PanelPortal.d.ts.map +1 -1
  780. package/types/FloatingPanel/index.d.ts +9 -1
  781. package/types/FloatingPanel/index.d.ts.map +1 -1
  782. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  783. package/types/FloatingPanel/trailingAction.d.ts +16 -0
  784. package/types/FloatingPanel/trailingAction.d.ts.map +1 -0
  785. package/types/InputParts/PasswordReveal.d.ts +28 -0
  786. package/types/InputParts/PasswordReveal.d.ts.map +1 -0
  787. package/types/InputParts/index.d.ts +34 -2
  788. package/types/InputParts/index.d.ts.map +1 -1
  789. package/types/fields/Checkbox/index.d.ts +4 -4
  790. package/types/fields/ColorPicker/index.d.ts.map +1 -1
  791. package/types/fields/Combobox/index.d.ts.map +1 -1
  792. package/types/fields/DatePicker/Calendar.d.ts.map +1 -1
  793. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  794. package/types/fields/Duration/index.d.ts.map +1 -1
  795. package/types/fields/FileUpload/index.d.ts +1 -0
  796. package/types/fields/FileUpload/index.d.ts.map +1 -1
  797. package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
  798. package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
  799. package/types/fields/Geolocation/index.d.ts.map +1 -1
  800. package/types/fields/Icon/index.d.ts.map +1 -1
  801. package/types/fields/ImageField/index.d.ts.map +1 -1
  802. package/types/fields/Input/index.d.ts +9 -3
  803. package/types/fields/Input/index.d.ts.map +1 -1
  804. package/types/fields/MentionInput/index.d.ts.map +1 -1
  805. package/types/fields/PhoneInput/index.d.ts.map +1 -1
  806. package/types/fields/RadioGroup/index.d.ts +2 -2
  807. package/types/fields/RadioGroup/index.d.ts.map +1 -1
  808. package/types/fields/SearchInput/index.d.ts.map +1 -1
  809. package/types/fields/Select/index.d.ts.map +1 -1
  810. package/types/fields/Signature/index.d.ts.map +1 -1
  811. package/types/fields/Slider/index.d.ts.map +1 -1
  812. package/types/fields/TimePicker/parts.d.ts.map +1 -1
  813. package/types/fields/TimeRangeScrubber/index.d.ts.map +1 -1
  814. package/types/fields/ToggleGroup/index.d.ts +1 -1
  815. package/types/fields/ToggleGroup/index.d.ts.map +1 -1
  816. package/types/hooks/useFocusManagement.d.ts.map +1 -1
  817. package/types/index.d.ts +4 -0
  818. package/types/index.d.ts.map +1 -1
  819. package/types/shared/focusManagement.d.ts +10 -5
  820. package/types/shared/focusManagement.d.ts.map +1 -1
  821. package/types/shared/panelPortal.d.ts.map +1 -1
  822. package/types/shared/useSheetEscapeDismiss.d.ts +1 -1
  823. package/types/shared/useSheetEscapeDismiss.d.ts.map +1 -1
@@ -102,6 +102,7 @@ export function PanelPortal({ anchor, children }: PanelPortalProps) {
102
102
  const guard = event.currentTarget;
103
103
  const from = event.relatedTarget;
104
104
  const forward =
105
+ typeof Node === "undefined" ||
105
106
  !(from instanceof Node) ||
106
107
  Boolean(guard.compareDocumentPosition(from) & Node.DOCUMENT_POSITION_PRECEDING);
107
108
  const inside = tabbablesIn(portalRef.current);
@@ -88,6 +88,7 @@ import { useKeyboardInset } from "../shared/useKeyboardInset";
88
88
  import type { FloatingPanelProps } from "./index";
89
89
  import { placeAtPoint, type PanelBounds, type PanelPoint } from "./pointAnchor";
90
90
  import { panelViewportPadding } from "./useFloatingPanel";
91
+ import { TrailingActionOverlay, TriggerWithTrailingAction } from "./trailingAction";
91
92
 
92
93
  // Re-export the hook + constants so Select / Combobox / external consumers
93
94
  // resolve identically on native (their floating cores are unused on device
@@ -472,6 +473,7 @@ export function FloatingPanel({
472
473
  style={{
473
474
  flexDirection: "row",
474
475
  alignItems: "center",
476
+ position: "relative",
475
477
  width: triggerSizing === "content" ? undefined : "100%",
476
478
  }}
477
479
  >
@@ -503,10 +505,10 @@ export function FloatingPanel({
503
505
  collapsable={false}
504
506
  style={{ width: triggerSizing === "content" ? undefined : "100%" }}
505
507
  >
506
- {trigger}
508
+ <TriggerWithTrailingAction trigger={trigger} triggerEnd={triggerEnd} />
507
509
  </RNView>
508
510
  </Pressable>
509
- {triggerEnd}
511
+ <TrailingActionOverlay>{triggerEnd}</TrailingActionOverlay>
510
512
  </RNView>
511
513
  <Modal
512
514
  visible={open}
@@ -1,6 +1,8 @@
1
1
  import { transitionProps } from "@multiplatform.one/theme";
2
2
  import type { ReactNode, RefObject, UIEvent } from "react";
3
3
  import {
4
+ cloneElement,
5
+ isValidElement,
4
6
  useCallback,
5
7
  useEffect,
6
8
  useLayoutEffect,
@@ -16,10 +18,12 @@ import {
16
18
  useResolvedKnobs,
17
19
  wasKeyboardFocus,
18
20
  ensureKeyboardModalityTracking,
21
+ motionDurationMs,
19
22
  } from "@multiplatform.one/theme";
20
23
  import { isWeb, Sheet, View, YStack } from "tamagui";
21
24
  import { useClick, useDismiss, useInteractions } from "@floating-ui/react";
22
25
  import { ScrollArrow } from "../shared/floatingList";
26
+ import { TrailingActionOverlay, TriggerWithTrailingAction } from "./trailingAction";
23
27
  import { useReturnFocusOnClose, useSheetModalFocus } from "../shared/focusManagement";
24
28
  import { useSheetEscapeDismiss } from "../shared/useSheetEscapeDismiss";
25
29
  import { useFloatingPanel, panelViewportPadding } from "./useFloatingPanel";
@@ -66,6 +70,9 @@ export interface FloatingPanelProps {
66
70
  /** Suppress delayed trigger focus when a consumer handles close focus itself. Web only. */
67
71
  skipReturnFocusRef?: RefObject<boolean>;
68
72
  trigger: ReactNode;
73
+ anchorMode?: "cover-trigger" | "attach";
74
+ triggerRow?: ReactNode;
75
+ anchorRect?: { x: number; y: number; width: number; height: number };
69
76
  triggerEcho?: boolean;
70
77
  /**
71
78
  * Optional control rendered beside the trigger but OUTSIDE the native press
@@ -168,7 +175,7 @@ export interface FloatingPanelProps {
168
175
  * COVER-TRIGGER (LC-105): the panel's top edge sits on the trigger's TOP
169
176
  * edge instead of attaching below it, so the trigger becomes the panel's
170
177
  * first row by default. Set triggerEcho=false for a custom first row. The panel scales from
171
- * the trigger's top start corner. Dropping up, the bottom edges coincide.
178
+ * the trigger's top start corner. Viewport collisions use the bottom sheet.
172
179
  * Enabled by default. Web float only; the native and narrow-web sheet is unchanged.
173
180
  */
174
181
  cover?: boolean;
@@ -200,8 +207,15 @@ function useKeyboardFocusIntoPanel(
200
207
  if (!frame) return;
201
208
  if (!wasKeyboardFocus() && !keyboardOpenRef?.current) return;
202
209
  const active = document.activeElement;
203
- if (active instanceof HTMLElement && frame.contains(active) && active !== frame) return;
204
- // The trigger echo row is presentation only (inert): skip its controls.
210
+ if (
211
+ typeof HTMLElement !== "undefined" &&
212
+ active instanceof HTMLElement &&
213
+ frame.contains(active) &&
214
+ active !== frame
215
+ ) {
216
+ return;
217
+ }
218
+ // Initial keyboard focus belongs to an action, not the repeated close row.
205
219
  const first = Array.from(frame.querySelectorAll<HTMLElement>(PANEL_FOCUSABLE)).find(
206
220
  (el) => !el.closest("[data-fp-trigger-row]"),
207
221
  );
@@ -254,12 +268,12 @@ function fixedContainingBlockOrigin(element: HTMLElement): { top: number; left:
254
268
  return { top: 0, left: 0 };
255
269
  }
256
270
 
257
- function isRtl(): boolean {
258
- return (
259
- isWeb &&
260
- typeof document !== "undefined" &&
261
- document.documentElement.getAttribute("dir") === "rtl"
262
- );
271
+ function isRtl(element?: HTMLElement | null): boolean {
272
+ if (!isWeb || typeof document === "undefined") return false;
273
+ const direction = element ? getComputedStyle(element).direction : "";
274
+ return direction
275
+ ? direction === "rtl"
276
+ : (element?.closest("[dir]") ?? document.documentElement).getAttribute("dir") === "rtl";
263
277
  }
264
278
 
265
279
  function panelTransformOrigin(placement: string): string {
@@ -297,41 +311,94 @@ const ECHO_STRIPPED_ATTRIBUTES = [
297
311
  function TriggerEchoRow({
298
312
  sourceRef,
299
313
  onPress,
314
+ children,
315
+ anchorRect,
316
+ source,
300
317
  }: {
301
318
  sourceRef: RefObject<HTMLElement | null>;
302
319
  onPress: () => void;
320
+ children?: ReactNode;
321
+ anchorRect?: FloatingPanelProps["anchorRect"];
322
+ source: ReactNode;
303
323
  }) {
304
324
  const rowRef = useRef<HTMLElement | null>(null);
325
+ const visualRef = useRef<HTMLElement | null>(null);
305
326
  useLayoutEffect(() => {
306
327
  const row = rowRef.current;
307
328
  const source = sourceRef.current;
308
329
  if (!row || !source || typeof source.cloneNode !== "function") return;
309
- const snapshot = source.cloneNode(true) as HTMLElement;
310
- const sourceFields = source.querySelectorAll<HTMLInputElement>("input, textarea");
311
- const snapshotFields = snapshot.querySelectorAll<HTMLInputElement>("input, textarea");
312
- sourceFields.forEach((field, index) => {
313
- const copy = snapshotFields[index];
314
- if (copy) copy.value = field.value;
315
- });
316
- for (const node of [snapshot, ...Array.from(snapshot.querySelectorAll<HTMLElement>("*"))]) {
317
- for (const name of ECHO_STRIPPED_ATTRIBUTES) node.removeAttribute(name);
318
- if (node.hasAttribute("tabindex") || node.matches("input, textarea, button, a, select")) {
319
- node.setAttribute("tabindex", "-1");
330
+ const sync = () => {
331
+ const control = source.matches(PANEL_FOCUSABLE)
332
+ ? source
333
+ : source.querySelector<HTMLElement>(PANEL_FOCUSABLE);
334
+ const labelledBy = control?.getAttribute("aria-labelledby");
335
+ const label =
336
+ control?.getAttribute("aria-label") ||
337
+ labelledBy
338
+ ?.split(/\s+/)
339
+ .map((id) => document.getElementById(id)?.textContent || "")
340
+ .join(" ") ||
341
+ control?.textContent ||
342
+ source.textContent ||
343
+ "";
344
+ row.setAttribute("aria-label", label);
345
+ const rect = anchorRect ?? source.getBoundingClientRect();
346
+ row.style.width = `${rect.width}px`;
347
+ row.style.height = `${rect.height}px`;
348
+ const rtl = isRtl(source);
349
+ row.style.alignSelf = "flex-start";
350
+ const frameStyle = row.parentElement ? getComputedStyle(row.parentElement) : null;
351
+ row.style.marginTop = `${-(parseFloat(frameStyle?.borderTopWidth || "0") || 0)}px`;
352
+ row.style.position = "sticky";
353
+ row.style.top = row.style.marginTop;
354
+ row.style.zIndex = "1";
355
+ row.style.marginLeft = rtl
356
+ ? ""
357
+ : `${-(parseFloat(frameStyle?.borderLeftWidth || "0") || 0)}px`;
358
+ row.style.marginRight = rtl
359
+ ? `${-(parseFloat(frameStyle?.borderRightWidth || "0") || 0)}px`
360
+ : "";
361
+ const snapshot =
362
+ children == null ? (source.cloneNode(true) as HTMLElement) : visualRef.current;
363
+ if (!snapshot) return;
364
+ const sourceFields = source.querySelectorAll<HTMLInputElement>("input, textarea");
365
+ const snapshotFields = snapshot.querySelectorAll<HTMLInputElement>("input, textarea");
366
+ sourceFields.forEach((field, index) => {
367
+ const copy = snapshotFields[index];
368
+ if (copy) copy.value = field.value;
369
+ });
370
+ for (const node of [snapshot, ...Array.from(snapshot.querySelectorAll<HTMLElement>("*"))]) {
371
+ for (const name of ECHO_STRIPPED_ATTRIBUTES) node.removeAttribute(name);
372
+ if (node.hasAttribute("tabindex") || node.matches("input, textarea, button, a, select")) {
373
+ node.setAttribute("tabindex", "-1");
374
+ }
320
375
  }
321
- }
322
- snapshot.setAttribute("inert", "");
323
- row.replaceChildren(snapshot);
324
- });
376
+ snapshot.setAttribute("inert", "");
377
+ snapshot.setAttribute("aria-hidden", "true");
378
+ if (children == null) visualRef.current?.replaceChildren(snapshot);
379
+ };
380
+ sync();
381
+ if (typeof ResizeObserver === "undefined") return;
382
+ const observer = new ResizeObserver(sync);
383
+ observer.observe(source);
384
+ return () => observer.disconnect();
385
+ }, [sourceRef, source, children, anchorRect]);
325
386
  return (
326
387
  <View
327
388
  ref={rowRef as any}
328
389
  data-fp-trigger-row=""
329
- aria-hidden
390
+ role="button"
391
+ aria-expanded={true}
392
+ tabIndex={-1}
330
393
  cursor="pointer"
331
394
  onPress={onPress}
332
395
  flexShrink={0}
333
396
  pointerEvents="auto"
334
- />
397
+ >
398
+ <View ref={visualRef as any} pointerEvents="none" aria-hidden>
399
+ {isValidElement(children) ? cloneElement(children, { ref: null } as any) : children}
400
+ </View>
401
+ </View>
335
402
  );
336
403
  }
337
404
 
@@ -373,7 +440,11 @@ export function FloatingPanel(props: FloatingPanelProps) {
373
440
  const shouldUseSheet = props.sheet ?? (!isWeb || !viewportGtSm);
374
441
  // The panel floats over the page: its content never sits on a painted
375
442
  // ancestor, so a Card inside it paints as top-level.
376
- const panelProps = { ...props, children: <Surface painted={false}>{props.children}</Surface> };
443
+ const panelProps = {
444
+ ...props,
445
+ cover: props.anchorMode ? props.anchorMode === "cover-trigger" : props.cover,
446
+ children: <Surface painted={false}>{props.children}</Surface>,
447
+ };
377
448
 
378
449
  if (shouldUseSheet) return <FloatingPanelSheet {...panelProps} />;
379
450
  return <FloatingPanelWeb {...panelProps} />;
@@ -416,7 +487,8 @@ function FloatingPanelSheet({
416
487
  header,
417
488
  scrollViewProps,
418
489
  openOn = "press",
419
- }: FloatingPanelProps) {
490
+ escapeTarget = "window",
491
+ }: FloatingPanelProps & { escapeTarget?: "window" | "document" }) {
420
492
  const { knobProps } = useResolvedKnobs({ painted: false });
421
493
  // LC-24 / A-ENTEREXIT: honor animation=none (undefined) — do not hardcode "medium".
422
494
  const slideMotion = {
@@ -438,7 +510,7 @@ function FloatingPanelSheet({
438
510
  };
439
511
  // Tamagui Sheet has no key handling (unlike the web floating mode, which
440
512
  // dismisses on Escape) — wire the dismissal intent here too.
441
- useSheetEscapeDismiss(open, () => handleOpenChange(false));
513
+ useSheetEscapeDismiss(open, () => handleOpenChange(false), escapeTarget);
442
514
  // DG-A11Y-04 / Axiom 7: Sheet has no focus scope — move focus into the
443
515
  // frame on open, trap Tab while open, return focus to the trigger on close.
444
516
  const sheetFrameRef = useRef<HTMLElement | null>(null);
@@ -484,23 +556,26 @@ function FloatingPanelSheet({
484
556
 
485
557
  return (
486
558
  <>
487
- <View
488
- flexDirection="row"
489
- alignItems="center"
490
- width={triggerSizing === "content" ? "auto" : "100%"}
491
- >
559
+ {trigger != null && (
492
560
  <View
493
- flex={triggerSizing === "content" ? undefined : 1}
494
- minWidth={0}
495
- {...(isContextMenu ? undefined : { onPress: openFromTrigger })}
496
- cursor={disabled ? "not-allowed" : "pointer"}
497
- opacity={disabled ? 0.5 : 1}
498
- {...triggerActivation}
561
+ flexDirection="row"
562
+ alignItems="center"
563
+ position="relative"
564
+ width={triggerSizing === "content" ? "auto" : "100%"}
499
565
  >
500
- {trigger}
566
+ <View
567
+ flex={triggerSizing === "content" ? undefined : 1}
568
+ minWidth={0}
569
+ {...(isContextMenu ? undefined : { onPress: openFromTrigger })}
570
+ cursor={disabled ? "not-allowed" : "pointer"}
571
+ opacity={disabled ? 0.5 : 1}
572
+ {...triggerActivation}
573
+ >
574
+ <TriggerWithTrailingAction trigger={trigger} triggerEnd={triggerEnd} />
575
+ </View>
576
+ <TrailingActionOverlay>{triggerEnd}</TrailingActionOverlay>
501
577
  </View>
502
- {triggerEnd}
503
- </View>
578
+ )}
504
579
  <Sheet
505
580
  modal
506
581
  open={open}
@@ -521,6 +596,7 @@ function FloatingPanelSheet({
521
596
  />
522
597
  <Sheet.Handle />
523
598
  <Sheet.Frame
599
+ data-testid="floating-panel-sheet"
524
600
  // Sheet.Frame forwards its ref at runtime; the styled prop type
525
601
  // just omits `ref`, hence the cast. tabIndex -1 makes the frame a
526
602
  // programmatic focus target without joining the tab order.
@@ -562,7 +638,11 @@ function FloatingPanelWeb({
562
638
  openOn = "press",
563
639
  cover = true,
564
640
  triggerEcho = true,
641
+ triggerRow,
642
+ anchorRect,
643
+ ...sheetProps
565
644
  }: FloatingPanelProps) {
645
+ const [collisionSheet, setCollisionSheet] = useState(false);
566
646
  const isFill = sizing === "fill";
567
647
  const isContextMenu = openOn === "contextmenu";
568
648
  const overlayStyleRef = useRef<{ top: number; left?: number; maxHeight: number } | null>(null);
@@ -591,7 +671,7 @@ function FloatingPanelWeb({
591
671
  };
592
672
 
593
673
  const panel = useFloatingPanel({
594
- open,
674
+ open: open && !collisionSheet,
595
675
  onOpenChange,
596
676
  disabled,
597
677
  repositionRef: repositionFnRef,
@@ -607,14 +687,27 @@ function FloatingPanelWeb({
607
687
  // Escape (or outside click on empty space) closes the panel while focus is
608
688
  // inside it, focus falls to <body>. Return it to the pre-open element
609
689
  // (the trigger's focusable). Deliberate focus moves elsewhere are kept.
610
- useReturnFocusOnClose(open, skipReturnFocusRef);
611
- useKeyboardFocusIntoPanel(open && panel.mounted, panel.refs.floating, keyboardOpenRef);
690
+ useReturnFocusOnClose(open, skipReturnFocusRef, panel.refs.floating);
691
+ useKeyboardFocusIntoPanel(
692
+ open && panel.mounted && !collisionSheet,
693
+ panel.refs.floating,
694
+ keyboardOpenRef,
695
+ );
612
696
  useEffect(() => {
613
697
  if (open) return;
614
698
  keyboardOpenRef.current = false;
615
699
  anchorPointRef.current = null;
616
700
  }, [open]);
617
701
 
702
+ useEffect(() => {
703
+ if (open || !collisionSheet) return;
704
+ const timer = setTimeout(
705
+ () => setCollisionSheet(false),
706
+ motionDurationMs(panel.knobProps.motion.slide.transition),
707
+ );
708
+ return () => clearTimeout(timer);
709
+ }, [open, collisionSheet, panel.knobProps.motion.slide.transition]);
710
+
618
711
  const repositionOverlay = useCallback(() => {
619
712
  const dropdownElement = panel.refs.floating.current;
620
713
  const trig = panel.triggerRef.current;
@@ -630,7 +723,16 @@ function FloatingPanelWeb({
630
723
  const point = isContextMenu
631
724
  ? (anchorPointRef.current ?? referenceCornerPoint(trig, isRtl()))
632
725
  : null;
633
- const triggerBounds = point ? { top: point.y, bottom: point.y } : trig.getBoundingClientRect();
726
+ const measured = anchorRect
727
+ ? {
728
+ ...anchorRect,
729
+ top: anchorRect.y,
730
+ left: anchorRect.x,
731
+ right: anchorRect.x + anchorRect.width,
732
+ bottom: anchorRect.y + anchorRect.height,
733
+ }
734
+ : trig.getBoundingClientRect();
735
+ const triggerBounds = point ? { top: point.y, bottom: point.y } : measured;
634
736
  const viewportHeight = window.innerHeight;
635
737
  const cs = getComputedStyle(dropdownElement);
636
738
  const borderTopWidth = parseFloat(cs.borderTopWidth) || 0;
@@ -641,6 +743,70 @@ function FloatingPanelWeb({
641
743
  const liveTransition = panel.panelTransition;
642
744
  const containingBlock = fixedContainingBlockOrigin(dropdownElement);
643
745
 
746
+ if (cover && !point) {
747
+ const rtl = isRtl(trig);
748
+ const viewport = window.visualViewport;
749
+ const viewportLeft = viewport?.offsetLeft ?? 0;
750
+ const viewportTop = viewport?.offsetTop ?? 0;
751
+ const viewportRight =
752
+ viewportLeft +
753
+ (viewport?.width ?? (document.documentElement.clientWidth || window.innerWidth));
754
+ const viewportBottom = viewportTop + (viewport?.height ?? window.innerHeight);
755
+ dropdownElement.style.left = `${viewportLeft - containingBlock.left}px`;
756
+ const layoutStyle = getComputedStyle(dropdownElement);
757
+ const scale =
758
+ layoutStyle.transform &&
759
+ layoutStyle.transform !== "none" &&
760
+ typeof DOMMatrixReadOnly !== "undefined"
761
+ ? Math.abs(new DOMMatrixReadOnly(layoutStyle.transform).a)
762
+ : 1;
763
+ const layoutWidth = dropdownElement.getBoundingClientRect().width / (scale || 1);
764
+ const width = Math.max(layoutWidth || dropdownElement.offsetWidth, measured.width);
765
+ const left = rtl ? measured.right - width : measured.left;
766
+ const firstActionHeight =
767
+ contentRef.current?.querySelector<HTMLElement>(PANEL_FOCUSABLE)?.getBoundingClientRect()
768
+ .height ||
769
+ Number(panel.knobProps.menuRow.minHeight) ||
770
+ totalContentHeight;
771
+ const bodyStyle = contentRef.current ? getComputedStyle(contentRef.current) : null;
772
+ const bodyPadding =
773
+ (parseFloat(bodyStyle?.paddingTop || "0") || 0) +
774
+ (parseFloat(bodyStyle?.paddingBottom || "0") || 0);
775
+ const neededHeight = sheetProps.scrollable
776
+ ? Math.min(
777
+ totalContentHeight,
778
+ measured.height + firstActionHeight + bodyPadding + totalBorderWidth,
779
+ )
780
+ : totalContentHeight;
781
+ if (
782
+ measured.width > 0 &&
783
+ measured.height > 0 &&
784
+ (left < viewportLeft ||
785
+ left + width > Math.max(measured.right, viewportRight - panelViewportPadding) ||
786
+ measured.right > viewportRight ||
787
+ measured.top < viewportTop ||
788
+ measured.top + Math.max(neededHeight, measured.height) >
789
+ viewportBottom - panelViewportPadding)
790
+ ) {
791
+ dropdownElement.style.visibility = "hidden";
792
+ setCollisionSheet(true);
793
+ return;
794
+ }
795
+ const top = measured.top - containingBlock.top;
796
+ const cssLeft = left - containingBlock.left;
797
+ const maxHeight = Math.max(0, viewportBottom - panelViewportPadding - measured.top);
798
+ dropdownElement.style.top = `${top}px`;
799
+ dropdownElement.style.left = `${cssLeft}px`;
800
+ dropdownElement.style.maxHeight = `${maxHeight}px`;
801
+ dropdownElement.dir = rtl ? "rtl" : "ltr";
802
+ dropdownElement.style.transformOrigin = rtl ? "top right" : "top left";
803
+ dropdownElement.style.visibility = "visible";
804
+ overlayStyleRef.current = { top, left: cssLeft, maxHeight };
805
+ panel.initializingRef.current = false;
806
+ if (isInitial) dropdownElement.style.transition = liveTransition;
807
+ return;
808
+ }
809
+
644
810
  let isDropup = panel.placement.startsWith("top");
645
811
  let cssLeft: number | undefined;
646
812
  if (point) {
@@ -794,6 +960,8 @@ function FloatingPanelWeb({
794
960
  isFill,
795
961
  isContextMenu,
796
962
  cover,
963
+ anchorRect,
964
+ sheetProps.scrollable,
797
965
  panel.placement,
798
966
  panel.refs,
799
967
  panel.triggerRef,
@@ -805,9 +973,10 @@ function FloatingPanelWeb({
805
973
 
806
974
  const click = useClick(panel.context, {
807
975
  event: "mousedown",
808
- enabled: !isContextMenu,
976
+ enabled: !isContextMenu && !collisionSheet,
809
977
  });
810
978
  const dismiss = useDismiss(panel.context, {
979
+ enabled: !collisionSheet,
811
980
  // Use 'click' instead of default 'pointerdown' so scrolling to the bottom
812
981
  // (e.g. via wheel/trackpad or scroll arrow hover) doesn't trigger outside-press.
813
982
  outsidePressEvent: "click",
@@ -820,11 +989,17 @@ function FloatingPanelWeb({
820
989
  useLayoutEffect(() => {
821
990
  if (!open || !panel.mounted) return;
822
991
  repositionOverlay();
823
- }, [open, panel.mounted, repositionOverlay, panel.y]);
992
+ }, [open, panel.mounted, repositionOverlay, panel.y, panel.x]);
824
993
 
825
994
  useLayoutEffect(() => {
826
995
  const content = contentRef.current;
827
- if (!open || !panel.mounted || !isFill || !content || typeof ResizeObserver === "undefined") {
996
+ if (
997
+ !open ||
998
+ !panel.mounted ||
999
+ (!isFill && !cover) ||
1000
+ !content ||
1001
+ typeof ResizeObserver === "undefined"
1002
+ ) {
828
1003
  return;
829
1004
  }
830
1005
  // Matching the trigger width can rewrap content after the panel's first
@@ -839,17 +1014,18 @@ function FloatingPanelWeb({
839
1014
  });
840
1015
  });
841
1016
  observer.observe(content);
1017
+ if (panel.triggerRef.current) observer.observe(panel.triggerRef.current);
842
1018
  return () => {
843
1019
  observer.disconnect();
844
1020
  if (frame) cancelAnimationFrame(frame);
845
1021
  };
846
- }, [open, panel.mounted, isFill, repositionOverlay]);
1022
+ }, [open, panel.mounted, isFill, cover, repositionOverlay, panel.triggerRef]);
847
1023
 
848
1024
  const handleScroll = useCallback(
849
1025
  (event: UIEvent) => {
850
1026
  const el = event.target as HTMLElement;
851
1027
  panel.updateArrows(el);
852
- if (isFill) return;
1028
+ if (isFill || (cover && !isContextMenu)) return;
853
1029
  if (panel.initializingRef.current) {
854
1030
  lastScrollTopRef.current = el.scrollTop;
855
1031
  return;
@@ -873,7 +1049,7 @@ function FloatingPanelWeb({
873
1049
  repositionFnRef.current?.();
874
1050
  }
875
1051
  },
876
- [isFill, panel.updateArrows],
1052
+ [isFill, cover, isContextMenu, panel.updateArrows],
877
1053
  );
878
1054
 
879
1055
  const webTransition = panel.panelTransition;
@@ -945,7 +1121,8 @@ function FloatingPanelWeb({
945
1121
  if (open || disabled || isContextMenu || event.button !== 0 || !isWeb) return;
946
1122
  const reference = panel.triggerRef.current;
947
1123
  if (!reference) return;
948
- const target = event.target instanceof Element ? event.target : null;
1124
+ const target =
1125
+ typeof Element !== "undefined" && event.target instanceof Element ? event.target : null;
949
1126
  const pressed = target?.closest<HTMLElement>(PANEL_FOCUSABLE);
950
1127
  const focusable =
951
1128
  pressed && reference.contains(pressed)
@@ -976,6 +1153,7 @@ function FloatingPanelWeb({
976
1153
  <>
977
1154
  <View
978
1155
  {...referenceProps}
1156
+ alignSelf={sheetProps.triggerSizing === "content" ? "flex-start" : undefined}
979
1157
  cursor={disabled ? "not-allowed" : "pointer"}
980
1158
  opacity={disabled ? 0.5 : 1}
981
1159
  // The cover contract is stated as a relation between the panel's top
@@ -989,7 +1167,22 @@ function FloatingPanelWeb({
989
1167
  {trigger}
990
1168
  </View>
991
1169
 
992
- {panel.mounted && (
1170
+ {collisionSheet && (
1171
+ <FloatingPanelSheet
1172
+ {...sheetProps}
1173
+ open={open}
1174
+ onOpenChange={onOpenChange}
1175
+ trigger={null}
1176
+ // The trigger's Tooltip stops Escape at document. The float's
1177
+ // useDismiss listens there too, so the fallback must as well.
1178
+ escapeTarget="document"
1179
+ skipReturnFocusRef={skipReturnFocusRef}
1180
+ contentPadding={contentPadding}
1181
+ >
1182
+ {children}
1183
+ </FloatingPanelSheet>
1184
+ )}
1185
+ {panel.mounted && !collisionSheet && (
993
1186
  <PanelPortal anchor={panel.triggerRef.current}>
994
1187
  <YStack
995
1188
  {...getFloatingProps({
@@ -1002,6 +1195,7 @@ function FloatingPanelWeb({
1002
1195
  scrollbarWidth: "none" as any,
1003
1196
  zIndex: zIndex.dropdown,
1004
1197
  overflow: "auto",
1198
+ ...(cover && !isContextMenu ? { overflowX: "hidden" as const } : {}),
1005
1199
  ...panel.floatingStyleRef.current,
1006
1200
  ...(overlayStyleRef.current
1007
1201
  ? { maxHeight: overlayStyleRef.current.maxHeight }
@@ -1012,11 +1206,16 @@ function FloatingPanelWeb({
1012
1206
  // then positions against this box and is clipped by its scroll.
1013
1207
  transform: panel.visible ? "none" : "scale(0.96)",
1014
1208
  transition: webTransition,
1015
- transformOrigin: panelTransformOrigin(
1016
- pointPlacementRef.current
1017
- ? `${pointPlacementRef.current.dropup ? "top" : "bottom"}-${pointPlacementRef.current.alignEnd ? "end" : "start"}`
1018
- : panel.placement,
1019
- ),
1209
+ transformOrigin:
1210
+ cover && !isContextMenu
1211
+ ? isRtl(panel.triggerRef.current)
1212
+ ? "top right"
1213
+ : "top left"
1214
+ : panelTransformOrigin(
1215
+ pointPlacementRef.current
1216
+ ? `${pointPlacementRef.current.dropup ? "top" : "bottom"}-${pointPlacementRef.current.alignEnd ? "end" : "start"}`
1217
+ : panel.placement,
1218
+ ),
1020
1219
  },
1021
1220
  onScroll: handleScroll,
1022
1221
  onTransitionEnd: (event) => {
@@ -1042,7 +1241,14 @@ function FloatingPanelWeb({
1042
1241
  paddingVertical={0}
1043
1242
  >
1044
1243
  {isContextMenu || !cover || !triggerEcho ? null : (
1045
- <TriggerEchoRow sourceRef={panel.triggerRef} onPress={() => onOpenChange(false)} />
1244
+ <TriggerEchoRow
1245
+ sourceRef={panel.triggerRef}
1246
+ source={trigger}
1247
+ anchorRect={anchorRect}
1248
+ onPress={() => onOpenChange(false)}
1249
+ >
1250
+ {triggerRow}
1251
+ </TriggerEchoRow>
1046
1252
  )}
1047
1253
  <ScrollArrow
1048
1254
  direction="up"
@@ -0,0 +1,37 @@
1
+ import type { ReactNode } from "react";
2
+ import { View, isWeb } from "tamagui";
3
+ import { FieldTrailingOverlay } from "../InputParts";
4
+
5
+ /**
6
+ * LC-149 FIELD-TRAILING-ACTION for picker triggers. `triggerEnd` stays out of
7
+ * the trigger's press capture (Fabric steals the responder from anything
8
+ * inside it), so it cannot live in the Box. It is laid over the Box's
9
+ * trailing edge instead, and the Box keeps that end cap empty for it: the
10
+ * clear reads as part of the field, not a button beside it.
11
+ */
12
+ export function TriggerWithTrailingAction({
13
+ trigger,
14
+ triggerEnd,
15
+ }: {
16
+ trigger: ReactNode;
17
+ triggerEnd?: ReactNode;
18
+ }) {
19
+ const active = triggerEnd != null && triggerEnd !== false;
20
+ return <FieldTrailingOverlay active={active}>{trigger}</FieldTrailingOverlay>;
21
+ }
22
+
23
+ export function TrailingActionOverlay({ children }: { children?: ReactNode }) {
24
+ if (children == null || children === false) return null;
25
+ return (
26
+ <View
27
+ position="absolute"
28
+ top={0}
29
+ bottom={0}
30
+ {...(isWeb ? { insetInlineEnd: 0 } : { end: 0 })}
31
+ justifyContent="center"
32
+ data-field-action-overlay=""
33
+ >
34
+ {children}
35
+ </View>
36
+ );
37
+ }
@@ -158,12 +158,14 @@ describe("FloatingPanel and DropdownMenu open over their trigger (MPO-38 cover r
158
158
  expect(viewport.style.transformOrigin.startsWith("top")).toBe(true);
159
159
  });
160
160
 
161
- it("the trigger's own label is the panel's first row, presentation only", async () => {
161
+ it("the trigger's own label is the panel's first close row", async () => {
162
162
  const viewport = await openPanel({});
163
163
  const echo = viewport.querySelector("[data-fp-trigger-row]") as HTMLElement;
164
164
  expect(echo).toBeTruthy();
165
165
  expect(echo.textContent).toContain("Actions");
166
- expect(echo.getAttribute("aria-hidden")).toBe("true");
166
+ expect(echo.getAttribute("aria-hidden")).toBeNull();
167
+ expect(echo.getAttribute("role")).toBe("button");
168
+ expect(echo.getAttribute("aria-label")).toBe("Actions");
167
169
  const firstRow = Array.from(viewport.children).find((el) =>
168
170
  (el as HTMLElement).textContent?.trim(),
169
171
  );
@@ -11,7 +11,7 @@ import {
11
11
  } from "@phosphor-icons/react";
12
12
  import { useForm } from "@tanstack/react-form";
13
13
  import { useCallback, useState } from "react";
14
- import { H3, Separator, YStack } from "tamagui";
14
+ import { Separator, YStack } from "tamagui";
15
15
  import { Button } from "../Button";
16
16
  import { FieldGroup } from "../FieldGroup";
17
17
  import { FormGrid } from "../FormGrid";
@@ -52,6 +52,7 @@ import { ToggleGroup } from "../fields/ToggleGroup";
52
52
  import { formatFieldError } from "../ErrorSummary";
53
53
  import type { AnyFormApi } from "../types";
54
54
  import { Form, FormActions } from "./index";
55
+ import { H3 } from "@multiplatform.one/theme";
55
56
 
56
57
  const meta: Meta<typeof Form> = {
57
58
  title: "Forms/Form",