@multiplatform.one/forms 7.6.3 → 7.7.1

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 (845) hide show
  1. package/dist/cjs/AdaptivePopup/index.native.js +1 -1
  2. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  3. package/dist/cjs/Button/index.cjs +8 -2
  4. package/dist/cjs/Button/index.native.js +14 -3
  5. package/dist/cjs/Button/index.native.js.map +1 -1
  6. package/dist/cjs/Chip/index.cjs +1 -3
  7. package/dist/cjs/Chip/index.native.js +5 -3
  8. package/dist/cjs/Chip/index.native.js.map +1 -1
  9. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  10. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  11. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  12. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  13. package/dist/cjs/ContextualSaveBar/index.cjs +19 -3
  14. package/dist/cjs/ContextualSaveBar/index.native.js +22 -6
  15. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  16. package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  17. package/dist/cjs/ControlGroup/index.native.js +1 -1
  18. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  19. package/dist/cjs/DescriptionList/index.cjs +41 -13
  20. package/dist/cjs/DescriptionList/index.native.js +45 -15
  21. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  22. package/dist/cjs/ErrorSummary.cjs +4 -1
  23. package/dist/cjs/ErrorSummary.native.js +4 -1
  24. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  25. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  26. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  27. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  28. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  29. package/dist/cjs/FieldGroup.native.js.map +1 -1
  30. package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +24 -2
  31. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +43 -2
  32. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  33. package/dist/cjs/Form/index.native.js +1 -1
  34. package/dist/cjs/Form/index.native.js.map +1 -1
  35. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  36. package/dist/cjs/FormGrid.native.js.map +1 -1
  37. package/dist/cjs/FormSection.native.js.map +1 -1
  38. package/dist/cjs/InputParts/index.cjs +42 -2
  39. package/dist/cjs/InputParts/index.native.js +42 -2
  40. package/dist/cjs/InputParts/index.native.js.map +1 -1
  41. package/dist/cjs/Label/index.native.js.map +1 -1
  42. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  43. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  44. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  45. package/dist/cjs/Table/index.native.js.map +1 -1
  46. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  47. package/dist/cjs/Wheel/index.native.js.map +1 -1
  48. package/dist/cjs/actionLabel.native.js.map +1 -1
  49. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  50. package/dist/cjs/fieldLayout.native.js +1 -1
  51. package/dist/cjs/fieldLayout.native.js.map +1 -1
  52. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  53. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
  54. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  55. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  56. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  57. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  58. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  59. package/dist/cjs/fields/Checkbox/Checkbox.cjs +5 -2
  60. package/dist/cjs/fields/Checkbox/Checkbox.native.js +7 -4
  61. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  62. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  63. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  64. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  65. package/dist/cjs/fields/Checkbox/CheckboxGroup.cjs +69 -59
  66. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +76 -66
  67. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  68. package/dist/cjs/fields/Checkbox/checkboxGroupContext.cjs +33 -0
  69. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js +36 -0
  70. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
  71. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  72. package/dist/cjs/fields/ColorPicker/index.native.js +3 -3
  73. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  74. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  75. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  76. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  77. package/dist/cjs/fields/Combobox/index.native.js +5 -5
  78. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  79. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  80. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  81. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  82. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +402 -0
  83. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +441 -0
  84. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
  85. package/dist/cjs/fields/DatePicker/DatetimePicker.cjs +2 -376
  86. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +70 -298
  87. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  88. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  89. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  90. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  91. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  92. package/dist/cjs/fields/DatePicker/catalog.cjs +306 -0
  93. package/dist/cjs/fields/DatePicker/catalog.native.js +350 -0
  94. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -0
  95. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  96. package/dist/cjs/fields/DatePicker/index.cjs +7 -280
  97. package/dist/cjs/fields/DatePicker/index.native.js +67 -186
  98. package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
  99. package/dist/cjs/fields/DatePicker/parts.cjs +12 -9
  100. package/dist/cjs/fields/DatePicker/parts.native.js +14 -11
  101. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  102. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  103. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  104. package/dist/cjs/fields/Duration/index.cjs +29 -3
  105. package/dist/cjs/fields/Duration/index.native.js +32 -6
  106. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  107. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  108. package/dist/cjs/fields/FileUpload/index.cjs +0 -1
  109. package/dist/cjs/fields/FileUpload/index.native.js +7 -3
  110. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  111. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  112. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  113. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  114. package/dist/cjs/fields/Geolocation/index.native.js +5 -5
  115. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  116. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  117. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  118. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  119. package/dist/cjs/fields/Icon/index.native.js +3 -3
  120. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  121. package/dist/cjs/fields/ImageField/index.native.js +2 -2
  122. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  123. package/dist/cjs/fields/Input/index.native.js +2 -2
  124. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  125. package/dist/cjs/fields/MentionInput/index.native.js +3 -3
  126. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  127. package/dist/cjs/fields/OTPInput/index.native.js +3 -3
  128. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  129. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  130. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  131. package/dist/cjs/fields/PhoneInput/index.cjs +9 -4
  132. package/dist/cjs/fields/PhoneInput/index.native.js +16 -9
  133. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  134. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  135. package/dist/cjs/fields/Progress/index.native.js +1 -1
  136. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  137. package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
  138. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  139. package/dist/cjs/fields/Rating/index.cjs +1 -1
  140. package/dist/cjs/fields/Rating/index.native.js +5 -2
  141. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  142. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  143. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  144. package/dist/cjs/fields/SearchInput/index.cjs +6 -0
  145. package/dist/cjs/fields/SearchInput/index.native.js +8 -2
  146. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  147. package/dist/cjs/fields/Select/index.cjs +88 -2
  148. package/dist/cjs/fields/Select/index.native.js +94 -6
  149. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  150. package/dist/cjs/fields/Signature/index.cjs +9 -5
  151. package/dist/cjs/fields/Signature/index.native.js +11 -7
  152. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  153. package/dist/cjs/fields/Slider/index.cjs +3 -1
  154. package/dist/cjs/fields/Slider/index.native.js +4 -2
  155. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  156. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  157. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  158. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  159. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  160. package/dist/cjs/fields/Switch/index.cjs +5 -18
  161. package/dist/cjs/fields/Switch/index.native.js +7 -20
  162. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  163. package/dist/cjs/fields/TextArea/index.cjs +19 -5
  164. package/dist/cjs/fields/TextArea/index.native.js +25 -7
  165. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  166. package/dist/cjs/fields/TimePicker/catalog.cjs +203 -0
  167. package/dist/cjs/fields/TimePicker/catalog.native.js +227 -0
  168. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -0
  169. package/dist/cjs/fields/TimePicker/index.cjs +6 -177
  170. package/dist/cjs/fields/TimePicker/index.native.js +75 -86
  171. package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
  172. package/dist/cjs/fields/TimePicker/parts.native.js +1 -1
  173. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  174. package/dist/cjs/fields/TimeRangeScrubber/geometry.cjs +6 -0
  175. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js +6 -0
  176. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  177. package/dist/cjs/fields/TimeRangeScrubber/index.cjs +34 -14
  178. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +40 -16
  179. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  180. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
  181. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  182. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +202 -0
  183. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +211 -0
  184. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
  185. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.cjs +30 -0
  186. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js +33 -0
  187. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
  188. package/dist/cjs/fields/nativeSelect.cjs +30 -0
  189. package/dist/cjs/fields/nativeSelect.native.js +33 -0
  190. package/dist/cjs/fields/nativeSelect.native.js.map +1 -0
  191. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  192. package/dist/cjs/formSpacing.native.js.map +1 -1
  193. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  194. package/dist/cjs/index.cjs +1 -0
  195. package/dist/cjs/index.native.js +44 -43
  196. package/dist/cjs/index.native.js.map +1 -1
  197. package/dist/cjs/requiredMarking.native.js.map +1 -1
  198. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  199. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  200. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  201. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  202. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  203. package/dist/cjs/shared/floatingList.native.js +1 -1
  204. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  205. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  206. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  207. package/dist/cjs/shared/i18n.native.js.map +1 -1
  208. package/dist/cjs/shared/t.native.js.map +1 -1
  209. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  210. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  211. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  212. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  213. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  214. package/dist/cjs/shared/utils.native.js +1 -1
  215. package/dist/cjs/shared/utils.native.js.map +1 -1
  216. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  217. package/dist/cjs/themedPrimitives.cjs +5 -0
  218. package/dist/cjs/themedPrimitives.native.js +5 -0
  219. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  220. package/dist/cjs/types.native.js.map +1 -1
  221. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  222. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  223. package/dist/esm/Button/index.mjs +9 -3
  224. package/dist/esm/Button/index.mjs.map +1 -1
  225. package/dist/esm/Button/index.native.js +14 -3
  226. package/dist/esm/Button/index.native.js.map +1 -1
  227. package/dist/esm/Chip/index.mjs +1 -3
  228. package/dist/esm/Chip/index.mjs.map +1 -1
  229. package/dist/esm/Chip/index.native.js +5 -3
  230. package/dist/esm/Chip/index.native.js.map +1 -1
  231. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  232. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  233. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  234. package/dist/esm/ContextualSaveBar/index.mjs +19 -3
  235. package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
  236. package/dist/esm/ContextualSaveBar/index.native.js +19 -3
  237. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  238. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  239. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  240. package/dist/esm/DescriptionList/index.mjs +41 -13
  241. package/dist/esm/DescriptionList/index.mjs.map +1 -1
  242. package/dist/esm/DescriptionList/index.native.js +43 -13
  243. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  244. package/dist/esm/ErrorSummary.mjs +5 -2
  245. package/dist/esm/ErrorSummary.mjs.map +1 -1
  246. package/dist/esm/ErrorSummary.native.js +5 -2
  247. package/dist/esm/ErrorSummary.native.js.map +1 -1
  248. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  249. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  250. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  251. package/dist/esm/FieldGroup.native.js.map +1 -1
  252. package/dist/esm/FloatingPanel/useFloatingPanel.mjs +24 -3
  253. package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  254. package/dist/esm/FloatingPanel/useFloatingPanel.native.js +43 -3
  255. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  256. package/dist/esm/Form/index.native.js.map +1 -1
  257. package/dist/esm/Form/validateOn.native.js.map +1 -1
  258. package/dist/esm/FormGrid.native.js.map +1 -1
  259. package/dist/esm/FormSection.native.js.map +1 -1
  260. package/dist/esm/InputParts/index.mjs +43 -3
  261. package/dist/esm/InputParts/index.mjs.map +1 -1
  262. package/dist/esm/InputParts/index.native.js +43 -3
  263. package/dist/esm/InputParts/index.native.js.map +1 -1
  264. package/dist/esm/Label/index.native.js.map +1 -1
  265. package/dist/esm/Skeleton/index.native.js.map +1 -1
  266. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  267. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  268. package/dist/esm/Table/index.native.js.map +1 -1
  269. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  270. package/dist/esm/Wheel/index.native.js.map +1 -1
  271. package/dist/esm/actionLabel.native.js.map +1 -1
  272. package/dist/esm/fieldDefaults.native.js.map +1 -1
  273. package/dist/esm/fieldLayout.native.js.map +1 -1
  274. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  275. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  276. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  277. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  278. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  279. package/dist/esm/fields/Checkbox/Checkbox.mjs +5 -2
  280. package/dist/esm/fields/Checkbox/Checkbox.mjs.map +1 -1
  281. package/dist/esm/fields/Checkbox/Checkbox.native.js +6 -3
  282. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  283. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  284. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  285. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  286. package/dist/esm/fields/Checkbox/CheckboxGroup.mjs +69 -59
  287. package/dist/esm/fields/Checkbox/CheckboxGroup.mjs.map +1 -1
  288. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js +75 -65
  289. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  290. package/dist/esm/fields/Checkbox/checkboxGroupContext.mjs +7 -0
  291. package/dist/esm/fields/Checkbox/checkboxGroupContext.mjs.map +1 -0
  292. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js +7 -0
  293. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
  294. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  295. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  296. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  297. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  298. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  299. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  300. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  301. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +377 -0
  302. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -0
  303. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +413 -0
  304. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
  305. package/dist/esm/fields/DatePicker/DatetimePicker.mjs +1 -375
  306. package/dist/esm/fields/DatePicker/DatetimePicker.mjs.map +1 -1
  307. package/dist/esm/fields/DatePicker/DatetimePicker.native.js +65 -293
  308. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  309. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  310. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  311. package/dist/esm/fields/DatePicker/catalog.mjs +276 -0
  312. package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -0
  313. package/dist/esm/fields/DatePicker/catalog.native.js +317 -0
  314. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -0
  315. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  316. package/dist/esm/fields/DatePicker/index.mjs +1 -274
  317. package/dist/esm/fields/DatePicker/index.mjs.map +1 -1
  318. package/dist/esm/fields/DatePicker/index.native.js +60 -179
  319. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  320. package/dist/esm/fields/DatePicker/parts.mjs +13 -10
  321. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  322. package/dist/esm/fields/DatePicker/parts.native.js +13 -10
  323. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  324. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  325. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  326. package/dist/esm/fields/Duration/index.mjs +29 -4
  327. package/dist/esm/fields/Duration/index.mjs.map +1 -1
  328. package/dist/esm/fields/Duration/index.native.js +29 -4
  329. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  330. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  331. package/dist/esm/fields/FileUpload/index.mjs +0 -1
  332. package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
  333. package/dist/esm/fields/FileUpload/index.native.js +5 -1
  334. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  335. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  336. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  337. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  338. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  339. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  340. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  341. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  342. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  343. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  344. package/dist/esm/fields/Input/index.native.js.map +1 -1
  345. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  346. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  347. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  348. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  349. package/dist/esm/fields/PhoneInput/index.mjs +9 -4
  350. package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
  351. package/dist/esm/fields/PhoneInput/index.native.js +13 -6
  352. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  353. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  354. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  355. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  356. package/dist/esm/fields/Rating/index.mjs +2 -2
  357. package/dist/esm/fields/Rating/index.mjs.map +1 -1
  358. package/dist/esm/fields/Rating/index.native.js +5 -2
  359. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  360. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  361. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  362. package/dist/esm/fields/SearchInput/index.mjs +6 -0
  363. package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
  364. package/dist/esm/fields/SearchInput/index.native.js +6 -0
  365. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  366. package/dist/esm/fields/Select/index.mjs +78 -3
  367. package/dist/esm/fields/Select/index.mjs.map +1 -1
  368. package/dist/esm/fields/Select/index.native.js +80 -3
  369. package/dist/esm/fields/Select/index.native.js.map +1 -1
  370. package/dist/esm/fields/Signature/index.mjs +10 -6
  371. package/dist/esm/fields/Signature/index.mjs.map +1 -1
  372. package/dist/esm/fields/Signature/index.native.js +10 -6
  373. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  374. package/dist/esm/fields/Slider/index.mjs +4 -2
  375. package/dist/esm/fields/Slider/index.mjs.map +1 -1
  376. package/dist/esm/fields/Slider/index.native.js +4 -2
  377. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  378. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  379. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  380. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  381. package/dist/esm/fields/Switch/index.mjs +6 -19
  382. package/dist/esm/fields/Switch/index.mjs.map +1 -1
  383. package/dist/esm/fields/Switch/index.native.js +6 -19
  384. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  385. package/dist/esm/fields/TextArea/index.mjs +19 -5
  386. package/dist/esm/fields/TextArea/index.mjs.map +1 -1
  387. package/dist/esm/fields/TextArea/index.native.js +23 -5
  388. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  389. package/dist/esm/fields/TimePicker/catalog.mjs +174 -0
  390. package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -0
  391. package/dist/esm/fields/TimePicker/catalog.native.js +195 -0
  392. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -0
  393. package/dist/esm/fields/TimePicker/index.mjs +2 -173
  394. package/dist/esm/fields/TimePicker/index.mjs.map +1 -1
  395. package/dist/esm/fields/TimePicker/index.native.js +76 -87
  396. package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
  397. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  398. package/dist/esm/fields/TimeRangeScrubber/geometry.mjs +6 -1
  399. package/dist/esm/fields/TimeRangeScrubber/geometry.mjs.map +1 -1
  400. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js +6 -1
  401. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  402. package/dist/esm/fields/TimeRangeScrubber/index.mjs +37 -18
  403. package/dist/esm/fields/TimeRangeScrubber/index.mjs.map +1 -1
  404. package/dist/esm/fields/TimeRangeScrubber/index.native.js +41 -18
  405. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  406. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  407. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +166 -0
  408. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -0
  409. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +172 -0
  410. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
  411. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs +5 -0
  412. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -0
  413. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js +5 -0
  414. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
  415. package/dist/esm/fields/nativeSelect.mjs +5 -0
  416. package/dist/esm/fields/nativeSelect.mjs.map +1 -0
  417. package/dist/esm/fields/nativeSelect.native.js +5 -0
  418. package/dist/esm/fields/nativeSelect.native.js.map +1 -0
  419. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  420. package/dist/esm/formSpacing.native.js.map +1 -1
  421. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  422. package/dist/esm/index.mjs +2 -2
  423. package/dist/esm/index.mjs.map +1 -1
  424. package/dist/esm/index.native.js +2 -2
  425. package/dist/esm/index.native.js.map +1 -1
  426. package/dist/esm/requiredMarking.native.js.map +1 -1
  427. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  428. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  429. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  430. package/dist/esm/shared/devWarn.native.js.map +1 -1
  431. package/dist/esm/shared/floatingList.native.js.map +1 -1
  432. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  433. package/dist/esm/shared/groupContext.native.js.map +1 -1
  434. package/dist/esm/shared/i18n.native.js.map +1 -1
  435. package/dist/esm/shared/t.native.js.map +1 -1
  436. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  437. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  438. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  439. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  440. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  441. package/dist/esm/shared/utils.native.js.map +1 -1
  442. package/dist/esm/shared/zIndex.native.js.map +1 -1
  443. package/dist/esm/themedPrimitives.mjs +5 -0
  444. package/dist/esm/themedPrimitives.mjs.map +1 -1
  445. package/dist/esm/themedPrimitives.native.js +5 -0
  446. package/dist/esm/themedPrimitives.native.js.map +1 -1
  447. package/dist/esm/types.native.js.map +1 -1
  448. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  449. package/dist/jsx/AdaptivePopup/index.native.js +1 -1
  450. package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
  451. package/dist/jsx/Button/index.mjs +9 -3
  452. package/dist/jsx/Button/index.mjs.map +1 -1
  453. package/dist/jsx/Button/index.native.js +14 -3
  454. package/dist/jsx/Button/index.native.js.map +1 -1
  455. package/dist/jsx/Chip/index.mjs +1 -3
  456. package/dist/jsx/Chip/index.mjs.map +1 -1
  457. package/dist/jsx/Chip/index.native.js +5 -3
  458. package/dist/jsx/Chip/index.native.js.map +1 -1
  459. package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  460. package/dist/jsx/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  461. package/dist/jsx/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  462. package/dist/jsx/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  463. package/dist/jsx/ContextualSaveBar/index.mjs +19 -3
  464. package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
  465. package/dist/jsx/ContextualSaveBar/index.native.js +22 -6
  466. package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
  467. package/dist/jsx/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  468. package/dist/jsx/ControlGroup/index.native.js +1 -1
  469. package/dist/jsx/ControlGroup/index.native.js.map +1 -1
  470. package/dist/jsx/DescriptionList/index.mjs +41 -13
  471. package/dist/jsx/DescriptionList/index.mjs.map +1 -1
  472. package/dist/jsx/DescriptionList/index.native.js +45 -15
  473. package/dist/jsx/DescriptionList/index.native.js.map +1 -1
  474. package/dist/jsx/ErrorSummary.mjs +5 -2
  475. package/dist/jsx/ErrorSummary.mjs.map +1 -1
  476. package/dist/jsx/ErrorSummary.native.js +4 -1
  477. package/dist/jsx/ErrorSummary.native.js.map +1 -1
  478. package/dist/jsx/FieldDisplay/editMode.native.js.map +1 -1
  479. package/dist/jsx/FieldDisplay/formatters.native.js.map +1 -1
  480. package/dist/jsx/FieldDisplay/index.native.js +1 -1
  481. package/dist/jsx/FieldDisplay/index.native.js.map +1 -1
  482. package/dist/jsx/FieldGroup.native.js.map +1 -1
  483. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +24 -3
  484. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  485. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +43 -2
  486. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  487. package/dist/jsx/Form/index.native.js +1 -1
  488. package/dist/jsx/Form/index.native.js.map +1 -1
  489. package/dist/jsx/Form/validateOn.native.js.map +1 -1
  490. package/dist/jsx/FormGrid.native.js.map +1 -1
  491. package/dist/jsx/FormSection.native.js.map +1 -1
  492. package/dist/jsx/InputParts/index.mjs +43 -3
  493. package/dist/jsx/InputParts/index.mjs.map +1 -1
  494. package/dist/jsx/InputParts/index.native.js +42 -2
  495. package/dist/jsx/InputParts/index.native.js.map +1 -1
  496. package/dist/jsx/Label/index.native.js.map +1 -1
  497. package/dist/jsx/Skeleton/index.native.js.map +1 -1
  498. package/dist/jsx/Spinner/SpinnerGlyph.native.js.map +1 -1
  499. package/dist/jsx/Spinner/spinnerSize.native.js.map +1 -1
  500. package/dist/jsx/Table/index.native.js.map +1 -1
  501. package/dist/jsx/Wheel/haptic.native.js.map +1 -1
  502. package/dist/jsx/Wheel/index.native.js.map +1 -1
  503. package/dist/jsx/actionLabel.native.js.map +1 -1
  504. package/dist/jsx/fieldDefaults.native.js.map +1 -1
  505. package/dist/jsx/fieldLayout.native.js +1 -1
  506. package/dist/jsx/fieldLayout.native.js.map +1 -1
  507. package/dist/jsx/fields/Barcode/BarcodePreview.native.js.map +1 -1
  508. package/dist/jsx/fields/Barcode/BarcodeScanner.native.js +1 -1
  509. package/dist/jsx/fields/Barcode/code128.native.js.map +1 -1
  510. package/dist/jsx/fields/Barcode/index.native.js +2 -2
  511. package/dist/jsx/fields/Barcode/index.native.js.map +1 -1
  512. package/dist/jsx/fields/Barcode/qr.native.js.map +1 -1
  513. package/dist/jsx/fields/Barcode/scannerTypes.native.js.map +1 -1
  514. package/dist/jsx/fields/Checkbox/Checkbox.mjs +5 -2
  515. package/dist/jsx/fields/Checkbox/Checkbox.mjs.map +1 -1
  516. package/dist/jsx/fields/Checkbox/Checkbox.native.js +7 -4
  517. package/dist/jsx/fields/Checkbox/Checkbox.native.js.map +1 -1
  518. package/dist/jsx/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  519. package/dist/jsx/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  520. package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  521. package/dist/jsx/fields/Checkbox/CheckboxGroup.mjs +69 -59
  522. package/dist/jsx/fields/Checkbox/CheckboxGroup.mjs.map +1 -1
  523. package/dist/jsx/fields/Checkbox/CheckboxGroup.native.js +76 -66
  524. package/dist/jsx/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  525. package/dist/jsx/fields/Checkbox/checkboxGroupContext.mjs +7 -0
  526. package/dist/jsx/fields/Checkbox/checkboxGroupContext.mjs.map +1 -0
  527. package/dist/jsx/fields/Checkbox/checkboxGroupContext.native.js +36 -0
  528. package/dist/jsx/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
  529. package/dist/jsx/fields/Checkbox/index.native.js.map +1 -1
  530. package/dist/jsx/fields/ColorPicker/index.native.js +3 -3
  531. package/dist/jsx/fields/ColorPicker/index.native.js.map +1 -1
  532. package/dist/jsx/fields/ColorPicker/parts.native.js +2 -2
  533. package/dist/jsx/fields/ColorPicker/parts.native.js.map +1 -1
  534. package/dist/jsx/fields/Combobox/authorOptions.native.js.map +1 -1
  535. package/dist/jsx/fields/Combobox/index.native.js +5 -5
  536. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  537. package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
  538. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
  539. package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  540. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +377 -0
  541. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -0
  542. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +441 -0
  543. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
  544. package/dist/jsx/fields/DatePicker/DatetimePicker.mjs +1 -375
  545. package/dist/jsx/fields/DatePicker/DatetimePicker.mjs.map +1 -1
  546. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +70 -298
  547. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  548. package/dist/jsx/fields/DatePicker/MonthPicker.native.js +2 -2
  549. package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
  550. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
  551. package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  552. package/dist/jsx/fields/DatePicker/catalog.mjs +276 -0
  553. package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -0
  554. package/dist/jsx/fields/DatePicker/catalog.native.js +350 -0
  555. package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -0
  556. package/dist/jsx/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  557. package/dist/jsx/fields/DatePicker/index.mjs +1 -274
  558. package/dist/jsx/fields/DatePicker/index.mjs.map +1 -1
  559. package/dist/jsx/fields/DatePicker/index.native.js +67 -186
  560. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  561. package/dist/jsx/fields/DatePicker/parts.mjs +13 -10
  562. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  563. package/dist/jsx/fields/DatePicker/parts.native.js +14 -11
  564. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  565. package/dist/jsx/fields/DatePicker/utils.native.js.map +1 -1
  566. package/dist/jsx/fields/Duration/durationMath.native.js.map +1 -1
  567. package/dist/jsx/fields/Duration/index.mjs +29 -4
  568. package/dist/jsx/fields/Duration/index.mjs.map +1 -1
  569. package/dist/jsx/fields/Duration/index.native.js +32 -6
  570. package/dist/jsx/fields/Duration/index.native.js.map +1 -1
  571. package/dist/jsx/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  572. package/dist/jsx/fields/FileUpload/index.mjs +0 -1
  573. package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
  574. package/dist/jsx/fields/FileUpload/index.native.js +7 -3
  575. package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
  576. package/dist/jsx/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  577. package/dist/jsx/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  578. package/dist/jsx/fields/Geolocation/geoValue.native.js.map +1 -1
  579. package/dist/jsx/fields/Geolocation/index.native.js +5 -5
  580. package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
  581. package/dist/jsx/fields/Geolocation/mapMath.native.js.map +1 -1
  582. package/dist/jsx/fields/Geolocation/mapTypes.native.js.map +1 -1
  583. package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
  584. package/dist/jsx/fields/Icon/index.native.js +3 -3
  585. package/dist/jsx/fields/Icon/index.native.js.map +1 -1
  586. package/dist/jsx/fields/ImageField/index.native.js +2 -2
  587. package/dist/jsx/fields/ImageField/index.native.js.map +1 -1
  588. package/dist/jsx/fields/Input/index.native.js +2 -2
  589. package/dist/jsx/fields/Input/index.native.js.map +1 -1
  590. package/dist/jsx/fields/MentionInput/index.native.js +3 -3
  591. package/dist/jsx/fields/MentionInput/index.native.js.map +1 -1
  592. package/dist/jsx/fields/OTPInput/index.native.js +3 -3
  593. package/dist/jsx/fields/OTPInput/index.native.js.map +1 -1
  594. package/dist/jsx/fields/OTPInput/otpCellCss.native.js.map +1 -1
  595. package/dist/jsx/fields/PhoneInput/dialCodes.native.js.map +1 -1
  596. package/dist/jsx/fields/PhoneInput/index.mjs +9 -4
  597. package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
  598. package/dist/jsx/fields/PhoneInput/index.native.js +16 -9
  599. package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
  600. package/dist/jsx/fields/PhoneInput/phone.native.js.map +1 -1
  601. package/dist/jsx/fields/Progress/index.native.js +1 -1
  602. package/dist/jsx/fields/Progress/index.native.js.map +1 -1
  603. package/dist/jsx/fields/RadioGroup/index.native.js +1 -1
  604. package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
  605. package/dist/jsx/fields/Rating/index.mjs +2 -2
  606. package/dist/jsx/fields/Rating/index.mjs.map +1 -1
  607. package/dist/jsx/fields/Rating/index.native.js +5 -2
  608. package/dist/jsx/fields/Rating/index.native.js.map +1 -1
  609. package/dist/jsx/fields/Rating/ratingMath.native.js.map +1 -1
  610. package/dist/jsx/fields/Rating/types.native.js.map +1 -1
  611. package/dist/jsx/fields/SearchInput/index.mjs +6 -0
  612. package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
  613. package/dist/jsx/fields/SearchInput/index.native.js +8 -2
  614. package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
  615. package/dist/jsx/fields/Select/index.mjs +78 -3
  616. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  617. package/dist/jsx/fields/Select/index.native.js +94 -6
  618. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  619. package/dist/jsx/fields/Signature/index.mjs +10 -6
  620. package/dist/jsx/fields/Signature/index.mjs.map +1 -1
  621. package/dist/jsx/fields/Signature/index.native.js +11 -7
  622. package/dist/jsx/fields/Signature/index.native.js.map +1 -1
  623. package/dist/jsx/fields/Slider/index.mjs +4 -2
  624. package/dist/jsx/fields/Slider/index.mjs.map +1 -1
  625. package/dist/jsx/fields/Slider/index.native.js +4 -2
  626. package/dist/jsx/fields/Slider/index.native.js.map +1 -1
  627. package/dist/jsx/fields/Slider/jumpMotion.native.js.map +1 -1
  628. package/dist/jsx/fields/Stepper/index.native.js +2 -2
  629. package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
  630. package/dist/jsx/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  631. package/dist/jsx/fields/Switch/index.mjs +6 -19
  632. package/dist/jsx/fields/Switch/index.mjs.map +1 -1
  633. package/dist/jsx/fields/Switch/index.native.js +7 -20
  634. package/dist/jsx/fields/Switch/index.native.js.map +1 -1
  635. package/dist/jsx/fields/TextArea/index.mjs +19 -5
  636. package/dist/jsx/fields/TextArea/index.mjs.map +1 -1
  637. package/dist/jsx/fields/TextArea/index.native.js +25 -7
  638. package/dist/jsx/fields/TextArea/index.native.js.map +1 -1
  639. package/dist/jsx/fields/TimePicker/catalog.mjs +174 -0
  640. package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -0
  641. package/dist/jsx/fields/TimePicker/catalog.native.js +227 -0
  642. package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -0
  643. package/dist/jsx/fields/TimePicker/index.mjs +2 -173
  644. package/dist/jsx/fields/TimePicker/index.mjs.map +1 -1
  645. package/dist/jsx/fields/TimePicker/index.native.js +75 -86
  646. package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
  647. package/dist/jsx/fields/TimePicker/parts.native.js +1 -1
  648. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  649. package/dist/jsx/fields/TimeRangeScrubber/geometry.mjs +6 -1
  650. package/dist/jsx/fields/TimeRangeScrubber/geometry.mjs.map +1 -1
  651. package/dist/jsx/fields/TimeRangeScrubber/geometry.native.js +6 -0
  652. package/dist/jsx/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  653. package/dist/jsx/fields/TimeRangeScrubber/index.mjs +37 -18
  654. package/dist/jsx/fields/TimeRangeScrubber/index.mjs.map +1 -1
  655. package/dist/jsx/fields/TimeRangeScrubber/index.native.js +40 -16
  656. package/dist/jsx/fields/TimeRangeScrubber/index.native.js.map +1 -1
  657. package/dist/jsx/fields/ToggleGroup/index.native.js +1 -1
  658. package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
  659. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +166 -0
  660. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -0
  661. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +211 -0
  662. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
  663. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs +5 -0
  664. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -0
  665. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js +33 -0
  666. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
  667. package/dist/jsx/fields/nativeSelect.mjs +5 -0
  668. package/dist/jsx/fields/nativeSelect.mjs.map +1 -0
  669. package/dist/jsx/fields/nativeSelect.native.js +33 -0
  670. package/dist/jsx/fields/nativeSelect.native.js.map +1 -0
  671. package/dist/jsx/fields/selectedOrder.native.js.map +1 -1
  672. package/dist/jsx/formSpacing.native.js.map +1 -1
  673. package/dist/jsx/hooks/useFocusManagement.native.js.map +1 -1
  674. package/dist/jsx/index.js +2 -2
  675. package/dist/jsx/index.js.map +1 -1
  676. package/dist/jsx/index.mjs +2 -2
  677. package/dist/jsx/index.mjs.map +1 -1
  678. package/dist/jsx/index.native.js +44 -43
  679. package/dist/jsx/index.native.js.map +1 -1
  680. package/dist/jsx/requiredMarking.native.js.map +1 -1
  681. package/dist/jsx/shared/TimeColumn.native.js +1 -1
  682. package/dist/jsx/shared/TimeColumn.native.js.map +1 -1
  683. package/dist/jsx/shared/capabilityPreflight.native.js.map +1 -1
  684. package/dist/jsx/shared/colorRamps.native.js.map +1 -1
  685. package/dist/jsx/shared/devWarn.native.js.map +1 -1
  686. package/dist/jsx/shared/floatingList.native.js +1 -1
  687. package/dist/jsx/shared/floatingList.native.js.map +1 -1
  688. package/dist/jsx/shared/focusManagement.native.js.map +1 -1
  689. package/dist/jsx/shared/groupContext.native.js.map +1 -1
  690. package/dist/jsx/shared/i18n.native.js.map +1 -1
  691. package/dist/jsx/shared/t.native.js.map +1 -1
  692. package/dist/jsx/shared/tableCellContext.native.js.map +1 -1
  693. package/dist/jsx/shared/useDragScroll.native.js.map +1 -1
  694. package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -1
  695. package/dist/jsx/shared/useSheetEscapeDismiss.native.js.map +1 -1
  696. package/dist/jsx/shared/useWheelIncrement.native.js.map +1 -1
  697. package/dist/jsx/shared/utils.native.js +1 -1
  698. package/dist/jsx/shared/utils.native.js.map +1 -1
  699. package/dist/jsx/shared/zIndex.native.js.map +1 -1
  700. package/dist/jsx/themedPrimitives.mjs +5 -0
  701. package/dist/jsx/themedPrimitives.mjs.map +1 -1
  702. package/dist/jsx/themedPrimitives.native.js +5 -0
  703. package/dist/jsx/themedPrimitives.native.js.map +1 -1
  704. package/dist/jsx/types.native.js.map +1 -1
  705. package/dist/jsx/utils/LinkCell.native.js.map +1 -1
  706. package/package.json +12 -9
  707. package/src/Button/Button.labelInk.spec.tsx +1 -1
  708. package/src/Button/Button.sizeLadder.spec.tsx +124 -0
  709. package/src/Button/Button.spec.tsx +7 -17
  710. package/src/Button/Button.stories.tsx +14 -0
  711. package/src/Button/index.tsx +24 -4
  712. package/src/Chip/Chip.spec.tsx +15 -0
  713. package/src/Chip/Chip.stories.tsx +251 -0
  714. package/src/Chip/index.tsx +5 -1
  715. package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +51 -0
  716. package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +42 -23
  717. package/src/ContextualSaveBar/UnsavedChangesDialog.spec.tsx +167 -0
  718. package/src/ContextualSaveBar/UnsavedChangesDialog.stories.tsx +118 -0
  719. package/src/ContextualSaveBar/index.tsx +14 -5
  720. package/src/ContextualSaveBar/unsavedChangesDialogStories.spec.tsx +79 -0
  721. package/src/DescriptionList/DescriptionList.spec.tsx +19 -1
  722. package/src/DescriptionList/DescriptionList.stories.tsx +5 -1
  723. package/src/DescriptionList/index.tsx +60 -20
  724. package/src/ErrorSummary.stories.tsx +197 -0
  725. package/src/ErrorSummary.tsx +5 -2
  726. package/src/FloatingPanel/panelWidthContract.spec.ts +2 -2
  727. package/src/FloatingPanel/useFloatingPanel.spec.tsx +199 -1
  728. package/src/FloatingPanel/useFloatingPanel.ts +45 -3
  729. package/src/InputParts/InputParts.stories.tsx +230 -0
  730. package/src/InputParts/index.tsx +56 -2
  731. package/src/InputParts/inputPartsStories.spec.tsx +122 -0
  732. package/src/Skeleton/Skeleton.stories.tsx +148 -0
  733. package/src/Skeleton/skeletonStories.spec.tsx +107 -0
  734. package/src/Spinner/SpinnerGlyph.spec.tsx +132 -0
  735. package/src/Wheel/Wheel.stories.tsx +232 -0
  736. package/src/Wheel/WheelEdgeFade.spec.tsx +141 -0
  737. package/src/Wheel/wheelStories.spec.tsx +143 -0
  738. package/src/errorSummaryStories.spec.tsx +114 -0
  739. package/src/fields/Checkbox/Checkbox.spec.tsx +24 -0
  740. package/src/fields/Checkbox/Checkbox.tsx +8 -3
  741. package/src/fields/Checkbox/CheckboxBox.spec.tsx +395 -0
  742. package/src/fields/Checkbox/CheckboxCard.spec.tsx +197 -0
  743. package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +116 -0
  744. package/src/fields/Checkbox/CheckboxGroup.stories.tsx +15 -0
  745. package/src/fields/Checkbox/CheckboxGroup.tsx +77 -70
  746. package/src/fields/Checkbox/checkboxGroupContext.ts +12 -0
  747. package/src/fields/DatePicker/Calendar.spec.tsx +6 -5
  748. package/src/fields/DatePicker/DatePicker.stories.tsx +13 -0
  749. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +586 -0
  750. package/src/fields/DatePicker/DatetimePicker.native.tsx +243 -0
  751. package/src/fields/DatePicker/DatetimePicker.tsx +2 -584
  752. package/src/fields/DatePicker/catalog.tsx +450 -0
  753. package/src/fields/DatePicker/index.native.tsx +261 -0
  754. package/src/fields/DatePicker/index.tsx +20 -448
  755. package/src/fields/DatePicker/parts.tsx +11 -6
  756. package/src/fields/Duration/Duration.spec.tsx +50 -0
  757. package/src/fields/Duration/Duration.stories.tsx +21 -0
  758. package/src/fields/Duration/index.tsx +43 -5
  759. package/src/fields/FileUpload/index.tsx +5 -1
  760. package/src/fields/Input/Input.spec.tsx +3 -1
  761. package/src/fields/PhoneInput/PhoneInput.spec.tsx +16 -63
  762. package/src/fields/PhoneInput/PhoneInput.tvalue-source.spec.ts +23 -0
  763. package/src/fields/PhoneInput/index.tsx +10 -3
  764. package/src/fields/Rating/index.tsx +9 -1
  765. package/src/fields/SearchInput/SearchInput.spec.tsx +20 -0
  766. package/src/fields/SearchInput/index.tsx +6 -0
  767. package/src/fields/Select/Select.stories.tsx +23 -1
  768. package/src/fields/Select/index.tsx +87 -1
  769. package/src/fields/Signature/Signature.spec.tsx +22 -3
  770. package/src/fields/Signature/index.tsx +16 -7
  771. package/src/fields/Slider/index.tsx +4 -1
  772. package/src/fields/Switch/index.tsx +14 -12
  773. package/src/fields/TextArea/TextArea.spec.tsx +68 -0
  774. package/src/fields/TextArea/index.tsx +23 -5
  775. package/src/fields/TimePicker/TimePicker.stories.tsx +13 -0
  776. package/src/fields/TimePicker/catalog.tsx +265 -0
  777. package/src/fields/TimePicker/index.native.tsx +229 -0
  778. package/src/fields/TimePicker/index.tsx +6 -261
  779. package/src/fields/TimeRangeScrubber/TimeRangeScrubber.spec.tsx +36 -0
  780. package/src/fields/TimeRangeScrubber/geometry.ts +13 -0
  781. package/src/fields/TimeRangeScrubber/index.tsx +49 -8
  782. package/src/fields/nativeDateTime/OsDateTimeSheet.spec.ts +12 -0
  783. package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +197 -0
  784. package/src/fields/nativeDateTime/osDateTimeIosDisplay.ts +4 -0
  785. package/src/fields/nativeSelect.spec.ts +28 -0
  786. package/src/fields/nativeSelect.ts +13 -0
  787. package/src/index.ts +2 -2
  788. package/src/themedPrimitives.tsx +10 -6
  789. package/types/Button/index.d.ts +3 -2
  790. package/types/Button/index.d.ts.map +1 -1
  791. package/types/Chip/index.d.ts.map +1 -1
  792. package/types/ContextualSaveBar/index.d.ts.map +1 -1
  793. package/types/DescriptionList/index.d.ts.map +1 -1
  794. package/types/ErrorSummary.d.ts.map +1 -1
  795. package/types/FloatingPanel/useFloatingPanel.d.ts +13 -0
  796. package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
  797. package/types/InputParts/index.d.ts.map +1 -1
  798. package/types/fields/Checkbox/Checkbox.d.ts.map +1 -1
  799. package/types/fields/Checkbox/CheckboxGroup.d.ts.map +1 -1
  800. package/types/fields/Checkbox/checkboxGroupContext.d.ts +8 -0
  801. package/types/fields/Checkbox/checkboxGroupContext.d.ts.map +1 -0
  802. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +35 -0
  803. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -0
  804. package/types/fields/DatePicker/DatetimePicker.d.ts +2 -32
  805. package/types/fields/DatePicker/DatetimePicker.d.ts.map +1 -1
  806. package/types/fields/DatePicker/DatetimePicker.native.d.ts +26 -0
  807. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -0
  808. package/types/fields/DatePicker/catalog.d.ts +42 -0
  809. package/types/fields/DatePicker/catalog.d.ts.map +1 -0
  810. package/types/fields/DatePicker/index.d.ts +2 -39
  811. package/types/fields/DatePicker/index.d.ts.map +1 -1
  812. package/types/fields/DatePicker/index.native.d.ts +40 -0
  813. package/types/fields/DatePicker/index.native.d.ts.map +1 -0
  814. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  815. package/types/fields/Duration/index.d.ts +2 -0
  816. package/types/fields/Duration/index.d.ts.map +1 -1
  817. package/types/fields/FileUpload/index.d.ts.map +1 -1
  818. package/types/fields/PhoneInput/index.d.ts.map +1 -1
  819. package/types/fields/Rating/index.d.ts.map +1 -1
  820. package/types/fields/SearchInput/index.d.ts.map +1 -1
  821. package/types/fields/Select/index.d.ts +6 -1
  822. package/types/fields/Select/index.d.ts.map +1 -1
  823. package/types/fields/Signature/index.d.ts.map +1 -1
  824. package/types/fields/Slider/index.d.ts.map +1 -1
  825. package/types/fields/Switch/index.d.ts.map +1 -1
  826. package/types/fields/TextArea/index.d.ts.map +1 -1
  827. package/types/fields/TimePicker/catalog.d.ts +41 -0
  828. package/types/fields/TimePicker/catalog.d.ts.map +1 -0
  829. package/types/fields/TimePicker/index.d.ts +2 -38
  830. package/types/fields/TimePicker/index.d.ts.map +1 -1
  831. package/types/fields/TimePicker/index.native.d.ts +31 -0
  832. package/types/fields/TimePicker/index.native.d.ts.map +1 -0
  833. package/types/fields/TimeRangeScrubber/geometry.d.ts +8 -0
  834. package/types/fields/TimeRangeScrubber/geometry.d.ts.map +1 -1
  835. package/types/fields/TimeRangeScrubber/index.d.ts +1 -1
  836. package/types/fields/TimeRangeScrubber/index.d.ts.map +1 -1
  837. package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts +12 -0
  838. package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts.map +1 -0
  839. package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts +3 -0
  840. package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts.map +1 -0
  841. package/types/fields/nativeSelect.d.ts +12 -0
  842. package/types/fields/nativeSelect.d.ts.map +1 -0
  843. package/types/index.d.ts +2 -2
  844. package/types/index.d.ts.map +1 -1
  845. package/types/themedPrimitives.d.ts.map +1 -1
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Mounts every Forms/Skeleton story and asserts what it exists to show. The
3
+ * theme hooks stay REAL: text-bone height comes from the size recipe and the
4
+ * pulse gates on knobProps.transition, so a stub would measure neither.
5
+ *
6
+ * Geometry is read off the CLASS, not `style`. Tamagui compiles width, height
7
+ * and radius into atomic classes (`_w-240px`, `_w-7037` for 70%), and only the
8
+ * pulse stays an inline style — so `el.style.width` is empty on every bone.
9
+ */
10
+ import { cleanup } from "@testing-library/react";
11
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
12
+ import type { ReactElement } from "react";
13
+ import { afterEach, describe, expect, it } from "vitest";
14
+
15
+ import * as storiesModule from "./Skeleton.stories";
16
+
17
+ afterEach(cleanup);
18
+
19
+ const meta = storiesModule.default;
20
+ const { Basic, Variants, TextLines, Circles, LoadingRow, MotionOff, RadiusKnob } = storiesModule;
21
+
22
+ type StoryLike = { render?: (args: Record<string, unknown>) => ReactElement };
23
+
24
+ function mount(story: StoryLike) {
25
+ if (!story.render) throw new Error("story has no render");
26
+ return renderWithProviders(story.render({ ...(meta.args as Record<string, unknown>) }));
27
+ }
28
+
29
+ /** Every bone is a SkeletonFrame, which Tamagui names `is_Skeleton`. */
30
+ function bones(container: HTMLElement): HTMLElement[] {
31
+ return Array.from(container.querySelectorAll<HTMLElement>(".is_Skeleton"));
32
+ }
33
+
34
+ const classesOf = (el: HTMLElement) => (el.getAttribute("class") ?? "").split(" ");
35
+ const widthClass = (el: HTMLElement) => classesOf(el).find((c) => c.startsWith("_w-"));
36
+ const heightClass = (el: HTMLElement) => classesOf(el).find((c) => c.startsWith("_h-"));
37
+
38
+ const stories = { Basic, Variants, TextLines, Circles, LoadingRow, MotionOff, RadiusKnob } as const;
39
+
40
+ describe("Forms/Skeleton stories", () => {
41
+ it("files under a Forms title so the gallery buckets it with the fields it fills in for", () => {
42
+ expect(meta.title).toBe("Forms/Skeleton");
43
+ });
44
+
45
+ it.each(Object.entries(stories))("%s mounts at least one bone", (_name, story) => {
46
+ expect(bones(mount(story as StoryLike).container).length).toBeGreaterThan(0);
47
+ });
48
+
49
+ it("Basic paints one bone at the meta width", () => {
50
+ const painted = bones(mount(Basic as StoryLike).container);
51
+ expect(painted.length).toBe(1);
52
+ expect(widthClass(painted[0])).toBe("_w-240px");
53
+ });
54
+
55
+ it("Variants shows all four, and the circular one is 1:1", () => {
56
+ const { container, getByText } = mount(Variants as StoryLike);
57
+ for (const name of ["text", "rounded", "rectangular", "circular"]) {
58
+ expect(getByText(name)).toBeTruthy();
59
+ }
60
+ const square = bones(container).find(
61
+ (el) => widthClass(el) === "_w-48px" && heightClass(el) === "_h-48px",
62
+ );
63
+ expect(square).toBeTruthy();
64
+ });
65
+
66
+ it("TextLines shortens the last line so a block reads as prose", () => {
67
+ const { container, getByText } = mount(TextLines as StoryLike);
68
+ expect(getByText("three lines, last at 70%")).toBeTruthy();
69
+ const widths = bones(container).map(widthClass);
70
+ // 70% and 40% are the two lastLineWidth values; 100% is every other line.
71
+ expect(widths).toContain("_w-7037");
72
+ expect(widths).toContain("_w-4037");
73
+ expect(widths).toContain("_w-10037");
74
+ });
75
+
76
+ it("Circles renders three, two of them at explicit sizes", () => {
77
+ const painted = bones(mount(Circles as StoryLike).container);
78
+ expect(painted.length).toBe(3);
79
+ const widths = painted.map(widthClass);
80
+ expect(widths).toContain("_w-32px");
81
+ expect(widths).toContain("_w-64px");
82
+ });
83
+
84
+ it("LoadingRow composes an avatar plus a name and two body lines", () => {
85
+ const painted = bones(mount(LoadingRow as StoryLike).container);
86
+ // 1 circle + 1 name bone + 2 body bones.
87
+ expect(painted.length).toBe(4);
88
+ expect(painted.map(widthClass)).toContain("_w-40px");
89
+ });
90
+
91
+ /** LC-20 / LC-68: the pulse is on with the knob and gone without it. */
92
+ it("MotionOff pulses the animated column and not the animate={false} one", () => {
93
+ const { container, getByText } = mount(MotionOff as StoryLike);
94
+ expect(getByText("animation knob on")).toBeTruthy();
95
+ expect(getByText("animation: none")).toBeTruthy();
96
+ const animations = bones(container).map((el) => el.style.animation);
97
+ expect(animations.some((a) => a.includes("skeleton-pulse"))).toBe(true);
98
+ expect(animations.some((a) => !a)).toBe(true);
99
+ });
100
+
101
+ it("RadiusKnob renders one column per radius stop", () => {
102
+ const { getByText } = mount(RadiusKnob as StoryLike);
103
+ for (const stop of ["none", "medium", "large"]) {
104
+ expect(getByText(`borderRadius: ${stop}`)).toBeTruthy();
105
+ }
106
+ });
107
+ });
@@ -0,0 +1,132 @@
1
+ /**
2
+ * SpinnerGlyph and useSpinnerStroke (MPO-143).
3
+ *
4
+ * Spinner.spec.tsx covers the status region, the size ladder and the animation
5
+ * knob; the glyph inside it — the two-circle arc that IS the spinner — had no
6
+ * coverage. Two contracts live here: the arc is exactly 270 degrees of the
7
+ * circumference on a faint full track, and `useSpinnerStroke` resolves a `$`
8
+ * token through the theme while passing a literal colour straight through.
9
+ */
10
+ import { cleanup } from "@testing-library/react";
11
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
12
+ import { afterEach, describe, expect, it } from "vitest";
13
+ import { SpinnerGlyph, useSpinnerStroke } from "./SpinnerGlyph";
14
+
15
+ afterEach(cleanup);
16
+
17
+ const R = 9;
18
+ const CIRCUMFERENCE = 2 * Math.PI * R;
19
+
20
+ function svg(container: HTMLElement): SVGElement {
21
+ const node = container.querySelector("svg");
22
+ if (!node) throw new Error("SpinnerGlyph rendered no svg");
23
+ return node as unknown as SVGElement;
24
+ }
25
+
26
+ function circles(container: HTMLElement): SVGElement[] {
27
+ return Array.from(container.querySelectorAll("circle")) as unknown as SVGElement[];
28
+ }
29
+
30
+ function Probe({ color }: { color?: string }) {
31
+ const stroke = useSpinnerStroke(color);
32
+ return <span data-stroke={stroke} />;
33
+ }
34
+
35
+ function stroke(container: HTMLElement): string | null {
36
+ return container.querySelector("[data-stroke]")?.getAttribute("data-stroke") ?? null;
37
+ }
38
+
39
+ describe("SpinnerGlyph — the arc", () => {
40
+ it("draws a track and a head, never one circle", () => {
41
+ const { container } = renderWithProviders(<SpinnerGlyph color="#123456" size={24} />);
42
+ expect(circles(container)).toHaveLength(2);
43
+ });
44
+
45
+ it("keeps the viewBox fixed and scales through width/height, so it stays crisp", () => {
46
+ const { container } = renderWithProviders(<SpinnerGlyph color="#123456" size={48} />);
47
+ const node = svg(container);
48
+ expect(node.getAttribute("viewBox")).toBe("0 0 24 24");
49
+ expect(node.getAttribute("width")).toBe("48");
50
+ expect(node.getAttribute("height")).toBe("48");
51
+ });
52
+
53
+ it("takes the box size it is handed rather than a fixed one", () => {
54
+ const small = renderWithProviders(<SpinnerGlyph color="#123456" size={16} />);
55
+ expect(svg(small.container).getAttribute("width")).toBe("16");
56
+ cleanup();
57
+ const large = renderWithProviders(<SpinnerGlyph color="#123456" size={64} />);
58
+ expect(svg(large.container).getAttribute("width")).toBe("64");
59
+ });
60
+
61
+ it("makes the track faint and the head solid, both in the requested colour", () => {
62
+ const { container } = renderWithProviders(<SpinnerGlyph color="#abcdef" size={24} />);
63
+ const [track, head] = circles(container);
64
+ expect(track.getAttribute("stroke")).toBe("#abcdef");
65
+ expect(head.getAttribute("stroke")).toBe("#abcdef");
66
+ expect(Number(track.getAttribute("opacity"))).toBeCloseTo(0.2, 5);
67
+ expect(head.getAttribute("opacity")).toBeNull();
68
+ });
69
+
70
+ it("paints 270 degrees of arc and leaves the remaining quarter open", () => {
71
+ const { container } = renderWithProviders(<SpinnerGlyph color="#123456" size={24} />);
72
+ const [, head] = circles(container);
73
+ const [drawn, gap] = String(
74
+ head.getAttribute("stroke-dasharray") ?? head.getAttribute("strokeDasharray"),
75
+ )
76
+ .split(" ")
77
+ .map(Number);
78
+ expect(drawn).toBeCloseTo(CIRCUMFERENCE * 0.75, 5);
79
+ expect(gap).toBeCloseTo(CIRCUMFERENCE * 0.25, 5);
80
+ expect(drawn + gap).toBeCloseTo(CIRCUMFERENCE, 5);
81
+ });
82
+
83
+ it("starts the head at twelve o'clock, not at three", () => {
84
+ const { container } = renderWithProviders(<SpinnerGlyph color="#123456" size={24} />);
85
+ const [, head] = circles(container);
86
+ expect(head.getAttribute("transform")).toBe("rotate(-90 12 12)");
87
+ });
88
+
89
+ it("rounds the head's cap, which is what makes it read as Linear/Polaris rather than a pie slice", () => {
90
+ const { container } = renderWithProviders(<SpinnerGlyph color="#123456" size={24} />);
91
+ const [track, head] = circles(container);
92
+ expect(head.getAttribute("stroke-linecap") ?? head.getAttribute("strokeLinecap")).toBe("round");
93
+ expect(track.getAttribute("stroke-linecap") ?? track.getAttribute("strokeLinecap")).toBeNull();
94
+ });
95
+
96
+ it("fills neither circle, so the spinner is a ring and not a disc", () => {
97
+ const { container } = renderWithProviders(<SpinnerGlyph color="#123456" size={24} />);
98
+ for (const circle of circles(container)) {
99
+ expect(circle.getAttribute("fill")).toBe("none");
100
+ }
101
+ });
102
+ });
103
+
104
+ describe("useSpinnerStroke", () => {
105
+ it("passes a literal colour through untouched", () => {
106
+ const { container } = renderWithProviders(<Probe color="#ff0000" />);
107
+ expect(stroke(container)).toBe("#ff0000");
108
+ cleanup();
109
+ const named = renderWithProviders(<Probe color="rebeccapurple" />);
110
+ expect(stroke(named.container)).toBe("rebeccapurple");
111
+ });
112
+
113
+ it("resolves a $ token to a concrete colour instead of leaking the token", () => {
114
+ const { container } = renderWithProviders(<Probe color="$color" />);
115
+ const value = stroke(container);
116
+ expect(value).toBeTruthy();
117
+ expect(value?.startsWith("$")).toBe(false);
118
+ });
119
+
120
+ it("defaults to $color when no colour is given, and still resolves it", () => {
121
+ const explicit = renderWithProviders(<Probe color="$color" />);
122
+ const explicitValue = stroke(explicit.container);
123
+ cleanup();
124
+ const implicit = renderWithProviders(<Probe />);
125
+ expect(stroke(implicit.container)).toBe(explicitValue);
126
+ });
127
+
128
+ it("hands back the token itself when the theme has no such key, rather than throwing", () => {
129
+ const { container } = renderWithProviders(<Probe color="$definitelyNotAThemeKey" />);
130
+ expect(stroke(container)).toBe("$definitelyNotAThemeKey");
131
+ });
132
+ });
@@ -0,0 +1,232 @@
1
+ import { action } from "@multiplatform.one/storybook";
2
+ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
3
+ import { Preset } from "@multiplatform.one/theme";
4
+ import { useState } from "react";
5
+ import { Paragraph, XStack, YStack } from "tamagui";
6
+ import { Wheel } from "./index";
7
+
8
+ const numbers = Array.from({ length: 24 }, (_, i) => i);
9
+ const pad2 = (n: number) => String(n).padStart(2, "0");
10
+ const hours = numbers.map((h) => ({ value: h, label: pad2(h) }));
11
+ const minutes = Array.from({ length: 60 }, (_, m) => ({ value: m, label: pad2(m) }));
12
+ const periods = [
13
+ { value: "AM", label: "AM" },
14
+ { value: "PM", label: "PM" },
15
+ ];
16
+ const currencyNames = { usd: "US Dollar", eur: "Euro", inr: "Rupee", jpy: "Yen" } as const;
17
+
18
+ const meta: Meta<typeof Wheel> = {
19
+ title: "Forms/Wheel",
20
+ component: Wheel,
21
+ parameters: {
22
+ status: { type: "beta" },
23
+ docs: {
24
+ description: {
25
+ component:
26
+ "iOS UIPickerView / Flutter CupertinoPicker cylinder. Drag, flick or arrow-key to bring an item through the centre band. TimePicker and DatePicker paint columns of these; `highlightEdges` joins adjacent columns into one selection band.",
27
+ },
28
+ },
29
+ },
30
+ argTypes: {
31
+ visibleItems: { control: "select", options: [3, 5, 7] },
32
+ loop: { control: "boolean" },
33
+ disabled: { control: "boolean" },
34
+ width: { control: "number" },
35
+ itemHeight: { control: "number" },
36
+ highlightEdges: { control: "select", options: ["all", "start", "end", "none"] },
37
+ size: { control: "select", options: ["$6", "$8", "$9"] },
38
+ },
39
+ args: {
40
+ items: hours,
41
+ value: 9,
42
+ visibleItems: 5,
43
+ loop: false,
44
+ disabled: false,
45
+ highlightEdges: "all",
46
+ },
47
+ };
48
+
49
+ export default meta;
50
+ type Story = StoryObj<typeof Wheel>;
51
+
52
+ export const Basic: Story = {
53
+ render: (args) => {
54
+ const Example = () => {
55
+ const [value, setValue] = useState<number>((args.value as number) ?? 9);
56
+ return (
57
+ <YStack gap="$3" alignItems="flex-start">
58
+ <Wheel
59
+ {...args}
60
+ value={value}
61
+ onChange={(next) => {
62
+ setValue(next as number);
63
+ action("onChange")(next);
64
+ }}
65
+ aria-label="Hour"
66
+ />
67
+ <Paragraph size="$3">selected: {pad2(value)}</Paragraph>
68
+ </YStack>
69
+ );
70
+ };
71
+ return <Example />;
72
+ },
73
+ };
74
+
75
+ /** Plain values (no `{ value, label }` wrapper) render their own `String(item)`. */
76
+ export const PlainValues: Story = {
77
+ render: () => (
78
+ <Wheel
79
+ items={["Small", "Medium", "Large", "Extra large"]}
80
+ value="Medium"
81
+ width={140}
82
+ onChange={action("onChange")}
83
+ aria-label="Size"
84
+ />
85
+ ),
86
+ };
87
+
88
+ /**
89
+ * `visibleItems` is the cylinder depth. 3 is a compact inline row, 7 the full
90
+ * iOS sheet; the value must stay odd so an item sits dead centre.
91
+ */
92
+ export const VisibleItems: Story = {
93
+ render: () => (
94
+ <XStack gap="$6" alignItems="flex-start">
95
+ {([3, 5, 7] as const).map((count) => (
96
+ <YStack key={count} gap="$2" alignItems="center">
97
+ <Paragraph size="$2">visibleItems={count}</Paragraph>
98
+ <Wheel items={hours} value={9} visibleItems={count} aria-label={`Hour ${count}`} />
99
+ </YStack>
100
+ ))}
101
+ </XStack>
102
+ ),
103
+ };
104
+
105
+ /**
106
+ * `loop` wraps at the ends instead of rubber-banding. Hours and minutes loop;
107
+ * a bounded set like AM/PM must not, or the user can scroll past the last row
108
+ * into a value that was never offered.
109
+ */
110
+ export const LoopingAndBounded: Story = {
111
+ render: () => (
112
+ <XStack gap="$6" alignItems="flex-start">
113
+ <YStack gap="$2" alignItems="center">
114
+ <Paragraph size="$2">loop</Paragraph>
115
+ <Wheel items={minutes} value={30} loop onChange={action("onChange")} aria-label="Minute" />
116
+ </YStack>
117
+ <YStack gap="$2" alignItems="center">
118
+ <Paragraph size="$2">bounded</Paragraph>
119
+ <Wheel
120
+ items={periods}
121
+ value="AM"
122
+ loop={false}
123
+ width={72}
124
+ onChange={action("onChange")}
125
+ aria-label="AM/PM"
126
+ />
127
+ </YStack>
128
+ </XStack>
129
+ ),
130
+ };
131
+
132
+ /**
133
+ * Multi-column joining: the row of columns reads as ONE selection band because
134
+ * the first declares `start`, the last `end`, and everything between `none`.
135
+ * This is the arrangement TimePicker ships.
136
+ */
137
+ export const JoinedColumns: Story = {
138
+ render: () => (
139
+ <XStack width={320}>
140
+ <Wheel items={hours} value={9} loop flex={1} highlightEdges="start" aria-label="Hour" />
141
+ <Wheel items={minutes} value={30} loop flex={1} highlightEdges="none" aria-label="Minute" />
142
+ <Wheel items={periods} value="AM" flex={1} highlightEdges="end" aria-label="AM/PM" />
143
+ </XStack>
144
+ ),
145
+ };
146
+
147
+ export const Disabled: Story = {
148
+ render: () => (
149
+ <XStack gap="$6" alignItems="flex-start">
150
+ <YStack gap="$2" alignItems="center">
151
+ <Paragraph size="$2">enabled</Paragraph>
152
+ <Wheel items={hours} value={9} aria-label="Hour enabled" />
153
+ </YStack>
154
+ <YStack gap="$2" alignItems="center">
155
+ <Paragraph size="$2">disabled</Paragraph>
156
+ <Wheel items={hours} value={9} disabled aria-label="Hour disabled" />
157
+ </YStack>
158
+ </XStack>
159
+ ),
160
+ };
161
+
162
+ /**
163
+ * `renderItem` owns the row; the wheel keeps geometry and selection. It is
164
+ * handed the VALUE, not the `{ value, label }` wrapper — so a story that wants
165
+ * a display string looks it up itself.
166
+ */
167
+ export const CustomRenderItem: Story = {
168
+ render: () => (
169
+ <Wheel
170
+ items={Object.keys(currencyNames)}
171
+ value="inr"
172
+ width={200}
173
+ onChange={action("onChange")}
174
+ aria-label="Currency"
175
+ renderItem={(item, _index, isSelected) => (
176
+ <Paragraph size="$5" fontWeight={isSelected ? "700" : "400"}>
177
+ {currencyNames[item as keyof typeof currencyNames]}
178
+ </Paragraph>
179
+ )}
180
+ />
181
+ ),
182
+ };
183
+
184
+ /** Edge cases the geometry has to survive: empty, single item, very long labels. */
185
+ export const EdgeCases: Story = {
186
+ render: () => (
187
+ <XStack gap="$6" alignItems="flex-start" flexWrap="wrap">
188
+ <YStack gap="$2" alignItems="center">
189
+ <Paragraph size="$2">empty</Paragraph>
190
+ <Wheel items={[]} aria-label="Empty" />
191
+ </YStack>
192
+ <YStack gap="$2" alignItems="center">
193
+ <Paragraph size="$2">single item</Paragraph>
194
+ <Wheel items={[{ value: "only", label: "Only" }]} value="only" aria-label="Single" />
195
+ </YStack>
196
+ <YStack gap="$2" alignItems="center">
197
+ <Paragraph size="$2">long labels</Paragraph>
198
+ <Wheel
199
+ items={[
200
+ { value: "a", label: "Asia/Kolkata" },
201
+ { value: "b", label: "America/Argentina/Buenos_Aires" },
202
+ { value: "c", label: "Europe/Isle_of_Man" },
203
+ ]}
204
+ value="b"
205
+ width={200}
206
+ aria-label="Timezone"
207
+ />
208
+ </YStack>
209
+ </XStack>
210
+ ),
211
+ };
212
+
213
+ /**
214
+ * MOTION-RIDES-KNOB (LC-68): at `animation: "none"` a keyboard snap must JUMP,
215
+ * not tween. Arrow-key both wheels and watch the difference.
216
+ */
217
+ export const MotionOff: Story = {
218
+ render: () => (
219
+ <XStack gap="$6" alignItems="flex-start">
220
+ <YStack gap="$2" alignItems="center">
221
+ <Paragraph size="$2">animation: medium</Paragraph>
222
+ <Wheel items={hours} value={9} loop aria-label="Hour animated" />
223
+ </YStack>
224
+ <Preset overrides={{ animation: "none" }}>
225
+ <YStack gap="$2" alignItems="center">
226
+ <Paragraph size="$2">animation: none</Paragraph>
227
+ <Wheel items={hours} value={9} loop aria-label="Hour static" />
228
+ </YStack>
229
+ </Preset>
230
+ </XStack>
231
+ ),
232
+ };
@@ -0,0 +1,141 @@
1
+ /**
2
+ * WheelEdgeFade — LC-25's two halves (MPO-143).
3
+ *
4
+ * The contract is a platform split with a contrast reason behind it. On web the
5
+ * wheel viewport carries a CSS mask, so this component must render NOTHING; on
6
+ * native it paints two absolutely-positioned gradient bands as an OVERLAY. The
7
+ * overlay is the whole point: fading the rows themselves would drop their
8
+ * opacity below 1 and take the inactive `$color11` numerals under the AA floor,
9
+ * which is the regression Wheel.spec.tsx guards from the other side.
10
+ *
11
+ * Both halves are exercised. A spec that covered only the file the web build
12
+ * resolves would be asserting `null` and calling it a test.
13
+ *
14
+ * `expo-linear-gradient` ships untranspiled JSX in its published build, which
15
+ * the web transform cannot parse, so it is mocked into a probe element. The
16
+ * mock is the gradient, not the component under test: colours, start and end
17
+ * come straight from WheelEdgeFade.
18
+ */
19
+ import { cleanup } from "@testing-library/react";
20
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
21
+ import { afterEach, describe, expect, it, vi } from "vitest";
22
+ import { WheelEdgeFade } from "./WheelEdgeFade";
23
+ import { WheelEdgeFade as NativeWheelEdgeFade } from "./WheelEdgeFade.native";
24
+
25
+ vi.mock("expo-linear-gradient", () => ({
26
+ LinearGradient: (props: { colors?: string[]; start?: unknown; end?: unknown }) => (
27
+ <div
28
+ data-gradient="true"
29
+ data-colors={(props.colors ?? []).join("|")}
30
+ data-start={JSON.stringify(props.start)}
31
+ data-end={JSON.stringify(props.end)}
32
+ />
33
+ ),
34
+ }));
35
+
36
+ afterEach(cleanup);
37
+
38
+ function bands(container: HTMLElement): HTMLElement[] {
39
+ return Array.from(container.querySelectorAll("[style*='height']")) as HTMLElement[];
40
+ }
41
+
42
+ function gradients(container: HTMLElement): HTMLElement[] {
43
+ return Array.from(container.querySelectorAll("[data-gradient]")) as HTMLElement[];
44
+ }
45
+
46
+ function colorsOf(node: HTMLElement): string[] {
47
+ return String(node.getAttribute("data-colors") ?? "").split("|");
48
+ }
49
+
50
+ describe("WheelEdgeFade — web", () => {
51
+ it("renders nothing, because the viewport's CSS mask already does the fade", () => {
52
+ const { container } = renderWithProviders(<WheelEdgeFade height={24} />);
53
+ expect(container.querySelector("[data-gradient]")).toBeNull();
54
+ expect(container.textContent).toBe("");
55
+ });
56
+
57
+ it("renders nothing at every height, so it can never dim a row", () => {
58
+ for (const height of [0, 1, 24, 400]) {
59
+ const { container } = renderWithProviders(<WheelEdgeFade height={height} />);
60
+ expect(container.querySelector("[data-gradient]"), String(height)).toBeNull();
61
+ cleanup();
62
+ }
63
+ });
64
+ });
65
+
66
+ describe("WheelEdgeFade — native", () => {
67
+ it("paints one band per edge, never a single one", () => {
68
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={24} />);
69
+ expect(gradients(container)).toHaveLength(2);
70
+ });
71
+
72
+ it("draws nothing at all when the band height is zero or negative", () => {
73
+ const zero = renderWithProviders(<NativeWheelEdgeFade height={0} />);
74
+ expect(gradients(zero.container)).toHaveLength(0);
75
+ cleanup();
76
+ const negative = renderWithProviders(<NativeWheelEdgeFade height={-8} />);
77
+ expect(gradients(negative.container)).toHaveLength(0);
78
+ });
79
+
80
+ it("pins one band to the top and one to the bottom", () => {
81
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={30} />);
82
+ const edges = bands(container).map((node) => node.getAttribute("style") ?? "");
83
+ expect(edges.some((style) => /top:\s*0px/.test(style))).toBe(true);
84
+ expect(edges.some((style) => /bottom:\s*0px/.test(style))).toBe(true);
85
+ });
86
+
87
+ it("gives each band the height it was handed, so the caller sets the fade depth", () => {
88
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={30} />);
89
+ const heights = bands(container).map(
90
+ (node) => /height:\s*(\d+)px/.exec(node.getAttribute("style") ?? "")?.[1],
91
+ );
92
+ expect(heights.filter(Boolean)).toEqual(["30", "30"]);
93
+ cleanup();
94
+ const taller = renderWithProviders(<NativeWheelEdgeFade height={64} />);
95
+ expect(
96
+ bands(taller.container).map(
97
+ (node) => /height:\s*(\d+)px/.exec(node.getAttribute("style") ?? "")?.[1],
98
+ ),
99
+ ).toEqual(["64", "64"]);
100
+ });
101
+
102
+ it("keeps the bands out of the way of a drag, so the wheel still scrolls", () => {
103
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={24} />);
104
+ for (const band of bands(container)) {
105
+ expect(band.className).toContain("r-pointerEvents");
106
+ expect(band.className).toContain("r-position");
107
+ }
108
+ });
109
+
110
+ it("runs the top band opaque-to-clear and the bottom band clear-to-opaque", () => {
111
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={24} />);
112
+ const [top, bottom] = gradients(container).map(colorsOf);
113
+ expect(top).toHaveLength(2);
114
+ expect(bottom).toHaveLength(2);
115
+ // The two bands are mirror images: the top starts on the page background
116
+ // and ends transparent, the bottom does the reverse.
117
+ expect(top[0]).toBe(bottom[1]);
118
+ expect(top[1]).toBe(bottom[0]);
119
+ expect(top[1]).toMatch(/,\s*0\)$/);
120
+ expect(top[0]).not.toMatch(/,\s*0\)$/);
121
+ });
122
+
123
+ it("derives the fade colour from the theme background rather than a hardcoded white", () => {
124
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={24} />);
125
+ const [opaque, clear] = colorsOf(gradients(container)[0]);
126
+ expect(opaque).toBeTruthy();
127
+ expect(opaque).not.toBe("transparent");
128
+ // The clear stop is the SAME colour at zero alpha, so the band never
129
+ // shifts hue across its length.
130
+ const channels = /rgba\(([^)]+),\s*0\)$/.exec(clear)?.[1];
131
+ expect(channels, `clear stop ${clear} must be the opaque stop at alpha 0`).toBeTruthy();
132
+ });
133
+
134
+ it("runs both gradients vertically down the centre line", () => {
135
+ const { container } = renderWithProviders(<NativeWheelEdgeFade height={24} />);
136
+ for (const gradient of gradients(container)) {
137
+ expect(gradient.getAttribute("data-start")).toBe(JSON.stringify({ x: 0.5, y: 0 }));
138
+ expect(gradient.getAttribute("data-end")).toBe(JSON.stringify({ x: 0.5, y: 1 }));
139
+ }
140
+ });
141
+ });