@cube-dev/ui-kit 0.0.0-canary-a9d94d7 → 0.0.0-canary-a1aba4f

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 (582) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.d.ts +4 -4
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/Root.js.map +1 -1
  18. package/dist/components/actions/Action/Action.js +1 -1
  19. package/dist/components/actions/Banner/Banner.js +1 -1
  20. package/dist/components/actions/Button/Button.d.ts +0 -1
  21. package/dist/components/actions/Button/Button.js +1 -1
  22. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  24. package/dist/components/actions/ButtonSplit/context.js +1 -1
  25. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  61. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  62. package/dist/components/content/Layout/GridLayout.js +1 -1
  63. package/dist/components/content/Layout/Layout.js +1 -1
  64. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  65. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +1 -1
  86. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  87. package/dist/components/content/Tag/Tag.js +1 -1
  88. package/dist/components/content/Text.d.ts +14 -14
  89. package/dist/components/content/Text.js +1 -1
  90. package/dist/components/content/TextItem/TextItem.js +1 -1
  91. package/dist/components/content/Title.js +1 -1
  92. package/dist/components/content/Tree/Tree.js +1 -1
  93. package/dist/components/content/Tree/TreeNode.js +1 -1
  94. package/dist/components/content/Tree/styled.js +1 -1
  95. package/dist/components/content/Tree/tree-index.js +1 -1
  96. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  97. package/dist/components/content/Tree/use-load-data.js +1 -1
  98. package/dist/components/content/highlightText.js +1 -1
  99. package/dist/components/content/use-auto-tooltip.js +1 -1
  100. package/dist/components/data/DataTable/DataTable.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  106. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  107. package/dist/components/data/TableBase/RowCollection.js +1 -1
  108. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  109. package/dist/components/data/TableBase/TableRow.js +1 -1
  110. package/dist/components/data/TableBase/TableView.js +1 -1
  111. package/dist/components/data/TableBase/column-menu.js +1 -1
  112. package/dist/components/data/TableBase/column-tint.js +1 -1
  113. package/dist/components/data/TableBase/row-menu.js +1 -1
  114. package/dist/components/data/TableBase/styled.d.ts +1 -2
  115. package/dist/components/data/TableBase/styled.js +1 -1
  116. package/dist/components/data/TableBase/types.js +1 -1
  117. package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
  118. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  119. package/dist/components/data/TableBase/use-column-order.js +1 -1
  120. package/dist/components/data/TableBase/use-container-width.js +1 -1
  121. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  122. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  123. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  124. package/dist/components/data/TableBase/use-table-search.js +1 -1
  125. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  126. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  127. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  128. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  129. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  130. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  131. package/dist/components/fields/Checkbox/context.js +1 -1
  132. package/dist/components/fields/ColorInput/ColorInput.js +2 -3
  133. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  134. package/dist/components/fields/ColorPicker/ColorPicker.js +2 -2
  135. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  136. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  137. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  138. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  139. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  140. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  141. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  142. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  143. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  144. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  145. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  146. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  147. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  148. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  149. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  150. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  151. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  152. package/dist/components/fields/DatePicker/PeriodPicker.js +39 -23
  153. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  154. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  155. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  156. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  157. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  158. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  159. package/dist/components/fields/DatePicker/period.js +1 -1
  160. package/dist/components/fields/DatePicker/props.js +1 -1
  161. package/dist/components/fields/DatePicker/utils.js +1 -1
  162. package/dist/components/fields/FileInput/FileInput.js +1 -1
  163. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  164. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  165. package/dist/components/fields/Input/Input.js +1 -1
  166. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  167. package/dist/components/fields/ListBox/ListBox.js +1 -1
  168. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  169. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
  170. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  171. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  172. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  173. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  174. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  175. package/dist/components/fields/Picker/Picker.js +1 -1
  176. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  177. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -2
  178. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  179. package/dist/components/fields/RadioGroup/context.js +1 -1
  180. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  181. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  182. package/dist/components/fields/Select/Select.js +1 -1
  183. package/dist/components/fields/Slider/Gradation.js +1 -1
  184. package/dist/components/fields/Slider/HueSlider.js +2 -15
  185. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  186. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  187. package/dist/components/fields/Slider/Slider.js +1 -1
  188. package/dist/components/fields/Slider/SliderBase.js +1 -1
  189. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  190. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  191. package/dist/components/fields/Slider/elements.js +1 -1
  192. package/dist/components/fields/Slider/index.js +1 -1
  193. package/dist/components/fields/Switch/Switch.js +1 -1
  194. package/dist/components/fields/TextArea/TextArea.js +1 -1
  195. package/dist/components/fields/TextInput/TextInput.js +1 -1
  196. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  197. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  198. package/dist/components/fields/color/ColorPanel.js +1 -1
  199. package/dist/components/fields/{ColorSwatch → color}/ColorSwatch.d.ts +2 -8
  200. package/dist/components/fields/{ColorSwatch → color}/ColorSwatch.js +6 -14
  201. package/dist/components/fields/color/ColorSwatch.js.map +1 -0
  202. package/dist/components/fields/color/channels.js +1 -1
  203. package/dist/components/fields/color/color.js +1 -1
  204. package/dist/components/fields/color/context.js +1 -1
  205. package/dist/components/fields/color/index.d.ts +1 -0
  206. package/dist/components/fields/index.d.ts +1 -2
  207. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  208. package/dist/components/form/Form/Field.js +1 -1
  209. package/dist/components/form/Form/Form.js +1 -1
  210. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  211. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  212. package/dist/components/form/Form/SubmitError.js +1 -1
  213. package/dist/components/form/Form/index.js +1 -1
  214. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  215. package/dist/components/form/Form/use-field/use-field.js +1 -1
  216. package/dist/components/form/Form/use-form.js +1 -1
  217. package/dist/components/form/Form/validation.js +1 -1
  218. package/dist/components/form/Label.js +1 -1
  219. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  220. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  221. package/dist/components/form/validation/use-validation-props.js +1 -1
  222. package/dist/components/form/wrapper.js +1 -1
  223. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  224. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  225. package/dist/components/layout/Board/Board.js +1 -1
  226. package/dist/components/layout/Board/BoardProvider.js +1 -1
  227. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  228. package/dist/components/layout/Board/Widget.js +1 -1
  229. package/dist/components/layout/Board/WidgetHost.js +1 -1
  230. package/dist/components/layout/Board/board-context.js +1 -1
  231. package/dist/components/layout/Board/board-store.js +1 -1
  232. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  233. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  234. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  235. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  236. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  237. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  238. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  239. package/dist/components/layout/Board/index.js +1 -1
  240. package/dist/components/layout/Board/responsive-utils.js +1 -1
  241. package/dist/components/layout/Board/use-board-layout.js +1 -1
  242. package/dist/components/layout/Board/use-board-registry.js +1 -1
  243. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  244. package/dist/components/layout/Board/use-board-selection.js +1 -1
  245. package/dist/components/layout/Flex.js +1 -1
  246. package/dist/components/layout/Flow.js +1 -1
  247. package/dist/components/layout/Grid.js +1 -1
  248. package/dist/components/layout/Panel.js +1 -1
  249. package/dist/components/layout/Prefix.js +1 -1
  250. package/dist/components/layout/ResizablePanel.js +1 -1
  251. package/dist/components/layout/Space.js +1 -1
  252. package/dist/components/layout/Suffix.js +1 -1
  253. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  254. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  255. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  256. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  257. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  258. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  259. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  260. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  261. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  262. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  263. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  264. package/dist/components/navigation/Tabs/styled.js +1 -1
  265. package/dist/components/navigation/Tabs/types.js +1 -1
  266. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  267. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  268. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  269. package/dist/components/other/Calendar/Calendar.js +13 -43
  270. package/dist/components/other/Calendar/Calendar.js.map +1 -1
  271. package/dist/components/other/Calendar/CalendarCell.js +10 -30
  272. package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
  273. package/dist/components/other/Calendar/CalendarGrid.js +9 -5
  274. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  275. package/dist/components/other/Calendar/CalendarHeader.js +61 -0
  276. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -0
  277. package/dist/components/other/Calendar/CalendarPanel.js +195 -0
  278. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -0
  279. package/dist/components/other/Calendar/PeriodCalendar.js +160 -196
  280. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  281. package/dist/components/other/Calendar/PeriodGrid.js +144 -0
  282. package/dist/components/other/Calendar/PeriodGrid.js.map +1 -0
  283. package/dist/components/other/Calendar/RangeCalendar.js +11 -40
  284. package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
  285. package/dist/components/other/Calendar/styled.js +64 -0
  286. package/dist/components/other/Calendar/styled.js.map +1 -0
  287. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  288. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  289. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  290. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  291. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  292. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  293. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  294. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  295. package/dist/components/overlays/Dialog/context.js +1 -1
  296. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  297. package/dist/components/overlays/Modal/Modal.d.ts +1 -2
  298. package/dist/components/overlays/Modal/Modal.js +1 -1
  299. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  300. package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
  301. package/dist/components/overlays/Modal/Overlay.js +1 -1
  302. package/dist/components/overlays/Modal/Popover.js +1 -1
  303. package/dist/components/overlays/Modal/Tray.js +1 -1
  304. package/dist/components/overlays/Modal/Underlay.js +1 -1
  305. package/dist/components/overlays/Modal/types.d.ts +0 -1
  306. package/dist/components/overlays/Notifications/Notification.js +1 -1
  307. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  308. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  309. package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
  310. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  311. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  312. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  313. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  314. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  315. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  316. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  317. package/dist/components/overlays/Notifications/index.js +1 -1
  318. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  319. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  320. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  321. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  322. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  323. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  324. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  325. package/dist/components/overlays/Toast/index.js +1 -1
  326. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  327. package/dist/components/overlays/Toast/useToast.js +1 -1
  328. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  329. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  330. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  331. package/dist/components/overlays/Tooltip/context.js +1 -1
  332. package/dist/components/portal/Portal.js +1 -1
  333. package/dist/components/portal/PortalProvider.js +1 -1
  334. package/dist/components/portal/index.d.ts +0 -1
  335. package/dist/components/portal/usePortal.js +1 -1
  336. package/dist/components/shared/DraggableCollection.js +1 -1
  337. package/dist/components/shared/InvalidIcon.js +1 -1
  338. package/dist/components/shared/ValidIcon.js +1 -1
  339. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  340. package/dist/components/status/Spin/Cube.js +1 -1
  341. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  342. package/dist/components/status/Spin/Spin.js +1 -1
  343. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  344. package/dist/data/item-themes.js +1 -1
  345. package/dist/data/themes.js +1 -1
  346. package/dist/eslint-plugin/defaults.generated.js +1 -1
  347. package/dist/eslint-plugin/index.js +1 -1
  348. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  349. package/dist/i18n/I18nProvider.js +1 -1
  350. package/dist/i18n/createFormatter.js +1 -1
  351. package/dist/i18n/index.js +1 -1
  352. package/dist/i18n/instance.js +1 -1
  353. package/dist/i18n/locales/de-DE/uikit.js +15 -2
  354. package/dist/i18n/locales/en-US/uikit.js +15 -2
  355. package/dist/i18n/locales/en-US/uikit.json.d.ts +14 -1
  356. package/dist/i18n/locales/es-ES/uikit.js +15 -2
  357. package/dist/i18n/locales/es-MX/uikit.js +15 -2
  358. package/dist/i18n/locales/fr-FR/uikit.js +15 -2
  359. package/dist/i18n/locales/it-IT/uikit.js +15 -2
  360. package/dist/i18n/locales/ja-JP/uikit.js +15 -2
  361. package/dist/i18n/locales/nb-NO/uikit.js +15 -2
  362. package/dist/i18n/locales/pt-BR/uikit.js +15 -2
  363. package/dist/i18n/locales/pt-PT/uikit.js +15 -2
  364. package/dist/i18n/locales/sv-SE/uikit.js +15 -2
  365. package/dist/i18n/locales/vi-VN/uikit.js +15 -2
  366. package/dist/i18n/locales.js +1 -1
  367. package/dist/i18n/useFormatter.js +1 -1
  368. package/dist/i18n/useI18n.js +1 -1
  369. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  370. package/dist/icons/AdjustmentsIcon.js +1 -1
  371. package/dist/icons/AiIcon.js +1 -1
  372. package/dist/icons/AreaChartIcon.js +1 -1
  373. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  374. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  375. package/dist/icons/BackwardIcon.js +1 -1
  376. package/dist/icons/BarChartIcon.js +1 -1
  377. package/dist/icons/BellFilledIcon.js +1 -1
  378. package/dist/icons/BellIcon.js +1 -1
  379. package/dist/icons/BooleanIcon.js +1 -1
  380. package/dist/icons/CalendarEditIcon.js +1 -1
  381. package/dist/icons/CalendarIcon.js +1 -1
  382. package/dist/icons/CaretDownIcon.js +1 -1
  383. package/dist/icons/CaretUpIcon.js +1 -1
  384. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  385. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  386. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  387. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  388. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  389. package/dist/icons/ChartBarLineIcon.js +1 -1
  390. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  391. package/dist/icons/ChartBarStackedIcon.js +1 -1
  392. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  393. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  394. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  395. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  396. package/dist/icons/ChartBubbleIcon.js +1 -1
  397. package/dist/icons/ChartDonut2Icon.js +1 -1
  398. package/dist/icons/ChartFunnelIcon.js +1 -1
  399. package/dist/icons/ChartHeatmapIcon.js +1 -1
  400. package/dist/icons/ChartKPIIcon.js +1 -1
  401. package/dist/icons/ChartPie2Icon.js +1 -1
  402. package/dist/icons/ChartScatterIcon.js +1 -1
  403. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  404. package/dist/icons/CheckCircleIcon.js +1 -1
  405. package/dist/icons/CheckIcon.js +1 -1
  406. package/dist/icons/CircleFilledIcon.js +1 -1
  407. package/dist/icons/ClearIcon.js +1 -1
  408. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  409. package/dist/icons/CloseCircleIcon.js +1 -1
  410. package/dist/icons/CloseIcon.js +1 -1
  411. package/dist/icons/CodeIcon.js +1 -1
  412. package/dist/icons/ColumnTotalIcon.js +1 -1
  413. package/dist/icons/CopyIcon.js +1 -1
  414. package/dist/icons/CountIcon.js +1 -1
  415. package/dist/icons/CubeIcon.js +1 -1
  416. package/dist/icons/CubePauseIcon.js +1 -1
  417. package/dist/icons/CubePlayIcon.js +1 -1
  418. package/dist/icons/CurrencyDollarIcon.js +1 -1
  419. package/dist/icons/DangerIcon.js +1 -1
  420. package/dist/icons/DashboardIcon.js +1 -1
  421. package/dist/icons/DatabaseIcon.js +1 -1
  422. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  423. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  424. package/dist/icons/DirectionIcon.js +1 -1
  425. package/dist/icons/DonutIcon.js +1 -1
  426. package/dist/icons/DownIcon.js +1 -1
  427. package/dist/icons/EditIcon.js +1 -1
  428. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  429. package/dist/icons/ExclamationCircleIcon.js +1 -1
  430. package/dist/icons/ExclamationIcon.js +1 -1
  431. package/dist/icons/EyeIcon.js +1 -1
  432. package/dist/icons/EyeInvisibleIcon.js +1 -1
  433. package/dist/icons/FilterIcon.js +1 -1
  434. package/dist/icons/FolderFilledIcon.js +1 -1
  435. package/dist/icons/FolderIcon.js +1 -1
  436. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  437. package/dist/icons/FolderOpenIcon.js +1 -1
  438. package/dist/icons/ForwardIcon.js +1 -1
  439. package/dist/icons/GripVerticalIcon.js +1 -1
  440. package/dist/icons/HierarchyIcon.js +1 -1
  441. package/dist/icons/HierarchyOpenIcon.js +1 -1
  442. package/dist/icons/Icon.js +1 -1
  443. package/dist/icons/InfoCircleIcon.js +1 -1
  444. package/dist/icons/InfoIcon.js +1 -1
  445. package/dist/icons/KeyIcon.js +1 -1
  446. package/dist/icons/LeftIcon.js +1 -1
  447. package/dist/icons/LineChartIcon.js +1 -1
  448. package/dist/icons/LoadingIcon.js +1 -1
  449. package/dist/icons/LockFilledIcon.js +1 -1
  450. package/dist/icons/LockIcon.js +1 -1
  451. package/dist/icons/MoreIcon.js +1 -1
  452. package/dist/icons/NotAllowedIcon.js +1 -1
  453. package/dist/icons/Number123Icon.js +1 -1
  454. package/dist/icons/NumberIcon.js +1 -1
  455. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  456. package/dist/icons/PauseCircleIcon.js +1 -1
  457. package/dist/icons/PauseIcon.js +1 -1
  458. package/dist/icons/PercentageIcon.js +1 -1
  459. package/dist/icons/PieChartIcon.js +1 -1
  460. package/dist/icons/PipetteIcon.js +1 -1
  461. package/dist/icons/PlayCircleIcon.js +1 -1
  462. package/dist/icons/PlayIcon.js +1 -1
  463. package/dist/icons/PlusIcon.js +1 -1
  464. package/dist/icons/ProgressBarIcon.js +1 -1
  465. package/dist/icons/ReloadIcon.js +1 -1
  466. package/dist/icons/ReportIcon.js +1 -1
  467. package/dist/icons/ReturnIcon.js +1 -1
  468. package/dist/icons/RightIcon.js +1 -1
  469. package/dist/icons/RowTotalsIcon.js +1 -1
  470. package/dist/icons/SchemeIcon.js +1 -1
  471. package/dist/icons/SearchIcon.js +1 -1
  472. package/dist/icons/SemanticQueryIcon.js +1 -1
  473. package/dist/icons/SettingsIcon.js +1 -1
  474. package/dist/icons/ShieldFilledIcon.js +1 -1
  475. package/dist/icons/ShieldIcon.js +1 -1
  476. package/dist/icons/SlashIcon.js +1 -1
  477. package/dist/icons/SparklesIcon.js +1 -1
  478. package/dist/icons/SqlIcon.js +1 -1
  479. package/dist/icons/StatsIcon.js +1 -1
  480. package/dist/icons/StopIcon.js +1 -1
  481. package/dist/icons/StringIcon.js +1 -1
  482. package/dist/icons/SubtotalsIcon.js +1 -1
  483. package/dist/icons/SwitchIcon.js +1 -1
  484. package/dist/icons/TableIcon.js +1 -1
  485. package/dist/icons/ThumbsDownIcon.js +1 -1
  486. package/dist/icons/ThumbsUpIcon.js +1 -1
  487. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  488. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  489. package/dist/icons/ThunderboltIcon.js +1 -1
  490. package/dist/icons/TimeIcon.js +1 -1
  491. package/dist/icons/TrashIcon.js +1 -1
  492. package/dist/icons/UnlockIcon.js +1 -1
  493. package/dist/icons/UpIcon.js +1 -1
  494. package/dist/icons/UserGroupIcon.js +1 -1
  495. package/dist/icons/UserIcon.js +1 -1
  496. package/dist/icons/UserLockIcon.js +1 -1
  497. package/dist/icons/ViewIcon.js +1 -1
  498. package/dist/icons/WarningFilledIcon.js +1 -1
  499. package/dist/icons/WarningIcon.js +1 -1
  500. package/dist/icons/wrap-icon.js +1 -1
  501. package/dist/index.d.ts +3 -4
  502. package/dist/index.js +3 -4
  503. package/dist/index.js.map +1 -1
  504. package/dist/probe/canonicalize.js +1 -1
  505. package/dist/probe/css.js +1 -1
  506. package/dist/probe/index.js +1 -1
  507. package/dist/provider.js +1 -1
  508. package/dist/providers/TrackingProvider.js +1 -1
  509. package/dist/providers/navigationAdapter.default.js +1 -1
  510. package/dist/tokens/base.js +1 -1
  511. package/dist/tokens/color-theme.d.ts +1 -8
  512. package/dist/tokens/color-theme.js +7 -19
  513. package/dist/tokens/color-theme.js.map +1 -1
  514. package/dist/tokens/colors.js +1 -1
  515. package/dist/tokens/index.d.ts +1 -2
  516. package/dist/tokens/index.js +1 -2
  517. package/dist/tokens/index.js.map +1 -1
  518. package/dist/tokens/layout.js +1 -1
  519. package/dist/tokens/lazy-styles.js +1 -1
  520. package/dist/tokens/palette-config.d.ts +9 -139
  521. package/dist/tokens/palette-config.js +10 -46
  522. package/dist/tokens/palette-config.js.map +1 -1
  523. package/dist/tokens/palette.js +157 -397
  524. package/dist/tokens/palette.js.map +1 -1
  525. package/dist/tokens/shadows.js +1 -1
  526. package/dist/tokens/sizes.js +1 -1
  527. package/dist/tokens/spacing.js +1 -1
  528. package/dist/tokens/typography.js +1 -1
  529. package/dist/utils/ResizeSensor.js +1 -1
  530. package/dist/utils/is-dev-env.js +1 -1
  531. package/dist/utils/modules.js +1 -1
  532. package/dist/utils/promise.js +1 -1
  533. package/dist/utils/raf.js +1 -1
  534. package/dist/utils/random.js +1 -1
  535. package/dist/utils/range.js +1 -1
  536. package/dist/utils/react/RenderCache.js +1 -1
  537. package/dist/utils/react/Slots.js +1 -1
  538. package/dist/utils/react/chain.js +1 -1
  539. package/dist/utils/react/disabledProps.js +1 -1
  540. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  541. package/dist/utils/react/index.js +1 -1
  542. package/dist/utils/react/interactions.js +1 -1
  543. package/dist/utils/react/isTextOnly.js +1 -1
  544. package/dist/utils/react/mapProps.js +1 -1
  545. package/dist/utils/react/mergeProps.js +1 -1
  546. package/dist/utils/react/nullableValue.js +1 -1
  547. package/dist/utils/react/resolveIcon.js +1 -1
  548. package/dist/utils/react/sharedStore.js +1 -1
  549. package/dist/utils/react/useBufferedValue.js +1 -1
  550. package/dist/utils/react/useCombinedRefs.js +1 -1
  551. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  552. package/dist/utils/react/useEventBus.js +1 -1
  553. package/dist/utils/react/useId.js +1 -1
  554. package/dist/utils/react/useIsDarwin.js +1 -1
  555. package/dist/utils/react/useKeySymbols.js +1 -1
  556. package/dist/utils/react/useLayoutEffect.js +1 -1
  557. package/dist/utils/react/useLocalStorage.js +1 -1
  558. package/dist/utils/react/useMergeStyles.js +1 -1
  559. package/dist/utils/react/usePopoverSync.js +1 -1
  560. package/dist/utils/react/useQaProps.js +1 -1
  561. package/dist/utils/react/useViewportSize.js +1 -1
  562. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  563. package/dist/utils/selection.js +1 -1
  564. package/dist/utils/styles.js +1 -1
  565. package/dist/utils/tree.js +1 -1
  566. package/dist/utils/warnings.js +1 -1
  567. package/dist/version.js +2 -2
  568. package/docs/Theming.md +30 -257
  569. package/docs/components/fields/PeriodPicker.md +44 -4
  570. package/docs/components/other/Calendar.md +189 -0
  571. package/docs/glaze/api.md +38 -117
  572. package/docs/glaze/methodology.md +13 -15
  573. package/docs/glaze/okhst.md +0 -4
  574. package/package.json +2 -2
  575. package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +0 -1
  576. package/dist/components/fields/ColorSwatch/index.d.ts +0 -2
  577. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
  578. package/dist/components/portal/PortalProvider.d.ts +0 -2
  579. package/dist/tokens/color-seed.d.ts +0 -44
  580. package/dist/tokens/color-seed.js +0 -48
  581. package/dist/tokens/color-seed.js.map +0 -1
  582. package/docs/components/fields/ColorSwatch.md +0 -148
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-a9d94d7 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-a1aba4f | Cube Dev Team */
2
2
  //#region src/utils/warnings.ts
3
3
  const SUGGESTED_PROP_MAP = {
4
4
  disabled: "isDisabled",
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-a9d94d7 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-a1aba4f | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.0.0-canary-a9d94d7";
3
+ const VERSION = "0.0.0-canary-a1aba4f";
4
4
  const TASTY_VERSION = "3.0.1";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
package/docs/Theming.md CHANGED
@@ -5,10 +5,6 @@ handful of seeds: an accent hue, a base hue, a saturation, and a hue per status
5
5
  theme. Those seeds are tunable at runtime — change one and every token re-resolves, in light,
6
6
  dark, and high-contrast schemes at once.
7
7
 
8
- The accent and base zones can each be seeded by a **color** instead of a hue, which is
9
- usually what you have: `accentColor: '#2F5BFF'` rather than `hue: 266`. See
10
- [Two zones, two ways to seed them](#two-zones-two-ways-to-seed-them).
11
-
12
8
  ```ts
13
9
  import { setPaletteConfig } from '@cube-dev/ui-kit';
14
10
 
@@ -27,17 +23,13 @@ value so this stays true.
27
23
 
28
24
  | Option | Scope | Default |
29
25
  | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |
30
- | `accentColor` | **Accent** zone seeded by a color. Derives the hue, the saturation (with `pastel` off) and the accent **tone**, so the brand fill renders as the color you passed. | unset |
31
- | `baseColor` | **Base** zone seeded by a color. **Hue only** — its tone and saturation are discarded. | unset |
32
26
  | `hue` | **Accent** hue in degrees — the brand. Drives the `accent-*` family, `primary` / `purple` / `special`, and the brand-tinted `focus`, loading faces and disabled chip. | `280.3` |
33
27
  | `baseHue` | **Base** hue in degrees — the neutral chrome: `surface` and its ladder, the `surface-text*` ramp, `border`, `placeholder`. | inherits `hue` |
34
- | `saturation` | Seed saturation (0–100) for the `default` theme, and the fallback for every theme that sets none. Setting it **turns `pastel` off**, which is the path it belongs to. | `100` |
35
- | `baseSaturation` | Seed saturation (0–100) of the **base** zone — the same family `baseHue` governs. On the same scale as `saturation`; the shipped chrome is `12`. | `saturation × 0.12` |
36
- | `surfaceMode` | Global. `'tinted'` moves the neutral surface ramp two tones off the end of the tone scale, which is what gives `baseSaturation` room to reach the page surface. | `'default'` |
28
+ | `saturation` | Seed saturation (0–100) for the `default` theme, and the fallback for every theme that sets none. | `100` |
37
29
  | `themes.<status>.hue` | Hue for `success` / `danger` / `warning` / `note`. | `156.9` / `23.1` / `84.3` / `302.3` |
38
30
  | `themes.<status>.saturation` | Saturation for that status theme. | inherits `saturation` |
39
31
  | `themes.code.saturation` | Saturation for the `code-*` syntax family. Hues are fixed, and this does **not** inherit `saturation`, nor track its default. | `80` |
40
- | `pastel` | Global. Relaxes the sRGB-safe chroma limit, and **pins `saturation` to 100**. Wins wherever both are set. Every theme except `code`. | `true` |
32
+ | `pastel` | Global. Relaxes the sRGB-safe chroma limit. Every theme except `code`. | `true` |
41
33
  | `contrastLevel` | Global. `'auto'`, or a manual `0`–`100` level. | `'auto'` |
42
34
 
43
35
  ### The setter replaces
@@ -72,13 +64,13 @@ setPaletteConfig((config) => ({
72
64
  `resetPaletteConfig()` drops all tuning at once — the same as
73
65
  `setPaletteConfig({})`, just easier to read at a call site.
74
66
 
75
- ### Two zones, two ways to seed them
67
+ ### Two hue zones
76
68
 
77
69
  Hue is split into an **accent** zone and a **base** zone:
78
70
 
79
- - **Accent** (`hue` / `accentColor`) — the `accent-*` family on every theme, `primary` /
80
- `purple` / `special`, plus `focus`, the loading faces and the disabled chip.
81
- - **Base** (`baseHue` / `baseColor`) — the neutral chrome: `surface` and its ladder, the
71
+ - **Accent** (`hue`) — the `accent-*` family on every theme, `primary` / `purple` /
72
+ `special`, plus `focus`, the loading faces and the disabled chip.
73
+ - **Base** (`baseHue`) — the neutral chrome: `surface` and its ladder, the
82
74
  `surface-text*` ramp, `border`, `placeholder`.
83
75
 
84
76
  `baseHue` inherits `hue`, so out of the box the chrome carries a faint tint of the
@@ -91,67 +83,11 @@ setPaletteConfig({ hue: 235, baseHue: 60 });
91
83
  Only the `default` theme is affected. A colored theme's tinted `surface`
92
84
  deliberately follows _its own_ hue, because a danger banner should read as red.
93
85
 
94
- Either zone can take a **color** instead, which is usually the form a brand arrives in.
95
- Anything Glaze parses works — hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()`, `oklch()`.
96
- CSS color keywords (`rebeccapurple`) are not supported; an unparseable value warns and
97
- falls back to the numeric seed.
98
-
99
- ```ts
100
- setPaletteConfig({ accentColor: '#2F5BFF', baseColor: '#7A7269' });
101
- ```
102
-
103
- The two are not symmetric, and the difference is the point:
104
-
105
- - `accentColor` contributes hue, saturation **and tone**. The tone is what makes the
106
- brand fill actually _be_ your color. Without it the fill is authored as a fixed tone
107
- step off white, so every accent hue lands at roughly the same lightness — a yellow
108
- brand comes out olive.
109
- - `baseColor` contributes **hue only**. Its tone and saturation are discarded, because
110
- the chrome's lightness ladder and its 0.10–0.20 saturation factors are the design. A
111
- base color says which way the greys lean, not how dark or how vivid they are.
112
-
113
- The numeric fields still win where both are set, and the tone keeps coming from the
114
- color either way — so a preview can rotate the hue without losing the brand's lightness:
115
-
116
- ```ts
117
- setPaletteConfig({ accentColor: '#2F5BFF', hue: 300 }); // hue 300, tone still #2F5BFF's
118
- ```
119
-
120
- ### A color seed is a request
121
-
122
- The palette renders the color you asked for, and moves it only as far as it has to. Two
123
- things can make it move.
124
-
125
- First, **exactness is scoped to the light, normal-contrast variant.** That is the one
126
- that reproduces your color. Dark and high contrast adapt, as every other color in the
127
- palette does — they are different pages, and a brand pinned across all four would be
128
- less faithful, not more. What holds everywhere is the floor below.
129
-
130
- **The fill has a 3:1 floor against the page.** That is WCAG's non-text floor: enough
131
- that a button reads as a shape on the surface. It is a floor and not a target — a brand
132
- already at 5:1, or 17:1, is emitted exactly as given, and one that misses moves only as
133
- far as the floor. `#FFD400` cannot clear 3:1 on a white page, so it darkens to
134
- `#b09200`; `#7A4DBF` measures 5.8:1 and is left alone.
135
-
136
- High contrast tightens it further, deliberately: there the floor goes back to AAA
137
- whatever you passed, because that tier is selected by `prefers-contrast: more` or an
138
- explicit `data-contrast="high"` — anyone reading it has asked for separation over brand.
139
-
140
- **`pastel` caps chroma.** The flat, hue-independent ceiling is what makes pastel even
141
- across hues, and it sits below where a saturated color would land, so under it a color
142
- seed can never resolve to itself: `#EF4444` renders `#c47069`. Under pastel the color
143
- contributes its hue and its tone; turn pastel off to get its chroma too.
144
-
145
- Read the result back from the tokens themselves — `#accent-surface` is the fill,
146
- `#accent-text-soft` the rest link color — or watch the requested/resolved chips in the
147
- [Theme builder](#theme-builder).
148
-
149
86
  ### One saturation scale per theme
150
87
 
151
- Saturation is _not_ split per token, deliberately: `saturation` is the theme's
152
- **seed**, and every color's own `saturation` is a 0–1 factor of it. `surface` sits
153
- at `0.12`, `border` at `0.175`, the text ramp at `0.2`, the accent family at
154
- ~`1.0`.
88
+ Saturation is _not_ split, deliberately: `saturation` is the theme's **seed**, and
89
+ every color's own `saturation` is a 0–1 factor of it. `surface` sits at `0.12`,
90
+ `border` at `0.175`, the text ramp at `0.2`, the accent family at ~`1.0`.
155
91
 
156
92
  So the palette has one saturation _scale_, and everything on it keeps its
157
93
  proportions: turning `saturation` down mutes the brand fills and the neutral tint
@@ -159,79 +95,6 @@ together, in the ratios the palette was designed around. That is the point — t
159
95
  relationship between a subtle surface tint and a saturated accent is part of the
160
96
  design, not something to tune per token.
161
97
 
162
- The one seam is the **base zone**, and it is the same seam `baseHue` opens: the
163
- chrome is the one family whose job is _not_ to look like the brand. `baseSaturation`
164
- gives it its own seed, on the same 0–100 scale, so a vivid accent over near-grey
165
- chrome — or a muted accent over visibly warm chrome — is one number rather than a
166
- choice between them:
167
-
168
- ```ts
169
- setPaletteConfig({ pastel: false, saturation: 90, baseSaturation: 3 });
170
- ```
171
-
172
- It defaults to `saturation × 0.12`, which is `surface`'s own factor, so leaving it
173
- alone reproduces the shipped palette exactly and a muted `saturation` still mutes
174
- the chrome along with everything else. **The shipped value is `12`** — a faint tint
175
- is what a neutral surface _is_ — so the interesting range is the low end. The base
176
- colors keep their proportions to one another until the highest of them (`0.475`,
177
- `surface-inverse`) hits the top of the scale, around `25`; past that they converge.
178
-
179
- Note the asymmetry with `saturation`: writing `baseSaturation` does **not** turn
180
- `pastel` off. How much hue the chrome carries says nothing about which chroma space
181
- the palette is in.
182
-
183
- ### Tinted surfaces
184
-
185
- A neutral `surface` sits at the extreme of the tone scale — pure white in light,
186
- the darkest step the dark tone window allows in dark. Chroma needs distance from
187
- the extreme to exist at all, so on a light page `surface` is white whatever
188
- `baseSaturation` asks for. The base seed reaches `surface-2`…`surface-4`, `border`,
189
- `placeholder` and the text ramp, and stops at the page itself.
190
-
191
- `surfaceMode: 'tinted'` moves the whole ramp two tones inward:
192
-
193
- ```ts
194
- setPaletteConfig({ surfaceMode: 'tinted', baseSaturation: 25 });
195
- ```
196
-
197
- Two tones is not a lightness change you would name — it is _room_. Everything below
198
- `surface` is positioned relative to it, so the ladder, the borders and the text ramp
199
- all follow, and the text's `['AA','AAA']` floors re-solve against the new background
200
- rather than drifting. The `code-*` family follows too: its mirrored `surface` exists
201
- to be the page, so it tracks both the tone and the base seed.
202
-
203
- **The tinted surfaces move with it.** A status theme's `surface` — and a runtime
204
- tint's, from `getColorTheme()` — is authored as an offset from the page's rather
205
- than as an absolute tone, and that offset is exactly the two tones `tinted` shifts
206
- by. Anchored absolutely they would land on the page's own new tone and a `note`
207
- banner would stop reading as a banner at all; anchored to the page they keep the
208
- separation the offset was chosen for, in both schemes. They also pick up a little
209
- more chroma there, being further from the extreme — so `tinted` makes a status
210
- surface easier to see, not harder.
211
-
212
- The tint stays subtle by construction. Near white the sRGB gamut has very little
213
- chroma to give, so `tinted` buys a surface that reads as warm or cool rather than
214
- one that reads as colored — which is the whole ask. For a genuinely colored panel,
215
- reach for a status theme's `surface` instead.
216
-
217
- All of which describes the `pastel: false` path. Under `pastel` there is still one seed
218
- and it is pinned to `100`, because a flat chroma ceiling is the whole mechanism and a
219
- second scale on top of it would only undo the evenness. So there are two paths:
220
-
221
- ```ts
222
- setPaletteConfig({ pastel: true }); // even across hues; saturation is 100, full stop
223
- setPaletteConfig({ saturation: 65 }); // your scale, per-hue ceiling — pastel goes off
224
- ```
225
-
226
- Note the second line does not mention `pastel`. **Setting a `saturation` turns pastel
227
- off**, because tuning a saturation is the non-pastel path by definition — so you pick a
228
- path by asking for what you want from it, not by setting a flag first.
229
-
230
- State `pastel` only to override that. It is the coarser of the two choices — a color
231
- space rather than a value on one — so it wins wherever both are set, and a saturation it
232
- shadows is ignored with a dev-mode warning. The number is **kept** rather than dropped,
233
- though: it stays in the sparse config, so turning pastel back off restores it.
234
-
235
98
  ### The `code-*` family is the exception
236
99
 
237
100
  Syntax colors are their own theme with their own seed, so neither the brand hue nor
@@ -279,20 +142,6 @@ setPaletteConfig({ hue: 235 }); // baseHue dropped — inherits again → 235
279
142
  setPaletteConfig(({ baseHue, ...config }) => config);
280
143
  ```
281
144
 
282
- The color seeds are pinned fields too, which makes the base zone three-state: unset and
283
- it follows the accent, `baseHue` and it is pinned to a number, `baseColor` and it is
284
- derived from a color. A settings UI reads the sparse config to know which of its own
285
- controls is in charge:
286
-
287
- ```ts
288
- const input = getPaletteConfigInput();
289
- const accentMode = input.accentColor !== undefined ? 'color' : 'hue';
290
- ```
291
-
292
- Swapping one form for the other counts as a change even when the numbers agree — a
293
- `hue: 45` replaced by a color that derives hue 45 resolves identically, but the UI still
294
- has to re-render to move its mode control.
295
-
296
145
  An explicit `baseHue: undefined` is equivalent to omitting it; neither is a value.
297
146
 
298
147
  `getPaletteConfig()` resolves everything, which loses that distinction — it cannot
@@ -334,94 +183,29 @@ By default contrast is a two-tier switch: normal colors plus a separate
334
183
  high-contrast set, selected by `<html data-contrast="high">` or a
335
184
  `prefers-contrast: more` preference.
336
185
 
337
- A manual `contrastLevel` adds a 0–100 slider that positions the **normal** colors,
338
- for a product that wants to offer its own contrast control. Level `0` is the
339
- shipped palette and `100` is the high-contrast one, bit for bit, so the slider
340
- interpolates between exactly what the two tiers already ship.
341
-
342
- The two **compose**; the slider does not replace the switch. The high-contrast
343
- tier stays the true high-contrast resolution at every level — identical to what
344
- `'auto'` emits — so `data-contrast="high"` and `prefers-contrast: more` keep
345
- working and escalate on top of wherever the slider has put the baseline.
346
-
347
- The one exception is level `100`: there the normal colors already _are_ the
348
- high-contrast ones, so a second tier would only duplicate them and a single
349
- light/dark set is emitted.
186
+ A manual `contrastLevel` replaces both tiers with a single 0–100 slider. Because
187
+ the level already carries the contrast preference, **no separate high-contrast
188
+ variant is emitted** — which means `data-contrast="high"` and
189
+ `prefers-contrast: more` stop having any effect while a level is set. Levels `0`
190
+ and `100` reproduce the normal and high-contrast palettes bit for bit, so the
191
+ slider is a continuous interpolation between exactly what the two tiers ship
192
+ today.
350
193
 
351
- Because level `0` reproduces `'auto'` exactly, tier included, shipping the slider
352
- and defaulting it off costs a consumer nothing.
194
+ That is a real accessibility trade-off: leave `contrastLevel` at `'auto'` unless
195
+ you are giving users their own contrast control.
353
196
 
354
197
  ## Theme builder
355
198
 
356
199
  The `Theme Builder` story puts the whole config behind controls and renders the
357
- result into a single region, with one line drawn through the middle of the page:
358
- **the left column is the theme, the two switches over the preview are the
359
- viewing conditions.** Everything on the left writes to the palette config and
360
- would ship with the product; **Light / Dark** and **Normal / High contrast**
361
- write nothing at all — the same theme renders in all four combinations, and
362
- moving between them is how you check a theme rather than how you change one.
363
-
364
- Those two switches start on whatever the surrounding page is already showing and
365
- keep following it until you press one, after which they are yours. There is no
366
- `Auto` option to press: `Auto` means "follow the OS" — a _preference_ — and the
367
- preview resolves to flat token values, which can only express one concrete
368
- variant. Following is the default behaviour rather than a third choice.
369
-
370
- On the theme side, the panel is grouped by **what a knob reaches** rather than by
371
- what it is named after: **Global** for the ones that govern both zones — `pastel`,
372
- `saturation`, `surfaceMode` and `contrastLevel` — then **Accent** and **Base** for
373
- the ones that do not. `surfaceMode` files under Global despite moving the *base*
374
- surfaces, because the status themes' tinted surfaces follow it too, and so does the
375
- mirrored surface the syntax palette solves against.
376
-
377
- Those headings are also why the field labels are bare. `Seeded by` and `Hue` appear
378
- in both zones, and the heading above them is what says which — repeating it in
379
- every label was two words of noise on every line of a narrow column.
380
-
381
- The **contrast level** needs no on/off switch: level `0` and `'auto'` are
382
- output-identical, tier included, so the slider at rest _is_ the shipped palette.
383
-
384
- Status themes are four chips on one line rather than eight sliders. Each chip is a
385
- `type="current"` `Button` colored by its own theme with a
386
- [ColorSwatch](./components/fields/ColorSwatch.md) of its accent, so the group answers
387
- the question you actually have — do these four still read as four different
388
- things — at a glance; press one to open its hue and saturation. The hue is not
389
- printed on the chip: it belongs to the slider that sets it, and carrying it there
390
- cost the whole row, since `success — 157°` is wide enough that four of them have
391
- to stack.
392
-
393
- **Reset**, **Export** and **JSON** sit at the top of the column, not the bottom.
394
- The one button you reach for when an experiment goes wrong should not be behind
395
- the controls that caused it. `Export` opens the config as a `setPaletteConfig()`
396
- call to copy; `JSON` downloads `palette.json` on the press, with no intermediate
397
- state worth a second click. Both carry the config _as written_ rather than the
398
- resolved one, so an inherited `baseHue` stays inherited instead of being frozen to
399
- whatever the accent happened to be.
400
-
401
- Every caveat on the panel is an **InfoBadge** beside the control it qualifies rather
402
- than a paragraph under it. A tuner is a dense column of controls, and prose between
403
- them pushes the next knob off the screen to explain something you need once.
404
-
405
- Each of the two zones has a **Seeded by** switch — Hue or Color, plus _Follow accent_
406
- for the base. The hue slider stays on screen in color mode, disabled, showing the hue the
407
- color derived; switching back therefore hands the slider a value it was already
408
- displaying. One rule covers every inert control on the panel: **a control is disabled
409
- exactly when the config field it writes is not the field in charge.** That is also why
410
- the saturation slider greys out under Pastel rather than disappearing — it keeps showing
411
- the pinned `100`, which _is_ the contract, and your own number comes back when you turn
412
- Pastel off.
413
-
414
- In color mode the panel shows where the color actually landed — **Accent Fill** and
415
- **Accent Text**, the two tokens the seed's tone reaches. The requested color is not
416
- repeated beside them: the field above holds it, with a swatch of its own. Under Pastel
417
- the pair visibly diverges from what you typed, which is the chroma cap made legible
418
- rather than mysterious — type a saturated hex with Pastel off, then turn Pastel on and
419
- watch the chips soften.
420
-
421
- The **preset** buttons show which one is active, and stop showing it the moment you
422
- touch a control. The setter replaces rather than merges, so a preset is either the
423
- whole config or it is not the config at all; anything else would claim a theme is
424
- still `Ocean` after you had re-seeded half of it.
200
+ result into a single region: pick **Light / Dark**, then either a contrast **mode**
201
+ (Normal / High) or a **custom** 0–100 level, and the preview shows exactly that
202
+ variant while the page around it stays as it is.
203
+
204
+ There is no `Auto` for scheme or contrast mode, on purpose. `Auto` means "follow
205
+ the OS" — a _preference_, and a flat token value cannot express one. A preview
206
+ renders one concrete variant, so it has to name which. The contrast _level_ keeps
207
+ its `Auto`, because there the choice is between the two-tier model and a hand-set
208
+ number rather than between following and not following the system.
425
209
 
426
210
  The preview deliberately shows all three surface levels with their own text ramps
427
211
  (`#surface-text`, `#surface-2-text`, `#surface-3-text`), because a theme that looks
@@ -483,10 +267,8 @@ Notes:
483
267
  - `contrastLevel` works per region, so the whole 0–100 ramp can be shown at once —
484
268
  something a document cannot do, since it is only ever at one level. Level `0`
485
269
  reproduces the normal tier and `100` the high-contrast tier exactly, in both
486
- schemes. `highContrast: true` still returns the genuine high-contrast
487
- resolution at any level below `100`, because the level moves the baseline and
488
- the tier escalates from where `'auto'` would put it; at `100` the two coincide
489
- and it returns the same colors as the normal variant.
270
+ schemes. Because a manual level leaves no separate high-contrast tier,
271
+ `highContrast: true` correctly returns the same colors as the normal variant.
490
272
  Note that tokens carrying a contrast _floor_ (most text) can sit still over part
491
273
  of the ramp — the floor is solved, not approximated, so the value only moves once
492
274
  the interpolated target does. Tokens positioned by a plain tone pair, like
@@ -568,18 +350,9 @@ therefore re-tunes nothing — a seed picked in one space lands somewhere else i
568
350
  other, and the warm statuses move most. Re-tune the seeds alongside it, in whichever
569
351
  direction you flip.
570
352
 
571
- It also owns `saturation` outright — pinned to `100`, so a number passed _explicitly
572
- alongside_ it is inert and warned about (a number passed on its own turns pastel off
573
- instead). And it caps an `accentColor` short of itself: the ceiling sits below where a
574
- saturated color lands, so `#EF4444` resolves to `#c47069`. Both are visible in the
575
- [Theme builder](#theme-builder), the first as a disabled slider and the second as the
576
- requested/resolved chips.
577
-
578
353
  **Re-seeding costs about 10 ms.** Rebuilding the eight themes and re-solving
579
354
  ~156 tokens across four scheme variants is not free, though it is inside a frame.
580
- A manual `contrastLevel` costs the same — it runs the same four passes — except
581
- at level `100`, which skips the two high-contrast ones because the normal pass
582
- already produced those values.
355
+ A manual `contrastLevel` is cheaper, since it skips both high-contrast passes.
583
356
  Setting the config to a value it already holds is free — it does not even bump
584
357
  the version. If you are driving it from a slider, let the input coalesce to
585
358
  frames (a pointer-driven `onChange` already does) rather than writing on every
@@ -16,6 +16,10 @@ The value is always a single `CalendarDate` (from `@internationalized/date`)
16
16
  The field renders a compact label for the selected period (`2026-W33`, `2026-08`,
17
17
  `2026-Q3`, `2026`). Use `formatValue` to override it.
18
18
 
19
+ In the month and quarter panels the year in the header is a button that opens a
20
+ year list, so picking a period several years away takes two clicks instead of
21
+ paging through the arrows.
22
+
19
23
  ## When to Use
20
24
 
21
25
  - Filtering or reporting by week, month, quarter, or fiscal year
@@ -28,13 +32,14 @@ The field renders a compact label for the selected period (`2026-W33`, `2026-08`
28
32
 
29
33
  ### Properties
30
34
 
35
+ - **`picker`** `'week' | 'month' | 'quarter' | 'year'` (default: `month`) — Which period is selected. The four named components set it for you; only the base `PeriodPicker` takes it directly
31
36
  - **`value`** `DateValue` — The current value (controlled), snapped to the period start
32
37
  - **`defaultValue`** `DateValue` — The default value (uncontrolled)
33
38
  - **`minValue`** `DateValue` — The earliest selectable period
34
39
  - **`maxValue`** `DateValue` — The latest selectable period
35
40
  - **`isDateUnavailable`** `(date: DateValue) => boolean` — Marks a period (by its start date) as unavailable
36
41
  - **`placeholder`** `string` — Text shown when no value is selected
37
- - **`formatValue`** `(date: DateValue, picker: PickerType) => string` — Overrides the displayed label
42
+ - **`formatValue`** `(date: DateValue, picker: PickerType, locale: string) => string` — Overrides the displayed label
38
43
  - **`size`** `'small' | 'medium' | 'large' | (string & {})` (default: `medium`) — Field size
39
44
  - **`shouldFlip`** `boolean` (default: `true`) — Whether the popover flips to fit the viewport
40
45
  - **`isOpen`** `boolean` — Whether the popover is open (controlled)
@@ -42,9 +47,8 @@ The field renders a compact label for the selected period (`2026-W33`, `2026-08`
42
47
  - **`onChange`** `(value: DateValue | null) => void` — Fired when the selected period changes
43
48
  - **`onOpenChange`** `(isOpen: boolean) => void` — Fired when the popover opens or closes
44
49
 
45
- The advanced `PeriodPicker` base component accepts the same props plus a
46
- **`picker`** `'week' | 'month' | 'quarter' | 'year'` prop; the four named
47
- components are thin wrappers that set it for you.
50
+ `WeekPicker`, `MonthPicker`, `QuarterPicker` and `YearPicker` are thin wrappers
51
+ that pin `picker`; everything else is identical.
48
52
 
49
53
  ### Base Properties
50
54
 
@@ -61,6 +65,17 @@ Supports all [Field properties](../../FieldProperties.md)
61
65
  - **`inputStyles`** — the value/label area
62
66
  - **`triggerStyles`** — the calendar trigger button
63
67
 
68
+ ### Style Properties
69
+
70
+ These properties allow direct style application without using the `styles` prop:
71
+
72
+ - **Base:** `display`, `font`, `preset`, `hide`, `whiteSpace`, `opacity`, `transition`
73
+ - **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `scrollMargin`
74
+ - **Dimension:** `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
75
+ - **Block:** `border`, `radius`, `shadow`, `outline`, `padding`, `paddingInline`, `paddingBlock`, `overflow`, `scrollbar`, `textAlign`
76
+ - **Color:** `color`, `fill`, `fade`, `image`
77
+ - **Flow:** `flow`, `place`, `placeItems`, `placeContent`, `alignItems`, `alignContent`, `justifyItems`, `justifyContent`, `align`, `justify`, `gap`, `columnGap`, `rowGap`, `gridColumns`, `gridRows`, `gridTemplate`, `gridAreas`
78
+
64
79
  ## Examples
65
80
 
66
81
  ### Month
@@ -73,3 +88,28 @@ Supports all [Field properties](../../FieldProperties.md)
73
88
 
74
89
  ### Limited range
75
90
 
91
+ Periods that fall entirely outside `minValue` / `maxValue` are disabled, and the
92
+ navigation arrows stop at the edge of the range.
93
+
94
+ ## Accessibility
95
+
96
+ ### Keyboard Navigation
97
+
98
+ - `Tab` — Moves focus to the calendar trigger
99
+ - `Enter` / `Space` — Opens the panel; focus lands on the selected period
100
+ - `Arrow keys` — Move between periods, rolling over into the neighbouring year or decade
101
+ - `PageUp` / `PageDown` — Previous / next year (or decade in the year list)
102
+ - `Home` / `End` — First / last selectable period on the page
103
+ - `Escape` — Steps back from the year list to the period list
104
+
105
+ ### Screen Reader Support
106
+
107
+ - The panel is a `grid` labelled `Months`, `Quarters` or `Years`
108
+ - The trigger is described by the field's current value, so the selection is
109
+ announced along with the button
110
+
111
+ ## Related Components
112
+
113
+ - [DatePicker](./DatePicker.md) — pick an exact day
114
+ - DateRangePicker — pick a start and end date
115
+ - [Calendar](../other/Calendar.md) — the panels these fields render
@@ -0,0 +1,189 @@
1
+ # Calendar
2
+
3
+ `Calendar` renders a month grid for picking a single date. `RangeCalendar` picks
4
+ a contiguous range, and `PeriodCalendar` picks a whole month, quarter or year.
5
+ All three are the panels behind the date fields — [DatePicker](../fields/DatePicker.md),
6
+ DateRangePicker and the
7
+ [period pickers](../fields/PeriodPicker.md) — and they are built on
8
+ React Aria's `useCalendar` / `useRangeCalendar`.
9
+
10
+ The header title is the navigation: the month and the year are buttons that open
11
+ a month list and a year list, so reaching a date two years out takes two clicks
12
+ instead of twenty-four.
13
+
14
+ ## When to Use
15
+
16
+ - Embedding a calendar directly in a page or panel rather than behind a field
17
+ - Building a custom date input that needs the same grid and states
18
+ - Otherwise, prefer the date fields — they add the text input, label, validation
19
+ and popover for you
20
+
21
+ ## Component
22
+
23
+ ---
24
+
25
+ ### Properties
26
+
27
+ #### Calendar
28
+
29
+ - **`value`** `DateValue` — The selected date (controlled)
30
+ - **`defaultValue`** `DateValue` — The initially selected date (uncontrolled)
31
+ - **`minValue`** `DateValue` — The earliest selectable date
32
+ - **`maxValue`** `DateValue` — The latest selectable date
33
+ - **`isDateUnavailable`** `(date: DateValue) => boolean` — Marks individual dates as unavailable
34
+ - **`pickerMode`** `'day' | 'week'` (default: `day`) — `week` shows a week-number column and highlights the whole week of the selected day
35
+ - **`hasMonthYearNavigation`** `boolean` (default: `true`) — Whether the header month and year are buttons that open the month and year lists
36
+ - **`selectedRange`** `{ start: DateValue; end: DateValue }` — Highlights a range that lives outside the calendar's own state (used by `DateRangeSeparatedPicker`)
37
+ - **`isDisabled`** `boolean` — Disables the whole calendar
38
+ - **`isReadOnly`** `boolean` — Allows navigation but not selection
39
+ - **`onChange`** `(value: DateValue) => void` — Fired when a date is selected
40
+
41
+ #### RangeCalendar
42
+
43
+ Accepts React Aria's `AriaRangeCalendarProps` (a `{ start, end }` value) plus
44
+ **`hasMonthYearNavigation`**.
45
+
46
+ #### PeriodCalendar
47
+
48
+ - **`picker`** `'month' | 'quarter' | 'year'` — Which period the panel selects
49
+ - **`value`** `DateValue | null` — The selected period, represented by its start date
50
+ - **`minValue`** / **`maxValue`** `DateValue | null` — Range limits; a period is disabled only when *all* of it falls outside
51
+ - **`isDateUnavailable`** `(date: DateValue) => boolean` — Called with the period's start date
52
+ - **`isDisabled`** `boolean`
53
+ - **`autoFocus`** `boolean` — Moves focus into the grid on mount
54
+ - **`onChange`** `(date: CalendarDate) => void` — Fired with the period's start date
55
+
56
+ ### Base Properties
57
+
58
+ Supports [Base properties](../../BaseProperties.md)
59
+
60
+ ### Modifiers
61
+
62
+ Day cells and period cells share one set of modifiers:
63
+
64
+ | Modifier | Type | Description |
65
+ | ------------- | --------- | ---------------------------------------------------- |
66
+ | `selected` | `boolean` | The cell is part of the current selection |
67
+ | `current` | `boolean` | The cell contains today |
68
+ | `outside` | `boolean` | The cell belongs to an adjacent month or decade |
69
+ | `rangeHover` | `boolean` | The whole row is highlighted (week mode) |
70
+ | `pressed` | `boolean` | The cell is being pressed |
71
+ | `focused` | `boolean` | The cell holds keyboard focus |
72
+ | `disabled` | `boolean` | The cell is outside `minValue` / `maxValue` |
73
+ | `unavailable` | `boolean` | `isDateUnavailable` returned `true` for the cell |
74
+
75
+ ## Examples
76
+
77
+ ### Basic Usage
78
+
79
+ ```jsx
80
+ import { parseDate } from '@internationalized/date';
81
+
82
+ <Calendar
83
+ defaultValue={parseDate('2026-08-12')}
84
+ onChange={(date) => console.log(date.toString())}
85
+ />;
86
+ ```
87
+
88
+ ### Week Selection
89
+
90
+ ```jsx
91
+ <Calendar pickerMode="week" defaultValue={parseDate('2026-08-12')} />
92
+ ```
93
+
94
+ ### Limited Range
95
+
96
+ Months and years that fall entirely outside `minValue` / `maxValue` are disabled
97
+ in the month and year lists too, and the navigation arrows stop at the edge.
98
+
99
+ ```jsx
100
+ <Calendar
101
+ defaultValue={parseDate('2026-08-12')}
102
+ minValue={parseDate('2026-08-05')}
103
+ maxValue={parseDate('2026-09-20')}
104
+ />
105
+ ```
106
+
107
+ ### Without Month/Year Navigation
108
+
109
+ ```jsx
110
+ <Calendar hasMonthYearNavigation={false} defaultValue={parseDate('2026-08-12')} />
111
+ ```
112
+
113
+ ### Range
114
+
115
+ ```jsx
116
+ <RangeCalendar
117
+ defaultValue={{
118
+ start: parseDate('2026-08-10'),
119
+ end: parseDate('2026-08-19'),
120
+ }}
121
+ />
122
+ ```
123
+
124
+ ### Period Panels
125
+
126
+ ```jsx
127
+ <PeriodCalendar
128
+ picker="month"
129
+ value={new CalendarDate(2026, 8, 1)}
130
+ onChange={(date) => console.log(date.toString())}
131
+ />
132
+ ```
133
+
134
+ ## Accessibility
135
+
136
+ ### Keyboard Navigation
137
+
138
+ Day grid (provided by React Aria):
139
+
140
+ - `Arrow keys` — Move between days
141
+ - `PageUp` / `PageDown` — Previous / next month
142
+ - `Home` / `End` — First / last day of the week
143
+ - `Enter` / `Space` — Select the focused day
144
+
145
+ Month and year lists:
146
+
147
+ - `Arrow keys` — Move between periods, rolling over into the neighbouring year or decade
148
+ - `PageUp` / `PageDown` — Previous / next year (month list) or decade (year list)
149
+ - `Home` / `End` — First / last selectable period on the page
150
+ - `Enter` / `Space` — Choose the period
151
+ - `Escape` — Step back to the previous panel without closing a surrounding popover
152
+
153
+ ### Screen Reader Support
154
+
155
+ - Each panel is a `grid`, labelled `Months` / `Quarters` / `Years`
156
+ - The visible month and year are the calendar's `heading`, and their buttons are
157
+ the controls that open the lists
158
+ - Cells expose `aria-selected`; out-of-range periods are `disabled`
159
+
160
+ ## Best Practices
161
+
162
+ 1. **Do**: bound the calendar when the domain is bounded — the month and year
163
+ lists disable everything out of range, which is far clearer than letting the
164
+ user land somewhere unselectable.
165
+
166
+ ```jsx
167
+ <Calendar minValue={today(getLocalTimeZone())} />
168
+ ```
169
+
170
+ 2. **Don't**: reach for `PeriodCalendar` to pick a day. Its value is always the
171
+ *start* of a period, never an exact date.
172
+
173
+ 3. **Accessibility**: always give a standalone calendar an `aria-label` — inside
174
+ a field the label comes from the field.
175
+
176
+ ## Suggested Improvements
177
+
178
+ - Range calendars paint every day in the range the same way; distinct start/end
179
+ caps would read better for long ranges.
180
+ - Multi-month (`visibleDuration`) layouts are not implemented; the header falls
181
+ back to a plain title when a range spans more than one month.
182
+ - `Escape` inside the day panel does not close the surrounding popover — that is
183
+ a `Dialog` behaviour, not a calendar one.
184
+
185
+ ## Related Components
186
+
187
+ - [DatePicker](../fields/DatePicker.md) — a date field with this calendar in a popover
188
+ - DateRangePicker — a range field built on `RangeCalendar`
189
+ - [PeriodPicker](../fields/PeriodPicker.md) — week / month / quarter / year fields