@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
@@ -1,20 +1,45 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { ensureFocusVisibleRing, useResolvedKnobs } from "@multiplatform.one/theme";
3
- import { NavigationArrowIcon } from "@phosphor-icons/react";
4
- import { useCallback, useEffect, useRef, useState } from "react";
5
- import { Spinner, Text, View, XStack, YStack, isWeb } from "tamagui";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ensureFocusVisibleRing, pressTargetHitSlop, useResolvedKnobs, useGlyphColor } from "@multiplatform.one/theme";
3
+ import { MagnifyingGlassIcon, MapPinIcon, NavigationArrowIcon, XIcon } from "@phosphor-icons/react";
4
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
5
+ import { ScrollView, Spinner, Text, View, XStack, YStack, isWeb } from "tamagui";
6
6
  import { AdaptivePopup } from "../../AdaptivePopup/index.native.js";
7
7
  import { Button } from "../../Button/index.native.js";
8
8
  import { Field, FieldLayout } from "../../fieldLayout.native.js";
9
- import { FloatingPanel } from "../../FloatingPanel/index.native.js";
10
- import { GeolocationMap } from "./GeolocationMap.native.js";
11
- import { detectGeoShape, formatGeoValue, parseGeoValue } from "./geoValue.native.js";
9
+ import { FloatingPanel, useViewportGtSm } from "../../FloatingPanel/index.native.js";
12
10
  import { Input as InputParts } from "../../InputParts/index.native.js";
13
11
  import { Skeleton } from "../../Skeleton/index.native.js";
12
+ import { GeolocationMap } from "./GeolocationMap.native.js";
13
+ import { createNativeSearchFocus } from "./nativeSearchFocus.native.js";
14
+ import { detectGeoShape, formatGeoValue, parseGeoValue } from "./geoValue.native.js";
14
15
  import { queryPermissionState } from "../../shared/capabilityPreflight.native.js";
15
16
  import { formCommonColors, formInputColors } from "../../shared/colorRamps.native.js";
16
17
  import { t } from "../../shared/t.native.js";
18
+ import { pressSlopProps } from "../../shared/pressSlopProps.native.js";
19
+ import { useIsInTableCell } from "../../shared/tableCellContext.native.js";
20
+ import { zIndex } from "../../shared/zIndex.native.js";
17
21
  import { clampRadiusForLargeComponent, getFieldError, getFieldHeight, mergeFieldHandler, useFormField, useResolvedValidators } from "../../shared/utils.native.js";
22
+ import { clampLat, clampLng, formatCoordPair, formatPlace, parseLatLngPair, resolveGeocoder } from "./geocoder.native.js";
23
+ import { clampLat as clampLat2, clampLng as clampLng2, formatCoordPair as formatCoordPair2, formatPlace as formatPlace2, parseLatLngPair as parseLatLngPair2, resolveGeocoder as resolveGeocoder2 } from "./geocoder.native.js";
24
+ function _instanceof(left, right) {
25
+ "@swc/helpers - instanceof";
26
+
27
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
28
+ return !!right[Symbol.hasInstance](left);
29
+ } else {
30
+ return left instanceof right;
31
+ }
32
+ }
33
+ function coordinateKey(param) {
34
+ var {
35
+ lat,
36
+ lng
37
+ } = param;
38
+ return `${lat},${lng}`;
39
+ }
40
+ var SEARCH_DEBOUNCE_MS = 300;
41
+ var COORD_LINE_HEIGHT = 28;
42
+ var RESULTS_PANEL_SHADOW = "0px 8px 28px rgba(0,0,0,0.12), 0px 2px 6px rgba(0,0,0,0.04)";
18
43
  async function preflightGeolocation() {
19
44
  if (typeof navigator === "undefined" || !navigator.geolocation) {
20
45
  var insecure = typeof window !== "undefined" && window.isSecureContext === false;
@@ -47,15 +72,6 @@ function mapGeolocationError(err) {
47
72
  }
48
73
  return err.message || t("Failed to get location");
49
74
  }
50
- function clampLat(val) {
51
- return Math.max(-90, Math.min(90, val));
52
- }
53
- function clampLng(val) {
54
- return Math.max(-180, Math.min(180, val));
55
- }
56
- function formatCoordChip(lat, lng) {
57
- return `${lat.toFixed(4)}, ${lng.toFixed(4)}`;
58
- }
59
75
  function tryParseCoord(text, clamp) {
60
76
  var trimmed = text.trim();
61
77
  if (trimmed === "" || trimmed === "-" || trimmed === "." || trimmed === "-.") return void 0;
@@ -212,8 +228,143 @@ function ExpandedMapView(param) {
212
228
  });
213
229
  }
214
230
  var overlayFocusRing = ensureFocusVisibleRing({
215
- outlineOffset: -2
231
+ outlineOffset: 0
216
232
  });
233
+ function ResultRow(param) {
234
+ var {
235
+ testID,
236
+ label,
237
+ description,
238
+ onPress,
239
+ disabled
240
+ } = param;
241
+ return /* @__PURE__ */_jsxs(YStack, {
242
+ testID,
243
+ role: "option",
244
+ "aria-selected": false,
245
+ "aria-disabled": disabled || void 0,
246
+ ...(isWeb ? {
247
+ tabIndex: disabled ? -1 : 0,
248
+ onKeyDown: function onKeyDown(event) {
249
+ if (disabled) return;
250
+ if (event.key === "Enter" || event.key === " ") {
251
+ event.preventDefault();
252
+ onPress();
253
+ } else if (event.key === "ArrowDown" || event.key === "ArrowUp") {
254
+ var _ref;
255
+ var _event_currentTarget_parentElement, _rows_;
256
+ event.preventDefault();
257
+ var rows = [...((_ref = (_event_currentTarget_parentElement = event.currentTarget.parentElement) === null || _event_currentTarget_parentElement === void 0 ? void 0 : _event_currentTarget_parentElement.querySelectorAll("[role='option']:not([aria-disabled='true'])")) !== null && _ref !== void 0 ? _ref : [])];
258
+ var index = rows.indexOf(event.currentTarget);
259
+ (_rows_ = rows[(index + (event.key === "ArrowDown" ? 1 : -1) + rows.length) % rows.length]) === null || _rows_ === void 0 ? void 0 : _rows_.focus();
260
+ }
261
+ }
262
+ } : {}),
263
+ minHeight: description ? 62 : 44,
264
+ justifyContent: "center",
265
+ paddingHorizontal: "$3",
266
+ paddingVertical: description ? "$2" : 0,
267
+ cursor: disabled ? "not-allowed" : "pointer",
268
+ hoverStyle: disabled ? void 0 : {
269
+ backgroundColor: "$color3"
270
+ },
271
+ pressStyle: disabled ? void 0 : {
272
+ backgroundColor: "$color3"
273
+ },
274
+ onPress: disabled ? void 0 : onPress,
275
+ opacity: disabled ? 0.5 : 1,
276
+ children: [/* @__PURE__ */_jsx(Text, {
277
+ fontSize: "$4",
278
+ lineHeight: 25,
279
+ color: "$color12",
280
+ children: label
281
+ }), description ? /* @__PURE__ */_jsx(Text, {
282
+ fontSize: "$3",
283
+ lineHeight: 24,
284
+ color: formCommonColors.muted,
285
+ children: description
286
+ }) : null]
287
+ });
288
+ }
289
+ function StatusRow(param) {
290
+ var {
291
+ children,
292
+ testID
293
+ } = param;
294
+ return /* @__PURE__ */_jsx(XStack, {
295
+ testID,
296
+ minHeight: 44,
297
+ alignItems: "center",
298
+ paddingHorizontal: "$3",
299
+ role: "status",
300
+ children: /* @__PURE__ */_jsx(Text, {
301
+ fontSize: "$4",
302
+ lineHeight: 25,
303
+ color: formCommonColors.muted,
304
+ children
305
+ })
306
+ });
307
+ }
308
+ function SearchResultsList(param) {
309
+ var {
310
+ listId,
311
+ status,
312
+ query,
313
+ results,
314
+ pair,
315
+ onLocate,
316
+ onPick,
317
+ onPickPair,
318
+ locateDisabled
319
+ } = param;
320
+ var showLocate = status === "idle" || status === "results" || pair != null;
321
+ return /* @__PURE__ */_jsxs(YStack, {
322
+ testID: "geolocation-results",
323
+ id: listId,
324
+ overflow: "hidden",
325
+ ...(isWeb ?
326
+ // role="listbox" is a valid ARIA role but outside RN's `Role` union;
327
+ // this web-only bag forwards it to the DOM node (house Record cast).
328
+ {
329
+ role: "listbox"
330
+ } : void 0),
331
+ children: [showLocate ? /* @__PURE__ */_jsx(ResultRow, {
332
+ testID: "geolocation-use-location",
333
+ label: t("Use my current location"),
334
+ onPress: onLocate,
335
+ disabled: locateDisabled
336
+ }) : null, status === "searching" ? /* @__PURE__ */_jsx(StatusRow, {
337
+ testID: "geolocation-search-status",
338
+ children: t("Searching\u2026")
339
+ }) : null, status === "error" ? /* @__PURE__ */_jsx(StatusRow, {
340
+ testID: "geolocation-search-status",
341
+ children: t("Search is unavailable \u2014 check your connection")
342
+ }) : null, status === "empty" && !pair ? /* @__PURE__ */_jsx(StatusRow, {
343
+ testID: "geolocation-search-status",
344
+ children: t('No places match "{{query}}"', {
345
+ query
346
+ })
347
+ }) : null, pair ? /* @__PURE__ */_jsx(ResultRow, {
348
+ testID: "geolocation-coord-result",
349
+ label: t("Go to {{pair}}", {
350
+ pair: formatCoordPair(pair.lat, pair.lng)
351
+ }),
352
+ description: t("Exact coordinates \u2014 no address"),
353
+ onPress: function onPress() {
354
+ return onPickPair(pair.lat, pair.lng);
355
+ }
356
+ }) : null, status === "results" ? results.map(function (result, index) {
357
+ return /* @__PURE__ */_jsx(ResultRow, {
358
+ testID: `geolocation-result-${index}`,
359
+ label: result.label,
360
+ description: result.description,
361
+ onPress: function onPress() {
362
+ return onPick(result);
363
+ }
364
+ }, `${result.lat},${result.lng},${index}`);
365
+ }) : null]
366
+ });
367
+ }
217
368
  function GeoMapSurface(param) {
218
369
  var {
219
370
  id,
@@ -258,7 +409,7 @@ function GeoMapSurface(param) {
258
409
  };
259
410
  var handleMapKeyDown = function handleMapKeyDown2(event) {
260
411
  if (!interactive) return;
261
- if (event.key === "Enter") {
412
+ if (event.key === "Enter" && hasValue) {
262
413
  event.preventDefault();
263
414
  setCoordsOpen(true);
264
415
  return;
@@ -278,7 +429,68 @@ function GeoMapSurface(param) {
278
429
  disabled,
279
430
  knobProps
280
431
  }) : null;
281
- return /* @__PURE__ */_jsxs(_Fragment, {
432
+ var coordLine = readOnly || disabled ? /* @__PURE__ */_jsx(XStack, {
433
+ testID: "geolocation-coordline",
434
+ alignItems: "center",
435
+ minHeight: COORD_LINE_HEIGHT,
436
+ paddingHorizontal: "$2",
437
+ hitSlop: pressTargetHitSlop(COORD_LINE_HEIGHT),
438
+ children: /* @__PURE__ */_jsx(Text, {
439
+ fontFamily: "$mono",
440
+ fontSize: 12,
441
+ lineHeight: 22,
442
+ color: formCommonColors.muted,
443
+ children: hasValue ? formatCoordPair(mapLat, mapLng) : t("Enter coordinates")
444
+ })
445
+ }) : /* @__PURE__ */_jsx(FloatingPanel, {
446
+ open: coordsOpen,
447
+ onOpenChange: handleCoordsOpenChange,
448
+ disabled,
449
+ fitContent: false,
450
+ sizing: "fill",
451
+ contentPadding: "none",
452
+ trigger: /* @__PURE__ */_jsx(XStack, {
453
+ testID: "geolocation-coordline",
454
+ alignItems: "center",
455
+ minHeight: COORD_LINE_HEIGHT,
456
+ paddingHorizontal: "$2",
457
+ cursor: "pointer",
458
+ ...pressSlopProps(COORD_LINE_HEIGHT, true),
459
+ hoverStyle: {
460
+ backgroundColor: "$color3"
461
+ },
462
+ focusVisibleStyle: overlayFocusRing,
463
+ ...(isWeb ? {
464
+ tabIndex: 0,
465
+ role: "button",
466
+ "aria-label": t("Edit coordinates"),
467
+ onKeyDown: function onKeyDown(event) {
468
+ if (event.key === "Enter" || event.key === " ") {
469
+ event.preventDefault();
470
+ setCoordsOpen(true);
471
+ }
472
+ }
473
+ } : {}),
474
+ children: /* @__PURE__ */_jsx(Text, {
475
+ fontFamily: "$mono",
476
+ fontSize: 12,
477
+ lineHeight: 22,
478
+ color: formCommonColors.muted,
479
+ children: hasValue ? formatCoordPair(mapLat, mapLng) : t("Enter coordinates")
480
+ })
481
+ }),
482
+ children: /* @__PURE__ */_jsx(CoordinatesPanel, {
483
+ lat: mapLat,
484
+ lng: mapLng,
485
+ knobProps,
486
+ required,
487
+ hasError,
488
+ flushRef: coordsFlushRef,
489
+ onCommit: onCommitCoordinates
490
+ })
491
+ });
492
+ return /* @__PURE__ */_jsxs(YStack, {
493
+ gap: "$2",
282
494
  children: [/* @__PURE__ */_jsxs(YStack, {
283
495
  testID: "geolocation-map",
284
496
  id,
@@ -300,7 +512,7 @@ function GeoMapSurface(param) {
300
512
  tabIndex: 0,
301
513
  role: "application",
302
514
  "aria-label": t("Location map"),
303
- "aria-valuetext": hasValue ? formatCoordChip(mapLat, mapLng) : t("No location set"),
515
+ "aria-valuetext": hasValue ? formatCoordPair(mapLat, mapLng) : t("No location set"),
304
516
  onKeyDown: handleMapKeyDown
305
517
  } : {}),
306
518
  children: [customMap !== null && customMap !== void 0 ? customMap : /* @__PURE__ */_jsx(GeolocationMap, {
@@ -311,62 +523,34 @@ function GeoMapSurface(param) {
311
523
  disabled,
312
524
  readOnly,
313
525
  hasValue
314
- }), /* Chip is the coordinates editor trigger (Apple/Google compact pattern). */
315
- readOnly ? /* @__PURE__ */_jsx(View, {
526
+ }), !hasValue && !locateErrorOpen ? /* @__PURE__ */_jsxs(YStack, {
527
+ testID: "geolocation-empty",
316
528
  position: "absolute",
317
- top: "$2",
318
- insetInlineStart: "$2",
529
+ top: 0,
530
+ right: 0,
531
+ bottom: 0,
532
+ left: 0,
319
533
  zIndex: 2,
320
- backgroundColor: "$background",
321
- opacity: 0.92,
322
- paddingHorizontal: "$2",
323
- paddingVertical: "$1",
324
- ...knobProps.borderRadius,
325
- children: /* @__PURE__ */_jsx(Text, {
326
- testID: "geolocation-coords-chip",
327
- fontSize: "$1",
534
+ alignItems: "center",
535
+ justifyContent: "center",
536
+ gap: "$2",
537
+ pointerEvents: "box-none",
538
+ children: [/* @__PURE__ */_jsx(Text, {
328
539
  ...knobProps.body,
329
540
  color: formCommonColors.muted,
330
- children: hasValue ? formatCoordChip(mapLat, mapLng) : t("No location set")
331
- })
332
- }) : /* @__PURE__ */_jsx(View, {
333
- position: "absolute",
334
- top: "$2",
335
- insetInlineStart: "$2",
336
- zIndex: 2,
337
- children: /* @__PURE__ */_jsx(FloatingPanel, {
338
- open: coordsOpen,
339
- onOpenChange: handleCoordsOpenChange,
340
- disabled,
341
- fitContent: true,
342
- sizing: "fill",
343
- contentPadding: "none",
344
- trigger: /* @__PURE__ */_jsx(Button, {
345
- size: "$2",
346
- disabled,
347
- backgroundColor: "$background",
348
- opacity: 0.92,
349
- testID: "geolocation-coords-chip",
350
- "aria-label": t("Edit coordinates"),
351
- focusVisibleStyle: overlayFocusRing,
352
- onPress: isWeb && !disabled ? function () {
353
- return setCoordsOpen(true);
354
- } : void 0,
355
- children: /* @__PURE__ */_jsx(Button.Text, {
356
- children: hasValue ? formatCoordChip(mapLat, mapLng) : t("Set location")
357
- })
358
- }),
359
- children: /* @__PURE__ */_jsx(CoordinatesPanel, {
360
- lat: mapLat,
361
- lng: mapLng,
362
- knobProps,
363
- required,
364
- hasError,
365
- flushRef: coordsFlushRef,
366
- onCommit: onCommitCoordinates
541
+ pointerEvents: "none",
542
+ children: t("No location set")
543
+ }), !readOnly && !disabled ? /* @__PURE__ */_jsx(Button, {
544
+ size: "$4",
545
+ onPress: onUseMyLocation,
546
+ disabled: locating,
547
+ testID: "geolocation-empty-locate",
548
+ "aria-label": t("Use my current location"),
549
+ children: /* @__PURE__ */_jsx(Button.Text, {
550
+ children: t("Use my current location")
367
551
  })
368
- })
369
- }), handleExpand && expandIcon && /* @__PURE__ */_jsx(View, {
552
+ }) : null]
553
+ }) : null, handleExpand && expandIcon && /* @__PURE__ */_jsx(View, {
370
554
  position: "absolute",
371
555
  top: "$2",
372
556
  insetInlineEnd: "$2",
@@ -377,13 +561,12 @@ function GeoMapSurface(param) {
377
561
  disabled,
378
562
  onPress: handleExpand,
379
563
  backgroundColor: "$background",
380
- opacity: 0.92,
381
564
  "aria-label": t("Expand map"),
382
565
  focusVisibleStyle: overlayFocusRing,
566
+ hitSlop: pressTargetHitSlop(32),
383
567
  children: expandIcon
384
568
  })
385
- }), /* Locate overlay (bottom-end) — LC-19 preflight runs on press */
386
- !readOnly && !locateErrorOpen && /* @__PURE__ */_jsx(View, {
569
+ }), !readOnly && !locateErrorOpen && /* @__PURE__ */_jsx(View, {
387
570
  position: "absolute",
388
571
  bottom: "$2",
389
572
  insetInlineEnd: "$2",
@@ -394,19 +577,14 @@ function GeoMapSurface(param) {
394
577
  disabled: disabled || locating,
395
578
  onPress: onUseMyLocation,
396
579
  backgroundColor: "$background",
397
- opacity: 0.92,
398
580
  icon: locating ? /* @__PURE__ */_jsx(Spinner, {
399
581
  size: "small"
400
582
  }) : locationIcon,
401
583
  "aria-label": locating ? t("Locating") : t("Locate"),
402
- focusVisibleStyle: overlayFocusRing
584
+ focusVisibleStyle: overlayFocusRing,
585
+ hitSlop: pressTargetHitSlop(32)
403
586
  })
404
- }),
405
- /*
406
- LC-19: locate error stays on the map (Retry + Close) — never
407
- mount-fail-unmount, never a layout-jumping sibling under the field.
408
- */
409
- locateErrorOpen && /* @__PURE__ */_jsxs(YStack, {
587
+ }), locateErrorOpen && /* @__PURE__ */_jsxs(YStack, {
410
588
  testID: "geolocation-locate-panel",
411
589
  position: "absolute",
412
590
  bottom: "$2",
@@ -439,7 +617,7 @@ function GeoMapSurface(param) {
439
617
  })]
440
618
  })]
441
619
  })]
442
- }), expandIcon && /* @__PURE__ */_jsx(AdaptivePopup, {
620
+ }), coordLine, expandIcon && /* @__PURE__ */_jsx(AdaptivePopup, {
443
621
  open: expanded,
444
622
  onOpenChange: setExpanded,
445
623
  title: t("Select Location"),
@@ -455,9 +633,46 @@ function GeoMapSurface(param) {
455
633
  })]
456
634
  });
457
635
  }
458
- var defaultLocationIcon = /* @__PURE__ */_jsx(NavigationArrowIcon, {
459
- size: 16
460
- });
636
+ function CellFace(param) {
637
+ var {
638
+ address,
639
+ coordinates,
640
+ onOpen
641
+ } = param;
642
+ var glyphColor = useGlyphColor();
643
+ var text = address ? address : coordinates ? formatCoordPair(coordinates.lat, coordinates.lng) : t("No location set");
644
+ return /* @__PURE__ */_jsxs(XStack, {
645
+ testID: "geolocation-cell-face",
646
+ ...(isWeb && onOpen ? {
647
+ tabIndex: 0,
648
+ role: "button",
649
+ "aria-label": t("Edit location"),
650
+ onKeyDown: function onKeyDown(event) {
651
+ if (event.key === "Enter" || event.key === " ") {
652
+ event.preventDefault();
653
+ onOpen();
654
+ }
655
+ }
656
+ } : {}),
657
+ alignItems: "center",
658
+ gap: "$2",
659
+ minHeight: 44,
660
+ minWidth: 0,
661
+ flex: 1,
662
+ children: [/* @__PURE__ */_jsx(MapPinIcon, {
663
+ size: 14,
664
+ color: glyphColor
665
+ }), /* @__PURE__ */_jsx(Text, {
666
+ fontSize: "$3",
667
+ lineHeight: 24,
668
+ color: "$color12",
669
+ numberOfLines: 1,
670
+ flex: 1,
671
+ minWidth: 0,
672
+ children: text
673
+ })]
674
+ });
675
+ }
461
676
  function Geolocation(param) {
462
677
  var {
463
678
  name,
@@ -476,11 +691,14 @@ function Geolocation(param) {
476
691
  onBlur,
477
692
  disabled,
478
693
  readOnly,
479
- locationIcon = defaultLocationIcon,
694
+ locationIcon,
480
695
  expandIcon,
481
696
  renderMap,
482
697
  skeleton,
483
- compact
698
+ compact,
699
+ geocode: geocodeProp,
700
+ reverseGeocode: reverseGeocodeProp,
701
+ geocoder
484
702
  } = param;
485
703
  var {
486
704
  resolvedForm,
@@ -492,14 +710,87 @@ function Geolocation(param) {
492
710
  compact
493
711
  });
494
712
  var resolvedValidators = useResolvedValidators(required, validators, label, name);
713
+ var glyphColor = useGlyphColor();
714
+ var resolvedLocationIcon = locationIcon === void 0 ? /* @__PURE__ */_jsx(NavigationArrowIcon, {
715
+ size: 16,
716
+ color: glyphColor
717
+ }) : locationIcon;
718
+ var inTableCell = useIsInTableCell();
719
+ var viewportGtSm = useViewportGtSm();
720
+ var shouldUseSheet = !isWeb || !viewportGtSm;
721
+ var {
722
+ geocode,
723
+ reverseGeocode
724
+ } = resolveGeocoder({
725
+ geocode: geocodeProp,
726
+ reverseGeocode: reverseGeocodeProp,
727
+ geocoder
728
+ });
729
+ var searchEnabled = Boolean(geocode) && !disabled && !readOnly;
730
+ var listId = useId();
495
731
  var [locatePhase, setLocatePhase] = useState("idle");
496
732
  var [locateError, setLocateError] = useState(null);
497
733
  var [preflightError, setPreflightError] = useState();
734
+ var [address, setAddress] = useState(null);
735
+ var [query, setQuery] = useState("");
736
+ var [resultsOpen, setResultsOpen] = useState(false);
737
+ var [searchStatus, setSearchStatus] = useState("idle");
738
+ var [results, setResults] = useState([]);
739
+ var [cellOpen, setCellOpen] = useState(false);
498
740
  var preflightingRef = useRef(false);
499
741
  var onValueChangeRef = useRef(function () {});
500
742
  var currentValueRef = useRef("");
743
+ var searchGenRef = useRef(0);
744
+ var reverseGenRef = useRef(0);
745
+ var searchRootRef = useRef(null);
746
+ var searchInputRef = useRef(null);
747
+ var sheetSearchInputRef = useRef(null);
748
+ var closingSearchRef = useRef(false);
749
+ var [nativeSearchFocus] = useState(createNativeSearchFocus);
750
+ var skipResultsReturnFocusRef = useRef(true);
751
+ var closeSearch = useCallback(function () {
752
+ var restoreFocus = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
753
+ var _searchInputRef_current;
754
+ if (!isWeb) nativeSearchFocus.dismiss();
755
+ closingSearchRef.current = true;
756
+ setResultsOpen(false);
757
+ if (isWeb && restoreFocus) (_searchInputRef_current = searchInputRef.current) === null || _searchInputRef_current === void 0 ? void 0 : _searchInputRef_current.focus({
758
+ preventScroll: true
759
+ });
760
+ closingSearchRef.current = false;
761
+ }, [nativeSearchFocus]);
762
+ var queryIsAddressRef = useRef(true);
763
+ var selectedPlaceRef = useRef(null);
764
+ var locateGenRef = useRef(0);
765
+ var interactiveRef = useRef(!disabled && !readOnly);
766
+ interactiveRef.current = !disabled && !readOnly;
767
+ var cancelLocate = useCallback(function () {
768
+ ++locateGenRef.current;
769
+ setLocatePhase("idle");
770
+ setLocateError(null);
771
+ }, []);
772
+ useEffect(function () {
773
+ if (disabled || readOnly) cancelLocate();
774
+ }, [disabled, readOnly, cancelLocate]);
775
+ useEffect(function () {
776
+ return function () {
777
+ ++locateGenRef.current;
778
+ ++reverseGenRef.current;
779
+ ++searchGenRef.current;
780
+ };
781
+ }, []);
782
+ var applyAddress = useCallback(function (next, intoQuery) {
783
+ setAddress(next);
784
+ if (intoQuery) {
785
+ var _ref;
786
+ queryIsAddressRef.current = true;
787
+ setQuery((_ref = next === null || next === void 0 ? void 0 : next.label) !== null && _ref !== void 0 ? _ref : "");
788
+ }
789
+ }, []);
501
790
  var requestPosition = useCallback(function () {
502
791
  var _navigator;
792
+ if (!interactiveRef.current) return;
793
+ var gen = ++locateGenRef.current;
503
794
  if (!((_navigator = navigator) === null || _navigator === void 0 ? void 0 : _navigator.geolocation)) {
504
795
  setLocateError(t("Geolocation unavailable: not supported in this browser."));
505
796
  setLocatePhase("error");
@@ -508,6 +799,9 @@ function Geolocation(param) {
508
799
  setLocatePhase("locating");
509
800
  setLocateError(null);
510
801
  navigator.geolocation.getCurrentPosition(function (position) {
802
+ if (gen !== locateGenRef.current || !interactiveRef.current) return;
803
+ selectedPlaceRef.current = null;
804
+ queryIsAddressRef.current = true;
511
805
  var lat = clampLat(position.coords.latitude);
512
806
  var lng = clampLng(position.coords.longitude);
513
807
  var previous = currentValueRef.current;
@@ -517,20 +811,25 @@ function Geolocation(param) {
517
811
  }, detectGeoShape(previous), previous));
518
812
  setLocatePhase("idle");
519
813
  setLocateError(null);
814
+ closeSearch();
815
+ setCellOpen(false);
520
816
  }, function (err) {
817
+ if (gen !== locateGenRef.current || !interactiveRef.current) return;
521
818
  setLocateError(mapGeolocationError(err));
522
819
  setLocatePhase("error");
523
820
  }, {
524
821
  enableHighAccuracy: true,
525
822
  timeout: 1e4
526
823
  });
527
- }, []);
824
+ }, [closeSearch]);
528
825
  var startLocate = useCallback(async function () {
529
826
  if (disabled || readOnly) return;
530
827
  if (preflightingRef.current || locatePhase === "locating") return;
531
828
  preflightingRef.current = true;
829
+ var gen = ++locateGenRef.current;
532
830
  try {
533
831
  var result = await preflightGeolocation();
832
+ if (gen !== locateGenRef.current || !interactiveRef.current) return;
534
833
  if (result.ok) {
535
834
  setPreflightError(void 0);
536
835
  requestPosition();
@@ -543,12 +842,108 @@ function Geolocation(param) {
543
842
  preflightingRef.current = false;
544
843
  }
545
844
  }, [disabled, readOnly, locatePhase, requestPosition]);
845
+ var runReverse = useCallback(async function (lat, lng) {
846
+ var gen = ++reverseGenRef.current;
847
+ if (lat === void 0 || lng === void 0) {
848
+ selectedPlaceRef.current = null;
849
+ applyAddress(null, queryIsAddressRef.current);
850
+ return;
851
+ }
852
+ var key = coordinateKey({
853
+ lat,
854
+ lng
855
+ });
856
+ var selected = selectedPlaceRef.current;
857
+ if ((selected === null || selected === void 0 ? void 0 : selected.key) === key) {
858
+ applyAddress({
859
+ key,
860
+ label: formatPlace(selected.place)
861
+ }, queryIsAddressRef.current);
862
+ return;
863
+ }
864
+ applyAddress(null, queryIsAddressRef.current);
865
+ if (!reverseGeocode) {
866
+ return;
867
+ }
868
+ try {
869
+ var result = await reverseGeocode({
870
+ lat,
871
+ lng
872
+ });
873
+ if (gen !== reverseGenRef.current) return;
874
+ applyAddress(result ? {
875
+ key,
876
+ label: formatPlace(result)
877
+ } : null, queryIsAddressRef.current);
878
+ } catch (unused) {
879
+ if (gen !== reverseGenRef.current) return;
880
+ applyAddress(null, queryIsAddressRef.current);
881
+ }
882
+ }, [reverseGeocode, applyAddress]);
883
+ var runSearch = useCallback(async function (text) {
884
+ if (!geocode) return;
885
+ var gen = ++searchGenRef.current;
886
+ setSearchStatus("searching");
887
+ try {
888
+ var next = await geocode({
889
+ query: text
890
+ });
891
+ if (gen !== searchGenRef.current) return;
892
+ setResults(next);
893
+ setSearchStatus(next.length > 0 ? "results" : "empty");
894
+ } catch (unused) {
895
+ if (gen !== searchGenRef.current) return;
896
+ setResults([]);
897
+ setSearchStatus("error");
898
+ }
899
+ }, [geocode]);
900
+ useEffect(function () {
901
+ ++searchGenRef.current;
902
+ if (!searchEnabled || !resultsOpen) return;
903
+ var trimmed = query.trim();
904
+ if (queryIsAddressRef.current) return;
905
+ if (!trimmed) {
906
+ setSearchStatus("idle");
907
+ setResults([]);
908
+ return;
909
+ }
910
+ if (parseLatLngPair(trimmed)) {
911
+ setSearchStatus("idle");
912
+ setResults([]);
913
+ return;
914
+ }
915
+ var handle = setTimeout(function () {
916
+ void runSearch(trimmed);
917
+ }, SEARCH_DEBOUNCE_MS);
918
+ return function () {
919
+ clearTimeout(handle);
920
+ ++searchGenRef.current;
921
+ };
922
+ }, [query, resultsOpen, searchEnabled, runSearch]);
923
+ useEffect(function () {
924
+ if (!resultsOpen || shouldUseSheet) return;
925
+ var onDoc = function onDoc2(event) {
926
+ var root = searchRootRef.current;
927
+ if (root && _instanceof(event.target, Node) && root.contains(event.target)) return;
928
+ closeSearch(false);
929
+ };
930
+ var onKey = function onKey2(event) {
931
+ if (event.key === "Escape") closeSearch();
932
+ };
933
+ document.addEventListener("mousedown", onDoc);
934
+ document.addEventListener("keydown", onKey);
935
+ return function () {
936
+ document.removeEventListener("mousedown", onDoc);
937
+ document.removeEventListener("keydown", onKey);
938
+ };
939
+ }, [resultsOpen, shouldUseSheet, closeSearch]);
546
940
  var makeHandlers = useCallback(function (currentValue, onValueChange) {
547
941
  onValueChangeRef.current = onValueChange;
548
942
  currentValueRef.current = currentValue;
549
943
  var coordinates = parseGeoValue(currentValue);
550
944
  var shape = detectGeoShape(currentValue);
551
945
  var write = function write2(lat, lng) {
946
+ cancelLocate();
552
947
  onValueChange(formatGeoValue({
553
948
  lat: clampLat(lat),
554
949
  lng: clampLng(lng)
@@ -556,55 +951,318 @@ function Geolocation(param) {
556
951
  };
557
952
  return {
558
953
  coordinates,
559
- onCommitCoordinates: write,
560
- onMapChange: write,
954
+ onCommitCoordinates: function onCommitCoordinates(lat, lng) {
955
+ write(lat, lng);
956
+ selectedPlaceRef.current = null;
957
+ queryIsAddressRef.current = true;
958
+ },
959
+ onMapChange: function onMapChange(lat, lng) {
960
+ write(lat, lng);
961
+ selectedPlaceRef.current = null;
962
+ queryIsAddressRef.current = true;
963
+ },
561
964
  onUseMyLocation: function onUseMyLocation() {
562
965
  void startLocate();
563
966
  },
564
967
  onRetryLocate: function onRetryLocate() {
565
968
  requestPosition();
566
969
  },
567
- onCloseLocate: function onCloseLocate() {
568
- setLocatePhase("idle");
569
- setLocateError(null);
970
+ onCloseLocate: cancelLocate,
971
+ onPick: function onPick(result) {
972
+ ++reverseGenRef.current;
973
+ var place = {
974
+ ...result,
975
+ lat: clampLat(result.lat),
976
+ lng: clampLng(result.lng)
977
+ };
978
+ selectedPlaceRef.current = {
979
+ key: coordinateKey(place),
980
+ place
981
+ };
982
+ write(result.lat, result.lng);
983
+ queryIsAddressRef.current = true;
984
+ setQuery(formatPlace(result));
985
+ closeSearch();
986
+ setCellOpen(false);
987
+ setSearchStatus("idle");
988
+ },
989
+ onPickPair: function onPickPair(lat, lng) {
990
+ write(lat, lng);
991
+ selectedPlaceRef.current = null;
992
+ queryIsAddressRef.current = true;
993
+ closeSearch();
994
+ setCellOpen(false);
995
+ setSearchStatus("idle");
996
+ },
997
+ onClear: function onClear() {
998
+ cancelLocate();
999
+ ++searchGenRef.current;
1000
+ ++reverseGenRef.current;
1001
+ selectedPlaceRef.current = null;
1002
+ onValueChange("");
1003
+ applyAddress(null, true);
1004
+ setQuery("");
1005
+ setResults([]);
1006
+ setSearchStatus("idle");
570
1007
  }
571
1008
  };
572
- }, [startLocate, requestPosition]);
1009
+ }, [startLocate, requestPosition, cancelLocate, applyAddress, closeSearch]);
573
1010
  var mapHeight = getFieldHeight(size !== null && size !== void 0 ? size : knobProps.sizeToken, compact ? 4 : 5);
574
- if (skeleton) {
575
- return /* @__PURE__ */_jsx(FieldLayout, {
576
- id,
577
- label,
578
- size,
579
- knobProps,
580
- children: /* @__PURE__ */_jsx(Skeleton, {
581
- variant: "rounded",
582
- width: "100%",
583
- height: mapHeight
1011
+ var displayError = error || preflightError;
1012
+ var renderSearch = function renderSearch2(handlers) {
1013
+ var opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
1014
+ var showClear = Boolean(query) && !disabled && !readOnly;
1015
+ var inputRef = opts.sheetHeader ? sheetSearchInputRef : searchInputRef;
1016
+ var activateNativeSearch = function activateNativeSearch2() {
1017
+ var focusInput = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
1018
+ var _nativeInput_isFocused;
1019
+ nativeSearchFocus.activate();
1020
+ if (!searchEnabled || opts.editingCell) return;
1021
+ var nativeInput = inputRef.current;
1022
+ if (nativeInput === null || nativeInput === void 0 ? void 0 : (_nativeInput_isFocused = nativeInput.isFocused) === null || _nativeInput_isFocused === void 0 ? void 0 : _nativeInput_isFocused.call(nativeInput)) setResultsOpen(true);else if (focusInput) nativeInput === null || nativeInput === void 0 ? void 0 : nativeInput.focus();
1023
+ };
1024
+ var clearSearch = function clearSearch2() {
1025
+ var _inputRef_current;
1026
+ handlers.onClear();
1027
+ closingSearchRef.current = true;
1028
+ if (isWeb) (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus({
1029
+ preventScroll: true
1030
+ });
1031
+ closingSearchRef.current = false;
1032
+ };
1033
+ return /* @__PURE__ */_jsx(InputParts, {
1034
+ size: size || knobProps.sizeToken,
1035
+ children: /* @__PURE__ */_jsxs(InputParts.Box, {
1036
+ disabled: disabled || !searchEnabled,
1037
+ // Keep the square Clear target pressable across the frame's border.
1038
+ style: {
1039
+ overflow: "visible"
1040
+ },
1041
+ ...(opts.sheetHeader ? {
1042
+ borderWidth: 0,
1043
+ borderBottomWidth: 1,
1044
+ borderRadius: 0
1045
+ } : {}),
1046
+ children: [/* @__PURE__ */_jsx(InputParts.Section, {
1047
+ children: /* @__PURE__ */_jsx(InputParts.Icon, {
1048
+ adornment: "leading",
1049
+ children: /* @__PURE__ */_jsx(MagnifyingGlassIcon, {
1050
+ size: 16
1051
+ })
1052
+ })
1053
+ }), /* @__PURE__ */_jsx(InputParts.Section, {
1054
+ children: /* @__PURE__ */_jsx(InputParts.Area, {
1055
+ ref: inputRef,
1056
+ value: query,
1057
+ disabled: disabled || !searchEnabled,
1058
+ placeholder: t("Search address or place"),
1059
+ "aria-label": t("Search for a location"),
1060
+ role: "combobox",
1061
+ "aria-haspopup": "listbox",
1062
+ "aria-expanded": resultsOpen,
1063
+ "aria-controls": listId,
1064
+ "aria-autocomplete": "list",
1065
+ "data-testid": "geolocation-search",
1066
+ onChangeText: function onChangeText(text) {
1067
+ if (!isWeb) nativeSearchFocus.activate();
1068
+ ++searchGenRef.current;
1069
+ queryIsAddressRef.current = false;
1070
+ setResults([]);
1071
+ setSearchStatus("idle");
1072
+ setQuery(text);
1073
+ if (searchEnabled) setResultsOpen(true);
1074
+ },
1075
+ onKeyDown: function onKeyDown(event) {
1076
+ if (event.key === "ArrowDown") {
1077
+ var _document_getElementById_querySelector, _document_getElementById;
1078
+ if (searchEnabled) setResultsOpen(true);
1079
+ event.preventDefault();
1080
+ (_document_getElementById = document.getElementById(listId)) === null || _document_getElementById === void 0 ? void 0 : (_document_getElementById_querySelector = _document_getElementById.querySelector("[role='option']:not([aria-disabled='true'])")) === null || _document_getElementById_querySelector === void 0 ? void 0 : _document_getElementById_querySelector.focus();
1081
+ }
1082
+ },
1083
+ onClick: function onClick() {
1084
+ if (searchEnabled) setResultsOpen(true);
1085
+ },
1086
+ ...(!isWeb ? {
1087
+ onPressIn: function onPressIn() {
1088
+ return activateNativeSearch();
1089
+ },
1090
+ onAccessibilityTap: function onAccessibilityTap() {
1091
+ return activateNativeSearch(true);
1092
+ },
1093
+ onBlur: function onBlur2() {
1094
+ return nativeSearchFocus.blur(!!opts.sheetHeader, resultsOpen);
1095
+ }
1096
+ } : {}),
1097
+ onFocus: function onFocus() {
1098
+ if (searchEnabled && !opts.editingCell && !closingSearchRef.current && (isWeb || nativeSearchFocus.canOpen(!!opts.sheetHeader))) setResultsOpen(true);
1099
+ }
1100
+ })
1101
+ }), showClear ? /* @__PURE__ */_jsx(InputParts.Section, {
1102
+ children: /* @__PURE__ */_jsx(InputParts.Button, {
1103
+ glyphRing: true,
1104
+ onPress: clearSearch,
1105
+ onKeyDown: function onKeyDown(event) {
1106
+ if (event.key === "Enter" || event.key === " ") {
1107
+ event.preventDefault();
1108
+ event.stopPropagation();
1109
+ clearSearch();
1110
+ }
1111
+ },
1112
+ "aria-label": t("Clear location"),
1113
+ testID: "geolocation-search-clear",
1114
+ children: /* @__PURE__ */_jsx(InputParts.Icon, {
1115
+ children: /* @__PURE__ */_jsx(XIcon, {
1116
+ size: 14
1117
+ })
1118
+ })
1119
+ })
1120
+ }) : null]
584
1121
  })
585
1122
  });
586
- }
587
- var displayError = error || preflightError;
588
- if (!resolvedForm || !name) {
589
- var handlers = makeHandlers(value || "", function (v) {
590
- return onChange === null || onChange === void 0 ? void 0 : onChange(v);
1123
+ };
1124
+ var renderResults = function renderResults2(handlers) {
1125
+ return /* @__PURE__ */_jsx(SearchResultsList, {
1126
+ listId,
1127
+ status: searchStatus,
1128
+ query: query.trim(),
1129
+ results,
1130
+ pair: parseLatLngPair(query),
1131
+ onLocate: handlers.onUseMyLocation,
1132
+ onPick: handlers.onPick,
1133
+ onPickPair: handlers.onPickPair,
1134
+ locateDisabled: disabled || locatePhase === "locating"
591
1135
  });
592
- return /* @__PURE__ */_jsx(FieldLayout, {
593
- id,
594
- label,
595
- labelProps,
596
- error: displayError,
597
- helperText,
598
- required,
599
- size,
600
- knobProps,
601
- onBlur,
602
- // LC-40: FieldLayout owns the dimWhole assembly dim (keepLabel pins
603
- // the sibling label/helper readable) — it needs the disabled state.
604
- disabled,
605
- children: /* @__PURE__ */_jsx(GeoMapSurface, {
1136
+ };
1137
+ var renderFormBody = function renderFormBody1(currentValue, onValueChange) {
1138
+ var editingCell = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false,
1139
+ resolvedError = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : displayError;
1140
+ var _ref, _ref1;
1141
+ var handlers = makeHandlers(currentValue, onValueChange);
1142
+ var coordinates = handlers.coordinates;
1143
+ var key = coordinates ? coordinateKey(coordinates) : null;
1144
+ var selected = selectedPlaceRef.current;
1145
+ var displayAddress = (_ref = (_ref1 = (selected === null || selected === void 0 ? void 0 : selected.key) === key ? formatPlace(selected.place) : null) !== null && _ref1 !== void 0 ? _ref1 : (address === null || address === void 0 ? void 0 : address.key) === key ? address.label : null) !== null && _ref !== void 0 ? _ref : coordinates ? formatCoordPair(coordinates.lat, coordinates.lng) : null;
1146
+ if (inTableCell && !editingCell) {
1147
+ var face = /* @__PURE__ */_jsx(CellFace, {
1148
+ address: displayAddress,
1149
+ coordinates,
1150
+ onOpen: !disabled && !readOnly ? function () {
1151
+ return setCellOpen(true);
1152
+ } : void 0
1153
+ });
1154
+ if (readOnly || disabled) return face;
1155
+ return /* @__PURE__ */_jsx(FloatingPanel, {
1156
+ open: cellOpen,
1157
+ onOpenChange: setCellOpen,
1158
+ disabled,
1159
+ fitContent: false,
1160
+ contentPadding: "none",
1161
+ trigger: face,
1162
+ children: /* @__PURE__ */_jsx(YStack, {
1163
+ minWidth: 260,
1164
+ maxWidth: 420,
1165
+ children: renderFormBody(currentValue, onValueChange, true, resolvedError)
1166
+ })
1167
+ });
1168
+ }
1169
+ if (readOnly) {
1170
+ return /* @__PURE__ */_jsxs(YStack, {
1171
+ gap: "$2",
1172
+ children: [/* @__PURE__ */_jsxs(XStack, {
1173
+ testID: "geolocation-readonly-address",
1174
+ alignItems: "center",
1175
+ gap: "$2",
1176
+ minHeight: 25,
1177
+ children: [/* @__PURE__ */_jsx(MapPinIcon, {
1178
+ size: 14,
1179
+ color: glyphColor
1180
+ }), /* @__PURE__ */_jsx(Text, {
1181
+ fontSize: "$4",
1182
+ lineHeight: 25,
1183
+ color: "$color12",
1184
+ children: displayAddress !== null && displayAddress !== void 0 ? displayAddress : t("No location set")
1185
+ })]
1186
+ }), /* @__PURE__ */_jsx(GeoMapSurface, {
1187
+ id,
1188
+ coordinates,
1189
+ onCommitCoordinates: handlers.onCommitCoordinates,
1190
+ onUseMyLocation: handlers.onUseMyLocation,
1191
+ onRetryLocate: handlers.onRetryLocate,
1192
+ onCloseLocate: handlers.onCloseLocate,
1193
+ onMapChange: handlers.onMapChange,
1194
+ disabled: !!disabled,
1195
+ readOnly: true,
1196
+ locatePhase,
1197
+ locateError,
1198
+ knobProps,
1199
+ locationIcon: resolvedLocationIcon,
1200
+ expandIcon,
1201
+ renderMap,
1202
+ required,
1203
+ hasError: !!resolvedError,
1204
+ mapHeight
1205
+ })]
1206
+ });
1207
+ }
1208
+ var resultsPanel = resultsOpen && searchEnabled ? shouldUseSheet ? /* @__PURE__ */_jsx(FloatingPanel, {
1209
+ open: resultsOpen,
1210
+ onOpenChange: function onOpenChange(open) {
1211
+ return open ? setResultsOpen(true) : closeSearch();
1212
+ },
1213
+ onNativeShow: function onNativeShow() {
1214
+ var _sheetSearchInputRef_current;
1215
+ return (_sheetSearchInputRef_current = sheetSearchInputRef.current) === null || _sheetSearchInputRef_current === void 0 ? void 0 : _sheetSearchInputRef_current.focus();
1216
+ },
1217
+ skipReturnFocusRef: skipResultsReturnFocusRef,
1218
+ sheet: true,
1219
+ sheetFill: true,
1220
+ scrollable: true,
1221
+ contentPadding: "none",
1222
+ header: renderSearch(handlers, {
1223
+ sheetHeader: true
1224
+ }),
1225
+ trigger: /* @__PURE__ */_jsx(View, {
1226
+ testID: "geolocation-sheet-trigger",
1227
+ height: 1,
1228
+ width: "100%"
1229
+ }),
1230
+ children: /* @__PURE__ */_jsx(YStack, {
1231
+ testID: "geolocation-results-sheet",
1232
+ children: renderResults(handlers)
1233
+ })
1234
+ }) : /* @__PURE__ */_jsx(YStack, {
1235
+ position: "absolute",
1236
+ top: "100%",
1237
+ left: 0,
1238
+ right: 0,
1239
+ zIndex: zIndex.dropdown,
1240
+ backgroundColor: "$color1",
1241
+ borderWidth: 1,
1242
+ borderColor: formInputColors.border.base,
1243
+ borderRadius: knobProps.borderRadius.borderRadius,
1244
+ overflow: "hidden",
1245
+ style: {
1246
+ boxShadow: RESULTS_PANEL_SHADOW
1247
+ },
1248
+ children: /* @__PURE__ */_jsx(ScrollView, {
1249
+ maxHeight: mapHeight * 1.5,
1250
+ children: renderResults(handlers)
1251
+ })
1252
+ }) : null;
1253
+ return /* @__PURE__ */_jsxs(YStack, {
1254
+ gap: "$2",
1255
+ children: [/* @__PURE__ */_jsxs(YStack, {
1256
+ ref: searchRootRef,
1257
+ position: "relative",
1258
+ testID: "geolocation-search-anchor",
1259
+ "data-sheet": shouldUseSheet ? "true" : "false",
1260
+ children: [renderSearch(handlers, {
1261
+ editingCell
1262
+ }), resultsPanel]
1263
+ }), /* @__PURE__ */_jsx(GeoMapSurface, {
606
1264
  id,
607
- coordinates: handlers.coordinates,
1265
+ coordinates,
608
1266
  onCommitCoordinates: handlers.onCommitCoordinates,
609
1267
  onUseMyLocation: handlers.onUseMyLocation,
610
1268
  onRetryLocate: handlers.onRetryLocate,
@@ -615,15 +1273,60 @@ function Geolocation(param) {
615
1273
  locatePhase,
616
1274
  locateError,
617
1275
  knobProps,
618
- locationIcon,
1276
+ locationIcon: resolvedLocationIcon,
619
1277
  expandIcon,
620
1278
  renderMap,
621
1279
  required,
622
- hasError: !!displayError,
1280
+ hasError: !!resolvedError,
623
1281
  mapHeight
1282
+ })]
1283
+ });
1284
+ };
1285
+ if (skeleton) {
1286
+ return /* @__PURE__ */_jsx(FieldLayout, {
1287
+ id,
1288
+ label,
1289
+ size,
1290
+ knobProps,
1291
+ children: /* @__PURE__ */_jsxs(YStack, {
1292
+ gap: "$2",
1293
+ children: [/* @__PURE__ */_jsx(Skeleton, {
1294
+ variant: "rounded",
1295
+ width: "100%",
1296
+ height: 44
1297
+ }), /* @__PURE__ */_jsx(Skeleton, {
1298
+ variant: "rounded",
1299
+ width: "100%",
1300
+ height: mapHeight
1301
+ })]
624
1302
  })
625
1303
  });
626
1304
  }
1305
+ var wrap = function wrap2(currentValue, onValueChange, resolvedError, fieldBlur) {
1306
+ var coordinates = parseGeoValue(currentValue);
1307
+ var taughtHelper = helperText !== null && helperText !== void 0 ? helperText : !coordinates && !readOnly ? t("Search, tap the map, or use your location.") : void 0;
1308
+ return /* @__PURE__ */_jsxs(FieldLayout, {
1309
+ id,
1310
+ label,
1311
+ labelProps,
1312
+ error: resolvedError !== null && resolvedError !== void 0 ? resolvedError : displayError,
1313
+ helperText: inTableCell ? void 0 : taughtHelper,
1314
+ required,
1315
+ size,
1316
+ knobProps,
1317
+ onBlur: fieldBlur !== null && fieldBlur !== void 0 ? fieldBlur : onBlur,
1318
+ disabled,
1319
+ children: [/* @__PURE__ */_jsx(GeolocationValueSync, {
1320
+ value: currentValue,
1321
+ runReverse
1322
+ }), renderFormBody(currentValue, onValueChange, false, resolvedError)]
1323
+ });
1324
+ };
1325
+ if (!resolvedForm || !name) {
1326
+ return wrap(value || "", function (v) {
1327
+ return onChange === null || onChange === void 0 ? void 0 : onChange(v);
1328
+ });
1329
+ }
627
1330
  return /* @__PURE__ */_jsx(Field, {
628
1331
  form: resolvedForm,
629
1332
  name,
@@ -631,45 +1334,25 @@ function Geolocation(param) {
631
1334
  validators: resolvedValidators,
632
1335
  children: function children(field) {
633
1336
  var resolvedError = getFieldError(field, displayError);
634
- var handlers2 = makeHandlers(field.state.value || "", function (v) {
1337
+ return wrap(field.state.value || "", function (v) {
635
1338
  field.handleChange(v);
636
1339
  onChange === null || onChange === void 0 ? void 0 : onChange(v);
637
- });
638
- return /* @__PURE__ */_jsx(FieldLayout, {
639
- id,
640
- label,
641
- labelProps,
642
- error: resolvedError,
643
- helperText,
644
- required,
645
- size,
646
- knobProps,
647
- onBlur: mergeFieldHandler(field, "handleBlur", onBlur),
648
- // LC-40: see standalone branch — FieldLayout carries dimWhole.
649
- disabled,
650
- children: /* @__PURE__ */_jsx(GeoMapSurface, {
651
- id,
652
- coordinates: handlers2.coordinates,
653
- onCommitCoordinates: handlers2.onCommitCoordinates,
654
- onUseMyLocation: handlers2.onUseMyLocation,
655
- onRetryLocate: handlers2.onRetryLocate,
656
- onCloseLocate: handlers2.onCloseLocate,
657
- onMapChange: handlers2.onMapChange,
658
- disabled: !!disabled,
659
- readOnly: !!readOnly,
660
- locatePhase,
661
- locateError,
662
- knobProps,
663
- locationIcon,
664
- expandIcon,
665
- renderMap,
666
- required,
667
- hasError: !!resolvedError,
668
- mapHeight
669
- })
670
- });
1340
+ }, resolvedError, mergeFieldHandler(field, "handleBlur", onBlur));
671
1341
  }
672
1342
  });
673
1343
  }
674
- export { Geolocation, preflightGeolocation };
1344
+ function GeolocationValueSync(param) {
1345
+ var {
1346
+ value,
1347
+ runReverse
1348
+ } = param;
1349
+ var coords = parseGeoValue(value);
1350
+ var key = coords ? coordinateKey(coords) : "";
1351
+ useEffect(function () {
1352
+ var next = parseGeoValue(value);
1353
+ void runReverse(next === null || next === void 0 ? void 0 : next.lat, next === null || next === void 0 ? void 0 : next.lng);
1354
+ }, [key, value, runReverse]);
1355
+ return null;
1356
+ }
1357
+ export { Geolocation, clampLat2 as clampLat, clampLng2 as clampLng, formatCoordPair2 as formatCoordPair, formatPlace2 as formatPlace, parseLatLngPair2 as parseLatLngPair, preflightGeolocation, resolveGeocoder2 as resolveGeocoder };
675
1358
  //# sourceMappingURL=index.native.js.map