@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
@@ -1,6 +1,7 @@
1
1
  import { act, fireEvent, waitFor } from "@testing-library/react";
2
2
  import { useState } from "react";
3
3
  import { describe, expect, it, vi } from "vitest";
4
+ import { Preset } from "@multiplatform.one/theme";
4
5
  import { renderWithProviders } from "@multiplatform.one/test-utils";
5
6
  import { Checkbox } from "../fields/Checkbox";
6
7
  import { Input } from "../fields/Input";
@@ -254,6 +255,56 @@ describe("ContextualSaveBar", () => {
254
255
  expect(discard.getAttribute("aria-disabled")).toBeNull();
255
256
  expect(discard.getAttribute("data-mp-cancel-disabled-ignored")).toBe("true");
256
257
  });
258
+
259
+ it("CONTAINER-CAP on the top pair only; bottom pair pinned 0 (bottom-docked sheet)", () => {
260
+ const result = renderWithProviders(
261
+ <Preset overrides={{ borderRadius: "full", space: "medium" }}>
262
+ <Form formOptions={{ defaultValues: { name: "x" } }}>
263
+ <Input name="name" label="Name" />
264
+ <ContextualSaveBar forceVisible />
265
+ </Form>
266
+ </Preset>,
267
+ );
268
+ const bar = savebar(result.container);
269
+ expect(bar).toBeTruthy();
270
+ expect(bar?.getAttribute("data-mp-savebar-radius-class")).toBe("CONTAINER-CAP");
271
+ expect(bar?.getAttribute("data-mp-savebar-dock")).toBe("bottom");
272
+ expect(bar?.getAttribute("data-mp-savebar-top-radius")).toBe("18");
273
+ expect(bar?.getAttribute("data-mp-savebar-bottom-radius")).toBe("0");
274
+ const cls = String(bar?.className ?? "");
275
+ expect(cls).not.toMatch(/t-radius-12/);
276
+ const cs = bar ? getComputedStyle(bar) : null;
277
+ expect(cs?.borderBottomLeftRadius === "0px" || cs?.borderBottomLeftRadius === "0").toBe(true);
278
+ expect(cs?.borderBottomRightRadius === "0px" || cs?.borderBottomRightRadius === "0").toBe(true);
279
+ });
280
+
281
+ it("large under space=small caps the top pair at pad 13; bottoms stay 0", () => {
282
+ const result = renderWithProviders(
283
+ <Preset overrides={{ borderRadius: "large", space: "small" }}>
284
+ <Form formOptions={{ defaultValues: { name: "x" } }}>
285
+ <Input name="name" label="Name" />
286
+ <ContextualSaveBar forceVisible />
287
+ </Form>
288
+ </Preset>,
289
+ );
290
+ const bar = savebar(result.container);
291
+ expect(bar?.getAttribute("data-mp-savebar-top-radius")).toBe("13");
292
+ expect(bar?.getAttribute("data-mp-savebar-bottom-radius")).toBe("0");
293
+ });
294
+
295
+ it("none squares the top pair; bottoms stay 0", () => {
296
+ const result = renderWithProviders(
297
+ <Preset overrides={{ borderRadius: "none" }}>
298
+ <Form formOptions={{ defaultValues: { name: "x" } }}>
299
+ <Input name="name" label="Name" />
300
+ <ContextualSaveBar forceVisible />
301
+ </Form>
302
+ </Preset>,
303
+ );
304
+ const bar = savebar(result.container);
305
+ expect(bar?.getAttribute("data-mp-savebar-top-radius")).toBe("$0");
306
+ expect(bar?.getAttribute("data-mp-savebar-bottom-radius")).toBe("0");
307
+ });
257
308
  });
258
309
 
259
310
  describe("clientKnownIdentity (LC-64)", () => {
@@ -8,15 +8,32 @@ import { Switch } from "../fields/Switch";
8
8
  import { Form } from "../Form";
9
9
  import { ContextualSaveBar } from "./index";
10
10
 
11
+ const fields = (
12
+ <YStack gap="$4" width="100%" maxWidth={640} padding="$4" minHeight={360}>
13
+ <Input name="name" label="Service name" />
14
+ <Checkbox name="agree" label="Notify on deploy" />
15
+ <RadioGroup
16
+ name="env"
17
+ label="Environment"
18
+ options={[
19
+ { label: "Prod", value: "prod" },
20
+ { label: "Stage", value: "stage" },
21
+ ]}
22
+ />
23
+ <Switch name="live" label="Live" />
24
+ </YStack>
25
+ );
26
+
11
27
  const meta: Meta<typeof ContextualSaveBar> = {
12
28
  title: "Forms/ContextualSaveBar",
13
29
  component: ContextualSaveBar,
14
30
  parameters: {
15
- status: { type: "beta" },
31
+ layout: "fullscreen",
32
+ status: { type: "stable" },
16
33
  docs: {
17
34
  description: {
18
35
  component:
19
- "Declarative dirty-state Save/Discard bar (DG-ACT-06). Text, checkbox, and radio stage; Switch auto-commits and never raises the bar. Discard is never disabled (LC-30).",
36
+ "Declarative dirty-state Save/Discard bar (DG-ACT-06). Text, checkbox, and radio stage; Switch auto-commits and never raises the bar. Discard is never disabled (LC-30). Frame is CONTAINER-CAP on the top pair only; bottom pair stays 0 (bottom-docked sheet).",
20
37
  },
21
38
  },
22
39
  },
@@ -29,7 +46,11 @@ export const Main: Story = {
29
46
  name: "Main",
30
47
  render: () => (
31
48
  <Form
32
- saveBar={{ onSaved: action("onSaved"), onAutoCommit: action("onAutoCommit") }}
49
+ saveBar={{
50
+ forceVisible: true,
51
+ onSaved: action("onSaved"),
52
+ onAutoCommit: action("onAutoCommit"),
53
+ }}
33
54
  formOptions={{
34
55
  defaultValues: {
35
56
  name: "svc",
@@ -42,31 +63,29 @@ export const Main: Story = {
42
63
  action("onSubmit")(values);
43
64
  }}
44
65
  >
45
- <YStack gap="$4" width="100%" maxWidth={640} padding="$4">
46
- <Input name="name" label="Service name" />
47
- <Checkbox name="agree" label="Notify on deploy" />
48
- <RadioGroup
49
- name="env"
50
- label="Environment"
51
- options={[
52
- { label: "Prod", value: "prod" },
53
- { label: "Stage", value: "stage" },
54
- ]}
55
- />
56
- <Switch name="live" label="Live" />
57
- </YStack>
66
+ {fields}
58
67
  </Form>
59
68
  ),
60
69
  };
61
70
 
62
- export const ForceVisible: Story = {
63
- name: "Force visible",
71
+ export const Dirty: Story = {
72
+ name: "Dirty",
64
73
  render: () => (
65
- <Form formOptions={{ defaultValues: { name: "svc" } }}>
66
- <YStack gap="$4" width="100%" maxWidth={640} padding="$4">
67
- <Input name="name" label="Service name" />
68
- <ContextualSaveBar forceVisible />
69
- </YStack>
74
+ <Form
75
+ saveBar={{ onSaved: action("onSaved"), onAutoCommit: action("onAutoCommit") }}
76
+ formOptions={{
77
+ defaultValues: {
78
+ name: "svc",
79
+ agree: false,
80
+ env: "prod",
81
+ live: false,
82
+ },
83
+ }}
84
+ onSubmit={async (values) => {
85
+ action("onSubmit")(values);
86
+ }}
87
+ >
88
+ {fields}
70
89
  </Form>
71
90
  ),
72
91
  };
@@ -0,0 +1,167 @@
1
+ /**
2
+ * UnsavedChangesDialog — the route-leave confirm (DG-OVL-02), MPO-143.
3
+ *
4
+ * ContextualSaveBar.spec.tsx reaches this dialog through the save bar, which
5
+ * proves the wiring but never exercises the dialog's own contract: the two
6
+ * copy branches, which button calls which callback, and the guard that stops an
7
+ * outside click from dismissing a destructive confirm. Those are the parts a
8
+ * refactor of the save bar would carry away without noticing.
9
+ */
10
+ import { cleanup, fireEvent } from "@testing-library/react";
11
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
12
+ import { afterEach, describe, expect, it, vi } from "vitest";
13
+ import { UnsavedChangesDialog } from "./UnsavedChangesDialog";
14
+
15
+ afterEach(cleanup);
16
+
17
+ function dialog(): HTMLElement | null {
18
+ return document.body.querySelector('[role="alertdialog"]');
19
+ }
20
+
21
+ function button(marker: string): HTMLElement {
22
+ const node = document.body.querySelector(`[${marker}]`);
23
+ if (!node) throw new Error(`No button carrying ${marker}`);
24
+ return node as HTMLElement;
25
+ }
26
+
27
+ function noop() {}
28
+
29
+ /** Tamagui paints through atomic classes; read the inline channel first. */
30
+ function cssOf(node: HTMLElement, prop: string): string {
31
+ const inline = node.style.getPropertyValue(prop);
32
+ if (inline) return inline;
33
+ return getComputedStyle(node).getPropertyValue(prop) || "";
34
+ }
35
+
36
+ describe("UnsavedChangesDialog", () => {
37
+ it("renders nothing while closed", () => {
38
+ renderWithProviders(
39
+ <UnsavedChangesDialog open={false} fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
40
+ );
41
+ expect(dialog()).toBeNull();
42
+ });
43
+
44
+ it("announces as an alertdialog, not a plain dialog, because the choice is destructive", () => {
45
+ renderWithProviders(
46
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
47
+ );
48
+ expect(dialog()).toBeTruthy();
49
+ expect(document.body.querySelector('[role="dialog"][data-mp-savebar-guard]')).toBeNull();
50
+ });
51
+
52
+ it("leads with the question, so the title carries the decision", () => {
53
+ renderWithProviders(
54
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
55
+ );
56
+ expect(dialog()?.textContent).toContain("Discard unsaved changes?");
57
+ });
58
+
59
+ it("uses the singular sentence for exactly one edited field", () => {
60
+ renderWithProviders(
61
+ <UnsavedChangesDialog open fieldCount={1} onKeepEditing={noop} onDiscard={noop} />,
62
+ );
63
+ const text = dialog()?.textContent ?? "";
64
+ expect(text).toContain("1 field on this page has edits");
65
+ expect(text).not.toContain("fields on this page have");
66
+ });
67
+
68
+ it("uses the plural sentence, with the count interpolated, for more than one", () => {
69
+ renderWithProviders(
70
+ <UnsavedChangesDialog open fieldCount={4} onKeepEditing={noop} onDiscard={noop} />,
71
+ );
72
+ const text = dialog()?.textContent ?? "";
73
+ expect(text).toContain("4 fields on this page have edits");
74
+ expect(text).not.toContain("1 field on this page has");
75
+ });
76
+
77
+ it("says plainly that leaving discards the edits", () => {
78
+ renderWithProviders(
79
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
80
+ );
81
+ expect(dialog()?.textContent).toContain("Leaving discards them");
82
+ });
83
+
84
+ it("offers both a way back and a way out", () => {
85
+ renderWithProviders(
86
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
87
+ );
88
+ expect(button("data-mp-savebar-keep").textContent).toContain("Keep editing");
89
+ expect(button("data-mp-savebar-discard-confirm").textContent).toContain("Discard changes");
90
+ });
91
+
92
+ it("calls onKeepEditing, and only that, when the safe button is pressed", () => {
93
+ const onKeepEditing = vi.fn();
94
+ const onDiscard = vi.fn();
95
+ renderWithProviders(
96
+ <UnsavedChangesDialog
97
+ open
98
+ fieldCount={2}
99
+ onKeepEditing={onKeepEditing}
100
+ onDiscard={onDiscard}
101
+ />,
102
+ );
103
+ fireEvent.click(button("data-mp-savebar-keep"));
104
+ expect(onKeepEditing).toHaveBeenCalledTimes(1);
105
+ expect(onDiscard).not.toHaveBeenCalled();
106
+ });
107
+
108
+ it("calls onDiscard, and only that, when the destructive button is pressed", () => {
109
+ const onKeepEditing = vi.fn();
110
+ const onDiscard = vi.fn();
111
+ renderWithProviders(
112
+ <UnsavedChangesDialog
113
+ open
114
+ fieldCount={2}
115
+ onKeepEditing={onKeepEditing}
116
+ onDiscard={onDiscard}
117
+ />,
118
+ );
119
+ fireEvent.click(button("data-mp-savebar-discard-confirm"));
120
+ expect(onDiscard).toHaveBeenCalledTimes(1);
121
+ expect(onKeepEditing).not.toHaveBeenCalled();
122
+ });
123
+
124
+ it("treats any dismissal as keep-editing, never as a silent discard", () => {
125
+ const onKeepEditing = vi.fn();
126
+ const onDiscard = vi.fn();
127
+ renderWithProviders(
128
+ <UnsavedChangesDialog
129
+ open
130
+ fieldCount={2}
131
+ onKeepEditing={onKeepEditing}
132
+ onDiscard={onDiscard}
133
+ />,
134
+ );
135
+ fireEvent.keyDown(dialog() as HTMLElement, { key: "Escape", code: "Escape" });
136
+ expect(onDiscard).not.toHaveBeenCalled();
137
+ });
138
+
139
+ it("marks the content so the save bar's outside-click guard can find it", () => {
140
+ renderWithProviders(
141
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
142
+ );
143
+ expect(dialog()?.hasAttribute("data-mp-savebar-guard")).toBe(true);
144
+ });
145
+
146
+ it("takes focus itself rather than leaving it behind the overlay", () => {
147
+ renderWithProviders(
148
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
149
+ );
150
+ expect(dialog()?.getAttribute("tabindex")).toBe("-1");
151
+ });
152
+
153
+ it("paints no focus outline on the sheet itself, so the ring stays on the buttons", () => {
154
+ renderWithProviders(
155
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
156
+ );
157
+ const outline = cssOf(dialog() as HTMLElement, "outline-width");
158
+ expect(outline === "" || outline === "0px").toBe(true);
159
+ });
160
+
161
+ it("caps its width so the sentence never runs the width of a desk monitor", () => {
162
+ renderWithProviders(
163
+ <UnsavedChangesDialog open fieldCount={2} onKeepEditing={noop} onDiscard={noop} />,
164
+ );
165
+ expect(cssOf(dialog() as HTMLElement, "max-width")).toBe("440px");
166
+ });
167
+ });
@@ -0,0 +1,118 @@
1
+ import { action } from "@multiplatform.one/storybook";
2
+ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
3
+ import { useState } from "react";
4
+ import { Paragraph, YStack } from "tamagui";
5
+ import { Button } from "../Button";
6
+ import { UnsavedChangesDialog } from "./UnsavedChangesDialog";
7
+
8
+ const meta: Meta<typeof UnsavedChangesDialog> = {
9
+ title: "Forms/ContextualSaveBar/UnsavedChangesDialog",
10
+ component: UnsavedChangesDialog,
11
+ parameters: {
12
+ status: { type: "beta" },
13
+ docs: {
14
+ description: {
15
+ component:
16
+ "The route-leave confirm ContextualSaveBar raises (DG-OVL-02) when a navigation would throw away edits. It is an `alertdialog`, it cannot be dismissed by clicking the scrim, and the destructive choice is the one on the right — so nobody discards work by reflex. It lives in forms rather than components because ConfirmDialog would import the forms Button and cycle.",
17
+ },
18
+ },
19
+ },
20
+ argTypes: {
21
+ open: { control: "boolean" },
22
+ fieldCount: { control: { type: "number", min: 0, step: 1 } },
23
+ },
24
+ args: {
25
+ open: true,
26
+ fieldCount: 3,
27
+ },
28
+ };
29
+
30
+ export default meta;
31
+ type Story = StoryObj<typeof UnsavedChangesDialog>;
32
+
33
+ export const Basic: Story = {
34
+ render: (args) => (
35
+ <UnsavedChangesDialog
36
+ {...args}
37
+ onKeepEditing={action("onKeepEditing")}
38
+ onDiscard={action("onDiscard")}
39
+ />
40
+ ),
41
+ };
42
+
43
+ /**
44
+ * The body pluralises: one field reads "1 field ... has edits", more than one
45
+ * reads "N fields ... have edits". Getting this wrong is the tell that a count
46
+ * was interpolated into a fixed string.
47
+ */
48
+ export const SingleField: Story = {
49
+ render: () => (
50
+ <UnsavedChangesDialog
51
+ open
52
+ fieldCount={1}
53
+ onKeepEditing={action("onKeepEditing")}
54
+ onDiscard={action("onDiscard")}
55
+ />
56
+ ),
57
+ };
58
+
59
+ export const ManyFields: Story = {
60
+ render: () => (
61
+ <UnsavedChangesDialog
62
+ open
63
+ fieldCount={14}
64
+ onKeepEditing={action("onKeepEditing")}
65
+ onDiscard={action("onDiscard")}
66
+ />
67
+ ),
68
+ };
69
+
70
+ /** Closed is a real state: it renders no scrim and nothing takes focus. */
71
+ export const Closed: Story = {
72
+ render: () => (
73
+ <YStack gap="$3" maxWidth={420}>
74
+ <Paragraph size="$3">Nothing should paint below this line.</Paragraph>
75
+ <UnsavedChangesDialog
76
+ open={false}
77
+ fieldCount={3}
78
+ onKeepEditing={action("onKeepEditing")}
79
+ onDiscard={action("onDiscard")}
80
+ />
81
+ </YStack>
82
+ ),
83
+ };
84
+
85
+ /**
86
+ * The live loop. "Keep editing" is the safe path and is also what Escape and
87
+ * `onOpenChange(false)` resolve to; "Discard changes" is the only way to lose
88
+ * the edits, and it is the destructive-styled button.
89
+ */
90
+ export const Interactive: Story = {
91
+ render: () => {
92
+ const Example = () => {
93
+ const [open, setOpen] = useState(false);
94
+ const [outcome, setOutcome] = useState<string>("nothing yet");
95
+ return (
96
+ <YStack gap="$4" maxWidth={420} alignItems="flex-start">
97
+ <Button onPress={() => setOpen(true)}>Leave the page</Button>
98
+ <Paragraph size="$3">last outcome: {outcome}</Paragraph>
99
+ <UnsavedChangesDialog
100
+ open={open}
101
+ fieldCount={3}
102
+ onKeepEditing={() => {
103
+ setOpen(false);
104
+ setOutcome("kept editing");
105
+ action("onKeepEditing")();
106
+ }}
107
+ onDiscard={() => {
108
+ setOpen(false);
109
+ setOutcome("discarded");
110
+ action("onDiscard")();
111
+ }}
112
+ />
113
+ </YStack>
114
+ );
115
+ };
116
+ return <Example />;
117
+ },
118
+ };
@@ -120,6 +120,14 @@ function barRadius(knobProps: KnobProps) {
120
120
  };
121
121
  }
122
122
 
123
+ function containerRadiusRest(knobProps: KnobProps) {
124
+ const fragment = knobProps.containerRadius as KnobProps["containerRadius"] & {
125
+ className?: string;
126
+ };
127
+ const { className, borderRadius: _topPair, ...rest } = fragment;
128
+ return { className, rest };
129
+ }
130
+
123
131
  export function ContextualSaveBar({
124
132
  forceVisible = false,
125
133
  discardDisabled = false,
@@ -211,10 +219,8 @@ export function ContextualSaveBar({
211
219
  const padX = knobProps.panelPadding.padding;
212
220
  const borderWidth = knobProps.borderRadius.borderWidth;
213
221
  const elevationProps = getElevationWrapperProps(knobProps, elevation);
214
- const { className: smoothClass, ...smoothRest } =
215
- knobProps.containerRadius as KnobProps["containerRadius"] & {
216
- className?: string;
217
- };
222
+ const { className: smoothClass, rest: smoothRest } = containerRadiusRest(knobProps);
223
+ const topRadius = knobProps.containerRadius.borderRadius;
218
224
  const transition = knobProps.transition;
219
225
 
220
226
  return (
@@ -225,6 +231,9 @@ export function ContextualSaveBar({
225
231
  key="contextual-savebar"
226
232
  data-mp-contextual-savebar=""
227
233
  data-mp-savebar-dock="bottom"
234
+ data-mp-savebar-radius-class="CONTAINER-CAP"
235
+ data-mp-savebar-top-radius={String(topRadius)}
236
+ data-mp-savebar-bottom-radius="0"
228
237
  role="region"
229
238
  aria-label={t("Unsaved changes")}
230
239
  position="sticky"
@@ -243,13 +252,13 @@ export function ContextualSaveBar({
243
252
  borderRightWidth={0}
244
253
  borderBottomWidth={0}
245
254
  {...smoothRest}
246
- {...barRadius(knobProps)}
247
255
  className={smoothClass}
248
256
  {...knobProps.gap}
249
257
  transition={transition}
250
258
  enterStyle={transition ? { y: 12, opacity: 0 } : undefined}
251
259
  exitStyle={transition ? { y: 12, opacity: 0 } : undefined}
252
260
  {...elevationProps}
261
+ {...barRadius(knobProps)}
253
262
  style={{
254
263
  ...(isWeb
255
264
  ? { paddingBottom: "calc(10px + env(safe-area-inset-bottom, 0px))" }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Mounts every Forms/ContextualSaveBar/UnsavedChangesDialog story and asserts
3
+ * what it exists to show — chiefly the copy pluralisation and that the safe
4
+ * choice, not the destructive one, is what a dismissal resolves to.
5
+ *
6
+ * Only one open dialog per test: Dialog.Portal mounts to the document body, so
7
+ * two open at once make every text query ambiguous.
8
+ */
9
+ import { cleanup, fireEvent, screen } from "@testing-library/react";
10
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
11
+ import type { ReactElement } from "react";
12
+ import { afterEach, describe, expect, it } from "vitest";
13
+
14
+ import * as storiesModule from "./UnsavedChangesDialog.stories";
15
+
16
+ afterEach(cleanup);
17
+
18
+ const meta = storiesModule.default;
19
+ const { Basic, SingleField, ManyFields, Closed, Interactive } = storiesModule;
20
+
21
+ type StoryLike = { render?: (args: Record<string, unknown>) => ReactElement };
22
+
23
+ function mount(story: StoryLike) {
24
+ if (!story.render) throw new Error("story has no render");
25
+ return renderWithProviders(story.render({ ...(meta.args as Record<string, unknown>) }));
26
+ }
27
+
28
+ describe("Forms/ContextualSaveBar/UnsavedChangesDialog stories", () => {
29
+ it("nests under ContextualSaveBar so the gallery keeps it with the bar that raises it", () => {
30
+ expect(meta.title).toBe("Forms/ContextualSaveBar/UnsavedChangesDialog");
31
+ });
32
+
33
+ it("Basic opens an alertdialog with both choices", () => {
34
+ mount(Basic as StoryLike);
35
+ expect(screen.getByText("Discard unsaved changes?")).toBeTruthy();
36
+ expect(screen.getByText("Keep editing")).toBeTruthy();
37
+ expect(screen.getByText("Discard changes")).toBeTruthy();
38
+ expect(document.querySelector("[role='alertdialog']")).toBeTruthy();
39
+ });
40
+
41
+ it("SingleField uses the singular sentence", () => {
42
+ mount(SingleField as StoryLike);
43
+ expect(
44
+ screen.getByText("1 field on this page has edits that aren't saved. Leaving discards them."),
45
+ ).toBeTruthy();
46
+ });
47
+
48
+ it("ManyFields uses the plural sentence with the count interpolated", () => {
49
+ mount(ManyFields as StoryLike);
50
+ expect(
51
+ screen.getByText(
52
+ "14 fields on this page have edits that aren't saved. Leaving discards them.",
53
+ ),
54
+ ).toBeTruthy();
55
+ });
56
+
57
+ it("Closed paints no dialog at all", () => {
58
+ const { getByText } = mount(Closed as StoryLike);
59
+ expect(getByText("Nothing should paint below this line.")).toBeTruthy();
60
+ expect(document.querySelector("[role='alertdialog']")).toBeNull();
61
+ expect(screen.queryByText("Discard unsaved changes?")).toBeNull();
62
+ });
63
+
64
+ it("Interactive opens on the trigger and closes on Keep editing", () => {
65
+ const { getByText } = mount(Interactive as StoryLike);
66
+ expect(screen.queryByText("Discard unsaved changes?")).toBeNull();
67
+ fireEvent.click(getByText("Leave the page"));
68
+ expect(screen.getByText("Discard unsaved changes?")).toBeTruthy();
69
+ fireEvent.click(screen.getByText("Keep editing"));
70
+ expect(getByText("last outcome: kept editing")).toBeTruthy();
71
+ });
72
+
73
+ it("Interactive records a discard as a distinct outcome from keeping", () => {
74
+ const { getByText } = mount(Interactive as StoryLike);
75
+ fireEvent.click(getByText("Leave the page"));
76
+ fireEvent.click(screen.getByText("Discard changes"));
77
+ expect(getByText("last outcome: discarded")).toBeTruthy();
78
+ });
79
+ });
@@ -138,7 +138,9 @@ describe("DescriptionList", () => {
138
138
  });
139
139
  const root = list(result.container);
140
140
  expect(root?.getAttribute("data-stacked")).toBe("false");
141
- expect(root?.style.gridTemplateColumns).toContain("min(max-content, 24ch)");
141
+ expect(root?.getAttribute("data-label-column-width")).toBe("min(max-content, 24ch)");
142
+ expect(root?.style.gridTemplateColumns).toContain("fit-content(24ch)");
143
+ expect(root?.style.gridTemplateColumns).toContain("minmax(0, 1fr)");
142
144
  });
143
145
 
144
146
  it("the optional Change action is a keyboard-reachable button", () => {
@@ -251,4 +253,20 @@ describe("DescriptionList", () => {
251
253
  );
252
254
  expect(list(result.container)?.getAttribute("data-compact")).toBe("true");
253
255
  });
256
+
257
+ it("side rows share the list stacked flag (native host measures via onLayout)", () => {
258
+ stubContainerWidth(280);
259
+ let result!: ReturnType<typeof renderWithProviders>;
260
+ act(() => {
261
+ result = renderWithProviders(
262
+ <DescriptionList
263
+ placement="side"
264
+ items={[{ term: "Hostname", field: "input", value: "compose01" }]}
265
+ />,
266
+ );
267
+ });
268
+ const root = list(result.container);
269
+ expect(root?.getAttribute("data-stacked")).toBe("true");
270
+ expect(root?.querySelectorAll("[data-mpo-description-list-row]").length).toBe(1);
271
+ });
254
272
  });
@@ -7,7 +7,7 @@ import { DescriptionList, type DescriptionListItem } from "./index";
7
7
  const meta: Meta<typeof DescriptionList> = {
8
8
  title: "Forms/DescriptionList",
9
9
  component: DescriptionList,
10
- parameters: { status: { type: "beta" } },
10
+ parameters: { status: { type: "stable" } },
11
11
  argTypes: {
12
12
  placement: { control: "radio", options: ["side", "top"] },
13
13
  compact: { control: "boolean" },
@@ -67,6 +67,10 @@ const HOST: DescriptionListItem[] = [
67
67
  { term: "Decommissioned", field: "input", value: null },
68
68
  ];
69
69
 
70
+ export const Default: Story = {
71
+ render: (args) => <DescriptionList {...args} items={HOST} />,
72
+ };
73
+
70
74
  export const Anatomy: Story = {
71
75
  name: "Anatomy — term · value · Change",
72
76
  render: (args) => <DescriptionList {...args} items={HOST} />,