@multiplatform.one/forms 7.77.1 → 7.77.2

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 (618) hide show
  1. package/dist/cjs/AdaptivePopup/index.native.js +2 -2
  2. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  3. package/dist/cjs/Button/IconButtonGroup.cjs +45 -18
  4. package/dist/cjs/Button/IconButtonGroup.native.js +51 -20
  5. package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
  6. package/dist/cjs/Button/circleGlyph.cjs +12 -2
  7. package/dist/cjs/Button/circleGlyph.native.js +12 -1
  8. package/dist/cjs/Button/circleGlyph.native.js.map +1 -1
  9. package/dist/cjs/Button/iconButtonGroupContext.cjs +7 -1
  10. package/dist/cjs/Button/iconButtonGroupContext.native.js +7 -1
  11. package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
  12. package/dist/cjs/Button/index.cjs +3 -11
  13. package/dist/cjs/Button/index.native.js +5 -14
  14. package/dist/cjs/Button/index.native.js.map +1 -1
  15. package/dist/cjs/Button/mediaPlate.native.js.map +1 -1
  16. package/dist/cjs/Button/webGlass.native.js.map +1 -1
  17. package/dist/cjs/Chip/index.native.js.map +1 -1
  18. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  19. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  20. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  21. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  22. package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
  23. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  24. package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  25. package/dist/cjs/ControlGroup/index.native.js +1 -1
  26. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  27. package/dist/cjs/DescriptionList/index.native.js +2 -2
  28. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  29. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  30. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  31. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  32. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  33. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  34. package/dist/cjs/FieldGroup.native.js.map +1 -1
  35. package/dist/cjs/FloatingPanel/PanelHeader.native.js.map +1 -1
  36. package/dist/cjs/FloatingPanel/RegularPanel.native.js.map +1 -1
  37. package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
  38. package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -1
  39. package/dist/cjs/FloatingPanel/coverRect.cjs +50 -0
  40. package/dist/cjs/FloatingPanel/coverRect.native.js +54 -0
  41. package/dist/cjs/FloatingPanel/coverRect.native.js.map +1 -0
  42. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -1
  43. package/dist/cjs/FloatingPanel/iconEcho.cjs +3 -1
  44. package/dist/cjs/FloatingPanel/iconEcho.native.js +3 -1
  45. package/dist/cjs/FloatingPanel/iconEcho.native.js.map +1 -1
  46. package/dist/cjs/FloatingPanel/index.cjs +23 -13
  47. package/dist/cjs/FloatingPanel/index.native.js +41 -15
  48. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  49. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
  50. package/dist/cjs/FloatingPanel/paintedBox.native.js.map +1 -1
  51. package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -1
  52. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  53. package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -1
  54. package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
  55. package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
  56. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  57. package/dist/cjs/Form/index.native.js +1 -1
  58. package/dist/cjs/Form/index.native.js.map +1 -1
  59. package/dist/cjs/Form/submissionController.native.js.map +1 -1
  60. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  61. package/dist/cjs/FormGrid.native.js.map +1 -1
  62. package/dist/cjs/FormSection.native.js.map +1 -1
  63. package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
  64. package/dist/cjs/InputParts/index.cjs +5 -0
  65. package/dist/cjs/InputParts/index.native.js +7 -0
  66. package/dist/cjs/InputParts/index.native.js.map +1 -1
  67. package/dist/cjs/InputParts/keyboardAppearance.cjs +30 -0
  68. package/dist/cjs/InputParts/keyboardAppearance.native.js +33 -0
  69. package/dist/cjs/InputParts/keyboardAppearance.native.js.map +1 -0
  70. package/dist/cjs/Label/index.native.js.map +1 -1
  71. package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
  72. package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
  73. package/dist/cjs/MediaPicker/types.native.js.map +1 -1
  74. package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
  75. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  76. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  77. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  78. package/dist/cjs/Table/index.native.js.map +1 -1
  79. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  80. package/dist/cjs/Wheel/index.native.js.map +1 -1
  81. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  82. package/dist/cjs/actionLabel.native.js.map +1 -1
  83. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  84. package/dist/cjs/fieldLayout.native.js +1 -1
  85. package/dist/cjs/fieldLayout.native.js.map +1 -1
  86. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  87. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
  88. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  89. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  90. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  91. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  92. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  93. package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
  94. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  95. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  96. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  97. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  98. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
  99. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  100. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  101. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  102. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  103. package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
  104. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  105. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  106. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  107. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  108. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  109. package/dist/cjs/fields/Combobox/index.native.js +5 -5
  110. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  111. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  112. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  113. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  114. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +3 -3
  115. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  116. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
  117. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  118. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  119. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  120. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  121. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -2
  122. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  123. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  124. package/dist/cjs/fields/DatePicker/index.native.js +2 -2
  125. package/dist/cjs/fields/DatePicker/parts.native.js +2 -2
  126. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  127. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  128. package/dist/cjs/fields/Duration/DurationWheel.cjs +34 -0
  129. package/dist/cjs/fields/Duration/DurationWheel.native.js +132 -0
  130. package/dist/cjs/fields/Duration/DurationWheel.native.js.map +1 -0
  131. package/dist/cjs/fields/Duration/durationMath.cjs +19 -1
  132. package/dist/cjs/fields/Duration/durationMath.native.js +19 -1
  133. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  134. package/dist/cjs/fields/Duration/durationWheelTypes.cjs +18 -0
  135. package/dist/cjs/fields/Duration/durationWheelTypes.native.js +21 -0
  136. package/dist/cjs/fields/Duration/durationWheelTypes.native.js.map +1 -0
  137. package/dist/cjs/fields/Duration/index.cjs +30 -10
  138. package/dist/cjs/fields/Duration/index.native.js +34 -14
  139. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  140. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  141. package/dist/cjs/fields/FileUpload/index.native.js +2 -2
  142. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  143. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  144. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  145. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  146. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
  147. package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
  148. package/dist/cjs/fields/Geolocation/index.native.js +5 -5
  149. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  150. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  151. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  152. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  153. package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  154. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  155. package/dist/cjs/fields/Icon/index.native.js +3 -3
  156. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  157. package/dist/cjs/fields/ImageField/index.native.js +2 -2
  158. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  159. package/dist/cjs/fields/Input/index.native.js +3 -3
  160. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  161. package/dist/cjs/fields/MentionInput/index.native.js +3 -3
  162. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  163. package/dist/cjs/fields/OTPInput/index.native.js +3 -3
  164. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  165. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  166. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  167. package/dist/cjs/fields/PhoneInput/index.native.js +3 -3
  168. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  169. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  170. package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
  171. package/dist/cjs/fields/Progress/index.native.js +1 -1
  172. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  173. package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
  174. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  175. package/dist/cjs/fields/Rating/index.native.js +1 -1
  176. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  177. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  178. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  179. package/dist/cjs/fields/SearchInput/index.native.js +2 -2
  180. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  181. package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
  182. package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -1
  183. package/dist/cjs/fields/Select/index.native.js +4 -4
  184. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  185. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  186. package/dist/cjs/fields/Signature/index.native.js +2 -2
  187. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  188. package/dist/cjs/fields/Slider/index.native.js +1 -1
  189. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  190. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  191. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  192. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  193. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  194. package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
  195. package/dist/cjs/fields/Switch/index.native.js +2 -2
  196. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  197. package/dist/cjs/fields/TextArea/index.native.js +2 -2
  198. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  199. package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
  200. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  201. package/dist/cjs/fields/TimePicker/index.native.js +2 -2
  202. package/dist/cjs/fields/TimePicker/parts.native.js +1 -1
  203. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  204. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  205. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +2 -2
  206. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  207. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
  208. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  209. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +8 -7
  210. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +9 -8
  211. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  212. package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  213. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.cjs +1 -1
  214. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js +1 -1
  215. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  216. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.cjs +1 -1
  217. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js +1 -1
  218. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  219. package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
  220. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  221. package/dist/cjs/formSpacing.native.js.map +1 -1
  222. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  223. package/dist/cjs/index.native.js +45 -45
  224. package/dist/cjs/index.native.js.map +1 -1
  225. package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
  226. package/dist/cjs/keyboard/chain.native.js.map +1 -1
  227. package/dist/cjs/keyboard/index.native.js.map +1 -1
  228. package/dist/cjs/keyboard/types.native.js.map +1 -1
  229. package/dist/cjs/requiredMarking.native.js.map +1 -1
  230. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  231. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  232. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  233. package/dist/cjs/shared/choiceRowPress.native.js.map +1 -1
  234. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  235. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  236. package/dist/cjs/shared/fieldRowContext.native.js.map +1 -1
  237. package/dist/cjs/shared/floatingList.native.js +1 -1
  238. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  239. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  240. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  241. package/dist/cjs/shared/i18n.native.js.map +1 -1
  242. package/dist/cjs/shared/instantMotion.native.js.map +1 -1
  243. package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
  244. package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
  245. package/dist/cjs/shared/overlaySizeClass.native.js.map +1 -1
  246. package/dist/cjs/shared/overlayStack.native.js.map +1 -1
  247. package/dist/cjs/shared/panelPortal.native.js.map +1 -1
  248. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
  249. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
  250. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  251. package/dist/cjs/shared/sheetNavigation.native.js.map +1 -1
  252. package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -1
  253. package/dist/cjs/shared/systemControls.native.js.map +1 -1
  254. package/dist/cjs/shared/t.native.js.map +1 -1
  255. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  256. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  257. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  258. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  259. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  260. package/dist/cjs/shared/utils.native.js +1 -1
  261. package/dist/cjs/shared/utils.native.js.map +1 -1
  262. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  263. package/dist/cjs/standardActions.native.js.map +1 -1
  264. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  265. package/dist/cjs/types.native.js.map +1 -1
  266. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  267. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  268. package/dist/esm/Button/IconButtonGroup.mjs +47 -20
  269. package/dist/esm/Button/IconButtonGroup.mjs.map +1 -1
  270. package/dist/esm/Button/IconButtonGroup.native.js +53 -22
  271. package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
  272. package/dist/esm/Button/circleGlyph.mjs +9 -1
  273. package/dist/esm/Button/circleGlyph.mjs.map +1 -1
  274. package/dist/esm/Button/circleGlyph.native.js +10 -1
  275. package/dist/esm/Button/circleGlyph.native.js.map +1 -1
  276. package/dist/esm/Button/iconButtonGroupContext.mjs +5 -1
  277. package/dist/esm/Button/iconButtonGroupContext.mjs.map +1 -1
  278. package/dist/esm/Button/iconButtonGroupContext.native.js +5 -1
  279. package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
  280. package/dist/esm/Button/index.mjs +1 -9
  281. package/dist/esm/Button/index.mjs.map +1 -1
  282. package/dist/esm/Button/index.native.js +1 -10
  283. package/dist/esm/Button/index.native.js.map +1 -1
  284. package/dist/esm/Button/mediaPlate.native.js.map +1 -1
  285. package/dist/esm/Button/webGlass.native.js.map +1 -1
  286. package/dist/esm/Chip/index.native.js.map +1 -1
  287. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  288. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  289. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  290. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  291. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  292. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  293. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  294. package/dist/esm/ErrorSummary.native.js.map +1 -1
  295. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  296. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  297. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  298. package/dist/esm/FieldGroup.native.js.map +1 -1
  299. package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -1
  300. package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -1
  301. package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
  302. package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
  303. package/dist/esm/FloatingPanel/coverRect.mjs +23 -0
  304. package/dist/esm/FloatingPanel/coverRect.mjs.map +1 -0
  305. package/dist/esm/FloatingPanel/coverRect.native.js +24 -0
  306. package/dist/esm/FloatingPanel/coverRect.native.js.map +1 -0
  307. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
  308. package/dist/esm/FloatingPanel/iconEcho.mjs +4 -2
  309. package/dist/esm/FloatingPanel/iconEcho.mjs.map +1 -1
  310. package/dist/esm/FloatingPanel/iconEcho.native.js +4 -2
  311. package/dist/esm/FloatingPanel/iconEcho.native.js.map +1 -1
  312. package/dist/esm/FloatingPanel/index.mjs +23 -13
  313. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  314. package/dist/esm/FloatingPanel/index.native.js +41 -15
  315. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  316. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
  317. package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -1
  318. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -1
  319. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  320. package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -1
  321. package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
  322. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  323. package/dist/esm/Form/index.native.js.map +1 -1
  324. package/dist/esm/Form/submissionController.native.js.map +1 -1
  325. package/dist/esm/Form/validateOn.native.js.map +1 -1
  326. package/dist/esm/FormGrid.native.js.map +1 -1
  327. package/dist/esm/FormSection.native.js.map +1 -1
  328. package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -1
  329. package/dist/esm/InputParts/index.mjs +6 -1
  330. package/dist/esm/InputParts/index.mjs.map +1 -1
  331. package/dist/esm/InputParts/index.native.js +8 -1
  332. package/dist/esm/InputParts/index.native.js.map +1 -1
  333. package/dist/esm/InputParts/keyboardAppearance.mjs +5 -0
  334. package/dist/esm/InputParts/keyboardAppearance.mjs.map +1 -0
  335. package/dist/esm/InputParts/keyboardAppearance.native.js +5 -0
  336. package/dist/esm/InputParts/keyboardAppearance.native.js.map +1 -0
  337. package/dist/esm/Label/index.native.js.map +1 -1
  338. package/dist/esm/MediaPicker/base64.native.js.map +1 -1
  339. package/dist/esm/MediaPicker/payload.native.js.map +1 -1
  340. package/dist/esm/MediaPicker/types.native.js.map +1 -1
  341. package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
  342. package/dist/esm/Skeleton/index.native.js.map +1 -1
  343. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  344. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  345. package/dist/esm/Table/index.native.js.map +1 -1
  346. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  347. package/dist/esm/Wheel/index.native.js.map +1 -1
  348. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  349. package/dist/esm/actionLabel.native.js.map +1 -1
  350. package/dist/esm/fieldDefaults.native.js.map +1 -1
  351. package/dist/esm/fieldLayout.native.js.map +1 -1
  352. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  353. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  354. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  355. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  356. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  357. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  358. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  359. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  360. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  361. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  362. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  363. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  364. package/dist/esm/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  365. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  366. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  367. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  368. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  369. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  370. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  371. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  372. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  373. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  374. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  375. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  376. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  377. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  378. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  379. package/dist/esm/fields/Duration/DurationWheel.mjs +8 -0
  380. package/dist/esm/fields/Duration/DurationWheel.mjs.map +1 -0
  381. package/dist/esm/fields/Duration/DurationWheel.native.js +103 -0
  382. package/dist/esm/fields/Duration/DurationWheel.native.js.map +1 -0
  383. package/dist/esm/fields/Duration/durationMath.mjs +16 -1
  384. package/dist/esm/fields/Duration/durationMath.mjs.map +1 -1
  385. package/dist/esm/fields/Duration/durationMath.native.js +16 -1
  386. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  387. package/dist/esm/fields/Duration/durationWheelTypes.mjs +2 -0
  388. package/dist/esm/fields/Duration/durationWheelTypes.mjs.map +1 -0
  389. package/dist/esm/fields/Duration/durationWheelTypes.native.js +2 -0
  390. package/dist/esm/fields/Duration/durationWheelTypes.native.js.map +1 -0
  391. package/dist/esm/fields/Duration/index.mjs +28 -11
  392. package/dist/esm/fields/Duration/index.mjs.map +1 -1
  393. package/dist/esm/fields/Duration/index.native.js +30 -13
  394. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  395. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  396. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  397. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  398. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  399. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  400. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
  401. package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
  402. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  403. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  404. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  405. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  406. package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  407. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  408. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  409. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  410. package/dist/esm/fields/Input/index.native.js.map +1 -1
  411. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  412. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  413. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  414. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  415. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  416. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  417. package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
  418. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  419. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  420. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  421. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  422. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  423. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  424. package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
  425. package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
  426. package/dist/esm/fields/Select/index.native.js.map +1 -1
  427. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  428. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  429. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  430. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  431. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  432. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  433. package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
  434. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  435. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  436. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  437. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  438. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  439. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  440. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  441. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +8 -7
  442. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  443. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +8 -7
  444. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  445. package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  446. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs +1 -1
  447. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -1
  448. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js +1 -1
  449. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  450. package/dist/esm/fields/nativeDateTime/sheetKeyboard.mjs +1 -1
  451. package/dist/esm/fields/nativeDateTime/sheetKeyboard.mjs.map +1 -1
  452. package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js +1 -1
  453. package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  454. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  455. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  456. package/dist/esm/formSpacing.native.js.map +1 -1
  457. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  458. package/dist/esm/index.native.js.map +1 -1
  459. package/dist/esm/keyboard/chain.native.js.map +1 -1
  460. package/dist/esm/keyboard/index.native.js.map +1 -1
  461. package/dist/esm/keyboard/types.native.js.map +1 -1
  462. package/dist/esm/requiredMarking.native.js.map +1 -1
  463. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  464. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  465. package/dist/esm/shared/choiceRowPress.native.js.map +1 -1
  466. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  467. package/dist/esm/shared/devWarn.native.js.map +1 -1
  468. package/dist/esm/shared/fieldRowContext.native.js.map +1 -1
  469. package/dist/esm/shared/floatingList.native.js.map +1 -1
  470. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  471. package/dist/esm/shared/groupContext.native.js.map +1 -1
  472. package/dist/esm/shared/i18n.native.js.map +1 -1
  473. package/dist/esm/shared/instantMotion.native.js.map +1 -1
  474. package/dist/esm/shared/nativeA11y.native.js.map +1 -1
  475. package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
  476. package/dist/esm/shared/overlaySizeClass.native.js.map +1 -1
  477. package/dist/esm/shared/overlayStack.native.js.map +1 -1
  478. package/dist/esm/shared/panelPortal.native.js.map +1 -1
  479. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  480. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  481. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  482. package/dist/esm/shared/sheetNavigation.native.js.map +1 -1
  483. package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
  484. package/dist/esm/shared/systemControls.native.js.map +1 -1
  485. package/dist/esm/shared/t.native.js.map +1 -1
  486. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  487. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  488. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  489. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  490. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  491. package/dist/esm/shared/utils.native.js.map +1 -1
  492. package/dist/esm/shared/zIndex.native.js.map +1 -1
  493. package/dist/esm/standardActions.native.js.map +1 -1
  494. package/dist/esm/themedPrimitives.native.js.map +1 -1
  495. package/dist/esm/types.native.js.map +1 -1
  496. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  497. package/dist/jsx/Button/IconButtonGroup.mjs +47 -20
  498. package/dist/jsx/Button/IconButtonGroup.mjs.map +1 -1
  499. package/dist/jsx/Button/IconButtonGroup.native.js +51 -20
  500. package/dist/jsx/Button/IconButtonGroup.native.js.map +1 -1
  501. package/dist/jsx/Button/circleGlyph.mjs +9 -1
  502. package/dist/jsx/Button/circleGlyph.mjs.map +1 -1
  503. package/dist/jsx/Button/circleGlyph.native.js +12 -1
  504. package/dist/jsx/Button/circleGlyph.native.js.map +1 -1
  505. package/dist/jsx/Button/iconButtonGroupContext.mjs +5 -1
  506. package/dist/jsx/Button/iconButtonGroupContext.mjs.map +1 -1
  507. package/dist/jsx/Button/iconButtonGroupContext.native.js +7 -1
  508. package/dist/jsx/Button/iconButtonGroupContext.native.js.map +1 -1
  509. package/dist/jsx/Button/index.mjs +1 -9
  510. package/dist/jsx/Button/index.mjs.map +1 -1
  511. package/dist/jsx/Button/index.native.js +3 -12
  512. package/dist/jsx/Button/index.native.js.map +1 -1
  513. package/dist/jsx/FloatingPanel/coverRect.mjs +23 -0
  514. package/dist/jsx/FloatingPanel/coverRect.mjs.map +1 -0
  515. package/dist/jsx/FloatingPanel/coverRect.native.js +54 -0
  516. package/dist/jsx/FloatingPanel/coverRect.native.js.map +1 -0
  517. package/dist/jsx/FloatingPanel/iconEcho.mjs +4 -2
  518. package/dist/jsx/FloatingPanel/iconEcho.mjs.map +1 -1
  519. package/dist/jsx/FloatingPanel/iconEcho.native.js +3 -1
  520. package/dist/jsx/FloatingPanel/iconEcho.native.js.map +1 -1
  521. package/dist/jsx/FloatingPanel/index.mjs +23 -13
  522. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  523. package/dist/jsx/FloatingPanel/index.native.js +41 -15
  524. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  525. package/dist/jsx/InputParts/index.mjs +6 -1
  526. package/dist/jsx/InputParts/index.mjs.map +1 -1
  527. package/dist/jsx/InputParts/index.native.js +7 -0
  528. package/dist/jsx/InputParts/index.native.js.map +1 -1
  529. package/dist/jsx/InputParts/keyboardAppearance.mjs +5 -0
  530. package/dist/jsx/InputParts/keyboardAppearance.mjs.map +1 -0
  531. package/dist/jsx/InputParts/keyboardAppearance.native.js +33 -0
  532. package/dist/jsx/InputParts/keyboardAppearance.native.js.map +1 -0
  533. package/dist/jsx/fields/Duration/DurationWheel.mjs +8 -0
  534. package/dist/jsx/fields/Duration/DurationWheel.mjs.map +1 -0
  535. package/dist/jsx/fields/Duration/DurationWheel.native.js +132 -0
  536. package/dist/jsx/fields/Duration/DurationWheel.native.js.map +1 -0
  537. package/dist/jsx/fields/Duration/durationMath.mjs +16 -1
  538. package/dist/jsx/fields/Duration/durationMath.mjs.map +1 -1
  539. package/dist/jsx/fields/Duration/durationMath.native.js +19 -1
  540. package/dist/jsx/fields/Duration/durationMath.native.js.map +1 -1
  541. package/dist/jsx/fields/Duration/durationWheelTypes.mjs +2 -0
  542. package/dist/jsx/fields/Duration/durationWheelTypes.mjs.map +1 -0
  543. package/dist/jsx/fields/Duration/durationWheelTypes.native.js +21 -0
  544. package/dist/jsx/fields/Duration/durationWheelTypes.native.js.map +1 -0
  545. package/dist/jsx/fields/Duration/index.mjs +28 -11
  546. package/dist/jsx/fields/Duration/index.mjs.map +1 -1
  547. package/dist/jsx/fields/Duration/index.native.js +32 -12
  548. package/dist/jsx/fields/Duration/index.native.js.map +1 -1
  549. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +8 -7
  550. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  551. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +8 -7
  552. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  553. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs +1 -1
  554. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -1
  555. package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js +1 -1
  556. package/dist/jsx/fields/nativeDateTime/sheetKeyboard.mjs +1 -1
  557. package/dist/jsx/fields/nativeDateTime/sheetKeyboard.mjs.map +1 -1
  558. package/dist/jsx/fields/nativeDateTime/sheetKeyboard.native.js +1 -1
  559. package/dist/jsx/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  560. package/package.json +8 -8
  561. package/src/Button/IconButtonGroup.spec.tsx +20 -0
  562. package/src/Button/IconButtonGroup.tsx +60 -25
  563. package/src/Button/circleGlyph.ts +18 -0
  564. package/src/Button/iconButtonGroupContext.ts +25 -0
  565. package/src/Button/index.tsx +2 -20
  566. package/src/FloatingPanel/FloatingPanel.iconEcho.spec.tsx +61 -1
  567. package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +104 -0
  568. package/src/FloatingPanel/coverRect.ts +42 -0
  569. package/src/FloatingPanel/iconEcho.tsx +9 -3
  570. package/src/FloatingPanel/index.native.tsx +63 -18
  571. package/src/FloatingPanel/index.tsx +35 -15
  572. package/src/InputParts/index.tsx +6 -0
  573. package/src/InputParts/keyboardAppearance.spec.ts +12 -0
  574. package/src/InputParts/keyboardAppearance.ts +4 -0
  575. package/src/fields/Duration/Duration.spec.tsx +19 -10
  576. package/src/fields/Duration/Duration.wheel.native.spec.tsx +98 -0
  577. package/src/fields/Duration/DurationWheel.native.tsx +101 -0
  578. package/src/fields/Duration/DurationWheel.tsx +11 -0
  579. package/src/fields/Duration/durationMath.spec.ts +43 -0
  580. package/src/fields/Duration/durationMath.ts +31 -0
  581. package/src/fields/Duration/durationWheelTypes.ts +18 -0
  582. package/src/fields/Duration/index.tsx +58 -27
  583. package/src/fields/nativeDateTime/OsDateTimeSheet.countdown.native.spec.tsx +121 -0
  584. package/src/fields/nativeDateTime/OsDateTimeSheet.spec.ts +4 -0
  585. package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +14 -9
  586. package/src/fields/nativeDateTime/osDateTimeIosDisplay.ts +3 -3
  587. package/src/fields/nativeDateTime/sheetKeyboard.spec.ts +6 -0
  588. package/src/fields/nativeDateTime/sheetKeyboard.ts +2 -2
  589. package/types/Button/IconButtonGroup.d.ts.map +1 -1
  590. package/types/Button/circleGlyph.d.ts +12 -0
  591. package/types/Button/circleGlyph.d.ts.map +1 -1
  592. package/types/Button/iconButtonGroupContext.d.ts +19 -0
  593. package/types/Button/iconButtonGroupContext.d.ts.map +1 -1
  594. package/types/Button/index.d.ts +2 -9
  595. package/types/Button/index.d.ts.map +1 -1
  596. package/types/FloatingPanel/coverRect.d.ts +25 -0
  597. package/types/FloatingPanel/coverRect.d.ts.map +1 -0
  598. package/types/FloatingPanel/index.d.ts.map +1 -1
  599. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  600. package/types/InputParts/index.d.ts.map +1 -1
  601. package/types/InputParts/keyboardAppearance.d.ts +3 -0
  602. package/types/InputParts/keyboardAppearance.d.ts.map +1 -0
  603. package/types/fields/Duration/DurationWheel.d.ts +5 -0
  604. package/types/fields/Duration/DurationWheel.d.ts.map +1 -0
  605. package/types/fields/Duration/DurationWheel.native.d.ts +5 -0
  606. package/types/fields/Duration/DurationWheel.native.d.ts.map +1 -0
  607. package/types/fields/Duration/durationMath.d.ts +13 -0
  608. package/types/fields/Duration/durationMath.d.ts.map +1 -1
  609. package/types/fields/Duration/durationWheelTypes.d.ts +18 -0
  610. package/types/fields/Duration/durationWheelTypes.d.ts.map +1 -0
  611. package/types/fields/Duration/index.d.ts +8 -3
  612. package/types/fields/Duration/index.d.ts.map +1 -1
  613. package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts +1 -1
  614. package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts.map +1 -1
  615. package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts +2 -2
  616. package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts.map +1 -1
  617. package/types/fields/nativeDateTime/sheetKeyboard.d.ts +1 -1
  618. package/types/fields/nativeDateTime/sheetKeyboard.d.ts.map +1 -1
@@ -1,10 +1,15 @@
1
1
  import { radiusClassProps, useBarSurface } from "@multiplatform.one/theme";
2
- import { useCallback, useState, type ReactNode } from "react";
2
+ import { useCallback, useMemo, useRef, useState, type ReactNode } from "react";
3
3
  import { isWeb, Theme, View, XStack, type XStackProps } from "tamagui";
4
4
  import { loadGlassView } from "./glass";
5
5
  import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
6
6
  import { isAppleTouchWeb, WebGlassFace } from "./webGlass";
7
- import { IconButtonGroupContext, IconButtonGroupRegistry } from "./iconButtonGroupContext";
7
+ import {
8
+ IconButtonGroupContext,
9
+ IconButtonGroupRegistry,
10
+ IconButtonGroupSurfaceContext,
11
+ type IconButtonGroupSurface,
12
+ } from "./iconButtonGroupContext";
8
13
 
9
14
  /**
10
15
  * LC-176: how far apart two Liquid Glass circles may sit and still merge. Half
@@ -12,6 +17,12 @@ import { IconButtonGroupContext, IconButtonGroupRegistry } from "./iconButtonGro
12
17
  */
13
18
  export const ICON_BUTTON_GLASS_MERGE_PX = 22;
14
19
 
20
+ type MeasurableView = {
21
+ measureInWindow?: (
22
+ callback: (x: number, y: number, width: number, height: number) => void,
23
+ ) => void;
24
+ };
25
+
15
26
  export interface IconButtonGroupProps extends XStackProps {
16
27
  /** Over imagery or video: the group shares one material capsule. */
17
28
  plate?: "media";
@@ -35,6 +46,22 @@ export function IconButtonGroup({ plate, children, ...rest }: IconButtonGroupPro
35
46
  setMembers((count) => count + 1);
36
47
  return () => setMembers((count) => count - 1);
37
48
  }, []);
49
+ const capsuleRef = useRef<MeasurableView | null>(null);
50
+ const surface = useMemo<IconButtonGroupSurface>(
51
+ () => ({
52
+ measure(callback) {
53
+ const node = capsuleRef.current;
54
+ if (typeof node?.measureInWindow !== "function") {
55
+ callback(null);
56
+ return;
57
+ }
58
+ node.measureInWindow((x, y, width, height) =>
59
+ callback(width > 0 && height > 0 ? { x, y, width, height, radius: height / 2 } : null),
60
+ );
61
+ },
62
+ }),
63
+ [],
64
+ );
38
65
  if (plate === "media") {
39
66
  return (
40
67
  <IconButtonGroupContext.Provider value="media">
@@ -95,11 +122,15 @@ export function IconButtonGroup({ plate, children, ...rest }: IconButtonGroupPro
95
122
  );
96
123
  }
97
124
  const GlassView = bar ? loadGlassView() : null;
125
+ const capsule = GlassView != null && members > 0;
126
+ // The capsule hugs its buttons with the web twin's $2 end inset and $1 gap,
127
+ // so its first and last items never sit on its curve (FZ-8550).
98
128
  const row = (
99
129
  <XStack
100
130
  alignItems="center"
101
- data-mp-icon-button-group={GlassView && members > 0 ? "glass" : bar ? "bar" : "row"}
131
+ data-mp-icon-button-group={capsule ? "glass" : bar ? "bar" : "row"}
102
132
  {...rest}
133
+ {...(capsule ? { paddingHorizontal: "$2" as const, gap: "$1" as const } : null)}
103
134
  >
104
135
  {children}
105
136
  </XStack>
@@ -108,28 +139,32 @@ export function IconButtonGroup({ plate, children, ...rest }: IconButtonGroupPro
108
139
  return (
109
140
  <IconButtonGroupRegistry.Provider value={register}>
110
141
  <IconButtonGroupContext.Provider value="glass">
111
- <View
112
- position="relative"
113
- flexShrink={1}
114
- minWidth={0}
115
- onLayout={(event) => setCapsuleHeight(event.nativeEvent.layout.height)}
116
- >
117
- {members > 0 ? (
118
- <GlassView
119
- glassEffectStyle="regular"
120
- pointerEvents="none"
121
- style={{
122
- position: "absolute",
123
- top: 0,
124
- right: 0,
125
- bottom: 0,
126
- left: 0,
127
- borderRadius: capsuleHeight / 2,
128
- }}
129
- />
130
- ) : null}
131
- {row}
132
- </View>
142
+ <IconButtonGroupSurfaceContext.Provider value={members > 0 ? surface : null}>
143
+ <View
144
+ ref={capsuleRef as never}
145
+ collapsable={false}
146
+ position="relative"
147
+ flexShrink={1}
148
+ minWidth={0}
149
+ onLayout={(event) => setCapsuleHeight(event.nativeEvent.layout.height)}
150
+ >
151
+ {members > 0 ? (
152
+ <GlassView
153
+ glassEffectStyle="regular"
154
+ pointerEvents="none"
155
+ style={{
156
+ position: "absolute",
157
+ top: 0,
158
+ right: 0,
159
+ bottom: 0,
160
+ left: 0,
161
+ borderRadius: capsuleHeight / 2,
162
+ }}
163
+ />
164
+ ) : null}
165
+ {row}
166
+ </View>
167
+ </IconButtonGroupSurfaceContext.Provider>
133
168
  </IconButtonGroupContext.Provider>
134
169
  </IconButtonGroupRegistry.Provider>
135
170
  );
@@ -4,3 +4,21 @@
4
4
  * ratio, never a small glyph lost in a big plate.
5
5
  */
6
6
  export const ICON_BUTTON_CIRCLE_GLYPH_RATIO = 0.58;
7
+
8
+ /**
9
+ * LC-176: Phosphor bold's stem is 0.12 of its ink, an SF Symbols bold plus's
10
+ * 0.18 (measured at 17 and 24pt). An outline stroke this wide, in the 256-unit
11
+ * grid, brings a bold glyph to SF semibold-bold (0.154); a wider one closes
12
+ * Phosphor bold's 16-unit counters (the trash lid, copy's overlap).
13
+ */
14
+ export const GLYPH_BOLD_STROKE_UNITS = 8;
15
+
16
+ export function boldStroke(weight: "regular" | "bold", color = "currentColor") {
17
+ return weight === "bold"
18
+ ? {
19
+ stroke: color,
20
+ strokeWidth: GLYPH_BOLD_STROKE_UNITS,
21
+ strokeLinejoin: "round" as const,
22
+ }
23
+ : undefined;
24
+ }
@@ -30,3 +30,28 @@ export function useIconButtonGroupMember(iconOnly: boolean): void {
30
30
  [iconOnly, register],
31
31
  );
32
32
  }
33
+
34
+ /**
35
+ * The window frame and corner radius of the plate an `IconButtonGroup` paints
36
+ * (a native Liquid Glass capsule). Native has no DOM to walk, so a panel
37
+ * opening from a grouped button reads the plate it covers here (LC-112,
38
+ * FZ-8550).
39
+ */
40
+ export interface IconButtonGroupPlate {
41
+ x: number;
42
+ y: number;
43
+ width: number;
44
+ height: number;
45
+ radius: number;
46
+ }
47
+
48
+ export interface IconButtonGroupSurface {
49
+ /** Answers once: the plate, or null when it cannot be measured. */
50
+ measure(callback: (plate: IconButtonGroupPlate | null) => void): void;
51
+ }
52
+
53
+ export const IconButtonGroupSurfaceContext = createContext<IconButtonGroupSurface | null>(null);
54
+
55
+ export function useIconButtonGroupSurface(): IconButtonGroupSurface | null {
56
+ return useContext(IconButtonGroupSurfaceContext);
57
+ }
@@ -80,10 +80,10 @@ import { useControlGrouped } from "../shared/groupContext";
80
80
  import { useInPanelEcho, usePanelTriggerRadiusReporter } from "../FloatingPanel/echoContext";
81
81
  import { loadGlassView } from "./glass";
82
82
  import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
83
- import { ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "./circleGlyph";
83
+ import { boldStroke, GLYPH_BOLD_STROKE_UNITS, ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "./circleGlyph";
84
84
  import { useIconButtonGroupGround, useIconButtonGroupMember } from "./iconButtonGroupContext";
85
85
 
86
- export { ICON_BUTTON_CIRCLE_GLYPH_RATIO };
86
+ export { GLYPH_BOLD_STROKE_UNITS, ICON_BUTTON_CIRCLE_GLYPH_RATIO };
87
87
 
88
88
  /**
89
89
  * Coordinated size recipe (Polaris slim/medium/large, Primer s/m/l, Linear
@@ -466,24 +466,6 @@ export function iconButtonGlyphPx(rowLinePx: number | undefined): number {
466
466
  /** LC-176: an inline glyph is the text's size; Phosphor's 256 grid pads ~12%. */
467
467
  const INLINE_GLYPH_RATIO = 1.2;
468
468
 
469
- /**
470
- * LC-176: Phosphor bold's stem is 0.12 of its ink, an SF Symbols bold plus's
471
- * 0.18 (measured at 17 and 24pt). An outline stroke this wide, in the 256-unit
472
- * grid, brings a bold glyph to SF semibold-bold (0.154); a wider one closes
473
- * Phosphor bold's 16-unit counters (the trash lid, copy's overlap).
474
- */
475
- export const GLYPH_BOLD_STROKE_UNITS = 8;
476
-
477
- function boldStroke(weight: "regular" | "bold", color = "currentColor") {
478
- return weight === "bold"
479
- ? {
480
- stroke: color,
481
- strokeWidth: GLYPH_BOLD_STROKE_UNITS,
482
- strokeLinejoin: "round" as const,
483
- }
484
- : undefined;
485
- }
486
-
487
469
  function withGlyphWeight(
488
470
  icon: IconLike | undefined,
489
471
  size: number,
@@ -8,10 +8,11 @@ import { PlusIcon, XIcon } from "@phosphor-icons/react";
8
8
  import { renderWithProviders } from "@multiplatform.one/test-utils";
9
9
  import { fireEvent, render, waitFor, within } from "@testing-library/react";
10
10
  import { useState } from "react";
11
- import { Surface, useBarSurface } from "@multiplatform.one/theme";
11
+ import { MIN_PRESS_TARGET, Surface, useBarSurface } from "@multiplatform.one/theme";
12
12
  import { afterEach, describe, expect, it, vi } from "vitest";
13
13
  import { Text } from "tamagui";
14
14
  import { Button } from "../Button";
15
+ import { GLYPH_BOLD_STROKE_UNITS } from "../Button/circleGlyph";
15
16
  import { FloatingPanel } from "./index";
16
17
  import { usePanelIconEchoBox } from "./echoContext";
17
18
  import { PanelHeader } from "./PanelHeader";
@@ -98,6 +99,31 @@ function AddPanel({ kind = "close", header = false }: { kind?: IconEcho; header?
98
99
  );
99
100
  }
100
101
 
102
+ /** An account menu opened from a 32pt avatar (no `icon`, so its X is a circle). */
103
+ function AvatarPanel() {
104
+ return (
105
+ <FloatingPanel
106
+ open
107
+ onOpenChange={() => {}}
108
+ anchorMode="cover-trigger"
109
+ compactFace="menu"
110
+ triggerEcho={false}
111
+ iconEcho="menu"
112
+ coverAlign="auto"
113
+ widthMode="fit-content"
114
+ triggerSizing="content"
115
+ contentPadding="none"
116
+ trigger={
117
+ <span role="button" aria-label="Account">
118
+ AD
119
+ </span>
120
+ }
121
+ >
122
+ <Text>Sign out</Text>
123
+ </FloatingPanel>
124
+ );
125
+ }
126
+
101
127
  const glyphPath = (node: Element | null | undefined) =>
102
128
  node?.querySelector("svg path")?.getAttribute("d");
103
129
 
@@ -294,4 +320,38 @@ describe("LC-112 icon trigger echo on the web (FZ-8480)", () => {
294
320
  expect(panel.style.transformOrigin).toBe("bottom left");
295
321
  expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
296
322
  });
323
+
324
+ it("strokes the avatar's X to the bar buttons' bold stem (FZ-8480 follow-up)", async () => {
325
+ measure({ x: 100, y: 12, width: 44, height: 44 });
326
+ const bar = renderWithProviders(<AddPanel kind="menu" />);
327
+ const barPanel = await open(bar);
328
+ const barX = within(barPanel).getByRole("button", { name: "Close" }).querySelector("svg");
329
+ expect(barX?.getAttribute("stroke-width")).toBe(String(GLYPH_BOLD_STROKE_UNITS));
330
+ bar.unmount();
331
+ const result = renderWithProviders(<AvatarPanel />);
332
+ const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
333
+ const avatarX = within(panel).getByRole("button", { name: "Close" }).querySelector("svg");
334
+ expect(avatarX?.getAttribute("stroke-width")).toBe(barX?.getAttribute("stroke-width"));
335
+ expect(avatarX?.getAttribute("stroke-linejoin")).toBe("round");
336
+ });
337
+
338
+ it("covers a 32pt avatar at its 44pt target, its centre on the row-icon column (FZ-8480 GAP)", async () => {
339
+ const avatar = { x: 100, y: 18, width: 32, height: 32 };
340
+ measure(avatar, 240);
341
+ const result = renderWithProviders(<AvatarPanel />);
342
+ const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
343
+ await waitFor(() => expect(panel.style.visibility).toBe("visible"));
344
+ const inset = (MIN_PRESS_TARGET - avatar.width) / 2;
345
+ expect(panel.style.left).toBe(`${avatar.x - inset}px`);
346
+ expect(panel.style.top).toBe(`${avatar.y - inset}px`);
347
+ const row = panel.querySelector<HTMLElement>("[data-fp-icon-echo]") as HTMLElement;
348
+ expect(row.style.height).toBe(`${MIN_PRESS_TARGET}px`);
349
+ const box = row.querySelector<HTMLElement>("[data-fp-icon-echo-box]") as HTMLElement;
350
+ expect(box.style.width).toBe(`${avatar.width}px`);
351
+ expect(box.style.marginLeft).toBe(`${inset}px`);
352
+ expect(box.style.marginTop).toBe(`${inset}px`);
353
+ // The X's centre sits half a press target in, the centre of a menu row's
354
+ // leading glyph slot.
355
+ expect(inset + avatar.width / 2).toBe(MIN_PRESS_TARGET / 2);
356
+ });
297
357
  });
@@ -9,7 +9,13 @@ import { PlusIcon, XIcon } from "@phosphor-icons/react";
9
9
  import { useState, type ReactNode } from "react";
10
10
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
11
11
  import { Text, XStack, YStack, getTokens, getVariableValue } from "tamagui";
12
+ import { MIN_PRESS_TARGET } from "@multiplatform.one/theme";
12
13
  import { Button } from "../Button";
14
+ import {
15
+ IconButtonGroupSurfaceContext,
16
+ type IconButtonGroupPlate,
17
+ type IconButtonGroupSurface,
18
+ } from "../Button/iconButtonGroupContext";
13
19
  import { Input as InputParts } from "../InputParts";
14
20
  import { OverlayStackProvider } from "../shared/overlayStack";
15
21
  import { MENU_MIN_WIDTH, type CompactFace } from "./compactFace";
@@ -540,3 +546,101 @@ describe("LC-112 icon trigger echo on native (FZ-8480, rv_2607879d3bdaf9bf)", ()
540
546
  expect(glyphPath(iconEcho())).not.toBe(glyphPath(live));
541
547
  });
542
548
  });
549
+
550
+ const capsuleSurface = (plate: IconButtonGroupPlate): IconButtonGroupSurface => ({
551
+ measure: (callback) => callback(plate),
552
+ });
553
+
554
+ describe("LC-112 grouped glass capsule on native (FZ-8550, Round 37 second pass)", () => {
555
+ const plate = { x: 200, y: 50, width: 174, height: 44, radius: 22 };
556
+
557
+ it("covers the whole capsule from context at its radius; only the pressed trigger shows, as its X", () => {
558
+ trigger = { x: 330, y: 50, width: 44, height: 44 };
559
+ const result = renderWithProviders(
560
+ <IconButtonGroupSurfaceContext.Provider value={capsuleSurface(plate)}>
561
+ <EchoMenu kind="menu" />
562
+ </IconButtonGroupSurfaceContext.Provider>,
563
+ );
564
+ tap(result.getAllByRole("button", { name: "Add node" })[0]!);
565
+ const panel = menu() as HTMLElement;
566
+ layout(panel, MENU_MIN_WIDTH, 180);
567
+ const left = parseFloat(panel.style.left);
568
+ const top = parseFloat(panel.style.top);
569
+ // The panel's frame contains the capsule's: same top edge, both ends.
570
+ expect(top).toBe(plate.y);
571
+ expect(left).toBeLessThanOrEqual(plate.x);
572
+ expect(left + MENU_MIN_WIDTH).toBeGreaterThanOrEqual(plate.x + plate.width);
573
+ expect(left).toBe(plate.x + plate.width - MENU_MIN_WIDTH);
574
+ expect(corners(frame() as HTMLElement)).toEqual(radiusAtoms(plate.radius));
575
+ // The band is the capsule's height; the X keeps the trigger's own box.
576
+ const band = iconBand() as HTMLElement;
577
+ expect(band.style.height).toBe(`${plate.height}px`);
578
+ const box = band.firstElementChild as HTMLElement;
579
+ expect(box.style.width).toBe(`${trigger.width}px`);
580
+ expect(box.style.marginInlineStart || box.style.marginLeft).toBe(`${trigger.x - left}px`);
581
+ // Only the pressed trigger shows, as an X; nothing else of the group.
582
+ const echoes = document.querySelectorAll('[data-testid="floating-panel-icon-echo"]');
583
+ expect(echoes).toHaveLength(1);
584
+ const x = render(<XIcon weight="bold" />);
585
+ expect(glyphPath(echoes[0] as Element)).toBe(glyphPath(x.container));
586
+ x.unmount();
587
+ });
588
+
589
+ it("takes the capsule's width as its floor when the capsule is wider than the menu", () => {
590
+ const wide = { x: 16, y: 50, width: 358, height: 44, radius: 22 };
591
+ trigger = { x: 330, y: 50, width: 44, height: 44 };
592
+ const result = renderWithProviders(
593
+ <IconButtonGroupSurfaceContext.Provider value={capsuleSurface(wide)}>
594
+ <EchoMenu kind="menu" />
595
+ </IconButtonGroupSurfaceContext.Provider>,
596
+ );
597
+ tap(result.getAllByRole("button", { name: "Add node" })[0]!);
598
+ const panel = menu() as HTMLElement;
599
+ expect(panel.style.minWidth).toBe(`${wide.width}px`);
600
+ layout(panel, wide.width, 180);
601
+ expect(panel.style.left).toBe(`${wide.x}px`);
602
+ });
603
+
604
+ it("waits for the capsule before it shows, so it never opens on the button alone first", () => {
605
+ trigger = { x: 330, y: 50, width: 44, height: 44 };
606
+ let answer: ((plate: IconButtonGroupPlate | null) => void) | null = null;
607
+ const result = renderWithProviders(
608
+ <IconButtonGroupSurfaceContext.Provider
609
+ value={{
610
+ measure: (callback) => {
611
+ answer = callback;
612
+ },
613
+ }}
614
+ >
615
+ <EchoMenu kind="menu" />
616
+ </IconButtonGroupSurfaceContext.Provider>,
617
+ );
618
+ tap(result.getAllByRole("button", { name: "Add node" })[0]!);
619
+ const panel = menu() as HTMLElement;
620
+ layout(panel, MENU_MIN_WIDTH, 180);
621
+ expect(panel.style.opacity).toBe("0");
622
+ act(() => answer?.(plate));
623
+ expect(panel.style.opacity).toBe("1");
624
+ expect(panel.style.left).toBe(`${plate.x + plate.width - MENU_MIN_WIDTH}px`);
625
+ });
626
+
627
+ it("covers a 32pt avatar at its 44pt target, so its centre is the row-icon column (FZ-8480)", () => {
628
+ trigger = { x: 100, y: 56, width: 32, height: 32 };
629
+ const result = renderWithProviders(<EchoMenu kind="menu" />);
630
+ tap(result.getAllByRole("button", { name: "Add node" })[0]!);
631
+ const panel = menu() as HTMLElement;
632
+ layout(panel, MENU_MIN_WIDTH, 180);
633
+ const inset = (MIN_PRESS_TARGET - trigger.width) / 2;
634
+ expect(panel.style.left).toBe(`${trigger.x - inset}px`);
635
+ expect(panel.style.top).toBe(`${trigger.y - inset}px`);
636
+ const band = iconBand() as HTMLElement;
637
+ expect(band.style.height).toBe(`${MIN_PRESS_TARGET}px`);
638
+ const box = band.firstElementChild as HTMLElement;
639
+ expect(box.style.width).toBe(`${trigger.width}px`);
640
+ expect(box.style.marginTop).toBe(`${inset}px`);
641
+ expect(box.style.marginInlineStart || box.style.marginLeft).toBe(`${inset}px`);
642
+ // The X's centre sits half a press target in: where a row's leading
643
+ // glyph centres (row inset plus half its 18pt slot, on the frame border).
644
+ expect(inset + trigger.width / 2).toBe(MIN_PRESS_TARGET / 2);
645
+ });
646
+ });
@@ -0,0 +1,42 @@
1
+ import { MIN_PRESS_TARGET } from "@multiplatform.one/theme";
2
+ import type { TriggerRect } from "./pointAnchor";
3
+
4
+ /**
5
+ * The 44pt box an icon trigger is pressed in, centred on the trigger
6
+ * (LC-176). A trigger drawn smaller than its target (a 32pt avatar) is
7
+ * covered at its target, so the panel's row-icon column, which centres on
8
+ * a 44pt start inset, runs through the trigger's centre and the X drawn on
9
+ * it (FZ-8480 GAP). A trigger at least that big is its own box.
10
+ */
11
+ export function pressTargetRect(trigger: TriggerRect, min = MIN_PRESS_TARGET): TriggerRect {
12
+ const width = Math.max(trigger.width, min);
13
+ const height = Math.max(trigger.height, min);
14
+ return {
15
+ x: trigger.x - (width - trigger.width) / 2,
16
+ y: trigger.y - (height - trigger.height) / 2,
17
+ width,
18
+ height,
19
+ };
20
+ }
21
+
22
+ /**
23
+ * The surface a panel opened from an icon trigger covers (LC-112, FZ-8480
24
+ * Round 37): the plate the trigger sits on. In a grouped glass capsule
25
+ * that is the capsule (FZ-8550); a lone trigger is its press target.
26
+ */
27
+ export function iconCoverRect(trigger: TriggerRect, group: TriggerRect | null): TriggerRect {
28
+ return group ?? pressTargetRect(trigger);
29
+ }
30
+
31
+ /**
32
+ * Where the trigger sits inside the surface its panel covers: the X box's
33
+ * offset from the cover's top, and the band's height. Null when the cover is
34
+ * the trigger itself.
35
+ */
36
+ export function echoInCover(
37
+ trigger: TriggerRect,
38
+ cover: TriggerRect,
39
+ ): { top: number; height: number } | null {
40
+ if (cover.y === trigger.y && cover.height === trigger.height) return null;
41
+ return { top: trigger.y - cover.y, height: cover.height };
42
+ }
@@ -2,7 +2,7 @@ import { XIcon } from "@phosphor-icons/react";
2
2
  import { cloneElement, isValidElement, useState, type ReactElement, type ReactNode } from "react";
3
3
  import { SurfaceContext, type SurfaceIntent } from "@multiplatform.one/theme";
4
4
  import { useTheme, View } from "tamagui";
5
- import { ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "../Button/circleGlyph";
5
+ import { boldStroke, ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "../Button/circleGlyph";
6
6
  import { t } from "../shared/t";
7
7
 
8
8
  /**
@@ -83,10 +83,15 @@ const avatarPlate = "$selectedBackground";
83
83
  /** The X's glyph before the circle has measured itself. */
84
84
  const circleGlyphFallbackPx = 18;
85
85
 
86
- /** An X in a circle the size of the trigger it replaces (an avatar). */
86
+ /**
87
+ * An X in a circle the size of the trigger it replaces (an avatar), stroked
88
+ * to the bar buttons' bold stem (LC-176), so every X in a bar reads at one
89
+ * weight.
90
+ */
87
91
  function CircleClose({ label, onClose }: { label: string; onClose: () => void }) {
88
92
  const theme = useTheme();
89
93
  const [side, setSide] = useState(0);
94
+ const ink = theme.selectedColor?.val ?? theme.color?.val;
90
95
  return (
91
96
  <View
92
97
  role="button"
@@ -110,7 +115,8 @@ function CircleClose({ label, onClose }: { label: string; onClose: () => void })
110
115
  <XIcon
111
116
  size={side > 0 ? Math.round(side * ICON_BUTTON_CIRCLE_GLYPH_RATIO) : circleGlyphFallbackPx}
112
117
  weight="bold"
113
- color={theme.selectedColor?.val ?? theme.color?.val}
118
+ color={ink}
119
+ {...boldStroke("bold", typeof ink === "string" ? ink : undefined)}
114
120
  aria-hidden
115
121
  />
116
122
  </View>