@multiplatform.one/forms 7.71.0 → 7.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) 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.native.js.map +1 -1
  4. package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
  5. package/dist/cjs/Button/index.cjs +16 -0
  6. package/dist/cjs/Button/index.native.js +18 -2
  7. package/dist/cjs/Button/index.native.js.map +1 -1
  8. package/dist/cjs/Button/mediaPlate.native.js.map +1 -1
  9. package/dist/cjs/Chip/index.native.js.map +1 -1
  10. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  11. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  12. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  13. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  14. package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
  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.native.js +2 -2
  20. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  21. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  22. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  23. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  24. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  25. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  26. package/dist/cjs/FieldGroup.native.js.map +1 -1
  27. package/dist/cjs/FloatingPanel/RegularPanel.native.js.map +1 -1
  28. package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
  29. package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -1
  30. package/dist/cjs/FloatingPanel/echoContext.cjs +39 -0
  31. package/dist/cjs/FloatingPanel/echoContext.native.js +42 -0
  32. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -0
  33. package/dist/cjs/FloatingPanel/index.cjs +212 -80
  34. package/dist/cjs/FloatingPanel/index.native.js +92 -17
  35. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  36. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
  37. package/dist/cjs/FloatingPanel/panelWidth.cjs +92 -0
  38. package/dist/cjs/FloatingPanel/panelWidth.native.js +99 -0
  39. package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -0
  40. package/dist/cjs/FloatingPanel/pointAnchor.cjs +15 -5
  41. package/dist/cjs/FloatingPanel/pointAnchor.native.js +15 -5
  42. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  43. package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -1
  44. package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
  45. package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
  46. package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +58 -4
  47. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +69 -4
  48. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  49. package/dist/cjs/Form/index.native.js +1 -1
  50. package/dist/cjs/Form/index.native.js.map +1 -1
  51. package/dist/cjs/Form/submissionController.native.js.map +1 -1
  52. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  53. package/dist/cjs/FormGrid.native.js.map +1 -1
  54. package/dist/cjs/FormSection.native.js.map +1 -1
  55. package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
  56. package/dist/cjs/InputParts/index.cjs +18 -0
  57. package/dist/cjs/InputParts/index.native.js +19 -1
  58. package/dist/cjs/InputParts/index.native.js.map +1 -1
  59. package/dist/cjs/Label/index.native.js.map +1 -1
  60. package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
  61. package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
  62. package/dist/cjs/MediaPicker/types.native.js.map +1 -1
  63. package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
  64. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  65. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  66. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  67. package/dist/cjs/Table/index.native.js.map +1 -1
  68. package/dist/cjs/Wheel/NativeWheel.native.js +1 -1
  69. package/dist/cjs/Wheel/NativeWheel.native.js.map +1 -1
  70. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  71. package/dist/cjs/Wheel/index.cjs +2 -1
  72. package/dist/cjs/Wheel/index.native.js +4 -1
  73. package/dist/cjs/Wheel/index.native.js.map +1 -1
  74. package/dist/cjs/Wheel/wheelShared.cjs +6 -1
  75. package/dist/cjs/Wheel/wheelShared.native.js +7 -1
  76. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  77. package/dist/cjs/actionLabel.native.js.map +1 -1
  78. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  79. package/dist/cjs/fieldLayout.native.js +1 -1
  80. package/dist/cjs/fieldLayout.native.js.map +1 -1
  81. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  82. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
  83. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  84. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  85. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  86. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  87. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  88. package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
  89. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  90. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  91. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  92. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  93. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
  94. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  95. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  96. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  97. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  98. package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
  99. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  100. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  101. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  102. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  103. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  104. package/dist/cjs/fields/Combobox/index.cjs +1 -0
  105. package/dist/cjs/fields/Combobox/index.native.js +6 -5
  106. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  107. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  108. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  109. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  110. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +6 -30
  111. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +14 -37
  112. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  113. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
  114. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  115. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  116. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  117. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  118. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  119. package/dist/cjs/fields/DatePicker/catalog.cjs +2 -28
  120. package/dist/cjs/fields/DatePicker/catalog.native.js +4 -32
  121. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  122. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  123. package/dist/cjs/fields/DatePicker/index.native.js +2 -2
  124. package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
  125. package/dist/cjs/fields/DatePicker/parts.cjs +11 -20
  126. package/dist/cjs/fields/DatePicker/parts.native.js +15 -24
  127. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  128. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  129. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  130. package/dist/cjs/fields/Duration/index.native.js +3 -3
  131. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  132. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  133. package/dist/cjs/fields/FileUpload/index.native.js +2 -2
  134. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  135. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  136. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  137. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  138. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
  139. package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
  140. package/dist/cjs/fields/Geolocation/index.native.js +5 -5
  141. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  142. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  143. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  144. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  145. package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  146. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  147. package/dist/cjs/fields/Icon/index.native.js +3 -3
  148. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  149. package/dist/cjs/fields/ImageField/index.native.js +2 -2
  150. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  151. package/dist/cjs/fields/Input/index.native.js +3 -3
  152. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  153. package/dist/cjs/fields/MentionInput/index.native.js +3 -3
  154. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  155. package/dist/cjs/fields/OTPInput/index.native.js +3 -3
  156. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  157. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  158. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  159. package/dist/cjs/fields/PhoneInput/index.native.js +3 -3
  160. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  161. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  162. package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
  163. package/dist/cjs/fields/Progress/index.native.js +1 -1
  164. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  165. package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
  166. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  167. package/dist/cjs/fields/Rating/index.native.js +1 -1
  168. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  169. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  170. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  171. package/dist/cjs/fields/SearchInput/index.native.js +2 -2
  172. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  173. package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
  174. package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -1
  175. package/dist/cjs/fields/Select/index.cjs +65 -44
  176. package/dist/cjs/fields/Select/index.native.js +73 -51
  177. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  178. package/dist/cjs/fields/Select/shouldInlineChoices.cjs +3 -1
  179. package/dist/cjs/fields/Select/shouldInlineChoices.native.js +3 -1
  180. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  181. package/dist/cjs/fields/Signature/index.native.js +2 -2
  182. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  183. package/dist/cjs/fields/Slider/index.native.js +1 -1
  184. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  185. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  186. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  187. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  188. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  189. package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
  190. package/dist/cjs/fields/Switch/index.native.js +2 -2
  191. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  192. package/dist/cjs/fields/TextArea/index.native.js +2 -2
  193. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  194. package/dist/cjs/fields/TimePicker/catalog.cjs +4 -25
  195. package/dist/cjs/fields/TimePicker/catalog.native.js +10 -32
  196. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  197. package/dist/cjs/fields/TimePicker/index.native.js +2 -2
  198. package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
  199. package/dist/cjs/fields/TimePicker/parts.cjs +8 -21
  200. package/dist/cjs/fields/TimePicker/parts.native.js +9 -22
  201. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  202. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  203. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +2 -2
  204. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  205. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
  206. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  207. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +1 -1
  208. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  209. package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  210. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  211. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  212. package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
  213. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  214. package/dist/cjs/formSpacing.native.js.map +1 -1
  215. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  216. package/dist/cjs/index.native.js +45 -45
  217. package/dist/cjs/index.native.js.map +1 -1
  218. package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
  219. package/dist/cjs/keyboard/chain.native.js.map +1 -1
  220. package/dist/cjs/keyboard/index.native.js.map +1 -1
  221. package/dist/cjs/keyboard/types.native.js.map +1 -1
  222. package/dist/cjs/requiredMarking.native.js.map +1 -1
  223. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  224. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  225. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  226. package/dist/cjs/shared/choiceRowPress.native.js.map +1 -1
  227. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  228. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  229. package/dist/cjs/shared/floatingList.cjs +13 -4
  230. package/dist/cjs/shared/floatingList.native.js +16 -5
  231. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  232. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  233. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  234. package/dist/cjs/shared/i18n.native.js.map +1 -1
  235. package/dist/cjs/shared/instantMotion.native.js.map +1 -1
  236. package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
  237. package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
  238. package/dist/cjs/shared/overlaySizeClass.native.js.map +1 -1
  239. package/dist/cjs/shared/overlayStack.native.js.map +1 -1
  240. package/dist/cjs/shared/panelPortal.native.js.map +1 -1
  241. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
  242. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
  243. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  244. package/dist/cjs/shared/sheetNavigation.native.js.map +1 -1
  245. package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -1
  246. package/dist/cjs/shared/systemControls.native.js.map +1 -1
  247. package/dist/cjs/shared/t.native.js.map +1 -1
  248. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  249. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  250. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  251. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  252. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  253. package/dist/cjs/shared/utils.native.js +1 -1
  254. package/dist/cjs/shared/utils.native.js.map +1 -1
  255. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  256. package/dist/cjs/standardActions.native.js.map +1 -1
  257. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  258. package/dist/cjs/types.native.js.map +1 -1
  259. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  260. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  261. package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
  262. package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
  263. package/dist/esm/Button/index.mjs +17 -1
  264. package/dist/esm/Button/index.mjs.map +1 -1
  265. package/dist/esm/Button/index.native.js +17 -1
  266. package/dist/esm/Button/index.native.js.map +1 -1
  267. package/dist/esm/Button/mediaPlate.native.js.map +1 -1
  268. package/dist/esm/Chip/index.native.js.map +1 -1
  269. package/dist/esm/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  270. package/dist/esm/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  271. package/dist/esm/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  272. package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
  273. package/dist/esm/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  274. package/dist/esm/ControlGroup/index.native.js.map +1 -1
  275. package/dist/esm/DescriptionList/index.native.js.map +1 -1
  276. package/dist/esm/ErrorSummary.native.js.map +1 -1
  277. package/dist/esm/FieldDisplay/editMode.native.js.map +1 -1
  278. package/dist/esm/FieldDisplay/formatters.native.js.map +1 -1
  279. package/dist/esm/FieldDisplay/index.native.js.map +1 -1
  280. package/dist/esm/FieldGroup.native.js.map +1 -1
  281. package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -1
  282. package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
  283. package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
  284. package/dist/esm/FloatingPanel/echoContext.mjs +11 -0
  285. package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -0
  286. package/dist/esm/FloatingPanel/echoContext.native.js +11 -0
  287. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -0
  288. package/dist/esm/FloatingPanel/index.mjs +213 -83
  289. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  290. package/dist/esm/FloatingPanel/index.native.js +92 -19
  291. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  292. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
  293. package/dist/esm/FloatingPanel/panelWidth.mjs +63 -0
  294. package/dist/esm/FloatingPanel/panelWidth.mjs.map +1 -0
  295. package/dist/esm/FloatingPanel/panelWidth.native.js +67 -0
  296. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -0
  297. package/dist/esm/FloatingPanel/pointAnchor.mjs +15 -5
  298. package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -1
  299. package/dist/esm/FloatingPanel/pointAnchor.native.js +15 -5
  300. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  301. package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -1
  302. package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
  303. package/dist/esm/FloatingPanel/useFloatingPanel.mjs +58 -5
  304. package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  305. package/dist/esm/FloatingPanel/useFloatingPanel.native.js +69 -5
  306. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  307. package/dist/esm/Form/index.native.js.map +1 -1
  308. package/dist/esm/Form/submissionController.native.js.map +1 -1
  309. package/dist/esm/Form/validateOn.native.js.map +1 -1
  310. package/dist/esm/FormGrid.native.js.map +1 -1
  311. package/dist/esm/FormSection.native.js.map +1 -1
  312. package/dist/esm/InputParts/PasswordReveal.native.js.map +1 -1
  313. package/dist/esm/InputParts/index.mjs +19 -1
  314. package/dist/esm/InputParts/index.mjs.map +1 -1
  315. package/dist/esm/InputParts/index.native.js +20 -2
  316. package/dist/esm/InputParts/index.native.js.map +1 -1
  317. package/dist/esm/Label/index.native.js.map +1 -1
  318. package/dist/esm/MediaPicker/base64.native.js.map +1 -1
  319. package/dist/esm/MediaPicker/payload.native.js.map +1 -1
  320. package/dist/esm/MediaPicker/types.native.js.map +1 -1
  321. package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
  322. package/dist/esm/Skeleton/index.native.js.map +1 -1
  323. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  324. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  325. package/dist/esm/Table/index.native.js.map +1 -1
  326. package/dist/esm/Wheel/NativeWheel.native.js +1 -1
  327. package/dist/esm/Wheel/NativeWheel.native.js.map +1 -1
  328. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  329. package/dist/esm/Wheel/index.mjs +2 -1
  330. package/dist/esm/Wheel/index.mjs.map +1 -1
  331. package/dist/esm/Wheel/index.native.js +4 -1
  332. package/dist/esm/Wheel/index.native.js.map +1 -1
  333. package/dist/esm/Wheel/wheelShared.mjs +6 -1
  334. package/dist/esm/Wheel/wheelShared.mjs.map +1 -1
  335. package/dist/esm/Wheel/wheelShared.native.js +7 -1
  336. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  337. package/dist/esm/actionLabel.native.js.map +1 -1
  338. package/dist/esm/fieldDefaults.native.js.map +1 -1
  339. package/dist/esm/fieldLayout.native.js.map +1 -1
  340. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  341. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  342. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  343. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  344. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  345. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  346. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  347. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  348. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  349. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  350. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  351. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  352. package/dist/esm/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  353. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  354. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  355. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  356. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  357. package/dist/esm/fields/Combobox/index.mjs +1 -0
  358. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  359. package/dist/esm/fields/Combobox/index.native.js +1 -0
  360. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  361. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  362. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  363. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
  364. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  365. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  366. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  367. package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  368. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  369. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  370. package/dist/esm/fields/DatePicker/catalog.mjs +2 -28
  371. package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -1
  372. package/dist/esm/fields/DatePicker/catalog.native.js +2 -30
  373. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  374. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  375. package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
  376. package/dist/esm/fields/DatePicker/parts.mjs +11 -20
  377. package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
  378. package/dist/esm/fields/DatePicker/parts.native.js +13 -22
  379. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  380. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  381. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  382. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  383. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  384. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  385. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  386. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  387. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  388. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
  389. package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
  390. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  391. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  392. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  393. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  394. package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  395. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  396. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  397. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  398. package/dist/esm/fields/Input/index.native.js.map +1 -1
  399. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  400. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  401. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  402. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  403. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  404. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  405. package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
  406. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  407. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  408. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  409. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  410. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  411. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  412. package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
  413. package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
  414. package/dist/esm/fields/Select/index.mjs +66 -45
  415. package/dist/esm/fields/Select/index.mjs.map +1 -1
  416. package/dist/esm/fields/Select/index.native.js +70 -48
  417. package/dist/esm/fields/Select/index.native.js.map +1 -1
  418. package/dist/esm/fields/Select/shouldInlineChoices.mjs +3 -1
  419. package/dist/esm/fields/Select/shouldInlineChoices.mjs.map +1 -1
  420. package/dist/esm/fields/Select/shouldInlineChoices.native.js +3 -1
  421. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  422. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  423. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  424. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  425. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  426. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  427. package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
  428. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  429. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  430. package/dist/esm/fields/TimePicker/catalog.mjs +4 -25
  431. package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
  432. package/dist/esm/fields/TimePicker/catalog.native.js +7 -29
  433. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  434. package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
  435. package/dist/esm/fields/TimePicker/parts.mjs +8 -21
  436. package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
  437. package/dist/esm/fields/TimePicker/parts.native.js +8 -21
  438. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  439. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  440. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  441. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  442. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  443. package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  444. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  445. package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  446. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  447. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  448. package/dist/esm/formSpacing.native.js.map +1 -1
  449. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  450. package/dist/esm/index.mjs.map +1 -1
  451. package/dist/esm/index.native.js.map +1 -1
  452. package/dist/esm/keyboard/chain.native.js.map +1 -1
  453. package/dist/esm/keyboard/index.native.js.map +1 -1
  454. package/dist/esm/keyboard/types.native.js.map +1 -1
  455. package/dist/esm/requiredMarking.native.js.map +1 -1
  456. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  457. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  458. package/dist/esm/shared/choiceRowPress.native.js.map +1 -1
  459. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  460. package/dist/esm/shared/devWarn.native.js.map +1 -1
  461. package/dist/esm/shared/floatingList.mjs +14 -5
  462. package/dist/esm/shared/floatingList.mjs.map +1 -1
  463. package/dist/esm/shared/floatingList.native.js +16 -5
  464. package/dist/esm/shared/floatingList.native.js.map +1 -1
  465. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  466. package/dist/esm/shared/groupContext.native.js.map +1 -1
  467. package/dist/esm/shared/i18n.native.js.map +1 -1
  468. package/dist/esm/shared/instantMotion.native.js.map +1 -1
  469. package/dist/esm/shared/nativeA11y.native.js.map +1 -1
  470. package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
  471. package/dist/esm/shared/overlaySizeClass.native.js.map +1 -1
  472. package/dist/esm/shared/overlayStack.native.js.map +1 -1
  473. package/dist/esm/shared/panelPortal.native.js.map +1 -1
  474. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  475. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  476. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  477. package/dist/esm/shared/sheetNavigation.native.js.map +1 -1
  478. package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
  479. package/dist/esm/shared/systemControls.native.js.map +1 -1
  480. package/dist/esm/shared/t.native.js.map +1 -1
  481. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  482. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  483. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  484. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  485. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  486. package/dist/esm/shared/utils.native.js.map +1 -1
  487. package/dist/esm/shared/zIndex.native.js.map +1 -1
  488. package/dist/esm/standardActions.native.js.map +1 -1
  489. package/dist/esm/themedPrimitives.native.js.map +1 -1
  490. package/dist/esm/types.native.js.map +1 -1
  491. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  492. package/dist/jsx/Button/index.mjs +17 -1
  493. package/dist/jsx/Button/index.mjs.map +1 -1
  494. package/dist/jsx/Button/index.native.js +16 -0
  495. package/dist/jsx/Button/index.native.js.map +1 -1
  496. package/dist/jsx/FloatingPanel/echoContext.mjs +11 -0
  497. package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -0
  498. package/dist/jsx/FloatingPanel/echoContext.native.js +42 -0
  499. package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -0
  500. package/dist/jsx/FloatingPanel/index.mjs +213 -83
  501. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  502. package/dist/jsx/FloatingPanel/index.native.js +92 -17
  503. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  504. package/dist/jsx/FloatingPanel/panelWidth.mjs +63 -0
  505. package/dist/jsx/FloatingPanel/panelWidth.mjs.map +1 -0
  506. package/dist/jsx/FloatingPanel/panelWidth.native.js +99 -0
  507. package/dist/jsx/FloatingPanel/panelWidth.native.js.map +1 -0
  508. package/dist/jsx/FloatingPanel/pointAnchor.mjs +15 -5
  509. package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -1
  510. package/dist/jsx/FloatingPanel/pointAnchor.native.js +15 -5
  511. package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -1
  512. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +58 -5
  513. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  514. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +69 -4
  515. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  516. package/dist/jsx/InputParts/index.mjs +19 -1
  517. package/dist/jsx/InputParts/index.mjs.map +1 -1
  518. package/dist/jsx/InputParts/index.native.js +19 -1
  519. package/dist/jsx/InputParts/index.native.js.map +1 -1
  520. package/dist/jsx/Wheel/NativeWheel.native.js +1 -1
  521. package/dist/jsx/Wheel/NativeWheel.native.js.map +1 -1
  522. package/dist/jsx/Wheel/index.mjs +2 -1
  523. package/dist/jsx/Wheel/index.mjs.map +1 -1
  524. package/dist/jsx/Wheel/index.native.js +4 -1
  525. package/dist/jsx/Wheel/index.native.js.map +1 -1
  526. package/dist/jsx/Wheel/wheelShared.mjs +6 -1
  527. package/dist/jsx/Wheel/wheelShared.mjs.map +1 -1
  528. package/dist/jsx/Wheel/wheelShared.native.js +7 -1
  529. package/dist/jsx/Wheel/wheelShared.native.js.map +1 -1
  530. package/dist/jsx/fields/Combobox/index.mjs +1 -0
  531. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  532. package/dist/jsx/fields/Combobox/index.native.js +1 -0
  533. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  534. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
  535. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
  536. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
  537. package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  538. package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
  539. package/dist/jsx/fields/DatePicker/catalog.mjs +2 -28
  540. package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -1
  541. package/dist/jsx/fields/DatePicker/catalog.native.js +2 -30
  542. package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -1
  543. package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
  544. package/dist/jsx/fields/DatePicker/parts.mjs +11 -20
  545. package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
  546. package/dist/jsx/fields/DatePicker/parts.native.js +13 -22
  547. package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
  548. package/dist/jsx/fields/Select/index.mjs +66 -45
  549. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  550. package/dist/jsx/fields/Select/index.native.js +69 -47
  551. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  552. package/dist/jsx/fields/Select/shouldInlineChoices.mjs +3 -1
  553. package/dist/jsx/fields/Select/shouldInlineChoices.mjs.map +1 -1
  554. package/dist/jsx/fields/Select/shouldInlineChoices.native.js +3 -1
  555. package/dist/jsx/fields/Select/shouldInlineChoices.native.js.map +1 -1
  556. package/dist/jsx/fields/TimePicker/catalog.mjs +4 -25
  557. package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
  558. package/dist/jsx/fields/TimePicker/catalog.native.js +7 -29
  559. package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
  560. package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
  561. package/dist/jsx/fields/TimePicker/parts.mjs +8 -21
  562. package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
  563. package/dist/jsx/fields/TimePicker/parts.native.js +8 -21
  564. package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
  565. package/dist/jsx/index.js.map +1 -1
  566. package/dist/jsx/index.mjs.map +1 -1
  567. package/dist/jsx/index.native.js.map +1 -1
  568. package/dist/jsx/shared/floatingList.mjs +14 -5
  569. package/dist/jsx/shared/floatingList.mjs.map +1 -1
  570. package/dist/jsx/shared/floatingList.native.js +15 -4
  571. package/dist/jsx/shared/floatingList.native.js.map +1 -1
  572. package/package.json +8 -8
  573. package/src/Button/index.tsx +22 -0
  574. package/src/FloatingPanel/FloatingPanel.echoStretch.spec.tsx +67 -0
  575. package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +193 -2
  576. package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +237 -0
  577. package/src/FloatingPanel/echoContext.ts +22 -0
  578. package/src/FloatingPanel/index.native.tsx +106 -9
  579. package/src/FloatingPanel/index.tsx +310 -102
  580. package/src/FloatingPanel/panelWidth.spec.ts +158 -0
  581. package/src/FloatingPanel/panelWidth.ts +122 -0
  582. package/src/FloatingPanel/panelWidthContract.spec.ts +10 -10
  583. package/src/FloatingPanel/pointAnchor.spec.ts +64 -2
  584. package/src/FloatingPanel/pointAnchor.ts +28 -3
  585. package/src/FloatingPanel/useFloatingPanel.spec.tsx +124 -4
  586. package/src/FloatingPanel/useFloatingPanel.ts +106 -33
  587. package/src/InputParts/index.tsx +26 -0
  588. package/src/Wheel/NativeWheel.native.tsx +1 -1
  589. package/src/Wheel/Wheel.spec.tsx +9 -0
  590. package/src/Wheel/index.tsx +12 -3
  591. package/src/Wheel/wheelShared.ts +6 -2
  592. package/src/fields/Combobox/index.tsx +1 -0
  593. package/src/fields/DatePicker/DatePicker.stories.tsx +3 -3
  594. package/src/fields/DatePicker/DatetimePicker.catalog.tsx +17 -45
  595. package/src/fields/DatePicker/DatetimePicker.native.tsx +3 -0
  596. package/src/fields/DatePicker/catalog.tsx +8 -39
  597. package/src/fields/DatePicker/index.native.tsx +3 -0
  598. package/src/fields/DatePicker/parts.tsx +13 -23
  599. package/src/fields/DatePicker/seamlessCover.spec.tsx +180 -0
  600. package/src/fields/DatePicker/touchWeb.spec.tsx +109 -167
  601. package/src/fields/Select/Select.containingBlock.spec.tsx +191 -0
  602. package/src/fields/Select/Select.stories.tsx +43 -0
  603. package/src/fields/Select/index.tsx +109 -45
  604. package/src/fields/Select/shouldInlineChoices.spec.ts +13 -0
  605. package/src/fields/Select/shouldInlineChoices.ts +6 -0
  606. package/src/fields/TimePicker/catalog.tsx +12 -33
  607. package/src/fields/TimePicker/index.native.tsx +2 -0
  608. package/src/fields/TimePicker/parts.tsx +6 -20
  609. package/src/index.ts +1 -0
  610. package/src/shared/floatingList.tsx +21 -5
  611. package/types/Button/index.d.ts.map +1 -1
  612. package/types/FloatingPanel/echoContext.d.ts +14 -0
  613. package/types/FloatingPanel/echoContext.d.ts.map +1 -0
  614. package/types/FloatingPanel/index.d.ts +59 -0
  615. package/types/FloatingPanel/index.d.ts.map +1 -1
  616. package/types/FloatingPanel/index.native.d.ts +9 -1
  617. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  618. package/types/FloatingPanel/panelWidth.d.ts +71 -0
  619. package/types/FloatingPanel/panelWidth.d.ts.map +1 -0
  620. package/types/FloatingPanel/pointAnchor.d.ts +8 -1
  621. package/types/FloatingPanel/pointAnchor.d.ts.map +1 -1
  622. package/types/FloatingPanel/useFloatingPanel.d.ts +33 -2
  623. package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
  624. package/types/InputParts/index.d.ts.map +1 -1
  625. package/types/Wheel/index.d.ts.map +1 -1
  626. package/types/Wheel/wheelShared.d.ts +2 -1
  627. package/types/Wheel/wheelShared.d.ts.map +1 -1
  628. package/types/fields/Combobox/index.d.ts.map +1 -1
  629. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +6 -0
  630. package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
  631. package/types/fields/DatePicker/DatetimePicker.native.d.ts +3 -0
  632. package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
  633. package/types/fields/DatePicker/catalog.d.ts +6 -0
  634. package/types/fields/DatePicker/catalog.d.ts.map +1 -1
  635. package/types/fields/DatePicker/index.native.d.ts +3 -0
  636. package/types/fields/DatePicker/index.native.d.ts.map +1 -1
  637. package/types/fields/DatePicker/parts.d.ts +5 -7
  638. package/types/fields/DatePicker/parts.d.ts.map +1 -1
  639. package/types/fields/Select/index.d.ts +8 -1
  640. package/types/fields/Select/index.d.ts.map +1 -1
  641. package/types/fields/Select/shouldInlineChoices.d.ts +5 -1
  642. package/types/fields/Select/shouldInlineChoices.d.ts.map +1 -1
  643. package/types/fields/TimePicker/catalog.d.ts +7 -1
  644. package/types/fields/TimePicker/catalog.d.ts.map +1 -1
  645. package/types/fields/TimePicker/index.native.d.ts +2 -0
  646. package/types/fields/TimePicker/index.native.d.ts.map +1 -1
  647. package/types/fields/TimePicker/parts.d.ts +1 -3
  648. package/types/fields/TimePicker/parts.d.ts.map +1 -1
  649. package/types/index.d.ts +1 -0
  650. package/types/index.d.ts.map +1 -1
  651. package/types/shared/floatingList.d.ts +5 -1
  652. package/types/shared/floatingList.d.ts.map +1 -1
  653. package/dist/cjs/shared/touchWebPicker.cjs +0 -136
  654. package/dist/cjs/shared/touchWebPicker.native.js +0 -154
  655. package/dist/cjs/shared/touchWebPicker.native.js.map +0 -1
  656. package/dist/esm/shared/touchWebPicker.mjs +0 -105
  657. package/dist/esm/shared/touchWebPicker.mjs.map +0 -1
  658. package/dist/esm/shared/touchWebPicker.native.js +0 -120
  659. package/dist/esm/shared/touchWebPicker.native.js.map +0 -1
  660. package/dist/jsx/shared/touchWebPicker.mjs +0 -105
  661. package/dist/jsx/shared/touchWebPicker.mjs.map +0 -1
  662. package/dist/jsx/shared/touchWebPicker.native.js +0 -154
  663. package/dist/jsx/shared/touchWebPicker.native.js.map +0 -1
  664. package/src/shared/touchWebPicker.spec.ts +0 -98
  665. package/src/shared/touchWebPicker.tsx +0 -158
  666. package/types/shared/touchWebPicker.d.ts +0 -40
  667. package/types/shared/touchWebPicker.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","floatingList_exports","ScrollArrow","SyncFocusToOpen","clampDropdownRadius","scrollArrowThreshold","module","exports","import_jsx_runtime","require","import_theme","import_react","import_react2","import_theme2","import_tamagui","import_InputParts","dropdownMaxRadiusTokenNum","fieldRadius","startsWith","num","Number","parseInt","slice","param","open","setFocused","FocusContext","useStyledContext","useEffect","direction","scrollRef","visible","arrowScrollDirRef","isUp","animationFrameRef","useRef","lastTimeRef","resumeTimerRef","hoveringRef","activeRef","selfScrollingRef","resumeDelay","stopLoop","useCallback","current","cancelAnimationFrame","startLoop","performance","now","tick","tick1","el","elapsed","px","Math","min","max","scrollTop","scrollHeight","clientHeight","requestAnimationFrame","openTimestampRef","handlePointerEnter","wasOverOnOpen","clearTimeout","setTimeout","handlePointerLeave","onScroll","onScroll2","addEventListener","passive","removeEventListener"],"sources":["../../../src/shared/floatingList.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","floatingList_exports","ScrollArrow","SyncFocusToOpen","clampDropdownRadius","scrollArrowThreshold","module","exports","import_jsx_runtime","require","import_theme","import_react","import_react2","import_theme2","import_tamagui","import_InputParts","dropdownMaxRadiusTokenNum","fieldRadius","startsWith","num","Number","parseInt","slice","param","open","setFocused","FocusContext","useStyledContext","useEffect","direction","scrollRef","visible","arrowScrollDirRef","topOffset","bottomOffset","isUp","animationFrameRef","useRef","lastTimeRef","resumeTimerRef","hoveringRef","activeRef","selfScrollingRef","resumeDelay","stopLoop","useCallback","current","cancelAnimationFrame","startLoop","performance","now","tick","tick1","el","elapsed","px","Math","min","max","scrollTop","scrollHeight","clientHeight","requestAnimationFrame","openTimestampRef","handlePointerEnter","wasOverOnOpen","clearTimeout","setTimeout","handlePointerLeave","onScroll","onScroll2","addEventListener","passive","removeEventListener","panelFill","setPanelFill","useState","getComputedStyle","fill","backgroundColor"],"sources":["../../../src/shared/floatingList.tsx"],"sourcesContent":[null],"mappings":"AAAA,YAAS;;AACT,IAAAA,SAAyB,GAAAC,MAAa,CAAAC,cAAW;AACjD,IAAAC,gBAAS,GAAAF,MAAe,CAAAG,wBAAmB;AAC3C,IAAAC,iBAAS,GAAAJ,MAAA,CAAAK,mBAAwB;AACjC,IAAAC,YAAS,GAAAN,MAAY,CAAAO,SAAA,CAAAC,cAAA;AACrB,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAAC,GAAA,KAAoB;EA2LnB,SAAAC,IAAA,IAAAD,GAAA,EAzLVZ,SAAM,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAA4BF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAE3B;AACL,IAAAC,WAAI,GAAAA,CAAAC,EAAA,EAAgBC,IAAM,EAAAC,MAAO,EAAAC,IAAA;EACjC,IAAIF,IAAA,IAAO,OAAAA,IAAA,KAAgB,YAAY,OAAAA,IAAY,eAAc,EAAG;IAClE,SAAMG,GAAM,IAAAhB,iBAAgB,CAAAa,IAAA,GAC5B,KAAOX,YAAM,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAgCF,MAAA,EAC/CnB,SAAA,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EACA;EACF,OAAAE,EAAA;AAEO;AACL,IAAAM,YAAQ,GAAAC,GAAW,IAAIR,WAAa,CAAAhB,SAAA,iBAAiB;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AACrD,IAAAE,oBAAgB;AACdhB,QAAA,CAAAgB,oBAAe;EACjBC,WAAU,EAAAA,CAAA,KAAAA,WAAW;EACrBC,eAAO,EAAAA,CAAA,KAAAA,eAAA;EACTC,mBAAA,EAAAA,CAAA,KAAAA,mBAAA;EAEOC,oBAAM,EAAAA,CAAA,KAAuBA;AAI7B;AAAqBC,MAC1B,CAAAC,OAAA,GAAAT,YAAA,CAAAG,oBAAA;AAAA,IACAO,kBAAA,GAAAC,OAAA;AAAA,IACAC,YAAA,GAAAD,OAAA;AAAA,IACAE,YAAA,GAAAF,OAAA;AAAA,IACAG,aAAY,GAAAH,OAAA;AAAA,IACZI,aAAe,GAAAJ,OAAA;AACjB,IASGK,cAAA,GAAAL,OAAA;AACD,IAAAM,iBAAa,GAAAN,OAAc;AAC3B,IAAAO,yBAA0B;AAC1B,SAAMZ,mBAAcA,CAAOa,WAAC;EAC5B,IAAAA,WAAM,SAAiB,SAA6C,CAAI;EACxE,WAAMA,WAAc,KAAO,QAAK,IAAAA,WAAA,CAAAC,UAAA;IAChC,IAAMC,GAAA,GAAAC,MAAY,CAAAC,QAAO,CAAAJ,WAAK,CAAAK,KAAA;IAC9B,OAAMH,GAAA,GAAAH,yBAA+B,OAAAA,yBAAA,KAAAC,WAAA;EACrC;EAEA,OAAMA,WAAW;AACf;AACA,SAAAd,gBAAqBoB,KAAA;EACrB;IAAAC;EAAA,IAAAD,KAAkB;EACpB,IAAI;IAACE;EAAA,IAAAV,iBAAA,CAAAW,YAAA,CAAAC,gBAAA;EAEL,IAAAhB,YAAM,CAAAiB,SAAY,cAAkB;IAClCH,UAAI,CAAAD,IAAU;EACd,IACAA,IAAA,EACAC,UAAM,CACJ;EACA,WAAK;AACH;AACA,IAAApB,oBAAA;AAAA,SACFH,YAAAqB,KAAA;EACA;IAAAM,SAAM;IAAMC,SAAA;IAAYC,OAAI;IAAAC,iBAAA;IAAAC,SAAA;IAAAC,YAAA;EAAA,IAAAX,KAAA;EAC5B,IAAAY,IAAA,GAAMN,SAAU,SAAM;EACtB,IAAAO,iBAAY,KAAU,EAAAzB,YAAA,CAAA0B,MAAA;EACtB,IAAAC,WAAW,KAAK,EAAA3B,YAAA,CAAA0B,MAAA;EAAA,IAAAE,cACJ,OAAA5B,YAAA,CAAA0B,MAAA;EAAA,IAAAG,WACD,OAAO7B,YAAG,CAAA0B,MAAe;EAAgD,IACpFI,SAAA,OAAA9B,YAAA,CAAA0B,MAAA;EACA,IAAAK,gBAAY,OAAA/B,YAAA,CAAA0B,MAAA;EACV,IAAAM,WAAA;EACA,IAAAC,QAAA,OAAAjC,YAAkB,CAAAkC,WAAiB,cAAO;IAC1CJ,SAAG,CAAAK,OAAA,GAAa;IAAaC,oBAC/B,CAAAX,iBAAA,CAAAU,OAAA;IACAV,iBAAA,CAAAU,OAAkB;EAAoC,GACxD;EACA,IAAAE,SAAA,OAAkBrC,YAAU,CAAAkC,WAAA,cAA0B;IACxD,IAAIJ,SAAM,CAAAK,OAAU,KAAAN,WAAA,CAAAM,OAAA;IAEpBL,SAAM,CAAAK,OAAA,OAAmB;IACzBR,WAAU,CAAAQ,OAAM,GAAAG,WAAA,CAAAC,GAAA;IACd,IAAAC,IAAA,YAAiBC,MAAA,EAAU;MACzB,IAAAC,EAAA,GAAQvB,SAAA,CAAAgB,OAAA;MAEZ,IAAM,CAAAO,EAAA,KAAAb,WAAqB,CAAAM,OAAA,IAAY,CAAAL,SAAM,CAAAK,OAAA;QAC3CL,SAAY,CAAAK,OAAA,GAAU;QACtB;MACA;MACA,IAAII,GAAA,GAAAD,WAAe,CAAAC,GAAA;MACjB,IAAII,OAAA,GAAAJ,GAAA,GAAeZ,WAAS,CAAAQ,OAAA;MAC5BR,WAAA,CAAAQ,OAAe,GAAAI,GAAU;MACvB,IAAAK,EAAA,GAAAC,IAAA,CAAAC,GAAe,CAAAH,OAAA,GAAU,GAAAE,IAAA,CAAAE,GAAA,CAAAvB,IAAA,GAAAkB,EAAA,CAAAM,SAAA,GAAAN,EAAA,CAAAO,YAAA,GAAAP,EAAA,CAAAQ,YAAA,GAAAR,EAAA,CAAAM,SAAA;MACzB,IAAAJ,EAAI;QACNb,gBAAM,CAAAI,OAAA;QACRd,iBAAO,CAAAc,OAAA,GAAAX,IAAA;QACLkB,EAAA,CAAAM,SAAU,IAAAxB,IAAA,IAAAoB,EAAA,GAAAA,EAAA;MACZ;MACEnB,iBAAU,CAAAU,OAAA,GAAAgB,qBAAA,CAAAX,IAAA;IAEd;IACEf,iBAAY,CAAAU,OAAU,GAAAgB,qBAAA,CAAAX,IAAA;EACtB,IACEhB,IAAA,EACAL,SAAA,CAAyB,CAC3B;EACA,IAAAiC,gBAAS,OAAApD,YAAA,CAAA0B,MAAA;EACX,IAAI1B,YAAS,CAAAiB,SAAA;IAEbmC,gBAAgB,CAAAjB,OAAA,GAAAG,WAAA,CAAAC,GAAA;EACd,IACAnB,OAAK,CACL;EACE,IAAAiC,kBAAI,GAAiB,IAAArD,YAAS,CAAAkC,WAAA;IAC5BL,WAAA,CAAAM,OAAA,GAAiB;IACjB,IAAAQ,OAAA,GAAAL,WAAA,CAAAC,GAAA,KAAAa,gBAAA,CAAAjB,OAAA;IAAA,IACFmB,aAAA,GAAAX,OAAA;IACA,IAAAW,aAAK,EAAY;MACjB,IAAA1B,cAAS,CAAAO,OAAA,EAAAoB,YAAA,CAAA3B,cAAA,CAAAO,OAAA;MACTP,cAAI,CAAAO,OAAe,GAAAqB,UAAS,aAAa;QACzC5B,cAAe,CAAAO,OAAA,GAAU;QACvB,IAAAN,WAAe,CAAAM,OAAA,EAAUE,SAAA;MACzB,MAAI;IAA+B,OAClC;MACLA,SAAA;IACA;EACA,IACFA,SAAI,CAEJ;EAAA,IACEoB,kBAAY,OAAAzD,YAAA,CAAAkC,WAAA;IACVL,WAAA,CAAAM,OAAA,GAAmB;IACrB,IAAAP,cAAA,CAAAO,OAAA;MACCoB,YAAA,CAAA3B,cAAkB,CAAAO,OAAA;MACrBP,cAAA,CAAAO,OAAA;IAEA;IACAF,QAAU;EACR,IACAA,QAAM,CACN;EACA,IAAAjC,YAAY,CAAAiB,SAAS;IACvB,IAAIyB,EAAA,GAAAvB,SAAS,CAAAgB,OAAU;IAEvB,IAAM,CAAAO,EAAA,IAAO,CAAAtB,OAAO;IACpB,IAAMsC,QAAE,YAAcC,UAAA;MACtB,IAAM5B,gBAAW,CAAAI,OAAU;QAE3BJ,gBACE,CAAAI,OAAA;QAAC;MAAA;MACC,KAAAN,WAAS,CAAAM,OAAA;MACTF,QAAK;MACL,IAAAL,cAAe,CAAAO,OAAY,EAAAoB,YAAA,CAAA3B,cAAA,CAAAO,OAAA;MAC3BP,cAAQ,CAAAO,OAAA,GAAAqB,UAAA;QACR5B,cAAQ,CAAAO,OAAA;QAER,IAAAN,WAAA,CAAAM,OAAA,EAAAE,SAAA;MAAA,GAACL,WAAA;IAAA;IAAAU,EAAA,CAAAkB,gBACC,WAAAF,QAAsB;MAAAG,OACtB;IAAgB;IACe,OAC/B,YAAS;MAAA,OACTnB,EAAA,CAAMoB,mBAAA,WAAAJ,QAAA;IAAA;EACC,IACSvC,SAChB,EAA2BC,OAC1B,EAAaiB,SACd,EAAMJ,QACN,CAAW;EACI,IAAAjC,YACf,CAAAiB,SAAe,cAAU;IAAS,OAClC,YAAS;MAAcwC,kBACnB;IAAwC;EAGrC,IAGmCA,kBAC1C;EAC+C,KAAAM,SAC/C,EAAAC,YAAgB,QAAAhE,YAAA,CAAAiE,QAAA;EAAA,IAAAjE,YAEhB,CAAAiB,SAAA,cAAC;IAED,KAAAG,OAAA,WAAA8C,gBAAA;IAAA,IACFxB,EAAA,GAAAvB,SAAA,CAAAgB,OAAA;IAAA,IAAAgC,IAAA,GAAAzB,EAAA,GAAAwB,gBAAA,CAAAxB,EAAA,EAAA0B,eAAA;IACF,IAAAD,IAAA,IAAAA,IAAA,sBAAAA,IAAA,yBAAAH,YAAA,CAAAG,IAAA;EAEJ,I","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/forms",
3
- "version": "7.71.0",
3
+ "version": "7.72.0",
4
4
  "description": "Cross-platform form components with URL state management",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -57,10 +57,10 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@floating-ui/react": "^0.27.20",
60
- "@multiplatform.one/platform": "^7.71.0",
61
- "@multiplatform.one/router": "^7.71.0",
62
- "@multiplatform.one/table-primitives": "^7.71.0",
63
- "@multiplatform.one/theme": "^7.71.0",
60
+ "@multiplatform.one/platform": "^7.72.0",
61
+ "@multiplatform.one/router": "^7.72.0",
62
+ "@multiplatform.one/table-primitives": "^7.72.0",
63
+ "@multiplatform.one/theme": "^7.72.0",
64
64
  "@phosphor-icons/react": "^2.1.10",
65
65
  "@tamagui/get-font-sized": "2.7.6",
66
66
  "@tamagui/get-token": "2.7.6",
@@ -80,9 +80,9 @@
80
80
  },
81
81
  "devDependencies": {
82
82
  "@expo/ui": "~55.0.17",
83
- "@multiplatform.one/config": "7.71.0",
84
- "@multiplatform.one/storybook": "7.71.0",
85
- "@multiplatform.one/test-utils": "7.71.0",
83
+ "@multiplatform.one/config": "7.72.0",
84
+ "@multiplatform.one/storybook": "7.72.0",
85
+ "@multiplatform.one/test-utils": "7.72.0",
86
86
  "@tamagui/build": "2.7.6",
87
87
  "@tamagui/config": "2.7.6",
88
88
  "@tamagui/vite-plugin": "2.7.6",
@@ -7,6 +7,7 @@ import {
7
7
  createElement,
8
8
  isValidElement,
9
9
  useCallback,
10
+ useEffect,
10
11
  useId,
11
12
  useState,
12
13
  type ComponentType,
@@ -72,6 +73,7 @@ import { formatActionLabel } from "../actionLabel";
72
73
  import { formButtonColors, formCommonColors } from "../shared/colorRamps";
73
74
  import { warnBareDisabled, warnPositiveTabIndex, warnSizeRecipeEscape } from "../shared/devWarn";
74
75
  import { useControlGrouped } from "../shared/groupContext";
76
+ import { useInPanelEcho, usePanelTriggerRadiusReporter } from "../FloatingPanel/echoContext";
75
77
  import { loadGlassView } from "./glass";
76
78
  import { MEDIA_PLATE_WEB_STYLE } from "./mediaPlate";
77
79
  import { useIconButtonGroupGround, useIconButtonGroupMember } from "./iconButtonGroupContext";
@@ -635,6 +637,17 @@ export function Button({
635
637
  : undefined;
636
638
  const paintedRadius = resolveControlRadius(recipe, radiusStop ?? "medium");
637
639
  const innerGap = paintedRadius.gap;
640
+ // LC-112 seamless cover (FZ-8438): a native menu covering this button
641
+ // repeats its arc, and the button's echo inside that menu draws no chrome.
642
+ const inPanelEcho = useInPanelEcho();
643
+ const reportRadius = usePanelTriggerRadiusReporter();
644
+ // A circle reports no cap: the menu takes half its short side.
645
+ const reportedRadius = circular ? Number.POSITIVE_INFINITY : paintedRadius.radius;
646
+ useEffect(() => {
647
+ if (reportRadius && !inPanelEcho && !Number.isNaN(reportedRadius)) {
648
+ reportRadius(reportedRadius);
649
+ }
650
+ }, [reportRadius, inPanelEcho, reportedRadius]);
638
651
  // The one Skeleton (forms), at the button's own recipe height.
639
652
  const boneHeight = nested ? knobProps.nestedControl.px : recipe.height;
640
653
  if (skeleton) {
@@ -1220,6 +1233,15 @@ export function Button({
1220
1233
  height: "100%",
1221
1234
  }
1222
1235
  : undefined)}
1236
+ {...(inPanelEcho
1237
+ ? {
1238
+ borderColor: "transparent",
1239
+ backgroundColor: "transparent",
1240
+ elevation: undefined,
1241
+ shadowColor: "transparent",
1242
+ shadowOpacity: 0,
1243
+ }
1244
+ : undefined)}
1223
1245
  {...(resolvedRole ? { "data-mp-action-role": resolvedRole } : undefined)}
1224
1246
  {...(tier ? { "data-mp-tier": tier } : undefined)}
1225
1247
  {...(iconButton
@@ -0,0 +1,67 @@
1
+ /**
2
+ * LC-112 r3 (FZ-8438): when a consumer sets `panelWidth` and the panel opens
3
+ * wider than its field, the field's echo grows to the panel's end edge, so
4
+ * the value isn't cut short above rows that show it whole. A button echo, or
5
+ * an unset width, keeps the trigger's box.
6
+ */
7
+ import { afterEach, describe, expect, it } from "vitest";
8
+ import { placeEchoOverTrigger } from "./index";
9
+
10
+ function panel(field: boolean) {
11
+ const el = document.createElement("div");
12
+ const row = document.createElement("div");
13
+ row.setAttribute("data-fp-trigger-row", "");
14
+ row.style.width = "260px";
15
+ const visual = document.createElement("div");
16
+ const snapshot = document.createElement("div");
17
+ snapshot.style.width = "260px";
18
+ snapshot.appendChild(document.createElement(field ? "input" : "span"));
19
+ visual.appendChild(snapshot);
20
+ row.appendChild(visual);
21
+ el.appendChild(row);
22
+ document.body.appendChild(el);
23
+ return { el, row, snapshot };
24
+ }
25
+
26
+ const geometry = { triggerLeft: 16, triggerRight: 276, panelLeft: 16, panelWidth: 360 };
27
+
28
+ afterEach(() => {
29
+ document.body.replaceChildren();
30
+ });
31
+
32
+ describe("placeEchoOverTrigger stretch (LC-112 r3)", () => {
33
+ it("a field's echo grows from the field's start edge to the panel's end", () => {
34
+ const { el, row, snapshot } = panel(true);
35
+ placeEchoOverTrigger(el, geometry, { stretch: true });
36
+ expect(row.style.width).toBe("360px");
37
+ expect(snapshot.style.width).toBe("100%");
38
+ expect(row.style.translate).toBe("");
39
+ });
40
+
41
+ it("a panel slid to the start margin grows the echo only past the field's start", () => {
42
+ const { el, row } = panel(true);
43
+ placeEchoOverTrigger(el, { ...geometry, panelLeft: 10, panelWidth: 1420 }, { stretch: true });
44
+ expect(row.style.translate).toBe("6px 0");
45
+ expect(row.style.width).toBe("1414px");
46
+ });
47
+
48
+ it("an unset panelWidth keeps the trigger's box", () => {
49
+ const { el, row } = panel(true);
50
+ placeEchoOverTrigger(el, geometry);
51
+ expect(row.style.width).toBe("260px");
52
+ });
53
+
54
+ it("a button echo keeps its box, so a centred label never moves", () => {
55
+ const { el, row } = panel(false);
56
+ placeEchoOverTrigger(el, geometry, { stretch: true });
57
+ expect(row.style.width).toBe("260px");
58
+ });
59
+
60
+ it("a panel back at the trigger's width shrinks a stretched echo again", () => {
61
+ const { el, row, snapshot } = panel(true);
62
+ placeEchoOverTrigger(el, geometry, { stretch: true });
63
+ placeEchoOverTrigger(el, { ...geometry, panelWidth: 260 }, { stretch: true });
64
+ expect(row.style.width).toBe("260px");
65
+ expect(snapshot.style.width).toBe("");
66
+ });
67
+ });
@@ -7,9 +7,12 @@ import { renderWithProviders } from "@multiplatform.one/test-utils";
7
7
  import { act } from "@testing-library/react";
8
8
  import { useState, type ReactNode } from "react";
9
9
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
10
- import { Text, XStack, YStack } from "tamagui";
10
+ import { Text, XStack, YStack, getTokens, getVariableValue } from "tamagui";
11
+ import { Button } from "../Button";
12
+ import { Input as InputParts } from "../InputParts";
11
13
  import { OverlayStackProvider } from "../shared/overlayStack";
12
14
  import { MENU_MIN_WIDTH, type CompactFace } from "./compactFace";
15
+ import type { PanelWidth } from "./panelWidth";
13
16
  import { FloatingPanel } from "./index.native";
14
17
  import { panelViewportPadding } from "./useFloatingPanel";
15
18
 
@@ -49,13 +52,22 @@ afterEach(() => {
49
52
  vi.useRealTimers();
50
53
  });
51
54
 
52
- function Menu({ face, attach = false }: { face?: CompactFace; attach?: boolean }) {
55
+ function Menu({
56
+ face,
57
+ attach = false,
58
+ width,
59
+ }: {
60
+ face?: CompactFace;
61
+ attach?: boolean;
62
+ width?: PanelWidth;
63
+ }) {
53
64
  const [open, setOpen] = useState(false);
54
65
  return (
55
66
  <FloatingPanel
56
67
  open={open}
57
68
  onOpenChange={setOpen}
58
69
  compactFace={face}
70
+ {...(width === undefined ? null : { panelWidth: width })}
59
71
  {...(attach ? { anchorMode: "attach" as const, triggerEcho: false } : null)}
60
72
  triggerSizing="content"
61
73
  contentPadding="none"
@@ -207,6 +219,134 @@ describe("FloatingPanel native menu face (FZ-7830)", () => {
207
219
  });
208
220
  });
209
221
 
222
+ function IconMenu() {
223
+ const [open, setOpen] = useState(false);
224
+ return (
225
+ <FloatingPanel
226
+ open={open}
227
+ onOpenChange={setOpen}
228
+ compactFace="menu"
229
+ anchorMode="cover-trigger"
230
+ triggerEcho={false}
231
+ coverAlign="auto"
232
+ triggerSizing="content"
233
+ contentPadding="none"
234
+ trigger={<Text>◐</Text>}
235
+ triggerA11y={{ label: "Appearance" }}
236
+ >
237
+ <Text>System</Text>
238
+ </FloatingPanel>
239
+ );
240
+ }
241
+
242
+ function ButtonMenu() {
243
+ const [open, setOpen] = useState(false);
244
+ return (
245
+ <FloatingPanel
246
+ open={open}
247
+ onOpenChange={setOpen}
248
+ compactFace="menu"
249
+ contentPadding="none"
250
+ trigger={<Button data-testid="pill">Status: All</Button>}
251
+ triggerA11y={{ label: "Filter status" }}
252
+ >
253
+ <Text>Open</Text>
254
+ </FloatingPanel>
255
+ );
256
+ }
257
+
258
+ function FieldMenu() {
259
+ const [open, setOpen] = useState(false);
260
+ return (
261
+ <FloatingPanel
262
+ open={open}
263
+ onOpenChange={setOpen}
264
+ compactFace="menu"
265
+ contentPadding="none"
266
+ trigger={
267
+ <InputParts>
268
+ <InputParts.Box data-testid="field-box">
269
+ <Text>United States</Text>
270
+ </InputParts.Box>
271
+ </InputParts>
272
+ }
273
+ triggerA11y={{ label: "Country" }}
274
+ >
275
+ <Text>Canada</Text>
276
+ </FloatingPanel>
277
+ );
278
+ }
279
+
280
+ const frame = () =>
281
+ document.querySelector<HTMLElement>('[data-testid="floating-panel-menu-surface"]');
282
+ const corners = (el: Element) =>
283
+ Array.from(el.classList)
284
+ .filter((c) => /^_b[tb][lr]r-/.test(c))
285
+ .sort();
286
+ const radiusAtoms = (px: number) =>
287
+ [`_bblr-${px}px`, `_bbrr-${px}px`, `_btlr-${px}px`, `_btrr-${px}px`].sort();
288
+
289
+ describe("LC-112 seamless cover on native (FZ-8438)", () => {
290
+ it("opens an icon trigger's menu ON the button from its top trailing corner (rv_d86cc201997dffd4)", () => {
291
+ trigger = { x: 330, y: 60, width: 44, height: 44 };
292
+ const result = renderWithProviders(<IconMenu />);
293
+ tap(result.getByRole("button", { name: "Appearance" }));
294
+ const panel = menu() as HTMLElement;
295
+ layout(panel, MENU_MIN_WIDTH, 180);
296
+ expect(panel.style.top).toBe(`${trigger.y}px`);
297
+ expect(panel.style.left).toBe(`${trigger.x + trigger.width - MENU_MIN_WIDTH}px`);
298
+ expect(echo()).toBeNull();
299
+ expect(sheet()).toBeNull();
300
+ expect(corners(frame() as HTMLElement)).toEqual(radiusAtoms(22));
301
+ });
302
+
303
+ it("keeps the shadow on an unclipped frame and clips inside it (FZ-8414)", () => {
304
+ const result = renderWithProviders(<IconMenu />);
305
+ tap(result.getByRole("button", { name: "Appearance" }));
306
+ const outer = frame() as HTMLElement;
307
+ expect(outer.className).not.toMatch(/(?:^| )_ox-hidden|_ov-hidden|_o-hidden/);
308
+ expect(getComputedStyle(outer).overflow).not.toBe("hidden");
309
+ const inner = outer.firstElementChild as HTMLElement;
310
+ expect(inner.className).toMatch(/hidden/);
311
+ });
312
+
313
+ it("echoes a field with no border or fill of its own and repeats the field's arc", () => {
314
+ trigger = { x: 20, y: 240, width: 300, height: 44 };
315
+ const result = renderWithProviders(<FieldMenu />);
316
+ const live = result.getByTestId("field-box");
317
+ const atom = corners(live).find((c) => c.startsWith("_btlr-")) as string;
318
+ expect(atom).toBeTruthy();
319
+ const token = atom.match(/^_btlr-t-radius-(.+)$/);
320
+ const drawn = token
321
+ ? Number(getVariableValue((getTokens().radius as Record<string, unknown>)[`$${token[1]}`]))
322
+ : Number(atom.match(/^_btlr-([\d.]+)px$/)?.[1]);
323
+ tap(result.getByRole("button", { name: "Country" }));
324
+ const row = echo() as HTMLElement;
325
+ expect(row).not.toBeNull();
326
+ const box = row.querySelector('[data-testid="field-box"]') as HTMLElement;
327
+ expect(box.className).toMatch(/_bbc-transparent/);
328
+ expect(box.className).toMatch(/_bg-transparent/);
329
+ expect(live.className).not.toMatch(/_bbc-transparent/);
330
+ expect(corners(frame() as HTMLElement)).toEqual(radiusAtoms(Math.min(drawn, 22)));
331
+ });
332
+
333
+ it("echoes a labelled Button trigger with no border or fill of its own", () => {
334
+ trigger = { x: 20, y: 240, width: 140, height: 44 };
335
+ const result = renderWithProviders(<ButtonMenu />);
336
+ const live = result.getByTestId("pill");
337
+ tap(result.getByRole("button", { name: "Filter status" }));
338
+ const row = echo() as HTMLElement;
339
+ expect(row).not.toBeNull();
340
+ // The echo is the trigger's own box at the start edge, not the menu's width.
341
+ expect(row.style.width).toBe("140px");
342
+ expect(row.style.alignSelf).toBe("flex-start");
343
+ const pill = row.querySelector('[data-testid="pill"]') as HTMLElement;
344
+ expect(pill.className).toMatch(/_bbc-transparent|_btc-transparent/);
345
+ expect(pill.className).toMatch(/_bg-transparent/);
346
+ expect(live.className).not.toBe(pill.className);
347
+ });
348
+ });
349
+
210
350
  /** The SHC account menu's shape: an avatar-sized trigger over rows that fill their width. */
211
351
  function AccountMenu() {
212
352
  const [open, setOpen] = useState(false);
@@ -263,3 +403,54 @@ describe("FloatingPanel native menu face width (FZ-8220)", () => {
263
403
  expect(menu()?.style.minWidth).toBe("320px");
264
404
  });
265
405
  });
406
+
407
+ describe("FloatingPanel native menu face panelWidth (LC-112, FZ-8438 r3)", () => {
408
+ const room = 390 - 2 * panelViewportPadding;
409
+ const open = (width?: PanelWidth) => {
410
+ const result = renderWithProviders(<Menu face="menu" width={width} />);
411
+ tap(result.getByRole("button", { name: "Stack actions" }));
412
+ return menu() as HTMLElement;
413
+ };
414
+
415
+ it('"content" is the default: the 250pt pull-down floor, up to the room', () => {
416
+ const panel = open();
417
+ expect(panel.style.minWidth).toBe(`${MENU_MIN_WIDTH}px`);
418
+ expect(panel.style.maxWidth).toBe(`${room}px`);
419
+ expect(panel.style.width).toBe("");
420
+ });
421
+
422
+ it('"trigger" is exactly the trigger\'s width', () => {
423
+ const panel = open("trigger");
424
+ expect([panel.style.minWidth, panel.style.width, panel.style.maxWidth]).toEqual([
425
+ "120px",
426
+ "120px",
427
+ "120px",
428
+ ]);
429
+ });
430
+
431
+ it('"screen" from a trigger in the gutter spans the gutters, start edge on the trigger\'s', () => {
432
+ const panel = open("screen");
433
+ const gutters = 390 - 2 * trigger.x;
434
+ expect(panel.style.width).toBe(`${gutters}px`);
435
+ layout(panel, gutters, 180);
436
+ expect(panel.style.left).toBe(`${trigger.x}px`);
437
+ expect(panel.style.top).toBe(`${trigger.y}px`);
438
+ });
439
+
440
+ it('"screen" from a trigger deep in the row fills the room, top edge on the trigger\'s', () => {
441
+ trigger = { x: 186, y: 240, width: 120, height: 44 };
442
+ const panel = open("screen");
443
+ expect(panel.style.width).toBe(`${room}px`);
444
+ layout(panel, room, 180);
445
+ expect(panel.style.left).toBe(`${panelViewportPadding}px`);
446
+ expect(panel.style.top).toBe(`${trigger.y}px`);
447
+ });
448
+
449
+ it("a number is a fixed width, capped at the room", () => {
450
+ expect(open(300).style.width).toBe("300px");
451
+ });
452
+
453
+ it("a number wider than the room stops at the margins", () => {
454
+ expect(open(900).style.width).toBe(`${room}px`);
455
+ });
456
+ });
@@ -0,0 +1,237 @@
1
+ /**
2
+ * LC-112 seamless cover (FZ-8438, Clay's rv_a07d4308a6c445b6 and
3
+ * rv_0ea65e640a0ef261 notes; rv_d86cc201997dffd4 for icon triggers). An open
4
+ * panel is ONE surface laid exactly over its trigger: same top edge, left
5
+ * edge and corner arc, the trigger's content echoed in place with no border,
6
+ * fill or divider of its own, drawn above the trigger.
7
+ */
8
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
9
+ import { Preset } from "@multiplatform.one/theme";
10
+ import { fireEvent, waitFor, within } from "@testing-library/react";
11
+ import { useState } from "react";
12
+ import { afterEach, describe, expect, it, vi } from "vitest";
13
+ import { Text } from "tamagui";
14
+ import { Button } from "../Button";
15
+ import { FloatingPanel } from "./index";
16
+
17
+ type Rect = { x: number; y: number; width: number; height: number };
18
+
19
+ function measure(trigger: Rect, panelWidth = 240) {
20
+ const original = HTMLElement.prototype.getBoundingClientRect;
21
+ const rect = {
22
+ ...trigger,
23
+ top: trigger.y,
24
+ left: trigger.x,
25
+ right: trigger.x + trigger.width,
26
+ bottom: trigger.y + trigger.height,
27
+ toJSON: () => ({}),
28
+ };
29
+ vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
30
+ function (this: HTMLElement) {
31
+ if (this.hasAttribute("data-fp-reference") || this.dataset.testid === "field") return rect;
32
+ return original.call(this);
33
+ },
34
+ );
35
+ vi.spyOn(HTMLElement.prototype, "offsetWidth", "get").mockImplementation(
36
+ function (this: HTMLElement) {
37
+ return this.hasAttribute("data-fp-panel") ? panelWidth : 0;
38
+ },
39
+ );
40
+ vi.spyOn(HTMLElement.prototype, "scrollHeight", "get").mockImplementation(
41
+ function (this: HTMLElement) {
42
+ return this.hasAttribute("data-fp-panel") ? 160 : 0;
43
+ },
44
+ );
45
+ }
46
+
47
+ /** A field the way a browser paints it: border, fill and a 10px arc. */
48
+ function Field({ radius }: { radius: number }) {
49
+ return (
50
+ <div
51
+ data-testid="field"
52
+ role="combobox"
53
+ aria-expanded={false}
54
+ tabIndex={0}
55
+ style={{
56
+ borderTopLeftRadius: `${radius}px`,
57
+ borderRadius: `${radius}px`,
58
+ border: "1px solid rgb(200, 200, 200)",
59
+ borderBottom: "1px solid rgb(200, 200, 200)",
60
+ backgroundColor: "rgb(250, 250, 250)",
61
+ boxShadow: "0 1px 2px rgba(0, 0, 0, 0.1)",
62
+ }}
63
+ >
64
+ Mar 5, 2026
65
+ </div>
66
+ );
67
+ }
68
+
69
+ function FieldPanel({ radius = 10 }: { radius?: number }) {
70
+ const [open, setOpen] = useState(false);
71
+ return (
72
+ <FloatingPanel
73
+ open={open}
74
+ onOpenChange={setOpen}
75
+ contentPadding="none"
76
+ trigger={<Field radius={radius} />}
77
+ >
78
+ <Text>March 2026</Text>
79
+ </FloatingPanel>
80
+ );
81
+ }
82
+
83
+ function IconPanel({ align = "auto" }: { align?: "start" | "auto" }) {
84
+ const [open, setOpen] = useState(false);
85
+ return (
86
+ <FloatingPanel
87
+ open={open}
88
+ onOpenChange={setOpen}
89
+ anchorMode="cover-trigger"
90
+ triggerEcho={false}
91
+ coverAlign={align}
92
+ widthMode="fit-content"
93
+ triggerSizing="content"
94
+ trigger={<Button aria-label="Appearance">◐</Button>}
95
+ >
96
+ <Text>System</Text>
97
+ </FloatingPanel>
98
+ );
99
+ }
100
+
101
+ const corners = (el: Element) =>
102
+ Array.from(el.classList)
103
+ .filter((c) => /^_b[tb][lr]r-/.test(c))
104
+ .sort();
105
+
106
+ const radiusAtoms = (px: number) =>
107
+ [`_bblr-${px}px`, `_bbrr-${px}px`, `_btlr-${px}px`, `_btrr-${px}px`].sort();
108
+
109
+ async function openField(result: ReturnType<typeof renderWithProviders>) {
110
+ fireEvent.click(result.getByTestId("field"), { detail: 0 });
111
+ const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
112
+ return panel;
113
+ }
114
+
115
+ afterEach(() => {
116
+ vi.restoreAllMocks();
117
+ });
118
+
119
+ describe("LC-112 seamless cover: one surface over the field (FZ-8438)", () => {
120
+ const field = { x: 16, y: 42, width: 400, height: 40 };
121
+
122
+ it("lays the panel's top and start edges on the field's", async () => {
123
+ measure(field);
124
+ const result = renderWithProviders(<FieldPanel />);
125
+ const panel = await openField(result);
126
+ await waitFor(() => expect(panel.style.top).toBe(`${field.y}px`));
127
+ expect(panel.style.left).toBe(`${field.x}px`);
128
+ const echo = panel.querySelector<HTMLElement>("[data-fp-trigger-row]");
129
+ expect(echo?.style.width).toBe(`${field.width}px`);
130
+ expect(echo?.style.height).toBe(`${field.height}px`);
131
+ });
132
+
133
+ it("draws the field's own arc at all four corners", async () => {
134
+ measure(field);
135
+ const result = renderWithProviders(<FieldPanel radius={10} />);
136
+ const panel = await openField(result);
137
+ await waitFor(() => expect(corners(panel)).toEqual(radiusAtoms(10)));
138
+ });
139
+
140
+ it("keeps the field's arc past the container cap (full preset, 20px on a 40px field)", async () => {
141
+ measure(field);
142
+ const result = renderWithProviders(
143
+ <Preset overrides={{ borderRadius: "full" }}>
144
+ <FieldPanel radius={50} />
145
+ </Preset>,
146
+ );
147
+ const panel = await openField(result);
148
+ await waitFor(() => expect(corners(panel)).toEqual(radiusAtoms(20)));
149
+ });
150
+
151
+ it("echoes the field with no border, fill, shadow or divider of its own", async () => {
152
+ measure(field);
153
+ const result = renderWithProviders(<FieldPanel />);
154
+ const panel = await openField(result);
155
+ const frame = await waitFor(() => {
156
+ const found = panel.querySelector<HTMLElement>("[data-fp-echo-frame]");
157
+ expect(found).not.toBeNull();
158
+ return found as HTMLElement;
159
+ });
160
+ expect(frame.textContent).toBe("Mar 5, 2026");
161
+ expect(frame.style.getPropertyValue("border-color")).toBe("transparent");
162
+ expect(frame.style.getPropertyPriority("border-color")).toBe("important");
163
+ expect(frame.style.getPropertyValue("background-color")).toBe("transparent");
164
+ expect(frame.style.getPropertyValue("box-shadow")).toBe("none");
165
+ const bottom = getComputedStyle(frame).borderBottomColor;
166
+ expect(["transparent", "rgba(0, 0, 0, 0)"]).toContain(bottom);
167
+ // Layout keeps the field's widths, so the echoed text sits where it did.
168
+ expect(getComputedStyle(frame).borderBottomWidth).toBe("1px");
169
+ const row = panel.querySelector<HTMLElement>("[data-fp-trigger-row]") as HTMLElement;
170
+ expect(row.style.backgroundColor).toBe(getComputedStyle(panel).backgroundColor);
171
+ // The live field keeps its chrome; only the echo drops it.
172
+ expect(result.getByTestId("field").style.backgroundColor).toBe("rgb(250, 250, 250)");
173
+ });
174
+
175
+ it("draws above the field: a fixed, stacked layer later in the document", async () => {
176
+ measure(field);
177
+ const result = renderWithProviders(<FieldPanel />);
178
+ const panel = await openField(result);
179
+ await waitFor(() => expect(panel.style.top).toBe(`${field.y}px`));
180
+ expect(panel.style.position).toBe("fixed");
181
+ expect(Number(panel.style.zIndex)).toBeGreaterThan(0);
182
+ const live = result.getByTestId("field");
183
+ expect(live.compareDocumentPosition(panel) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
184
+ expect(live.contains(panel)).toBe(false);
185
+ });
186
+ });
187
+
188
+ describe("LC-112 icon trigger: the menu opens on its button (rv_d86cc201997dffd4)", () => {
189
+ it("opens from the button's top trailing corner at the end edge, with no echo row", async () => {
190
+ const viewportWidth = document.documentElement.clientWidth || window.innerWidth;
191
+ const button = { x: viewportWidth - 16 - 44, y: 12, width: 44, height: 44 };
192
+ measure(button, 200);
193
+ const result = renderWithProviders(<IconPanel />);
194
+ fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
195
+ const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
196
+ await waitFor(() => expect(panel.style.top).toBe(`${button.y}px`));
197
+ expect(panel.style.left).toBe(`${button.x + button.width - 200}px`);
198
+ expect(panel.style.transformOrigin).toBe("top right");
199
+ expect(panel.querySelector("[data-fp-trigger-row]")).toBeNull();
200
+ expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
201
+ });
202
+
203
+ it("opens from the button's top leading corner where that fits", async () => {
204
+ const button = { x: 16, y: 12, width: 44, height: 44 };
205
+ measure(button, 200);
206
+ const result = renderWithProviders(<IconPanel />);
207
+ fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
208
+ const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
209
+ await waitFor(() => expect(panel.style.top).toBe(`${button.y}px`));
210
+ expect(panel.style.left).toBe(`${button.x}px`);
211
+ expect(panel.style.transformOrigin).toBe("top left");
212
+ expect(within(panel).queryByRole("button", { name: "Appearance" })).toBeNull();
213
+ });
214
+
215
+ it("slides up over its button near the bottom edge instead of opening a sheet", async () => {
216
+ const button = { x: 16, y: window.innerHeight - 60, width: 44, height: 44 };
217
+ measure(button, 200);
218
+ const result = renderWithProviders(<IconPanel />);
219
+ fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
220
+ const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
221
+ await waitFor(() => expect(panel.style.visibility).toBe("visible"));
222
+ const top = parseFloat(panel.style.top);
223
+ expect(top).toBeLessThan(button.y);
224
+ expect(top + 160).toBeGreaterThanOrEqual(button.y + button.height);
225
+ expect(panel.style.left).toBe(`${button.x}px`);
226
+ expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
227
+ });
228
+
229
+ it("never end-aligns a custom first row (triggerEcho off, coverAlign start): it collides to the sheet", async () => {
230
+ const viewportWidth = document.documentElement.clientWidth || window.innerWidth;
231
+ const button = { x: viewportWidth - 16 - 44, y: 12, width: 44, height: 44 };
232
+ measure(button, 200);
233
+ const result = renderWithProviders(<IconPanel align="start" />);
234
+ fireEvent.click(result.getByRole("button", { name: "Appearance" }), { detail: 0 });
235
+ expect(await result.findByTestId("floating-panel-sheet")).toBeTruthy();
236
+ });
237
+ });