@multiplatform.one/forms 7.7.6 → 7.8.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 (533) hide show
  1. package/dist/cjs/Button/index.cjs +0 -3
  2. package/dist/cjs/Button/index.native.js +0 -3
  3. package/dist/cjs/Button/index.native.js.map +1 -1
  4. package/dist/cjs/Chip/index.cjs +1 -1
  5. package/dist/cjs/Chip/index.native.js +1 -1
  6. package/dist/cjs/Chip/index.native.js.map +1 -1
  7. package/dist/cjs/FloatingPanel/index.cjs +59 -14
  8. package/dist/cjs/FloatingPanel/index.native.js +16 -7
  9. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  10. package/dist/cjs/FloatingPanel/nestedAction.cjs +37 -0
  11. package/dist/cjs/FloatingPanel/nestedAction.native.js +42 -0
  12. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -0
  13. package/dist/cjs/InputParts/index.cjs +8 -6
  14. package/dist/cjs/InputParts/index.native.js +9 -9
  15. package/dist/cjs/InputParts/index.native.js.map +1 -1
  16. package/dist/cjs/Wheel/index.cjs +3 -3
  17. package/dist/cjs/Wheel/index.native.js +3 -3
  18. package/dist/cjs/Wheel/index.native.js.map +1 -1
  19. package/dist/cjs/fieldLayout.cjs +3 -3
  20. package/dist/cjs/fieldLayout.native.js +3 -3
  21. package/dist/cjs/fieldLayout.native.js.map +1 -1
  22. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.cjs +9 -2
  23. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  24. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  25. package/dist/cjs/fields/Combobox/index.cjs +36 -29
  26. package/dist/cjs/fields/Combobox/index.native.js +38 -38
  27. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  28. package/dist/cjs/fields/DatePicker/Calendar.cjs +6 -1
  29. package/dist/cjs/fields/DatePicker/Calendar.native.js +6 -1
  30. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  31. package/dist/cjs/fields/DatePicker/DateRangePicker.cjs +2 -2
  32. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  33. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  34. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +15 -12
  35. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  36. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  37. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +39 -14
  38. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  39. package/dist/cjs/fields/DatePicker/MonthPicker.cjs +10 -3
  40. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +10 -3
  41. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  42. package/dist/cjs/fields/DatePicker/MultiDatePicker.cjs +2 -2
  43. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  44. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  45. package/dist/cjs/fields/DatePicker/index.native.js +3 -0
  46. package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
  47. package/dist/cjs/fields/DatePicker/parts.cjs +26 -14
  48. package/dist/cjs/fields/DatePicker/parts.native.js +28 -14
  49. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  50. package/dist/cjs/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  51. package/dist/cjs/fields/Geolocation/geocoder.cjs +63 -0
  52. package/dist/cjs/fields/Geolocation/geocoder.native.js +68 -0
  53. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -0
  54. package/dist/cjs/fields/Geolocation/index.cjs +801 -152
  55. package/dist/cjs/fields/Geolocation/index.native.js +856 -167
  56. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  57. package/dist/cjs/fields/Geolocation/nativeSearchFocus.cjs +44 -0
  58. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js +47 -0
  59. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  60. package/dist/cjs/fields/Icon/drawnSet.cjs +14 -3
  61. package/dist/cjs/fields/Icon/drawnSet.native.js +18 -3
  62. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  63. package/dist/cjs/fields/Icon/index.cjs +102 -27
  64. package/dist/cjs/fields/Icon/index.native.js +115 -31
  65. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  66. package/dist/cjs/fields/Input/index.cjs +5 -12
  67. package/dist/cjs/fields/Input/index.native.js +5 -13
  68. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  69. package/dist/cjs/fields/PhoneInput/index.cjs +2 -2
  70. package/dist/cjs/fields/PhoneInput/index.native.js +2 -2
  71. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  72. package/dist/cjs/fields/SearchInput/index.cjs +8 -9
  73. package/dist/cjs/fields/SearchInput/index.native.js +8 -9
  74. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  75. package/dist/cjs/fields/Select/index.cjs +42 -11
  76. package/dist/cjs/fields/Select/index.native.js +52 -20
  77. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  78. package/dist/cjs/fields/Stepper/index.cjs +144 -31
  79. package/dist/cjs/fields/Stepper/index.native.js +151 -31
  80. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  81. package/dist/cjs/index.cjs +2 -0
  82. package/dist/cjs/index.native.js +2 -0
  83. package/dist/cjs/index.native.js.map +1 -1
  84. package/dist/cjs/shared/focusManagement.cjs +24 -11
  85. package/dist/cjs/shared/focusManagement.native.js +24 -11
  86. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  87. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  88. package/dist/esm/Button/index.mjs +0 -3
  89. package/dist/esm/Button/index.mjs.map +1 -1
  90. package/dist/esm/Button/index.native.js +0 -3
  91. package/dist/esm/Button/index.native.js.map +1 -1
  92. package/dist/esm/Chip/index.mjs +1 -1
  93. package/dist/esm/Chip/index.mjs.map +1 -1
  94. package/dist/esm/Chip/index.native.js +1 -1
  95. package/dist/esm/Chip/index.native.js.map +1 -1
  96. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  97. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  98. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  99. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  100. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  101. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  102. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  103. package/dist/esm/ErrorSummary.native.js.map +1 -1
  104. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  105. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  106. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  107. package/dist/esm/FieldGroup.native.js.map +1 -1
  108. package/dist/esm/FloatingPanel/index.mjs +58 -15
  109. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  110. package/dist/esm/FloatingPanel/index.native.js +15 -8
  111. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  112. package/dist/esm/FloatingPanel/nestedAction.mjs +11 -0
  113. package/dist/esm/FloatingPanel/nestedAction.mjs.map +1 -0
  114. package/dist/esm/FloatingPanel/nestedAction.native.js +13 -0
  115. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -0
  116. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  117. package/dist/esm/Form/index.native.js.map +1 -1
  118. package/dist/esm/Form/validateOn.native.js.map +1 -1
  119. package/dist/esm/FormGrid.native.js.map +1 -1
  120. package/dist/esm/FormSection.native.js.map +1 -1
  121. package/dist/esm/InputParts/index.mjs +9 -7
  122. package/dist/esm/InputParts/index.mjs.map +1 -1
  123. package/dist/esm/InputParts/index.native.js +10 -10
  124. package/dist/esm/InputParts/index.native.js.map +1 -1
  125. package/dist/esm/Label/index.native.js.map +1 -1
  126. package/dist/esm/Skeleton/index.native.js.map +1 -1
  127. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  128. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  129. package/dist/esm/Table/index.native.js.map +1 -1
  130. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  131. package/dist/esm/Wheel/index.mjs +3 -3
  132. package/dist/esm/Wheel/index.mjs.map +1 -1
  133. package/dist/esm/Wheel/index.native.js +3 -3
  134. package/dist/esm/Wheel/index.native.js.map +1 -1
  135. package/dist/esm/actionLabel.native.js.map +1 -1
  136. package/dist/esm/fieldDefaults.native.js.map +1 -1
  137. package/dist/esm/fieldLayout.mjs +3 -3
  138. package/dist/esm/fieldLayout.mjs.map +1 -1
  139. package/dist/esm/fieldLayout.native.js +3 -3
  140. package/dist/esm/fieldLayout.native.js.map +1 -1
  141. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  142. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  143. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  144. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  145. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  146. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  147. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  148. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  149. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
  150. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
  151. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  152. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  153. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  154. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  155. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  156. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  157. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  158. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  159. package/dist/esm/fields/Combobox/index.mjs +36 -29
  160. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  161. package/dist/esm/fields/Combobox/index.native.js +38 -38
  162. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  163. package/dist/esm/fields/DatePicker/Calendar.mjs +6 -1
  164. package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
  165. package/dist/esm/fields/DatePicker/Calendar.native.js +6 -1
  166. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  167. package/dist/esm/fields/DatePicker/DateRangePicker.mjs +2 -2
  168. package/dist/esm/fields/DatePicker/DateRangePicker.mjs.map +1 -1
  169. package/dist/esm/fields/DatePicker/DateRangePicker.native.js +2 -2
  170. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  171. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
  172. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  173. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  174. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  175. package/dist/esm/fields/DatePicker/DatetimePicker.native.js +39 -14
  176. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  177. package/dist/esm/fields/DatePicker/MonthPicker.mjs +10 -3
  178. package/dist/esm/fields/DatePicker/MonthPicker.mjs.map +1 -1
  179. package/dist/esm/fields/DatePicker/MonthPicker.native.js +10 -3
  180. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  181. package/dist/esm/fields/DatePicker/MultiDatePicker.mjs +2 -2
  182. package/dist/esm/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
  183. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js +2 -2
  184. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  185. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  186. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  187. package/dist/esm/fields/DatePicker/index.native.js +3 -0
  188. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  189. package/dist/esm/fields/DatePicker/parts.mjs +28 -16
  190. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  191. package/dist/esm/fields/DatePicker/parts.native.js +30 -16
  192. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  193. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  194. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  195. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  196. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  197. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  198. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  199. package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  200. package/dist/esm/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  201. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  202. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  203. package/dist/esm/fields/Geolocation/geocoder.mjs +33 -0
  204. package/dist/esm/fields/Geolocation/geocoder.mjs.map +1 -0
  205. package/dist/esm/fields/Geolocation/geocoder.native.js +35 -0
  206. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -0
  207. package/dist/esm/fields/Geolocation/index.mjs +792 -149
  208. package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
  209. package/dist/esm/fields/Geolocation/index.native.js +847 -164
  210. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  211. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  212. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  213. package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs +19 -0
  214. package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
  215. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js +19 -0
  216. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  217. package/dist/esm/fields/Icon/drawnSet.mjs +14 -3
  218. package/dist/esm/fields/Icon/drawnSet.mjs.map +1 -1
  219. package/dist/esm/fields/Icon/drawnSet.native.js +18 -3
  220. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  221. package/dist/esm/fields/Icon/index.mjs +93 -18
  222. package/dist/esm/fields/Icon/index.mjs.map +1 -1
  223. package/dist/esm/fields/Icon/index.native.js +106 -22
  224. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  225. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  226. package/dist/esm/fields/Input/index.mjs +5 -12
  227. package/dist/esm/fields/Input/index.mjs.map +1 -1
  228. package/dist/esm/fields/Input/index.native.js +5 -13
  229. package/dist/esm/fields/Input/index.native.js.map +1 -1
  230. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  231. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  232. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  233. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  234. package/dist/esm/fields/PhoneInput/index.mjs +2 -2
  235. package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
  236. package/dist/esm/fields/PhoneInput/index.native.js +2 -2
  237. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  238. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  239. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  240. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  241. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  242. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  243. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  244. package/dist/esm/fields/SearchInput/index.mjs +9 -10
  245. package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
  246. package/dist/esm/fields/SearchInput/index.native.js +9 -10
  247. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  248. package/dist/esm/fields/Select/index.mjs +42 -11
  249. package/dist/esm/fields/Select/index.mjs.map +1 -1
  250. package/dist/esm/fields/Select/index.native.js +52 -20
  251. package/dist/esm/fields/Select/index.native.js.map +1 -1
  252. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  253. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  254. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  255. package/dist/esm/fields/Stepper/index.mjs +145 -32
  256. package/dist/esm/fields/Stepper/index.mjs.map +1 -1
  257. package/dist/esm/fields/Stepper/index.native.js +152 -32
  258. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  259. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  260. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  261. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  262. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  263. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  264. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  265. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  266. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  267. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  268. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  269. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  270. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  271. package/dist/esm/formSpacing.native.js.map +1 -1
  272. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  273. package/dist/esm/index.mjs +2 -1
  274. package/dist/esm/index.mjs.map +1 -1
  275. package/dist/esm/index.native.js +2 -1
  276. package/dist/esm/index.native.js.map +1 -1
  277. package/dist/esm/requiredMarking.native.js.map +1 -1
  278. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  279. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  280. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  281. package/dist/esm/shared/devWarn.native.js.map +1 -1
  282. package/dist/esm/shared/floatingList.native.js.map +1 -1
  283. package/dist/esm/shared/focusManagement.mjs +24 -11
  284. package/dist/esm/shared/focusManagement.mjs.map +1 -1
  285. package/dist/esm/shared/focusManagement.native.js +24 -11
  286. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  287. package/dist/esm/shared/groupContext.native.js.map +1 -1
  288. package/dist/esm/shared/i18n.native.js.map +1 -1
  289. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  290. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  291. package/dist/esm/shared/t.native.js.map +1 -1
  292. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  293. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  294. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  295. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  296. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  297. package/dist/esm/shared/utils.native.js.map +1 -1
  298. package/dist/esm/shared/zIndex.native.js.map +1 -1
  299. package/dist/esm/themedPrimitives.native.js.map +1 -1
  300. package/dist/esm/types.native.js.map +1 -1
  301. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  302. package/dist/jsx/Button/index.mjs +0 -3
  303. package/dist/jsx/Button/index.mjs.map +1 -1
  304. package/dist/jsx/Button/index.native.js +0 -3
  305. package/dist/jsx/Button/index.native.js.map +1 -1
  306. package/dist/jsx/Chip/index.mjs +1 -1
  307. package/dist/jsx/Chip/index.mjs.map +1 -1
  308. package/dist/jsx/Chip/index.native.js +1 -1
  309. package/dist/jsx/Chip/index.native.js.map +1 -1
  310. package/dist/jsx/FloatingPanel/index.mjs +58 -15
  311. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  312. package/dist/jsx/FloatingPanel/index.native.js +16 -7
  313. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  314. package/dist/jsx/FloatingPanel/nestedAction.mjs +11 -0
  315. package/dist/jsx/FloatingPanel/nestedAction.mjs.map +1 -0
  316. package/dist/jsx/FloatingPanel/nestedAction.native.js +42 -0
  317. package/dist/jsx/FloatingPanel/nestedAction.native.js.map +1 -0
  318. package/dist/jsx/InputParts/index.mjs +9 -7
  319. package/dist/jsx/InputParts/index.mjs.map +1 -1
  320. package/dist/jsx/InputParts/index.native.js +9 -9
  321. package/dist/jsx/InputParts/index.native.js.map +1 -1
  322. package/dist/jsx/Wheel/index.mjs +3 -3
  323. package/dist/jsx/Wheel/index.mjs.map +1 -1
  324. package/dist/jsx/Wheel/index.native.js +3 -3
  325. package/dist/jsx/Wheel/index.native.js.map +1 -1
  326. package/dist/jsx/fieldLayout.mjs +3 -3
  327. package/dist/jsx/fieldLayout.mjs.map +1 -1
  328. package/dist/jsx/fieldLayout.native.js +3 -3
  329. package/dist/jsx/fieldLayout.native.js.map +1 -1
  330. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
  331. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
  332. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  333. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  334. package/dist/jsx/fields/Combobox/index.mjs +36 -29
  335. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  336. package/dist/jsx/fields/Combobox/index.native.js +38 -38
  337. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  338. package/dist/jsx/fields/DatePicker/Calendar.mjs +6 -1
  339. package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
  340. package/dist/jsx/fields/DatePicker/Calendar.native.js +6 -1
  341. package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
  342. package/dist/jsx/fields/DatePicker/DateRangePicker.mjs +2 -2
  343. package/dist/jsx/fields/DatePicker/DateRangePicker.mjs.map +1 -1
  344. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
  345. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  346. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
  347. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  348. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  349. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  350. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +39 -14
  351. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  352. package/dist/jsx/fields/DatePicker/MonthPicker.mjs +10 -3
  353. package/dist/jsx/fields/DatePicker/MonthPicker.mjs.map +1 -1
  354. package/dist/jsx/fields/DatePicker/MonthPicker.native.js +10 -3
  355. package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
  356. package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs +2 -2
  357. package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
  358. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
  359. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  360. package/dist/jsx/fields/DatePicker/index.native.js +3 -0
  361. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  362. package/dist/jsx/fields/DatePicker/parts.mjs +28 -16
  363. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  364. package/dist/jsx/fields/DatePicker/parts.native.js +28 -14
  365. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  366. package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  367. package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  368. package/dist/jsx/fields/Geolocation/geocoder.mjs +33 -0
  369. package/dist/jsx/fields/Geolocation/geocoder.mjs.map +1 -0
  370. package/dist/jsx/fields/Geolocation/geocoder.native.js +68 -0
  371. package/dist/jsx/fields/Geolocation/geocoder.native.js.map +1 -0
  372. package/dist/jsx/fields/Geolocation/index.mjs +792 -149
  373. package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
  374. package/dist/jsx/fields/Geolocation/index.native.js +856 -167
  375. package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
  376. package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs +19 -0
  377. package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
  378. package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js +47 -0
  379. package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  380. package/dist/jsx/fields/Icon/drawnSet.mjs +14 -3
  381. package/dist/jsx/fields/Icon/drawnSet.mjs.map +1 -1
  382. package/dist/jsx/fields/Icon/drawnSet.native.js +18 -3
  383. package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
  384. package/dist/jsx/fields/Icon/index.mjs +93 -18
  385. package/dist/jsx/fields/Icon/index.mjs.map +1 -1
  386. package/dist/jsx/fields/Icon/index.native.js +115 -31
  387. package/dist/jsx/fields/Icon/index.native.js.map +1 -1
  388. package/dist/jsx/fields/Input/index.mjs +5 -12
  389. package/dist/jsx/fields/Input/index.mjs.map +1 -1
  390. package/dist/jsx/fields/Input/index.native.js +5 -13
  391. package/dist/jsx/fields/Input/index.native.js.map +1 -1
  392. package/dist/jsx/fields/PhoneInput/index.mjs +2 -2
  393. package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
  394. package/dist/jsx/fields/PhoneInput/index.native.js +2 -2
  395. package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
  396. package/dist/jsx/fields/SearchInput/index.mjs +9 -10
  397. package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
  398. package/dist/jsx/fields/SearchInput/index.native.js +8 -9
  399. package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
  400. package/dist/jsx/fields/Select/index.mjs +42 -11
  401. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  402. package/dist/jsx/fields/Select/index.native.js +52 -20
  403. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  404. package/dist/jsx/fields/Stepper/index.mjs +145 -32
  405. package/dist/jsx/fields/Stepper/index.mjs.map +1 -1
  406. package/dist/jsx/fields/Stepper/index.native.js +151 -31
  407. package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
  408. package/dist/jsx/index.js +2 -1
  409. package/dist/jsx/index.js.map +1 -1
  410. package/dist/jsx/index.mjs +2 -1
  411. package/dist/jsx/index.mjs.map +1 -1
  412. package/dist/jsx/index.native.js +2 -0
  413. package/dist/jsx/index.native.js.map +1 -1
  414. package/dist/jsx/shared/focusManagement.mjs +24 -11
  415. package/dist/jsx/shared/focusManagement.mjs.map +1 -1
  416. package/dist/jsx/shared/focusManagement.native.js +24 -11
  417. package/dist/jsx/shared/focusManagement.native.js.map +1 -1
  418. package/package.json +8 -7
  419. package/src/Button/Button.labelInk.spec.tsx +21 -18
  420. package/src/Button/Button.outlinedChannel.spec.tsx +46 -0
  421. package/src/Button/Button.sizeLadder.spec.tsx +4 -3
  422. package/src/Button/Button.stories.tsx +20 -0
  423. package/src/Button/index.tsx +25 -4
  424. package/src/Chip/Chip.spec.tsx +3 -1
  425. package/src/Chip/index.tsx +1 -5
  426. package/src/FieldLayout.stories.tsx +41 -0
  427. package/src/FloatingPanel/FloatingPanel.native.spec.tsx +54 -0
  428. package/src/FloatingPanel/FloatingPanel.spec.tsx +109 -0
  429. package/src/FloatingPanel/index.native.tsx +24 -7
  430. package/src/FloatingPanel/index.tsx +80 -13
  431. package/src/FloatingPanel/nestedAction.spec.ts +36 -0
  432. package/src/FloatingPanel/nestedAction.ts +15 -0
  433. package/src/FloatingPanel/panelWidthContract.spec.ts +12 -15
  434. package/src/FormsIntegration.stories.tsx +2 -6
  435. package/src/InputParts/index.tsx +15 -5
  436. package/src/InputParts/layoutGap.spec.tsx +43 -0
  437. package/src/Wheel/Wheel.spec.tsx +16 -0
  438. package/src/Wheel/index.tsx +3 -3
  439. package/src/fieldLayout.spec.tsx +42 -1
  440. package/src/fieldLayout.tsx +9 -9
  441. package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +18 -0
  442. package/src/fields/Checkbox/CheckboxFieldFrame.tsx +6 -1
  443. package/src/fields/Combobox/Combobox.spec.tsx +48 -1
  444. package/src/fields/Combobox/index.tsx +53 -39
  445. package/src/fields/DatePicker/Calendar.tsx +4 -1
  446. package/src/fields/DatePicker/DatePicker.stories.tsx +22 -1
  447. package/src/fields/DatePicker/DateRangePicker.tsx +4 -2
  448. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +21 -19
  449. package/src/fields/DatePicker/DatetimePicker.native.spec.tsx +144 -0
  450. package/src/fields/DatePicker/DatetimePicker.native.tsx +57 -32
  451. package/src/fields/DatePicker/DatetimePicker.stories.tsx +22 -0
  452. package/src/fields/DatePicker/MonthPicker.tsx +8 -3
  453. package/src/fields/DatePicker/MultiDatePicker.tsx +4 -2
  454. package/src/fields/DatePicker/index.native.tsx +1 -0
  455. package/src/fields/DatePicker/parts.spec.tsx +56 -0
  456. package/src/fields/DatePicker/parts.tsx +33 -12
  457. package/src/fields/Geolocation/Geolocation.spec.tsx +287 -35
  458. package/src/fields/Geolocation/Geolocation.stories.tsx +141 -7
  459. package/src/fields/Geolocation/GeolocationMap.native.tsx +3 -0
  460. package/src/fields/Geolocation/GeolocationMap.tsx +4 -0
  461. package/src/fields/Geolocation/geocoder.spec.ts +59 -0
  462. package/src/fields/Geolocation/geocoder.ts +84 -0
  463. package/src/fields/Geolocation/geocoderSeam.spec.tsx +203 -0
  464. package/src/fields/Geolocation/index.tsx +912 -180
  465. package/src/fields/Geolocation/nativeSearchFocus.spec.ts +34 -0
  466. package/src/fields/Geolocation/nativeSearchFocus.ts +19 -0
  467. package/src/fields/Geolocation/salvage.spec.tsx +398 -0
  468. package/src/fields/Geolocation/storyProviders.spec.tsx +44 -0
  469. package/src/fields/Icon/Icon.spec.tsx +215 -1
  470. package/src/fields/Icon/Icon.stories.tsx +9 -1
  471. package/src/fields/Icon/drawnSet.tsx +39 -4
  472. package/src/fields/Icon/index.tsx +118 -18
  473. package/src/fields/Input/Input.copy.spec.tsx +1 -0
  474. package/src/fields/Input/Input.spec.tsx +50 -0
  475. package/src/fields/Input/Input.stories.tsx +1 -1
  476. package/src/fields/Input/index.tsx +7 -13
  477. package/src/fields/PhoneInput/index.tsx +2 -2
  478. package/src/fields/SearchInput/SearchInput.spec.tsx +14 -0
  479. package/src/fields/SearchInput/index.tsx +5 -6
  480. package/src/fields/Select/Select.spec.tsx +54 -0
  481. package/src/fields/Select/index.tsx +52 -17
  482. package/src/fields/Stepper/Stepper.spec.tsx +34 -1
  483. package/src/fields/Stepper/index.tsx +193 -33
  484. package/src/index.ts +9 -0
  485. package/src/shared/focusManagement.spec.tsx +68 -0
  486. package/src/shared/focusManagement.ts +20 -10
  487. package/types/Button/index.d.ts +22 -3
  488. package/types/Button/index.d.ts.map +1 -1
  489. package/types/Chip/index.d.ts.map +1 -1
  490. package/types/FloatingPanel/index.d.ts +11 -1
  491. package/types/FloatingPanel/index.d.ts.map +1 -1
  492. package/types/FloatingPanel/index.native.d.ts +2 -1
  493. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  494. package/types/FloatingPanel/nestedAction.d.ts +13 -0
  495. package/types/FloatingPanel/nestedAction.d.ts.map +1 -0
  496. package/types/InputParts/index.d.ts.map +1 -1
  497. package/types/fields/Checkbox/CheckboxFieldFrame.d.ts +46 -2
  498. package/types/fields/Checkbox/CheckboxFieldFrame.d.ts.map +1 -1
  499. package/types/fields/Checkbox/index.d.ts +3 -3
  500. package/types/fields/Combobox/index.d.ts +3 -1
  501. package/types/fields/Combobox/index.d.ts.map +1 -1
  502. package/types/fields/DatePicker/Calendar.d.ts.map +1 -1
  503. package/types/fields/DatePicker/DateRangePicker.d.ts.map +1 -1
  504. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  505. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
  506. package/types/fields/DatePicker/MonthPicker.d.ts.map +1 -1
  507. package/types/fields/DatePicker/MultiDatePicker.d.ts.map +1 -1
  508. package/types/fields/DatePicker/index.native.d.ts.map +1 -1
  509. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  510. package/types/fields/Geolocation/GeolocationMap.d.ts +4 -0
  511. package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
  512. package/types/fields/Geolocation/GeolocationMap.native.d.ts +3 -0
  513. package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
  514. package/types/fields/Geolocation/geocoder.d.ts +53 -0
  515. package/types/fields/Geolocation/geocoder.d.ts.map +1 -0
  516. package/types/fields/Geolocation/index.d.ts +18 -2
  517. package/types/fields/Geolocation/index.d.ts.map +1 -1
  518. package/types/fields/Geolocation/nativeSearchFocus.d.ts +8 -0
  519. package/types/fields/Geolocation/nativeSearchFocus.d.ts.map +1 -0
  520. package/types/fields/Icon/drawnSet.d.ts.map +1 -1
  521. package/types/fields/Icon/index.d.ts.map +1 -1
  522. package/types/fields/Input/index.d.ts.map +1 -1
  523. package/types/fields/PhoneInput/index.d.ts.map +1 -1
  524. package/types/fields/RadioGroup/index.d.ts +2 -2
  525. package/types/fields/SearchInput/index.d.ts.map +1 -1
  526. package/types/fields/Select/index.d.ts.map +1 -1
  527. package/types/fields/Stepper/index.d.ts.map +1 -1
  528. package/types/fields/ToggleGroup/index.d.ts +1 -1
  529. package/types/index.d.ts +2 -0
  530. package/types/index.d.ts.map +1 -1
  531. package/types/shared/focusManagement.d.ts +2 -2
  532. package/types/shared/focusManagement.d.ts.map +1 -1
  533. package/src/router.d.ts +0 -16
@@ -12,17 +12,24 @@ function focusIsDropped(insideEl) {
12
12
  function useCaptureOnOpen(open) {
13
13
  const prevRef = useRef(null);
14
14
  const wasOpenRef = useRef(false);
15
+ const generationRef = useRef(0);
15
16
  if (canUseDom()) {
17
+ if (open !== wasOpenRef.current) generationRef.current += 1;
16
18
  if (open && !wasOpenRef.current) {
17
19
  prevRef.current = document.activeElement;
18
20
  }
19
21
  wasOpenRef.current = open;
20
22
  }
21
- return prevRef;
23
+ return {
24
+ prevRef,
25
+ generationRef
26
+ };
22
27
  }
23
- function restoreLater(prevRef, insideRef) {
28
+ function restoreLater(prevRef, generationRef, insideRef, skipReturnFocusRef) {
29
+ const generation = generationRef.current;
24
30
  const restore = () => {
25
31
  if (!canUseDom()) return;
32
+ if (skipReturnFocusRef?.current || generationRef.current !== generation) return;
26
33
  const target = prevRef.current;
27
34
  if (!target || !target.isConnected) return;
28
35
  if (focusIsDropped(insideRef?.current ?? null)) {
@@ -35,20 +42,26 @@ function restoreLater(prevRef, insideRef) {
35
42
  requestAnimationFrame(() => requestAnimationFrame(restore));
36
43
  setTimeout(restore, 320);
37
44
  }
38
- function useReturnFocusOnClose(open) {
39
- const prevRef = useCaptureOnOpen(open);
45
+ function useReturnFocusOnClose(open, skipReturnFocusRef) {
46
+ const {
47
+ prevRef,
48
+ generationRef
49
+ } = useCaptureOnOpen(open);
40
50
  useEffect(() => {
41
51
  if (!canUseDom() || !open) return;
42
- return () => restoreLater(prevRef);
43
- }, [open, prevRef]);
52
+ return () => restoreLater(prevRef, generationRef, void 0, skipReturnFocusRef);
53
+ }, [open, prevRef, generationRef, skipReturnFocusRef]);
44
54
  }
45
- function useSheetModalFocus(open, frameRef) {
46
- const prevRef = useCaptureOnOpen(open);
55
+ function useSheetModalFocus(open, frameRef, skipReturnFocusRef) {
56
+ const {
57
+ prevRef,
58
+ generationRef
59
+ } = useCaptureOnOpen(open);
47
60
  useEffect(() => {
48
61
  if (!canUseDom() || !open) return;
49
62
  const frame = frameRef.current;
50
63
  if (!frame || typeof frame.addEventListener !== "function") {
51
- return () => restoreLater(prevRef, frameRef);
64
+ return () => restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
52
65
  }
53
66
  const focusIn = () => {
54
67
  if (!canUseDom()) return;
@@ -86,9 +99,9 @@ function useSheetModalFocus(open, frameRef) {
86
99
  cancelAnimationFrame(raf);
87
100
  cancelAnimationFrame(innerRaf);
88
101
  frame.removeEventListener("keydown", onKeyDown);
89
- restoreLater(prevRef, frameRef);
102
+ restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
90
103
  };
91
- }, [open, frameRef, prevRef]);
104
+ }, [open, frameRef, prevRef, generationRef, skipReturnFocusRef]);
92
105
  }
93
106
  export { useReturnFocusOnClose, useSheetModalFocus };
94
107
  //# sourceMappingURL=focusManagement.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","isWeb","wasKeyboardFocus","FOCUSABLE","canUseDom","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","wasOpenRef","current","restoreLater","insideRef","restore","target","isConnected","focus","preventScroll","focusVisible","requestAnimationFrame","setTimeout","useReturnFocusOnClose","useSheetModalFocus","frameRef","frame","addEventListener","focusIn","first","querySelector","innerRaf","raf","onKeyDown","e","key","focusables","Array","from","querySelectorAll","filter","el","offsetWidth","offsetHeight","length","preventDefault","last","shiftKey","cancelAnimationFrame","removeEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","isWeb","wasKeyboardFocus","FOCUSABLE","canUseDom","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","wasOpenRef","generationRef","current","restoreLater","insideRef","skipReturnFocusRef","generation","restore","target","isConnected","focus","preventScroll","focusVisible","requestAnimationFrame","setTimeout","useReturnFocusOnClose","useSheetModalFocus","frameRef","frame","addEventListener","focusIn","first","querySelector","innerRaf","raf","onKeyDown","e","key","focusables","Array","from","querySelectorAll","filter","el","offsetWidth","offsetHeight","length","preventDefault","last","shiftKey","cancelAnimationFrame","removeEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -44,18 +44,25 @@ function focusIsDropped(insideEl) {
44
44
  function useCaptureOnOpen(open) {
45
45
  var prevRef = (0, import_react.useRef)(null);
46
46
  var wasOpenRef = (0, import_react.useRef)(false);
47
+ var generationRef = (0, import_react.useRef)(0);
47
48
  if (canUseDom()) {
49
+ if (open !== wasOpenRef.current) generationRef.current += 1;
48
50
  if (open && !wasOpenRef.current) {
49
51
  prevRef.current = document.activeElement;
50
52
  }
51
53
  wasOpenRef.current = open;
52
54
  }
53
- return prevRef;
55
+ return {
56
+ prevRef,
57
+ generationRef
58
+ };
54
59
  }
55
- function restoreLater(prevRef, insideRef) {
60
+ function restoreLater(prevRef, generationRef, insideRef, skipReturnFocusRef) {
61
+ var generation = generationRef.current;
56
62
  var restore = function restore2() {
57
63
  var _ref;
58
64
  if (!canUseDom()) return;
65
+ if ((skipReturnFocusRef === null || skipReturnFocusRef === void 0 ? void 0 : skipReturnFocusRef.current) || generationRef.current !== generation) return;
59
66
  var target = prevRef.current;
60
67
  if (!target || !target.isConnected) return;
61
68
  if (focusIsDropped((_ref = insideRef === null || insideRef === void 0 ? void 0 : insideRef.current) !== null && _ref !== void 0 ? _ref : null)) {
@@ -70,23 +77,29 @@ function restoreLater(prevRef, insideRef) {
70
77
  });
71
78
  setTimeout(restore, 320);
72
79
  }
73
- function useReturnFocusOnClose(open) {
74
- var prevRef = useCaptureOnOpen(open);
80
+ function useReturnFocusOnClose(open, skipReturnFocusRef) {
81
+ var {
82
+ prevRef,
83
+ generationRef
84
+ } = useCaptureOnOpen(open);
75
85
  (0, import_react.useEffect)(function () {
76
86
  if (!canUseDom() || !open) return;
77
87
  return function () {
78
- return restoreLater(prevRef);
88
+ return restoreLater(prevRef, generationRef, void 0, skipReturnFocusRef);
79
89
  };
80
- }, [open, prevRef]);
90
+ }, [open, prevRef, generationRef, skipReturnFocusRef]);
81
91
  }
82
- function useSheetModalFocus(open, frameRef) {
83
- var prevRef = useCaptureOnOpen(open);
92
+ function useSheetModalFocus(open, frameRef, skipReturnFocusRef) {
93
+ var {
94
+ prevRef,
95
+ generationRef
96
+ } = useCaptureOnOpen(open);
84
97
  (0, import_react.useEffect)(function () {
85
98
  if (!canUseDom() || !open) return;
86
99
  var frame = frameRef.current;
87
100
  if (!frame || typeof frame.addEventListener !== "function") {
88
101
  return function () {
89
- return restoreLater(prevRef, frameRef);
102
+ return restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
90
103
  };
91
104
  }
92
105
  var focusIn = function focusIn2() {
@@ -127,8 +140,8 @@ function useSheetModalFocus(open, frameRef) {
127
140
  cancelAnimationFrame(raf);
128
141
  cancelAnimationFrame(innerRaf);
129
142
  frame.removeEventListener("keydown", onKeyDown);
130
- restoreLater(prevRef, frameRef);
143
+ restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
131
144
  };
132
- }, [open, frameRef, prevRef]);
145
+ }, [open, frameRef, prevRef, generationRef, skipReturnFocusRef]);
133
146
  }
134
147
  //# sourceMappingURL=focusManagement.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","focusManagement_exports","useReturnFocusOnClose","useSheetModalFocus","module","exports","import_react","require","import_tamagui","import_theme","FOCUSABLE","canUseDom","canUseDom2","isWeb","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","useRef","wasOpenRef","current","restoreLater","insideRef","restore","restore2","_ref","isConnected","focus","preventScroll","focusVisible","wasKeyboardFocus","requestAnimationFrame","setTimeout","useEffect","frameRef","frame","addEventListener","focusIn","focusIn2"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","focusManagement_exports","useReturnFocusOnClose","useSheetModalFocus","module","exports","import_react","require","import_tamagui","import_theme","FOCUSABLE","canUseDom","canUseDom2","isWeb","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","useRef","wasOpenRef","generationRef","current","restoreLater","insideRef","skipReturnFocusRef","generation","restore","restore2","_ref","isConnected","focus","preventScroll","focusVisible","wasKeyboardFocus","requestAnimationFrame","setTimeout","useEffect","frameRef","frame","addEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"AAiCA,YAAS;;AACT,IAAAA,SAAS,GAAAC,MAAa,CAAAC,cAAA;AACtB,IAAAC,gBAAS,GAAAF,MAAA,CAAAG,wBAAwB;AAEjC,IAAAC,iBACE,GAAAJ,MAAA,CAAAK,mBAAA;AAEF,IAAAC,YAAM,GAAYN,MAAM,CAAAO,SAAS,CAAAC,cAAO;AAExC,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAeC,GAAA;EACtB,SAAMC,IAAK,IAAAD,GAAS,EACpBZ,SAAW,CAAAW,MAAO,EAAAE,IAAA;IAASC,GAAA,EAAAF,GAAQ,CAAAC,IAAA,CAAO;IAAAE,UAAS;EAAA;AAGnD;AACA,IAAAC,WAAO,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA;EACT,IAAAF,IAAA,WAAAA,IAAA,wBAAAA,IAAA;IAGA,KAAS,IAAAG,GAAA,IAAAhB,iBAAgC,CAAAa,IAAA,GACvC,IAAM,CAAAX,YAAU,CAAAe,IAA2B,CAAIL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EACzCnB,SAAA,CAAAiB,EAAA,EAAaI,GAAA;MAAOP,GAAA,EAAKA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EAC/B;EACA,OAAIE,EAAA;AACF;AACA,IAAAM,YAAY,GAACC,GAAA,IAAWR,WAAS,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAC/B,IAAAE,uBAAkB;AAAShB,QAC7B,CAAAgB,uBAAA;EACAC,qBAAW,EAAUA,CAAA,KAAAA,qBAAA;EACvBC,kBAAA,EAAAA,CAAA,KAAAA;AACA;AACFC,MAAA,CAAAC,OAAA,GAAAP,YAAA,CAAAG,uBAAA;AAEA,IAAAK,YAAS,GAAAC,OACP,QACA;AAIA,IAAAC,cAAM,GAAaD,OAAA,UAAc;AACjC,IAAAE,YAAM,GAAUF,OAAM;AAIpB,IAAAG,SAAK,8IAAa;AAClB,IAAAC,SAAI,YAAAC,UAAoBA,CAAA;EACxB,OAAAJ,cAAe,CAAAK,KAAQ,WAAAC,QAAA;AACvB;AACA,SAAIC,cAAeA,CAAAC,QAAA,EAAW;EAC5B,IAAAC,EAAA,GAAAH,QAAa,CAAAI,aAAA;EAAA,KAAAD,EACX,IAAAA,EAAA,KAAAH,QAAe,CAAAK,IAAA,IAAAF,EAAA,KAAAH,QAAA,CAAAM,eAAA;EAAA,IAAAJ,QACf,SAAc,IAAAA,QAAA,KAAiB,kBAAAA,QAAA,CAAAK,QAAA,CAAAJ,EAAA;EAAA,OAChB;AAAA;AACnB,SACFK,iBAAAC,IAAA;EAGA,IAAAC,OAAA,OAAAlB,YAA4B,CAAAmB,MAAA;EAC5B,IAAAC,UAAW,OAASpB,YAAG,CAAAmB,MAAA;EACzB,IAAAE,aAAA,OAAArB,YAAA,CAAAmB,MAAA;EAGO,IAAAd,SAAS;IACd,IAAMY,IAAE,KAAAG,UAAS,CAAAE,OAAc,EAAID,aAAA,CAAAC,OAAqB;IACxD,IAAAL,IAAU,KAAAG,UAAM,CAAAE,OAAA;MACdJ,OAAK,CAAAI,OAAU,GAAKd,QAAO,CAAAI,aAAA;IAC3B;IACFQ,UAAU,CAAAE,OAAS,GAAAL,IAAA;EACrB;EAQO,OAAS;IAKdC,OAAQ;IACRG;EACE;AACA;AACA,SAAKE,YAASA,CAAAL,OAAO,EAAMG,aAAA,EAAAG,SAAqB,EAAAC,kBAAY;EAC1D,IAAAC,UAAO,GAAML,aAAa,CAAAC,OAAA;EAAoD,IAChFK,OAAA,YAAAC,SAAA;IAGA,IAAAC,IAAM;IACJ,KAAAxB,SAAK,IAAU;IACf,KAAAoB,kBAAmB,SAAS,IAAAA,kBAAgB,uBAAAA,kBAAA,CAAAH,OAAA,KAAAD,aAAA,CAAAC,OAAA,KAAAI,UAAA;IAC5C,IAAA9C,MAAM,GAAAsC,OAAQ,CAAAI,OAAM;IACpB,IAAC,CAAA1C,MAAA,IAAS,CAAAA,MAAO,CAAAkD,WAAQ;IAC3B,IAAArB,cAAA,EAAAoB,IAAA,GAAAL,SAAA,aAAAA,SAAA,uBAAAA,SAAA,CAAAF,OAAA,cAAAO,IAAA,cAAAA,IAAA;MAGAjD,MAAI,CAAAmD,KAAA,CAAW;QACfC,aAAY;QACVC,YAAW,MAAA9B,YAAA,CAAsB+B,gBAAO;MACzC;IAGD;EACE;EACAC,qBAAM,aAAmB;IAAqD,OAC3EA,qBAAU,CAAcR,OAAK,CAAG;EAAe;EAElDS,UAAK,CAAAT,OAAA,EAAW;AACd;AACA,SAAA/B,sBAAAqB,IAAA,EAAAQ,kBAAA;EAAA,IACF;IAAAP,OAAA;IAAAG;EAAA,IAAAL,gBAAA,CAAAC,IAAA;EACA,IAAAjB,YAAM,CAAAqC,SAAQ,cAAY;IAC1B,KAAAhC,SAAM,CAAO,MAAAY,IAAA,EAAW;IACxB,mBAAgB;MAChB,OAAMM,YAAa,CAAAL,OAAA,EAAAG,aAAqB,UAAYI,kBAAQ;IAC1D;EACA,IAAWR,IACb,EACEC,OAAE,EACFG,aAAM,EAAMI,kBACd,EACF;AACA;AACA,SAAA5B,kBAAaA,CAAAoB,IAAA,EAAAqB,QAAA,EAAAb,kBAAA;EACX;IAAAP,OAAA;IAAAG;EAAwB,IAAAL,gBAAA,CAAAC,IAAA;EACxB,IAAAjB,YAAA,CAAAqC,SAAqB,cAAQ;IAC7B,KAAAhC,SAAM,OAAAY,IAAA;IACN,IAAAsB,KAAA,GAAAD,QAAa,CAAAhB,OAAS;IACxB,KAAAiB,KAAA,WAAAA,KAAA,CAAAC,gBAAA;MACE,OAAM,YAAU;QACtB,OAAAjB,YAAA,CAAAL,OAAA,EAAAG,aAAA,EAAAiB,QAAA,EAAAb,kBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/forms",
3
- "version": "7.7.6",
3
+ "version": "7.8.0",
4
4
  "description": "Cross-platform form components with URL state management",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -70,9 +70,10 @@
70
70
  "perfect-freehand": "^1.2.3",
71
71
  "react-native-svg": "15.15.4",
72
72
  "tamagui": "2.7.6",
73
- "@multiplatform.one/router": "7.7.6",
74
- "@multiplatform.one/table-primitives": "7.7.6",
75
- "@multiplatform.one/theme": "7.7.6"
73
+ "@multiplatform.one/platform": "7.8.0",
74
+ "@multiplatform.one/router": "7.8.0",
75
+ "@multiplatform.one/table-primitives": "7.8.0",
76
+ "@multiplatform.one/theme": "7.8.0"
76
77
  },
77
78
  "devDependencies": {
78
79
  "@tamagui/build": "2.7.6",
@@ -94,9 +95,9 @@
94
95
  "react-i18next": "^16.6.6",
95
96
  "react-native-web": "^0.21.2",
96
97
  "vitest": "^4.1.5",
97
- "@multiplatform.one/config": "7.7.6",
98
- "@multiplatform.one/storybook": "7.7.6",
99
- "@multiplatform.one/test-utils": "7.7.6"
98
+ "@multiplatform.one/test-utils": "7.8.0",
99
+ "@multiplatform.one/storybook": "7.8.0",
100
+ "@multiplatform.one/config": "7.8.0"
100
101
  },
101
102
  "peerDependencies": {
102
103
  "@react-native-community/datetimepicker": ">=8.0.1",
@@ -62,9 +62,8 @@ function labelNode(text: string): HTMLElement {
62
62
  }
63
63
 
64
64
  /**
65
- * One implementation of the arithmetic (the point of exporting
66
- * `measureContrast`), and the REPORTED 2-decimal ratio, so the number a
67
- * failure prints is the number the verdict used.
65
+ * Use the canonical unrounded measurement so a below-floor pair cannot
66
+ * pass through display rounding.
68
67
  */
69
68
  function pageRatio(ink: string, ground: string, label: string): number {
70
69
  return measureContrast({ foreground: ink, background: ground, label }).ratio;
@@ -159,21 +158,22 @@ describe("Button MPO-40 outlined intent label ink", () => {
159
158
  }
160
159
  });
161
160
 
162
- // PINNED MISS — MPO-40's own secondary finding, still OPEN.
161
+ // CLOSED — MPO-40's secondary finding, fixed by the palette step.
163
162
  //
164
163
  // Fixing the plumbing (the arm above) was necessary, not sufficient. On
165
164
  // $color2 — the surface every gallery board is shot on — light warning
166
- // and success $color11 are under mpo's own floor, and those are exactly
167
- // the numbers button-anatomy already prints for its CONTRACT row. The
168
- // step that would close them is a PALETTE change (Radix yellow-11
169
- // #9e6c00 / green-11 #218358), owned by the contrast-floor lane, not by
170
- // the Button. colorRules.ts pins the same warning miss on the intent's
171
- // own color1 (#fcfcf7, 4.44:1); this pins it on the page ground.
165
+ // and success $color11 sat UNDER mpo's own floor at 4.34 and 4.48, and
166
+ // those were exactly the numbers button-anatomy printed for its CONTRACT
167
+ // row. This block used to assert the miss, and said in as many words that
168
+ // stepping the palette should break it rather than be re-baselined away.
172
169
  //
173
- // These numbers are asserted EXACTLY on purpose. Step the palette and
174
- // this test fails, which is the reminder to re-measure the board and
175
- // tick MPO-40's contrast criterion — never a regression to re-baseline.
176
- it("light warning/success $color11 are STILL under 4.5:1 on the $color2 page surface", () => {
170
+ // The palette stepped: `intentInkFloor` in theme/createThemes.ts darkens
171
+ // light yellow-11 (#9e6c00 -> #996900) and green-11 (#218358 -> #1c8257)
172
+ // by the smallest hue-holding amount that clears the floor here. So the
173
+ // assertion is inverted rather than deleted — the ground and the exact
174
+ // ratios stay pinned, because $color2 is the STRICTEST base surface and a
175
+ // future re-lightening has to fail somewhere loud.
176
+ it("light warning/success $color11 now clear 4.5:1 on the $color2 page surface", () => {
177
177
  const ground = houseThemes.light.color2;
178
178
  const measured = Object.fromEntries(
179
179
  INTENTS.map((intent): [string, number] => [
@@ -187,10 +187,13 @@ describe("Button MPO-40 outlined intent label ink", () => {
187
187
  );
188
188
  expect(measured, `light.color2 is ${ground}`).toEqual({
189
189
  error: 4.95,
190
- warning: 4.34,
191
- success: 4.48,
190
+ warning: 4.56,
191
+ success: 4.55,
192
192
  });
193
- expect(measured.warning).toBeLessThan(aaTextContrastRatio);
194
- expect(measured.success).toBeLessThan(aaTextContrastRatio);
193
+ for (const intent of INTENTS) {
194
+ expect(measured[intent], `light_${intent} on light.color2`).toBeGreaterThanOrEqual(
195
+ aaTextContrastRatio,
196
+ );
197
+ }
195
198
  });
196
199
  });
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @vitest-environment jsdom
3
+ *
4
+ * MPO-91: the forms Button's outlined chrome cannot be requested through a
5
+ * channel the component ignores.
6
+ *
7
+ * `ButtonFrame` is `styled(View)` and declares only an `outlined` BOOLEAN.
8
+ * `variant="outlined"` was never read, but `ButtonProps` inherited it from
9
+ * `TamaguiButtonProps`, so 75 call sites across 29 files typechecked, rendered
10
+ * FILLED, and said nothing. The type now Omits `variant`, and this spec pins
11
+ * both halves of that: the type refuses it (checked by `tsgo --noEmit`), and
12
+ * the runtime genuinely ignores it, so the refusal is honest rather than
13
+ * cosmetic.
14
+ *
15
+ * jsdom cannot cascade Tamagui CSS — assertions read the atomic border-color
16
+ * classes the FRAME emits, the same idiom as Button.filledBorder.spec.tsx.
17
+ */
18
+
19
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
20
+ import { cleanup, screen } from "@testing-library/react";
21
+ import { afterEach, describe, expect, it } from "vitest";
22
+ import { Button } from "./index";
23
+
24
+ afterEach(cleanup);
25
+
26
+ function frame(): HTMLElement {
27
+ return screen.getByRole("button");
28
+ }
29
+
30
+ describe("Button outlined channel (MPO-91)", () => {
31
+ it("the outlined boolean is the channel, and it paints $borderColor", () => {
32
+ renderWithProviders(<Button outlined>Outlined</Button>);
33
+ expect(frame().className).toMatch(/_btc-borderColor\b/);
34
+ });
35
+
36
+ it("the type refuses variant, so a dead pass cannot come back silently", () => {
37
+ // THE GUARD. If someone re-adds `variant` to ButtonProps this stops being
38
+ // an error and `tsgo --noEmit` fails on the unused directive — which is
39
+ // the point: the failure is loud either way.
40
+ // @ts-expect-error MPO-91: `variant` is Omitted from ButtonProps on purpose.
41
+ renderWithProviders(<Button variant="outlined">Refused</Button>);
42
+ // ...and the refusal is honest: it really does render filled.
43
+ expect(frame().className).toMatch(/_btc-transparent\b/);
44
+ expect(frame().className).not.toMatch(/_btc-borderColor\b/);
45
+ });
46
+ });
@@ -4,7 +4,8 @@
4
4
  * MPO-46 AC-1: the painted Button, not the recipe source, matches the
5
5
  * measured Tamagui v5 table at $2/$3/$4/$6. Radius used to sit on the
6
6
  * borderRadius knob (flat 9px); it must step with the size token, and
7
- * gap must equal that painted radius at every size and every knob stop.
7
+ * default gap matches that table. Corner shape overrides preserve the
8
+ * internal spacing rather than jamming or separating the icon and label.
8
9
  */
9
10
 
10
11
  import { renderWithProviders } from "@multiplatform.one/test-utils";
@@ -106,7 +107,7 @@ describe("MPO-46 painted Button size ladder", () => {
106
107
  }
107
108
  });
108
109
 
109
- it("gap equals radius at every borderRadius knob stop", () => {
110
+ it("corner overrides preserve the measured internal gap", () => {
110
111
  for (const [stop, px] of Object.entries(KNOB_STOPS) as [keyof typeof KNOB_STOPS, number][]) {
111
112
  renderWithProviders(
112
113
  <Preset overrides={{ borderRadius: stop }}>
@@ -117,7 +118,7 @@ describe("MPO-46 painted Button size ladder", () => {
117
118
  );
118
119
  const frame = screen.getByRole("button");
119
120
  expect(radiusPx(frame), `${stop} radius`).toBe(px);
120
- expect(gapPx(frame), `${stop} gap`).toBe(px);
121
+ expect(gapPx(frame), `${stop} gap`).toBe(MEASURED.$4.radius);
121
122
  cleanup();
122
123
  }
123
124
  });
@@ -8,6 +8,7 @@ import {
8
8
  } from "@multiplatform.one/theme";
9
9
  import { Button as TamaguiButton, Paragraph, XStack, YStack, useTheme } from "tamagui";
10
10
  import { Button } from "./index";
11
+ import { useState } from "react";
11
12
 
12
13
  const pressed = (name: string) => () => action(name)();
13
14
 
@@ -44,6 +45,25 @@ const meta: Meta<typeof Button> = {
44
45
  export default meta;
45
46
  type Story = StoryObj<typeof Button>;
46
47
 
48
+ function DestructiveContrastExample({ disabled = false }: { disabled?: boolean }) {
49
+ const [presses, setPresses] = useState(0);
50
+ return (
51
+ <YStack data-lc-clicks={presses}>
52
+ <Button error disabled={disabled} onPress={() => setPresses((value) => value + 1)}>
53
+ Delete
54
+ </Button>
55
+ </YStack>
56
+ );
57
+ }
58
+
59
+ export const DestructiveEnabled: Story = {
60
+ render: () => <DestructiveContrastExample />,
61
+ };
62
+
63
+ export const DestructiveDisabled: Story = {
64
+ render: () => <DestructiveContrastExample disabled />,
65
+ };
66
+
47
67
  export const Basic: Story = {
48
68
  name: "Main",
49
69
  args: {
@@ -56,8 +56,8 @@ import { useControlGrouped } from "../shared/groupContext";
56
56
  * Coordinated size recipe (Polaris slim/medium/large, Primer s/m/l, Linear
57
57
  * 28/32/40, Spectrum S/M, M3 XS/S). Height, pad, type, icon, gap and radius
58
58
  * step together from the size table. The borderRadius knob is an override
59
- * that retargets both painted radius and inner gap (`resolveControlRadius`).
60
- * Density is a different axis (pad/gap only).
59
+ * of painted corners only (`resolveControlRadius`); internal gap keeps the
60
+ * icon and label grouped. Density selects the same-height compact family.
61
61
  *
62
62
  * GENERATED (LC-75 / LC-80): Button consumes `recipeFamilies.control` — the
63
63
  * handwritten mirror table this file used to carry drifted (md font 13 vs the
@@ -239,7 +239,29 @@ export const ButtonFrame = styled(View, {
239
239
  },
240
240
  });
241
241
 
242
- export interface ButtonProps extends Omit<TamaguiButtonProps, "form" | "icon" | "iconAfter"> {
242
+ /**
243
+ * MPO-91: `variant` is Omitted, and that Omit IS the guard.
244
+ *
245
+ * `ButtonFrame` is `styled(View)` and declares only an `outlined` BOOLEAN, so
246
+ * `variant="outlined"` was never read — it landed on the frame as an unread
247
+ * prop and the button rendered FILLED. Because `TamaguiButtonProps` carries
248
+ * `variant`, the inherited type advertised a channel this component ignores,
249
+ * so 75 call sites across 29 files typechecked, rendered wrong, and said
250
+ * nothing. Declaring the prop and dropping it on the floor is the lying API
251
+ * MPO-81 refused to ship.
252
+ *
253
+ * Omitting it turns every one of those call sites into a compile error instead
254
+ * of a silent no-op, which is what stops the prop coming back. The house
255
+ * channel is the `outlined` boolean.
256
+ *
257
+ * `@multiplatform.one/components`' Button still accepts `variant` and maps it
258
+ * onto `outlined` — that shim is the documented raw-tamagui compat hatch, and
259
+ * it declares the prop itself rather than inheriting it from here.
260
+ */
261
+ export interface ButtonProps extends Omit<
262
+ TamaguiButtonProps,
263
+ "form" | "icon" | "iconAfter" | "variant"
264
+ > {
243
265
  action?: "submit" | "reset";
244
266
  form?: AnyFormApi;
245
267
  loading?: boolean;
@@ -650,7 +672,6 @@ export function Button({
650
672
  circular={!nested && isCircular ? true : undefined}
651
673
  chromeless={selectedFill ? false : chromeless}
652
674
  selected={selectedFill || undefined}
653
- {...(outlined ? { variant: "outlined" as const } : undefined)}
654
675
  {...(!isCircular || nested
655
676
  ? {
656
677
  paddingHorizontal: padX,
@@ -161,7 +161,9 @@ describe("Chip", () => {
161
161
 
162
162
  it("selected chip renders a leading check when no icon is passed", () => {
163
163
  const result = renderWithProviders(<Chip selected>On</Chip>);
164
- expect(result.container.querySelector("svg")).not.toBeNull();
164
+ const fill = result.container.querySelector("svg")?.getAttribute("fill");
165
+ expect(fill).toBeTruthy();
166
+ expect(fill?.startsWith("$")).toBe(false);
165
167
  });
166
168
 
167
169
  it("onPress fires from the chip body and does not fire dismiss", () => {
@@ -436,11 +436,7 @@ export function Chip({
436
436
  ? t("Remove {{label}}", { label: String(children) })
437
437
  : t("Remove");
438
438
  const leading =
439
- icon !== undefined ? (
440
- icon
441
- ) : selected ? (
442
- <CheckIcon size={iconSize} color={textColor as string} />
443
- ) : null;
439
+ icon !== undefined ? icon : selected ? <CheckIcon size={iconSize} color={glyphInk} /> : null;
444
440
 
445
441
  const onBodyKeyDown = ((e: KeyboardEvent) => {
446
442
  if ((e.key === "Enter" || e.key === " ") && onPress) {
@@ -1,10 +1,14 @@
1
1
  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
+ import { useState } from "react";
5
+ import { Preset } from "@multiplatform.one/theme";
4
6
  import { Input as TamaguiInput, Paragraph, YStack, XStack } from "tamagui";
5
7
  import { Button } from "./Button";
6
8
  import { Form } from "./Form";
7
9
  import { Field, FieldLayout } from "./fieldLayout";
10
+ import { Input } from "./fields/Input";
11
+ import { Checkbox } from "./fields/Checkbox";
8
12
 
9
13
  const meta: Meta<typeof FieldLayout> = {
10
14
  title: "Forms/FieldLayout",
@@ -39,6 +43,43 @@ export const Basic: Story = {
39
43
  ),
40
44
  };
41
45
 
46
+ /** Shared message order with real controls, including the inline checkbox row. */
47
+ export const MessageOrder: Story = {
48
+ render: () => {
49
+ const Example = () => {
50
+ const [showErrors, setShowErrors] = useState(false);
51
+ return (
52
+ <YStack gap="$4" width="100%" maxWidth={480}>
53
+ <Input
54
+ id="message-top"
55
+ label="Contact"
56
+ helperText="Use an address where we can reach you"
57
+ error={showErrors ? "Enter a contact address" : undefined}
58
+ />
59
+ <Preset overrides={{ fieldLabelPlacement: "side" }}>
60
+ <Input
61
+ id="message-side"
62
+ label="Office"
63
+ helperText="Use the office name shown on your account"
64
+ error={showErrors ? "Enter your office name" : undefined}
65
+ />
66
+ </Preset>
67
+ <Checkbox
68
+ id="message-inline"
69
+ label="Accept terms"
70
+ helperText="Read the terms before continuing"
71
+ error={showErrors ? "Accept the terms to continue" : undefined}
72
+ />
73
+ <Button onPress={() => setShowErrors((shown) => !shown)}>
74
+ {showErrors ? "Show helpers" : "Show validation"}
75
+ </Button>
76
+ </YStack>
77
+ );
78
+ };
79
+ return <Example />;
80
+ },
81
+ };
82
+
42
83
  export const ErrorStates: Story = {
43
84
  render: () => (
44
85
  <YStack gap="$6" maxWidth={360}>
@@ -57,6 +57,60 @@ function panel(open: boolean) {
57
57
  }
58
58
 
59
59
  describe("FloatingPanel native presentation lifecycle", () => {
60
+ it("keeps full-field triggers stretched and allows content-sized composite adornments", () => {
61
+ for (const triggerSizing of [undefined, "content"] as const) {
62
+ const result = renderWithProviders(
63
+ <FloatingPanel
64
+ open={false}
65
+ onOpenChange={onOpenChange}
66
+ trigger={<Text>Country</Text>}
67
+ triggerSizing={triggerSizing}
68
+ triggerA11y={{ label: "Country code" }}
69
+ >
70
+ <Text>row</Text>
71
+ </FloatingPanel>,
72
+ );
73
+ const trigger = result.getByRole("button", { name: "Country code" });
74
+ expect(getComputedStyle(trigger).width).toBe(triggerSizing === "content" ? "" : "100%");
75
+ expect(getComputedStyle(trigger).alignSelf).toBe("stretch");
76
+ expect(getComputedStyle(trigger.parentElement!).width).toBe(
77
+ triggerSizing === "content" ? "" : "100%",
78
+ );
79
+ result.unmount();
80
+ }
81
+ });
82
+
83
+ it("composes native readiness with entrance and ignores late closed or unmounted events", () => {
84
+ const onNativeShow = vi.fn();
85
+ const example = (open: boolean) => (
86
+ <FloatingPanel
87
+ open={open}
88
+ onOpenChange={onOpenChange}
89
+ onNativeShow={onNativeShow}
90
+ trigger={<Text>Pick</Text>}
91
+ >
92
+ <Text>row</Text>
93
+ </FloatingPanel>
94
+ );
95
+ const result = renderWithProviders(example(true));
96
+ expect(Animated.timing).toHaveBeenCalledTimes(1);
97
+ expect(onNativeShow).not.toHaveBeenCalled();
98
+ const shown = modal.onShow;
99
+ act(() => shown?.());
100
+ expect(onNativeShow).toHaveBeenCalledTimes(1);
101
+ expect(Animated.timing).toHaveBeenCalledTimes(1);
102
+ result.rerender(example(false));
103
+ act(() => shown?.());
104
+ expect(onNativeShow).toHaveBeenCalledTimes(1);
105
+ result.rerender(example(true));
106
+ const nextShown = modal.onShow;
107
+ act(() => nextShown?.());
108
+ expect(onNativeShow).toHaveBeenCalledTimes(2);
109
+ result.unmount();
110
+ act(() => nextShown?.());
111
+ expect(onNativeShow).toHaveBeenCalledTimes(2);
112
+ });
113
+
60
114
  it("enters without onShow and ignores onShow for the same presentation", () => {
61
115
  renderWithProviders(panel(true));
62
116
  expect(Animated.timing).toHaveBeenCalledTimes(1);