@astryxdesign/core 0.7.7 → 0.7.8-canary.0588a13

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 (798) hide show
  1. package/dist/AlertDialog/AlertDialog.d.ts +4 -1
  2. package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
  3. package/dist/AlertDialog/AlertDialog.js +46 -6
  4. package/dist/AppShell/AppShell.d.ts.map +1 -1
  5. package/dist/AppShell/AppShell.js +11 -3
  6. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheet.js +1 -0
  8. package/dist/BottomSheet/BottomSheetPanel.d.ts +1 -1
  9. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  10. package/dist/BottomSheet/BottomSheetPanel.js +55 -18
  11. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  12. package/dist/BottomSheet/BottomSheetSwitcher.js +5 -0
  13. package/dist/BottomSheet/bottomSheetStack.js +1 -1
  14. package/dist/BottomSheet/useSheetGestures.d.ts +3 -1
  15. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  16. package/dist/BottomSheet/useSheetGestures.js +16 -1
  17. package/dist/Button/Button.d.ts.map +1 -1
  18. package/dist/Button/Button.js +17 -1
  19. package/dist/Calendar/Calendar.d.ts.map +1 -1
  20. package/dist/Calendar/Calendar.js +18 -22
  21. package/dist/Calendar/getWeekdayHeaderNames.d.ts +16 -0
  22. package/dist/Calendar/getWeekdayHeaderNames.d.ts.map +1 -0
  23. package/dist/Calendar/getWeekdayHeaderNames.js +70 -0
  24. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  25. package/dist/Calendar/hooks/useCalendarDays.js +2 -10
  26. package/dist/Calendar/{standaloneShortWeekdayNames.generated.d.ts → weekdayHeaderNames.generated.d.ts} +14 -14
  27. package/dist/Calendar/weekdayHeaderNames.generated.d.ts.map +1 -0
  28. package/dist/Calendar/{standaloneShortWeekdayNames.generated.js → weekdayHeaderNames.generated.js} +12 -12
  29. package/dist/Carousel/Carousel.d.ts.map +1 -1
  30. package/dist/Carousel/Carousel.js +2 -0
  31. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  32. package/dist/Chat/ChatComposerInput.js +6 -1
  33. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  34. package/dist/Chat/ChatMessageList.js +2 -1
  35. package/dist/Chat/useChatDictation.d.ts.map +1 -1
  36. package/dist/Chat/useChatDictation.js +2 -0
  37. package/dist/Chat/useChatNewMessages.js +1 -1
  38. package/dist/Chat/useChatStreamScroll.d.ts.map +1 -1
  39. package/dist/Chat/useChatStreamScroll.js +2 -0
  40. package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
  41. package/dist/Chat/useSpeechRecognition.js +3 -0
  42. package/dist/Chat/useTriggerMenu.js +1 -1
  43. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  44. package/dist/CheckboxInput/CheckboxInput.js +17 -12
  45. package/dist/CheckboxList/CheckboxList.d.ts +20 -2
  46. package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
  47. package/dist/CheckboxList/CheckboxList.js +12 -4
  48. package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
  49. package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
  50. package/dist/CheckboxList/CheckboxListContext.js +2 -1
  51. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  52. package/dist/CheckboxList/CheckboxListItem.js +14 -2
  53. package/dist/CheckboxList/requiredGroup.d.ts +22 -0
  54. package/dist/CheckboxList/requiredGroup.d.ts.map +1 -0
  55. package/dist/CheckboxList/requiredGroup.js +52 -0
  56. package/dist/CodeBlock/CodeBlock.d.ts +10 -1
  57. package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
  58. package/dist/CodeBlock/CodeBlock.js +28 -11
  59. package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
  60. package/dist/CommandPalette/CommandPalette.js +2 -0
  61. package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
  62. package/dist/CommandPalette/CommandPaletteItem.js +2 -0
  63. package/dist/ComplexSelector/ComplexSelector.d.ts +4 -1
  64. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  65. package/dist/ComplexSelector/ComplexSelector.js +14 -4
  66. package/dist/ContextMenu/ContextMenu.js +2 -2
  67. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  68. package/dist/DateInput/MonthScroller.js +5 -2
  69. package/dist/DateInput/PickerWheel.d.ts +19 -0
  70. package/dist/DateInput/PickerWheel.d.ts.map +1 -0
  71. package/dist/DateInput/PickerWheel.js +646 -0
  72. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  73. package/dist/DateInput/TouchDateField.js +9 -30
  74. package/dist/DateInput/Wheel.d.ts +18 -37
  75. package/dist/DateInput/Wheel.d.ts.map +1 -1
  76. package/dist/DateInput/Wheel.js +133 -120
  77. package/dist/DateInput/datePickerTouch.d.ts +13 -0
  78. package/dist/DateInput/datePickerTouch.d.ts.map +1 -0
  79. package/dist/DateInput/datePickerTouch.js +14 -0
  80. package/dist/DateInput/useOwnScrollGesture.d.ts +10 -0
  81. package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -1
  82. package/dist/DateInput/useOwnScrollGesture.js +16 -3
  83. package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
  84. package/dist/DateInput/usePointerDragScroll.js +2 -0
  85. package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
  86. package/dist/DateInput/useScrollSettle.js +3 -0
  87. package/dist/DateInput/useWheelListbox.d.ts +59 -0
  88. package/dist/DateInput/useWheelListbox.d.ts.map +1 -0
  89. package/dist/DateInput/useWheelListbox.js +88 -0
  90. package/dist/DateInput/wheelOptions.d.ts +94 -0
  91. package/dist/DateInput/wheelOptions.d.ts.map +1 -0
  92. package/dist/DateInput/wheelOptions.js +110 -0
  93. package/dist/DateInput/wheelPhysics.d.ts +127 -0
  94. package/dist/DateInput/wheelPhysics.d.ts.map +1 -0
  95. package/dist/DateInput/wheelPhysics.js +341 -0
  96. package/dist/DateInput/wheelStrip.d.ts +92 -0
  97. package/dist/DateInput/wheelStrip.d.ts.map +1 -0
  98. package/dist/DateInput/wheelStrip.js +258 -0
  99. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  100. package/dist/DateTimeInput/TouchDateTimeField.js +70 -127
  101. package/dist/Dialog/Dialog.d.ts.map +1 -1
  102. package/dist/Dialog/Dialog.js +9 -32
  103. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  104. package/dist/Drawer/useDrawerDialogPresence.js +3 -0
  105. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  106. package/dist/DropdownMenu/useMenuOverflow.js +5 -0
  107. package/dist/Field/Field.js +2 -2
  108. package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts.map +1 -1
  109. package/dist/FieldStatus/useFieldStatusAnnouncement.js +1 -0
  110. package/dist/FormLayout/FormLayout.d.ts +5 -1
  111. package/dist/FormLayout/FormLayout.d.ts.map +1 -1
  112. package/dist/HoverCard/HoverCard.d.ts +6 -4
  113. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  114. package/dist/HoverCard/HoverCard.js +48 -3
  115. package/dist/HoverCard/useHoverCard.d.ts +5 -4
  116. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  117. package/dist/HoverCard/useHoverCard.js +26 -34
  118. package/dist/Icon/Icon.d.ts +5 -1
  119. package/dist/Icon/Icon.d.ts.map +1 -1
  120. package/dist/Icon/Icon.js +20 -3
  121. package/dist/InfoTip/InfoTip.d.ts +5 -5
  122. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  123. package/dist/InfoTip/InfoTip.js +58 -19
  124. package/dist/Item/useSwipeAction.d.ts.map +1 -1
  125. package/dist/Item/useSwipeAction.js +3 -0
  126. package/dist/Layer/modalOutlet.d.ts.map +1 -1
  127. package/dist/Layer/modalOutlet.js +2 -0
  128. package/dist/Layer/outsidePress.d.ts.map +1 -1
  129. package/dist/Layer/outsidePress.js +1 -0
  130. package/dist/Layer/useLayer.d.ts.map +1 -1
  131. package/dist/Layer/useLayer.js +4 -1
  132. package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
  133. package/dist/Layer/useLayerDismissal.js +3 -0
  134. package/dist/Layer/useTouchTrigger.d.ts +13 -7
  135. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  136. package/dist/Layer/useTouchTrigger.js +20 -6
  137. package/dist/Layout/index.d.ts +1 -1
  138. package/dist/Layout/index.d.ts.map +1 -1
  139. package/dist/Layout/index.js +1 -1
  140. package/dist/Layout/layoutReset.js +1 -1
  141. package/dist/Layout/overlayPaddingReset.stylex.d.ts +68 -0
  142. package/dist/Layout/overlayPaddingReset.stylex.d.ts.map +1 -0
  143. package/dist/Layout/overlayPaddingReset.stylex.js +72 -0
  144. package/dist/Layout/padding.stylex.d.ts +5 -129
  145. package/dist/Layout/padding.stylex.d.ts.map +1 -1
  146. package/dist/Layout/padding.stylex.js +9 -143
  147. package/dist/Layout/paddingStyles.stylex.d.ts +83 -0
  148. package/dist/Layout/paddingStyles.stylex.d.ts.map +1 -0
  149. package/dist/Layout/paddingStyles.stylex.js +99 -0
  150. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  151. package/dist/Lightbox/Lightbox.js +20 -1
  152. package/dist/MobileNav/MobileNav.d.ts +3 -2
  153. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  154. package/dist/MobileNav/MobileNav.js +10 -26
  155. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  156. package/dist/MultiSelector/MultiSelector.js +2 -1
  157. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  158. package/dist/NumberInput/NumberInput.js +2 -1
  159. package/dist/Outline/useOutlineFromDOM.d.ts.map +1 -1
  160. package/dist/Outline/useOutlineFromDOM.js +3 -0
  161. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  162. package/dist/Outline/useScrollSpy.js +3 -0
  163. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  164. package/dist/OverflowList/OverflowList.js +3 -0
  165. package/dist/Overlay/Overlay.d.ts.map +1 -1
  166. package/dist/Overlay/Overlay.js +7 -2
  167. package/dist/Popover/Popover.d.ts.map +1 -1
  168. package/dist/Popover/Popover.js +6 -0
  169. package/dist/Popover/usePopover.js +2 -2
  170. package/dist/PowerSearch/PowerSearch.d.ts +41 -4
  171. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  172. package/dist/PowerSearch/PowerSearch.js +441 -134
  173. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts +125 -0
  174. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -0
  175. package/dist/PowerSearch/PowerSearchBottomSheet.js +2041 -0
  176. package/dist/PowerSearch/PowerSearchEditPopover.d.ts +35 -2
  177. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  178. package/dist/PowerSearch/PowerSearchEditPopover.js +43 -10
  179. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
  180. package/dist/PowerSearch/PowerSearchFilterEditor.d.ts.map +1 -1
  181. package/dist/PowerSearch/PowerSearchFilterEditor.js +4 -2
  182. package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
  183. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  184. package/dist/PowerSearch/PowerSearchToken.js +3 -2
  185. package/dist/PowerSearch/PowerSearchValueEditor.d.ts +38 -3
  186. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  187. package/dist/PowerSearch/PowerSearchValueEditor.js +273 -86
  188. package/dist/PowerSearch/formatFilterValue.d.ts +14 -7
  189. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  190. package/dist/PowerSearch/formatFilterValue.js +31 -23
  191. package/dist/PowerSearch/formatTokenValue.d.ts +28 -0
  192. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -0
  193. package/dist/PowerSearch/formatTokenValue.js +161 -0
  194. package/dist/PowerSearch/index.d.ts +1 -1
  195. package/dist/PowerSearch/index.d.ts.map +1 -1
  196. package/dist/PowerSearch/powerSearchDateZone.d.ts +25 -0
  197. package/dist/PowerSearch/powerSearchDateZone.d.ts.map +1 -0
  198. package/dist/PowerSearch/powerSearchDateZone.js +57 -0
  199. package/dist/PowerSearch/powerSearchSheetUtils.d.ts +65 -0
  200. package/dist/PowerSearch/powerSearchSheetUtils.d.ts.map +1 -0
  201. package/dist/PowerSearch/powerSearchSheetUtils.js +168 -0
  202. package/dist/PowerSearch/types.d.ts +8 -1
  203. package/dist/PowerSearch/types.d.ts.map +1 -1
  204. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -1
  205. package/dist/ProgressBar/ProgressBarTouch.js +2 -0
  206. package/dist/RadioList/RadioList.d.ts.map +1 -1
  207. package/dist/RadioList/RadioList.js +3 -2
  208. package/dist/RadioList/RadioListItem.d.ts +1 -1
  209. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  210. package/dist/RadioList/RadioListItem.js +5 -3
  211. package/dist/Resizable/ResizeHandle.d.ts +2 -1
  212. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  213. package/dist/Resizable/ResizeHandle.js +116 -92
  214. package/dist/Resizable/createResizable.d.ts +199 -0
  215. package/dist/Resizable/createResizable.d.ts.map +1 -0
  216. package/dist/Resizable/createResizable.js +733 -0
  217. package/dist/Resizable/separatorAttributes.d.ts +45 -0
  218. package/dist/Resizable/separatorAttributes.d.ts.map +1 -0
  219. package/dist/Resizable/separatorAttributes.js +35 -0
  220. package/dist/Resizable/useResizable.d.ts +3 -3
  221. package/dist/Resizable/useResizable.d.ts.map +1 -1
  222. package/dist/Resizable/useResizable.js +252 -459
  223. package/dist/SegmentedControl/useSegmentedSelectionMotion.d.ts.map +1 -1
  224. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  225. package/dist/SelectableCard/SelectableCard.d.ts +2 -0
  226. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  227. package/dist/SelectableCard/SelectableCard.js +36 -11
  228. package/dist/SelectableCard/selectableCardInput.d.ts +12 -0
  229. package/dist/SelectableCard/selectableCardInput.d.ts.map +1 -0
  230. package/dist/SelectableCard/selectableCardInput.js +20 -0
  231. package/dist/Selector/Selector.d.ts.map +1 -1
  232. package/dist/Selector/Selector.js +7 -9
  233. package/dist/SideNav/SideNav.d.ts.map +1 -1
  234. package/dist/SideNav/SideNav.js +36 -5
  235. package/dist/Slider/Slider.d.ts.map +1 -1
  236. package/dist/Slider/Slider.js +16 -11
  237. package/dist/Slider/sliderTouchController.js +2 -2
  238. package/dist/Spinner/Spinner.d.ts +1 -1
  239. package/dist/Spinner/Spinner.d.ts.map +1 -1
  240. package/dist/Spinner/Spinner.js +60 -58
  241. package/dist/Stepper/Stepper.d.ts.map +1 -1
  242. package/dist/Stepper/Stepper.js +10 -15
  243. package/dist/Switch/Switch.d.ts.map +1 -1
  244. package/dist/Switch/Switch.js +4 -10
  245. package/dist/Switch/useSwitchTouch.js +4 -4
  246. package/dist/Table/BaseTable.d.ts.map +1 -1
  247. package/dist/Table/BaseTable.js +29 -8
  248. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  249. package/dist/Table/plugins/columnResize/useTableColumnResize.js +3 -1
  250. package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
  251. package/dist/Table/plugins/filtering/useTableFiltering.js +2 -1
  252. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +12 -0
  253. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  254. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +17 -3
  255. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
  256. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +2 -0
  257. package/dist/Table/plugins/tree/useTableTreeData.d.ts +11 -0
  258. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
  259. package/dist/Table/plugins/tree/useTableTreeData.js +27 -14
  260. package/dist/TextArea/TextArea.d.ts.map +1 -1
  261. package/dist/TextArea/TextArea.js +2 -1
  262. package/dist/TextInput/TextInput.d.ts +2 -2
  263. package/dist/TextInput/TextInput.d.ts.map +1 -1
  264. package/dist/TextInput/TextInput.js +12 -8
  265. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  266. package/dist/TimeInput/TimeInput.js +2 -0
  267. package/dist/TimeInput/TimeWheels.d.ts +32 -0
  268. package/dist/TimeInput/TimeWheels.d.ts.map +1 -0
  269. package/dist/TimeInput/TimeWheels.js +144 -0
  270. package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
  271. package/dist/TimeInput/TouchTimeField.js +63 -116
  272. package/dist/TimeInput/timeWheelRules.d.ts +124 -0
  273. package/dist/TimeInput/timeWheelRules.d.ts.map +1 -0
  274. package/dist/TimeInput/timeWheelRules.js +277 -0
  275. package/dist/Timer/Timer.d.ts.map +1 -1
  276. package/dist/Timer/Timer.js +2 -0
  277. package/dist/Timestamp/Timestamp.js +1 -1
  278. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  279. package/dist/Timestamp/formatInstant.js +1 -23
  280. package/dist/Toast/Toast.d.ts +11 -1
  281. package/dist/Toast/Toast.d.ts.map +1 -1
  282. package/dist/Toast/Toast.js +25 -15
  283. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  284. package/dist/Toast/ToastViewport.js +97 -34
  285. package/dist/Toast/types.d.ts +9 -3
  286. package/dist/Toast/types.d.ts.map +1 -1
  287. package/dist/Toast/useToast.d.ts.map +1 -1
  288. package/dist/Toast/useToast.js +1 -0
  289. package/dist/Tokenizer/Tokenizer.d.ts +44 -46
  290. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  291. package/dist/Tokenizer/Tokenizer.js +20 -21
  292. package/dist/Tokenizer/TokenizerBottomSheet.d.ts +1 -1
  293. package/dist/Tokenizer/TokenizerBottomSheet.js +12 -18
  294. package/dist/Tokenizer/index.d.ts +1 -1
  295. package/dist/Tokenizer/index.d.ts.map +1 -1
  296. package/dist/Tooltip/Tooltip.d.ts +2 -23
  297. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  298. package/dist/Tooltip/Tooltip.js +5 -29
  299. package/dist/Tooltip/useTooltip.d.ts +23 -30
  300. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  301. package/dist/Tooltip/useTooltip.js +200 -108
  302. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  303. package/dist/Typeahead/BaseTypeahead.js +27 -18
  304. package/dist/Typeahead/TypeaheadItem.d.ts +2 -1
  305. package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
  306. package/dist/animator/createAnimator.d.ts +98 -0
  307. package/dist/animator/createAnimator.d.ts.map +1 -0
  308. package/dist/animator/createAnimator.js +259 -0
  309. package/dist/astryx.css +53 -8
  310. package/dist/gestures/GestureHost.d.ts +16 -1
  311. package/dist/gestures/GestureHost.d.ts.map +1 -1
  312. package/dist/gestures/GestureHost.js +4 -1
  313. package/dist/gestures/PressTracker.d.ts.map +1 -1
  314. package/dist/gestures/PressTracker.js +4 -3
  315. package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -1
  316. package/dist/hooks/ModalAnnounceProvider.js +1 -0
  317. package/dist/hooks/actionGroupTracker.d.ts +4 -1
  318. package/dist/hooks/actionGroupTracker.d.ts.map +1 -1
  319. package/dist/hooks/actionGroupTracker.js +18 -7
  320. package/dist/hooks/index.d.ts +1 -0
  321. package/dist/hooks/index.d.ts.map +1 -1
  322. package/dist/hooks/index.js +1 -0
  323. package/dist/hooks/longPressDetector.d.ts +66 -0
  324. package/dist/hooks/longPressDetector.d.ts.map +1 -0
  325. package/dist/hooks/longPressDetector.js +200 -0
  326. package/dist/hooks/pressGroupContext.d.ts +6 -0
  327. package/dist/hooks/pressGroupContext.d.ts.map +1 -0
  328. package/dist/hooks/pressGroupContext.js +20 -0
  329. package/dist/hooks/rootScrollStyles.d.ts +48 -0
  330. package/dist/hooks/rootScrollStyles.d.ts.map +1 -0
  331. package/dist/hooks/rootScrollStyles.js +207 -0
  332. package/dist/hooks/scrollLockTouchGuard.d.ts +13 -0
  333. package/dist/hooks/scrollLockTouchGuard.d.ts.map +1 -0
  334. package/dist/hooks/scrollLockTouchGuard.js +117 -0
  335. package/dist/hooks/scrollbarGutter.d.ts +4 -4
  336. package/dist/hooks/scrollbarGutter.d.ts.map +1 -1
  337. package/dist/hooks/scrollbarGutter.js +36 -23
  338. package/dist/hooks/useActionGroupTracking.d.ts +53 -0
  339. package/dist/hooks/useActionGroupTracking.d.ts.map +1 -0
  340. package/dist/hooks/useActionGroupTracking.js +174 -0
  341. package/dist/hooks/useAnimator.d.ts +41 -0
  342. package/dist/hooks/useAnimator.d.ts.map +1 -0
  343. package/dist/hooks/useAnimator.js +70 -0
  344. package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
  345. package/dist/hooks/useAnnounceRenderedText.js +1 -0
  346. package/dist/hooks/useAttachment.d.ts +1 -1
  347. package/dist/hooks/useAttachment.js +1 -1
  348. package/dist/hooks/useAutoMediaMode.d.ts.map +1 -1
  349. package/dist/hooks/useAutoMediaMode.js +1 -0
  350. package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
  351. package/dist/hooks/useBusyAnnouncement.js +2 -0
  352. package/dist/hooks/useDevWarning.d.ts.map +1 -1
  353. package/dist/hooks/useDevWarning.js +2 -0
  354. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  355. package/dist/hooks/useFocusTrap.js +2 -0
  356. package/dist/hooks/useGridFocus.d.ts +8 -5
  357. package/dist/hooks/useGridFocus.d.ts.map +1 -1
  358. package/dist/hooks/useGridFocus.js +4 -3
  359. package/dist/hooks/useHotkeys.d.ts.map +1 -1
  360. package/dist/hooks/useHotkeys.js +3 -0
  361. package/dist/hooks/useImageMode.d.ts.map +1 -1
  362. package/dist/hooks/useImageMode.js +3 -0
  363. package/dist/hooks/useInputStatusIcon.d.ts +1 -1
  364. package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
  365. package/dist/hooks/useInputStatusIcon.js +2 -2
  366. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  367. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  368. package/dist/hooks/useKeyboardHint.js +1 -1
  369. package/dist/hooks/useLongPress.d.ts +8 -9
  370. package/dist/hooks/useLongPress.d.ts.map +1 -1
  371. package/dist/hooks/useLongPress.js +23 -106
  372. package/dist/hooks/useMenuHover.d.ts.map +1 -1
  373. package/dist/hooks/useMenuHover.js +2 -0
  374. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  375. package/dist/hooks/useMenuPress.js +3 -0
  376. package/dist/hooks/useOverflow.d.ts.map +1 -1
  377. package/dist/hooks/useOverflow.js +2 -1
  378. package/dist/hooks/usePressFeedback.d.ts.map +1 -1
  379. package/dist/hooks/usePressFeedback.js +1 -0
  380. package/dist/hooks/useResolvedRequired.d.ts +3 -0
  381. package/dist/hooks/useResolvedRequired.d.ts.map +1 -1
  382. package/dist/hooks/useResolvedRequired.js +3 -0
  383. package/dist/hooks/useScrollLock.d.ts +8 -9
  384. package/dist/hooks/useScrollLock.d.ts.map +1 -1
  385. package/dist/hooks/useScrollLock.js +50 -48
  386. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  387. package/dist/hooks/useScrollableArea.js +5 -0
  388. package/dist/hooks/useStreamingText.d.ts.map +1 -1
  389. package/dist/hooks/useStreamingText.js +3 -0
  390. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts +8 -0
  391. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.d.ts.map +1 -0
  392. package/dist/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.js +45 -0
  393. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.d.ts.map +1 -1
  394. package/dist/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.js +6 -0
  395. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts +8 -0
  396. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.d.ts.map +1 -0
  397. package/dist/i18n/generated-english/PowerSearch/formatTokenValue.generated.js +14 -0
  398. package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts +8 -0
  399. package/dist/i18n/generated-english/Resizable/createResizable.generated.d.ts.map +1 -0
  400. package/dist/i18n/generated-english/Resizable/createResizable.generated.js +13 -0
  401. package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.d.ts.map +1 -1
  402. package/dist/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.js +3 -1
  403. package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.d.ts.map +1 -1
  404. package/dist/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.js +3 -1
  405. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts +8 -0
  406. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.d.ts.map +1 -0
  407. package/dist/i18n/generated-english/TimeInput/TimeWheels.generated.js +17 -0
  408. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  409. package/dist/i18n/generated-locales/en.generated.js +37 -0
  410. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  411. package/dist/i18n/generated-locales/pseudo.generated.js +37 -0
  412. package/dist/index.d.ts +1 -0
  413. package/dist/index.d.ts.map +1 -1
  414. package/dist/index.js +4 -0
  415. package/dist/internal/indicatorPress.stylex.d.ts +20 -0
  416. package/dist/internal/indicatorPress.stylex.d.ts.map +1 -0
  417. package/dist/internal/indicatorPress.stylex.js +26 -0
  418. package/dist/internal/selectable-card.d.ts +21 -0
  419. package/dist/internal/selectable-card.d.ts.map +1 -0
  420. package/dist/internal/selectable-card.js +20 -0
  421. package/dist/internal/sheetDraft.d.ts +2 -2
  422. package/dist/internal/sheetDraft.js +2 -2
  423. package/dist/keyboard/index.d.ts +17 -0
  424. package/dist/keyboard/index.d.ts.map +1 -0
  425. package/dist/keyboard/index.js +19 -0
  426. package/dist/keyboard/keyboardHeight.d.ts +149 -0
  427. package/dist/keyboard/keyboardHeight.d.ts.map +1 -0
  428. package/dist/keyboard/keyboardHeight.js +432 -0
  429. package/dist/keyboard/keyboardLayoutGuide.d.ts +59 -0
  430. package/dist/keyboard/keyboardLayoutGuide.d.ts.map +1 -0
  431. package/dist/keyboard/keyboardLayoutGuide.js +207 -0
  432. package/dist/keyboard/keyboardModel.d.ts +93 -0
  433. package/dist/keyboard/keyboardModel.d.ts.map +1 -0
  434. package/dist/keyboard/keyboardModel.js +220 -0
  435. package/dist/keyboard/rideKeyboard.d.ts +42 -0
  436. package/dist/keyboard/rideKeyboard.d.ts.map +1 -0
  437. package/dist/keyboard/rideKeyboard.js +77 -0
  438. package/dist/keyboard/useMobileKeyboard.d.ts +61 -0
  439. package/dist/keyboard/useMobileKeyboard.d.ts.map +1 -0
  440. package/dist/keyboard/useMobileKeyboard.js +699 -0
  441. package/dist/motion/android/index.d.ts +16 -0
  442. package/dist/motion/android/index.d.ts.map +1 -0
  443. package/dist/motion/android/index.js +18 -0
  444. package/dist/motion/android/keyboard.d.ts +83 -0
  445. package/dist/motion/android/keyboard.d.ts.map +1 -0
  446. package/dist/motion/android/keyboard.js +96 -0
  447. package/dist/motion/animatedLayout.d.ts +8 -0
  448. package/dist/motion/animatedLayout.d.ts.map +1 -1
  449. package/dist/motion/animatedLayout.js +246 -53
  450. package/dist/motion/animator.d.ts +14 -14
  451. package/dist/motion/animator.d.ts.map +1 -1
  452. package/dist/motion/animator.js +45 -26
  453. package/dist/motion/frameBlock.d.ts +14 -0
  454. package/dist/motion/frameBlock.d.ts.map +1 -0
  455. package/dist/motion/frameBlock.js +16 -0
  456. package/dist/motion/progress.d.ts +88 -0
  457. package/dist/motion/progress.d.ts.map +1 -0
  458. package/dist/motion/progress.js +128 -0
  459. package/dist/motion/reducedMotion.d.ts.map +1 -1
  460. package/dist/motion/reducedMotion.js +3 -1
  461. package/dist/motion/uikit/alert.d.ts +41 -0
  462. package/dist/motion/uikit/alert.d.ts.map +1 -0
  463. package/dist/motion/uikit/alert.js +43 -0
  464. package/dist/motion/uikit/datePicker.d.ts +58 -0
  465. package/dist/motion/uikit/datePicker.d.ts.map +1 -0
  466. package/dist/motion/uikit/datePicker.js +60 -0
  467. package/dist/motion/uikit/index.d.ts +6 -4
  468. package/dist/motion/uikit/index.d.ts.map +1 -1
  469. package/dist/motion/uikit/index.js +6 -4
  470. package/dist/motion/uikit/picker.d.ts +96 -0
  471. package/dist/motion/uikit/picker.d.ts.map +1 -0
  472. package/dist/motion/uikit/picker.js +117 -0
  473. package/dist/privateAttributes/pressGroupItem.stylex.d.ts +22 -0
  474. package/dist/privateAttributes/pressGroupItem.stylex.d.ts.map +1 -0
  475. package/dist/privateAttributes/pressGroupItem.stylex.js +36 -0
  476. package/dist/privateAttributes/reducedMotion.stylex.d.ts +23 -0
  477. package/dist/privateAttributes/reducedMotion.stylex.d.ts.map +1 -0
  478. package/dist/privateAttributes/reducedMotion.stylex.js +40 -0
  479. package/dist/theme/Theme.d.ts.map +1 -1
  480. package/dist/theme/Theme.js +29 -4
  481. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  482. package/dist/theme/generateThemeRules.js +14 -13
  483. package/dist/theme/motionKnobs.d.ts +4 -3
  484. package/dist/theme/motionKnobs.d.ts.map +1 -1
  485. package/dist/theme/motionKnobs.js +3 -2
  486. package/dist/theme/themeMotion.d.ts +6 -0
  487. package/dist/theme/themeMotion.d.ts.map +1 -1
  488. package/dist/theme/themeMotion.js +15 -2
  489. package/dist/theme/tokens.stylex.d.ts +3 -0
  490. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  491. package/dist/theme/tokens.stylex.js +4 -1
  492. package/dist/utils/dateParser.d.ts.map +1 -1
  493. package/dist/utils/dateParser.js +12 -0
  494. package/dist/utils/disabledInteraction.d.ts +10 -2
  495. package/dist/utils/disabledInteraction.d.ts.map +1 -1
  496. package/dist/utils/disabledInteraction.js +16 -2
  497. package/dist/utils/focusReturn.d.ts +22 -25
  498. package/dist/utils/focusReturn.d.ts.map +1 -1
  499. package/dist/utils/focusReturn.js +36 -29
  500. package/dist/utils/index.d.ts +1 -1
  501. package/dist/utils/index.d.ts.map +1 -1
  502. package/dist/utils/index.js +1 -1
  503. package/dist/utils/interactionModality.d.ts.map +1 -1
  504. package/dist/utils/interactionModality.js +4 -0
  505. package/dist/utils/interactionOverlay.stylex.d.ts +6 -4
  506. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  507. package/dist/utils/interactionOverlay.stylex.js +6 -4
  508. package/dist/utils/isFocusDetached.d.ts +27 -0
  509. package/dist/utils/isFocusDetached.d.ts.map +1 -0
  510. package/dist/utils/isFocusDetached.js +32 -0
  511. package/dist/utils/layoutViewport.d.ts +25 -0
  512. package/dist/utils/layoutViewport.d.ts.map +1 -0
  513. package/dist/utils/layoutViewport.js +102 -0
  514. package/dist/utils/plainDate.d.ts +31 -0
  515. package/dist/utils/plainDate.d.ts.map +1 -1
  516. package/dist/utils/plainDate.js +68 -4
  517. package/dist/utils/pressFeedback.d.ts +6 -0
  518. package/dist/utils/pressFeedback.d.ts.map +1 -1
  519. package/dist/utils/pressFeedback.js +97 -18
  520. package/dist/utils/pressGesture.d.ts +4 -2
  521. package/dist/utils/pressGesture.d.ts.map +1 -1
  522. package/dist/utils/pressGesture.js +3 -1
  523. package/dist/utils/selectionLock.d.ts +10 -1
  524. package/dist/utils/selectionLock.d.ts.map +1 -1
  525. package/dist/utils/selectionLock.js +31 -5
  526. package/dist/utils/sharedMutationObserver.d.ts +2 -1
  527. package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
  528. package/dist/utils/sharedMutationObserver.js +2 -1
  529. package/dist/utils/timeParser.d.ts +2 -1
  530. package/dist/utils/timeParser.d.ts.map +1 -1
  531. package/dist/utils/timeParser.js +29 -3
  532. package/dist/utils/triggerFocus.d.ts +36 -0
  533. package/dist/utils/triggerFocus.d.ts.map +1 -0
  534. package/dist/utils/triggerFocus.js +65 -0
  535. package/locales/en.json +148 -0
  536. package/locales/pseudo.json +111 -0
  537. package/package.json +14 -9
  538. package/src/AlertDialog/AlertDialog.doc.mjs +2 -2
  539. package/src/AlertDialog/AlertDialog.tsx +46 -5
  540. package/src/AppShell/AppShell.tsx +13 -4
  541. package/src/BottomSheet/BottomSheet.doc.mjs +1 -1
  542. package/src/BottomSheet/BottomSheet.tsx +1 -0
  543. package/src/BottomSheet/BottomSheetPanel.tsx +80 -16
  544. package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +5 -0
  545. package/src/BottomSheet/BottomSheetSwitcher.tsx +5 -0
  546. package/src/BottomSheet/bottomSheetStack.ts +1 -1
  547. package/src/BottomSheet/useSheetGestures.ts +16 -1
  548. package/src/Button/Button.tsx +26 -4
  549. package/src/Calendar/Calendar.tsx +40 -32
  550. package/src/Calendar/getWeekdayHeaderNames.ts +88 -0
  551. package/src/Calendar/hooks/useCalendarDays.ts +5 -10
  552. package/src/Calendar/{standaloneShortWeekdayNames.generated.ts → weekdayHeaderNames.generated.ts} +14 -14
  553. package/src/Carousel/Carousel.tsx +1 -0
  554. package/src/Chat/ChatComposerInput.tsx +4 -7
  555. package/src/Chat/ChatMessageList.tsx +2 -1
  556. package/src/Chat/useChatDictation.ts +1 -0
  557. package/src/Chat/useChatNewMessages.ts +1 -1
  558. package/src/Chat/useChatStreamScroll.ts +2 -0
  559. package/src/Chat/useSpeechRecognition.ts +2 -0
  560. package/src/Chat/useTriggerMenu.tsx +1 -1
  561. package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -0
  562. package/src/CheckboxInput/CheckboxInput.tsx +38 -15
  563. package/src/CheckboxList/CheckboxList.doc.mjs +14 -0
  564. package/src/CheckboxList/CheckboxList.tsx +43 -2
  565. package/src/CheckboxList/CheckboxListContext.tsx +9 -1
  566. package/src/CheckboxList/CheckboxListItem.tsx +23 -2
  567. package/src/CheckboxList/requiredGroup.ts +77 -0
  568. package/src/CodeBlock/CodeBlock.doc.mjs +9 -1
  569. package/src/CodeBlock/CodeBlock.tsx +41 -4
  570. package/src/CommandPalette/CommandPalette.tsx +1 -0
  571. package/src/CommandPalette/CommandPaletteItem.tsx +1 -0
  572. package/src/ComplexSelector/ComplexSelector.tsx +20 -5
  573. package/src/ContextMenu/ContextMenu.tsx +2 -2
  574. package/src/DateInput/MonthScroller.tsx +8 -2
  575. package/src/DateInput/PickerWheel.tsx +796 -0
  576. package/src/DateInput/TouchDateField.tsx +6 -32
  577. package/src/DateInput/Wheel.tsx +188 -171
  578. package/src/DateInput/datePickerTouch.ts +15 -0
  579. package/src/DateInput/useOwnScrollGesture.ts +25 -3
  580. package/src/DateInput/usePointerDragScroll.ts +1 -0
  581. package/src/DateInput/useScrollSettle.ts +2 -0
  582. package/src/DateInput/useWheelListbox.ts +112 -0
  583. package/src/DateInput/wheelOptions.ts +184 -0
  584. package/src/DateInput/wheelPhysics.ts +406 -0
  585. package/src/DateInput/wheelStrip.ts +341 -0
  586. package/src/DateTimeInput/TouchDateTimeField.tsx +100 -189
  587. package/src/Dialog/Dialog.tsx +12 -32
  588. package/src/Drawer/useDrawerDialogPresence.ts +2 -0
  589. package/src/DropdownMenu/useMenuOverflow.ts +3 -0
  590. package/src/Field/Field.tsx +2 -2
  591. package/src/FieldStatus/useFieldStatusAnnouncement.ts +1 -0
  592. package/src/FormLayout/FormLayout.doc.mjs +181 -46
  593. package/src/FormLayout/FormLayout.tsx +5 -1
  594. package/src/HoverCard/HoverCard.doc.mjs +10 -8
  595. package/src/HoverCard/HoverCard.tsx +58 -6
  596. package/src/HoverCard/useHoverCard.doc.mjs +178 -36
  597. package/src/HoverCard/useHoverCard.tsx +55 -55
  598. package/src/Icon/Icon.doc.mjs +51 -10
  599. package/src/Icon/Icon.tsx +31 -8
  600. package/src/IconButton/IconButton.doc.mjs +141 -21
  601. package/src/InfoTip/InfoTip.tsx +72 -16
  602. package/src/Item/useSwipeAction.ts +2 -0
  603. package/src/Layer/modalOutlet.ts +2 -0
  604. package/src/Layer/outsidePress.ts +1 -0
  605. package/src/Layer/useLayer.tsx +3 -1
  606. package/src/Layer/useLayerDismissal.ts +2 -0
  607. package/src/Layer/useTouchTrigger.ts +19 -6
  608. package/src/Layout/index.ts +1 -1
  609. package/src/Layout/layoutReset.ts +1 -1
  610. package/src/Layout/overlayPaddingReset.stylex.ts +73 -0
  611. package/src/Layout/padding.stylex.ts +9 -133
  612. package/src/Layout/paddingStyles.stylex.ts +87 -0
  613. package/src/Lightbox/Lightbox.tsx +20 -1
  614. package/src/Lightbox/useLightbox.doc.mjs +167 -0
  615. package/src/MobileNav/MobileNav.tsx +10 -31
  616. package/src/MultiSelector/MultiSelector.tsx +2 -7
  617. package/src/NumberInput/NumberInput.tsx +2 -7
  618. package/src/Outline/useOutlineFromDOM.ts +2 -0
  619. package/src/Outline/useScrollSpy.ts +2 -0
  620. package/src/OverflowList/OverflowList.tsx +2 -0
  621. package/src/Overlay/Overlay.tsx +7 -2
  622. package/src/Popover/Popover.tsx +4 -0
  623. package/src/Popover/usePopover.tsx +2 -2
  624. package/src/PowerSearch/PowerSearch.doc.mjs +60 -8
  625. package/src/PowerSearch/PowerSearch.tsx +622 -157
  626. package/src/PowerSearch/PowerSearchBottomSheet.tsx +2700 -0
  627. package/src/PowerSearch/PowerSearchEditPopover.tsx +65 -9
  628. package/src/PowerSearch/PowerSearchFilterEditor.tsx +2 -0
  629. package/src/PowerSearch/PowerSearchToken.tsx +2 -0
  630. package/src/PowerSearch/PowerSearchValueEditor.tsx +340 -59
  631. package/src/PowerSearch/formatFilterValue.ts +49 -27
  632. package/src/PowerSearch/formatTokenValue.ts +220 -0
  633. package/src/PowerSearch/index.ts +5 -1
  634. package/src/PowerSearch/powerSearchDateZone.ts +95 -0
  635. package/src/PowerSearch/powerSearchSheetUtils.ts +224 -0
  636. package/src/PowerSearch/types.ts +8 -1
  637. package/src/ProgressBar/ProgressBarTouch.ts +2 -0
  638. package/src/RadioList/RadioList.tsx +3 -2
  639. package/src/RadioList/RadioListItem.tsx +5 -3
  640. package/src/Resizable/Resizable.doc.mjs +5 -4
  641. package/src/Resizable/ResizeHandle.tsx +187 -135
  642. package/src/Resizable/createResizable.ts +1046 -0
  643. package/src/Resizable/separatorAttributes.ts +73 -0
  644. package/src/Resizable/useResizable.ts +292 -623
  645. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +6 -3
  646. package/src/SelectableCard/SelectableCard.tsx +39 -10
  647. package/src/SelectableCard/selectableCardInput.ts +30 -0
  648. package/src/Selector/Selector.tsx +7 -19
  649. package/src/SideNav/SideNav.tsx +41 -5
  650. package/src/Slider/Slider.tsx +20 -11
  651. package/src/Slider/sliderTouchController.ts +2 -2
  652. package/src/Spinner/Spinner.tsx +77 -63
  653. package/src/Stepper/Stepper.tsx +10 -27
  654. package/src/Switch/Switch.tsx +2 -6
  655. package/src/Switch/useSwitchTouch.ts +4 -4
  656. package/src/Table/BaseTable.tsx +46 -12
  657. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
  658. package/src/Table/plugins/filtering/useTableFiltering.tsx +1 -0
  659. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +31 -7
  660. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +2 -0
  661. package/src/Table/plugins/tree/useTableTreeData.tsx +43 -20
  662. package/src/Table/useTableRowExpansion.doc.mjs +9 -0
  663. package/src/Table/useTableTreeData.doc.mjs +15 -3
  664. package/src/TextArea/TextArea.tsx +2 -7
  665. package/src/TextInput/TextInput.tsx +13 -17
  666. package/src/TimeInput/TimeInput.tsx +2 -0
  667. package/src/TimeInput/TimeWheels.tsx +218 -0
  668. package/src/TimeInput/TouchTimeField.tsx +93 -155
  669. package/src/TimeInput/timeWheelRules.ts +352 -0
  670. package/src/Timer/Timer.tsx +1 -0
  671. package/src/Timestamp/Timestamp.tsx +1 -1
  672. package/src/Timestamp/formatInstant.ts +1 -33
  673. package/src/Toast/Toast.doc.mjs +4 -3
  674. package/src/Toast/Toast.tsx +52 -32
  675. package/src/Toast/ToastViewport.tsx +123 -35
  676. package/src/Toast/types.ts +9 -3
  677. package/src/Toast/useToast.tsx +1 -0
  678. package/src/Tokenizer/Tokenizer.doc.mjs +10 -10
  679. package/src/Tokenizer/Tokenizer.tsx +61 -62
  680. package/src/Tokenizer/TokenizerBottomSheet.tsx +17 -23
  681. package/src/Tokenizer/index.ts +1 -0
  682. package/src/Tooltip/Tooltip.tsx +6 -42
  683. package/src/Tooltip/useTooltip.doc.mjs +24 -0
  684. package/src/Tooltip/useTooltip.tsx +243 -134
  685. package/src/Typeahead/BaseTypeahead.tsx +27 -17
  686. package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
  687. package/src/Typeahead/TypeaheadItem.tsx +2 -1
  688. package/src/animator/createAnimator.doc.mjs +153 -0
  689. package/src/animator/createAnimator.ts +324 -0
  690. package/src/gestures/GestureHost.ts +6 -5
  691. package/src/gestures/PressTracker.ts +4 -3
  692. package/src/gestures/README.md +10 -4
  693. package/src/hooks/ModalAnnounceProvider.tsx +1 -0
  694. package/src/hooks/actionGroupTracker.ts +25 -9
  695. package/src/hooks/index.ts +2 -0
  696. package/src/hooks/longPressDetector.ts +273 -0
  697. package/src/hooks/pressGroupContext.ts +21 -0
  698. package/src/hooks/rootScrollStyles.ts +247 -0
  699. package/src/hooks/scrollLockTouchGuard.ts +149 -0
  700. package/src/hooks/scrollbarGutter.ts +41 -26
  701. package/src/hooks/useActionGroupTracking.ts +224 -0
  702. package/src/hooks/useAnimator.doc.mjs +109 -0
  703. package/src/hooks/useAnimator.ts +67 -0
  704. package/src/hooks/useAnnounceRenderedText.ts +1 -0
  705. package/src/hooks/useAttachment.ts +1 -1
  706. package/src/hooks/useAutoMediaMode.ts +1 -0
  707. package/src/hooks/useBusyAnnouncement.ts +2 -0
  708. package/src/hooks/useDevWarning.ts +2 -0
  709. package/src/hooks/useFocusTrap.ts +2 -0
  710. package/src/hooks/useGridFocus.doc.mjs +6 -6
  711. package/src/hooks/useGridFocus.ts +10 -7
  712. package/src/hooks/useHotkeys.ts +2 -0
  713. package/src/hooks/useImageMode.ts +2 -0
  714. package/src/hooks/useInputStatusIcon.tsx +3 -2
  715. package/src/hooks/useKeyboardHint.tsx +1 -1
  716. package/src/hooks/useLongPress.doc.mjs +2 -2
  717. package/src/hooks/useLongPress.ts +32 -122
  718. package/src/hooks/useMenuHover.ts +1 -0
  719. package/src/hooks/useMenuPress.ts +2 -0
  720. package/src/hooks/useOverflow.ts +2 -1
  721. package/src/hooks/usePressFeedback.ts +1 -0
  722. package/src/hooks/useResolvedRequired.ts +3 -0
  723. package/src/hooks/useScrollLock.doc.mjs +51 -12
  724. package/src/hooks/useScrollLock.ts +53 -60
  725. package/src/hooks/useScrollableArea.ts +4 -0
  726. package/src/hooks/useStreamingText.ts +2 -0
  727. package/src/i18n/generated-english/PowerSearch/PowerSearchBottomSheet.generated.ts +46 -0
  728. package/src/i18n/generated-english/PowerSearch/PowerSearchValueEditor.generated.ts +6 -0
  729. package/src/i18n/generated-english/PowerSearch/formatTokenValue.generated.ts +15 -0
  730. package/src/i18n/generated-english/Resizable/createResizable.generated.ts +14 -0
  731. package/src/i18n/generated-english/Table/plugins/rowExpansion/useTableRowExpansion.generated.ts +3 -1
  732. package/src/i18n/generated-english/Table/plugins/tree/useTableTreeData.generated.ts +3 -1
  733. package/src/i18n/generated-english/TimeInput/TimeWheels.generated.ts +18 -0
  734. package/src/i18n/generated-locales/en.generated.ts +47 -0
  735. package/src/i18n/generated-locales/pseudo.generated.ts +48 -0
  736. package/src/index.ts +13 -0
  737. package/src/internal/indicatorPress.stylex.ts +24 -0
  738. package/src/internal/selectable-card.ts +21 -0
  739. package/src/internal/sheetDraft.ts +2 -2
  740. package/src/keyboard/README.md +197 -0
  741. package/src/keyboard/index.ts +48 -0
  742. package/src/keyboard/keyboardHeight.ts +543 -0
  743. package/src/keyboard/keyboardLayoutGuide.ts +266 -0
  744. package/src/keyboard/keyboardModel.ts +301 -0
  745. package/src/keyboard/rideKeyboard.ts +100 -0
  746. package/src/keyboard/useMobileKeyboard.ts +866 -0
  747. package/src/motion/MEASUREMENTS.md +28 -0
  748. package/src/motion/README.md +12 -5
  749. package/src/motion/android/index.ts +18 -0
  750. package/src/motion/android/keyboard.ts +96 -0
  751. package/src/motion/animatedLayout.ts +323 -60
  752. package/src/motion/animator.ts +66 -37
  753. package/src/motion/frameBlock.ts +16 -0
  754. package/src/motion/progress.ts +155 -0
  755. package/src/motion/reducedMotion.ts +3 -1
  756. package/src/motion/uikit/alert.ts +43 -0
  757. package/src/motion/uikit/datePicker.ts +60 -0
  758. package/src/motion/uikit/index.ts +6 -4
  759. package/src/motion/uikit/picker.ts +116 -0
  760. package/src/privateAttributes/pressGroupItem.stylex.ts +44 -0
  761. package/src/privateAttributes/reducedMotion.stylex.ts +45 -0
  762. package/src/theme/Theme.tsx +37 -3
  763. package/src/theme/generateThemeRules.ts +14 -12
  764. package/src/theme/motionKnobs.ts +4 -3
  765. package/src/theme/themeMotion.ts +17 -2
  766. package/src/theme/tokens.stylex.ts +2 -0
  767. package/src/utils/dateParser.ts +16 -0
  768. package/src/utils/disabledInteraction.ts +23 -2
  769. package/src/utils/focusReturn.ts +38 -31
  770. package/src/utils/index.ts +1 -1
  771. package/src/utils/interactionModality.ts +4 -0
  772. package/src/utils/interactionOverlay.stylex.ts +6 -4
  773. package/src/utils/isFocusDetached.ts +34 -0
  774. package/src/utils/layoutViewport.ts +104 -0
  775. package/src/utils/plainDate.ts +80 -4
  776. package/src/utils/pressFeedback.ts +126 -30
  777. package/src/utils/pressGesture.ts +4 -2
  778. package/src/utils/selectionLock.ts +40 -6
  779. package/src/utils/sharedMutationObserver.ts +2 -1
  780. package/src/utils/timeParser.ts +40 -3
  781. package/src/utils/triggerFocus.ts +80 -0
  782. package/dist/BottomSheet/useMobileKeyboard.d.ts +0 -21
  783. package/dist/BottomSheet/useMobileKeyboard.d.ts.map +0 -1
  784. package/dist/BottomSheet/useMobileKeyboard.js +0 -407
  785. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +0 -14
  786. package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +0 -1
  787. package/dist/Calendar/getStandaloneShortWeekdayNames.js +0 -26
  788. package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +0 -1
  789. package/dist/Layer/usePressPin.d.ts +0 -93
  790. package/dist/Layer/usePressPin.d.ts.map +0 -1
  791. package/dist/Layer/usePressPin.js +0 -363
  792. package/dist/internal/touch-sheet.d.ts +0 -21
  793. package/dist/internal/touch-sheet.d.ts.map +0 -1
  794. package/dist/internal/touch-sheet.js +0 -19
  795. package/src/BottomSheet/useMobileKeyboard.ts +0 -538
  796. package/src/Calendar/getStandaloneShortWeekdayNames.ts +0 -38
  797. package/src/Layer/usePressPin.ts +0 -510
  798. package/src/internal/touch-sheet.ts +0 -21
@@ -0,0 +1,432 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file keyboardHeight.ts
7
+ * @input The visual viewport, the window's input stream (focus, blur,
8
+ * resize, scroll and touch), and the layout viewport's height
9
+ * @output The on-screen keyboard module: measureKeyboardHeight,
10
+ * isKeyboardMeasurable, subscribeKeyboardHeight, getKeyboardHeight,
11
+ * isTextEntryControl, findTextEntryControl, refuseFocusReveal and
12
+ * watchRevealPan
13
+ * @position Core's one source for the on-screen keyboard. It is internal to
14
+ * core and never exported from the package.
15
+ *
16
+ * SYNC: When modified, update /packages/core/src/keyboard/README.md
17
+ */
18
+ import { subscribeInput } from "../utils/inputStream.js";
19
+ import { layoutViewportHeight } from "../utils/layoutViewport.js";
20
+
21
+ // A shortfall smaller than this is rounding, not a keyboard.
22
+ export const KEYBOARD_EPSILON = 1;
23
+ const NON_TEXT_INPUT_TYPES = new Set(['button', 'checkbox', 'color', 'file', 'hidden', 'image', 'radio', 'range', 'reset', 'submit']);
24
+
25
+ /**
26
+ * Whether this window measures the keyboard: a top-level document with a
27
+ * visual viewport. Capabilities decide it, never the user agent or the
28
+ * pointer. The module measures a browser with its own keyboard geometry API,
29
+ * such as Chrome on Android with the VirtualKeyboard API, the same way.
30
+ * Its visual viewport shrinks for the keyboard while the layout viewport keeps
31
+ * its height, as everywhere else. A desktop browser's visual viewport never
32
+ * shrinks for a keyboard, so it reads 0. Where the app sets
33
+ * `interactive-widget=resizes-content`, Chrome shrinks the layout viewport
34
+ * with the keyboard. The height is then 0 too, and nothing rides, because the
35
+ * browser has made the room itself.
36
+ */
37
+ export function isKeyboardMeasurable(win) {
38
+ return win.visualViewport != null && win.self === win.top;
39
+ }
40
+
41
+ /**
42
+ * The on-screen keyboard's height over the layout viewport, CSS px. It is 0
43
+ * when none is shown, also while pinch-zoomed, and wherever
44
+ * `isKeyboardMeasurable` is false.
45
+ */
46
+ export function measureKeyboardHeight(win) {
47
+ const viewport = win.visualViewport;
48
+ if (viewport == null || !isKeyboardMeasurable(win)) {
49
+ return 0;
50
+ }
51
+ const height = layoutViewportHeight(win) - viewport.height * (viewport.scale ?? 1);
52
+ return height > KEYBOARD_EPSILON ? Math.round(height * 100) / 100 : 0;
53
+ }
54
+
55
+ /** A report from the keyboard module, in the order the window raised them. */
56
+
57
+ const stores = new WeakMap();
58
+
59
+ // A window's capture phase also hears its document's events. A window's own
60
+ // event has no node as its target.
61
+ export function isNodeTarget(target) {
62
+ return target != null && typeof target.nodeType === 'number';
63
+ }
64
+ function storeOf(win) {
65
+ let store = stores.get(win);
66
+ if (store == null) {
67
+ store = {
68
+ height: 0,
69
+ listeners: new Set(),
70
+ focusListeners: new Set(),
71
+ detach: null,
72
+ detachFocus: null
73
+ };
74
+ stores.set(win, store);
75
+ }
76
+ return store;
77
+ }
78
+ function attach(win, store) {
79
+ const viewport = win.visualViewport;
80
+ store.height = measureKeyboardHeight(win);
81
+ const onViewport = event => {
82
+ store.height = measureKeyboardHeight(win);
83
+ const report = {
84
+ type: 'viewport',
85
+ height: store.height,
86
+ timeStamp: event.timeStamp
87
+ };
88
+ for (const listener of [...store.listeners]) {
89
+ listener(report);
90
+ }
91
+ };
92
+ viewport?.addEventListener('resize', onViewport);
93
+ viewport?.addEventListener('scroll', onViewport);
94
+ // Only the window's own resize reports.
95
+ const stopResize = subscribeInput(win, 'resize', event => {
96
+ if (!isNodeTarget(event.target)) {
97
+ onViewport(event);
98
+ }
99
+ });
100
+ return () => {
101
+ viewport?.removeEventListener('resize', onViewport);
102
+ viewport?.removeEventListener('scroll', onViewport);
103
+ stopResize();
104
+ };
105
+ }
106
+
107
+ // Focus moves are heard only while a subscriber asks for them. A viewport
108
+ // reader, such as a Tall BottomSheet's hook under any pointer, adds no focus
109
+ // listener.
110
+ function attachFocus(win, store) {
111
+ const onFocus = event => {
112
+ const report = {
113
+ type: event.type === 'focusin' ? 'focusin' : 'focusout',
114
+ height: store.height,
115
+ timeStamp: event.timeStamp,
116
+ target: event.target,
117
+ relatedTarget: event.relatedTarget
118
+ };
119
+ for (const listener of [...store.focusListeners]) {
120
+ listener(report);
121
+ }
122
+ };
123
+ const stopFocusIn = subscribeInput(win, 'focusin', onFocus);
124
+ const stopFocusOut = subscribeInput(win, 'focusout', onFocus);
125
+ return () => {
126
+ stopFocusIn();
127
+ stopFocusOut();
128
+ };
129
+ }
130
+
131
+ /**
132
+ * Calls `listener` with every report of `win`'s keyboard until the caller
133
+ * runs the returned function. It reports the viewport's changes, and focus
134
+ * moves too when the caller sets `focus`. All subscribers of a window share
135
+ * one set of listeners, and its focus listeners exist only while a subscriber
136
+ * asks for focus moves.
137
+ *
138
+ * @example
139
+ * ```
140
+ * const stop = subscribeKeyboardHeight(window, event => {
141
+ * if (event.type === 'viewport') layout(event.height);
142
+ * });
143
+ * ```
144
+ */
145
+ export function subscribeKeyboardHeight(win, listener, {
146
+ focus = false
147
+ } = {}) {
148
+ const store = storeOf(win);
149
+ store.listeners.add(listener);
150
+ if (store.detach == null) {
151
+ store.detach = attach(win, store);
152
+ }
153
+ if (focus) {
154
+ store.focusListeners.add(listener);
155
+ if (store.detachFocus == null) {
156
+ store.detachFocus = attachFocus(win, store);
157
+ }
158
+ }
159
+ return () => {
160
+ store.listeners.delete(listener);
161
+ if (focus) {
162
+ store.focusListeners.delete(listener);
163
+ if (store.focusListeners.size === 0 && store.detachFocus != null) {
164
+ store.detachFocus();
165
+ store.detachFocus = null;
166
+ }
167
+ }
168
+ if (store.listeners.size === 0 && store.detach != null) {
169
+ store.detach();
170
+ store.detach = null;
171
+ }
172
+ };
173
+ }
174
+
175
+ /**
176
+ * `win`'s keyboard height. While the module listens, it is the height
177
+ * measured at the last report. Every reader of a keyboard change, such as
178
+ * each component's hook, shares that one layout read. Every change of the
179
+ * visual viewport or the window is a report, so a reader between two reports
180
+ * sees the current height. With nothing listening yet, the call measures the
181
+ * height now.
182
+ */
183
+ export function getKeyboardHeight(win) {
184
+ const store = stores.get(win);
185
+ return store?.detach != null ? store.height : measureKeyboardHeight(win);
186
+ }
187
+
188
+ /**
189
+ * Whether focusing `element` brings up a keyboard for typing text. A control
190
+ * with `inputmode="none"` brings up none.
191
+ */
192
+ export function isTextEntryControl(element) {
193
+ if (element instanceof HTMLElement && element.getAttribute('inputmode') === 'none') {
194
+ return false;
195
+ }
196
+ if (element instanceof HTMLTextAreaElement) {
197
+ return !element.disabled && !element.readOnly;
198
+ }
199
+ if (element instanceof HTMLInputElement) {
200
+ return !element.disabled && !element.readOnly && !NON_TEXT_INPUT_TYPES.has((element.getAttribute('type') ?? 'text').toLowerCase());
201
+ }
202
+ return element instanceof HTMLElement && element.matches('[contenteditable]:not([contenteditable="false"])');
203
+ }
204
+
205
+ /** The text-entry control inside `container` that `target` is or labels. */
206
+ export function findTextEntryControl(target, container) {
207
+ if (!(target instanceof Element)) {
208
+ return null;
209
+ }
210
+ const direct = target.closest('input, textarea, [contenteditable]:not([contenteditable="false"])');
211
+ if (container.contains(direct) && isTextEntryControl(direct)) {
212
+ return direct;
213
+ }
214
+ const label = target.closest('label');
215
+ const control = label instanceof HTMLLabelElement ? label.control : null;
216
+ return container.contains(control) && isTextEntryControl(control) ? control : null;
217
+ }
218
+
219
+ /** The caller's rules for refuseFocusReveal. */
220
+
221
+ // One shared `blur` subscription per document serves every caller of
222
+ // refuseFocusReveal in it, so listeners do not grow with the number of
223
+ // instances. The first caller adds it, and the last removes it.
224
+ const focusTakeovers = new WeakMap();
225
+
226
+ /**
227
+ * Delivers the focus moves `claim` accepts with `preventScroll`, so the
228
+ * browser never reveals their destination itself. It stops when the caller
229
+ * runs the returned function.
230
+ *
231
+ * The browser dispatches `blur` in the capture phase ahead of its own focus
232
+ * step, and `blur` names the destination in `relatedTarget`. Focusing it there
233
+ * with preventScroll settles the change. The browser's step then finds the
234
+ * element already active, so it dispatches nothing further and reveals
235
+ * nothing.
236
+ *
237
+ * @example
238
+ * ```
239
+ * const stop = refuseFocusReveal(document, {
240
+ * claim: target => findTextEntryControl(target, body),
241
+ * park: () => sheet.focus({preventScroll: true}),
242
+ * });
243
+ * ```
244
+ */
245
+ export function refuseFocusReveal(doc, {
246
+ isActive,
247
+ claim,
248
+ park
249
+ }) {
250
+ const onBlur = event => {
251
+ if (isActive != null && !isActive()) {
252
+ return;
253
+ }
254
+ const destination = claim(event.relatedTarget);
255
+ if (destination != null) {
256
+ if (destination !== doc.activeElement) {
257
+ destination.focus({
258
+ preventScroll: true
259
+ });
260
+ }
261
+ return;
262
+ }
263
+ if (event.relatedTarget == null) {
264
+ park?.(event.target);
265
+ }
266
+ };
267
+ let shared = focusTakeovers.get(doc);
268
+ if (shared == null) {
269
+ const view = doc.defaultView;
270
+ if (view == null) {
271
+ return () => {};
272
+ }
273
+ const callers = new Set();
274
+ // Callers hear each blur in the order they came, as separate listeners
275
+ // would; one that stopped during this blur no longer hears it.
276
+ const listener = event => {
277
+ for (const caller of [...callers]) {
278
+ if (callers.has(caller)) {
279
+ caller(event);
280
+ }
281
+ }
282
+ };
283
+ // `blur` does not bubble: only the capture phase hears every one, and it
284
+ // runs before the browser's own focus step. The window's own blur moves
285
+ // no focus inside the document.
286
+ const stop = subscribeInput(view, 'blur', event => {
287
+ if (isNodeTarget(event.target)) {
288
+ listener(event);
289
+ }
290
+ });
291
+ shared = {
292
+ stop,
293
+ callers
294
+ };
295
+ focusTakeovers.set(doc, shared);
296
+ }
297
+ shared.callers.add(onBlur);
298
+ return () => {
299
+ const current = focusTakeovers.get(doc);
300
+ if (current == null || !current.callers.delete(onBlur)) {
301
+ return;
302
+ }
303
+ if (current.callers.size === 0) {
304
+ current.stop();
305
+ focusTakeovers.delete(doc);
306
+ }
307
+ };
308
+ }
309
+
310
+ /**
311
+ * Test-only: how many callers refuse the focus reveal in `doc`, through its
312
+ * one shared subscription. Not part of the runtime API.
313
+ *
314
+ * @internal
315
+ */
316
+ export function __focusTakeoverCallersForTest(doc) {
317
+ return focusTakeovers.get(doc)?.callers.size ?? 0;
318
+ }
319
+
320
+ /** The caller's rules for watchRevealPan. */
321
+
322
+ /** A watch for the browser's own reveal pan (see watchRevealPan). */
323
+
324
+ // One shared touch subscription per document serves every reveal-pan watch
325
+ // in it, so no instance adds a listener. The first watch adds it, and the
326
+ // last removes it.
327
+ const touchStartWatches = new WeakMap();
328
+ function watchTouchStarts(doc, onTouchStart) {
329
+ let shared = touchStartWatches.get(doc);
330
+ if (shared == null) {
331
+ const view = doc.defaultView;
332
+ if (view == null) {
333
+ return () => {};
334
+ }
335
+ const watches = new Set();
336
+ const stop = subscribeInput(view, 'touchstart', () => {
337
+ for (const watch of [...watches]) {
338
+ watch();
339
+ }
340
+ });
341
+ shared = {
342
+ stop,
343
+ watches
344
+ };
345
+ touchStartWatches.set(doc, shared);
346
+ }
347
+ shared.watches.add(onTouchStart);
348
+ return () => {
349
+ const current = touchStartWatches.get(doc);
350
+ if (current == null || !current.watches.delete(onTouchStart)) {
351
+ return;
352
+ }
353
+ if (current.watches.size === 0) {
354
+ current.stop();
355
+ touchStartWatches.delete(doc);
356
+ }
357
+ };
358
+ }
359
+
360
+ /**
361
+ * Some browsers reveal a focused field themselves, after the keyboard's
362
+ * report, by panning the visual viewport to it while the keyboard still
363
+ * covers it. Firefox for Android pans 54 to 143 ms after the report. Chrome
364
+ * on Android animates a pan of the keyboard's whole height from about 100 to
365
+ * 170 ms after it. The page gets no frame until that pan ends. Such a pan
366
+ * moves the visual viewport down within the
367
+ * layout viewport. Since the report there is no touch, document scroll or
368
+ * zoom, and a text field the caller owns has focus. The watch reads the
369
+ * behavior, never the user agent. The caller lands its field itself and
370
+ * puts the pan back. Every keyboard-aware surface can use it.
371
+ *
372
+ * @example
373
+ * ```
374
+ * const watch = watchRevealPan(window, {owns: field => region.contains(field)});
375
+ * // On a report that changes the height: watch.report();
376
+ * // On any later report: if (watch.isRevealPan(height)) watch.putBack();
377
+ * ```
378
+ */
379
+ export function watchRevealPan(win, {
380
+ owns,
381
+ onTouch
382
+ }) {
383
+ const doc = win.document;
384
+ let atReport = null;
385
+ let touchedSinceReport = false;
386
+ const stopTouchStarts = watchTouchStarts(doc, () => {
387
+ touchedSinceReport = true;
388
+ onTouch?.();
389
+ });
390
+ return {
391
+ report: () => {
392
+ const viewport = win.visualViewport;
393
+ atReport = viewport == null ? null : {
394
+ x: win.scrollX,
395
+ y: win.scrollY,
396
+ top: viewport.offsetTop,
397
+ scale: viewport.scale
398
+ };
399
+ touchedSinceReport = false;
400
+ },
401
+ isRevealPan: height => {
402
+ const viewport = win.visualViewport;
403
+ const focused = doc.activeElement;
404
+ return viewport != null && atReport != null && !touchedSinceReport && height > 0 && viewport.offsetTop > atReport.top && viewport.scale === atReport.scale && win.scrollX === atReport.x && win.scrollY === atReport.y && focused instanceof HTMLElement && isTextEntryControl(focused) && owns(focused);
405
+ },
406
+ putBack: anchor => {
407
+ const options = {
408
+ block: 'start',
409
+ inline: 'nearest',
410
+ behavior: 'instant'
411
+ };
412
+ if (anchor != null) {
413
+ anchor.scrollIntoView(options);
414
+ return;
415
+ }
416
+ // A fixed element sits in the layout viewport, which the pan does not
417
+ // move: scrolling its top into view pans the visual viewport back.
418
+ const probe = doc.createElement('div');
419
+ probe.style.position = 'fixed';
420
+ probe.style.left = '0';
421
+ probe.style.top = `${atReport?.top ?? 0}px`;
422
+ probe.style.width = '1px';
423
+ probe.style.height = '1px';
424
+ probe.style.visibility = 'hidden';
425
+ probe.style.pointerEvents = 'none';
426
+ (doc.body ?? doc.documentElement).append(probe);
427
+ probe.scrollIntoView(options);
428
+ probe.remove();
429
+ },
430
+ stop: stopTouchStarts
431
+ };
432
+ }
@@ -0,0 +1,59 @@
1
+ import { type KeyboardProfile, type KeyboardTransition } from './keyboardModel.js';
2
+ /**
3
+ * Whose keyboard schedule the guide reads: `chromium` where the browser has
4
+ * the VirtualKeyboard API, else null. Without the profile, no surface rides
5
+ * the guide. Chrome reports the keyboard as each slide starts. The profile is
6
+ * a capability, never the user agent. motion/android/keyboard.ts holds the
7
+ * measured timing.
8
+ */
9
+ export declare function keyboardProfileOf(win: Window): KeyboardProfile | null;
10
+ /** A window's keyboard layout guide. */
11
+ export interface KeyboardLayoutGuide {
12
+ /** The inset the keyboard rests at (or is heading to), CSS px. */
13
+ readonly inset: number;
14
+ /** The latest transition. */
15
+ readonly transition: KeyboardTransition;
16
+ /** The inset presented at `time` (default now), CSS px. */
17
+ presentation(time?: number): number;
18
+ /**
19
+ * Calls `listener` with every transition, inside the event that revealed
20
+ * it, until the caller runs the returned function.
21
+ */
22
+ subscribe(listener: (transition: KeyboardTransition) => void): () => void;
23
+ /** Whose keyboard schedule the guide reads (keyboardProfileOf). */
24
+ readonly profile: KeyboardProfile | null;
25
+ }
26
+ /**
27
+ * Whether focusing `target` brings up a software keyboard (or another input
28
+ * view in its place, as a select's picker does).
29
+ */
30
+ export declare function bringsUpKeyboard(target: EventTarget | null): boolean;
31
+ /**
32
+ * The window's keyboard layout guide, created on first use.
33
+ *
34
+ * One guide serves each window. It subscribes to the keyboard module only
35
+ * while something subscribes to it. It owns no listener and measures nothing.
36
+ * It feeds the model the module's reports, the keyboard height and the focus
37
+ * changes that start a hide. It hands each transition to its subscribers.
38
+ * What it adds is timing: when a show started, a hide predicted from the
39
+ * blur, and the motion in between. Layout follows the keyboard height
40
+ * itself, and the guide's transitions only time the optional ride on top.
41
+ *
42
+ * The model reads Chrome's measured schedule: Chrome reports each slide just
43
+ * after it starts. A surface rides the guide only where the VirtualKeyboard
44
+ * API reports the keyboard. Focus can move from one field to another through
45
+ * something that brings no keyboard, such as a popover's container. Chrome
46
+ * then reports the keyboard gone for a moment and then back. So a hide
47
+ * reported while a field that just got focus still has it waits until the
48
+ * move settles.
49
+ *
50
+ * @example
51
+ * ```
52
+ * const guide = getKeyboardLayoutGuide(window);
53
+ * const unsubscribe = guide.subscribe(t => {
54
+ * rideKeyboard(animator, {y: -t.to}, t);
55
+ * });
56
+ * ```
57
+ */
58
+ export declare function getKeyboardLayoutGuide(win: Window): KeyboardLayoutGuide;
59
+ //# sourceMappingURL=keyboardLayoutGuide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboardLayoutGuide.d.ts","sourceRoot":"","sources":["../../src/keyboard/keyboardLayoutGuide.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAErE;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,2DAA2D;IAC3D,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1E,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAkBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAMpE;AAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAOvE"}
@@ -0,0 +1,207 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file keyboardLayoutGuide.ts
5
+ * @input The keyboard module's reports (subscribeKeyboardHeight) and
6
+ * createKeyboardModel
7
+ * @output getKeyboardLayoutGuide (a window's one guide), bringsUpKeyboard and
8
+ * the KeyboardLayoutGuide type
9
+ * @position The web's UIKeyboardLayoutGuide: where the software keyboard
10
+ * covers the layout viewport and how it moves. Touch presentations read it
11
+ * to keep content above the keyboard. It is internal to core.
12
+ *
13
+ * SYNC: When modified, update /packages/core/src/keyboard/README.md
14
+ */
15
+
16
+ import { getKeyboardHeight, isTextEntryControl, subscribeKeyboardHeight } from "./keyboardHeight.js";
17
+ import { createKeyboardModel } from "./keyboardModel.js";
18
+
19
+ /**
20
+ * Whose keyboard schedule the guide reads: `chromium` where the browser has
21
+ * the VirtualKeyboard API, else null. Without the profile, no surface rides
22
+ * the guide. Chrome reports the keyboard as each slide starts. The profile is
23
+ * a capability, never the user agent. motion/android/keyboard.ts holds the
24
+ * measured timing.
25
+ */
26
+ export function keyboardProfileOf(win) {
27
+ return 'virtualKeyboard' in win.navigator ? 'chromium' : null;
28
+ }
29
+
30
+ /** A window's keyboard layout guide. */
31
+
32
+ // Extra time after a predicted transition's end before checking it.
33
+ const VERIFY_SLACK_MS = 150;
34
+ // How long after a field gains focus Chrome may still report the keyboard
35
+ // gone for a moment (measured: back within 50 ms of the move).
36
+ const FOCUS_HANDOFF_MS = 150;
37
+
38
+ // Controls whose picker Chrome on Android opens over the page while the
39
+ // keyboard goes away; on iOS the picker takes the keyboard's place.
40
+ const PICKER_INPUT_TYPES = new Set(['date', 'datetime-local', 'month', 'time', 'week']);
41
+
42
+ /**
43
+ * Whether focusing `target` brings up a software keyboard (or another input
44
+ * view in its place, as a select's picker does).
45
+ */
46
+ export function bringsUpKeyboard(target) {
47
+ const element = target instanceof Element ? target : null;
48
+ return isTextEntryControl(element) || element instanceof HTMLSelectElement && !element.disabled;
49
+ }
50
+
51
+ // Whether `target` is a select, or a date or time field, which Chrome on
52
+ // Android edits in a picker over the page.
53
+ function opensPickerOverPage(target) {
54
+ const element = target;
55
+ if (element == null || element.nodeType !== 1) {
56
+ return false;
57
+ }
58
+ return element.tagName === 'SELECT' || element.tagName === 'INPUT' && PICKER_INPUT_TYPES.has(element.type);
59
+ }
60
+ const guides = new WeakMap();
61
+
62
+ /**
63
+ * The window's keyboard layout guide, created on first use.
64
+ *
65
+ * One guide serves each window. It subscribes to the keyboard module only
66
+ * while something subscribes to it. It owns no listener and measures nothing.
67
+ * It feeds the model the module's reports, the keyboard height and the focus
68
+ * changes that start a hide. It hands each transition to its subscribers.
69
+ * What it adds is timing: when a show started, a hide predicted from the
70
+ * blur, and the motion in between. Layout follows the keyboard height
71
+ * itself, and the guide's transitions only time the optional ride on top.
72
+ *
73
+ * The model reads Chrome's measured schedule: Chrome reports each slide just
74
+ * after it starts. A surface rides the guide only where the VirtualKeyboard
75
+ * API reports the keyboard. Focus can move from one field to another through
76
+ * something that brings no keyboard, such as a popover's container. Chrome
77
+ * then reports the keyboard gone for a moment and then back. So a hide
78
+ * reported while a field that just got focus still has it waits until the
79
+ * move settles.
80
+ *
81
+ * @example
82
+ * ```
83
+ * const guide = getKeyboardLayoutGuide(window);
84
+ * const unsubscribe = guide.subscribe(t => {
85
+ * rideKeyboard(animator, {y: -t.to}, t);
86
+ * });
87
+ * ```
88
+ */
89
+ export function getKeyboardLayoutGuide(win) {
90
+ let guide = guides.get(win);
91
+ if (guide == null) {
92
+ guide = createGuide(win);
93
+ guides.set(win, guide);
94
+ }
95
+ return guide;
96
+ }
97
+ function createGuide(win) {
98
+ const listeners = new Set();
99
+ let profile = keyboardProfileOf(win);
100
+ let model = createKeyboardModel(getKeyboardHeight(win));
101
+ let verifyTimer = null;
102
+ let detach = null;
103
+ const publish = transition => {
104
+ if (transition == null) {
105
+ return;
106
+ }
107
+ if (transition.predicted) {
108
+ scheduleVerify(transition);
109
+ }
110
+ for (const listener of [...listeners]) {
111
+ listener(transition);
112
+ }
113
+ };
114
+ const scheduleVerify = transition => {
115
+ if (verifyTimer != null) {
116
+ clearTimeout(verifyTimer);
117
+ }
118
+ const due = transition.start + (transition.curve?.durationMs ?? 0) + VERIFY_SLACK_MS;
119
+ verifyTimer = setTimeout(() => {
120
+ verifyTimer = null;
121
+ publish(model.verify(getKeyboardHeight(win), win.performance.now()));
122
+ }, Math.max(0, due - win.performance.now()));
123
+ };
124
+ const attach = () => {
125
+ profile = keyboardProfileOf(win);
126
+ model = createKeyboardModel(getKeyboardHeight(win));
127
+ // Whether focusing `target` keeps an input view where the keyboard is. On
128
+ // iOS, a select's picker or a date or time field's picker takes the
129
+ // keyboard's place. Chrome on Android opens it over the page, and the
130
+ // keyboard goes away.
131
+ const keepsInputView = target => bringsUpKeyboard(target) && !(profile === 'chromium' && opensPickerOverPage(target));
132
+ // When a field that brings up a keyboard last gained focus.
133
+ let keyboardFocusAt = -Infinity;
134
+ let handoffTimer = null;
135
+ const report = (height, time) => {
136
+ if (handoffTimer != null) {
137
+ clearTimeout(handoffTimer);
138
+ handoffTimer = null;
139
+ }
140
+ const settled = keyboardFocusAt + FOCUS_HANDOFF_MS;
141
+ if (profile === 'chromium' && height < 0.5 && model.inset >= 0.5 && time < settled && keepsInputView(win.document.activeElement)) {
142
+ // Focus just moved to another field: Chrome reports the keyboard
143
+ // gone before it reports it back. Hold the hide until the move
144
+ // settles, then believe whatever the keyboard is doing.
145
+ handoffTimer = setTimeout(() => {
146
+ handoffTimer = null;
147
+ publish(model.report(getKeyboardHeight(win), settled));
148
+ }, settled - time);
149
+ return null;
150
+ }
151
+ return model.report(height, time);
152
+ };
153
+ const onReport = event => {
154
+ if (event.type === 'viewport') {
155
+ publish(report(event.height, event.timeStamp));
156
+ } else if (event.type === 'focusin') {
157
+ if (keepsInputView(event.target)) {
158
+ keyboardFocusAt = event.timeStamp;
159
+ publish(model.focused(event.timeStamp));
160
+ }
161
+ } else if (keepsInputView(event.target) && !keepsInputView(event.relatedTarget)) {
162
+ publish(model.blurred(event.timeStamp));
163
+ }
164
+ };
165
+ const unsubscribe = subscribeKeyboardHeight(win, onReport, {
166
+ focus: true
167
+ });
168
+ return () => {
169
+ unsubscribe();
170
+ if (handoffTimer != null) {
171
+ clearTimeout(handoffTimer);
172
+ handoffTimer = null;
173
+ }
174
+ if (verifyTimer != null) {
175
+ clearTimeout(verifyTimer);
176
+ verifyTimer = null;
177
+ }
178
+ };
179
+ };
180
+ return {
181
+ get profile() {
182
+ return profile;
183
+ },
184
+ get inset() {
185
+ return model.inset;
186
+ },
187
+ get transition() {
188
+ return model.transition;
189
+ },
190
+ presentation(time = win.performance.now()) {
191
+ return model.presentation(time);
192
+ },
193
+ subscribe(listener) {
194
+ listeners.add(listener);
195
+ if (detach == null) {
196
+ detach = attach();
197
+ }
198
+ return () => {
199
+ listeners.delete(listener);
200
+ if (listeners.size === 0 && detach != null) {
201
+ detach();
202
+ detach = null;
203
+ }
204
+ };
205
+ }
206
+ };
207
+ }