@astryxdesign/core 0.7.6 → 0.7.7-canary.0eb44a2

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 (272) hide show
  1. package/dist/AppShell/AppShell.d.ts.map +1 -1
  2. package/dist/AppShell/AppShell.js +23 -3
  3. package/dist/Avatar/Avatar.d.ts.map +1 -1
  4. package/dist/Avatar/Avatar.js +1 -1
  5. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  6. package/dist/BottomSheet/BottomSheetPanel.js +16 -9
  7. package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
  8. package/dist/Breadcrumbs/BreadcrumbItem.js +2 -1
  9. package/dist/Button/Button.d.ts.map +1 -1
  10. package/dist/Button/Button.js +3 -2
  11. package/dist/Chat/ChatComposerInput.d.ts +9 -0
  12. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  13. package/dist/Chat/ChatComposerInput.js +2 -0
  14. package/dist/Chat/ChatMessage.js +2 -2
  15. package/dist/Chat/chatMessage.vars.stylex.d.ts +8 -8
  16. package/dist/Chat/chatMessage.vars.stylex.js +8 -8
  17. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  18. package/dist/CommandPalette/CommandPaletteInput.js +8 -1
  19. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  20. package/dist/DateInput/MonthScroller.js +72 -2
  21. package/dist/DateInput/Wheel.d.ts +17 -1
  22. package/dist/DateInput/Wheel.d.ts.map +1 -1
  23. package/dist/DateInput/Wheel.js +179 -19
  24. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  25. package/dist/DateRangeInput/DateRangeInput.js +63 -49
  26. package/dist/Dialog/Dialog.d.ts.map +1 -1
  27. package/dist/Dialog/Dialog.js +37 -1
  28. package/dist/Drawer/Drawer.d.ts.map +1 -1
  29. package/dist/Drawer/Drawer.js +6 -0
  30. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  31. package/dist/Drawer/useDrawerDialogPresence.js +4 -0
  32. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  33. package/dist/DropdownMenu/DropdownMenu.js +20 -4
  34. package/dist/DropdownMenu/useMenuOverflow.d.ts +13 -3
  35. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -1
  36. package/dist/DropdownMenu/useMenuOverflow.js +31 -8
  37. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  38. package/dist/Field/PanelSearchInput.js +8 -1
  39. package/dist/Field/textEntryTraits.d.ts +6 -6
  40. package/dist/Field/textEntryTraits.js +6 -6
  41. package/dist/Layer/layerClickBoundary.d.ts +7 -1
  42. package/dist/Layer/layerClickBoundary.d.ts.map +1 -1
  43. package/dist/Layer/layerClickBoundary.js +2 -2
  44. package/dist/Layer/usePressPin.d.ts +95 -0
  45. package/dist/Layer/usePressPin.d.ts.map +1 -0
  46. package/dist/Layer/usePressPin.js +365 -0
  47. package/dist/Layer/useTouchTrigger.d.ts +23 -1
  48. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  49. package/dist/Layer/useTouchTrigger.js +45 -7
  50. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  51. package/dist/Lightbox/Lightbox.js +2 -1
  52. package/dist/Link/Link.d.ts.map +1 -1
  53. package/dist/Link/Link.js +1 -0
  54. package/dist/Popover/usePopover.d.ts.map +1 -1
  55. package/dist/Popover/usePopover.js +56 -7
  56. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  57. package/dist/PowerSearch/PowerSearch.js +38 -30
  58. package/dist/ProgressBar/ProgressBar.d.ts +1 -1
  59. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  60. package/dist/ProgressBar/ProgressBar.js +52 -14
  61. package/dist/ProgressBar/ProgressBarTouch.d.ts +29 -0
  62. package/dist/ProgressBar/ProgressBarTouch.d.ts.map +1 -0
  63. package/dist/ProgressBar/ProgressBarTouch.js +91 -0
  64. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  65. package/dist/SegmentedControl/SegmentedControlItem.js +2 -1
  66. package/dist/Selector/Selector.d.ts.map +1 -1
  67. package/dist/Selector/Selector.js +25 -13
  68. package/dist/Slider/Slider.d.ts.map +1 -1
  69. package/dist/Slider/Slider.js +404 -131
  70. package/dist/Slider/sliderTouchController.d.ts +189 -0
  71. package/dist/Slider/sliderTouchController.d.ts.map +1 -0
  72. package/dist/Slider/sliderTouchController.js +1017 -0
  73. package/dist/Slider/useSliderTouch.d.ts +22 -0
  74. package/dist/Slider/useSliderTouch.d.ts.map +1 -0
  75. package/dist/Slider/useSliderTouch.js +56 -0
  76. package/dist/Switch/Switch.d.ts +1 -1
  77. package/dist/Switch/Switch.d.ts.map +1 -1
  78. package/dist/Switch/Switch.js +200 -46
  79. package/dist/Switch/switchFill.d.ts +31 -0
  80. package/dist/Switch/switchFill.d.ts.map +1 -0
  81. package/dist/Switch/switchFill.js +88 -0
  82. package/dist/Switch/switchTouch.d.ts +81 -0
  83. package/dist/Switch/switchTouch.d.ts.map +1 -0
  84. package/dist/Switch/switchTouch.js +133 -0
  85. package/dist/Switch/useSwitchTouch.d.ts +285 -0
  86. package/dist/Switch/useSwitchTouch.d.ts.map +1 -0
  87. package/dist/Switch/useSwitchTouch.js +998 -0
  88. package/dist/TabList/Tab.d.ts.map +1 -1
  89. package/dist/TabList/Tab.js +4 -3
  90. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  91. package/dist/Tokenizer/Tokenizer.js +12 -5
  92. package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts +3 -0
  93. package/dist/Tokenizer/TokenizerItemRemovableContext.d.ts.map +1 -0
  94. package/dist/Tokenizer/TokenizerItemRemovableContext.js +17 -0
  95. package/dist/Tooltip/Tooltip.d.ts +30 -6
  96. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  97. package/dist/Tooltip/Tooltip.js +5 -0
  98. package/dist/Tooltip/index.d.ts +1 -1
  99. package/dist/Tooltip/index.d.ts.map +1 -1
  100. package/dist/Tooltip/useTooltip.d.ts +31 -5
  101. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  102. package/dist/Tooltip/useTooltip.js +59 -18
  103. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  104. package/dist/Typeahead/BaseTypeahead.js +19 -9
  105. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  106. package/dist/Typeahead/Typeahead.js +26 -15
  107. package/dist/astryx.css +91 -8
  108. package/dist/gestures/GestureArena.d.ts +21 -2
  109. package/dist/gestures/GestureArena.d.ts.map +1 -1
  110. package/dist/gestures/GestureArena.js +23 -3
  111. package/dist/gestures/GestureHost.d.ts +123 -3
  112. package/dist/gestures/GestureHost.d.ts.map +1 -1
  113. package/dist/gestures/GestureHost.js +797 -15
  114. package/dist/gestures/GestureRecognizer.d.ts +15 -1
  115. package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
  116. package/dist/gestures/GestureRecognizer.js +12 -0
  117. package/dist/gestures/PanGestureRecognizer.d.ts +8 -0
  118. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  119. package/dist/gestures/PinchGestureRecognizer.d.ts +5 -1
  120. package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -1
  121. package/dist/gestures/PinchGestureRecognizer.js +10 -0
  122. package/dist/gestures/PressTracker.d.ts +6 -0
  123. package/dist/gestures/PressTracker.d.ts.map +1 -1
  124. package/dist/gestures/PressTracker.js +3 -0
  125. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +3 -3
  126. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
  127. package/dist/gestures/ScreenEdgePanGestureRecognizer.js +7 -5
  128. package/dist/gestures/nativeScroll.d.ts +16 -2
  129. package/dist/gestures/nativeScroll.d.ts.map +1 -1
  130. package/dist/gestures/nativeScroll.js +39 -8
  131. package/dist/gestures/recognizerInternals.d.ts +4 -2
  132. package/dist/gestures/recognizerInternals.d.ts.map +1 -1
  133. package/dist/gestures/types.d.ts +17 -0
  134. package/dist/gestures/types.d.ts.map +1 -1
  135. package/dist/gestures/types.js +7 -0
  136. package/dist/gestures/usePressTracker.d.ts.map +1 -1
  137. package/dist/gestures/usePressTracker.js +1 -0
  138. package/dist/gestures/wheelSegmenter.d.ts +56 -0
  139. package/dist/gestures/wheelSegmenter.d.ts.map +1 -0
  140. package/dist/gestures/wheelSegmenter.js +122 -0
  141. package/dist/hooks/useAttachment.d.ts +16 -8
  142. package/dist/hooks/useAttachment.d.ts.map +1 -1
  143. package/dist/hooks/useAttachment.js +35 -15
  144. package/dist/hooks/useFocusTrap.d.ts +15 -0
  145. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  146. package/dist/hooks/useFocusTrap.js +13 -2
  147. package/dist/hooks/usePager.d.ts +261 -0
  148. package/dist/hooks/usePager.d.ts.map +1 -0
  149. package/dist/hooks/usePager.js +1169 -0
  150. package/dist/motion/animator.d.ts.map +1 -1
  151. package/dist/motion/animator.js +140 -19
  152. package/dist/motion/paging.d.ts +69 -0
  153. package/dist/motion/paging.d.ts.map +1 -0
  154. package/dist/motion/paging.js +148 -0
  155. package/dist/motion/uikit/index.d.ts +8 -4
  156. package/dist/motion/uikit/index.d.ts.map +1 -1
  157. package/dist/motion/uikit/index.js +8 -4
  158. package/dist/motion/uikit/paging.d.ts +171 -0
  159. package/dist/motion/uikit/paging.d.ts.map +1 -0
  160. package/dist/motion/uikit/paging.js +192 -0
  161. package/dist/motion/uikit/progressBar.d.ts +79 -0
  162. package/dist/motion/uikit/progressBar.d.ts.map +1 -0
  163. package/dist/motion/uikit/progressBar.js +102 -0
  164. package/dist/motion/uikit/scroll.d.ts +0 -19
  165. package/dist/motion/uikit/scroll.d.ts.map +1 -1
  166. package/dist/motion/uikit/scroll.js +2 -21
  167. package/dist/motion/uikit/slider.d.ts +97 -0
  168. package/dist/motion/uikit/slider.d.ts.map +1 -0
  169. package/dist/motion/uikit/slider.js +111 -0
  170. package/dist/motion/uikit/springs.d.ts +59 -30
  171. package/dist/motion/uikit/springs.d.ts.map +1 -1
  172. package/dist/motion/uikit/springs.js +64 -34
  173. package/dist/motion/uikit/switch.d.ts +166 -0
  174. package/dist/motion/uikit/switch.d.ts.map +1 -0
  175. package/dist/motion/uikit/switch.js +186 -0
  176. package/dist/privateAttributes/pressHoldsDrag.stylex.d.ts +18 -0
  177. package/dist/privateAttributes/pressHoldsDrag.stylex.d.ts.map +1 -0
  178. package/dist/privateAttributes/pressHoldsDrag.stylex.js +28 -0
  179. package/dist/utils/pressFeedback.d.ts.map +1 -1
  180. package/dist/utils/pressFeedback.js +5 -0
  181. package/dist/utils/selectionLock.d.ts +43 -0
  182. package/dist/utils/selectionLock.d.ts.map +1 -1
  183. package/dist/utils/selectionLock.js +394 -6
  184. package/package.json +5 -5
  185. package/src/AppShell/AppShell.doc.mjs +10 -0
  186. package/src/AppShell/AppShell.tsx +48 -2
  187. package/src/Avatar/Avatar.tsx +3 -1
  188. package/src/BottomSheet/BottomSheetPanel.tsx +16 -9
  189. package/src/Breadcrumbs/BreadcrumbItem.tsx +4 -1
  190. package/src/Button/Button.tsx +3 -2
  191. package/src/Chat/Chat.doc.mjs +1 -0
  192. package/src/Chat/ChatComposerInput.doc.mjs +11 -0
  193. package/src/Chat/ChatComposerInput.tsx +11 -0
  194. package/src/Chat/ChatMessage.tsx +2 -2
  195. package/src/Chat/chatMessage.vars.stylex.ts +8 -8
  196. package/src/CommandPalette/CommandPaletteInput.tsx +6 -0
  197. package/src/DateInput/MonthScroller.tsx +63 -5
  198. package/src/DateInput/Wheel.tsx +174 -14
  199. package/src/DateRangeInput/DateRangeInput.doc.mjs +3 -2
  200. package/src/DateRangeInput/DateRangeInput.tsx +117 -71
  201. package/src/Dialog/Dialog.tsx +37 -1
  202. package/src/Drawer/Drawer.tsx +6 -0
  203. package/src/Drawer/useDrawerDialogPresence.ts +4 -0
  204. package/src/DropdownMenu/DropdownMenu.tsx +28 -6
  205. package/src/DropdownMenu/useMenuOverflow.ts +44 -8
  206. package/src/Field/PanelSearchInput.tsx +6 -0
  207. package/src/Field/textEntryTraits.ts +6 -6
  208. package/src/Layer/layerClickBoundary.ts +2 -2
  209. package/src/Layer/usePressPin.ts +516 -0
  210. package/src/Layer/useTouchTrigger.ts +56 -6
  211. package/src/Lightbox/Lightbox.tsx +2 -1
  212. package/src/Link/Link.tsx +3 -0
  213. package/src/Popover/usePopover.tsx +71 -9
  214. package/src/PowerSearch/PowerSearch.tsx +38 -31
  215. package/src/ProgressBar/ProgressBar.doc.mjs +7 -5
  216. package/src/ProgressBar/ProgressBar.tsx +147 -16
  217. package/src/ProgressBar/ProgressBarTouch.ts +109 -0
  218. package/src/SegmentedControl/SegmentedControlItem.tsx +2 -1
  219. package/src/Selector/Selector.tsx +29 -2
  220. package/src/Slider/Slider.doc.mjs +11 -7
  221. package/src/Slider/Slider.tsx +539 -132
  222. package/src/Slider/sliderTouchController.ts +1209 -0
  223. package/src/Slider/useSliderTouch.ts +78 -0
  224. package/src/Switch/Switch.doc.mjs +3 -3
  225. package/src/Switch/Switch.tsx +412 -86
  226. package/src/Switch/switchFill.ts +106 -0
  227. package/src/Switch/switchTouch.ts +194 -0
  228. package/src/Switch/useSwitchTouch.ts +1121 -0
  229. package/src/TabList/Tab.tsx +5 -3
  230. package/src/Tokenizer/Tokenizer.tsx +15 -5
  231. package/src/Tokenizer/TokenizerItemRemovableContext.ts +22 -0
  232. package/src/Tooltip/Tooltip.doc.mjs +21 -6
  233. package/src/Tooltip/Tooltip.tsx +42 -5
  234. package/src/Tooltip/index.ts +1 -0
  235. package/src/Tooltip/useTooltip.doc.mjs +4 -2
  236. package/src/Tooltip/useTooltip.tsx +84 -21
  237. package/src/Typeahead/BaseTypeahead.tsx +16 -8
  238. package/src/Typeahead/Typeahead.tsx +29 -15
  239. package/src/gestures/GestureArena.ts +45 -4
  240. package/src/gestures/GestureHost.ts +958 -15
  241. package/src/gestures/GestureRecognizer.ts +28 -0
  242. package/src/gestures/PanGestureRecognizer.ts +8 -0
  243. package/src/gestures/PinchGestureRecognizer.ts +16 -1
  244. package/src/gestures/PressTracker.ts +10 -0
  245. package/src/gestures/README.md +82 -3
  246. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +7 -5
  247. package/src/gestures/nativeScroll.ts +49 -9
  248. package/src/gestures/recognizerInternals.ts +9 -2
  249. package/src/gestures/types.ts +18 -0
  250. package/src/gestures/usePressTracker.ts +2 -0
  251. package/src/gestures/wheelSegmenter.ts +143 -0
  252. package/src/hooks/useAttachment.ts +56 -14
  253. package/src/hooks/useFocusTrap.ts +26 -2
  254. package/src/hooks/usePager.ts +1446 -0
  255. package/src/motion/MEASUREMENTS.md +36 -27
  256. package/src/motion/README.md +7 -3
  257. package/src/motion/animator.ts +193 -25
  258. package/src/motion/paging.ts +161 -0
  259. package/src/motion/uikit/index.ts +7 -4
  260. package/src/motion/uikit/paging.ts +193 -0
  261. package/src/motion/uikit/progressBar.ts +102 -0
  262. package/src/motion/uikit/scroll.ts +2 -18
  263. package/src/motion/uikit/slider.ts +105 -0
  264. package/src/motion/uikit/springs.ts +53 -32
  265. package/src/motion/uikit/switch.ts +174 -0
  266. package/src/privateAttributes/pressHoldsDrag.stylex.ts +28 -0
  267. package/src/utils/pressFeedback.ts +5 -0
  268. package/src/utils/selectionLock.ts +501 -6
  269. package/dist/motion/selectPage.d.ts +0 -26
  270. package/dist/motion/selectPage.d.ts.map +0 -1
  271. package/dist/motion/selectPage.js +0 -55
  272. package/src/motion/selectPage.ts +0 -55
@@ -0,0 +1,171 @@
1
+ export declare const paging: {
2
+ /**
3
+ * After the lift, one model moves the content: the settle onto the chosen
4
+ * page and the return from an overscroll. Each display frame runs floor(frame
5
+ * interval in ms) steps of 1 ms:
6
+ *
7
+ * v = (v + (target − x) · springPull) · friction; x += v (v: pt per step)
8
+ *
9
+ * A 60 Hz frame runs 16 steps, not 16.67. With these values, the model
10
+ * replays eight captured releases to 0.20 pt RMS. It replays five overscroll
11
+ * returns to 0.16–0.33 pt RMS (402 pt pages, iOS 26.2, 3× screen). Without
12
+ * the floor, the error is 1.0 pt RMS, with a systematic shape.
13
+ */
14
+ readonly integrator: {
15
+ /**
16
+ * Velocity added per 1 ms step, per point of distance to the target page
17
+ * (pt per step²).
18
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026.
19
+ * `_pagingSpringPull` reads the same on a 402 pt paging UIScrollView and
20
+ * on UIPageViewController's scroll view. It replays 8 captured settles to
21
+ * 0.20 pt RMS.
22
+ */
23
+ readonly springPull: 0.000284858;
24
+ /**
25
+ * Velocity kept per step after the pull (`_pagingFriction`, equal to
26
+ * `_defaultPagingFriction`).
27
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. Both read
28
+ * the same on the two scroll views of `springPull`, and they replay with
29
+ * it.
30
+ */
31
+ readonly friction: 0.970815;
32
+ /**
33
+ * Integration steps per second: floor(16.67 ms) = 16 steps per 60 Hz frame,
34
+ * and floor(8.33 ms) = 8 per 120 Hz frame, so 960.
35
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. In a 60 fps
36
+ * log of 8 releases at rest, floored stepping fits to 0.20 pt RMS.
37
+ * Unfloored stepping fits to 1.0 pt RMS.
38
+ */
39
+ readonly stepsPerSecond: 960;
40
+ /**
41
+ * A settle ends exactly on the page once the remaining distance is below
42
+ * this many points and the step velocity is below `restSpeed`.
43
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. The
44
+ * captured settles jump the last 0.33 pt onto the page about 0.35 s after
45
+ * a release at rest.
46
+ */
47
+ readonly restDistance: 0.5;
48
+ /**
49
+ * Step velocity (pt per step) below which a settle may end.
50
+ * @source GUESS — the captured settles end at about 0.04 pt per step;
51
+ * the threshold is not observable more finely at 60 fps
52
+ * @measure M-PG12
53
+ */
54
+ readonly restSpeed: 0.05;
55
+ };
56
+ readonly release: {
57
+ /**
58
+ * Released slower than `advanceSpeed`, the scroll view settles on the page
59
+ * nearest the content position: past half a page, the next one. The pager
60
+ * keeps the start page instead for a release that moves back toward it.
61
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. In releases
62
+ * at rest from page 1, content at 48.5 % of the page stays, and 57.5 %
63
+ * goes to the next page. On a second 402 pt pager, 45 % stays and 55 %
64
+ * advances.
65
+ */
66
+ readonly commitFraction: 0.5;
67
+ /**
68
+ * Released at least this fast (pt/s), the scroll view pages in the
69
+ * direction of the velocity, from any content position. A flick from 6 % of
70
+ * the page advances. The speed is UIPanGestureRecognizer's velocity at the
71
+ * last movement, and it never decays. The scroll view's
72
+ * `_horizontalVelocity` equals it at every sample. A drag held still for
73
+ * 397 ms before the lift still pages at the speed it had.
74
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. Steady
75
+ * releases at 10, 25 and 40 % of a 402 pt page: 292.7, 295.3 and 298.6
76
+ * pt/s stay; 310.7, 316.4 and 329.9 advance. The result is the same at
77
+ * every position: a threshold, not a projection.
78
+ */
79
+ readonly advanceSpeed: 300;
80
+ /**
81
+ * A settle velocity slower than this (pt/s) is zeroed, so the settle starts
82
+ * at rest. It is paging's own tuning on the one release velocity that every
83
+ * gesture reads.
84
+ * @source GUESS — the middle of the measured (200, 249] bracket. In the
85
+ * UIKit lab (iOS 26.2 simulator, Oct 23 2026),
86
+ * `scrollViewWillEndDragging` reads 0 for steady releases at 175 and 200
87
+ * pt/s. It reads 0.249 pt/ms for a release at 249 pt/s.
88
+ * @measure M-PG13
89
+ */
90
+ readonly velocityFloor: 225;
91
+ /**
92
+ * Pages a release may travel from the page the drag started on, at any
93
+ * speed and drag distance.
94
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A drag of
95
+ * 1.5 pages from page 1 lands on page 2 at release speeds of 0, 600 and
96
+ * 3000 pt/s.
97
+ */
98
+ readonly maxPagesFromStart: 1;
99
+ };
100
+ /**
101
+ * A finger that lands on a settling pager does not stop it at once. The
102
+ * settle runs on for about this long, then the content holds under the
103
+ * finger. Lifted without a move, the content settles again on the nearest
104
+ * page.
105
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. After
106
+ * touch-downs 60 and 160 ms into a settle, the content moved on for 82.6
107
+ * and 87.5 ms (5 frames), then held.
108
+ */
109
+ readonly catchStopMs: 85;
110
+ /**
111
+ * In a sheet, a horizontal pager's pan begins only for a drag within atan(1 ÷
112
+ * this) of horizontal (26.6° for 2). A steeper drag goes to the sheet.
113
+ * Between 26.6° and 45°, neither moves.
114
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A scroll
115
+ * view's directional lock holds the major axis up to 25° and frees it from
116
+ * 30°. An inline calendar pager in a sheet pages at 20° from horizontal. At
117
+ * 35° and 45°, it moves neither itself nor the sheet, and it leaves 55° to
118
+ * the sheet.
119
+ */
120
+ readonly panAxisRatio: 2;
121
+ /**
122
+ * Inside a vertical scroll view, exactly one of the pager and the scroll view
123
+ * takes a drag, decided once by its dominant axis. The pager takes it when
124
+ * |dx| ≥ this × |dy|, 45° and the tie included. The scroll view takes any
125
+ * other drag.
126
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 24 2026. A 402 × 300
127
+ * paging view sits in a full-screen vertical scroll view, with 150 pt drags
128
+ * at 0–90°. The pager takes 0–45°, and the page takes 50–90°. At 35°, the
129
+ * outer view stays at 0 through 86 pt of vertical travel. The choice
130
+ * happens at 10–15 pt of travel.
131
+ */
132
+ readonly nestedPanAxisRatio: 1;
133
+ readonly animatedScroll: {
134
+ /**
135
+ * `setContentOffset(_:animated:)` duration in milliseconds. It is the same
136
+ * for one page and for five, as for a page control's tap.
137
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026.
138
+ * `_contentOffsetAnimationDuration` reads 0.3, and five animated moves of
139
+ * 1 to 5 pages each last 0.30 s.
140
+ */
141
+ readonly durationMs: 300;
142
+ /**
143
+ * Its curve is a sinusoidal ease-in-out: x = from + (to − from) · (1 − cos
144
+ * πu) ÷ 2, for u = t ÷ duration. This cubic bézier matches it to 0.02 % of
145
+ * the distance (0.09 pt over a 402 pt page).
146
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. The five
147
+ * moves fit the sinusoid to 0.14–0.51 pt RMS, and a 2010 pt move fits to
148
+ * 0.20 pt. The curve easeInEaseOut (0.42, 0, 0.58, 1) misses by 7.7 pt.
149
+ */
150
+ readonly curve: readonly [0.364212, 0, 0.635788, 1];
151
+ };
152
+ /**
153
+ * Past the first or last page, the content follows the finger through the
154
+ * scroll view's rubber band (scroll.rubberBand.coefficient), with d = the
155
+ * page width. It returns on the integrator above.
156
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A pan of 90
157
+ * pt past page 0 shows 42.7–45 pt, and 290 pt shows 114.3 pt. The formula
158
+ * gives 44.1 and 114.2, with c 0.55 and d 402. The return replays on the
159
+ * integrator to 0.16–0.33 pt RMS.
160
+ */
161
+ readonly rubberBandDimension: "pageWidth";
162
+ };
163
+ /**
164
+ * Registers this table with the motion registry (motion/roles.ts). The pager
165
+ * then reads `setContentOffset(_:animated:)`'s duration and curve through
166
+ * `resolveMotion`, as it reads every touch motion. The table lists no role,
167
+ * because no motion role names any of its values, so each plays as measured.
168
+ * Nothing registers on import, and a second call does nothing.
169
+ */
170
+ export declare function registerPagingTable(): void;
171
+ //# sourceMappingURL=paging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../../src/motion/uikit/paging.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,MAAM;IACjB;;;;;;;;;;;OAWG;;QAED;;;;;;;WAOG;;QAEH;;;;;;WAMG;;QAEH;;;;;;WAMG;;QAEH;;;;;;WAMG;;QAEH;;;;;WAKG;;;;QAIH;;;;;;;;WAQG;;QAEH;;;;;;;;;;;WAWG;;QAEH;;;;;;;;;WASG;;QAEH;;;;;;WAMG;;;IAGL;;;;;;;;OAQG;;IAEH;;;;;;;;;OASG;;IAEH;;;;;;;;;;OAUG;;;QAGD;;;;;;WAMG;;QAEH;;;;;;;WAOG;;;IAGL;;;;;;;;OAQG;;CAEK,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
@@ -0,0 +1,192 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file paging.ts
5
+ * @input Nothing; data only
6
+ * @output Exports `paging`, the measured constants of a paging UIScrollView,
7
+ * and `registerPagingTable`, which registers them with the motion registry
8
+ * @position The paging domain of the UIKit constants table (motion/uikit). Only
9
+ * core reads it, so the `uikit` namespace does not re-export it
10
+ *
11
+ * SYNC: When modified, update:
12
+ * - /packages/core/src/motion/MEASUREMENTS.md (measurement tasks)
13
+ * - /packages/core/src/motion/paging.ts and paging.test.ts
14
+ */
15
+
16
+ import { registerMotionTable } from "../roles.js";
17
+ export const paging = {
18
+ /**
19
+ * After the lift, one model moves the content: the settle onto the chosen
20
+ * page and the return from an overscroll. Each display frame runs floor(frame
21
+ * interval in ms) steps of 1 ms:
22
+ *
23
+ * v = (v + (target − x) · springPull) · friction; x += v (v: pt per step)
24
+ *
25
+ * A 60 Hz frame runs 16 steps, not 16.67. With these values, the model
26
+ * replays eight captured releases to 0.20 pt RMS. It replays five overscroll
27
+ * returns to 0.16–0.33 pt RMS (402 pt pages, iOS 26.2, 3× screen). Without
28
+ * the floor, the error is 1.0 pt RMS, with a systematic shape.
29
+ */
30
+ integrator: {
31
+ /**
32
+ * Velocity added per 1 ms step, per point of distance to the target page
33
+ * (pt per step²).
34
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026.
35
+ * `_pagingSpringPull` reads the same on a 402 pt paging UIScrollView and
36
+ * on UIPageViewController's scroll view. It replays 8 captured settles to
37
+ * 0.20 pt RMS.
38
+ */
39
+ springPull: 0.000284858,
40
+ /**
41
+ * Velocity kept per step after the pull (`_pagingFriction`, equal to
42
+ * `_defaultPagingFriction`).
43
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. Both read
44
+ * the same on the two scroll views of `springPull`, and they replay with
45
+ * it.
46
+ */
47
+ friction: 0.970815,
48
+ /**
49
+ * Integration steps per second: floor(16.67 ms) = 16 steps per 60 Hz frame,
50
+ * and floor(8.33 ms) = 8 per 120 Hz frame, so 960.
51
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. In a 60 fps
52
+ * log of 8 releases at rest, floored stepping fits to 0.20 pt RMS.
53
+ * Unfloored stepping fits to 1.0 pt RMS.
54
+ */
55
+ stepsPerSecond: 960,
56
+ /**
57
+ * A settle ends exactly on the page once the remaining distance is below
58
+ * this many points and the step velocity is below `restSpeed`.
59
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. The
60
+ * captured settles jump the last 0.33 pt onto the page about 0.35 s after
61
+ * a release at rest.
62
+ */
63
+ restDistance: 0.5,
64
+ /**
65
+ * Step velocity (pt per step) below which a settle may end.
66
+ * @source GUESS — the captured settles end at about 0.04 pt per step;
67
+ * the threshold is not observable more finely at 60 fps
68
+ * @measure M-PG12
69
+ */
70
+ restSpeed: 0.05
71
+ },
72
+ release: {
73
+ /**
74
+ * Released slower than `advanceSpeed`, the scroll view settles on the page
75
+ * nearest the content position: past half a page, the next one. The pager
76
+ * keeps the start page instead for a release that moves back toward it.
77
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. In releases
78
+ * at rest from page 1, content at 48.5 % of the page stays, and 57.5 %
79
+ * goes to the next page. On a second 402 pt pager, 45 % stays and 55 %
80
+ * advances.
81
+ */
82
+ commitFraction: 0.5,
83
+ /**
84
+ * Released at least this fast (pt/s), the scroll view pages in the
85
+ * direction of the velocity, from any content position. A flick from 6 % of
86
+ * the page advances. The speed is UIPanGestureRecognizer's velocity at the
87
+ * last movement, and it never decays. The scroll view's
88
+ * `_horizontalVelocity` equals it at every sample. A drag held still for
89
+ * 397 ms before the lift still pages at the speed it had.
90
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. Steady
91
+ * releases at 10, 25 and 40 % of a 402 pt page: 292.7, 295.3 and 298.6
92
+ * pt/s stay; 310.7, 316.4 and 329.9 advance. The result is the same at
93
+ * every position: a threshold, not a projection.
94
+ */
95
+ advanceSpeed: 300,
96
+ /**
97
+ * A settle velocity slower than this (pt/s) is zeroed, so the settle starts
98
+ * at rest. It is paging's own tuning on the one release velocity that every
99
+ * gesture reads.
100
+ * @source GUESS — the middle of the measured (200, 249] bracket. In the
101
+ * UIKit lab (iOS 26.2 simulator, Oct 23 2026),
102
+ * `scrollViewWillEndDragging` reads 0 for steady releases at 175 and 200
103
+ * pt/s. It reads 0.249 pt/ms for a release at 249 pt/s.
104
+ * @measure M-PG13
105
+ */
106
+ velocityFloor: 225,
107
+ /**
108
+ * Pages a release may travel from the page the drag started on, at any
109
+ * speed and drag distance.
110
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A drag of
111
+ * 1.5 pages from page 1 lands on page 2 at release speeds of 0, 600 and
112
+ * 3000 pt/s.
113
+ */
114
+ maxPagesFromStart: 1
115
+ },
116
+ /**
117
+ * A finger that lands on a settling pager does not stop it at once. The
118
+ * settle runs on for about this long, then the content holds under the
119
+ * finger. Lifted without a move, the content settles again on the nearest
120
+ * page.
121
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. After
122
+ * touch-downs 60 and 160 ms into a settle, the content moved on for 82.6
123
+ * and 87.5 ms (5 frames), then held.
124
+ */
125
+ catchStopMs: 85,
126
+ /**
127
+ * In a sheet, a horizontal pager's pan begins only for a drag within atan(1 ÷
128
+ * this) of horizontal (26.6° for 2). A steeper drag goes to the sheet.
129
+ * Between 26.6° and 45°, neither moves.
130
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A scroll
131
+ * view's directional lock holds the major axis up to 25° and frees it from
132
+ * 30°. An inline calendar pager in a sheet pages at 20° from horizontal. At
133
+ * 35° and 45°, it moves neither itself nor the sheet, and it leaves 55° to
134
+ * the sheet.
135
+ */
136
+ panAxisRatio: 2,
137
+ /**
138
+ * Inside a vertical scroll view, exactly one of the pager and the scroll view
139
+ * takes a drag, decided once by its dominant axis. The pager takes it when
140
+ * |dx| ≥ this × |dy|, 45° and the tie included. The scroll view takes any
141
+ * other drag.
142
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 24 2026. A 402 × 300
143
+ * paging view sits in a full-screen vertical scroll view, with 150 pt drags
144
+ * at 0–90°. The pager takes 0–45°, and the page takes 50–90°. At 35°, the
145
+ * outer view stays at 0 through 86 pt of vertical travel. The choice
146
+ * happens at 10–15 pt of travel.
147
+ */
148
+ nestedPanAxisRatio: 1,
149
+ animatedScroll: {
150
+ /**
151
+ * `setContentOffset(_:animated:)` duration in milliseconds. It is the same
152
+ * for one page and for five, as for a page control's tap.
153
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026.
154
+ * `_contentOffsetAnimationDuration` reads 0.3, and five animated moves of
155
+ * 1 to 5 pages each last 0.30 s.
156
+ */
157
+ durationMs: 300,
158
+ /**
159
+ * Its curve is a sinusoidal ease-in-out: x = from + (to − from) · (1 − cos
160
+ * πu) ÷ 2, for u = t ÷ duration. This cubic bézier matches it to 0.02 % of
161
+ * the distance (0.09 pt over a 402 pt page).
162
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. The five
163
+ * moves fit the sinusoid to 0.14–0.51 pt RMS, and a 2010 pt move fits to
164
+ * 0.20 pt. The curve easeInEaseOut (0.42, 0, 0.58, 1) misses by 7.7 pt.
165
+ */
166
+ curve: [0.364212, 0, 0.635788, 1]
167
+ },
168
+ /**
169
+ * Past the first or last page, the content follows the finger through the
170
+ * scroll view's rubber band (scroll.rubberBand.coefficient), with d = the
171
+ * page width. It returns on the integrator above.
172
+ * @source measured: UIKit lab, iOS 26.2 simulator, Oct 23 2026. A pan of 90
173
+ * pt past page 0 shows 42.7–45 pt, and 290 pt shows 114.3 pt. The formula
174
+ * gives 44.1 and 114.2, with c 0.55 and d 402. The return replays on the
175
+ * integrator to 0.16–0.33 pt RMS.
176
+ */
177
+ rubberBandDimension: 'pageWidth'
178
+ };
179
+
180
+ /**
181
+ * Registers this table with the motion registry (motion/roles.ts). The pager
182
+ * then reads `setContentOffset(_:animated:)`'s duration and curve through
183
+ * `resolveMotion`, as it reads every touch motion. The table lists no role,
184
+ * because no motion role names any of its values, so each plays as measured.
185
+ * Nothing registers on import, and a second call does nothing.
186
+ */
187
+ export function registerPagingTable() {
188
+ registerMotionTable('paging', paging, {
189
+ // Who gets the touch, not how anything moves.
190
+ exclude: ['catchStopMs']
191
+ });
192
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * UIProgressView's values, for ProgressBar. Three values are motion roles in
3
+ * the generated motion role table: the whole-track duration,
4
+ * `progress.fillTrackMs`, its curve, `progress.curves.fill`, and the
5
+ * reduced-motion pulse, `progress.reducedMotionPulseMs`. Every other value is
6
+ * an internal constant.
7
+ */
8
+ export declare const progressBar: {
9
+ /**
10
+ * setProgress(_:animated: true) runs this long for a change of the whole
11
+ * track (0 → 1). A smaller change runs in proportion, measured on the model
12
+ * values: 0.2 → 0.8 takes 0.6 s. A retargeted fill starts from wherever it
13
+ * is drawn.
14
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
15
+ * iPhone 17 Pro, UIView animation on the fill's frame (duration,
16
+ * beginFromCurrentState) for jumps of 0.6, 0.4 and 0.6, Oct 23 2026
17
+ */
18
+ readonly fillTrackMs: 1000;
19
+ readonly curves: {
20
+ /**
21
+ * That animation's curve: linear, and Reduce Motion leaves it unchanged.
22
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
23
+ * iPhone 17 Pro, the fill's position animation (timing function
24
+ * linear), with Reduce Motion off and on, Oct 23 2026
25
+ */
26
+ readonly fill: readonly [0, 0, 1, 1];
27
+ };
28
+ /**
29
+ * Under reduced motion the indeterminate fill stops travelling and pulses
30
+ * its opacity in place. Each way takes this long, on the `timing.curves.move`
31
+ * curve. A busy loop, so tempo does not scale it.
32
+ * @source GUESS — An owner value, not a UIKit number. iOS Safari pulses its
33
+ * indeterminate bar for 1 s between 0.30 and 0.60 opacity. ProgressBar
34
+ * pulses slower, at a floor that keeps the bar visible.
35
+ * @measure M-PB1
36
+ */
37
+ readonly reducedMotionPulseMs: 2000;
38
+ /**
39
+ * That pulse's lowest opacity. It is the lowest at which every tone that
40
+ * reaches 3:1 against the track at full opacity still does. That holds in
41
+ * the light and dark default themes.
42
+ * @source GUESS — An owner value, not a UIKit number.
43
+ * @measure M-PB1
44
+ */
45
+ readonly reducedMotionPulseFloor: 0.84;
46
+ readonly progressView: {
47
+ /**
48
+ * The track's height in the `.default` style; the fill is as tall.
49
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
50
+ * iPhone 17 Pro, intrinsic size of UIProgressView(progressViewStyle:
51
+ * .default), Oct 23 2026
52
+ */
53
+ readonly heightPt: 4;
54
+ /**
55
+ * Above zero progress, the fill is never narrower than this many track
56
+ * heights: 8 pt on the 4 pt track. At 0.005 of a 300 pt track it is 8 pt
57
+ * wide; at 0.05 it is 15 pt.
58
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
59
+ * iPhone 17 Pro, the fill image view's frame at progress 0, 0.005,
60
+ * 0.01, 0.05, 0.5 and 1, Oct 23 2026
61
+ */
62
+ readonly minimumFillHeights: 2;
63
+ /**
64
+ * At progress 0 the fill is transparent (alpha 0, still at its minimum
65
+ * width).
66
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
67
+ * iPhone 17 Pro, the fill image view's alpha at progress 0, Oct 23 2026
68
+ */
69
+ readonly emptyFillAlpha: 0;
70
+ };
71
+ };
72
+ /**
73
+ * Registers the table's three roles, for the generated motion role table and
74
+ * its test, which call it. Nothing at runtime reads the registry:
75
+ * `resolveMotion` returns the table value. Idempotent, and nothing runs on
76
+ * import.
77
+ */
78
+ export declare function registerProgressBarTable(): void;
79
+ //# sourceMappingURL=progressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressBar.d.ts","sourceRoot":"","sources":["../../../src/motion/uikit/progressBar.ts"],"names":[],"mappings":"AAmBA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;IACtB;;;;;;;;OAQG;;;QAGD;;;;;WAKG;;;IAGL;;;;;;;;OAQG;;IAEH;;;;;;OAMG;;;QAGD;;;;;WAKG;;QAEH;;;;;;;WAOG;;QAEH;;;;;WAKG;;;CAGG,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAI/C"}
@@ -0,0 +1,102 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file progressBar.ts
5
+ * @input Nothing: data only
6
+ * @output Exports `progressBar` (UIProgressView's fill: the whole-track
7
+ * duration and curve, its minimum length and its empty alpha; and the
8
+ * reduced-motion pulse) and `registerProgressBarTable`
9
+ * @position ProgressBar's rows of the UIKit constants table (motion/uikit).
10
+ * Lengths are in pt (CSS px), durations in ms, alphas in 0..1. Tests check
11
+ * each leaf's `@source`, and each GUESS's `@measure`.
12
+ *
13
+ * SYNC: When modified, update
14
+ * /packages/core/src/ProgressBar/ProgressBarTouch.ts and
15
+ * /packages/core/src/ProgressBar/ProgressBar.test.tsx.
16
+ */
17
+
18
+ import { registerMotionTable } from "../roles.js";
19
+
20
+ /**
21
+ * UIProgressView's values, for ProgressBar. Three values are motion roles in
22
+ * the generated motion role table: the whole-track duration,
23
+ * `progress.fillTrackMs`, its curve, `progress.curves.fill`, and the
24
+ * reduced-motion pulse, `progress.reducedMotionPulseMs`. Every other value is
25
+ * an internal constant.
26
+ */
27
+ export const progressBar = {
28
+ /**
29
+ * setProgress(_:animated: true) runs this long for a change of the whole
30
+ * track (0 → 1). A smaller change runs in proportion, measured on the model
31
+ * values: 0.2 → 0.8 takes 0.6 s. A retargeted fill starts from wherever it
32
+ * is drawn.
33
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
34
+ * iPhone 17 Pro, UIView animation on the fill's frame (duration,
35
+ * beginFromCurrentState) for jumps of 0.6, 0.4 and 0.6, Oct 23 2026
36
+ */
37
+ fillTrackMs: 1000,
38
+ curves: {
39
+ /**
40
+ * That animation's curve: linear, and Reduce Motion leaves it unchanged.
41
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
42
+ * iPhone 17 Pro, the fill's position animation (timing function
43
+ * linear), with Reduce Motion off and on, Oct 23 2026
44
+ */
45
+ fill: [0, 0, 1, 1]
46
+ },
47
+ /**
48
+ * Under reduced motion the indeterminate fill stops travelling and pulses
49
+ * its opacity in place. Each way takes this long, on the `timing.curves.move`
50
+ * curve. A busy loop, so tempo does not scale it.
51
+ * @source GUESS — An owner value, not a UIKit number. iOS Safari pulses its
52
+ * indeterminate bar for 1 s between 0.30 and 0.60 opacity. ProgressBar
53
+ * pulses slower, at a floor that keeps the bar visible.
54
+ * @measure M-PB1
55
+ */
56
+ reducedMotionPulseMs: 2000,
57
+ /**
58
+ * That pulse's lowest opacity. It is the lowest at which every tone that
59
+ * reaches 3:1 against the track at full opacity still does. That holds in
60
+ * the light and dark default themes.
61
+ * @source GUESS — An owner value, not a UIKit number.
62
+ * @measure M-PB1
63
+ */
64
+ reducedMotionPulseFloor: 0.84,
65
+ progressView: {
66
+ /**
67
+ * The track's height in the `.default` style; the fill is as tall.
68
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
69
+ * iPhone 17 Pro, intrinsic size of UIProgressView(progressViewStyle:
70
+ * .default), Oct 23 2026
71
+ */
72
+ heightPt: 4,
73
+ /**
74
+ * Above zero progress, the fill is never narrower than this many track
75
+ * heights: 8 pt on the 4 pt track. At 0.005 of a 300 pt track it is 8 pt
76
+ * wide; at 0.05 it is 15 pt.
77
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
78
+ * iPhone 17 Pro, the fill image view's frame at progress 0, 0.005,
79
+ * 0.01, 0.05, 0.5 and 1, Oct 23 2026
80
+ */
81
+ minimumFillHeights: 2,
82
+ /**
83
+ * At progress 0 the fill is transparent (alpha 0, still at its minimum
84
+ * width).
85
+ * @source measured: UIKit lab (injected host app), iOS 26.2 simulator,
86
+ * iPhone 17 Pro, the fill image view's alpha at progress 0, Oct 23 2026
87
+ */
88
+ emptyFillAlpha: 0
89
+ }
90
+ };
91
+
92
+ /**
93
+ * Registers the table's three roles, for the generated motion role table and
94
+ * its test, which call it. Nothing at runtime reads the registry:
95
+ * `resolveMotion` returns the table value. Idempotent, and nothing runs on
96
+ * import.
97
+ */
98
+ export function registerProgressBarTable() {
99
+ registerMotionTable('progress', progressBar, {
100
+ roles: ['fillTrackMs', 'curves.fill', 'reducedMotionPulseMs']
101
+ });
102
+ }
@@ -59,25 +59,6 @@ export declare const scroll: {
59
59
  readonly duration: 0.5;
60
60
  readonly bounce: 0;
61
61
  };
62
- readonly paging: {
63
- /**
64
- * Deceleration rate a paging release is projected with to pick the next
65
- * page.
66
- * @source GUESS — UIScrollView paging behaves like a fast scroll view;
67
- * the rate it uses internally is not documented
68
- * @measure M-PG1
69
- */
70
- readonly projectionRate: 0.99;
71
- /**
72
- * The spring that carries a paging scroll view onto its page.
73
- * @source GUESS — SwiftUI `.smooth` default until measured
74
- * @measure M-PG1
75
- */
76
- readonly snap: {
77
- readonly duration: 0.5;
78
- readonly bounce: 0;
79
- };
80
- };
81
62
  /**
82
63
  * `delaysContentTouches`: how long a scroll view holds a touch-down from
83
64
  * its content while it decides whether the touch is a scroll (no highlight
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/motion/uikit/scroll.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,eAAO,MAAM,MAAM;;QAEf;;;;;;;;;;;;;;;;WAgBG;;QAEH;;;;;;;WAOG;;;;QAIH;;;;;;;;;;;WAWG;;;IAGL;;;;;;;;;;OAUG;;;;;;QAGD;;;;;;WAMG;;QAEH;;;;WAIG;;;;;;IAGL;;;;;;;;;;OAUG;;IAEH;;;;;;;;;;;;;;OAcG;;CAEK,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
1
+ {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/motion/uikit/scroll.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,eAAO,MAAM,MAAM;;QAEf;;;;;;;;;;;;;;;;WAgBG;;QAEH;;;;;;;WAOG;;;;QAIH;;;;;;;;;;;WAWG;;;IAGL;;;;;;;;;;OAUG;;;;;IAEH;;;;;;;;;;OAUG;;IAEH;;;;;;;;;;;;;;OAcG;;CAEK,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
@@ -4,8 +4,8 @@
4
4
  * @file scroll.ts
5
5
  * @input Nothing; data only
6
6
  * @output Exports `scroll`, the UIScrollView constants: deceleration rates,
7
- * the rubber-band coefficient, the bounce-back spring, paging and the
8
- * content-touch delay
7
+ * the rubber-band coefficient, the bounce-back spring and the content-touch
8
+ * delay
9
9
  * @position The scroll domain of the UIKit constants table (motion/uikit);
10
10
  * read by the motion math and components
11
11
  *
@@ -84,25 +84,6 @@ export const scroll = {
84
84
  duration: 0.5,
85
85
  bounce: 0
86
86
  },
87
- paging: {
88
- /**
89
- * Deceleration rate a paging release is projected with to pick the next
90
- * page.
91
- * @source GUESS — UIScrollView paging behaves like a fast scroll view;
92
- * the rate it uses internally is not documented
93
- * @measure M-PG1
94
- */
95
- projectionRate: 0.99,
96
- /**
97
- * The spring that carries a paging scroll view onto its page.
98
- * @source GUESS — SwiftUI `.smooth` default until measured
99
- * @measure M-PG1
100
- */
101
- snap: {
102
- duration: 0.5,
103
- bounce: 0
104
- }
105
- },
106
87
  /**
107
88
  * `delaysContentTouches`: how long a scroll view holds a touch-down from
108
89
  * its content while it decides whether the touch is a scroll (no highlight