@multiplatform.one/forms 7.80.0 → 7.81.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 (587) hide show
  1. package/dist/cjs/AdaptivePopup/index.cjs +1 -1
  2. package/dist/cjs/AdaptivePopup/index.native.js +3 -3
  3. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  4. package/dist/cjs/Button/IconButtonGroup.native.js.map +1 -1
  5. package/dist/cjs/Button/circleGlyph.native.js.map +1 -1
  6. package/dist/cjs/Button/iconButtonGroupContext.native.js.map +1 -1
  7. package/dist/cjs/Button/index.cjs +12 -5
  8. package/dist/cjs/Button/index.native.js +16 -8
  9. package/dist/cjs/Button/index.native.js.map +1 -1
  10. package/dist/cjs/Button/webGlass.native.js.map +1 -1
  11. package/dist/cjs/Chip/index.native.js.map +1 -1
  12. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js +1 -1
  13. package/dist/cjs/ContextualSaveBar/UnsavedChangesDialog.native.js.map +1 -1
  14. package/dist/cjs/ContextualSaveBar/clientKnownIdentity.native.js.map +1 -1
  15. package/dist/cjs/ContextualSaveBar/commitImmediateField.native.js.map +1 -1
  16. package/dist/cjs/ContextualSaveBar/index.native.js +3 -3
  17. package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
  18. package/dist/cjs/ContextualSaveBar/useUnsavedChangesGuard.native.js.map +1 -1
  19. package/dist/cjs/ControlGroup/index.native.js +1 -1
  20. package/dist/cjs/ControlGroup/index.native.js.map +1 -1
  21. package/dist/cjs/DescriptionList/index.native.js +2 -2
  22. package/dist/cjs/DescriptionList/index.native.js.map +1 -1
  23. package/dist/cjs/ErrorSummary.native.js.map +1 -1
  24. package/dist/cjs/FieldDisplay/editMode.native.js.map +1 -1
  25. package/dist/cjs/FieldDisplay/formatters.native.js.map +1 -1
  26. package/dist/cjs/FieldDisplay/index.native.js +1 -1
  27. package/dist/cjs/FieldDisplay/index.native.js.map +1 -1
  28. package/dist/cjs/FieldGroup.native.js.map +1 -1
  29. package/dist/cjs/FloatingPanel/PanelHeader.cjs +3 -8
  30. package/dist/cjs/FloatingPanel/PanelHeader.native.js +3 -8
  31. package/dist/cjs/FloatingPanel/PanelHeader.native.js.map +1 -1
  32. package/dist/cjs/FloatingPanel/RegularPanel.native.js.map +1 -1
  33. package/dist/cjs/FloatingPanel/compactFace.native.js.map +1 -1
  34. package/dist/cjs/FloatingPanel/containingBlock.native.js.map +1 -1
  35. package/dist/cjs/FloatingPanel/coverRect.cjs +0 -8
  36. package/dist/cjs/FloatingPanel/coverRect.native.js +0 -8
  37. package/dist/cjs/FloatingPanel/coverRect.native.js.map +1 -1
  38. package/dist/cjs/FloatingPanel/echoContext.cjs +5 -27
  39. package/dist/cjs/FloatingPanel/echoContext.native.js +5 -28
  40. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -1
  41. package/dist/cjs/FloatingPanel/index.cjs +49 -131
  42. package/dist/cjs/FloatingPanel/index.native.js +26 -91
  43. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  44. package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -1
  45. package/dist/cjs/FloatingPanel/paintedBox.native.js.map +1 -1
  46. package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -1
  47. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
  48. package/dist/cjs/FloatingPanel/regularPlacement.native.js.map +1 -1
  49. package/dist/cjs/FloatingPanel/trailingAction.native.js +1 -1
  50. package/dist/cjs/FloatingPanel/trailingAction.native.js.map +1 -1
  51. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  52. package/dist/cjs/Form/index.native.js +1 -1
  53. package/dist/cjs/Form/index.native.js.map +1 -1
  54. package/dist/cjs/Form/submissionController.native.js.map +1 -1
  55. package/dist/cjs/Form/validateOn.native.js.map +1 -1
  56. package/dist/cjs/FormGrid.native.js.map +1 -1
  57. package/dist/cjs/FormSection.native.js.map +1 -1
  58. package/dist/cjs/InputParts/PasswordReveal.native.js.map +1 -1
  59. package/dist/cjs/InputParts/index.native.js.map +1 -1
  60. package/dist/cjs/InputParts/keyboardAppearance.native.js.map +1 -1
  61. package/dist/cjs/Label/index.native.js.map +1 -1
  62. package/dist/cjs/MediaPicker/base64.native.js.map +1 -1
  63. package/dist/cjs/MediaPicker/payload.native.js.map +1 -1
  64. package/dist/cjs/MediaPicker/types.native.js.map +1 -1
  65. package/dist/cjs/MediaPicker/useMediaPicker.native.js.map +1 -1
  66. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  67. package/dist/cjs/Spinner/SpinnerGlyph.native.js.map +1 -1
  68. package/dist/cjs/Spinner/spinnerSize.native.js.map +1 -1
  69. package/dist/cjs/Table/index.native.js.map +1 -1
  70. package/dist/cjs/Wheel/haptic.native.js.map +1 -1
  71. package/dist/cjs/Wheel/index.native.js.map +1 -1
  72. package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
  73. package/dist/cjs/actionLabel.native.js.map +1 -1
  74. package/dist/cjs/fieldDefaults.native.js.map +1 -1
  75. package/dist/cjs/fieldLayout.native.js +1 -1
  76. package/dist/cjs/fieldLayout.native.js.map +1 -1
  77. package/dist/cjs/fields/Barcode/BarcodePreview.native.js.map +1 -1
  78. package/dist/cjs/fields/Barcode/BarcodeScanner.native.js +1 -1
  79. package/dist/cjs/fields/Barcode/code128.native.js.map +1 -1
  80. package/dist/cjs/fields/Barcode/index.native.js +2 -2
  81. package/dist/cjs/fields/Barcode/index.native.js.map +1 -1
  82. package/dist/cjs/fields/Barcode/qr.native.js.map +1 -1
  83. package/dist/cjs/fields/Barcode/scannerTypes.native.js.map +1 -1
  84. package/dist/cjs/fields/Checkbox/Checkbox.native.js +1 -1
  85. package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
  86. package/dist/cjs/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  87. package/dist/cjs/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  88. package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  89. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +1 -1
  90. package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  91. package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  92. package/dist/cjs/fields/Checkbox/index.native.js.map +1 -1
  93. package/dist/cjs/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  94. package/dist/cjs/fields/ColorPicker/index.native.js +2 -2
  95. package/dist/cjs/fields/ColorPicker/index.native.js.map +1 -1
  96. package/dist/cjs/fields/ColorPicker/parts.native.js +2 -2
  97. package/dist/cjs/fields/ColorPicker/parts.native.js.map +1 -1
  98. package/dist/cjs/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  99. package/dist/cjs/fields/Combobox/authorOptions.native.js.map +1 -1
  100. package/dist/cjs/fields/Combobox/index.cjs +3 -10
  101. package/dist/cjs/fields/Combobox/index.native.js +8 -15
  102. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  103. package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
  104. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
  105. package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  106. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +3 -3
  107. package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  108. package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +2 -2
  109. package/dist/cjs/fields/DatePicker/MonthPicker.native.js +2 -2
  110. package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
  111. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
  112. package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  113. package/dist/cjs/fields/DatePicker/catalog.native.js +2 -2
  114. package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
  115. package/dist/cjs/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  116. package/dist/cjs/fields/DatePicker/index.native.js +2 -2
  117. package/dist/cjs/fields/DatePicker/parts.native.js +2 -2
  118. package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
  119. package/dist/cjs/fields/DatePicker/utils.native.js.map +1 -1
  120. package/dist/cjs/fields/Duration/DurationWheel.native.js +1 -1
  121. package/dist/cjs/fields/Duration/durationMath.native.js.map +1 -1
  122. package/dist/cjs/fields/Duration/durationWheelTypes.native.js.map +1 -1
  123. package/dist/cjs/fields/Duration/index.native.js +3 -3
  124. package/dist/cjs/fields/Duration/index.native.js.map +1 -1
  125. package/dist/cjs/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  126. package/dist/cjs/fields/FileUpload/index.native.js +2 -2
  127. package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
  128. package/dist/cjs/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  129. package/dist/cjs/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  130. package/dist/cjs/fields/Geolocation/geoValue.native.js.map +1 -1
  131. package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -1
  132. package/dist/cjs/fields/Geolocation/geocoderContext.native.js.map +1 -1
  133. package/dist/cjs/fields/Geolocation/index.native.js +5 -5
  134. package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
  135. package/dist/cjs/fields/Geolocation/mapMath.native.js.map +1 -1
  136. package/dist/cjs/fields/Geolocation/mapTypes.native.js.map +1 -1
  137. package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  138. package/dist/cjs/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  139. package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
  140. package/dist/cjs/fields/Icon/index.native.js +3 -3
  141. package/dist/cjs/fields/Icon/index.native.js.map +1 -1
  142. package/dist/cjs/fields/ImageField/index.native.js +2 -2
  143. package/dist/cjs/fields/ImageField/index.native.js.map +1 -1
  144. package/dist/cjs/fields/Input/index.native.js +3 -3
  145. package/dist/cjs/fields/Input/index.native.js.map +1 -1
  146. package/dist/cjs/fields/MentionInput/index.native.js +3 -3
  147. package/dist/cjs/fields/MentionInput/index.native.js.map +1 -1
  148. package/dist/cjs/fields/OTPInput/index.native.js +3 -3
  149. package/dist/cjs/fields/OTPInput/index.native.js.map +1 -1
  150. package/dist/cjs/fields/OTPInput/otpCellCss.native.js.map +1 -1
  151. package/dist/cjs/fields/PhoneInput/dialCodes.native.js.map +1 -1
  152. package/dist/cjs/fields/PhoneInput/index.native.js +3 -3
  153. package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
  154. package/dist/cjs/fields/PhoneInput/phone.native.js.map +1 -1
  155. package/dist/cjs/fields/PhoneInput/regionNames.native.js.map +1 -1
  156. package/dist/cjs/fields/Progress/index.native.js +1 -1
  157. package/dist/cjs/fields/Progress/index.native.js.map +1 -1
  158. package/dist/cjs/fields/RadioGroup/index.native.js +1 -1
  159. package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
  160. package/dist/cjs/fields/Rating/index.native.js +1 -1
  161. package/dist/cjs/fields/Rating/index.native.js.map +1 -1
  162. package/dist/cjs/fields/Rating/ratingMath.native.js.map +1 -1
  163. package/dist/cjs/fields/Rating/types.native.js.map +1 -1
  164. package/dist/cjs/fields/SearchInput/index.native.js +2 -2
  165. package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
  166. package/dist/cjs/fields/Select/InlineChoices.cjs +4 -8
  167. package/dist/cjs/fields/Select/InlineChoices.native.js +4 -8
  168. package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
  169. package/dist/cjs/fields/Select/SheetPickerRow.native.js.map +1 -1
  170. package/dist/cjs/fields/Select/index.cjs +46 -199
  171. package/dist/cjs/fields/Select/index.native.js +56 -211
  172. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  173. package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
  174. package/dist/cjs/fields/Signature/index.native.js +2 -2
  175. package/dist/cjs/fields/Signature/index.native.js.map +1 -1
  176. package/dist/cjs/fields/Slider/index.native.js +1 -1
  177. package/dist/cjs/fields/Slider/index.native.js.map +1 -1
  178. package/dist/cjs/fields/Slider/jumpMotion.native.js.map +1 -1
  179. package/dist/cjs/fields/Stepper/index.native.js +2 -2
  180. package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
  181. package/dist/cjs/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  182. package/dist/cjs/fields/Switch/footprint.native.js.map +1 -1
  183. package/dist/cjs/fields/Switch/index.native.js +2 -2
  184. package/dist/cjs/fields/Switch/index.native.js.map +1 -1
  185. package/dist/cjs/fields/TextArea/index.native.js +2 -2
  186. package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
  187. package/dist/cjs/fields/TimePicker/catalog.native.js +3 -3
  188. package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
  189. package/dist/cjs/fields/TimePicker/index.native.js +2 -2
  190. package/dist/cjs/fields/TimePicker/parts.native.js +1 -1
  191. package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
  192. package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  193. package/dist/cjs/fields/TimeRangeScrubber/index.native.js +2 -2
  194. package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
  195. package/dist/cjs/fields/ToggleGroup/index.native.js +1 -1
  196. package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
  197. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +2 -2
  198. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +3 -3
  199. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  200. package/dist/cjs/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  201. package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  202. package/dist/cjs/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  203. package/dist/cjs/fields/nativeSelect.native.js.map +1 -1
  204. package/dist/cjs/fields/selectedOrder.native.js.map +1 -1
  205. package/dist/cjs/formSpacing.native.js.map +1 -1
  206. package/dist/cjs/hooks/useFocusManagement.native.js.map +1 -1
  207. package/dist/cjs/index.cjs +4 -0
  208. package/dist/cjs/index.native.js +49 -45
  209. package/dist/cjs/index.native.js.map +1 -1
  210. package/dist/cjs/keyboard/KeyboardDoneBar.native.js +1 -1
  211. package/dist/cjs/keyboard/chain.native.js.map +1 -1
  212. package/dist/cjs/keyboard/index.native.js.map +1 -1
  213. package/dist/cjs/keyboard/types.native.js.map +1 -1
  214. package/dist/cjs/requiredMarking.native.js.map +1 -1
  215. package/dist/cjs/shared/CheckGlyph.cjs +40 -0
  216. package/dist/cjs/shared/CheckGlyph.native.js +44 -0
  217. package/dist/cjs/shared/CheckGlyph.native.js.map +1 -0
  218. package/dist/cjs/shared/TimeColumn.native.js +1 -1
  219. package/dist/cjs/shared/TimeColumn.native.js.map +1 -1
  220. package/dist/cjs/shared/capabilityPreflight.native.js.map +1 -1
  221. package/dist/cjs/shared/choiceRowPress.native.js.map +1 -1
  222. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  223. package/dist/cjs/shared/devWarn.native.js.map +1 -1
  224. package/dist/cjs/shared/fieldRowContext.native.js.map +1 -1
  225. package/dist/cjs/shared/floatingList.cjs +82 -3
  226. package/dist/cjs/shared/floatingList.native.js +96 -6
  227. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  228. package/dist/cjs/shared/focusManagement.native.js.map +1 -1
  229. package/dist/cjs/shared/groupContext.native.js.map +1 -1
  230. package/dist/cjs/shared/i18n.native.js.map +1 -1
  231. package/dist/cjs/shared/instantMotion.native.js.map +1 -1
  232. package/dist/cjs/shared/nativeA11y.native.js.map +1 -1
  233. package/dist/cjs/shared/nativeAutoFocus.native.js.map +1 -1
  234. package/dist/cjs/shared/overlaySizeClass.native.js.map +1 -1
  235. package/dist/cjs/shared/overlayStack.native.js.map +1 -1
  236. package/dist/cjs/shared/panelPortal.native.js.map +1 -1
  237. package/dist/cjs/shared/pickerTriggerContract.native.js.map +1 -1
  238. package/dist/cjs/shared/pressSlopProps.native.js.map +1 -1
  239. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  240. package/dist/cjs/shared/sheetNavigation.native.js.map +1 -1
  241. package/dist/cjs/shared/systemControlModules.gnome.native.js.map +1 -1
  242. package/dist/cjs/shared/systemControls.native.js.map +1 -1
  243. package/dist/cjs/shared/t.native.js.map +1 -1
  244. package/dist/cjs/shared/tableCellContext.native.js.map +1 -1
  245. package/dist/cjs/shared/useDragScroll.native.js.map +1 -1
  246. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  247. package/dist/cjs/shared/useSheetEscapeDismiss.native.js.map +1 -1
  248. package/dist/cjs/shared/useWheelIncrement.native.js.map +1 -1
  249. package/dist/cjs/shared/utils.native.js +1 -1
  250. package/dist/cjs/shared/utils.native.js.map +1 -1
  251. package/dist/cjs/shared/zIndex.native.js.map +1 -1
  252. package/dist/cjs/standardActions.native.js.map +1 -1
  253. package/dist/cjs/themedPrimitives.native.js.map +1 -1
  254. package/dist/cjs/types.native.js.map +1 -1
  255. package/dist/cjs/utils/LinkCell.native.js.map +1 -1
  256. package/dist/esm/AdaptivePopup/index.mjs +2 -2
  257. package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
  258. package/dist/esm/AdaptivePopup/index.native.js +2 -2
  259. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  260. package/dist/esm/Button/IconButtonGroup.native.js.map +1 -1
  261. package/dist/esm/Button/circleGlyph.native.js.map +1 -1
  262. package/dist/esm/Button/iconButtonGroupContext.native.js.map +1 -1
  263. package/dist/esm/Button/index.mjs +12 -5
  264. package/dist/esm/Button/index.mjs.map +1 -1
  265. package/dist/esm/Button/index.native.js +14 -6
  266. package/dist/esm/Button/index.native.js.map +1 -1
  267. package/dist/esm/Button/webGlass.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/PanelHeader.mjs +3 -8
  282. package/dist/esm/FloatingPanel/PanelHeader.mjs.map +1 -1
  283. package/dist/esm/FloatingPanel/PanelHeader.native.js +3 -8
  284. package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -1
  285. package/dist/esm/FloatingPanel/RegularPanel.native.js.map +1 -1
  286. package/dist/esm/FloatingPanel/compactFace.native.js.map +1 -1
  287. package/dist/esm/FloatingPanel/containingBlock.native.js.map +1 -1
  288. package/dist/esm/FloatingPanel/coverRect.mjs +1 -8
  289. package/dist/esm/FloatingPanel/coverRect.mjs.map +1 -1
  290. package/dist/esm/FloatingPanel/coverRect.native.js +1 -8
  291. package/dist/esm/FloatingPanel/coverRect.native.js.map +1 -1
  292. package/dist/esm/FloatingPanel/echoContext.mjs +4 -24
  293. package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -1
  294. package/dist/esm/FloatingPanel/echoContext.native.js +4 -25
  295. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
  296. package/dist/esm/FloatingPanel/index.mjs +53 -135
  297. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  298. package/dist/esm/FloatingPanel/index.native.js +30 -95
  299. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  300. package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -1
  301. package/dist/esm/FloatingPanel/paintedBox.native.js.map +1 -1
  302. package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -1
  303. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
  304. package/dist/esm/FloatingPanel/regularPlacement.native.js.map +1 -1
  305. package/dist/esm/FloatingPanel/trailingAction.native.js.map +1 -1
  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.native.js.map +1 -1
  314. package/dist/esm/InputParts/keyboardAppearance.native.js.map +1 -1
  315. package/dist/esm/Label/index.native.js.map +1 -1
  316. package/dist/esm/MediaPicker/base64.native.js.map +1 -1
  317. package/dist/esm/MediaPicker/payload.native.js.map +1 -1
  318. package/dist/esm/MediaPicker/types.native.js.map +1 -1
  319. package/dist/esm/MediaPicker/useMediaPicker.native.js.map +1 -1
  320. package/dist/esm/Skeleton/index.native.js.map +1 -1
  321. package/dist/esm/Spinner/SpinnerGlyph.native.js.map +1 -1
  322. package/dist/esm/Spinner/spinnerSize.native.js.map +1 -1
  323. package/dist/esm/Table/index.native.js.map +1 -1
  324. package/dist/esm/Wheel/haptic.native.js.map +1 -1
  325. package/dist/esm/Wheel/index.native.js.map +1 -1
  326. package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
  327. package/dist/esm/actionLabel.native.js.map +1 -1
  328. package/dist/esm/fieldDefaults.native.js.map +1 -1
  329. package/dist/esm/fieldLayout.native.js.map +1 -1
  330. package/dist/esm/fields/Barcode/BarcodePreview.native.js.map +1 -1
  331. package/dist/esm/fields/Barcode/code128.native.js.map +1 -1
  332. package/dist/esm/fields/Barcode/index.native.js.map +1 -1
  333. package/dist/esm/fields/Barcode/qr.native.js.map +1 -1
  334. package/dist/esm/fields/Barcode/scannerTypes.native.js.map +1 -1
  335. package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
  336. package/dist/esm/fields/Checkbox/CheckboxBox.native.js.map +1 -1
  337. package/dist/esm/fields/Checkbox/CheckboxCard.native.js.map +1 -1
  338. package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
  339. package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
  340. package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -1
  341. package/dist/esm/fields/Checkbox/index.native.js.map +1 -1
  342. package/dist/esm/fields/ColorPicker/SystemColorField.native.js.map +1 -1
  343. package/dist/esm/fields/ColorPicker/index.native.js.map +1 -1
  344. package/dist/esm/fields/ColorPicker/parts.native.js.map +1 -1
  345. package/dist/esm/fields/ColorPicker/systemColorWell.gnome.native.js.map +1 -1
  346. package/dist/esm/fields/Combobox/authorOptions.native.js.map +1 -1
  347. package/dist/esm/fields/Combobox/index.mjs +4 -11
  348. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  349. package/dist/esm/fields/Combobox/index.native.js +4 -11
  350. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  351. package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
  352. package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
  353. package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
  354. package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
  355. package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
  356. package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
  357. package/dist/esm/fields/DatePicker/fieldValueSync.native.js.map +1 -1
  358. package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
  359. package/dist/esm/fields/DatePicker/utils.native.js.map +1 -1
  360. package/dist/esm/fields/Duration/durationMath.native.js.map +1 -1
  361. package/dist/esm/fields/Duration/durationWheelTypes.native.js.map +1 -1
  362. package/dist/esm/fields/Duration/index.native.js.map +1 -1
  363. package/dist/esm/fields/FileUpload/filePickerTypes.native.js.map +1 -1
  364. package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
  365. package/dist/esm/fields/FileUpload/nativePickerLoader.native.js.map +1 -1
  366. package/dist/esm/fields/Geolocation/expoMapsLoader.native.js.map +1 -1
  367. package/dist/esm/fields/Geolocation/geoValue.native.js.map +1 -1
  368. package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -1
  369. package/dist/esm/fields/Geolocation/geocoderContext.native.js.map +1 -1
  370. package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
  371. package/dist/esm/fields/Geolocation/mapMath.native.js.map +1 -1
  372. package/dist/esm/fields/Geolocation/mapTypes.native.js.map +1 -1
  373. package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -1
  374. package/dist/esm/fields/Geolocation/photonGeocoder.native.js.map +1 -1
  375. package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
  376. package/dist/esm/fields/Icon/index.native.js.map +1 -1
  377. package/dist/esm/fields/ImageField/index.native.js.map +1 -1
  378. package/dist/esm/fields/Input/index.native.js.map +1 -1
  379. package/dist/esm/fields/MentionInput/index.native.js.map +1 -1
  380. package/dist/esm/fields/OTPInput/index.native.js.map +1 -1
  381. package/dist/esm/fields/OTPInput/otpCellCss.native.js.map +1 -1
  382. package/dist/esm/fields/PhoneInput/dialCodes.native.js.map +1 -1
  383. package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
  384. package/dist/esm/fields/PhoneInput/phone.native.js.map +1 -1
  385. package/dist/esm/fields/PhoneInput/regionNames.native.js.map +1 -1
  386. package/dist/esm/fields/Progress/index.native.js.map +1 -1
  387. package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
  388. package/dist/esm/fields/Rating/index.native.js.map +1 -1
  389. package/dist/esm/fields/Rating/ratingMath.native.js.map +1 -1
  390. package/dist/esm/fields/Rating/types.native.js.map +1 -1
  391. package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
  392. package/dist/esm/fields/Select/InlineChoices.mjs +2 -6
  393. package/dist/esm/fields/Select/InlineChoices.mjs.map +1 -1
  394. package/dist/esm/fields/Select/InlineChoices.native.js +2 -6
  395. package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
  396. package/dist/esm/fields/Select/SheetPickerRow.native.js.map +1 -1
  397. package/dist/esm/fields/Select/index.mjs +49 -202
  398. package/dist/esm/fields/Select/index.mjs.map +1 -1
  399. package/dist/esm/fields/Select/index.native.js +55 -210
  400. package/dist/esm/fields/Select/index.native.js.map +1 -1
  401. package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
  402. package/dist/esm/fields/Signature/index.native.js.map +1 -1
  403. package/dist/esm/fields/Slider/index.native.js.map +1 -1
  404. package/dist/esm/fields/Slider/jumpMotion.native.js.map +1 -1
  405. package/dist/esm/fields/Stepper/index.native.js.map +1 -1
  406. package/dist/esm/fields/Stepper/resolveStepperPlacement.native.js.map +1 -1
  407. package/dist/esm/fields/Switch/footprint.native.js.map +1 -1
  408. package/dist/esm/fields/Switch/index.native.js.map +1 -1
  409. package/dist/esm/fields/TextArea/index.native.js.map +1 -1
  410. package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
  411. package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
  412. package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
  413. package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
  414. package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
  415. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +3 -3
  416. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  417. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +3 -3
  418. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  419. package/dist/esm/fields/nativeDateTime/dateTimePickerLoader.native.js.map +1 -1
  420. package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -1
  421. package/dist/esm/fields/nativeDateTime/sheetKeyboard.native.js.map +1 -1
  422. package/dist/esm/fields/nativeSelect.native.js.map +1 -1
  423. package/dist/esm/fields/selectedOrder.native.js.map +1 -1
  424. package/dist/esm/formSpacing.native.js.map +1 -1
  425. package/dist/esm/hooks/useFocusManagement.native.js.map +1 -1
  426. package/dist/esm/index.mjs +3 -1
  427. package/dist/esm/index.mjs.map +1 -1
  428. package/dist/esm/index.native.js +3 -1
  429. package/dist/esm/index.native.js.map +1 -1
  430. package/dist/esm/keyboard/chain.native.js.map +1 -1
  431. package/dist/esm/keyboard/index.native.js.map +1 -1
  432. package/dist/esm/keyboard/types.native.js.map +1 -1
  433. package/dist/esm/requiredMarking.native.js.map +1 -1
  434. package/dist/esm/shared/CheckGlyph.mjs +15 -0
  435. package/dist/esm/shared/CheckGlyph.mjs.map +1 -0
  436. package/dist/esm/shared/CheckGlyph.native.js +16 -0
  437. package/dist/esm/shared/CheckGlyph.native.js.map +1 -0
  438. package/dist/esm/shared/TimeColumn.native.js.map +1 -1
  439. package/dist/esm/shared/capabilityPreflight.native.js.map +1 -1
  440. package/dist/esm/shared/choiceRowPress.native.js.map +1 -1
  441. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  442. package/dist/esm/shared/devWarn.native.js.map +1 -1
  443. package/dist/esm/shared/fieldRowContext.native.js.map +1 -1
  444. package/dist/esm/shared/floatingList.mjs +80 -4
  445. package/dist/esm/shared/floatingList.mjs.map +1 -1
  446. package/dist/esm/shared/floatingList.native.js +93 -6
  447. package/dist/esm/shared/floatingList.native.js.map +1 -1
  448. package/dist/esm/shared/focusManagement.native.js.map +1 -1
  449. package/dist/esm/shared/groupContext.native.js.map +1 -1
  450. package/dist/esm/shared/i18n.native.js.map +1 -1
  451. package/dist/esm/shared/instantMotion.native.js.map +1 -1
  452. package/dist/esm/shared/nativeA11y.native.js.map +1 -1
  453. package/dist/esm/shared/nativeAutoFocus.native.js.map +1 -1
  454. package/dist/esm/shared/overlaySizeClass.native.js.map +1 -1
  455. package/dist/esm/shared/overlayStack.native.js.map +1 -1
  456. package/dist/esm/shared/panelPortal.native.js.map +1 -1
  457. package/dist/esm/shared/pickerTriggerContract.native.js.map +1 -1
  458. package/dist/esm/shared/pressSlopProps.native.js.map +1 -1
  459. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  460. package/dist/esm/shared/sheetNavigation.native.js.map +1 -1
  461. package/dist/esm/shared/systemControlModules.gnome.native.js.map +1 -1
  462. package/dist/esm/shared/systemControls.native.js.map +1 -1
  463. package/dist/esm/shared/t.native.js.map +1 -1
  464. package/dist/esm/shared/tableCellContext.native.js.map +1 -1
  465. package/dist/esm/shared/useDragScroll.native.js.map +1 -1
  466. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  467. package/dist/esm/shared/useSheetEscapeDismiss.native.js.map +1 -1
  468. package/dist/esm/shared/useWheelIncrement.native.js.map +1 -1
  469. package/dist/esm/shared/utils.native.js.map +1 -1
  470. package/dist/esm/shared/zIndex.native.js.map +1 -1
  471. package/dist/esm/standardActions.native.js.map +1 -1
  472. package/dist/esm/themedPrimitives.native.js.map +1 -1
  473. package/dist/esm/types.native.js.map +1 -1
  474. package/dist/esm/utils/LinkCell.native.js.map +1 -1
  475. package/dist/jsx/AdaptivePopup/index.mjs +2 -2
  476. package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
  477. package/dist/jsx/AdaptivePopup/index.native.js +1 -1
  478. package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
  479. package/dist/jsx/Button/index.mjs +12 -5
  480. package/dist/jsx/Button/index.mjs.map +1 -1
  481. package/dist/jsx/Button/index.native.js +14 -6
  482. package/dist/jsx/Button/index.native.js.map +1 -1
  483. package/dist/jsx/FloatingPanel/PanelHeader.mjs +3 -8
  484. package/dist/jsx/FloatingPanel/PanelHeader.mjs.map +1 -1
  485. package/dist/jsx/FloatingPanel/PanelHeader.native.js +3 -8
  486. package/dist/jsx/FloatingPanel/PanelHeader.native.js.map +1 -1
  487. package/dist/jsx/FloatingPanel/coverRect.mjs +1 -8
  488. package/dist/jsx/FloatingPanel/coverRect.mjs.map +1 -1
  489. package/dist/jsx/FloatingPanel/coverRect.native.js +0 -8
  490. package/dist/jsx/FloatingPanel/coverRect.native.js.map +1 -1
  491. package/dist/jsx/FloatingPanel/echoContext.mjs +4 -24
  492. package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -1
  493. package/dist/jsx/FloatingPanel/echoContext.native.js +5 -28
  494. package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -1
  495. package/dist/jsx/FloatingPanel/index.mjs +53 -135
  496. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  497. package/dist/jsx/FloatingPanel/index.native.js +26 -91
  498. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  499. package/dist/jsx/fields/Combobox/index.mjs +4 -11
  500. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  501. package/dist/jsx/fields/Combobox/index.native.js +3 -10
  502. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  503. package/dist/jsx/fields/Select/InlineChoices.mjs +2 -6
  504. package/dist/jsx/fields/Select/InlineChoices.mjs.map +1 -1
  505. package/dist/jsx/fields/Select/InlineChoices.native.js +4 -8
  506. package/dist/jsx/fields/Select/InlineChoices.native.js.map +1 -1
  507. package/dist/jsx/fields/Select/index.mjs +49 -202
  508. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  509. package/dist/jsx/fields/Select/index.native.js +52 -207
  510. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  511. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +3 -3
  512. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  513. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +2 -2
  514. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  515. package/dist/jsx/index.js +3 -1
  516. package/dist/jsx/index.js.map +1 -1
  517. package/dist/jsx/index.mjs +3 -1
  518. package/dist/jsx/index.mjs.map +1 -1
  519. package/dist/jsx/index.native.js +4 -0
  520. package/dist/jsx/index.native.js.map +1 -1
  521. package/dist/jsx/shared/CheckGlyph.mjs +15 -0
  522. package/dist/jsx/shared/CheckGlyph.mjs.map +1 -0
  523. package/dist/jsx/shared/CheckGlyph.native.js +44 -0
  524. package/dist/jsx/shared/CheckGlyph.native.js.map +1 -0
  525. package/dist/jsx/shared/floatingList.mjs +80 -4
  526. package/dist/jsx/shared/floatingList.mjs.map +1 -1
  527. package/dist/jsx/shared/floatingList.native.js +95 -5
  528. package/dist/jsx/shared/floatingList.native.js.map +1 -1
  529. package/package.json +8 -8
  530. package/src/AdaptivePopup/index.tsx +2 -2
  531. package/src/Button/Button.iconButton.spec.tsx +39 -0
  532. package/src/Button/index.tsx +20 -8
  533. package/src/FloatingPanel/FloatingPanel.iconCover.spec.tsx +279 -0
  534. package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +78 -69
  535. package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +12 -0
  536. package/src/FloatingPanel/PanelHeader.tsx +4 -12
  537. package/src/FloatingPanel/coverRect.ts +2 -15
  538. package/src/FloatingPanel/echoContext.ts +6 -40
  539. package/src/FloatingPanel/index.native.tsx +36 -145
  540. package/src/FloatingPanel/index.tsx +61 -187
  541. package/src/FloatingPanel/pointAnchor.spec.ts +1 -1
  542. package/src/FloatingPanel/pointAnchor.ts +4 -4
  543. package/src/fields/Combobox/index.tsx +4 -9
  544. package/src/fields/Select/InlineChoices.tsx +2 -2
  545. package/src/fields/Select/Select.containingBlock.spec.tsx +131 -130
  546. package/src/fields/Select/Select.stories.tsx +10 -0
  547. package/src/fields/Select/index.tsx +66 -253
  548. package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +3 -3
  549. package/src/index.ts +2 -1
  550. package/src/shared/CheckGlyph.tsx +12 -0
  551. package/src/shared/floatingList.spec.tsx +154 -1
  552. package/src/shared/floatingList.tsx +125 -8
  553. package/types/Button/index.d.ts.map +1 -1
  554. package/types/FloatingPanel/PanelHeader.d.ts +1 -6
  555. package/types/FloatingPanel/PanelHeader.d.ts.map +1 -1
  556. package/types/FloatingPanel/coverRect.d.ts +2 -11
  557. package/types/FloatingPanel/coverRect.d.ts.map +1 -1
  558. package/types/FloatingPanel/echoContext.d.ts +5 -22
  559. package/types/FloatingPanel/echoContext.d.ts.map +1 -1
  560. package/types/FloatingPanel/index.d.ts +6 -8
  561. package/types/FloatingPanel/index.d.ts.map +1 -1
  562. package/types/FloatingPanel/index.native.d.ts +1 -1
  563. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  564. package/types/FloatingPanel/pointAnchor.d.ts +4 -4
  565. package/types/fields/Combobox/index.d.ts.map +1 -1
  566. package/types/fields/Select/index.d.ts.map +1 -1
  567. package/types/index.d.ts +2 -1
  568. package/types/index.d.ts.map +1 -1
  569. package/types/shared/CheckGlyph.d.ts +10 -0
  570. package/types/shared/CheckGlyph.d.ts.map +1 -0
  571. package/types/shared/floatingList.d.ts +55 -1
  572. package/types/shared/floatingList.d.ts.map +1 -1
  573. package/dist/cjs/FloatingPanel/iconEcho.cjs +0 -106
  574. package/dist/cjs/FloatingPanel/iconEcho.native.js +0 -116
  575. package/dist/cjs/FloatingPanel/iconEcho.native.js.map +0 -1
  576. package/dist/esm/FloatingPanel/iconEcho.mjs +0 -79
  577. package/dist/esm/FloatingPanel/iconEcho.mjs.map +0 -1
  578. package/dist/esm/FloatingPanel/iconEcho.native.js +0 -86
  579. package/dist/esm/FloatingPanel/iconEcho.native.js.map +0 -1
  580. package/dist/jsx/FloatingPanel/iconEcho.mjs +0 -79
  581. package/dist/jsx/FloatingPanel/iconEcho.mjs.map +0 -1
  582. package/dist/jsx/FloatingPanel/iconEcho.native.js +0 -116
  583. package/dist/jsx/FloatingPanel/iconEcho.native.js.map +0 -1
  584. package/src/FloatingPanel/FloatingPanel.iconEcho.spec.tsx +0 -357
  585. package/src/FloatingPanel/iconEcho.tsx +0 -124
  586. package/types/FloatingPanel/iconEcho.d.ts +0 -29
  587. package/types/FloatingPanel/iconEcho.d.ts.map +0 -1
@@ -1,357 +0,0 @@
1
- /**
2
- * LC-112 icon trigger echo (FZ-8480, Clay's rv_2607879d3bdaf9bf): a panel
3
- * that covers the icon button it opened from draws that button again in its
4
- * exact spot, same size and plate, as an X (Round 37: every icon trigger,
5
- * the + and a menu's button alike). It closes the panel and reads "Close".
6
- */
7
- import { PlusIcon, XIcon } from "@phosphor-icons/react";
8
- import { renderWithProviders } from "@multiplatform.one/test-utils";
9
- import { fireEvent, render, waitFor, within } from "@testing-library/react";
10
- import { useState } from "react";
11
- import { MIN_PRESS_TARGET, Surface, useBarSurface } from "@multiplatform.one/theme";
12
- import { afterEach, describe, expect, it, vi } from "vitest";
13
- import { Text } from "tamagui";
14
- import { Button } from "../Button";
15
- import { GLYPH_BOLD_STROKE_UNITS } from "../Button/circleGlyph";
16
- import { FloatingPanel } from "./index";
17
- import { usePanelIconEchoBox } from "./echoContext";
18
- import { PanelHeader } from "./PanelHeader";
19
- import type { IconEcho } from "./iconEcho";
20
-
21
- type Rect = { x: number; y: number; width: number; height: number };
22
-
23
- function measure(trigger: Rect, panelWidth = 240, panelHeight = 160, surface?: Rect) {
24
- const original = HTMLElement.prototype.getBoundingClientRect;
25
- const rect = {
26
- ...trigger,
27
- top: trigger.y,
28
- left: trigger.x,
29
- right: trigger.x + trigger.width,
30
- bottom: trigger.y + trigger.height,
31
- toJSON: () => ({}),
32
- };
33
- vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
34
- function (this: HTMLElement) {
35
- if (this.hasAttribute("data-fp-reference")) return rect;
36
- if (surface && this.hasAttribute("data-fp-cover-surface")) {
37
- return {
38
- ...surface,
39
- top: surface.y,
40
- left: surface.x,
41
- right: surface.x + surface.width,
42
- bottom: surface.y + surface.height,
43
- toJSON: () => ({}),
44
- };
45
- }
46
- return original.call(this);
47
- },
48
- );
49
- vi.spyOn(HTMLElement.prototype, "offsetWidth", "get").mockImplementation(
50
- function (this: HTMLElement) {
51
- return this.hasAttribute("data-fp-panel") ? panelWidth : 0;
52
- },
53
- );
54
- vi.spyOn(HTMLElement.prototype, "scrollHeight", "get").mockImplementation(
55
- function (this: HTMLElement) {
56
- return this.hasAttribute("data-fp-panel") ? panelHeight : 0;
57
- },
58
- );
59
- }
60
-
61
- function EchoBoxProbe() {
62
- const box = usePanelIconEchoBox();
63
- return box ? (
64
- <span
65
- data-testid="echo-box"
66
- data-height={box.height}
67
- data-left={box.left}
68
- data-right={box.right}
69
- />
70
- ) : null;
71
- }
72
-
73
- function AddPanel({ kind = "close", header = false }: { kind?: IconEcho; header?: boolean }) {
74
- const [open, setOpen] = useState(false);
75
- return (
76
- <FloatingPanel
77
- open={open}
78
- onOpenChange={setOpen}
79
- anchorMode="cover-trigger"
80
- compactFace="menu"
81
- triggerEcho={false}
82
- iconEcho={kind}
83
- coverAlign="auto"
84
- widthMode="fit-content"
85
- triggerSizing="content"
86
- contentPadding="none"
87
- trigger={<Button icon={PlusIcon} aria-label="Add node" />}
88
- >
89
- {header ? (
90
- <PanelHeader>
91
- <Text>Add a node</Text>
92
- <EchoBoxProbe />
93
- </PanelHeader>
94
- ) : (
95
- <Text>Add a node</Text>
96
- )}
97
- <Button>Copy</Button>
98
- </FloatingPanel>
99
- );
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
-
127
- const glyphPath = (node: Element | null | undefined) =>
128
- node?.querySelector("svg path")?.getAttribute("d");
129
-
130
- async function open(result: ReturnType<typeof renderWithProviders>) {
131
- fireEvent.click(result.getByRole("button", { name: "Add node" }), { detail: 0 });
132
- const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
133
- await waitFor(() => expect(panel.style.visibility).toBe("visible"));
134
- return panel;
135
- }
136
-
137
- afterEach(() => {
138
- vi.restoreAllMocks();
139
- });
140
-
141
- describe("LC-112 icon trigger echo on the web (FZ-8480)", () => {
142
- const viewportWidth = () => document.documentElement.clientWidth || window.innerWidth;
143
-
144
- it("draws the + again as an X on the button's exact box at the panel's top trailing corner", async () => {
145
- const button = { x: viewportWidth() - 16 - 44, y: 12, width: 44, height: 44 };
146
- measure(button, 240);
147
- const result = renderWithProviders(<AddPanel />);
148
- const panel = await open(result);
149
- const panelLeft = button.x + button.width - 240;
150
- expect(panel.style.top).toBe(`${button.y}px`);
151
- expect(panel.style.left).toBe(`${panelLeft}px`);
152
- const row = panel.querySelector<HTMLElement>("[data-fp-icon-echo]") as HTMLElement;
153
- expect(row.style.order).toBe("-1");
154
- expect(row.style.height).toBe(`${button.height}px`);
155
- // The X shares the content's first row, like a sheet's close button: it
156
- // takes no height of its own.
157
- expect(row.getAttribute("data-fp-icon-echo")).toBe("overlay");
158
- const borderTop = parseFloat(getComputedStyle(panel).borderTopWidth) || 0;
159
- expect(row.style.marginBottom).toBe(`${-(button.height - borderTop)}px`);
160
- const box = row.querySelector<HTMLElement>("[data-fp-icon-echo-box]") as HTMLElement;
161
- expect(box.style.width).toBe(`${button.width}px`);
162
- expect(box.style.height).toBe(`${button.height}px`);
163
- expect(box.style.marginLeft).toBe(`${button.x - panelLeft}px`);
164
- const echo = within(panel).getByRole("button", { name: "Close" });
165
- const x = render(<XIcon weight="bold" />);
166
- expect(glyphPath(echo)).toBe(glyphPath(x.container));
167
- x.unmount();
168
- expect(glyphPath(echo)).not.toBe(glyphPath(result.getByRole("button", { name: "Add node" })));
169
- expect(panel.querySelector("[data-fp-trigger-row]")).toBeNull();
170
- });
171
-
172
- it("renders the echo on the trigger's bar surface, so it keeps the bar button's plate", async () => {
173
- measure({ x: 16, y: 12, width: 44, height: 44 });
174
- function BarProbe({ icon: _icon, ...rest }: { icon?: unknown; [key: string]: unknown }) {
175
- const bar = useBarSurface();
176
- const press = rest.onPress as (() => void) | undefined;
177
- return (
178
- <button
179
- type="button"
180
- aria-label={rest["aria-label"] as string}
181
- data-bar={String(bar)}
182
- onClick={() => press?.()}
183
- />
184
- );
185
- }
186
- const result = renderWithProviders(
187
- <Surface bar>
188
- <FloatingPanel
189
- open
190
- onOpenChange={() => {}}
191
- anchorMode="cover-trigger"
192
- compactFace="menu"
193
- triggerEcho={false}
194
- iconEcho="close"
195
- coverAlign="auto"
196
- widthMode="fit-content"
197
- triggerSizing="content"
198
- trigger={<BarProbe icon={PlusIcon} aria-label="Add node" />}
199
- >
200
- <Text>Add a node</Text>
201
- </FloatingPanel>
202
- </Surface>,
203
- );
204
- const panel = (await result.findByTestId("floating-panel-viewport")) as HTMLElement;
205
- expect(within(panel).getByRole("button", { name: "Close" }).getAttribute("data-bar")).toBe(
206
- "true",
207
- );
208
- });
209
-
210
- it("covers a grouped trigger's whole plate, only the pressed trigger showing as its X", async () => {
211
- const button = { x: viewportWidth() - 16 - 44, y: 12, width: 44, height: 44 };
212
- const plate = { x: button.x - 100, y: 12, width: 144, height: 44 };
213
- measure(button, 120, 160, plate);
214
- const result = renderWithProviders(
215
- <div data-fp-cover-surface="">
216
- <Button icon={PlusIcon} aria-label="Search" />
217
- <AddPanel kind="menu" />
218
- </div>,
219
- );
220
- const panel = await open(result);
221
- // The plate is wider than the menu, so the menu takes the plate's width
222
- // and both edges.
223
- expect(panel.style.left).toBe(`${plate.x}px`);
224
- expect(panel.style.top).toBe(`${plate.y}px`);
225
- const row = panel.querySelector<HTMLElement>("[data-fp-icon-echo]") as HTMLElement;
226
- // The band covers the whole plate; the group's other buttons are covered,
227
- // not echoed.
228
- expect(row.getAttribute("data-fp-icon-echo")).toBe("band");
229
- expect(row.style.height).toBe(`${plate.height}px`);
230
- expect(row.querySelector("[data-fp-group-echo]")).toBeNull();
231
- expect(within(panel).queryByRole("button", { name: "Search" })).toBeNull();
232
- const box = row.querySelector<HTMLElement>("[data-fp-icon-echo-box]") as HTMLElement;
233
- expect(box.style.marginLeft).toBe(`${button.x - plate.x}px`);
234
- expect(within(panel).getByRole("button", { name: "Close" })).toBeTruthy();
235
- });
236
-
237
- it("closes the panel when the echo is pressed", async () => {
238
- measure({ x: 16, y: 12, width: 44, height: 44 });
239
- const result = renderWithProviders(<AddPanel />);
240
- const panel = await open(result);
241
- fireEvent.click(within(panel).getByRole("button", { name: "Close" }));
242
- await waitFor(() => expect(result.queryByTestId("floating-panel-viewport")).toBeNull());
243
- });
244
-
245
- it("turns a menu trigger into an X too, in its own band", async () => {
246
- measure({ x: 16, y: 12, width: 44, height: 44 });
247
- const result = renderWithProviders(<AddPanel kind="menu" />);
248
- const panel = await open(result);
249
- const echo = within(panel).getByRole("button", { name: "Close" });
250
- const x = render(<XIcon weight="bold" />);
251
- expect(glyphPath(echo)).toBe(glyphPath(x.container));
252
- x.unmount();
253
- // A menu's rows run the full width, so its X takes its own band.
254
- const row = panel.querySelector<HTMLElement>("[data-fp-icon-echo]") as HTMLElement;
255
- expect(row.getAttribute("data-fp-icon-echo")).toBe("band");
256
- expect(row.style.marginBottom).toBe("");
257
- });
258
-
259
- it("puts a panel header on the X's line, clear of the X", async () => {
260
- const button = { x: viewportWidth() - 16 - 44, y: 12, width: 44, height: 44 };
261
- measure(button, 240);
262
- const result = renderWithProviders(<AddPanel header />);
263
- const panel = await open(result);
264
- expect(panel.querySelector("[data-fp-panel-header]")).toBeTruthy();
265
- const box = await within(panel).findByTestId("echo-box");
266
- // The header takes the X's height, and the X sits at the end edge, so it
267
- // keeps the X's whole box clear there: from the X's start to the panel's end.
268
- const panelLeft = button.x + button.width - 240;
269
- expect(box.dataset.height).toBe(`${button.height}`);
270
- expect(box.dataset.left).toBe("0");
271
- expect(box.dataset.right).toBe(`${240 - (button.x - panelLeft)}`);
272
- });
273
-
274
- it("keeps a content-sized trigger on a centring row's line", async () => {
275
- measure({ x: 16, y: 12, width: 44, height: 44 });
276
- const centred = renderWithProviders(
277
- <div style={{ display: "flex", flexDirection: "row", alignItems: "center", height: 60 }}>
278
- <AddPanel />
279
- </div>,
280
- );
281
- const inRow = centred.container.querySelector<HTMLElement>(
282
- "[data-fp-reference]",
283
- ) as HTMLElement;
284
- await waitFor(() => expect(getComputedStyle(inRow).alignSelf).not.toBe("flex-start"));
285
- centred.unmount();
286
- const column = renderWithProviders(
287
- <div style={{ display: "flex", flexDirection: "column", alignItems: "stretch" }}>
288
- <AddPanel />
289
- </div>,
290
- );
291
- const inColumn = column.container.querySelector<HTMLElement>(
292
- "[data-fp-reference]",
293
- ) as HTMLElement;
294
- expect(getComputedStyle(inColumn).alignSelf).toBe("flex-start");
295
- });
296
-
297
- it("comes last in the document, so a keyboard open lands on the content first", async () => {
298
- measure({ x: 16, y: 12, width: 44, height: 44 });
299
- const result = renderWithProviders(<AddPanel />);
300
- const panel = await open(result);
301
- const buttons = within(panel).getAllByRole("button");
302
- expect(buttons.map((b) => b.textContent || b.getAttribute("aria-label"))).toEqual([
303
- "Copy",
304
- "Close",
305
- ]);
306
- });
307
-
308
- it("opens up from the button's bottom edge near the bottom, the echo on the bottom row", async () => {
309
- const button = { x: 16, y: window.innerHeight - 60, width: 44, height: 44 };
310
- measure(button, 240, 300);
311
- const result = renderWithProviders(<AddPanel />);
312
- const panel = await open(result);
313
- const frame = getComputedStyle(panel);
314
- const borders =
315
- (parseFloat(frame.borderTopWidth) || 0) + (parseFloat(frame.borderBottomWidth) || 0);
316
- expect(parseFloat(panel.style.top) + 300 + borders).toBe(button.y + button.height);
317
- expect(panel.style.left).toBe(`${button.x}px`);
318
- const row = panel.querySelector<HTMLElement>("[data-fp-icon-echo]") as HTMLElement;
319
- expect(row.style.order).toBe("1");
320
- expect(panel.style.transformOrigin).toBe("bottom left");
321
- expect(result.queryByTestId("floating-panel-sheet")).toBeNull();
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
- });
357
- });
@@ -1,124 +0,0 @@
1
- import { XIcon } from "@phosphor-icons/react";
2
- import { cloneElement, isValidElement, useState, type ReactElement, type ReactNode } from "react";
3
- import { SurfaceContext, type SurfaceIntent } from "@multiplatform.one/theme";
4
- import { useTheme, View } from "tamagui";
5
- import { boldStroke, ICON_BUTTON_CIRCLE_GLYPH_RATIO } from "../Button/circleGlyph";
6
- import { t } from "../shared/t";
7
-
8
- /**
9
- * How a panel covering an icon-only trigger shows the pressed button (LC-112,
10
- * FZ-8480 Round 37): in its exact spot, turned into an X that closes the
11
- * panel, the way iOS morphs a + into an X. `"close"` lays the X over the
12
- * content's header row (a panel's title shares the X's line); `"menu"` gives
13
- * the X its own band above the rows, which run the panel's full width.
14
- */
15
- export type IconEcho = "close" | "menu";
16
-
17
- export const ICON_ECHO_TEST_ID = "floating-panel-icon-echo";
18
-
19
- const DROPPED_PROPS = [
20
- "id",
21
- "onLongPress",
22
- "onKeyDown",
23
- "onContextMenu",
24
- "aria-haspopup",
25
- "aria-expanded",
26
- "aria-controls",
27
- "aria-describedby",
28
- "tooltip",
29
- ] as const;
30
-
31
- /**
32
- * An X sits in the panel's corner over the content's header row, the way a
33
- * sheet's close button shares the row with its title; a menu's X takes its
34
- * own band above the rows. A panel that opened upward always gives the echo
35
- * its own band.
36
- */
37
- export function iconEchoOverlays(kind: IconEcho, up: boolean): boolean {
38
- return kind === "close" && !up;
39
- }
40
-
41
- /**
42
- * The pressed trigger drawn again over its panel as an X: the same element
43
- * with the same size and plate and an X for its glyph, a fresh render that
44
- * shares none of the consumer's refs. It renders on the trigger's own
45
- * surface, so a bar button keeps its bar treatment (on iOS its own Liquid
46
- * Glass circle) inside the panel. Pressing it closes the panel, and it reads
47
- * "Close". A button (anything with an `icon`) is the control itself; any
48
- * other trigger (an avatar) becomes an X in a circle of its size.
49
- */
50
- export function iconEchoElement(
51
- trigger: ReactNode,
52
- kind: IconEcho,
53
- onClose: () => void,
54
- surface?: SurfaceIntent,
55
- ): ReactNode {
56
- const echo = echoOf(trigger, kind, onClose);
57
- if (echo == null || !surface) return echo;
58
- return <SurfaceContext.Provider {...surface}>{echo}</SurfaceContext.Provider>;
59
- }
60
-
61
- function echoOf(trigger: ReactNode, _kind: IconEcho, onClose: () => void): ReactNode {
62
- if (!isValidElement(trigger)) return null;
63
- const props = trigger.props as { icon?: unknown };
64
- const label = t("Close");
65
- const dropped = Object.fromEntries(DROPPED_PROPS.map((name) => [name, undefined]));
66
- if (props.icon != null) {
67
- return cloneElement(trigger as ReactElement<Record<string, unknown>>, {
68
- ...dropped,
69
- ref: null,
70
- icon: XIcon,
71
- "aria-label": label,
72
- onPress: onClose,
73
- testID: ICON_ECHO_TEST_ID,
74
- "data-testid": ICON_ECHO_TEST_ID,
75
- });
76
- }
77
- return <CircleClose label={label} onClose={onClose} />;
78
- }
79
-
80
- /** The plate an avatar draws by default, so its X keeps the avatar's circle. */
81
- const avatarPlate = "$selectedBackground";
82
-
83
- /** The X's glyph before the circle has measured itself. */
84
- const circleGlyphFallbackPx = 18;
85
-
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
- */
91
- function CircleClose({ label, onClose }: { label: string; onClose: () => void }) {
92
- const theme = useTheme();
93
- const [side, setSide] = useState(0);
94
- const ink = theme.selectedColor?.val ?? theme.color?.val;
95
- return (
96
- <View
97
- role="button"
98
- aria-label={label}
99
- tabIndex={0}
100
- cursor="pointer"
101
- width="100%"
102
- height="100%"
103
- borderRadius={100000}
104
- backgroundColor={avatarPlate}
105
- alignItems="center"
106
- justifyContent="center"
107
- pressStyle={{ opacity: 0.6 }}
108
- onPress={onClose}
109
- onLayout={(event) =>
110
- setSide(Math.min(event.nativeEvent.layout.width, event.nativeEvent.layout.height))
111
- }
112
- testID={ICON_ECHO_TEST_ID}
113
- data-testid={ICON_ECHO_TEST_ID}
114
- >
115
- <XIcon
116
- size={side > 0 ? Math.round(side * ICON_BUTTON_CIRCLE_GLYPH_RATIO) : circleGlyphFallbackPx}
117
- weight="bold"
118
- color={ink}
119
- {...boldStroke("bold", typeof ink === "string" ? ink : undefined)}
120
- aria-hidden
121
- />
122
- </View>
123
- );
124
- }
@@ -1,29 +0,0 @@
1
- import { type ReactNode } from "react";
2
- import { type SurfaceIntent } from "@multiplatform.one/theme";
3
- /**
4
- * How a panel covering an icon-only trigger shows the pressed button (LC-112,
5
- * FZ-8480 Round 37): in its exact spot, turned into an X that closes the
6
- * panel, the way iOS morphs a + into an X. `"close"` lays the X over the
7
- * content's header row (a panel's title shares the X's line); `"menu"` gives
8
- * the X its own band above the rows, which run the panel's full width.
9
- */
10
- export type IconEcho = "close" | "menu";
11
- export declare const ICON_ECHO_TEST_ID = "floating-panel-icon-echo";
12
- /**
13
- * An X sits in the panel's corner over the content's header row, the way a
14
- * sheet's close button shares the row with its title; a menu's X takes its
15
- * own band above the rows. A panel that opened upward always gives the echo
16
- * its own band.
17
- */
18
- export declare function iconEchoOverlays(kind: IconEcho, up: boolean): boolean;
19
- /**
20
- * The pressed trigger drawn again over its panel as an X: the same element
21
- * with the same size and plate and an X for its glyph, a fresh render that
22
- * shares none of the consumer's refs. It renders on the trigger's own
23
- * surface, so a bar button keeps its bar treatment (on iOS its own Liquid
24
- * Glass circle) inside the panel. Pressing it closes the panel, and it reads
25
- * "Close". A button (anything with an `icon`) is the control itself; any
26
- * other trigger (an avatar) becomes an X in a circle of its size.
27
- */
28
- export declare function iconEchoElement(trigger: ReactNode, kind: IconEcho, onClose: () => void, surface?: SurfaceIntent): ReactNode;
29
- //# sourceMappingURL=iconEcho.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"iconEcho.d.ts","sourceRoot":"","sources":["../../src/FloatingPanel/iconEcho.tsx"],"names":[],"mappings":"AACA,OAAO,EAA6D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClG,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9E;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExC,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAc5D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,EAClB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,IAAI,EACnB,OAAO,CAAC,EAAE,aAAa,GACtB,SAAS,CAIX"}