@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,266 @@
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 {
17
+ getKeyboardHeight,
18
+ isTextEntryControl,
19
+ subscribeKeyboardHeight,
20
+ type KeyboardHeightEvent,
21
+ } from './keyboardHeight';
22
+ import {
23
+ createKeyboardModel,
24
+ type KeyboardModel,
25
+ type KeyboardProfile,
26
+ type KeyboardTransition,
27
+ } from './keyboardModel';
28
+
29
+ /**
30
+ * Whose keyboard schedule the guide reads: `chromium` where the browser has
31
+ * the VirtualKeyboard API, else null. Without the profile, no surface rides
32
+ * the guide. Chrome reports the keyboard as each slide starts. The profile is
33
+ * a capability, never the user agent. motion/android/keyboard.ts holds the
34
+ * measured timing.
35
+ */
36
+ export function keyboardProfileOf(win: Window): KeyboardProfile | null {
37
+ return 'virtualKeyboard' in win.navigator ? 'chromium' : null;
38
+ }
39
+
40
+ /** A window's keyboard layout guide. */
41
+ export interface KeyboardLayoutGuide {
42
+ /** The inset the keyboard rests at (or is heading to), CSS px. */
43
+ readonly inset: number;
44
+ /** The latest transition. */
45
+ readonly transition: KeyboardTransition;
46
+ /** The inset presented at `time` (default now), CSS px. */
47
+ presentation(time?: number): number;
48
+ /**
49
+ * Calls `listener` with every transition, inside the event that revealed
50
+ * it, until the caller runs the returned function.
51
+ */
52
+ subscribe(listener: (transition: KeyboardTransition) => void): () => void;
53
+ /** Whose keyboard schedule the guide reads (keyboardProfileOf). */
54
+ readonly profile: KeyboardProfile | null;
55
+ }
56
+
57
+ // Extra time after a predicted transition's end before checking it.
58
+ const VERIFY_SLACK_MS = 150;
59
+ // How long after a field gains focus Chrome may still report the keyboard
60
+ // gone for a moment (measured: back within 50 ms of the move).
61
+ const FOCUS_HANDOFF_MS = 150;
62
+
63
+ // Controls whose picker Chrome on Android opens over the page while the
64
+ // keyboard goes away; on iOS the picker takes the keyboard's place.
65
+ const PICKER_INPUT_TYPES = new Set([
66
+ 'date',
67
+ 'datetime-local',
68
+ 'month',
69
+ 'time',
70
+ 'week',
71
+ ]);
72
+
73
+ /**
74
+ * Whether focusing `target` brings up a software keyboard (or another input
75
+ * view in its place, as a select's picker does).
76
+ */
77
+ export function bringsUpKeyboard(target: EventTarget | null): boolean {
78
+ const element = target instanceof Element ? target : null;
79
+ return (
80
+ isTextEntryControl(element) ||
81
+ (element instanceof HTMLSelectElement && !element.disabled)
82
+ );
83
+ }
84
+
85
+ // Whether `target` is a select, or a date or time field, which Chrome on
86
+ // Android edits in a picker over the page.
87
+ function opensPickerOverPage(target: EventTarget | null): boolean {
88
+ const element = target as HTMLElement | null;
89
+ if (element == null || element.nodeType !== 1) {
90
+ return false;
91
+ }
92
+ return (
93
+ element.tagName === 'SELECT' ||
94
+ (element.tagName === 'INPUT' &&
95
+ PICKER_INPUT_TYPES.has((element as HTMLInputElement).type))
96
+ );
97
+ }
98
+
99
+ const guides = new WeakMap<Window, KeyboardLayoutGuide>();
100
+
101
+ /**
102
+ * The window's keyboard layout guide, created on first use.
103
+ *
104
+ * One guide serves each window. It subscribes to the keyboard module only
105
+ * while something subscribes to it. It owns no listener and measures nothing.
106
+ * It feeds the model the module's reports, the keyboard height and the focus
107
+ * changes that start a hide. It hands each transition to its subscribers.
108
+ * What it adds is timing: when a show started, a hide predicted from the
109
+ * blur, and the motion in between. Layout follows the keyboard height
110
+ * itself, and the guide's transitions only time the optional ride on top.
111
+ *
112
+ * The model reads Chrome's measured schedule: Chrome reports each slide just
113
+ * after it starts. A surface rides the guide only where the VirtualKeyboard
114
+ * API reports the keyboard. Focus can move from one field to another through
115
+ * something that brings no keyboard, such as a popover's container. Chrome
116
+ * then reports the keyboard gone for a moment and then back. So a hide
117
+ * reported while a field that just got focus still has it waits until the
118
+ * move settles.
119
+ *
120
+ * @example
121
+ * ```
122
+ * const guide = getKeyboardLayoutGuide(window);
123
+ * const unsubscribe = guide.subscribe(t => {
124
+ * rideKeyboard(animator, {y: -t.to}, t);
125
+ * });
126
+ * ```
127
+ */
128
+ export function getKeyboardLayoutGuide(win: Window): KeyboardLayoutGuide {
129
+ let guide = guides.get(win);
130
+ if (guide == null) {
131
+ guide = createGuide(win);
132
+ guides.set(win, guide);
133
+ }
134
+ return guide;
135
+ }
136
+
137
+ function createGuide(win: Window): KeyboardLayoutGuide {
138
+ const listeners = new Set<(transition: KeyboardTransition) => void>();
139
+ let profile = keyboardProfileOf(win);
140
+ let model: KeyboardModel = createKeyboardModel(getKeyboardHeight(win));
141
+ let verifyTimer: ReturnType<typeof setTimeout> | null = null;
142
+ let detach: (() => void) | null = null;
143
+
144
+ const publish = (transition: KeyboardTransition | null) => {
145
+ if (transition == null) {
146
+ return;
147
+ }
148
+ if (transition.predicted) {
149
+ scheduleVerify(transition);
150
+ }
151
+ for (const listener of [...listeners]) {
152
+ listener(transition);
153
+ }
154
+ };
155
+ const scheduleVerify = (transition: KeyboardTransition) => {
156
+ if (verifyTimer != null) {
157
+ clearTimeout(verifyTimer);
158
+ }
159
+ const due =
160
+ transition.start + (transition.curve?.durationMs ?? 0) + VERIFY_SLACK_MS;
161
+ verifyTimer = setTimeout(
162
+ () => {
163
+ verifyTimer = null;
164
+ publish(model.verify(getKeyboardHeight(win), win.performance.now()));
165
+ },
166
+ Math.max(0, due - win.performance.now()),
167
+ );
168
+ };
169
+
170
+ const attach = () => {
171
+ profile = keyboardProfileOf(win);
172
+ model = createKeyboardModel(getKeyboardHeight(win));
173
+ // Whether focusing `target` keeps an input view where the keyboard is. On
174
+ // iOS, a select's picker or a date or time field's picker takes the
175
+ // keyboard's place. Chrome on Android opens it over the page, and the
176
+ // keyboard goes away.
177
+ const keepsInputView = (target: EventTarget | null): boolean =>
178
+ bringsUpKeyboard(target) &&
179
+ !(profile === 'chromium' && opensPickerOverPage(target));
180
+ // When a field that brings up a keyboard last gained focus.
181
+ let keyboardFocusAt = -Infinity;
182
+ let handoffTimer: ReturnType<typeof setTimeout> | null = null;
183
+ const report = (
184
+ height: number,
185
+ time: number,
186
+ ): KeyboardTransition | null => {
187
+ if (handoffTimer != null) {
188
+ clearTimeout(handoffTimer);
189
+ handoffTimer = null;
190
+ }
191
+ const settled = keyboardFocusAt + FOCUS_HANDOFF_MS;
192
+ if (
193
+ profile === 'chromium' &&
194
+ height < 0.5 &&
195
+ model.inset >= 0.5 &&
196
+ time < settled &&
197
+ keepsInputView(win.document.activeElement)
198
+ ) {
199
+ // Focus just moved to another field: Chrome reports the keyboard
200
+ // gone before it reports it back. Hold the hide until the move
201
+ // settles, then believe whatever the keyboard is doing.
202
+ handoffTimer = setTimeout(() => {
203
+ handoffTimer = null;
204
+ publish(model.report(getKeyboardHeight(win), settled));
205
+ }, settled - time);
206
+ return null;
207
+ }
208
+ return model.report(height, time);
209
+ };
210
+ const onReport = (event: KeyboardHeightEvent) => {
211
+ if (event.type === 'viewport') {
212
+ publish(report(event.height, event.timeStamp));
213
+ } else if (event.type === 'focusin') {
214
+ if (keepsInputView(event.target)) {
215
+ keyboardFocusAt = event.timeStamp;
216
+ publish(model.focused(event.timeStamp));
217
+ }
218
+ } else if (
219
+ keepsInputView(event.target) &&
220
+ !keepsInputView(event.relatedTarget)
221
+ ) {
222
+ publish(model.blurred(event.timeStamp));
223
+ }
224
+ };
225
+ const unsubscribe = subscribeKeyboardHeight(win, onReport, {focus: true});
226
+ return () => {
227
+ unsubscribe();
228
+ if (handoffTimer != null) {
229
+ clearTimeout(handoffTimer);
230
+ handoffTimer = null;
231
+ }
232
+ if (verifyTimer != null) {
233
+ clearTimeout(verifyTimer);
234
+ verifyTimer = null;
235
+ }
236
+ };
237
+ };
238
+
239
+ return {
240
+ get profile() {
241
+ return profile;
242
+ },
243
+ get inset() {
244
+ return model.inset;
245
+ },
246
+ get transition() {
247
+ return model.transition;
248
+ },
249
+ presentation(time = win.performance.now()) {
250
+ return model.presentation(time);
251
+ },
252
+ subscribe(listener) {
253
+ listeners.add(listener);
254
+ if (detach == null) {
255
+ detach = attach();
256
+ }
257
+ return () => {
258
+ listeners.delete(listener);
259
+ if (listeners.size === 0 && detach != null) {
260
+ detach();
261
+ detach = null;
262
+ }
263
+ };
264
+ },
265
+ };
266
+ }
@@ -0,0 +1,301 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file keyboardModel.ts
5
+ * @input `keyboard` from the Android table: Gboard's slides and Chrome's
6
+ * report timings
7
+ * @output createKeyboardModel, the keyboard layout guide's clock-free core,
8
+ * and the KeyboardTransition and KeyboardModel types
9
+ * @position The state of the keyboard layout guide (keyboardLayoutGuide.ts).
10
+ * It infers the keyboard's transition from the visual viewport's reports
11
+ * and focus changes, each input with its own time. It is internal to core.
12
+ *
13
+ * SYNC: When modified, update /packages/core/src/keyboard/README.md
14
+ */
15
+
16
+ import {keyboard as androidKeyboard} from '../motion/android/keyboard';
17
+ import {cubicBezier} from '../motion/bezier';
18
+
19
+ /** Which browser's keyboard reports the guide reads. */
20
+ export type KeyboardProfile = 'chromium';
21
+
22
+ /** An eased slide: the curve a transition plays (Gboard going up or down). */
23
+ export interface KeyboardCurve {
24
+ /** Length, ms. */
25
+ readonly durationMs: number;
26
+ /** Cubic-bézier control points. */
27
+ readonly points: readonly [number, number, number, number];
28
+ }
29
+
30
+ /** How the keyboard's cover changes. */
31
+ export type KeyboardTransitionKind = 'show' | 'hide' | 'change';
32
+
33
+ /** One change of the keyboard's cover, as the guide reports it. */
34
+ export interface KeyboardTransition {
35
+ readonly kind: KeyboardTransitionKind;
36
+ /** Inset presented at `start`, CSS px. */
37
+ readonly from: number;
38
+ /** Inset the keyboard comes to rest at, CSS px. */
39
+ readonly to: number;
40
+ /**
41
+ * When the keyboard starts to move, ms on the document timeline
42
+ * (`performance.now()`). For a slide Chrome reported, the guide dates it
43
+ * back to Gboard's start. For a hide after a blur, it is shortly ahead.
44
+ */
45
+ readonly start: number;
46
+ /** The inset's velocity at `start`, px/s (0 unless it interrupts one). */
47
+ readonly velocity: number;
48
+ /** False when the inset jumps at `start` (another keyboard while one is up). */
49
+ readonly animated: boolean;
50
+ /** True until the visual viewport confirms a transition the guide inferred. */
51
+ readonly predicted: boolean;
52
+ /**
53
+ * The eased slide the keyboard moves on (Gboard in Chrome on Android), or
54
+ * null when the inset jumps. A surface riding the keyboard plays it from
55
+ * `start`, as rideKeyboard does. It is the keyboard's own motion, with no
56
+ * motion role.
57
+ */
58
+ readonly curve: KeyboardCurve | null;
59
+ }
60
+
61
+ /** The guide's clock-free core: inputs carry their own times. */
62
+ export interface KeyboardModel {
63
+ /** The inset the keyboard rests at (or is heading to), CSS px. */
64
+ readonly inset: number;
65
+ /** The latest transition. */
66
+ readonly transition: KeyboardTransition;
67
+ /** The inset presented at `time`, CSS px. */
68
+ presentation(time: number): number;
69
+ /** The presented inset's velocity at `time`, px/s. */
70
+ velocity(time: number): number;
71
+ /**
72
+ * The visual viewport reports an inset (null when unknown) at `time` (the
73
+ * event's timestamp). Returns the transition the report starts, if any.
74
+ */
75
+ report(inset: number | null, time: number): KeyboardTransition | null;
76
+ /**
77
+ * A control that brings up a keyboard lost focus to nothing that brings
78
+ * up one.
79
+ */
80
+ blurred(time: number): KeyboardTransition | null;
81
+ /** A control that brings up a keyboard gained focus. */
82
+ focused(time: number): KeyboardTransition | null;
83
+ /**
84
+ * Checks a predicted transition against the viewport once it should have
85
+ * ended; moves to what the viewport says when they disagree.
86
+ */
87
+ verify(inset: number | null, time: number): KeyboardTransition | null;
88
+ }
89
+
90
+ const EPSILON = 0.5;
91
+
92
+ /** The inset and its velocity, seconds after a transition's start. */
93
+ interface InsetCurve {
94
+ value(t: number): number;
95
+ velocity(t: number): number;
96
+ }
97
+
98
+ /**
99
+ * Creates the guide's core. Tests drive it with explicit times, and the
100
+ * window's guide feeds it events.
101
+ *
102
+ * Chrome reports each keyboard slide through the visual viewport just after
103
+ * it starts (README.md, "What the page sees"). Content rides Gboard's own
104
+ * slides, fitted on Chromium 158 with Gboard (motion/android/keyboard.ts).
105
+ *
106
+ * - Show: from the report, dated back `androidKeyboard.showReportLagMs`, on
107
+ * `showCurve` over `showMs`, joining the slide where it is. The report's
108
+ * first painted frame trails Gboard's first moved frame by 14 to 35 ms. An
109
+ * `<input>` that brings an accessory bar first gives a smaller report
110
+ * before the keyboard's. It rides to the last keyboard's height instead, as
111
+ * a prediction, and the keyboard's report confirms it.
112
+ * - Hide: on `hideCurve` over `hideMs`. It starts
113
+ * `androidKeyboard.hideAfterBlurMs` after a blur that brings no keyboard,
114
+ * as a prediction, because Gboard starts down at the blur. When nothing
115
+ * predicted it, as with Back, it starts from Chrome's report, dated back
116
+ * `hideReportLagMs`, the lag measured on blurs.
117
+ * - A keyboard that changes while up, such as another keyboard, lays out at
118
+ * once.
119
+ *
120
+ * A prediction the viewport has not confirmed by its end gives way to what
121
+ * the viewport says (`verify`).
122
+ */
123
+ export function createKeyboardModel(initialInset = 0): KeyboardModel {
124
+ let transition: KeyboardTransition = {
125
+ kind: 'change',
126
+ from: initialInset,
127
+ to: initialInset,
128
+ start: -Infinity,
129
+ velocity: 0,
130
+ animated: false,
131
+ predicted: false,
132
+ curve: null,
133
+ };
134
+ // The inset over seconds since the transition's start.
135
+ let curve: InsetCurve | null = null;
136
+ // An eased slide's value and velocity.
137
+ const easedCurve = (
138
+ from: number,
139
+ to: number,
140
+ slide: KeyboardCurve,
141
+ ): InsetCurve => {
142
+ const span = slide.durationMs / 1000;
143
+ const ease = cubicBezier(slide.points);
144
+ const value = (t: number) =>
145
+ from + (to - from) * ease(Math.min(1, Math.max(0, t / span)));
146
+ return {
147
+ value,
148
+ velocity: (t: number) => {
149
+ if (t >= span) {
150
+ return 0;
151
+ }
152
+ const a = Math.max(0, t - 0.001);
153
+ const b = Math.min(span, t + 0.001);
154
+ return (value(b) - value(a)) / (b - a);
155
+ },
156
+ };
157
+ };
158
+ // Gboard's slides, as Chrome draws them: the table's show and hide curves.
159
+ const showSlide: KeyboardCurve = {
160
+ durationMs: androidKeyboard.showMs,
161
+ points: androidKeyboard.showCurve,
162
+ };
163
+ const hideSlide: KeyboardCurve = {
164
+ durationMs: androidKeyboard.hideMs,
165
+ points: androidKeyboard.hideCurve,
166
+ };
167
+ // How long the current transition moves for.
168
+ const lengthOf = () =>
169
+ transition.curve != null ? transition.curve.durationMs : 0;
170
+ // The inset of the last keyboard that was up, for a hide that turns back.
171
+ let shownInset = initialInset;
172
+
173
+ const presentation = (time: number): number => {
174
+ // A jump has happened at its start; a curve starts from `from`.
175
+ if (time < transition.start) {
176
+ return transition.from;
177
+ }
178
+ if (curve == null || time >= transition.start + lengthOf()) {
179
+ return transition.to;
180
+ }
181
+ return curve.value((time - transition.start) / 1000);
182
+ };
183
+ const velocity = (time: number): number => {
184
+ if (time <= transition.start) {
185
+ return transition.velocity;
186
+ }
187
+ if (curve == null || time >= transition.start + lengthOf()) {
188
+ return 0;
189
+ }
190
+ return curve.velocity((time - transition.start) / 1000);
191
+ };
192
+
193
+ const begin = (
194
+ kind: KeyboardTransitionKind,
195
+ to: number,
196
+ start: number,
197
+ {animated = true, predicted = false} = {},
198
+ ): KeyboardTransition => {
199
+ // Never date a transition before the one it interrupts.
200
+ const at = Math.max(start, transition.start);
201
+ const from = presentation(at);
202
+ const v = animated ? velocity(at) : 0;
203
+ const slide = animated ? (to > from ? showSlide : hideSlide) : null;
204
+ transition = {
205
+ kind,
206
+ from,
207
+ to,
208
+ start: at,
209
+ velocity: v,
210
+ animated,
211
+ predicted,
212
+ curve: slide,
213
+ };
214
+ curve =
215
+ slide != null && Math.abs(to - from) + Math.abs(v) > 0
216
+ ? easedCurve(from, to, slide)
217
+ : null;
218
+ if (to > EPSILON) {
219
+ shownInset = to;
220
+ }
221
+ return transition;
222
+ };
223
+ const confirm = (): null => {
224
+ if (transition.predicted) {
225
+ transition = {...transition, predicted: false};
226
+ }
227
+ return null;
228
+ };
229
+
230
+ return {
231
+ get inset() {
232
+ return transition.to;
233
+ },
234
+ get transition() {
235
+ return transition;
236
+ },
237
+ presentation,
238
+ velocity,
239
+ report(inset, time) {
240
+ if (inset == null) {
241
+ return null;
242
+ }
243
+ const target = transition.to;
244
+ if (Math.abs(inset - target) < EPSILON) {
245
+ return confirm();
246
+ }
247
+ if (inset <= EPSILON) {
248
+ // A hide nothing predicted (Back): Chrome reports it just after
249
+ // Gboard starts down, so it rides from that moment.
250
+ return begin('hide', 0, time - androidKeyboard.hideReportLagMs);
251
+ }
252
+ if (target <= EPSILON) {
253
+ // Chrome reports the show just after Gboard starts up: ride from
254
+ // that moment, joining the slide where it is. A smaller first
255
+ // report is the accessory bar, the keyboard's own following: ride
256
+ // to the last keyboard's height and let its report confirm it.
257
+ const predicted = shownInset > inset + EPSILON;
258
+ return begin(
259
+ 'show',
260
+ predicted ? shownInset : inset,
261
+ time - androidKeyboard.showReportLagMs,
262
+ {predicted},
263
+ );
264
+ }
265
+ // The keyboard changed while up (another keyboard, or the keyboard's
266
+ // report after the accessory bar's): Chrome lays the page out at once.
267
+ return begin('change', inset, time, {animated: false});
268
+ },
269
+ blurred(time) {
270
+ if (transition.to <= EPSILON) {
271
+ return null;
272
+ }
273
+ return begin('hide', 0, time + androidKeyboard.hideAfterBlurMs, {
274
+ predicted: true,
275
+ });
276
+ },
277
+ focused(time) {
278
+ if (transition.kind !== 'hide' || !transition.predicted) {
279
+ return null;
280
+ }
281
+ // Focus came back before the predicted hide finished: the keyboard
282
+ // turns back to the inset it had.
283
+ return begin('show', shownInset, Math.max(time, transition.start), {
284
+ predicted: true,
285
+ });
286
+ },
287
+ verify(inset, time) {
288
+ if (
289
+ !transition.predicted ||
290
+ inset == null ||
291
+ time < transition.start + lengthOf()
292
+ ) {
293
+ return null;
294
+ }
295
+ if (Math.abs(inset - transition.to) < EPSILON) {
296
+ return confirm();
297
+ }
298
+ return begin(inset > transition.to ? 'show' : 'hide', inset, time);
299
+ },
300
+ };
301
+ }
@@ -0,0 +1,100 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file rideKeyboard.ts
5
+ * @input An animator, target values and a keyboard transition, with its
6
+ * start and the curve the guide publishes with it, and ride options
7
+ * @output rideKeyboard, which moves an element with the keyboard on the
8
+ * keyboard's own motion
9
+ * @position Keyboard module, internal to core. A guide subscriber calls it
10
+ * for each transition, as BottomSheet's hook does.
11
+ *
12
+ * SYNC: When modified, update /packages/core/src/keyboard/README.md
13
+ */
14
+
15
+ import type {
16
+ Animator,
17
+ MotionCurve,
18
+ MotionHandle,
19
+ MotionProperty,
20
+ MotionValues,
21
+ } from '../motion/animator';
22
+ import {cubicBezier} from '../motion/bezier';
23
+ import type {KeyboardTransition} from './keyboardModel';
24
+
25
+ /** How a ride treats Reduce Motion. */
26
+ export interface RideOptions {
27
+ /**
28
+ * Under Reduce Motion, lands the element at once and fades it in. Without
29
+ * it, the animator's own Reduce Motion plan applies.
30
+ */
31
+ readonly entrance?: boolean;
32
+ }
33
+
34
+ /**
35
+ * Moves `animator`'s element to `to` with the keyboard: on its curve from
36
+ * `transition.start`, or at once when the keyboard jumps.
37
+ *
38
+ * Android's keyboard moves on Gboard's slides up and down
39
+ * (motion/android/keyboard.ts). The transition publishes the slide
40
+ * (`curve`), and the ride plays it. Every ride starts at the transition's
41
+ * start, so content that joins a slide late lands where the keyboard is. A
42
+ * transition that is not animated lands at once, such as a keyboard changing
43
+ * while up. So does a slide that has ended by the call. These values are the
44
+ * keyboard's own motion, with no motion role. The system moves the keyboard
45
+ * on them whatever the page does, so any other curve would leave the element
46
+ * out of step.
47
+ *
48
+ * @example
49
+ * ```
50
+ * guide.subscribe(t => rideKeyboard(dock.animator, {y: -lift(t.to)}, t));
51
+ * ```
52
+ */
53
+ export function rideKeyboard(
54
+ animator: Animator,
55
+ to: MotionValues,
56
+ transition: KeyboardTransition,
57
+ {entrance = false}: RideOptions = {},
58
+ ): MotionHandle | null {
59
+ // A frame after a busy task still draws an animation at that task's
60
+ // start. The ride sets a slide that has already ended, so no frame shows the
61
+ // element short of its target.
62
+ if (
63
+ !transition.animated ||
64
+ transition.curve == null ||
65
+ performance.now() >= transition.start + transition.curve.durationMs
66
+ ) {
67
+ animator.set(to);
68
+ return null;
69
+ }
70
+ // Under Reduce Motion nothing travels. The animator's default cross-fades
71
+ // the element to its new place on a touch screen, and elsewhere moves it at
72
+ // once. An entrance lands it at once and fades it in.
73
+ const options = entrance
74
+ ? {at: transition.start, crossfadeAs: 'entrance' as const}
75
+ : {at: transition.start};
76
+ const span = transition.curve.durationMs / 1000;
77
+ const ease = cubicBezier(transition.curve.points);
78
+ const curves: Partial<Record<MotionProperty, MotionCurve>> = {};
79
+ for (const [property, target] of Object.entries(to) as [
80
+ MotionProperty,
81
+ number,
82
+ ][]) {
83
+ const from = animator.get(property, transition.start);
84
+ const at = (t: number) =>
85
+ from + (target - from) * ease(Math.min(1, Math.max(0, t / span)));
86
+ curves[property] = {
87
+ duration: span,
88
+ at,
89
+ velocity: t => {
90
+ if (t >= span) {
91
+ return 0;
92
+ }
93
+ const a = Math.max(0, t - 0.001);
94
+ const b = Math.min(span, t + 0.001);
95
+ return (at(b) - at(a)) / (b - a);
96
+ },
97
+ };
98
+ }
99
+ return animator.play(curves, options);
100
+ }