@multiplatform.one/forms 7.7.6 → 7.10.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 (497) hide show
  1. package/dist/cjs/Button/index.cjs +1 -4
  2. package/dist/cjs/Button/index.native.js +5 -6
  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 +19 -8
  14. package/dist/cjs/InputParts/index.native.js +20 -11
  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/FileUpload/index.cjs +6 -0
  51. package/dist/cjs/fields/FileUpload/index.native.js +6 -0
  52. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  53. package/dist/cjs/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  54. package/dist/cjs/fields/Geolocation/geocoder.cjs +63 -0
  55. package/dist/cjs/fields/Geolocation/geocoder.native.js +68 -0
  56. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -0
  57. package/dist/cjs/fields/Geolocation/index.cjs +801 -152
  58. package/dist/cjs/fields/Geolocation/index.native.js +856 -167
  59. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  60. package/dist/cjs/fields/Geolocation/nativeSearchFocus.cjs +44 -0
  61. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js +47 -0
  62. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  63. package/dist/cjs/fields/Icon/drawnSet.cjs +16 -3
  64. package/dist/cjs/fields/Icon/drawnSet.native.js +20 -3
  65. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  66. package/dist/cjs/fields/Icon/index.cjs +102 -27
  67. package/dist/cjs/fields/Icon/index.native.js +115 -31
  68. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  69. package/dist/cjs/fields/Input/index.cjs +5 -12
  70. package/dist/cjs/fields/Input/index.native.js +5 -13
  71. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  72. package/dist/cjs/fields/PhoneInput/index.cjs +2 -2
  73. package/dist/cjs/fields/PhoneInput/index.native.js +2 -2
  74. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  75. package/dist/cjs/fields/RadioGroup/index.cjs +34 -5
  76. package/dist/cjs/fields/RadioGroup/index.native.js +49 -7
  77. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  78. package/dist/cjs/fields/SearchInput/index.cjs +8 -9
  79. package/dist/cjs/fields/SearchInput/index.native.js +8 -9
  80. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  81. package/dist/cjs/fields/Select/index.cjs +42 -11
  82. package/dist/cjs/fields/Select/index.native.js +52 -20
  83. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  84. package/dist/cjs/fields/Stepper/index.cjs +144 -31
  85. package/dist/cjs/fields/Stepper/index.native.js +151 -31
  86. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  87. package/dist/cjs/fields/ToggleGroup/index.cjs +35 -2
  88. package/dist/cjs/fields/ToggleGroup/index.native.js +42 -2
  89. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  90. package/dist/cjs/index.cjs +2 -0
  91. package/dist/cjs/index.native.js +2 -0
  92. package/dist/cjs/index.native.js.map +1 -1
  93. package/dist/cjs/shared/focusManagement.cjs +24 -11
  94. package/dist/cjs/shared/focusManagement.native.js +24 -11
  95. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  96. package/dist/cjs/shared/nativeA11y.cjs +57 -0
  97. package/dist/cjs/shared/nativeA11y.native.js +61 -0
  98. package/dist/cjs/shared/nativeA11y.native.js.map +1 -0
  99. package/dist/esm/Button/index.mjs +1 -4
  100. package/dist/esm/Button/index.mjs.map +1 -1
  101. package/dist/esm/Button/index.native.js +5 -6
  102. package/dist/esm/Button/index.native.js.map +1 -1
  103. package/dist/esm/Chip/index.mjs +1 -1
  104. package/dist/esm/Chip/index.mjs.map +1 -1
  105. package/dist/esm/Chip/index.native.js +1 -1
  106. package/dist/esm/Chip/index.native.js.map +1 -1
  107. package/dist/esm/FloatingPanel/index.mjs +58 -15
  108. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  109. package/dist/esm/FloatingPanel/index.native.js +15 -8
  110. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  111. package/dist/esm/FloatingPanel/nestedAction.mjs +11 -0
  112. package/dist/esm/FloatingPanel/nestedAction.mjs.map +1 -0
  113. package/dist/esm/FloatingPanel/nestedAction.native.js +13 -0
  114. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -0
  115. package/dist/esm/InputParts/index.mjs +20 -9
  116. package/dist/esm/InputParts/index.mjs.map +1 -1
  117. package/dist/esm/InputParts/index.native.js +21 -12
  118. package/dist/esm/InputParts/index.native.js.map +1 -1
  119. package/dist/esm/Wheel/index.mjs +3 -3
  120. package/dist/esm/Wheel/index.mjs.map +1 -1
  121. package/dist/esm/Wheel/index.native.js +3 -3
  122. package/dist/esm/Wheel/index.native.js.map +1 -1
  123. package/dist/esm/fieldLayout.mjs +3 -3
  124. package/dist/esm/fieldLayout.mjs.map +1 -1
  125. package/dist/esm/fieldLayout.native.js +3 -3
  126. package/dist/esm/fieldLayout.native.js.map +1 -1
  127. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
  128. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
  129. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  130. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  131. package/dist/esm/fields/Combobox/index.mjs +36 -29
  132. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  133. package/dist/esm/fields/Combobox/index.native.js +38 -38
  134. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  135. package/dist/esm/fields/DatePicker/Calendar.mjs +6 -1
  136. package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
  137. package/dist/esm/fields/DatePicker/Calendar.native.js +6 -1
  138. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  139. package/dist/esm/fields/DatePicker/DateRangePicker.mjs +2 -2
  140. package/dist/esm/fields/DatePicker/DateRangePicker.mjs.map +1 -1
  141. package/dist/esm/fields/DatePicker/DateRangePicker.native.js +2 -2
  142. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  143. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
  144. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  145. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  146. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  147. package/dist/esm/fields/DatePicker/DatetimePicker.native.js +39 -14
  148. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  149. package/dist/esm/fields/DatePicker/MonthPicker.mjs +10 -3
  150. package/dist/esm/fields/DatePicker/MonthPicker.mjs.map +1 -1
  151. package/dist/esm/fields/DatePicker/MonthPicker.native.js +10 -3
  152. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  153. package/dist/esm/fields/DatePicker/MultiDatePicker.mjs +2 -2
  154. package/dist/esm/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
  155. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js +2 -2
  156. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  157. package/dist/esm/fields/DatePicker/index.native.js +3 -0
  158. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  159. package/dist/esm/fields/DatePicker/parts.mjs +28 -16
  160. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  161. package/dist/esm/fields/DatePicker/parts.native.js +30 -16
  162. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  163. package/dist/esm/fields/FileUpload/index.mjs +6 -0
  164. package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
  165. package/dist/esm/fields/FileUpload/index.native.js +6 -0
  166. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  167. package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  168. package/dist/esm/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  169. package/dist/esm/fields/Geolocation/geocoder.mjs +33 -0
  170. package/dist/esm/fields/Geolocation/geocoder.mjs.map +1 -0
  171. package/dist/esm/fields/Geolocation/geocoder.native.js +35 -0
  172. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -0
  173. package/dist/esm/fields/Geolocation/index.mjs +792 -149
  174. package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
  175. package/dist/esm/fields/Geolocation/index.native.js +847 -164
  176. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  177. package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs +19 -0
  178. package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
  179. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js +19 -0
  180. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  181. package/dist/esm/fields/Icon/drawnSet.mjs +16 -3
  182. package/dist/esm/fields/Icon/drawnSet.mjs.map +1 -1
  183. package/dist/esm/fields/Icon/drawnSet.native.js +20 -3
  184. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  185. package/dist/esm/fields/Icon/index.mjs +93 -18
  186. package/dist/esm/fields/Icon/index.mjs.map +1 -1
  187. package/dist/esm/fields/Icon/index.native.js +106 -22
  188. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  189. package/dist/esm/fields/Input/index.mjs +5 -12
  190. package/dist/esm/fields/Input/index.mjs.map +1 -1
  191. package/dist/esm/fields/Input/index.native.js +5 -13
  192. package/dist/esm/fields/Input/index.native.js.map +1 -1
  193. package/dist/esm/fields/PhoneInput/index.mjs +2 -2
  194. package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
  195. package/dist/esm/fields/PhoneInput/index.native.js +2 -2
  196. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  197. package/dist/esm/fields/RadioGroup/index.mjs +34 -5
  198. package/dist/esm/fields/RadioGroup/index.mjs.map +1 -1
  199. package/dist/esm/fields/RadioGroup/index.native.js +49 -7
  200. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  201. package/dist/esm/fields/SearchInput/index.mjs +9 -10
  202. package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
  203. package/dist/esm/fields/SearchInput/index.native.js +9 -10
  204. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  205. package/dist/esm/fields/Select/index.mjs +42 -11
  206. package/dist/esm/fields/Select/index.mjs.map +1 -1
  207. package/dist/esm/fields/Select/index.native.js +52 -20
  208. package/dist/esm/fields/Select/index.native.js.map +1 -1
  209. package/dist/esm/fields/Stepper/index.mjs +145 -32
  210. package/dist/esm/fields/Stepper/index.mjs.map +1 -1
  211. package/dist/esm/fields/Stepper/index.native.js +152 -32
  212. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  213. package/dist/esm/fields/ToggleGroup/index.mjs +35 -2
  214. package/dist/esm/fields/ToggleGroup/index.mjs.map +1 -1
  215. package/dist/esm/fields/ToggleGroup/index.native.js +42 -2
  216. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  217. package/dist/esm/index.mjs +2 -1
  218. package/dist/esm/index.mjs.map +1 -1
  219. package/dist/esm/index.native.js +2 -1
  220. package/dist/esm/index.native.js.map +1 -1
  221. package/dist/esm/shared/focusManagement.mjs +24 -11
  222. package/dist/esm/shared/focusManagement.mjs.map +1 -1
  223. package/dist/esm/shared/focusManagement.native.js +24 -11
  224. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  225. package/dist/esm/shared/nativeA11y.mjs +31 -0
  226. package/dist/esm/shared/nativeA11y.mjs.map +1 -0
  227. package/dist/esm/shared/nativeA11y.native.js +32 -0
  228. package/dist/esm/shared/nativeA11y.native.js.map +1 -0
  229. package/dist/jsx/Button/index.mjs +1 -4
  230. package/dist/jsx/Button/index.mjs.map +1 -1
  231. package/dist/jsx/Button/index.native.js +5 -6
  232. package/dist/jsx/Button/index.native.js.map +1 -1
  233. package/dist/jsx/Chip/index.mjs +1 -1
  234. package/dist/jsx/Chip/index.mjs.map +1 -1
  235. package/dist/jsx/Chip/index.native.js +1 -1
  236. package/dist/jsx/Chip/index.native.js.map +1 -1
  237. package/dist/jsx/FloatingPanel/index.mjs +58 -15
  238. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  239. package/dist/jsx/FloatingPanel/index.native.js +16 -7
  240. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  241. package/dist/jsx/FloatingPanel/nestedAction.mjs +11 -0
  242. package/dist/jsx/FloatingPanel/nestedAction.mjs.map +1 -0
  243. package/dist/jsx/FloatingPanel/nestedAction.native.js +42 -0
  244. package/dist/jsx/FloatingPanel/nestedAction.native.js.map +1 -0
  245. package/dist/jsx/InputParts/index.mjs +20 -9
  246. package/dist/jsx/InputParts/index.mjs.map +1 -1
  247. package/dist/jsx/InputParts/index.native.js +20 -11
  248. package/dist/jsx/InputParts/index.native.js.map +1 -1
  249. package/dist/jsx/Wheel/index.mjs +3 -3
  250. package/dist/jsx/Wheel/index.mjs.map +1 -1
  251. package/dist/jsx/Wheel/index.native.js +3 -3
  252. package/dist/jsx/Wheel/index.native.js.map +1 -1
  253. package/dist/jsx/fieldLayout.mjs +3 -3
  254. package/dist/jsx/fieldLayout.mjs.map +1 -1
  255. package/dist/jsx/fieldLayout.native.js +3 -3
  256. package/dist/jsx/fieldLayout.native.js.map +1 -1
  257. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
  258. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
  259. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  260. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  261. package/dist/jsx/fields/Combobox/index.mjs +36 -29
  262. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  263. package/dist/jsx/fields/Combobox/index.native.js +38 -38
  264. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  265. package/dist/jsx/fields/DatePicker/Calendar.mjs +6 -1
  266. package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
  267. package/dist/jsx/fields/DatePicker/Calendar.native.js +6 -1
  268. package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
  269. package/dist/jsx/fields/DatePicker/DateRangePicker.mjs +2 -2
  270. package/dist/jsx/fields/DatePicker/DateRangePicker.mjs.map +1 -1
  271. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
  272. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  273. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
  274. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  275. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  276. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  277. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +39 -14
  278. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  279. package/dist/jsx/fields/DatePicker/MonthPicker.mjs +10 -3
  280. package/dist/jsx/fields/DatePicker/MonthPicker.mjs.map +1 -1
  281. package/dist/jsx/fields/DatePicker/MonthPicker.native.js +10 -3
  282. package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
  283. package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs +2 -2
  284. package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
  285. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
  286. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  287. package/dist/jsx/fields/DatePicker/index.native.js +3 -0
  288. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  289. package/dist/jsx/fields/DatePicker/parts.mjs +28 -16
  290. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  291. package/dist/jsx/fields/DatePicker/parts.native.js +28 -14
  292. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  293. package/dist/jsx/fields/FileUpload/index.mjs +6 -0
  294. package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
  295. package/dist/jsx/fields/FileUpload/index.native.js +6 -0
  296. package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
  297. package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  298. package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  299. package/dist/jsx/fields/Geolocation/geocoder.mjs +33 -0
  300. package/dist/jsx/fields/Geolocation/geocoder.mjs.map +1 -0
  301. package/dist/jsx/fields/Geolocation/geocoder.native.js +68 -0
  302. package/dist/jsx/fields/Geolocation/geocoder.native.js.map +1 -0
  303. package/dist/jsx/fields/Geolocation/index.mjs +792 -149
  304. package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
  305. package/dist/jsx/fields/Geolocation/index.native.js +856 -167
  306. package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
  307. package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs +19 -0
  308. package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
  309. package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js +47 -0
  310. package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  311. package/dist/jsx/fields/Icon/drawnSet.mjs +16 -3
  312. package/dist/jsx/fields/Icon/drawnSet.mjs.map +1 -1
  313. package/dist/jsx/fields/Icon/drawnSet.native.js +20 -3
  314. package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
  315. package/dist/jsx/fields/Icon/index.mjs +93 -18
  316. package/dist/jsx/fields/Icon/index.mjs.map +1 -1
  317. package/dist/jsx/fields/Icon/index.native.js +115 -31
  318. package/dist/jsx/fields/Icon/index.native.js.map +1 -1
  319. package/dist/jsx/fields/Input/index.mjs +5 -12
  320. package/dist/jsx/fields/Input/index.mjs.map +1 -1
  321. package/dist/jsx/fields/Input/index.native.js +5 -13
  322. package/dist/jsx/fields/Input/index.native.js.map +1 -1
  323. package/dist/jsx/fields/PhoneInput/index.mjs +2 -2
  324. package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
  325. package/dist/jsx/fields/PhoneInput/index.native.js +2 -2
  326. package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
  327. package/dist/jsx/fields/RadioGroup/index.mjs +34 -5
  328. package/dist/jsx/fields/RadioGroup/index.mjs.map +1 -1
  329. package/dist/jsx/fields/RadioGroup/index.native.js +49 -7
  330. package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
  331. package/dist/jsx/fields/SearchInput/index.mjs +9 -10
  332. package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
  333. package/dist/jsx/fields/SearchInput/index.native.js +8 -9
  334. package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
  335. package/dist/jsx/fields/Select/index.mjs +42 -11
  336. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  337. package/dist/jsx/fields/Select/index.native.js +52 -20
  338. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  339. package/dist/jsx/fields/Stepper/index.mjs +145 -32
  340. package/dist/jsx/fields/Stepper/index.mjs.map +1 -1
  341. package/dist/jsx/fields/Stepper/index.native.js +151 -31
  342. package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
  343. package/dist/jsx/fields/ToggleGroup/index.mjs +35 -2
  344. package/dist/jsx/fields/ToggleGroup/index.mjs.map +1 -1
  345. package/dist/jsx/fields/ToggleGroup/index.native.js +42 -2
  346. package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
  347. package/dist/jsx/index.js +2 -1
  348. package/dist/jsx/index.js.map +1 -1
  349. package/dist/jsx/index.mjs +2 -1
  350. package/dist/jsx/index.mjs.map +1 -1
  351. package/dist/jsx/index.native.js +2 -0
  352. package/dist/jsx/index.native.js.map +1 -1
  353. package/dist/jsx/shared/focusManagement.mjs +24 -11
  354. package/dist/jsx/shared/focusManagement.mjs.map +1 -1
  355. package/dist/jsx/shared/focusManagement.native.js +24 -11
  356. package/dist/jsx/shared/focusManagement.native.js.map +1 -1
  357. package/dist/jsx/shared/nativeA11y.mjs +31 -0
  358. package/dist/jsx/shared/nativeA11y.mjs.map +1 -0
  359. package/dist/jsx/shared/nativeA11y.native.js +61 -0
  360. package/dist/jsx/shared/nativeA11y.native.js.map +1 -0
  361. package/package.json +9 -7
  362. package/src/Button/Button.fontWeight.spec.tsx +75 -0
  363. package/src/Button/Button.labelInk.spec.tsx +21 -18
  364. package/src/Button/Button.outlinedChannel.spec.tsx +46 -0
  365. package/src/Button/Button.sizeLadder.spec.tsx +4 -3
  366. package/src/Button/Button.stories.tsx +20 -0
  367. package/src/Button/index.tsx +30 -7
  368. package/src/Chip/Chip.spec.tsx +3 -1
  369. package/src/Chip/index.tsx +1 -5
  370. package/src/FieldGroup.stories.tsx +3 -7
  371. package/src/FieldLayout.stories.tsx +75 -12
  372. package/src/Fieldset.stories.tsx +3 -7
  373. package/src/FloatingPanel/FloatingPanel.native.spec.tsx +54 -0
  374. package/src/FloatingPanel/FloatingPanel.spec.tsx +109 -0
  375. package/src/FloatingPanel/index.native.tsx +24 -7
  376. package/src/FloatingPanel/index.tsx +80 -13
  377. package/src/FloatingPanel/nestedAction.spec.ts +36 -0
  378. package/src/FloatingPanel/nestedAction.ts +15 -0
  379. package/src/FloatingPanel/panelWidthContract.spec.ts +12 -15
  380. package/src/FormGrid.stories.tsx +5 -11
  381. package/src/FormsIntegration.stories.tsx +2 -6
  382. package/src/InputParts/InputButton.spec.tsx +16 -0
  383. package/src/InputParts/index.tsx +34 -7
  384. package/src/InputParts/layoutGap.spec.tsx +43 -0
  385. package/src/Wheel/Wheel.spec.tsx +16 -0
  386. package/src/Wheel/index.tsx +3 -3
  387. package/src/fieldFamilyStories.radius.spec.tsx +118 -0
  388. package/src/fieldLayout.spec.tsx +42 -1
  389. package/src/fieldLayout.tsx +9 -9
  390. package/src/fields/Barcode/Barcode.spec.tsx +2 -0
  391. package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +18 -0
  392. package/src/fields/Checkbox/CheckboxFieldFrame.tsx +6 -1
  393. package/src/fields/Combobox/Combobox.spec.tsx +48 -1
  394. package/src/fields/Combobox/index.tsx +53 -39
  395. package/src/fields/DatePicker/Calendar.tsx +4 -1
  396. package/src/fields/DatePicker/DatePicker.stories.tsx +22 -1
  397. package/src/fields/DatePicker/DateRangePicker.tsx +4 -2
  398. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +21 -19
  399. package/src/fields/DatePicker/DatetimePicker.native.spec.tsx +144 -0
  400. package/src/fields/DatePicker/DatetimePicker.native.tsx +57 -32
  401. package/src/fields/DatePicker/DatetimePicker.stories.tsx +22 -0
  402. package/src/fields/DatePicker/MonthPicker.tsx +8 -3
  403. package/src/fields/DatePicker/MultiDatePicker.tsx +4 -2
  404. package/src/fields/DatePicker/index.native.tsx +1 -0
  405. package/src/fields/DatePicker/parts.spec.tsx +56 -0
  406. package/src/fields/DatePicker/parts.tsx +33 -12
  407. package/src/fields/FileUpload/FileUpload.spec.tsx +29 -0
  408. package/src/fields/FileUpload/index.tsx +6 -0
  409. package/src/fields/Geolocation/Geolocation.spec.tsx +287 -35
  410. package/src/fields/Geolocation/Geolocation.stories.tsx +141 -7
  411. package/src/fields/Geolocation/GeolocationMap.native.tsx +3 -0
  412. package/src/fields/Geolocation/GeolocationMap.tsx +4 -0
  413. package/src/fields/Geolocation/geocoder.spec.ts +59 -0
  414. package/src/fields/Geolocation/geocoder.ts +84 -0
  415. package/src/fields/Geolocation/geocoderSeam.spec.tsx +203 -0
  416. package/src/fields/Geolocation/index.tsx +912 -180
  417. package/src/fields/Geolocation/nativeSearchFocus.spec.ts +34 -0
  418. package/src/fields/Geolocation/nativeSearchFocus.ts +19 -0
  419. package/src/fields/Geolocation/salvage.spec.tsx +398 -0
  420. package/src/fields/Geolocation/storyProviders.spec.tsx +44 -0
  421. package/src/fields/Icon/Icon.spec.tsx +215 -1
  422. package/src/fields/Icon/Icon.stories.tsx +9 -1
  423. package/src/fields/Icon/drawnSet.tsx +44 -4
  424. package/src/fields/Icon/index.tsx +118 -18
  425. package/src/fields/Input/Input.copy.spec.tsx +1 -0
  426. package/src/fields/Input/Input.spec.tsx +50 -0
  427. package/src/fields/Input/Input.stories.tsx +1 -1
  428. package/src/fields/Input/index.tsx +7 -13
  429. package/src/fields/PhoneInput/index.tsx +2 -2
  430. package/src/fields/RadioGroup/RadioGroup.native.spec.tsx +67 -0
  431. package/src/fields/RadioGroup/index.tsx +82 -8
  432. package/src/fields/SearchInput/SearchInput.spec.tsx +14 -0
  433. package/src/fields/SearchInput/index.tsx +5 -6
  434. package/src/fields/Select/Select.spec.tsx +54 -0
  435. package/src/fields/Select/index.tsx +52 -17
  436. package/src/fields/Stepper/Stepper.spec.tsx +34 -1
  437. package/src/fields/Stepper/index.tsx +193 -33
  438. package/src/fields/ToggleGroup/ToggleGroup.native.spec.tsx +73 -0
  439. package/src/fields/ToggleGroup/ToggleGroup.spec.tsx +49 -0
  440. package/src/fields/ToggleGroup/index.tsx +76 -1
  441. package/src/index.ts +9 -0
  442. package/src/shared/focusManagement.spec.tsx +68 -0
  443. package/src/shared/focusManagement.ts +20 -10
  444. package/src/shared/nativeA11y.spec.ts +64 -0
  445. package/src/shared/nativeA11y.ts +80 -0
  446. package/types/Button/index.d.ts +22 -3
  447. package/types/Button/index.d.ts.map +1 -1
  448. package/types/Chip/index.d.ts.map +1 -1
  449. package/types/FloatingPanel/index.d.ts +11 -1
  450. package/types/FloatingPanel/index.d.ts.map +1 -1
  451. package/types/FloatingPanel/index.native.d.ts +2 -1
  452. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  453. package/types/FloatingPanel/nestedAction.d.ts +13 -0
  454. package/types/FloatingPanel/nestedAction.d.ts.map +1 -0
  455. package/types/InputParts/index.d.ts.map +1 -1
  456. package/types/fields/Checkbox/CheckboxFieldFrame.d.ts +46 -2
  457. package/types/fields/Checkbox/CheckboxFieldFrame.d.ts.map +1 -1
  458. package/types/fields/Checkbox/index.d.ts +3 -3
  459. package/types/fields/Combobox/index.d.ts +3 -1
  460. package/types/fields/Combobox/index.d.ts.map +1 -1
  461. package/types/fields/DatePicker/Calendar.d.ts.map +1 -1
  462. package/types/fields/DatePicker/DateRangePicker.d.ts.map +1 -1
  463. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  464. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
  465. package/types/fields/DatePicker/MonthPicker.d.ts.map +1 -1
  466. package/types/fields/DatePicker/MultiDatePicker.d.ts.map +1 -1
  467. package/types/fields/DatePicker/index.native.d.ts.map +1 -1
  468. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  469. package/types/fields/FileUpload/index.d.ts.map +1 -1
  470. package/types/fields/Geolocation/GeolocationMap.d.ts +4 -0
  471. package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
  472. package/types/fields/Geolocation/GeolocationMap.native.d.ts +3 -0
  473. package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
  474. package/types/fields/Geolocation/geocoder.d.ts +53 -0
  475. package/types/fields/Geolocation/geocoder.d.ts.map +1 -0
  476. package/types/fields/Geolocation/index.d.ts +18 -2
  477. package/types/fields/Geolocation/index.d.ts.map +1 -1
  478. package/types/fields/Geolocation/nativeSearchFocus.d.ts +8 -0
  479. package/types/fields/Geolocation/nativeSearchFocus.d.ts.map +1 -0
  480. package/types/fields/Icon/drawnSet.d.ts.map +1 -1
  481. package/types/fields/Icon/index.d.ts.map +1 -1
  482. package/types/fields/Input/index.d.ts.map +1 -1
  483. package/types/fields/PhoneInput/index.d.ts.map +1 -1
  484. package/types/fields/RadioGroup/index.d.ts +30 -3
  485. package/types/fields/RadioGroup/index.d.ts.map +1 -1
  486. package/types/fields/SearchInput/index.d.ts.map +1 -1
  487. package/types/fields/Select/index.d.ts.map +1 -1
  488. package/types/fields/Stepper/index.d.ts.map +1 -1
  489. package/types/fields/ToggleGroup/index.d.ts +31 -2
  490. package/types/fields/ToggleGroup/index.d.ts.map +1 -1
  491. package/types/index.d.ts +2 -0
  492. package/types/index.d.ts.map +1 -1
  493. package/types/shared/focusManagement.d.ts +2 -2
  494. package/types/shared/focusManagement.d.ts.map +1 -1
  495. package/types/shared/nativeA11y.d.ts +61 -0
  496. package/types/shared/nativeA11y.d.ts.map +1 -0
  497. package/src/router.d.ts +0 -16
@@ -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":"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","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ const nativeChoiceRole = "button";
2
+ function composeA11yName(groupName, ownName) {
3
+ const group = groupName?.trim();
4
+ return group ? `${group}, ${ownName}` : ownName;
5
+ }
6
+ function choiceItemA11y({
7
+ name,
8
+ selected,
9
+ disabled,
10
+ hint
11
+ }) {
12
+ return {
13
+ accessible: true,
14
+ role: nativeChoiceRole,
15
+ accessibilityRole: nativeChoiceRole,
16
+ accessibilityLabel: name,
17
+ // `selected` is what a reader announces for a segment, `checked` what it
18
+ // announces for a radio; the iOS tree surfaces them as `selected: true`
19
+ // and `value: "checked"`. Both are set so one shape serves both controls.
20
+ accessibilityState: {
21
+ disabled,
22
+ selected,
23
+ checked: selected
24
+ },
25
+ ...(hint ? {
26
+ accessibilityHint: hint
27
+ } : void 0)
28
+ };
29
+ }
30
+ export { choiceItemA11y, composeA11yName };
31
+ //# sourceMappingURL=nativeA11y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["nativeChoiceRole","composeA11yName","groupName","ownName","group","trim","choiceItemA11y","name","selected","disabled","hint","accessible","role","accessibilityRole","accessibilityLabel","accessibilityState","checked","accessibilityHint"],"sources":["../../../src/shared/nativeA11y.ts"],"sourcesContent":[null],"mappings":"AAiCA,MAAMA,gBAAA,GAAmB;AAiBlB,SAASC,gBAAgBC,SAAA,EAA+BC,OAAA,EAAyB;EACtF,MAAMC,KAAA,GAAQF,SAAA,EAAWG,IAAA,CAAK;EAC9B,OAAOD,KAAA,GAAQ,GAAGA,KAAK,KAAKD,OAAO,KAAKA,OAAA;AAC1C;AAEO,SAASG,eAAe;EAC7BC,IAAA;EACAC,QAAA;EACAC,QAAA;EACAC;AACF,GAOoB;EAClB,OAAO;IACLC,UAAA,EAAY;IACZC,IAAA,EAAMZ,gBAAA;IACNa,iBAAA,EAAmBb,gBAAA;IACnBc,kBAAA,EAAoBP,IAAA;IAAA;IAAA;IAAA;IAIpBQ,kBAAA,EAAoB;MAAEN,QAAA;MAAUD,QAAA;MAAUQ,OAAA,EAASR;IAAS;IAC5D,IAAIE,IAAA,GAAO;MAAEO,iBAAA,EAAmBP;IAAK,IAAI;EAC3C;AACF","ignoreList":[]}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
+ value: true
24
+ }), mod);
25
+ var nativeA11y_exports = {};
26
+ __export(nativeA11y_exports, {
27
+ choiceItemA11y: () => choiceItemA11y,
28
+ composeA11yName: () => composeA11yName
29
+ });
30
+ module.exports = __toCommonJS(nativeA11y_exports);
31
+ var nativeChoiceRole = "button";
32
+ function composeA11yName(groupName, ownName) {
33
+ var group = groupName === null || groupName === void 0 ? void 0 : groupName.trim();
34
+ return group ? `${group}, ${ownName}` : ownName;
35
+ }
36
+ function choiceItemA11y(param) {
37
+ var {
38
+ name,
39
+ selected,
40
+ disabled,
41
+ hint
42
+ } = param;
43
+ return {
44
+ accessible: true,
45
+ role: nativeChoiceRole,
46
+ accessibilityRole: nativeChoiceRole,
47
+ accessibilityLabel: name,
48
+ // `selected` is what a reader announces for a segment, `checked` what it
49
+ // announces for a radio; the iOS tree surfaces them as `selected: true`
50
+ // and `value: "checked"`. Both are set so one shape serves both controls.
51
+ accessibilityState: {
52
+ disabled,
53
+ selected,
54
+ checked: selected
55
+ },
56
+ ...(hint ? {
57
+ accessibilityHint: hint
58
+ } : void 0)
59
+ };
60
+ }
61
+ //# sourceMappingURL=nativeA11y.native.js.map
@@ -0,0 +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","nativeA11y_exports","choiceItemA11y","composeA11yName"],"sources":["../../../src/shared/nativeA11y.ts"],"sourcesContent":[null],"mappings":"AAiCA,YAAM;;AAiBC,IAAAA,SAAS,GAAAC,MAAA,CAAAC,cAA+C;AAC7D,IAAAC,gBAAc,GAAAF,MAAW,CAAAG,wBAAK;AAC9B,IAAAC,iBAAkB,GAAAJ,MAAU,CAAAK,mBAAY;AAC1C,IAAAC,YAAA,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAEO,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAeC,GAAA;EAC7B,SAAAC,IAAA,IAAAD,GAAA,EACAZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAAA;AACA,IACAC,WAAA,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA;EACF,IAOoBF,IAAA,WAAAA,IAAA,wBAAAA,IAAA;IAClB,KAAO,IAAAG,GAAA,IAAAhB,iBAAA,CAAAa,IAAA,GACL,KAAAX,YAAY,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EACZnB,SAAM,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EAAA;EACa,OACnBE,EAAA;AAAoB;AAAA,IAAAM,YAAA,GAAAC,GAAA,IAAAR,WAAA,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAAA,IAAAE,kBAAA;AAAAhB,QAIpB,CAAAgB,kBAAsB;EAAsCC,cAC/C,EAAAA,CAAA,KAAAA,cAAmB;EAClCC,eAAA,EAAAA,CAAA,KAAAA;AACF","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.10.0",
4
4
  "description": "Cross-platform form components with URL state management",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -64,15 +64,17 @@
64
64
  "@tamagui/roving-focus": "2.7.6",
65
65
  "@tamagui/web": "2.7.6",
66
66
  "@tanstack/react-form": "^1.29.1",
67
+ "@tanstack/react-store": "0.9.2",
67
68
  "expo-camera": "~55.0.18",
68
69
  "expo-linear-gradient": "~55.0.13",
69
70
  "html5-qrcode": "^2.3.8",
70
71
  "perfect-freehand": "^1.2.3",
71
72
  "react-native-svg": "15.15.4",
72
73
  "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"
74
+ "@multiplatform.one/platform": "7.10.0",
75
+ "@multiplatform.one/theme": "7.10.0",
76
+ "@multiplatform.one/table-primitives": "7.10.0",
77
+ "@multiplatform.one/router": "7.10.0"
76
78
  },
77
79
  "devDependencies": {
78
80
  "@tamagui/build": "2.7.6",
@@ -94,9 +96,9 @@
94
96
  "react-i18next": "^16.6.6",
95
97
  "react-native-web": "^0.21.2",
96
98
  "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"
99
+ "@multiplatform.one/config": "7.10.0",
100
+ "@multiplatform.one/test-utils": "7.10.0",
101
+ "@multiplatform.one/storybook": "7.10.0"
100
102
  },
101
103
  "peerDependencies": {
102
104
  "@react-native-community/datetimepicker": ">=8.0.1",
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @vitest-environment jsdom
3
+ *
4
+ * MPO-125: the `fontWeight` knob must reach the Button LABEL. A literal
5
+ * `fontWeight="400"` sat after the `knobProps.body` spread and pinned the
6
+ * label at 400 in both schemes, while Input and Select moved to 700 off the
7
+ * same knob. `docs/design/knob-laws.md` § Family rules already says
8
+ * `button | ... | fonts honour`, so the render was the thing that was wrong.
9
+ *
10
+ * The weight is read off the TEXT NODE, not the frame — the frame reported
11
+ * 400 either way, which is how the defect survived. jsdom cannot cascade
12
+ * Tamagui CSS, so the rendered value is the atomic class the text node emits
13
+ * (`_fow-700`); it exists only when the prop survived the merge, which is the
14
+ * thing under test. Same measurement Button.labelInk.spec.tsx uses.
15
+ */
16
+
17
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
18
+ import { Preset } from "@multiplatform.one/theme";
19
+ import { cleanup, screen } from "@testing-library/react";
20
+ import { Theme } from "tamagui";
21
+ import { afterEach, describe, expect, it } from "vitest";
22
+ import { Button } from "./index";
23
+
24
+ afterEach(cleanup);
25
+
26
+ const SCHEMES = ["light", "dark"] as const;
27
+
28
+ function inkWeight(el: HTMLElement): string {
29
+ const inline = el.style.fontWeight;
30
+ if (inline) return String(inline);
31
+ for (const cls of String(el.className ?? "").split(/\s+/)) {
32
+ const match = cls.match(/^_fow-(\d+)$/);
33
+ if (match) return match[1];
34
+ }
35
+ return "";
36
+ }
37
+
38
+ function labelNode(
39
+ fontWeight: "regular" | "bold",
40
+ scheme: (typeof SCHEMES)[number],
41
+ label: string,
42
+ ): HTMLElement {
43
+ renderWithProviders(
44
+ <Theme name={scheme}>
45
+ <Preset overrides={{ fontWeight }}>
46
+ <Button>{label}</Button>
47
+ </Preset>
48
+ </Theme>,
49
+ );
50
+ const node = screen.getByText(label) as HTMLElement;
51
+ expect(node.tagName).not.toBe("BUTTON");
52
+ return node;
53
+ }
54
+
55
+ describe("Button MPO-125 fontWeight knob", () => {
56
+ it.each(SCHEMES)("%s: bold takes the label to 700", (scheme) => {
57
+ const node = labelNode("bold", scheme, `bold-${scheme}`);
58
+ expect(inkWeight(node)).toBe("700");
59
+ expect(node.className).not.toMatch(/_fow-400\b/);
60
+ });
61
+
62
+ it.each(SCHEMES)("%s: regular keeps the label at 400", (scheme) => {
63
+ const node = labelNode("regular", scheme, `regular-${scheme}`);
64
+ expect(inkWeight(node)).toBe("400");
65
+ expect(node.className).not.toMatch(/_fow-700\b/);
66
+ });
67
+
68
+ it.each(SCHEMES)("%s: the size variant never leaks 500/600 at either stop", (scheme) => {
69
+ for (const stop of ["regular", "bold"] as const) {
70
+ const node = labelNode(stop, scheme, `leak-${stop}-${scheme}`);
71
+ expect(node.className).not.toMatch(/_fow-500\b/);
72
+ expect(node.className).not.toMatch(/_fow-600\b/);
73
+ }
74
+ });
75
+ });
@@ -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;
@@ -523,9 +545,11 @@ export function Button({
523
545
  // LC-40: on the washed disabled chrome the label leaves the on-fill
524
546
  // foreground and pins to the lowest AA tier (keepLabel keeps >=4.5:1).
525
547
  {...(isDisabled ? disabledState.textKnobProps : undefined)}
526
- // Boards measure ink.weight on the TEXT NODE, never the frame.
527
- // Regular 400 — SizableText size variants otherwise leak 500/600.
528
- fontWeight="400"
548
+ // Boards measure ink.weight on the TEXT NODE, never the frame. The
549
+ // prop is restated after the spreads because SizableText's size
550
+ // variant otherwise leaks 500/600 over it (MPO-125: a literal 400
551
+ // here pinned the label and swallowed the fontWeight knob).
552
+ fontWeight={knobProps.body.fontWeight}
529
553
  transition={knobProps.transition}
530
554
  >
531
555
  {label}
@@ -650,7 +674,6 @@ export function Button({
650
674
  circular={!nested && isCircular ? true : undefined}
651
675
  chromeless={selectedFill ? false : chromeless}
652
676
  selected={selectedFill || undefined}
653
- {...(outlined ? { variant: "outlined" as const } : undefined)}
654
677
  {...(!isCircular || nested
655
678
  ? {
656
679
  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,8 +1,8 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
2
- import { Input as TamaguiInput, YStack } from "tamagui";
2
+ import { YStack } from "tamagui";
3
3
  import { FieldGroup } from "./FieldGroup";
4
4
  import { FormSection, FormSectionStack } from "./FormSection";
5
- import { FieldLayout } from "./fieldLayout";
5
+ import { Input } from "./fields/Input";
6
6
 
7
7
  const meta: Meta<typeof FieldGroup> = {
8
8
  title: "Forms/FieldGroup",
@@ -18,11 +18,7 @@ export default meta;
18
18
  type Story = StoryObj<typeof FieldGroup>;
19
19
 
20
20
  function Field({ id, label }: { id: string; label: string }) {
21
- return (
22
- <FieldLayout id={id} label={label}>
23
- <TamaguiInput id={id} placeholder={label} />
24
- </FieldLayout>
25
- );
21
+ return <Input id={id} label={label} placeholder={label} />;
26
22
  }
27
23
 
28
24
  export const Basic: Story = {