@astryxdesign/core 0.7.8 → 0.7.9-canary.0200dfe

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 (585) hide show
  1. package/dist/AppShell/observeMainOverflow.d.ts.map +1 -1
  2. package/dist/AppShell/observeMainOverflow.js +9 -6
  3. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  4. package/dist/BottomSheet/BottomSheet.js +37 -3
  5. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  6. package/dist/BottomSheet/BottomSheetPanel.js +40 -8
  7. package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
  8. package/dist/BottomSheet/bottomSheetStack.js +4 -3
  9. package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
  10. package/dist/BottomSheet/useSheetGestures.js +61 -21
  11. package/dist/Calendar/Calendar.d.ts +14 -2
  12. package/dist/Calendar/Calendar.d.ts.map +1 -1
  13. package/dist/Calendar/Calendar.js +63 -74
  14. package/dist/Calendar/getInitialFocusDate.d.ts +4 -1
  15. package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -1
  16. package/dist/Calendar/getInitialFocusDate.js +7 -5
  17. package/dist/Calendar/hooks/useCalendarDays.d.ts +19 -2
  18. package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
  19. package/dist/Calendar/hooks/useCalendarDays.js +57 -64
  20. package/dist/Calendar/hooks/useCalendarNavigation.d.ts +28 -3
  21. package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
  22. package/dist/Calendar/hooks/useCalendarNavigation.js +33 -22
  23. package/dist/Calendar/styles.d.ts +1 -1
  24. package/dist/CheckboxInput/CheckboxInput.d.ts +2 -1
  25. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  26. package/dist/CheckboxInput/CheckboxInput.js +74 -18
  27. package/dist/CheckboxInput/CheckboxRowPressContext.d.ts +2 -0
  28. package/dist/CheckboxInput/CheckboxRowPressContext.d.ts.map +1 -0
  29. package/dist/CheckboxInput/CheckboxRowPressContext.js +20 -0
  30. package/dist/CheckboxList/CheckboxListItem.d.ts +2 -1
  31. package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
  32. package/dist/CheckboxList/CheckboxListItem.js +40 -14
  33. package/dist/ClickableCard/ClickableCard.d.ts +1 -1
  34. package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
  35. package/dist/ClickableCard/ClickableCard.js +5 -1
  36. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  37. package/dist/ContextMenu/ContextMenu.js +2 -0
  38. package/dist/DateInput/DateInput.d.ts +37 -6
  39. package/dist/DateInput/DateInput.d.ts.map +1 -1
  40. package/dist/DateInput/DateInput.js +97 -124
  41. package/dist/DateInput/MonthScroller.d.ts +5 -2
  42. package/dist/DateInput/MonthScroller.d.ts.map +1 -1
  43. package/dist/DateInput/MonthScroller.js +26 -29
  44. package/dist/DateInput/MonthYearWheels.d.ts +10 -1
  45. package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
  46. package/dist/DateInput/MonthYearWheels.js +54 -42
  47. package/dist/DateInput/PickerWheel.d.ts.map +1 -1
  48. package/dist/DateInput/PickerWheel.js +7 -1
  49. package/dist/DateInput/TouchDateField.d.ts +1 -1
  50. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  51. package/dist/DateInput/TouchDateField.js +26 -21
  52. package/dist/DateInput/monthGeometry.d.ts +42 -8
  53. package/dist/DateInput/monthGeometry.d.ts.map +1 -1
  54. package/dist/DateInput/monthGeometry.js +81 -7
  55. package/dist/DateInput/useCalendarPresentation.d.ts +10 -0
  56. package/dist/DateInput/useCalendarPresentation.d.ts.map +1 -0
  57. package/dist/DateInput/useCalendarPresentation.js +32 -0
  58. package/dist/DateInput/useTypedDate.d.ts +92 -0
  59. package/dist/DateInput/useTypedDate.d.ts.map +1 -0
  60. package/dist/DateInput/useTypedDate.js +269 -0
  61. package/dist/DateInput/wheelStrip.js +2 -2
  62. package/dist/DateRangeInput/DateRangeInput.d.ts +17 -1
  63. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  64. package/dist/DateRangeInput/DateRangeInput.js +15 -8
  65. package/dist/DateTimeInput/DateTimeInput.d.ts +26 -3
  66. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  67. package/dist/DateTimeInput/DateTimeInput.js +92 -88
  68. package/dist/DateTimeInput/TouchDateTimeField.d.ts +1 -1
  69. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  70. package/dist/DateTimeInput/TouchDateTimeField.js +26 -20
  71. package/dist/Dialog/Dialog.d.ts +2 -1
  72. package/dist/Dialog/Dialog.d.ts.map +1 -1
  73. package/dist/Dialog/Dialog.js +14 -3
  74. package/dist/Drawer/useDrawerDialogPresence.d.ts +2 -1
  75. package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
  76. package/dist/Drawer/useDrawerDialogPresence.js +11 -2
  77. package/dist/DropdownMenu/DropdownMenu.d.ts +9 -1
  78. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  79. package/dist/DropdownMenu/DropdownMenu.js +11 -8
  80. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
  81. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +3 -2
  82. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  83. package/dist/DropdownMenu/DropdownMenuItem.js +3 -2
  84. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
  85. package/dist/DropdownMenu/DropdownMenuRadioItem.js +3 -2
  86. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  87. package/dist/DropdownMenu/DropdownMenuSubMenu.js +3 -2
  88. package/dist/Field/inputDisabledFocus.d.ts +4 -4
  89. package/dist/Field/inputStyles.stylex.d.ts +1 -1
  90. package/dist/FileInput/FileInput.d.ts.map +1 -1
  91. package/dist/FileInput/FileInput.js +16 -2
  92. package/dist/HoverCard/useHoverCard.d.ts +3 -1
  93. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  94. package/dist/Icon/Icon.d.ts +1 -1
  95. package/dist/InfoTip/InfoTip.d.ts +1 -0
  96. package/dist/InfoTip/InfoTip.d.ts.map +1 -1
  97. package/dist/InfoTip/InfoTip.js +6 -18
  98. package/dist/InputGroup/InputGroup.d.ts +4 -3
  99. package/dist/InputGroup/InputGroup.d.ts.map +1 -1
  100. package/dist/InputGroup/InputGroup.js +2 -2
  101. package/dist/InputGroup/InputGroupText.d.ts +2 -1
  102. package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
  103. package/dist/InputGroup/InputGroupText.js +2 -1
  104. package/dist/InputGroup/groupStyles.d.ts +1 -1
  105. package/dist/InputGroup/groupStyles.d.ts.map +1 -1
  106. package/dist/InputGroup/groupStyles.js +1 -1
  107. package/dist/Item/Item.d.ts +20 -1
  108. package/dist/Item/Item.d.ts.map +1 -1
  109. package/dist/Item/Item.js +97 -29
  110. package/dist/Item/ItemListRowContext.d.ts +2 -0
  111. package/dist/Item/ItemListRowContext.d.ts.map +1 -0
  112. package/dist/Item/ItemListRowContext.js +16 -0
  113. package/dist/Layer/holdEntranceInput.d.ts +24 -0
  114. package/dist/Layer/holdEntranceInput.d.ts.map +1 -0
  115. package/dist/Layer/holdEntranceInput.js +65 -0
  116. package/dist/Layer/inputHold.d.ts +49 -0
  117. package/dist/Layer/inputHold.d.ts.map +1 -0
  118. package/dist/Layer/inputHold.js +636 -0
  119. package/dist/Layer/outsidePress.d.ts +4 -0
  120. package/dist/Layer/outsidePress.d.ts.map +1 -1
  121. package/dist/Layer/outsidePress.js +18 -1
  122. package/dist/Layer/preserveAnimations.d.ts +1 -5
  123. package/dist/Layer/preserveAnimations.d.ts.map +1 -1
  124. package/dist/Layer/preserveAnimations.js +12 -214
  125. package/dist/Layer/useBackdropPress.d.ts +8 -0
  126. package/dist/Layer/useBackdropPress.d.ts.map +1 -1
  127. package/dist/Layer/useBackdropPress.js +31 -2
  128. package/dist/Layer/useLayer.d.ts +3 -1
  129. package/dist/Layer/useLayer.d.ts.map +1 -1
  130. package/dist/Layer/useLayer.js +64 -4
  131. package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
  132. package/dist/Layer/useTouchTrigger.js +4 -0
  133. package/dist/Layout/LayoutContent.d.ts +3 -1
  134. package/dist/Layout/LayoutContent.d.ts.map +1 -1
  135. package/dist/Layout/LayoutContent.js +12 -4
  136. package/dist/Layout/LayoutPanel.d.ts +13 -10
  137. package/dist/Layout/LayoutPanel.d.ts.map +1 -1
  138. package/dist/Layout/LayoutPanel.js +81 -11
  139. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  140. package/dist/Lightbox/Lightbox.js +4 -0
  141. package/dist/List/List.d.ts.map +1 -1
  142. package/dist/List/List.js +1 -0
  143. package/dist/List/ListItem.d.ts +5 -4
  144. package/dist/List/ListItem.d.ts.map +1 -1
  145. package/dist/List/ListItem.js +45 -9
  146. package/dist/Markdown/parser.d.ts.map +1 -1
  147. package/dist/Markdown/parser.js +56 -39
  148. package/dist/MetadataList/MetadataList.js +1 -1
  149. package/dist/MobileNav/MobileNav.d.ts +11 -1
  150. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  151. package/dist/MobileNav/MobileNav.js +39 -1
  152. package/dist/MoreMenu/MoreMenu.d.ts +5 -3
  153. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  154. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  155. package/dist/MultiSelector/MultiSelector.js +6 -9
  156. package/dist/NumberInput/NumberInput.d.ts +4 -2
  157. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  158. package/dist/NumberInput/NumberInput.js +244 -11
  159. package/dist/OverflowList/OverflowList.d.ts.map +1 -1
  160. package/dist/OverflowList/OverflowList.js +7 -2
  161. package/dist/Popover/usePopover.d.ts +1 -0
  162. package/dist/Popover/usePopover.d.ts.map +1 -1
  163. package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
  164. package/dist/PowerSearch/PowerSearch.js +12 -5
  165. package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -1
  166. package/dist/PowerSearch/PowerSearchBottomSheet.js +4 -2
  167. package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
  168. package/dist/PowerSearch/PowerSearchToken.js +3 -1
  169. package/dist/PowerSearch/formatFilterValue.d.ts +9 -3
  170. package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
  171. package/dist/PowerSearch/formatFilterValue.js +14 -11
  172. package/dist/PowerSearch/formatTokenValue.d.ts +6 -2
  173. package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -1
  174. package/dist/PowerSearch/formatTokenValue.js +6 -3
  175. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  176. package/dist/RadioList/RadioListItem.js +16 -3
  177. package/dist/Resizable/ResizeHandle.d.ts +5 -5
  178. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  179. package/dist/Resizable/ResizeHandle.js +44 -5
  180. package/dist/Resizable/resizablePane.d.ts +58 -0
  181. package/dist/Resizable/resizablePane.d.ts.map +1 -0
  182. package/dist/Resizable/resizablePane.js +137 -0
  183. package/dist/Resizable/useResizable.d.ts +7 -0
  184. package/dist/Resizable/useResizable.d.ts.map +1 -1
  185. package/dist/Resizable/useResizable.js +13 -0
  186. package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
  187. package/dist/SelectableCard/SelectableCard.d.ts +1 -1
  188. package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
  189. package/dist/SelectableCard/SelectableCard.js +5 -1
  190. package/dist/Selector/Selector.d.ts.map +1 -1
  191. package/dist/Selector/Selector.js +51 -10
  192. package/dist/SideNav/SideNav.d.ts +9 -3
  193. package/dist/SideNav/SideNav.d.ts.map +1 -1
  194. package/dist/SideNav/SideNav.js +45 -10
  195. package/dist/Slider/sliderTouchController.js +2 -2
  196. package/dist/Spinner/Spinner.d.ts.map +1 -1
  197. package/dist/Spinner/Spinner.js +14 -71
  198. package/dist/Spinner/index.d.ts +1 -1
  199. package/dist/Spinner/index.d.ts.map +1 -1
  200. package/dist/Spinner/spinnerRotor.d.ts +28 -0
  201. package/dist/Spinner/spinnerRotor.d.ts.map +1 -0
  202. package/dist/Spinner/spinnerRotor.js +98 -0
  203. package/dist/Stack/StackItem.d.ts +8 -4
  204. package/dist/Stack/StackItem.d.ts.map +1 -1
  205. package/dist/Stack/StackItem.js +17 -4
  206. package/dist/Switch/Switch.d.ts.map +1 -1
  207. package/dist/Switch/Switch.js +13 -10
  208. package/dist/Switch/useSwitchTouch.js +4 -4
  209. package/dist/TabList/Tab.d.ts.map +1 -1
  210. package/dist/TabList/Tab.js +5 -1
  211. package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
  212. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  213. package/dist/Timestamp/Timestamp.js +14 -8
  214. package/dist/Timestamp/formatInstant.d.ts +10 -1
  215. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  216. package/dist/Timestamp/formatInstant.js +13 -27
  217. package/dist/Timestamp/tooltipEntries.d.ts +5 -3
  218. package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
  219. package/dist/Timestamp/tooltipEntries.js +6 -4
  220. package/dist/Token/Token.d.ts.map +1 -1
  221. package/dist/Token/Token.js +9 -0
  222. package/dist/Token/TokenLink.d.ts +1 -1
  223. package/dist/Token/TokenLink.d.ts.map +1 -1
  224. package/dist/Token/TokenLink.js +4 -1
  225. package/dist/Tokenizer/Tokenizer.d.ts +14 -10
  226. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  227. package/dist/Tokenizer/Tokenizer.js +189 -89
  228. package/dist/Tooltip/useTooltip.d.ts +3 -1
  229. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  230. package/dist/Tooltip/useTooltip.js +164 -59
  231. package/dist/TreeList/TreeListItem.d.ts +2 -1
  232. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  233. package/dist/TreeList/TreeListItem.js +27 -3
  234. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  235. package/dist/Typeahead/BaseTypeahead.js +2 -1
  236. package/dist/animator/createAnimator.js +2 -2
  237. package/dist/astryx.css +362 -325
  238. package/dist/gestures/GestureHost.d.ts +2 -2
  239. package/dist/gestures/GestureHost.d.ts.map +1 -1
  240. package/dist/gestures/GestureHost.js +21 -6
  241. package/dist/gestures/PanGestureRecognizer.d.ts +11 -1
  242. package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
  243. package/dist/gestures/PanGestureRecognizer.js +15 -1
  244. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +6 -1
  245. package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
  246. package/dist/gestures/nativeScroll.d.ts +3 -6
  247. package/dist/gestures/nativeScroll.d.ts.map +1 -1
  248. package/dist/gestures/nativeScroll.js +7 -52
  249. package/dist/gestures/wheelSegmenter.d.ts +68 -1
  250. package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
  251. package/dist/gestures/wheelSegmenter.js +199 -10
  252. package/dist/hooks/StackItemScrollRegion.d.ts +31 -0
  253. package/dist/hooks/StackItemScrollRegion.d.ts.map +1 -0
  254. package/dist/hooks/StackItemScrollRegion.js +40 -0
  255. package/dist/hooks/computeOverflow.d.ts +2 -0
  256. package/dist/hooks/computeOverflow.d.ts.map +1 -1
  257. package/dist/hooks/computeOverflow.js +1 -1
  258. package/dist/hooks/menuPressGesture.d.ts +133 -21
  259. package/dist/hooks/menuPressGesture.d.ts.map +1 -1
  260. package/dist/hooks/menuPressGesture.js +155 -30
  261. package/dist/hooks/menuPressValues.d.ts +16 -0
  262. package/dist/hooks/menuPressValues.d.ts.map +1 -0
  263. package/dist/hooks/menuPressValues.js +18 -0
  264. package/dist/hooks/useClickableContainer.d.ts +36 -7
  265. package/dist/hooks/useClickableContainer.d.ts.map +1 -1
  266. package/dist/hooks/useClickableContainer.js +63 -14
  267. package/dist/hooks/useFocusTrap.d.ts +10 -0
  268. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  269. package/dist/hooks/useFocusTrap.js +225 -132
  270. package/dist/hooks/useKeyboardHighlight.d.ts +17 -0
  271. package/dist/hooks/useKeyboardHighlight.d.ts.map +1 -0
  272. package/dist/hooks/useKeyboardHighlight.js +38 -0
  273. package/dist/hooks/useMediaQuery.d.ts +2 -1
  274. package/dist/hooks/useMediaQuery.d.ts.map +1 -1
  275. package/dist/hooks/useMediaQuery.js +37 -12
  276. package/dist/hooks/useMenuPress.d.ts +34 -1
  277. package/dist/hooks/useMenuPress.d.ts.map +1 -1
  278. package/dist/hooks/useMenuPress.js +93 -5
  279. package/dist/hooks/useOverflow.d.ts +10 -0
  280. package/dist/hooks/useOverflow.d.ts.map +1 -1
  281. package/dist/hooks/useOverflow.js +214 -23
  282. package/dist/hooks/usePressFeedback.d.ts +6 -6
  283. package/dist/hooks/usePressFeedback.js +6 -6
  284. package/dist/hooks/useScrollRegionProps.d.ts +35 -0
  285. package/dist/hooks/useScrollRegionProps.d.ts.map +1 -0
  286. package/dist/hooks/useScrollRegionProps.js +51 -0
  287. package/dist/i18n/InternationalizationContext.d.ts +6 -0
  288. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  289. package/dist/i18n/InternationalizationProvider.d.ts +23 -3
  290. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  291. package/dist/i18n/InternationalizationProvider.js +8 -3
  292. package/dist/i18n/generated-english/DateInput/DateInput.generated.d.ts.map +1 -1
  293. package/dist/i18n/generated-english/DateInput/DateInput.generated.js +0 -1
  294. package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts +8 -0
  295. package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts.map +1 -0
  296. package/dist/i18n/generated-english/DateInput/useTypedDate.generated.js +16 -0
  297. package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.d.ts.map +1 -1
  298. package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.js +0 -1
  299. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts +8 -0
  300. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts.map +1 -0
  301. package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.js +12 -0
  302. package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
  303. package/dist/i18n/generated-locales/en.generated.js +5 -0
  304. package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
  305. package/dist/i18n/generated-locales/pseudo.generated.js +5 -0
  306. package/dist/i18n/index.d.ts +2 -0
  307. package/dist/i18n/index.d.ts.map +1 -1
  308. package/dist/i18n/index.js +1 -0
  309. package/dist/i18n/useCalendarSystem.d.ts +19 -0
  310. package/dist/i18n/useCalendarSystem.d.ts.map +1 -0
  311. package/dist/i18n/useCalendarSystem.js +61 -0
  312. package/dist/internal/calendar-system.d.ts +18 -0
  313. package/dist/internal/calendar-system.d.ts.map +1 -0
  314. package/dist/internal/calendar-system.js +19 -0
  315. package/dist/internal/spinner-rotor.d.ts +16 -0
  316. package/dist/internal/spinner-rotor.d.ts.map +1 -0
  317. package/dist/internal/spinner-rotor.js +16 -0
  318. package/dist/internal/touch.d.ts +20 -2
  319. package/dist/internal/touch.d.ts.map +1 -1
  320. package/dist/internal/touch.js +29 -3
  321. package/dist/motion/animator.d.ts +5 -5
  322. package/dist/motion/animator.d.ts.map +1 -1
  323. package/dist/motion/animator.js +7 -6
  324. package/dist/motion/carryAnimations.d.ts +58 -0
  325. package/dist/motion/carryAnimations.d.ts.map +1 -0
  326. package/dist/motion/carryAnimations.js +305 -0
  327. package/dist/motion/transientCopy.d.ts +4 -2
  328. package/dist/motion/transientCopy.d.ts.map +1 -1
  329. package/dist/motion/transientCopy.js +34 -5
  330. package/dist/motion/uikit/gestures.d.ts +41 -0
  331. package/dist/motion/uikit/gestures.d.ts.map +1 -1
  332. package/dist/motion/uikit/gestures.js +25 -0
  333. package/dist/motion/uikit/index.d.ts +1 -1
  334. package/dist/motion/uikit/index.d.ts.map +1 -1
  335. package/dist/motion/uikit/index.js +1 -1
  336. package/dist/motion/uikit/timing.d.ts +14 -10
  337. package/dist/motion/uikit/timing.d.ts.map +1 -1
  338. package/dist/motion/uikit/timing.js +7 -5
  339. package/dist/privateAttributes/menuPressLit.stylex.d.ts +52 -0
  340. package/dist/privateAttributes/menuPressLit.stylex.d.ts.map +1 -0
  341. package/dist/privateAttributes/menuPressLit.stylex.js +99 -0
  342. package/dist/privateAttributes/press.stylex.d.ts +142 -0
  343. package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
  344. package/dist/privateAttributes/press.stylex.js +101 -0
  345. package/dist/theme/themeMotion.d.ts +3 -2
  346. package/dist/theme/themeMotion.d.ts.map +1 -1
  347. package/dist/theme/themeMotion.js +3 -2
  348. package/dist/theme/tokens.stylex.d.ts +2 -2
  349. package/dist/theme/tokens.stylex.js +1 -1
  350. package/dist/utils/calendarDateParser.d.ts +110 -0
  351. package/dist/utils/calendarDateParser.d.ts.map +1 -0
  352. package/dist/utils/calendarDateParser.js +1225 -0
  353. package/dist/utils/calendarSystem.d.ts +176 -0
  354. package/dist/utils/calendarSystem.d.ts.map +1 -0
  355. package/dist/utils/calendarSystem.js +569 -0
  356. package/dist/utils/coarsePointer.d.ts +5 -0
  357. package/dist/utils/coarsePointer.d.ts.map +1 -1
  358. package/dist/utils/coarsePointer.js +22 -13
  359. package/dist/utils/flatTree.d.ts +6 -3
  360. package/dist/utils/flatTree.d.ts.map +1 -1
  361. package/dist/utils/flatTree.js +13 -3
  362. package/dist/utils/focusReturn.d.ts +34 -13
  363. package/dist/utils/focusReturn.d.ts.map +1 -1
  364. package/dist/utils/focusReturn.js +64 -17
  365. package/dist/utils/hitArea.d.ts +8 -1
  366. package/dist/utils/hitArea.d.ts.map +1 -1
  367. package/dist/utils/hitArea.js +99 -9
  368. package/dist/utils/inputPresentation.d.ts +9 -1
  369. package/dist/utils/inputPresentation.d.ts.map +1 -1
  370. package/dist/utils/inputPresentation.js +15 -1
  371. package/dist/utils/inputStream.d.ts +14 -1
  372. package/dist/utils/inputStream.d.ts.map +1 -1
  373. package/dist/utils/inputStream.js +40 -9
  374. package/dist/utils/interactionOverlay.stylex.d.ts +5 -9
  375. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  376. package/dist/utils/interactionOverlay.stylex.js +29 -31
  377. package/dist/utils/plainDate.d.ts +38 -7
  378. package/dist/utils/plainDate.d.ts.map +1 -1
  379. package/dist/utils/plainDate.js +92 -18
  380. package/dist/utils/pressFeedback.d.ts +10 -2
  381. package/dist/utils/pressFeedback.d.ts.map +1 -1
  382. package/dist/utils/pressFeedback.js +40 -15
  383. package/dist/utils/pressGesture.d.ts +12 -6
  384. package/dist/utils/pressGesture.d.ts.map +1 -1
  385. package/dist/utils/pressGesture.js +26 -8
  386. package/dist/utils/scrollView.d.ts +25 -0
  387. package/dist/utils/scrollView.d.ts.map +1 -0
  388. package/dist/utils/scrollView.js +108 -0
  389. package/dist/utils/selectionLock.d.ts.map +1 -1
  390. package/dist/utils/selectionLock.js +1 -10
  391. package/dist/utils/touchHitArea.d.ts +30 -0
  392. package/dist/utils/touchHitArea.d.ts.map +1 -0
  393. package/dist/utils/touchHitArea.js +167 -0
  394. package/dist/utils/touchHitArea.stylex.d.ts +38 -0
  395. package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
  396. package/dist/utils/touchHitArea.stylex.js +48 -0
  397. package/dist/utils/triggerFocus.d.ts +5 -0
  398. package/dist/utils/triggerFocus.d.ts.map +1 -1
  399. package/dist/utils/triggerFocus.js +9 -2
  400. package/locales/en.json +21 -1
  401. package/locales/pseudo.json +15 -0
  402. package/package.json +15 -4
  403. package/src/AppShell/observeMainOverflow.ts +9 -6
  404. package/src/BottomSheet/BottomSheet.tsx +45 -3
  405. package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
  406. package/src/BottomSheet/bottomSheetStack.ts +4 -3
  407. package/src/BottomSheet/useSheetGestures.ts +83 -20
  408. package/src/Calendar/Calendar.doc.mjs +76 -6
  409. package/src/Calendar/Calendar.tsx +123 -104
  410. package/src/Calendar/getInitialFocusDate.ts +22 -8
  411. package/src/Calendar/hooks/useCalendarDays.ts +89 -63
  412. package/src/Calendar/hooks/useCalendarNavigation.ts +68 -26
  413. package/src/CheckboxInput/CheckboxInput.doc.mjs +5 -4
  414. package/src/CheckboxInput/CheckboxInput.tsx +105 -20
  415. package/src/CheckboxInput/CheckboxRowPressContext.ts +22 -0
  416. package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
  417. package/src/CheckboxList/CheckboxListItem.doc.mjs +3 -3
  418. package/src/CheckboxList/CheckboxListItem.tsx +35 -14
  419. package/src/ClickableCard/ClickableCard.tsx +8 -1
  420. package/src/ContextMenu/ContextMenu.tsx +2 -0
  421. package/src/DateInput/DateInput.doc.mjs +45 -12
  422. package/src/DateInput/DateInput.tsx +165 -179
  423. package/src/DateInput/MonthScroller.tsx +39 -37
  424. package/src/DateInput/MonthYearWheels.tsx +68 -47
  425. package/src/DateInput/PickerWheel.tsx +7 -2
  426. package/src/DateInput/TouchDateField.tsx +45 -17
  427. package/src/DateInput/monthGeometry.ts +110 -8
  428. package/src/DateInput/useCalendarPresentation.ts +64 -0
  429. package/src/DateInput/useTypedDate.ts +469 -0
  430. package/src/DateInput/wheelStrip.ts +2 -2
  431. package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -0
  432. package/src/DateRangeInput/DateRangeInput.tsx +43 -9
  433. package/src/DateTimeInput/DateTimeInput.doc.mjs +42 -9
  434. package/src/DateTimeInput/DateTimeInput.tsx +138 -148
  435. package/src/DateTimeInput/TouchDateTimeField.tsx +31 -16
  436. package/src/Dialog/Dialog.doc.mjs +1 -1
  437. package/src/Dialog/Dialog.tsx +14 -2
  438. package/src/Drawer/Drawer.doc.mjs +1 -1
  439. package/src/Drawer/useDrawerDialogPresence.ts +9 -2
  440. package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -2
  441. package/src/DropdownMenu/DropdownMenu.tsx +31 -7
  442. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -1
  443. package/src/DropdownMenu/DropdownMenuItem.tsx +8 -4
  444. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -1
  445. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -1
  446. package/src/FileInput/FileInput.tsx +16 -2
  447. package/src/HoverCard/useHoverCard.tsx +3 -1
  448. package/src/Icon/useIcon.doc.mjs +94 -0
  449. package/src/InfoTip/InfoTip.doc.mjs +26 -2
  450. package/src/InfoTip/InfoTip.tsx +6 -27
  451. package/src/InputGroup/InputGroup.doc.mjs +4 -3
  452. package/src/InputGroup/InputGroup.tsx +4 -3
  453. package/src/InputGroup/InputGroupText.doc.mjs +45 -3
  454. package/src/InputGroup/InputGroupText.tsx +2 -1
  455. package/src/InputGroup/groupStyles.ts +3 -1
  456. package/src/Item/Item.tsx +139 -35
  457. package/src/Item/ItemListRowContext.tsx +18 -0
  458. package/src/Layer/holdEntranceInput.ts +84 -0
  459. package/src/Layer/inputHold.ts +734 -0
  460. package/src/Layer/outsidePress.ts +18 -1
  461. package/src/Layer/preserveAnimations.ts +12 -275
  462. package/src/Layer/useBackdropPress.ts +41 -1
  463. package/src/Layer/useLayer.tsx +77 -4
  464. package/src/Layer/useTouchTrigger.ts +4 -0
  465. package/src/Layout/LayoutContent.doc.mjs +6 -3
  466. package/src/Layout/LayoutContent.tsx +10 -4
  467. package/src/Layout/LayoutPanel.doc.mjs +14 -11
  468. package/src/Layout/LayoutPanel.tsx +113 -16
  469. package/src/Lightbox/Lightbox.tsx +4 -0
  470. package/src/List/List.doc.mjs +10 -1
  471. package/src/List/List.tsx +5 -0
  472. package/src/List/ListItem.tsx +63 -8
  473. package/src/Markdown/parser.ts +65 -42
  474. package/src/MetadataList/MetadataList.tsx +1 -1
  475. package/src/MobileNav/MobileNav.doc.mjs +3 -3
  476. package/src/MobileNav/MobileNav.tsx +39 -1
  477. package/src/MoreMenu/MoreMenu.doc.mjs +2 -4
  478. package/src/MoreMenu/MoreMenu.tsx +5 -3
  479. package/src/MultiSelector/MultiSelector.tsx +7 -17
  480. package/src/NumberInput/NumberInput.doc.mjs +1 -1
  481. package/src/NumberInput/NumberInput.tsx +259 -11
  482. package/src/OverflowList/OverflowList.tsx +15 -9
  483. package/src/Popover/usePopover.tsx +1 -0
  484. package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
  485. package/src/PowerSearch/PowerSearch.tsx +20 -3
  486. package/src/PowerSearch/PowerSearchBottomSheet.tsx +4 -1
  487. package/src/PowerSearch/PowerSearchToken.tsx +3 -0
  488. package/src/PowerSearch/formatFilterValue.ts +21 -11
  489. package/src/PowerSearch/formatTokenValue.ts +7 -1
  490. package/src/RadioList/RadioListItem.doc.mjs +3 -2
  491. package/src/RadioList/RadioListItem.tsx +16 -6
  492. package/src/Resizable/Resizable.doc.mjs +40 -12
  493. package/src/Resizable/ResizeHandle.tsx +68 -6
  494. package/src/Resizable/resizablePane.ts +179 -0
  495. package/src/Resizable/useResizable.ts +15 -0
  496. package/src/SegmentedControl/useSegmentedSelectionMotion.ts +3 -3
  497. package/src/SelectableCard/SelectableCard.tsx +8 -1
  498. package/src/Selector/Selector.tsx +83 -8
  499. package/src/SideNav/SideNav.doc.mjs +2 -2
  500. package/src/SideNav/SideNav.tsx +87 -12
  501. package/src/Slider/sliderTouchController.ts +2 -2
  502. package/src/Spinner/Spinner.tsx +7 -89
  503. package/src/Spinner/index.ts +1 -5
  504. package/src/Spinner/spinnerRotor.ts +113 -0
  505. package/src/Stack/Stack.doc.mjs +1 -1
  506. package/src/Stack/StackItem.tsx +27 -13
  507. package/src/Switch/Switch.tsx +7 -6
  508. package/src/Switch/useSwitchTouch.ts +4 -4
  509. package/src/TabList/Tab.tsx +5 -1
  510. package/src/Table/plugins/sortable/useTableSortable.tsx +1 -1
  511. package/src/Timestamp/Timestamp.doc.mjs +3 -3
  512. package/src/Timestamp/Timestamp.tsx +13 -8
  513. package/src/Timestamp/formatInstant.ts +49 -28
  514. package/src/Timestamp/tooltipEntries.ts +7 -3
  515. package/src/Token/Token.tsx +18 -1
  516. package/src/Token/TokenLink.tsx +7 -1
  517. package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
  518. package/src/Tokenizer/Tokenizer.tsx +252 -115
  519. package/src/Tooltip/useTooltip.tsx +180 -80
  520. package/src/TreeList/TreeListItem.tsx +36 -2
  521. package/src/Typeahead/BaseTypeahead.tsx +2 -0
  522. package/src/animator/createAnimator.ts +3 -3
  523. package/src/gestures/GestureHost.ts +21 -5
  524. package/src/gestures/PanGestureRecognizer.ts +19 -2
  525. package/src/gestures/README.md +14 -5
  526. package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
  527. package/src/gestures/nativeScroll.ts +12 -68
  528. package/src/gestures/wheelSegmenter.ts +243 -10
  529. package/src/hooks/StackItemScrollRegion.tsx +57 -0
  530. package/src/hooks/computeOverflow.ts +1 -1
  531. package/src/hooks/menuPressGesture.ts +244 -38
  532. package/src/hooks/menuPressValues.ts +18 -0
  533. package/src/hooks/useClickableContainer.doc.mjs +8 -2
  534. package/src/hooks/useClickableContainer.ts +93 -15
  535. package/src/hooks/useFocusTrap.ts +268 -151
  536. package/src/hooks/useKeyboardHighlight.ts +71 -0
  537. package/src/hooks/useMediaQuery.ts +41 -12
  538. package/src/hooks/useMenuPress.ts +118 -11
  539. package/src/hooks/useOverflow.ts +321 -75
  540. package/src/hooks/usePressFeedback.doc.mjs +3 -3
  541. package/src/hooks/usePressFeedback.ts +6 -6
  542. package/src/hooks/useScrollRegionProps.ts +76 -0
  543. package/src/i18n/InternationalizationContext.ts +6 -0
  544. package/src/i18n/InternationalizationProvider.doc.mjs +29 -1
  545. package/src/i18n/InternationalizationProvider.tsx +35 -3
  546. package/src/i18n/generated-english/DateInput/DateInput.generated.ts +0 -1
  547. package/src/i18n/generated-english/DateInput/useTypedDate.generated.ts +17 -0
  548. package/src/i18n/generated-english/DateTimeInput/DateTimeInput.generated.ts +0 -1
  549. package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
  550. package/src/i18n/generated-locales/en.generated.ts +7 -0
  551. package/src/i18n/generated-locales/pseudo.generated.ts +7 -0
  552. package/src/i18n/index.ts +2 -0
  553. package/src/i18n/useCalendarSystem.ts +95 -0
  554. package/src/internal/calendar-system.ts +26 -0
  555. package/src/internal/spinner-rotor.ts +20 -0
  556. package/src/internal/touch.ts +43 -2
  557. package/src/motion/MEASUREMENTS.md +11 -0
  558. package/src/motion/README.md +3 -3
  559. package/src/motion/animator.ts +7 -7
  560. package/src/motion/carryAnimations.ts +389 -0
  561. package/src/motion/transientCopy.ts +45 -5
  562. package/src/motion/uikit/gestures.ts +22 -0
  563. package/src/motion/uikit/index.ts +1 -0
  564. package/src/motion/uikit/timing.ts +7 -5
  565. package/src/privateAttributes/menuPressLit.stylex.ts +104 -0
  566. package/src/privateAttributes/press.stylex.ts +261 -0
  567. package/src/theme/themeMotion.ts +3 -2
  568. package/src/theme/tokens.stylex.ts +1 -1
  569. package/src/utils/calendarDateParser.ts +1385 -0
  570. package/src/utils/calendarSystem.ts +832 -0
  571. package/src/utils/coarsePointer.ts +27 -14
  572. package/src/utils/flatTree.ts +15 -3
  573. package/src/utils/focusReturn.ts +78 -18
  574. package/src/utils/hitArea.ts +138 -9
  575. package/src/utils/inputPresentation.ts +21 -1
  576. package/src/utils/inputStream.ts +47 -10
  577. package/src/utils/interactionOverlay.stylex.ts +19 -22
  578. package/src/utils/plainDate.ts +130 -19
  579. package/src/utils/pressFeedback.ts +46 -14
  580. package/src/utils/pressGesture.ts +35 -9
  581. package/src/utils/scrollView.ts +135 -0
  582. package/src/utils/selectionLock.ts +5 -10
  583. package/src/utils/touchHitArea.stylex.ts +56 -0
  584. package/src/utils/touchHitArea.ts +177 -0
  585. package/src/utils/triggerFocus.ts +17 -4
@@ -4,7 +4,8 @@
4
4
 
5
5
  /**
6
6
  * @file MonthScroller.tsx
7
- * @input Month bounds, selected value, constraints, week start
7
+ * @input A calendar's month model, month bounds, selected value, constraints,
8
+ * week start
8
9
  * @output Exports MonthScroller and MonthScrollerHandle
9
10
  * @position Internal component; consumed by TouchDateField.tsx
10
11
  *
@@ -29,22 +30,23 @@
29
30
  * - /packages/core/src/DateInput/DateInput.doc.mjs
30
31
  * - /packages/core/src/DateInput/DateInputTouch.test.tsx
31
32
  */
32
- import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
33
+ import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useMemo, useState } from 'react';
33
34
  import { flushSync } from 'react-dom';
34
35
  import * as stylex from '@stylexjs/stylex';
35
- import { useCalendarDays } from "../Calendar/index.js";
36
- import { useDirection, useLocale } from "../i18n/index.js";
36
+ import { useCalendarDays } from "../Calendar/hooks/useCalendarDays.js";
37
+ import { useDirection } from "../i18n/useDirection.js";
38
+ import { useLocale } from "../i18n/useLocale.js";
37
39
  import "../theme/tokens.stylex.js";
38
40
  import { colorVars, radiusVars, fontWeightVars, typeScaleVars, durationVars, borderVars } from "../theme/tokens.stylex.js";
39
- import { focusOutlineStyles } from "../utils/index.js";
40
- import { plainDateFormatDayNumber, plainDateFormatStandaloneMonthYear } from "../utils/plainDate.js";
41
- import { plainDateAddDays, plainDateDayOfWeek, plainDateFormat, plainDateIsEqual, plainDateToISO, DATE_FORMAT_WITH_WEEKDAY } from "../utils/index.js";
41
+ import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
42
+ import { plainDateAddDays, plainDateDayOfWeek, plainDateFormatDayNumber, plainDateIsEqual, plainDateToISO, DATE_FORMAT_WITH_WEEKDAY } from "../utils/plainDate.js";
42
43
  import { playReducedMotionDip, reducedMotionFade } from "../motion/reducedMotion.js";
44
+ import { calendarYearMonthOf, formatCalendarDate, formatCalendarMonthLabel, isInCalendarMonth } from "../utils/calendarSystem.js";
43
45
  import "./tokens.stylex.js";
44
46
  import { dateInputTouchSizes, dateInputTouchGeometry } from "./tokens.stylex.js";
45
47
  import { useOwnScrollGesture } from "./useOwnScrollGesture.js";
46
48
  import { useScrollSettle } from "./useScrollSettle.js";
47
- import { fromMonthIndex, monthIndexOf, paneWindow, rowAtScrollOffset, rowsIn, scrollOffsetForRow } from "./monthGeometry.js";
49
+ import { paneWindow, rowAtScrollOffset, rowsIn, scrollOffsetForRow } from "./monthGeometry.js";
48
50
  import { jsx as _jsx } from "react/jsx-runtime";
49
51
  const DAY_SIZE = dateInputTouchSizes.daySize;
50
52
 
@@ -131,6 +133,7 @@ const dynamic = {
131
133
  */
132
134
  export function MonthScroller({
133
135
  handleRef,
136
+ monthModel,
134
137
  minMonthIndex,
135
138
  maxMonthIndex,
136
139
  initialMonthIndex,
@@ -570,16 +573,16 @@ export function MonthScroller({
570
573
  // by month is PageUp/PageDown; everything else is the APG grid vocabulary.
571
574
  const moveFocus = useCallback((from, deltaDays) => {
572
575
  const next = plainDateAddDays(from, deltaDays);
573
- const nextIndex = monthIndexOf(next);
576
+ const nextIndex = monthModel.indexOf(next);
574
577
  if (nextIndex < minMonthIndex || nextIndex > maxMonthIndex) {
575
578
  return;
576
579
  }
577
580
  shouldRestoreFocusRef.current = true;
578
581
  setFocusedDate(next);
579
- if (nextIndex !== monthIndexOf(from)) {
582
+ if (nextIndex !== monthModel.indexOf(from)) {
580
583
  scrollToMonth(nextIndex, 'smooth');
581
584
  }
582
- }, [minMonthIndex, maxMonthIndex, scrollToMonth]);
585
+ }, [monthModel, minMonthIndex, maxMonthIndex, scrollToMonth]);
583
586
  const handleKeyDown = useCallback((event, date) => {
584
587
  // Column within the displayed week, which is what Home/End move to —
585
588
  // not the day of the month.
@@ -656,6 +659,7 @@ export function MonthScroller({
656
659
  children: /*#__PURE__*/_jsx("div", {
657
660
  ...stylex.props(styles.spacer, dynamic.spacer(rowCount * paneSize)),
658
661
  children: paneSize > 0 && rowsIn(visibleRows).map(row => /*#__PURE__*/_jsx(MonthPane, {
662
+ monthModel: monthModel,
659
663
  monthIndex: minMonthIndex + row,
660
664
  insetInlineStart: row * paneSize,
661
665
  inlineSize: paneSize,
@@ -680,6 +684,7 @@ MonthScroller.displayName = 'MonthScroller';
680
684
  * so each day instead carries its weekday in its accessible name.
681
685
  */
682
686
  function MonthPane({
687
+ monthModel,
683
688
  monthIndex,
684
689
  insetInlineStart,
685
690
  inlineSize,
@@ -694,40 +699,32 @@ function MonthPane({
694
699
  }) {
695
700
  const locale = useLocale();
696
701
  const {
697
- year,
698
- month
699
- } = fromMonthIndex(monthIndex);
702
+ calendar
703
+ } = monthModel;
704
+ const month = useMemo(() => monthModel.monthAt(monthIndex), [monthModel, monthIndex]);
700
705
  const {
701
706
  weeks
702
707
  } = useCalendarDays({
703
- year,
704
- month,
708
+ ...calendarYearMonthOf(calendar, month),
709
+ calendar,
705
710
  weekStartsOn,
706
711
  // Always six rows: a variable grid would make pane heights differ, and
707
712
  // with them every snap offset below this month.
708
713
  hasVariableRowCount: false
709
714
  });
710
- const monthLabel = plainDateFormatStandaloneMonthYear({
711
- year,
712
- month,
713
- day: 1
714
- }, locale);
715
+ const monthLabel = formatCalendarMonthLabel(calendar, month, locale);
715
716
 
716
717
  // Exactly one day per pane is tab-reachable, so Tab moves through the
717
718
  // picker rather than through 42 buttons: the focused day if the keyboard
718
719
  // owns one, else the selection, else the first of the month.
719
720
  const tabbableISO = (() => {
720
- if (focusedDate != null && focusedDate.year === year && focusedDate.month === month) {
721
+ if (focusedDate != null && isInCalendarMonth(focusedDate, month)) {
721
722
  return plainDateToISO(focusedDate);
722
723
  }
723
- if (selectedDate != null && selectedDate.year === year && selectedDate.month === month) {
724
+ if (selectedDate != null && isInCalendarMonth(selectedDate, month)) {
724
725
  return plainDateToISO(selectedDate);
725
726
  }
726
- return plainDateToISO({
727
- year,
728
- month,
729
- day: 1
730
- });
727
+ return plainDateToISO(month.start);
731
728
  })();
732
729
  return /*#__PURE__*/_jsx("div", {
733
730
  role: "grid",
@@ -759,7 +756,7 @@ function MonthPane({
759
756
  "data-date": day.iso,
760
757
  "data-outside": day.isOutside ? '' : undefined,
761
758
  tabIndex: day.iso === tabbableISO ? 0 : -1,
762
- "aria-label": plainDateFormat(day.date, DATE_FORMAT_WITH_WEEKDAY, locale),
759
+ "aria-label": formatCalendarDate(calendar, day.date, DATE_FORMAT_WITH_WEEKDAY, locale),
763
760
  "aria-disabled": isDisabled || undefined,
764
761
  "aria-current": isToday ? 'date' : undefined,
765
762
  onClick: () => {
@@ -1,4 +1,7 @@
1
+ import { type MonthModel } from './monthGeometry.js';
1
2
  export interface MonthYearWheelsProps {
3
+ /** The calendar's months, by index. */
4
+ monthModel: MonthModel;
2
5
  /** The month the wheels currently show. */
3
6
  monthIndex: number;
4
7
  /** First reachable month. */
@@ -13,11 +16,17 @@ export interface MonthYearWheelsProps {
13
16
  yearLabel: string;
14
17
  /** False while the panel is hidden. */
15
18
  isActive?: boolean;
19
+ /**
20
+ * The day of the month the picker keeps, such as the selected date's. A year
21
+ * that spans an era change is labeled with the era of this day in the
22
+ * selected month. The first day of the month applies when it is absent.
23
+ */
24
+ keptDay?: number;
16
25
  }
17
26
  /**
18
27
  * Month and year wheels, bounded by the same range as the scroller.
19
28
  */
20
- export declare function MonthYearWheels({ monthIndex, minMonthIndex, maxMonthIndex, onChange, monthLabel, yearLabel, isActive, }: MonthYearWheelsProps): import("react").JSX.Element;
29
+ export declare function MonthYearWheels({ monthModel, monthIndex, minMonthIndex, maxMonthIndex, onChange, monthLabel, yearLabel, isActive, keptDay, }: MonthYearWheelsProps): import("react").JSX.Element;
21
30
  export declare namespace MonthYearWheels {
22
31
  var displayName: string;
23
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MonthYearWheels.d.ts","sourceRoot":"","sources":["../../src/DateInput/MonthYearWheels.tsx"],"names":[],"mappings":"AAyCA,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAe,GAChB,EAAE,oBAAoB,+BA8EtB;yBAtFe,eAAe"}
1
+ {"version":3,"file":"MonthYearWheels.d.ts","sourceRoot":"","sources":["../../src/DateInput/MonthYearWheels.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAAa,KAAK,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAU5D,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAe,EACf,OAAW,GACZ,EAAE,oBAAoB,+BAmFtB;yBA7Fe,eAAe"}
@@ -4,8 +4,10 @@
4
4
 
5
5
  /**
6
6
  * @file MonthYearWheels.tsx
7
- * @input A month index, the reachable month bounds, a change callback
8
- * @output Exports MonthYearWheels — the month + year wheel pair
7
+ * @input A calendar's month model, a month index, the reachable month bounds,
8
+ * a change callback
9
+ * @output Exports MonthYearWheels — the month wheel of a calendar year and the
10
+ * year wheel with era labels
9
11
  * @position Internal component; consumed by TouchDateField.tsx
10
12
  *
11
13
  * The shortcut out of continuous scrolling. Scrolling is the right gesture for
@@ -23,72 +25,81 @@
23
25
  */
24
26
  import { useMemo } from 'react';
25
27
  import * as stylex from '@stylexjs/stylex';
26
- import { useLocale } from "../i18n/index.js";
27
- import { DATE_FORMAT_MONTH_ONLY, plainDateFormat } from "../utils/index.js";
28
+ import { useLocale } from "../i18n/useLocale.js";
29
+ import { calendarYearSpansEras, formatCalendarMonthName, formatCalendarYearLabel } from "../utils/calendarSystem.js";
28
30
  import "../theme/tokens.stylex.js";
29
31
  import { spacingVars } from "../theme/tokens.stylex.js";
30
32
  import "./tokens.stylex.js";
31
33
  import { dateInputTouchGeometry } from "./tokens.stylex.js";
32
34
  import { Wheel } from "./Wheel.js";
33
- import { fromMonthIndex, toMonthIndex } from "./monthGeometry.js";
35
+ import { clampIndex } from "./monthGeometry.js";
34
36
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
35
37
  /**
36
38
  * Month and year wheels, bounded by the same range as the scroller.
37
39
  */
38
40
  export function MonthYearWheels({
41
+ monthModel,
39
42
  monthIndex,
40
43
  minMonthIndex,
41
44
  maxMonthIndex,
42
45
  onChange,
43
46
  monthLabel,
44
47
  yearLabel,
45
- isActive = true
48
+ isActive = true,
49
+ keptDay = 1
46
50
  }) {
47
51
  const locale = useLocale();
52
+ const {
53
+ calendar
54
+ } = monthModel;
48
55
  const {
49
56
  year,
50
57
  month
51
- } = fromMonthIndex(monthIndex);
52
-
53
- // Day 15 of a fixed year: no timezone can push it into an adjacent month
54
- // the way day 1 or day 31 can.
55
- //
56
- // `plainDateFormat` rather than a raw `Intl.DateTimeFormat`, which the
57
- // shared lint rule forbids and which would duplicate the format vocabulary
58
- // besides. Recompute when the provider locale changes so the wheel labels
59
- // stay in sync with the field and calendar.
60
- const monthNames = useMemo(() => Array.from({
61
- length: 12
62
- }, (_, index) => plainDateFormat({
63
- year: 2021,
64
- month: index + 1,
65
- day: 15
66
- }, DATE_FORMAT_MONTH_ONLY, locale)), [locale]);
58
+ } = monthModel.yearMonthAt(monthIndex);
67
59
 
68
60
  // Months outside the range stay on the wheel rather than vanishing: a list
69
- // whose length changes with the year would jump under the finger.
70
- const monthOptions = useMemo(() => monthNames.map((name, index) => {
71
- const candidate = toMonthIndex(year, index + 1);
61
+ // whose length changed with the range would jump under the finger. Only the
62
+ // calendar changes its length, for a year with a leap month.
63
+ const monthOptions = useMemo(() => Array.from({
64
+ length: monthModel.monthsInYear(year)
65
+ }, (_, index) => {
66
+ const candidate = monthModel.indexOfYearMonth(year, index + 1);
72
67
  return {
73
68
  value: index + 1,
74
- label: name,
69
+ label: formatCalendarMonthName(calendar, monthModel.monthAt(candidate), locale),
75
70
  isDisabled: candidate < minMonthIndex || candidate > maxMonthIndex
76
71
  };
77
- }), [monthNames, year, minMonthIndex, maxMonthIndex]);
78
- const yearOptions = useMemo(() => {
79
- const first = fromMonthIndex(minMonthIndex).year;
80
- const last = fromMonthIndex(maxMonthIndex).year;
81
- const options = [];
72
+ }), [monthModel, calendar, year, locale, minMonthIndex, maxMonthIndex]);
73
+
74
+ // Every listed year holds a reachable month: the list runs from the year of
75
+ // the first reachable month to the year of the last.
76
+ const years = useMemo(() => {
77
+ const first = monthModel.yearMonthAt(minMonthIndex).year;
78
+ const last = monthModel.yearMonthAt(maxMonthIndex).year;
79
+ const result = [];
82
80
  for (let candidate = first; candidate <= last; candidate++) {
83
- options.push({
81
+ result.push({
84
82
  value: candidate,
85
- label: String(candidate),
86
- // A year is reachable when any of its months is.
87
- isDisabled: toMonthIndex(candidate, 12) < minMonthIndex || toMonthIndex(candidate, 1) > maxMonthIndex
83
+ label: formatCalendarYearLabel(calendar, candidate, locale),
84
+ spansEras: calendarYearSpansEras(calendar, candidate, locale)
88
85
  });
89
86
  }
90
- return options;
91
- }, [minMonthIndex, maxMonthIndex]);
87
+ return result;
88
+ }, [monthModel, calendar, locale, minMonthIndex, maxMonthIndex]);
89
+
90
+ // A year with an era change takes the era of the shown date, as iOS does.
91
+ // Its row text changes as the month turns. Each row keeps one fixed size.
92
+ const yearOptions = useMemo(() => years.map(({
93
+ value,
94
+ label,
95
+ spansEras
96
+ }) => ({
97
+ value,
98
+ label: spansEras ? formatCalendarYearLabel(calendar, value, locale, {
99
+ month,
100
+ day: keptDay
101
+ }) : label
102
+ })), [years, calendar, locale, month, keptDay]);
92
103
  return /*#__PURE__*/_jsxs("div", {
93
104
  ...{
94
105
  className: "x78zum5 xm8gem x1txdalj"
@@ -98,17 +109,18 @@ export function MonthYearWheels({
98
109
  options: monthOptions,
99
110
  value: month,
100
111
  isActive: isActive,
101
- onChange: nextMonth => onChange(toMonthIndex(year, nextMonth))
112
+ onChange: nextMonth => onChange(monthModel.indexOfYearMonth(year, nextMonth))
102
113
  }), /*#__PURE__*/_jsx(Wheel, {
103
114
  label: yearLabel,
104
115
  options: yearOptions,
105
116
  value: year,
106
117
  isActive: isActive,
107
118
  onChange: nextYear => {
108
- // Jan 31 -> Feb has no equivalent here (months carry no day), but a
109
- // year change can still land outside the range; clamp to it.
110
- const candidate = toMonthIndex(nextYear, month);
111
- onChange(Math.min(Math.max(candidate, minMonthIndex), maxMonthIndex));
119
+ // The same month of the new year, or its common counterpart when
120
+ // the new year lacks a leap month (Adar I becomes Adar). A year
121
+ // change can still land outside the range; clamp to it.
122
+ const candidate = monthModel.shiftYears(monthIndex, nextYear - year);
123
+ onChange(clampIndex(candidate, minMonthIndex, maxMonthIndex));
112
124
  }
113
125
  })]
114
126
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PickerWheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/PickerWheel.tsx"],"names":[],"mappings":"AA2DA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AA2HxB;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAe,EACf,GAAG,GACJ,EAAE,UAAU,+BAuiBZ;yBA9iBe,WAAW"}
1
+ {"version":3,"file":"PickerWheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/PickerWheel.tsx"],"names":[],"mappings":"AA2DA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAgIxB;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAe,EACf,GAAG,GACJ,EAAE,UAAU,+BAuiBZ;yBA9iBe,WAAW"}
@@ -46,6 +46,12 @@ const ROW_HEIGHT = WHEEL_ROW_HEIGHT;
46
46
  const UIKIT_SCALE = ROW_HEIGHT / picker.geometry.rowHeight;
47
47
  /** UIKit's rubber band dimension for the picker's table, at that pitch. */
48
48
  const RUBBER_BAND_DIMENSION = picker.geometry.rubberBandDimension * UIKIT_SCALE;
49
+
50
+ /**
51
+ * The rows' opacity at the column's edges. At 0.7 the row four from the band
52
+ * keeps 5:1 or more in every shipped theme, a margin over WCAG AA's 4.5:1.
53
+ */
54
+ const FADE_FLOOR = 0.7;
49
55
  const _temp = {
50
56
  k87sOh: "x5mnzd7",
51
57
  "$$css": true
@@ -587,7 +593,7 @@ export function PickerWheel({
587
593
  children: /*#__PURE__*/_jsxs("div", {
588
594
  "data-wheel-fade": "",
589
595
  ...{
590
- className: "x10l6tqk x10a8y8t x47corl xheapza"
596
+ className: "x10l6tqk x10a8y8t x47corl xsshixw"
591
597
  },
592
598
  children: [/*#__PURE__*/_jsx("div", {
593
599
  "aria-hidden": "true",
@@ -3,7 +3,7 @@ import type { DateInputProps } from './DateInput.js';
3
3
  * The touch surface. Takes `DateInput`'s props verbatim; see
4
4
  * {@link DateInput} for when it is chosen over the desktop control.
5
5
  */
6
- export declare function TouchDateField({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, placeholder: placeholderFromProps, size: sizeProp, status, statusVariant, labelTooltip, hasClear, numberOfMonths: _numberOfMonths, weekStartsOn: weekStartsOnProp, format, width, containerXstyle, containerClassName, containerStyle, controlXstyle, controlClassName, controlStyle, ref, ...restProps }: DateInputProps): import("react").JSX.Element;
6
+ export declare function TouchDateField({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, placeholder: placeholderFromProps, size: sizeProp, status, statusVariant, labelTooltip, hasClear, numberOfMonths: _numberOfMonths, weekStartsOn: weekStartsOnProp, format, calendar: calendarProp, width, containerXstyle, containerClassName, containerStyle, controlXstyle, controlClassName, controlStyle, ref, ...restProps }: DateInputProps): import("react").JSX.Element;
7
7
  export declare namespace TouchDateField {
8
8
  var displayName: string;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TouchDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/TouchDateField.tsx"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAuehD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAIhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,MAAoB,EACpB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,cAAc,+BAuvBhB;yBA3xBe,cAAc"}
1
+ {"version":3,"file":"TouchDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/TouchDateField.tsx"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AA0ehD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAIhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,MAAoB,EACpB,QAAQ,EAAE,YAAY,EACtB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,cAAc,+BA+wBhB;yBApzBe,cAAc"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  /**
6
6
  * @file TouchDateField.tsx
7
- * @input Uses React, Field, BottomSheet, Button, Icon, Calendar hooks, MonthScroller, MonthYearWheels
7
+ * @input Uses React, Field, BottomSheet, Button, Icon, Calendar hooks, the resolved calendar, MonthScroller, MonthYearWheels
8
8
  * @output Exports TouchDateField — the touch surface behind DateInput
9
9
  * @position Internal component; consumed by DateInput.tsx
10
10
  *
@@ -70,8 +70,10 @@ import "../theme/tokens.stylex.js";
70
70
  import { colorVars, spacingVars, radiusVars, sizeVars, borderVars, fontWeightVars, typeScaleVars, typographyVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
71
71
  import { useTooltip } from "../Tooltip/index.js";
72
72
  import { VisuallyHidden } from "../VisuallyHidden/index.js";
73
- import { focusOutlineStyles, getInputARIA, isImeKeyEvent, mergeProps, rtlStyles, themeProps, formatSharedDate, plainDateFromISO, plainDateToday } from "../utils/index.js";
74
- import { plainDateFormatStandaloneMonthYear } from "../utils/plainDate.js";
73
+ import { focusOutlineStyles, getInputARIA, isImeKeyEvent, mergeProps, rtlStyles, themeProps, plainDateFromISO, plainDateToday } from "../utils/index.js";
74
+ import { useCalendarSystem } from "../i18n/useCalendarSystem.js";
75
+ import { calendarDayOfMonth, formatCalendarMonthLabel } from "../utils/calendarSystem.js";
76
+ import { formatCalendarDateText } from "../utils/calendarDateParser.js";
75
77
  import { chainEventHandlers } from "../utils/chainEventHandlers.js";
76
78
  import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
77
79
  import { usePressFeedback } from "../hooks/usePressFeedback.js";
@@ -79,7 +81,7 @@ import { normalizeDayOfWeek } from "../utils/dateTypes.js";
79
81
  import { getWeekdayHeaders } from "../Calendar/getWeekdayHeaderNames.js";
80
82
  import { MonthScroller } from "./MonthScroller.js";
81
83
  import { MonthYearWheels } from "./MonthYearWheels.js";
82
- import { DEFAULT_MONTH_REACH, clampIndex, fromMonthIndex, monthIndexOf } from "./monthGeometry.js";
84
+ import { DEFAULT_MONTH_REACH, clampIndex, createMonthModel } from "./monthGeometry.js";
83
85
  import "./tokens.stylex.js";
84
86
  import { dateInputTouchSizes, dateInputTouchGeometry } from "./tokens.stylex.js";
85
87
  import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
@@ -233,6 +235,7 @@ export function TouchDateField({
233
235
  numberOfMonths: _numberOfMonths,
234
236
  weekStartsOn: weekStartsOnProp = 0,
235
237
  format = 'date_long',
238
+ calendar: calendarProp,
236
239
  width,
237
240
  containerXstyle,
238
241
  containerClassName,
@@ -269,6 +272,8 @@ export function TouchDateField({
269
272
  const placeholder = placeholderFromProps ?? t('@astryx.dateInput.placeholder');
270
273
  const size = useSize(sizeProp, 'md');
271
274
  const weekStartsOn = normalizeDayOfWeek(weekStartsOnProp);
275
+ const calendar = useCalendarSystem(calendarProp, 'DateInput');
276
+ const monthModel = useMemo(() => createMonthModel(calendar), [calendar]);
272
277
  const generatedID = useId();
273
278
  const id = idProp ?? generatedID;
274
279
  const fieldLabelID = useId();
@@ -336,25 +341,22 @@ export function TouchDateField({
336
341
  // century in each direction from wherever it opened. Anchored once, in a
337
342
  // state initializer: recomputing it as the selection moves would shift every
338
343
  // pane's scroll offset under the user mid-gesture.
339
- const [anchorMonthIndex] = useState(() => monthIndexOf(value != null && /^\d{4}-\d{2}-\d{2}$/.test(value) ? plainDateFromISO(value) : plainDateToday()));
340
- const minMonthIndex = min != null ? monthIndexOf(plainDateFromISO(min)) : anchorMonthIndex - DEFAULT_MONTH_REACH;
341
- const maxMonthIndex = max != null ? monthIndexOf(plainDateFromISO(max)) : anchorMonthIndex + DEFAULT_MONTH_REACH;
344
+ // Indexes belong to the calendar, so DateInput remounts this surface when
345
+ // the calendar changes.
346
+ const [anchorMonthIndex] = useState(() => monthModel.indexOf(value != null && /^\d{4}-\d{2}-\d{2}$/.test(value) ? plainDateFromISO(value) : plainDateToday()));
347
+ const minMonthIndex = min != null ? monthModel.indexOf(plainDateFromISO(min)) : anchorMonthIndex - DEFAULT_MONTH_REACH;
348
+ const maxMonthIndex = max != null ? monthModel.indexOf(plainDateFromISO(max)) : anchorMonthIndex + DEFAULT_MONTH_REACH;
342
349
  const [monthIndex, setMonthIndex] = useState(() => clampIndex(anchorMonthIndex, minMonthIndex, maxMonthIndex));
343
- const {
344
- year,
345
- month
346
- } = fromMonthIndex(monthIndex);
347
350
  const weekdayHeaders = useMemo(() => getWeekdayHeaders(locale, weekStartsOn), [locale, weekStartsOn]);
348
- const monthYearLabel = plainDateFormatStandaloneMonthYear({
349
- year,
350
- month,
351
- day: 1
352
- }, locale);
351
+ // The day the picker keeps: the selected date's day of its month. A month
352
+ // with an era change takes its heading era from this day.
353
+ const keptDay = selectedDate == null ? 1 : calendarDayOfMonth(calendar, selectedDate);
354
+ const monthYearLabel = formatCalendarMonthLabel(calendar, monthModel.monthAt(monthIndex), locale, keptDay);
353
355
 
354
356
  // Formats the committed value only. A function format is called with the ISO
355
- // value; a named one reuses Timestamp's shared date mapping, so the same
356
- // literal renders the same shape here and on the desktop control.
357
- const displayValue = optimisticValue != null && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue) ? typeof format === 'function' ? format(optimisticValue) : formatSharedDate(plainDateFromISO(optimisticValue), format, locale) : '';
357
+ // value; a named one writes the date in the calendar exactly as the desktop
358
+ // control commits it.
359
+ const displayValue = optimisticValue != null && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue) ? typeof format === 'function' ? format(optimisticValue) : formatCalendarDateText(plainDateFromISO(optimisticValue), format, locale, calendar) : '';
358
360
  const fireChange = useCallback(newValue => {
359
361
  if (isEffectivelyDisabled) {
360
362
  return;
@@ -429,7 +431,7 @@ export function TouchDateField({
429
431
  return;
430
432
  }
431
433
  fireChange(undefined);
432
- const currentMonth = monthIndexOf(today);
434
+ const currentMonth = monthModel.indexOf(today);
433
435
  if (currentMonth < minMonthIndex || currentMonth > maxMonthIndex) {
434
436
  return;
435
437
  }
@@ -438,7 +440,7 @@ export function TouchDateField({
438
440
  }
439
441
  setMonthIndex(currentMonth);
440
442
  scrollerHandleRef.current?.scrollToMonth(currentMonth, 'smooth');
441
- }, [isDisabled, fireChange, today, monthIndex, minMonthIndex, maxMonthIndex]);
443
+ }, [isDisabled, fireChange, monthModel, today, monthIndex, minMonthIndex, maxMonthIndex]);
442
444
 
443
445
  // Selection commits on the tap and leaves the sheet up, so a mistake can be
444
446
  // corrected in place and a nearby date reconsidered without reopening.
@@ -696,6 +698,7 @@ export function TouchDateField({
696
698
  }[!!isWheelOpen << 0],
697
699
  children: /*#__PURE__*/_jsx(MonthScroller, {
698
700
  handleRef: scrollerHandleRef,
701
+ monthModel: monthModel,
699
702
  minMonthIndex: minMonthIndex,
700
703
  maxMonthIndex: maxMonthIndex,
701
704
  initialMonthIndex: monthIndex,
@@ -718,7 +721,9 @@ export function TouchDateField({
718
721
  }
719
722
  }[!!!isWheelOpen << 0],
720
723
  children: /*#__PURE__*/_jsx(MonthYearWheels, {
724
+ monthModel: monthModel,
721
725
  monthIndex: monthIndex,
726
+ keptDay: keptDay,
722
727
  minMonthIndex: minMonthIndex,
723
728
  maxMonthIndex: maxMonthIndex,
724
729
  onChange: handleWheelChange,
@@ -1,20 +1,23 @@
1
1
  /**
2
2
  * @file monthGeometry.ts
3
- * @input PlainDate values, scroll offsets, pane heights
4
- * @output Pure month-index arithmetic and the virtualized pane window
5
- * @position Internal helper; consumed by MonthScroller.tsx and DateInput.tsx
3
+ * @input PlainDate values, a calendar system, scroll offsets, pane heights
4
+ * @output Month-index arithmetic for a calendar and the virtualized pane window
5
+ * @position Internal helper; consumed by the touch date surfaces
6
6
  *
7
- * A "month index" is a single integer that totally orders calendar months:
8
- * `year * 12 + (month - 1)`. The scroller is a list of equal-width panes, so
9
- * one integer converts freely between a month, a row in that list, and a
10
- * scroll offset — which is the whole trick behind continuous scrolling.
7
+ * A "month index" is a single integer that totally orders calendar months. In
8
+ * the Gregorian-aligned calendars it is `year * 12 + (month - 1)`; in the
9
+ * others it counts calendar months from a fixed month, because their years
10
+ * have 12 or 13 months. The scroller is a list of equal-width panes, so one
11
+ * integer converts freely between a month, a row in that list, and a scroll
12
+ * offset — which is the whole trick behind continuous scrolling.
11
13
  *
12
14
  * These are pure functions on purpose: the scroll math is the part most likely
13
15
  * to be wrong, and it is testable without a layout engine.
14
16
  *
15
17
  * SYNC: When modified, update DateInputTouch.test.tsx.
16
18
  */
17
- import type { PlainDate } from '../utils/index.js';
19
+ import type { PlainDate } from '../utils/dateTypes.js';
20
+ import { type CalendarMonth, type CalendarSystem } from '../utils/calendarSystem.js';
18
21
  /** How many months are reachable in either direction when unbounded. */
19
22
  export declare const DEFAULT_MONTH_REACH = 600;
20
23
  /** `year * 12 + (month - 1)`, for a 1-based month. */
@@ -62,4 +65,35 @@ export interface PaneWindow {
62
65
  export declare function paneWindow(centerRow: number, rowCount: number, overscan: number): PaneWindow;
63
66
  /** `[start, end]` inclusive, as an array of rows. */
64
67
  export declare function rowsIn({ start, end }: PaneWindow): number[];
68
+ /**
69
+ * Month indexes for one calendar. Years and month positions are the ones
70
+ * `calendarMonthOfYear` counts.
71
+ */
72
+ export interface MonthModel {
73
+ readonly calendar: CalendarSystem;
74
+ /** The index of the calendar month that contains a date. */
75
+ indexOf: (date: PlainDate) => number;
76
+ /** The calendar month at an index. */
77
+ monthAt: (index: number) => CalendarMonth;
78
+ /** The calendar year of an index and the month's position in it. */
79
+ yearMonthAt: (index: number) => {
80
+ year: number;
81
+ month: number;
82
+ };
83
+ /** The index of a month position in a calendar year. */
84
+ indexOfYearMonth: (year: number, month: number) => number;
85
+ /** The number of months in a calendar year. */
86
+ monthsInYear: (year: number) => number;
87
+ /**
88
+ * The index `years` calendar years from `index`, in the same month. A leap
89
+ * month that the target year does not have becomes its common counterpart.
90
+ */
91
+ shiftYears: (index: number, years: number) => number;
92
+ }
93
+ /**
94
+ * The month model of a calendar. A calendar that needs Temporal must be
95
+ * available in this runtime; `useCalendarSystem` resolves one that is not to
96
+ * `gregory`.
97
+ */
98
+ export declare function createMonthModel(calendar: CalendarSystem): MonthModel;
65
99
  //# sourceMappingURL=monthGeometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"monthGeometry.d.ts","sourceRoot":"","sources":["../../src/DateInput/monthGeometry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,UAAU,CAAC;AAExC,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAK3E;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAe,GACrB,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAe,GACrB,MAAM,CAGR;AAED,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,CAKZ;AAED,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAMzD"}
1
+ {"version":3,"file":"monthGeometry.d.ts","sourceRoot":"","sources":["../../src/DateInput/monthGeometry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EASpB,MAAM,yBAAyB,CAAC;AAEjC,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAK3E;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAe,GACrB,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAe,GACrB,MAAM,CAGR;AAED,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,CAKZ;AAED,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAMzD;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,4DAA4D;IAC5D,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC;IACrC,sCAAsC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;IAC1C,oEAAoE;IACpE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAC9D,wDAAwD;IACxD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,+CAA+C;IAC/C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC;;;OAGG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACtD;AAwDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAIrE"}