@multiplatform.one/forms 7.7.4 → 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 (579) hide show
  1. package/dist/cjs/Button/index.cjs +3 -36
  2. package/dist/cjs/Button/index.native.js +3 -36
  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/ContextualSaveBar/index.cjs +17 -10
  8. package/dist/cjs/ContextualSaveBar/index.native.js +18 -10
  9. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  10. package/dist/cjs/FloatingPanel/index.cjs +59 -14
  11. package/dist/cjs/FloatingPanel/index.native.js +16 -7
  12. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  13. package/dist/cjs/FloatingPanel/nestedAction.cjs +37 -0
  14. package/dist/cjs/FloatingPanel/nestedAction.native.js +42 -0
  15. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -0
  16. package/dist/cjs/InputParts/index.cjs +11 -7
  17. package/dist/cjs/InputParts/index.native.js +12 -10
  18. package/dist/cjs/InputParts/index.native.js.map +1 -1
  19. package/dist/cjs/Wheel/index.cjs +3 -3
  20. package/dist/cjs/Wheel/index.native.js +3 -3
  21. package/dist/cjs/Wheel/index.native.js.map +1 -1
  22. package/dist/cjs/fieldLayout.cjs +3 -3
  23. package/dist/cjs/fieldLayout.native.js +3 -3
  24. package/dist/cjs/fieldLayout.native.js.map +1 -1
  25. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.cjs +9 -2
  26. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  27. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  28. package/dist/cjs/fields/Combobox/index.cjs +74 -76
  29. package/dist/cjs/fields/Combobox/index.native.js +78 -86
  30. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  31. package/dist/cjs/fields/DatePicker/Calendar.cjs +6 -1
  32. package/dist/cjs/fields/DatePicker/Calendar.native.js +6 -1
  33. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  34. package/dist/cjs/fields/DatePicker/DateRangePicker.cjs +2 -2
  35. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  36. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  37. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +15 -12
  38. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  39. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  40. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +39 -14
  41. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  42. package/dist/cjs/fields/DatePicker/MonthPicker.cjs +10 -3
  43. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +10 -3
  44. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  45. package/dist/cjs/fields/DatePicker/MultiDatePicker.cjs +2 -2
  46. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  47. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  48. package/dist/cjs/fields/DatePicker/index.native.js +3 -0
  49. package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
  50. package/dist/cjs/fields/DatePicker/parts.cjs +26 -14
  51. package/dist/cjs/fields/DatePicker/parts.native.js +28 -14
  52. package/dist/cjs/fields/DatePicker/parts.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 +14 -3
  64. package/dist/cjs/fields/Icon/drawnSet.native.js +18 -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/SearchInput/index.cjs +8 -9
  76. package/dist/cjs/fields/SearchInput/index.native.js +8 -9
  77. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  78. package/dist/cjs/fields/Select/index.cjs +53 -18
  79. package/dist/cjs/fields/Select/index.native.js +63 -37
  80. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  81. package/dist/cjs/fields/Stepper/index.cjs +144 -31
  82. package/dist/cjs/fields/Stepper/index.native.js +151 -31
  83. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  84. package/dist/cjs/index.cjs +2 -0
  85. package/dist/cjs/index.native.js +2 -0
  86. package/dist/cjs/index.native.js.map +1 -1
  87. package/dist/cjs/shared/focusManagement.cjs +24 -11
  88. package/dist/cjs/shared/focusManagement.native.js +24 -11
  89. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  90. package/dist/cjs/shared/pickerTriggerContract.cjs +38 -0
  91. package/dist/cjs/shared/pickerTriggerContract.native.js +41 -0
  92. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -0
  93. package/dist/cjs/shared/pressSlopProps.cjs +68 -0
  94. package/dist/cjs/shared/pressSlopProps.native.js +72 -0
  95. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -0
  96. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  97. package/dist/esm/Button/index.mjs +1 -34
  98. package/dist/esm/Button/index.mjs.map +1 -1
  99. package/dist/esm/Button/index.native.js +1 -34
  100. package/dist/esm/Button/index.native.js.map +1 -1
  101. package/dist/esm/Chip/index.mjs +1 -1
  102. package/dist/esm/Chip/index.mjs.map +1 -1
  103. package/dist/esm/Chip/index.native.js +1 -1
  104. package/dist/esm/Chip/index.native.js.map +1 -1
  105. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  106. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  107. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  108. package/dist/esm/ContextualSaveBar/index.mjs +17 -10
  109. package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
  110. package/dist/esm/ContextualSaveBar/index.native.js +18 -10
  111. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  112. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  113. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  114. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  115. package/dist/esm/ErrorSummary.native.js.map +1 -1
  116. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  117. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  118. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  119. package/dist/esm/FieldGroup.native.js.map +1 -1
  120. package/dist/esm/FloatingPanel/index.mjs +58 -15
  121. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  122. package/dist/esm/FloatingPanel/index.native.js +15 -8
  123. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  124. package/dist/esm/FloatingPanel/nestedAction.mjs +11 -0
  125. package/dist/esm/FloatingPanel/nestedAction.mjs.map +1 -0
  126. package/dist/esm/FloatingPanel/nestedAction.native.js +13 -0
  127. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -0
  128. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  129. package/dist/esm/Form/index.native.js.map +1 -1
  130. package/dist/esm/Form/validateOn.native.js.map +1 -1
  131. package/dist/esm/FormGrid.native.js.map +1 -1
  132. package/dist/esm/FormSection.native.js.map +1 -1
  133. package/dist/esm/InputParts/index.mjs +12 -8
  134. package/dist/esm/InputParts/index.mjs.map +1 -1
  135. package/dist/esm/InputParts/index.native.js +13 -11
  136. package/dist/esm/InputParts/index.native.js.map +1 -1
  137. package/dist/esm/Label/index.native.js.map +1 -1
  138. package/dist/esm/Skeleton/index.native.js.map +1 -1
  139. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  140. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  141. package/dist/esm/Table/index.native.js.map +1 -1
  142. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  143. package/dist/esm/Wheel/index.mjs +3 -3
  144. package/dist/esm/Wheel/index.mjs.map +1 -1
  145. package/dist/esm/Wheel/index.native.js +3 -3
  146. package/dist/esm/Wheel/index.native.js.map +1 -1
  147. package/dist/esm/actionLabel.native.js.map +1 -1
  148. package/dist/esm/fieldDefaults.native.js.map +1 -1
  149. package/dist/esm/fieldLayout.mjs +3 -3
  150. package/dist/esm/fieldLayout.mjs.map +1 -1
  151. package/dist/esm/fieldLayout.native.js +3 -3
  152. package/dist/esm/fieldLayout.native.js.map +1 -1
  153. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  154. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  155. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  156. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  157. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  158. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  159. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  160. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  161. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
  162. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
  163. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  164. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  165. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  166. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  167. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  168. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  169. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  170. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  171. package/dist/esm/fields/Combobox/index.mjs +74 -76
  172. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  173. package/dist/esm/fields/Combobox/index.native.js +78 -86
  174. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  175. package/dist/esm/fields/DatePicker/Calendar.mjs +6 -1
  176. package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
  177. package/dist/esm/fields/DatePicker/Calendar.native.js +6 -1
  178. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  179. package/dist/esm/fields/DatePicker/DateRangePicker.mjs +2 -2
  180. package/dist/esm/fields/DatePicker/DateRangePicker.mjs.map +1 -1
  181. package/dist/esm/fields/DatePicker/DateRangePicker.native.js +2 -2
  182. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  183. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
  184. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  185. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  186. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  187. package/dist/esm/fields/DatePicker/DatetimePicker.native.js +39 -14
  188. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  189. package/dist/esm/fields/DatePicker/MonthPicker.mjs +10 -3
  190. package/dist/esm/fields/DatePicker/MonthPicker.mjs.map +1 -1
  191. package/dist/esm/fields/DatePicker/MonthPicker.native.js +10 -3
  192. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  193. package/dist/esm/fields/DatePicker/MultiDatePicker.mjs +2 -2
  194. package/dist/esm/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
  195. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js +2 -2
  196. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  197. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  198. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  199. package/dist/esm/fields/DatePicker/index.native.js +3 -0
  200. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  201. package/dist/esm/fields/DatePicker/parts.mjs +28 -16
  202. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  203. package/dist/esm/fields/DatePicker/parts.native.js +30 -16
  204. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  205. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  206. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  207. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  208. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  209. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  210. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  211. package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  212. package/dist/esm/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  213. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  214. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  215. package/dist/esm/fields/Geolocation/geocoder.mjs +33 -0
  216. package/dist/esm/fields/Geolocation/geocoder.mjs.map +1 -0
  217. package/dist/esm/fields/Geolocation/geocoder.native.js +35 -0
  218. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -0
  219. package/dist/esm/fields/Geolocation/index.mjs +792 -149
  220. package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
  221. package/dist/esm/fields/Geolocation/index.native.js +847 -164
  222. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  223. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  224. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  225. package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs +19 -0
  226. package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
  227. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js +19 -0
  228. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  229. package/dist/esm/fields/Icon/drawnSet.mjs +14 -3
  230. package/dist/esm/fields/Icon/drawnSet.mjs.map +1 -1
  231. package/dist/esm/fields/Icon/drawnSet.native.js +18 -3
  232. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  233. package/dist/esm/fields/Icon/index.mjs +93 -18
  234. package/dist/esm/fields/Icon/index.mjs.map +1 -1
  235. package/dist/esm/fields/Icon/index.native.js +106 -22
  236. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  237. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  238. package/dist/esm/fields/Input/index.mjs +5 -12
  239. package/dist/esm/fields/Input/index.mjs.map +1 -1
  240. package/dist/esm/fields/Input/index.native.js +5 -13
  241. package/dist/esm/fields/Input/index.native.js.map +1 -1
  242. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  243. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  244. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  245. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  246. package/dist/esm/fields/PhoneInput/index.mjs +2 -2
  247. package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
  248. package/dist/esm/fields/PhoneInput/index.native.js +2 -2
  249. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  250. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  251. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  252. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  253. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  254. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  255. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  256. package/dist/esm/fields/SearchInput/index.mjs +9 -10
  257. package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
  258. package/dist/esm/fields/SearchInput/index.native.js +9 -10
  259. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  260. package/dist/esm/fields/Select/index.mjs +54 -19
  261. package/dist/esm/fields/Select/index.mjs.map +1 -1
  262. package/dist/esm/fields/Select/index.native.js +64 -38
  263. package/dist/esm/fields/Select/index.native.js.map +1 -1
  264. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  265. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  266. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  267. package/dist/esm/fields/Stepper/index.mjs +145 -32
  268. package/dist/esm/fields/Stepper/index.mjs.map +1 -1
  269. package/dist/esm/fields/Stepper/index.native.js +152 -32
  270. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  271. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  272. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  273. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  274. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  275. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  276. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  277. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  278. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  279. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  280. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  281. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  282. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  283. package/dist/esm/formSpacing.native.js.map +1 -1
  284. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  285. package/dist/esm/index.mjs +2 -1
  286. package/dist/esm/index.mjs.map +1 -1
  287. package/dist/esm/index.native.js +2 -1
  288. package/dist/esm/index.native.js.map +1 -1
  289. package/dist/esm/requiredMarking.native.js.map +1 -1
  290. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  291. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  292. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  293. package/dist/esm/shared/devWarn.native.js.map +1 -1
  294. package/dist/esm/shared/floatingList.native.js.map +1 -1
  295. package/dist/esm/shared/focusManagement.mjs +24 -11
  296. package/dist/esm/shared/focusManagement.mjs.map +1 -1
  297. package/dist/esm/shared/focusManagement.native.js +24 -11
  298. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  299. package/dist/esm/shared/groupContext.native.js.map +1 -1
  300. package/dist/esm/shared/i18n.native.js.map +1 -1
  301. package/dist/esm/shared/pickerTriggerContract.mjs +13 -0
  302. package/dist/esm/shared/pickerTriggerContract.mjs.map +1 -0
  303. package/dist/esm/shared/pickerTriggerContract.native.js +13 -0
  304. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -0
  305. package/dist/esm/shared/pressSlopProps.mjs +43 -0
  306. package/dist/esm/shared/pressSlopProps.mjs.map +1 -0
  307. package/dist/esm/shared/pressSlopProps.native.js +44 -0
  308. package/dist/esm/shared/pressSlopProps.native.js.map +1 -0
  309. package/dist/esm/shared/t.native.js.map +1 -1
  310. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  311. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  312. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  313. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  314. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  315. package/dist/esm/shared/utils.native.js.map +1 -1
  316. package/dist/esm/shared/zIndex.native.js.map +1 -1
  317. package/dist/esm/themedPrimitives.native.js.map +1 -1
  318. package/dist/esm/types.native.js.map +1 -1
  319. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  320. package/dist/jsx/Button/index.mjs +1 -34
  321. package/dist/jsx/Button/index.mjs.map +1 -1
  322. package/dist/jsx/Button/index.native.js +3 -36
  323. package/dist/jsx/Button/index.native.js.map +1 -1
  324. package/dist/jsx/Chip/index.mjs +1 -1
  325. package/dist/jsx/Chip/index.mjs.map +1 -1
  326. package/dist/jsx/Chip/index.native.js +1 -1
  327. package/dist/jsx/Chip/index.native.js.map +1 -1
  328. package/dist/jsx/ContextualSaveBar/index.mjs +17 -10
  329. package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
  330. package/dist/jsx/ContextualSaveBar/index.native.js +18 -10
  331. package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
  332. package/dist/jsx/FloatingPanel/index.mjs +58 -15
  333. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  334. package/dist/jsx/FloatingPanel/index.native.js +16 -7
  335. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  336. package/dist/jsx/FloatingPanel/nestedAction.mjs +11 -0
  337. package/dist/jsx/FloatingPanel/nestedAction.mjs.map +1 -0
  338. package/dist/jsx/FloatingPanel/nestedAction.native.js +42 -0
  339. package/dist/jsx/FloatingPanel/nestedAction.native.js.map +1 -0
  340. package/dist/jsx/InputParts/index.mjs +12 -8
  341. package/dist/jsx/InputParts/index.mjs.map +1 -1
  342. package/dist/jsx/InputParts/index.native.js +12 -10
  343. package/dist/jsx/InputParts/index.native.js.map +1 -1
  344. package/dist/jsx/Wheel/index.mjs +3 -3
  345. package/dist/jsx/Wheel/index.mjs.map +1 -1
  346. package/dist/jsx/Wheel/index.native.js +3 -3
  347. package/dist/jsx/Wheel/index.native.js.map +1 -1
  348. package/dist/jsx/fieldLayout.mjs +3 -3
  349. package/dist/jsx/fieldLayout.mjs.map +1 -1
  350. package/dist/jsx/fieldLayout.native.js +3 -3
  351. package/dist/jsx/fieldLayout.native.js.map +1 -1
  352. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
  353. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
  354. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
  355. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  356. package/dist/jsx/fields/Combobox/index.mjs +74 -76
  357. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  358. package/dist/jsx/fields/Combobox/index.native.js +78 -86
  359. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  360. package/dist/jsx/fields/DatePicker/Calendar.mjs +6 -1
  361. package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
  362. package/dist/jsx/fields/DatePicker/Calendar.native.js +6 -1
  363. package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
  364. package/dist/jsx/fields/DatePicker/DateRangePicker.mjs +2 -2
  365. package/dist/jsx/fields/DatePicker/DateRangePicker.mjs.map +1 -1
  366. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
  367. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  368. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
  369. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  370. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
  371. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  372. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +39 -14
  373. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  374. package/dist/jsx/fields/DatePicker/MonthPicker.mjs +10 -3
  375. package/dist/jsx/fields/DatePicker/MonthPicker.mjs.map +1 -1
  376. package/dist/jsx/fields/DatePicker/MonthPicker.native.js +10 -3
  377. package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
  378. package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs +2 -2
  379. package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
  380. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
  381. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  382. package/dist/jsx/fields/DatePicker/index.native.js +3 -0
  383. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  384. package/dist/jsx/fields/DatePicker/parts.mjs +28 -16
  385. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  386. package/dist/jsx/fields/DatePicker/parts.native.js +28 -14
  387. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  388. package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
  389. package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
  390. package/dist/jsx/fields/Geolocation/geocoder.mjs +33 -0
  391. package/dist/jsx/fields/Geolocation/geocoder.mjs.map +1 -0
  392. package/dist/jsx/fields/Geolocation/geocoder.native.js +68 -0
  393. package/dist/jsx/fields/Geolocation/geocoder.native.js.map +1 -0
  394. package/dist/jsx/fields/Geolocation/index.mjs +792 -149
  395. package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
  396. package/dist/jsx/fields/Geolocation/index.native.js +856 -167
  397. package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
  398. package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs +19 -0
  399. package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
  400. package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js +47 -0
  401. package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
  402. package/dist/jsx/fields/Icon/drawnSet.mjs +14 -3
  403. package/dist/jsx/fields/Icon/drawnSet.mjs.map +1 -1
  404. package/dist/jsx/fields/Icon/drawnSet.native.js +18 -3
  405. package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
  406. package/dist/jsx/fields/Icon/index.mjs +93 -18
  407. package/dist/jsx/fields/Icon/index.mjs.map +1 -1
  408. package/dist/jsx/fields/Icon/index.native.js +115 -31
  409. package/dist/jsx/fields/Icon/index.native.js.map +1 -1
  410. package/dist/jsx/fields/Input/index.mjs +5 -12
  411. package/dist/jsx/fields/Input/index.mjs.map +1 -1
  412. package/dist/jsx/fields/Input/index.native.js +5 -13
  413. package/dist/jsx/fields/Input/index.native.js.map +1 -1
  414. package/dist/jsx/fields/PhoneInput/index.mjs +2 -2
  415. package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
  416. package/dist/jsx/fields/PhoneInput/index.native.js +2 -2
  417. package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
  418. package/dist/jsx/fields/SearchInput/index.mjs +9 -10
  419. package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
  420. package/dist/jsx/fields/SearchInput/index.native.js +8 -9
  421. package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
  422. package/dist/jsx/fields/Select/index.mjs +54 -19
  423. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  424. package/dist/jsx/fields/Select/index.native.js +63 -37
  425. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  426. package/dist/jsx/fields/Stepper/index.mjs +145 -32
  427. package/dist/jsx/fields/Stepper/index.mjs.map +1 -1
  428. package/dist/jsx/fields/Stepper/index.native.js +151 -31
  429. package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
  430. package/dist/jsx/index.js +2 -1
  431. package/dist/jsx/index.js.map +1 -1
  432. package/dist/jsx/index.mjs +2 -1
  433. package/dist/jsx/index.mjs.map +1 -1
  434. package/dist/jsx/index.native.js +2 -0
  435. package/dist/jsx/index.native.js.map +1 -1
  436. package/dist/jsx/shared/focusManagement.mjs +24 -11
  437. package/dist/jsx/shared/focusManagement.mjs.map +1 -1
  438. package/dist/jsx/shared/focusManagement.native.js +24 -11
  439. package/dist/jsx/shared/focusManagement.native.js.map +1 -1
  440. package/dist/jsx/shared/pickerTriggerContract.mjs +13 -0
  441. package/dist/jsx/shared/pickerTriggerContract.mjs.map +1 -0
  442. package/dist/jsx/shared/pickerTriggerContract.native.js +41 -0
  443. package/dist/jsx/shared/pickerTriggerContract.native.js.map +1 -0
  444. package/dist/jsx/shared/pressSlopProps.mjs +43 -0
  445. package/dist/jsx/shared/pressSlopProps.mjs.map +1 -0
  446. package/dist/jsx/shared/pressSlopProps.native.js +72 -0
  447. package/dist/jsx/shared/pressSlopProps.native.js.map +1 -0
  448. package/package.json +8 -7
  449. package/src/Button/Button.labelInk.spec.tsx +21 -18
  450. package/src/Button/Button.outlinedChannel.spec.tsx +46 -0
  451. package/src/Button/Button.sizeLadder.spec.tsx +4 -3
  452. package/src/Button/Button.stories.tsx +20 -0
  453. package/src/Button/index.tsx +26 -39
  454. package/src/Chip/Chip.spec.tsx +3 -1
  455. package/src/Chip/index.tsx +1 -5
  456. package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +33 -0
  457. package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +19 -0
  458. package/src/ContextualSaveBar/index.tsx +12 -8
  459. package/src/ContextualSaveBar/nativeFlow.spec.tsx +20 -0
  460. package/src/FieldLayout.stories.tsx +41 -0
  461. package/src/FloatingPanel/FloatingPanel.native.spec.tsx +54 -0
  462. package/src/FloatingPanel/FloatingPanel.spec.tsx +109 -0
  463. package/src/FloatingPanel/index.native.tsx +24 -7
  464. package/src/FloatingPanel/index.tsx +80 -13
  465. package/src/FloatingPanel/nestedAction.spec.ts +36 -0
  466. package/src/FloatingPanel/nestedAction.ts +15 -0
  467. package/src/FloatingPanel/panelWidthContract.spec.ts +12 -15
  468. package/src/FormsIntegration.stories.tsx +2 -6
  469. package/src/InputParts/index.tsx +20 -6
  470. package/src/InputParts/layoutGap.spec.tsx +43 -0
  471. package/src/Wheel/Wheel.spec.tsx +16 -0
  472. package/src/Wheel/index.tsx +3 -3
  473. package/src/fieldLayout.spec.tsx +42 -1
  474. package/src/fieldLayout.tsx +9 -9
  475. package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +18 -0
  476. package/src/fields/Checkbox/CheckboxFieldFrame.tsx +6 -1
  477. package/src/fields/Combobox/Combobox.spec.tsx +48 -1
  478. package/src/fields/Combobox/index.tsx +90 -80
  479. package/src/fields/DatePicker/Calendar.tsx +4 -1
  480. package/src/fields/DatePicker/DatePicker.stories.tsx +22 -1
  481. package/src/fields/DatePicker/DateRangePicker.tsx +4 -2
  482. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +21 -19
  483. package/src/fields/DatePicker/DatetimePicker.native.spec.tsx +144 -0
  484. package/src/fields/DatePicker/DatetimePicker.native.tsx +57 -32
  485. package/src/fields/DatePicker/DatetimePicker.stories.tsx +22 -0
  486. package/src/fields/DatePicker/MonthPicker.tsx +8 -3
  487. package/src/fields/DatePicker/MultiDatePicker.tsx +4 -2
  488. package/src/fields/DatePicker/index.native.tsx +1 -0
  489. package/src/fields/DatePicker/parts.spec.tsx +56 -0
  490. package/src/fields/DatePicker/parts.tsx +33 -12
  491. package/src/fields/Geolocation/Geolocation.spec.tsx +287 -35
  492. package/src/fields/Geolocation/Geolocation.stories.tsx +141 -7
  493. package/src/fields/Geolocation/GeolocationMap.native.tsx +3 -0
  494. package/src/fields/Geolocation/GeolocationMap.tsx +4 -0
  495. package/src/fields/Geolocation/geocoder.spec.ts +59 -0
  496. package/src/fields/Geolocation/geocoder.ts +84 -0
  497. package/src/fields/Geolocation/geocoderSeam.spec.tsx +203 -0
  498. package/src/fields/Geolocation/index.tsx +912 -180
  499. package/src/fields/Geolocation/nativeSearchFocus.spec.ts +34 -0
  500. package/src/fields/Geolocation/nativeSearchFocus.ts +19 -0
  501. package/src/fields/Geolocation/salvage.spec.tsx +398 -0
  502. package/src/fields/Geolocation/storyProviders.spec.tsx +44 -0
  503. package/src/fields/Icon/Icon.spec.tsx +215 -1
  504. package/src/fields/Icon/Icon.stories.tsx +9 -1
  505. package/src/fields/Icon/drawnSet.tsx +39 -4
  506. package/src/fields/Icon/index.tsx +118 -18
  507. package/src/fields/Input/Input.copy.spec.tsx +1 -0
  508. package/src/fields/Input/Input.spec.tsx +50 -0
  509. package/src/fields/Input/Input.stories.tsx +1 -1
  510. package/src/fields/Input/index.tsx +7 -13
  511. package/src/fields/PhoneInput/index.tsx +2 -2
  512. package/src/fields/SearchInput/SearchInput.spec.tsx +14 -0
  513. package/src/fields/SearchInput/index.tsx +5 -6
  514. package/src/fields/Select/Select.spec.tsx +54 -0
  515. package/src/fields/Select/index.tsx +63 -33
  516. package/src/fields/Stepper/Stepper.spec.tsx +34 -1
  517. package/src/fields/Stepper/index.tsx +193 -33
  518. package/src/fields/pickerActivation.spec.tsx +105 -0
  519. package/src/fields/pickerDensity.spec.tsx +86 -0
  520. package/src/fields/pickerRows.spec.tsx +66 -0
  521. package/src/index.ts +9 -0
  522. package/src/shared/focusManagement.spec.tsx +68 -0
  523. package/src/shared/focusManagement.ts +20 -10
  524. package/src/shared/pickerTriggerContract.ts +13 -0
  525. package/src/shared/pressSlopProps.spec.ts +39 -0
  526. package/src/shared/pressSlopProps.ts +52 -0
  527. package/types/Button/index.d.ts +22 -3
  528. package/types/Button/index.d.ts.map +1 -1
  529. package/types/Chip/index.d.ts.map +1 -1
  530. package/types/ContextualSaveBar/index.d.ts +1 -1
  531. package/types/ContextualSaveBar/index.d.ts.map +1 -1
  532. package/types/FloatingPanel/index.d.ts +11 -1
  533. package/types/FloatingPanel/index.d.ts.map +1 -1
  534. package/types/FloatingPanel/index.native.d.ts +2 -1
  535. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  536. package/types/FloatingPanel/nestedAction.d.ts +13 -0
  537. package/types/FloatingPanel/nestedAction.d.ts.map +1 -0
  538. package/types/InputParts/index.d.ts.map +1 -1
  539. package/types/fields/Checkbox/CheckboxFieldFrame.d.ts +46 -2
  540. package/types/fields/Checkbox/CheckboxFieldFrame.d.ts.map +1 -1
  541. package/types/fields/Checkbox/index.d.ts +3 -3
  542. package/types/fields/Combobox/index.d.ts +3 -1
  543. package/types/fields/Combobox/index.d.ts.map +1 -1
  544. package/types/fields/DatePicker/Calendar.d.ts.map +1 -1
  545. package/types/fields/DatePicker/DateRangePicker.d.ts.map +1 -1
  546. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  547. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
  548. package/types/fields/DatePicker/MonthPicker.d.ts.map +1 -1
  549. package/types/fields/DatePicker/MultiDatePicker.d.ts.map +1 -1
  550. package/types/fields/DatePicker/index.native.d.ts.map +1 -1
  551. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  552. package/types/fields/Geolocation/GeolocationMap.d.ts +4 -0
  553. package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
  554. package/types/fields/Geolocation/GeolocationMap.native.d.ts +3 -0
  555. package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
  556. package/types/fields/Geolocation/geocoder.d.ts +53 -0
  557. package/types/fields/Geolocation/geocoder.d.ts.map +1 -0
  558. package/types/fields/Geolocation/index.d.ts +18 -2
  559. package/types/fields/Geolocation/index.d.ts.map +1 -1
  560. package/types/fields/Geolocation/nativeSearchFocus.d.ts +8 -0
  561. package/types/fields/Geolocation/nativeSearchFocus.d.ts.map +1 -0
  562. package/types/fields/Icon/drawnSet.d.ts.map +1 -1
  563. package/types/fields/Icon/index.d.ts.map +1 -1
  564. package/types/fields/Input/index.d.ts.map +1 -1
  565. package/types/fields/PhoneInput/index.d.ts.map +1 -1
  566. package/types/fields/RadioGroup/index.d.ts +2 -2
  567. package/types/fields/SearchInput/index.d.ts.map +1 -1
  568. package/types/fields/Select/index.d.ts.map +1 -1
  569. package/types/fields/Stepper/index.d.ts.map +1 -1
  570. package/types/fields/ToggleGroup/index.d.ts +1 -1
  571. package/types/index.d.ts +2 -0
  572. package/types/index.d.ts.map +1 -1
  573. package/types/shared/focusManagement.d.ts +2 -2
  574. package/types/shared/focusManagement.d.ts.map +1 -1
  575. package/types/shared/pickerTriggerContract.d.ts +18 -0
  576. package/types/shared/pickerTriggerContract.d.ts.map +1 -0
  577. package/types/shared/pressSlopProps.d.ts +8 -0
  578. package/types/shared/pressSlopProps.d.ts.map +1 -0
  579. package/src/router.d.ts +0 -16
@@ -1,5 +1,5 @@
1
1
  import { act, fireEvent } from "@testing-library/react";
2
- import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
3
  import { renderWithProviders } from "@multiplatform.one/test-utils";
4
4
  import { Form } from "../../Form";
5
5
  import { Combobox } from "./index";
@@ -11,6 +11,53 @@ const options = [
11
11
  ];
12
12
 
13
13
  describe("Combobox", () => {
14
+ describe("custom sheet trigger", () => {
15
+ const initialWidth = window.innerWidth;
16
+ afterEach(() => {
17
+ window.innerWidth = initialWidth;
18
+ });
19
+
20
+ it("keeps the same name and keyboard opener on narrow and wide screens", async () => {
21
+ for (const width of [500, 1200]) {
22
+ window.innerWidth = width;
23
+ const result = renderWithProviders(
24
+ <Combobox
25
+ options={options}
26
+ aria-label="Country code"
27
+ trigger={() => <span>Country</span>}
28
+ />,
29
+ );
30
+ const trigger = result.container.querySelector('[role="combobox"]');
31
+ expect(trigger?.getAttribute("aria-label")).toBe("Country code");
32
+ expect(trigger?.getAttribute("tabindex")).toBe("0");
33
+ expect(trigger?.getAttribute("aria-expanded")).toBe("false");
34
+ await act(async () => fireEvent.keyDown(trigger!, { key: "Enter" }));
35
+ expect(trigger?.getAttribute("aria-expanded")).toBe("true");
36
+ result.unmount();
37
+ }
38
+ });
39
+
40
+ it("lets a custom adornment hug its content while ordinary triggers keep stretching", () => {
41
+ for (const width of [500, 1200]) {
42
+ window.innerWidth = width;
43
+ for (const triggerSizing of [undefined, "content"] as const) {
44
+ const result = renderWithProviders(
45
+ <Combobox
46
+ options={options}
47
+ triggerSizing={triggerSizing}
48
+ trigger={() => <span>Country</span>}
49
+ />,
50
+ );
51
+ const trigger = result.container.querySelector<HTMLElement>(
52
+ '[data-testid="combobox-trigger"]',
53
+ );
54
+ expect(trigger?.style.width).toBe(triggerSizing === "content" ? "auto" : "100%");
55
+ result.unmount();
56
+ }
57
+ }
58
+ });
59
+ });
60
+
14
61
  describe("without form context", () => {
15
62
  it("renders with label", () => {
16
63
  const result = renderWithProviders(<Combobox label="Fruit" name="fruit" options={options} />);
@@ -37,7 +37,9 @@ import {
37
37
  import type { LabelProps, SizeTokens } from "tamagui";
38
38
  import { Pressable as RNPressable } from "react-native";
39
39
  import { Input as TInput, Text, View, XStack, YStack, isWeb, styled, useTheme } from "tamagui";
40
+ import { Button } from "../../Button";
40
41
  import { Chip, type ChipProps } from "../../Chip";
42
+ import { pickerTriggerContract } from "../../shared/pickerTriggerContract";
41
43
  import { Skeleton } from "../../Skeleton";
42
44
  import { Field, FieldLayout, useFieldA11y, useFieldDescribedBy } from "../../fieldLayout";
43
45
  import { Input as InputParts } from "../../InputParts";
@@ -189,6 +191,8 @@ export interface ComboboxProps {
189
191
  /** Whether more pages are available. Shows a spinner at the bottom when loading more. */
190
192
  hasMore?: boolean;
191
193
  trigger?: (selected: ComboboxOption | ComboboxOption[] | undefined, open: boolean) => ReactNode;
194
+ /** Custom triggers stretch by default; content hugs a composite-field adornment. */
195
+ triggerSizing?: "stretch" | "content";
192
196
  name?: string;
193
197
  form?: AnyFormApi;
194
198
  validators?: Record<string, unknown>;
@@ -367,7 +371,7 @@ const ComboboxItem = memo(function ComboboxItem({
367
371
  active={isActive}
368
372
  aria-selected={isSelected}
369
373
  data-state={isSelected ? "active" : "inactive"}
370
- size={ctx.knobProps.sizeToken}
374
+ height={ctx.knobProps.control.height}
371
375
  {...listItemRingProps(Boolean(keyboardRing))}
372
376
  {...(suppressHover
373
377
  ? {
@@ -456,6 +460,7 @@ interface FloatingComboboxCoreProps {
456
460
  tabIndexOverride?: number;
457
461
  popoverWidth?: number;
458
462
  trigger?: (selected: ComboboxOption | ComboboxOption[] | undefined, open: boolean) => ReactNode;
463
+ triggerSizing?: "stretch" | "content";
459
464
  knobProps: KnobProps;
460
465
  multiple?: boolean;
461
466
  selectedOrder?: SelectedOrder;
@@ -491,6 +496,7 @@ function FloatingComboboxCore({
491
496
  tabIndexOverride,
492
497
  popoverWidth,
493
498
  trigger: triggerRender,
499
+ triggerSizing = "stretch",
494
500
  knobProps,
495
501
  multiple,
496
502
  selectedOrder,
@@ -1349,12 +1355,16 @@ function FloatingComboboxCore({
1349
1355
  <View
1350
1356
  {...boxEventProps}
1351
1357
  data-testid="combobox-trigger"
1352
- width="100%"
1358
+ width={triggerSizing === "content" ? "auto" : "100%"}
1353
1359
  alignSelf="stretch"
1354
1360
  flexShrink={0}
1355
1361
  outlineWidth={0}
1356
1362
  focusVisibleStyle={ensureFocusVisibleRing({ outlineOffset: -2 })}
1357
- style={{ display: "flex", alignItems: "stretch", width: "100%" }}
1363
+ style={{
1364
+ display: "flex",
1365
+ alignItems: "stretch",
1366
+ width: triggerSizing === "content" ? "auto" : "100%",
1367
+ }}
1358
1368
  >
1359
1369
  {triggerRender(multiple ? selectedOptions : selectedOption, open)}
1360
1370
  </View>
@@ -1373,17 +1383,13 @@ function FloatingComboboxCore({
1373
1383
  // attaches below instead (MPO-38), leaving the trigger on screen and
1374
1384
  // focusable, so it keeps its ring.
1375
1385
  suppressFocusRing={open && !multiple}
1386
+ {...pickerTriggerContract(knobProps.control.height)}
1376
1387
  {...(inTableCell
1377
- ? // Chromeless in cells, but keep a ≥44px pressable target (SP-FIXED).
1378
- { minHeight: 44 }
1388
+ ? // Chromeless in cells.
1389
+ {}
1379
1390
  : {
1380
1391
  borderRadius: knobProps.borderRadius.borderRadius,
1381
1392
  borderWidth: knobProps.borderRadius.borderWidth,
1382
- // LC-54 PRESS-FLOOR: compact/small size tokens render a sub-44
1383
- // trigger (the 36px "Allocated To" quick filter breaking the
1384
- // list's 44px control row) — same floor the house Select holds
1385
- // on both its trigger variants.
1386
- minHeight: 44,
1387
1393
  })}
1388
1394
  >
1389
1395
  <SyncFocusToOpen open={open} />
@@ -1420,6 +1426,7 @@ function FloatingComboboxCore({
1420
1426
  </View>
1421
1427
  ) : (
1422
1428
  <Text
1429
+ {...knobProps.controlType}
1423
1430
  fontFamily={knobProps.body.fontFamily}
1424
1431
  fontWeight={knobProps.body.fontWeight}
1425
1432
  color={
@@ -1435,11 +1442,13 @@ function FloatingComboboxCore({
1435
1442
  )}
1436
1443
  </View>
1437
1444
  {clearable && !multiple && !disabled && typeof value === "string" && value !== "" && (
1438
- <View
1439
- paddingInlineEnd="$1"
1445
+ <Button
1446
+ size={knobProps.control.height}
1447
+ chromeless
1448
+ {...pickerTriggerContract(knobProps.control.height)}
1449
+ icon={<XIcon size={14} />}
1440
1450
  alignSelf="center"
1441
1451
  cursor="pointer"
1442
- role="button"
1443
1452
  tabIndex={-1}
1444
1453
  aria-label={t("Clear")}
1445
1454
  opacity={0.6}
@@ -1454,9 +1463,7 @@ function FloatingComboboxCore({
1454
1463
  e.stopPropagation?.();
1455
1464
  onValueChange?.("");
1456
1465
  }}
1457
- >
1458
- <XIcon size={14} />
1459
- </View>
1466
+ />
1460
1467
  )}
1461
1468
  <View paddingInlineEnd="$2" alignSelf="center">
1462
1469
  <CaretDownIcon size={16} color={glyphColor} />
@@ -1607,7 +1614,7 @@ function FloatingComboboxCore({
1607
1614
  id={comboboxOptionId(id, createOptionIndex)}
1608
1615
  selected={false}
1609
1616
  active={createOptionIndex === activeIndex}
1610
- size={knobProps.sizeToken}
1617
+ height={knobProps.control.height}
1611
1618
  data-combobox-index={createOptionIndex}
1612
1619
  data-active={createOptionIndex === activeIndex}
1613
1620
  {...listItemRingProps(createOptionIndex === activeIndex && listKeyboardRing)}
@@ -1649,7 +1656,7 @@ function FloatingComboboxCore({
1649
1656
  id={comboboxOptionId(id, createOptionIndex)}
1650
1657
  selected={false}
1651
1658
  active={createOptionIndex === activeIndex}
1652
- size={knobProps.sizeToken}
1659
+ height={knobProps.control.height}
1653
1660
  data-combobox-index={createOptionIndex}
1654
1661
  data-active={createOptionIndex === activeIndex}
1655
1662
  {...listItemRingProps(createOptionIndex === activeIndex && listKeyboardRing)}
@@ -1736,7 +1743,7 @@ const comboboxSearchHeader = (
1736
1743
  alignItems="center"
1737
1744
  gap="$2"
1738
1745
  paddingHorizontal="$3"
1739
- height={knobProps.sizeToken}
1746
+ height={knobProps.control.height}
1740
1747
  borderBottomWidth={1}
1741
1748
  borderBottomColor={formCommonColors.divider}
1742
1749
  >
@@ -1786,6 +1793,7 @@ function NativeComboboxCore({
1786
1793
  "aria-label": ariaLabel,
1787
1794
  hasLabel,
1788
1795
  trigger: triggerRender,
1796
+ triggerSizing = "stretch",
1789
1797
  knobProps,
1790
1798
  multiple,
1791
1799
  selectedOrder,
@@ -2169,8 +2177,8 @@ function NativeComboboxCore({
2169
2177
  data-active={active}
2170
2178
  {...listItemRingProps(active && listKeyboardRing)}
2171
2179
  {...(option.description
2172
- ? { minHeight: knobProps.sizeToken, paddingVertical: "$2" }
2173
- : { height: knobProps.sizeToken })}
2180
+ ? { minHeight: knobProps.control.height, paddingVertical: "$2" }
2181
+ : { height: knobProps.control.height })}
2174
2182
  onPress={isWeb ? () => handleSelect(option) : undefined}
2175
2183
  onMouseEnter={() => {
2176
2184
  setKeyboardNav(false);
@@ -2262,7 +2270,7 @@ function NativeComboboxCore({
2262
2270
  alignItems="center"
2263
2271
  gap="$2"
2264
2272
  paddingHorizontal="$3"
2265
- height={knobProps.sizeToken}
2273
+ height={knobProps.control.height}
2266
2274
  role="option"
2267
2275
  id={comboboxOptionId(id, createOptionIndex)}
2268
2276
  data-combobox-index={createOptionIndex}
@@ -2307,7 +2315,7 @@ function NativeComboboxCore({
2307
2315
  alignItems="center"
2308
2316
  gap="$2"
2309
2317
  paddingHorizontal="$3"
2310
- height={knobProps.sizeToken}
2318
+ height={knobProps.control.height}
2311
2319
  role="option"
2312
2320
  id={comboboxOptionId(id, createOptionIndex)}
2313
2321
  data-combobox-index={createOptionIndex}
@@ -2370,15 +2378,51 @@ function NativeComboboxCore({
2370
2378
  </View>
2371
2379
  );
2372
2380
 
2381
+ // Both trigger shapes share one accessible control. The sheet wrapper's
2382
+ // capture handler also opens it, so pointer activation is idempotent.
2383
+ const triggerProps = {
2384
+ id,
2385
+ ...(isWeb
2386
+ ? {
2387
+ role: "combobox" as const,
2388
+ "aria-haspopup": "listbox" as const,
2389
+ "aria-expanded": open,
2390
+ "aria-controls": listboxId,
2391
+ "aria-activedescendant": hideSearch ? activeDescendant : undefined,
2392
+ "aria-autocomplete": hideSearch ? ("list" as const) : undefined,
2393
+ "aria-label": ariaLabel ?? (!hasLabel ? placeholder : undefined),
2394
+ "aria-describedby": describedBy,
2395
+ tabIndex: disabled ? -1 : 0,
2396
+ }
2397
+ : { importantForAccessibility: "no" as const }),
2398
+ onPress: isWeb && !disabled ? () => handleOpenChange(true) : undefined,
2399
+ onKeyDown: (event: React.KeyboardEvent) => {
2400
+ if (disabled) return;
2401
+ if (
2402
+ ["Enter", " ", "ArrowDown", "ArrowUp", "j", "k"].includes(event.key) ||
2403
+ event.code === "Space"
2404
+ ) {
2405
+ event.preventDefault();
2406
+ setKeyboardNav(true);
2407
+ if (!open) handleOpenChange(true);
2408
+ }
2409
+ },
2410
+ };
2411
+
2373
2412
  const triggerContent = triggerRender ? (
2374
2413
  <View
2375
2414
  data-testid="combobox-trigger"
2376
- width="100%"
2415
+ width={triggerSizing === "content" ? "auto" : "100%"}
2377
2416
  alignSelf="stretch"
2378
2417
  flexShrink={0}
2379
2418
  outlineWidth={0}
2380
2419
  focusVisibleStyle={ensureFocusVisibleRing({ outlineOffset: -2 })}
2381
- style={{ display: "flex", alignItems: "stretch", width: "100%" }}
2420
+ style={{
2421
+ display: "flex",
2422
+ alignItems: "stretch",
2423
+ width: triggerSizing === "content" ? "auto" : "100%",
2424
+ }}
2425
+ {...triggerProps}
2382
2426
  >
2383
2427
  {triggerRender(multiple ? selectedOptions : selectedOption, open)}
2384
2428
  </View>
@@ -2395,48 +2439,15 @@ function NativeComboboxCore({
2395
2439
  // paint — it would ghost around the panel's corners. A multi-select
2396
2440
  // panel attaches below instead (MPO-38), so it keeps its ring.
2397
2441
  suppressFocusRing={open && !multiple}
2442
+ {...pickerTriggerContract(knobProps.control.height)}
2398
2443
  {...(inTableCell
2399
- ? // Chromeless in cells, but keep a ≥44px pressable target (SP-FIXED).
2400
- { minHeight: 44 }
2444
+ ? // Chromeless in cells.
2445
+ {}
2401
2446
  : {
2402
2447
  borderRadius: knobProps.borderRadius.borderRadius,
2403
2448
  borderWidth: knobProps.borderRadius.borderWidth,
2404
2449
  })}
2405
- id={id}
2406
- // Web: the box is the combobox control (ARIA + keyboard). Native:
2407
- // FloatingPanel's trigger Pressable (triggerA11y) is the single
2408
- // accessible node — role/aria props here surface the box as a
2409
- // duplicate TalkBack stop on Android, so exclude it from the tree
2410
- // (descendants stay reachable; "no", not "no-hide-descendants").
2411
- {...(isWeb
2412
- ? {
2413
- role: "combobox" as const,
2414
- "aria-haspopup": "listbox",
2415
- "aria-expanded": open,
2416
- "aria-controls": listboxId,
2417
- "aria-activedescendant": hideSearch ? activeDescendant : undefined,
2418
- "aria-autocomplete": hideSearch ? ("list" as const) : undefined,
2419
- // Standalone (no label): fall back to placeholder for the name.
2420
- // Labelled: the sibling Label wires `aria-labelledby` onto this id
2421
- // itself — naming it here too doubles the spoken name.
2422
- "aria-label": ariaLabel ?? (!hasLabel ? placeholder : undefined),
2423
- "aria-describedby": describedBy,
2424
- tabIndex: disabled ? -1 : 0,
2425
- }
2426
- : { importantForAccessibility: "no" as const })}
2427
- // Web: trigger owns toggle. Native: FloatingPanel.native owns open
2428
- // (avoid double-toggle that batches open then immediately closed).
2429
- onPress={isWeb && !disabled ? () => handleOpenChange(!open) : undefined}
2430
- onKeyDown={(e: React.KeyboardEvent) => {
2431
- if (
2432
- ["Enter", " ", "ArrowDown", "ArrowUp", "j", "k"].includes(e.key) ||
2433
- e.code === "Space"
2434
- ) {
2435
- e.preventDefault();
2436
- setKeyboardNav(true);
2437
- if (!open) handleOpenChange(true);
2438
- }
2439
- }}
2450
+ {...triggerProps}
2440
2451
  >
2441
2452
  <View
2442
2453
  flex={1}
@@ -2471,6 +2482,7 @@ function NativeComboboxCore({
2471
2482
  </View>
2472
2483
  ) : (
2473
2484
  <Text
2485
+ {...knobProps.controlType}
2474
2486
  fontFamily={knobProps.body.fontFamily}
2475
2487
  fontWeight={knobProps.body.fontWeight}
2476
2488
  color={
@@ -2484,24 +2496,6 @@ function NativeComboboxCore({
2484
2496
  </Text>
2485
2497
  )}
2486
2498
  </View>
2487
- {clearable && !multiple && !disabled && typeof value === "string" && value !== "" && (
2488
- <View
2489
- paddingInlineEnd="$1"
2490
- alignSelf="center"
2491
- cursor="pointer"
2492
- role="button"
2493
- tabIndex={-1}
2494
- aria-label={t("Clear")}
2495
- opacity={0.6}
2496
- hoverStyle={{ opacity: 1 }}
2497
- onPress={(e: any) => {
2498
- e.stopPropagation?.();
2499
- onValueChange?.("");
2500
- }}
2501
- >
2502
- <XIcon size={14} />
2503
- </View>
2504
- )}
2505
2499
  <View paddingInlineEnd="$2" alignSelf="center">
2506
2500
  <CaretDownIcon size={16} color={glyphColor} />
2507
2501
  </View>
@@ -2523,6 +2517,20 @@ function NativeComboboxCore({
2523
2517
  // the user types, so a content-fit sheet would open as a sliver.
2524
2518
  sheetFill={Boolean(onSearch)}
2525
2519
  trigger={triggerContent}
2520
+ triggerSizing={triggerSizing}
2521
+ triggerEnd={
2522
+ clearable && !multiple && !disabled && typeof value === "string" && value !== "" ? (
2523
+ <Button
2524
+ size={knobProps.sizeToken}
2525
+ chromeless
2526
+ minWidth={44}
2527
+ minHeight={44}
2528
+ aria-label={t("Clear")}
2529
+ icon={<XIcon size={14} />}
2530
+ onPress={() => onValueChange?.("")}
2531
+ />
2532
+ ) : undefined
2533
+ }
2526
2534
  triggerA11y={{
2527
2535
  label: ariaLabel ?? fieldA11y?.label,
2528
2536
  value: triggerValueText,
@@ -2568,6 +2576,7 @@ export function Combobox({
2568
2576
  onLoadMore,
2569
2577
  hasMore,
2570
2578
  trigger,
2579
+ triggerSizing,
2571
2580
  name,
2572
2581
  form: formProp,
2573
2582
  validators,
@@ -2700,6 +2709,7 @@ export function Combobox({
2700
2709
  tabIndexOverride={tabIndexProp}
2701
2710
  popoverWidth={popoverWidth}
2702
2711
  trigger={trigger}
2712
+ triggerSizing={triggerSizing}
2703
2713
  knobProps={knobProps}
2704
2714
  multiple={multiple}
2705
2715
  selectedOrder={selectedOrder}
@@ -80,6 +80,7 @@ function CalendarDayGrid({
80
80
  maxDate,
81
81
  selectionCapped,
82
82
  }: CalendarDayGridProps) {
83
+ const { knobProps } = useCalendarKnobs();
83
84
  return (
84
85
  <CalendarDays
85
86
  calendarData={calendarData}
@@ -110,7 +111,7 @@ function CalendarDayGrid({
110
111
  }
111
112
  return (
112
113
  <View
113
- transition="quick"
114
+ transition={knobProps.transition}
114
115
  position="absolute"
115
116
  height="100%"
116
117
  zIndex={0}
@@ -297,6 +298,7 @@ export function Calendar({
297
298
  const handleSetDisplayForPrev = useCallback(
298
299
  (date: Date) => {
299
300
  const next = new Date(date);
301
+ next.setDate(1);
300
302
  next.setMonth(next.getMonth() + 1);
301
303
  setDisplayDate(next);
302
304
  },
@@ -305,6 +307,7 @@ export function Calendar({
305
307
 
306
308
  const prevMonthDate = useMemo(() => {
307
309
  const date = new Date(displayDate);
310
+ date.setDate(1);
308
311
  date.setMonth(date.getMonth() - 1);
309
312
  return date;
310
313
  }, [displayDate]);
@@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
4
  import { useForm } from "@tanstack/react-form";
5
5
  import type { ComponentProps } from "react";
6
6
  import { useState } from "react";
7
- import { YStack } from "tamagui";
7
+ import { Text, YStack } from "tamagui";
8
8
  import { Button } from "../../Button";
9
9
  import { Form } from "../../Form";
10
10
  import { Calendar } from "./Calendar";
@@ -103,6 +103,27 @@ export const Standalone: Story = {
103
103
  render: (args) => <DatePicker {...args} />,
104
104
  };
105
105
 
106
+ export const StateContract: Story = {
107
+ render: () => {
108
+ const [value, setValue] = useState<string | null>(null);
109
+ const [edits, setEdits] = useState(0);
110
+ return (
111
+ <YStack gap="$4" maxWidth={400}>
112
+ <DatePicker label="Saved date" defaultValue="1990-01-01" />
113
+ <DatePicker
114
+ label="Programmatic date"
115
+ value={value}
116
+ onChange={() => setEdits((count) => count + 1)}
117
+ />
118
+ <Button onPress={() => setValue("2026-03-05")}>Load date</Button>
119
+ <Text>{`User edits: ${edits}`}</Text>
120
+ <DatePicker label="Read-only date" value="1990-01-01" readOnly />
121
+ <DatePicker label="Disabled date" value="1990-01-01" disabled />
122
+ </YStack>
123
+ );
124
+ },
125
+ };
126
+
106
127
  export const Basic: Story = {
107
128
  render: (args) => <DatePicker {...args} />,
108
129
  args: {
@@ -261,6 +261,7 @@ function DualCalendarBody({
261
261
 
262
262
  const prevMonthDate = useMemo(() => {
263
263
  const date = new Date(displayDate);
264
+ date.setDate(1);
264
265
  date.setMonth(date.getMonth() - 1);
265
266
  return date;
266
267
  }, [displayDate]);
@@ -273,6 +274,7 @@ function DualCalendarBody({
273
274
  const handleSetDisplayForPrev = useCallback(
274
275
  (date: Date) => {
275
276
  const next = new Date(date);
277
+ next.setDate(1);
276
278
  next.setMonth(next.getMonth() + 1);
277
279
  setDisplayDate(next);
278
280
  },
@@ -281,7 +283,7 @@ function DualCalendarBody({
281
283
 
282
284
  if (!fullWidthMode) {
283
285
  return (
284
- <View {...knobProps.panelPadding}>
286
+ <View>
285
287
  <SingleCalendar
286
288
  displayDate={displayDate}
287
289
  rangeStart={rangeStart}
@@ -297,7 +299,7 @@ function DualCalendarBody({
297
299
  }
298
300
 
299
301
  return (
300
- <View flexDirection="row" {...knobProps.gap} {...knobProps.panelPadding}>
302
+ <View flexDirection="row" {...knobProps.gap}>
301
303
  <SingleCalendar
302
304
  displayDate={prevMonthDate}
303
305
  rangeStart={rangeStart}
@@ -246,15 +246,14 @@ function DatetimePickerBody({
246
246
  );
247
247
 
248
248
  return (
249
- <View
250
- flexDirection="column"
251
- alignItems="center"
252
- {...knobProps.gap}
253
- width={activeTab === "date" ? px * 7 : "100%"}
254
- minWidth={px * 7}
255
- alignSelf={activeTab === "date" ? "center" : "stretch"}
256
- >
257
- <View flexDirection="row" width="100%">
249
+ <View flexDirection="column" alignItems="center" minWidth={px * 7} alignSelf="stretch">
250
+ <View
251
+ flexDirection="row"
252
+ width="100%"
253
+ {...knobProps.panelPadding}
254
+ // The active content frame owns the space below this strip.
255
+ paddingBottom={0}
256
+ >
258
257
  {(["date", "time"] as const).map((tab) => {
259
258
  const active = activeTab === tab;
260
259
  const tabDisabled = tab === "time" && !selectedDatetime;
@@ -319,15 +318,17 @@ function DatetimePickerBody({
319
318
  </CalendarViewSwitcher>
320
319
  ) : (
321
320
  selectedDatetime && (
322
- <View width="100%">
323
- <TimeSection
324
- selectedDate={selectedDatetime}
325
- onTimeChange={handleTimeChange}
326
- timeFormat={timeFormat}
327
- minuteStep={minuteStep}
328
- showSeconds={showSeconds}
329
- />
330
- </View>
321
+ <CalendarPanelFrame>
322
+ <View width={px * 7}>
323
+ <TimeSection
324
+ selectedDate={selectedDatetime}
325
+ onTimeChange={handleTimeChange}
326
+ timeFormat={timeFormat}
327
+ minuteStep={minuteStep}
328
+ showSeconds={showSeconds}
329
+ />
330
+ </View>
331
+ </CalendarPanelFrame>
331
332
  )
332
333
  )}
333
334
  </View>
@@ -505,7 +506,8 @@ export function DatetimePicker<
505
506
  }
506
507
  disabled={disabled}
507
508
  sizing="grow"
508
- widthMode="at-least-trigger"
509
+ contentPadding="none"
510
+ widthMode="fit-content"
509
511
  >
510
512
  {pickerContent(fieldChange)}
511
513
  </FloatingPanel>