@sixthshift/design-system 0.2.1 → 0.4.0

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 (604) hide show
  1. package/README.md +242 -33
  2. package/dist/components/Badge/Badge.d.ts +65 -7
  3. package/dist/components/Badge/Badge.d.ts.map +1 -1
  4. package/dist/components/Badge/Badge.js +56 -46
  5. package/dist/components/Badge/Badge.js.map +1 -1
  6. package/dist/components/Badge/index.d.ts +1 -1
  7. package/dist/components/Badge/index.d.ts.map +1 -1
  8. package/dist/components/Badge/index.js +1 -1
  9. package/dist/components/Badge/index.js.map +1 -1
  10. package/dist/components/BarChart/BarChart.d.ts +20 -2
  11. package/dist/components/BarChart/BarChart.d.ts.map +1 -1
  12. package/dist/components/BarChart/BarChart.js +17 -3
  13. package/dist/components/BarChart/BarChart.js.map +1 -1
  14. package/dist/components/Button/Button.d.ts +85 -6
  15. package/dist/components/Button/Button.d.ts.map +1 -1
  16. package/dist/components/Button/Button.js +97 -106
  17. package/dist/components/Button/Button.js.map +1 -1
  18. package/dist/components/Button/index.d.ts +1 -1
  19. package/dist/components/Button/index.d.ts.map +1 -1
  20. package/dist/components/Button/index.js +1 -1
  21. package/dist/components/Button/index.js.map +1 -1
  22. package/dist/components/Calendar/Calendar.d.ts +31 -1
  23. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  24. package/dist/components/Calendar/Calendar.js +94 -225
  25. package/dist/components/Calendar/Calendar.js.map +1 -1
  26. package/dist/components/Calendar/CalendarView.d.ts +15 -0
  27. package/dist/components/Calendar/CalendarView.d.ts.map +1 -0
  28. package/dist/components/Calendar/CalendarView.js +263 -0
  29. package/dist/components/Calendar/CalendarView.js.map +1 -0
  30. package/dist/components/Calendar/calendar.types.d.ts +87 -27
  31. package/dist/components/Calendar/calendar.types.d.ts.map +1 -1
  32. package/dist/components/Calendar/calendar.types.js +10 -3
  33. package/dist/components/Calendar/calendar.types.js.map +1 -1
  34. package/dist/components/Calendar/index.d.ts +16 -2
  35. package/dist/components/Calendar/index.d.ts.map +1 -1
  36. package/dist/components/Calendar/index.js +15 -1
  37. package/dist/components/Calendar/index.js.map +1 -1
  38. package/dist/components/Card/Card.d.ts +13 -0
  39. package/dist/components/Card/Card.d.ts.map +1 -1
  40. package/dist/components/Card/Card.js +15 -2
  41. package/dist/components/Card/Card.js.map +1 -1
  42. package/dist/components/Checkbox/Checkbox.d.ts +21 -0
  43. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  44. package/dist/components/Checkbox/Checkbox.js +22 -1
  45. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  46. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +22 -0
  47. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  48. package/dist/components/CheckboxGroup/CheckboxGroup.js +22 -0
  49. package/dist/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
  50. package/dist/components/Code/Editor/Editor.js +2 -2
  51. package/dist/components/Code/Editor/Editor.js.map +1 -1
  52. package/dist/components/Code/Editor/themes.d.ts +2 -2
  53. package/dist/components/Code/Editor/themes.d.ts.map +1 -1
  54. package/dist/components/Code/Editor/themes.js +50 -32
  55. package/dist/components/Code/Editor/themes.js.map +1 -1
  56. package/dist/components/Code/ValidationStatus/ValidationStatus.d.ts.map +1 -1
  57. package/dist/components/Code/ValidationStatus/ValidationStatus.js.map +1 -1
  58. package/dist/components/DatePicker/DatePicker.d.ts +45 -2
  59. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
  60. package/dist/components/DatePicker/DatePicker.js +228 -11
  61. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  62. package/dist/components/DatePicker/DateSegments.d.ts +60 -0
  63. package/dist/components/DatePicker/DateSegments.d.ts.map +1 -0
  64. package/dist/components/DatePicker/DateSegments.js +80 -0
  65. package/dist/components/DatePicker/DateSegments.js.map +1 -0
  66. package/dist/components/DatePicker/datepicker.types.d.ts +53 -37
  67. package/dist/components/DatePicker/datepicker.types.d.ts.map +1 -1
  68. package/dist/components/DatePicker/datepicker.types.js +5 -3
  69. package/dist/components/DatePicker/datepicker.types.js.map +1 -1
  70. package/dist/components/DatePicker/index.d.ts +10 -1
  71. package/dist/components/DatePicker/index.d.ts.map +1 -1
  72. package/dist/components/DatePicker/index.js +8 -0
  73. package/dist/components/DatePicker/index.js.map +1 -1
  74. package/dist/components/DateRangePicker/DateRangePicker.d.ts +22 -3
  75. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  76. package/dist/components/DateRangePicker/DateRangePicker.js +38 -24
  77. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  78. package/dist/components/DateRangePicker/daterangepicker.types.d.ts +26 -21
  79. package/dist/components/DateRangePicker/daterangepicker.types.d.ts.map +1 -1
  80. package/dist/components/DateRangePicker/daterangepicker.types.js +6 -0
  81. package/dist/components/DateRangePicker/daterangepicker.types.js.map +1 -1
  82. package/dist/components/DateRangePicker/index.d.ts +8 -1
  83. package/dist/components/DateRangePicker/index.d.ts.map +1 -1
  84. package/dist/components/DateRangePicker/index.js +6 -0
  85. package/dist/components/DateRangePicker/index.js.map +1 -1
  86. package/dist/components/DateTimePicker/DateTimePicker.d.ts +32 -4
  87. package/dist/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
  88. package/dist/components/DateTimePicker/DateTimePicker.js +133 -42
  89. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  90. package/dist/components/DateTimePicker/DateTimeSegments.d.ts +41 -0
  91. package/dist/components/DateTimePicker/DateTimeSegments.d.ts.map +1 -0
  92. package/dist/components/DateTimePicker/DateTimeSegments.js +67 -0
  93. package/dist/components/DateTimePicker/DateTimeSegments.js.map +1 -0
  94. package/dist/components/DateTimePicker/datetimepicker.types.d.ts +26 -18
  95. package/dist/components/DateTimePicker/datetimepicker.types.d.ts.map +1 -1
  96. package/dist/components/DateTimePicker/datetimepicker.types.js +10 -0
  97. package/dist/components/DateTimePicker/datetimepicker.types.js.map +1 -1
  98. package/dist/components/DateTimePicker/index.d.ts +8 -1
  99. package/dist/components/DateTimePicker/index.d.ts.map +1 -1
  100. package/dist/components/DateTimePicker/index.js +6 -0
  101. package/dist/components/DateTimePicker/index.js.map +1 -1
  102. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts +30 -4
  103. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
  104. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js +171 -72
  105. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -1
  106. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts +28 -19
  107. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.d.ts.map +1 -1
  108. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.js +8 -0
  109. package/dist/components/DateTimeRangePicker/datetimerangepicker.types.js.map +1 -1
  110. package/dist/components/DateTimeRangePicker/index.d.ts +8 -0
  111. package/dist/components/DateTimeRangePicker/index.d.ts.map +1 -1
  112. package/dist/components/DateTimeRangePicker/index.js +7 -0
  113. package/dist/components/DateTimeRangePicker/index.js.map +1 -1
  114. package/dist/components/Field/Field.d.ts +18 -20
  115. package/dist/components/Field/Field.d.ts.map +1 -1
  116. package/dist/components/Field/Field.js +22 -5
  117. package/dist/components/Field/Field.js.map +1 -1
  118. package/dist/components/FormField/FormField.d.ts +15 -0
  119. package/dist/components/FormField/FormField.d.ts.map +1 -1
  120. package/dist/components/FormField/FormField.js +15 -0
  121. package/dist/components/FormField/FormField.js.map +1 -1
  122. package/dist/components/HoverCard/HoverCard.d.ts +6 -0
  123. package/dist/components/HoverCard/HoverCard.d.ts.map +1 -1
  124. package/dist/components/HoverCard/HoverCard.js +6 -0
  125. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  126. package/dist/components/Input/Input.d.ts +15 -0
  127. package/dist/components/Input/Input.d.ts.map +1 -1
  128. package/dist/components/Input/Input.js +18 -3
  129. package/dist/components/Input/Input.js.map +1 -1
  130. package/dist/components/LineChart/LineChart.d.ts +35 -2
  131. package/dist/components/LineChart/LineChart.d.ts.map +1 -1
  132. package/dist/components/LineChart/LineChart.js +22 -3
  133. package/dist/components/LineChart/LineChart.js.map +1 -1
  134. package/dist/components/Markdown/Markdown.d.ts +19 -4
  135. package/dist/components/Markdown/Markdown.d.ts.map +1 -1
  136. package/dist/components/Markdown/Markdown.js +20 -2
  137. package/dist/components/Markdown/Markdown.js.map +1 -1
  138. package/dist/components/Message/Message.d.ts +49 -4
  139. package/dist/components/Message/Message.d.ts.map +1 -1
  140. package/dist/components/Message/Message.js +62 -11
  141. package/dist/components/Message/Message.js.map +1 -1
  142. package/dist/components/Message/index.d.ts +1 -1
  143. package/dist/components/Message/index.d.ts.map +1 -1
  144. package/dist/components/Modal/Modal.d.ts +60 -5
  145. package/dist/components/Modal/Modal.d.ts.map +1 -1
  146. package/dist/components/Modal/Modal.js +52 -6
  147. package/dist/components/Modal/Modal.js.map +1 -1
  148. package/dist/components/Modal/components/ModalContext.d.ts +14 -0
  149. package/dist/components/Modal/components/ModalContext.d.ts.map +1 -1
  150. package/dist/components/Modal/components/ModalContext.js.map +1 -1
  151. package/dist/components/Modal/components/ModalHeader.d.ts.map +1 -1
  152. package/dist/components/Modal/components/ModalHeader.js +13 -2
  153. package/dist/components/Modal/components/ModalHeader.js.map +1 -1
  154. package/dist/components/Popover/Popover.d.ts +29 -0
  155. package/dist/components/Popover/Popover.d.ts.map +1 -1
  156. package/dist/components/Popover/Popover.js +36 -0
  157. package/dist/components/Popover/Popover.js.map +1 -1
  158. package/dist/components/Popover/components/PopoverBody.d.ts.map +1 -1
  159. package/dist/components/Popover/components/PopoverBody.js +5 -2
  160. package/dist/components/Popover/components/PopoverBody.js.map +1 -1
  161. package/dist/components/Popover/components/PopoverContext.d.ts +1 -0
  162. package/dist/components/Popover/components/PopoverContext.d.ts.map +1 -1
  163. package/dist/components/Popover/components/PopoverContext.js.map +1 -1
  164. package/dist/components/Popover/components/PopoverTrigger.d.ts.map +1 -1
  165. package/dist/components/Popover/components/PopoverTrigger.js +2 -2
  166. package/dist/components/Popover/components/PopoverTrigger.js.map +1 -1
  167. package/dist/components/ProgressBar/ProgressBar.d.ts +16 -1
  168. package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
  169. package/dist/components/ProgressBar/ProgressBar.js +19 -3
  170. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  171. package/dist/components/RadioButton/RadioButton.d.ts +26 -0
  172. package/dist/components/RadioButton/RadioButton.d.ts.map +1 -1
  173. package/dist/components/RadioButton/RadioButton.js +35 -1
  174. package/dist/components/RadioButton/RadioButton.js.map +1 -1
  175. package/dist/components/RadioButtonGroup/RadioButtonGroup.d.ts +26 -0
  176. package/dist/components/RadioButtonGroup/RadioButtonGroup.d.ts.map +1 -1
  177. package/dist/components/RadioButtonGroup/RadioButtonGroup.js +33 -0
  178. package/dist/components/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  179. package/dist/components/SearchInput/SearchInput.d.ts +10 -0
  180. package/dist/components/SearchInput/SearchInput.d.ts.map +1 -1
  181. package/dist/components/SearchInput/SearchInput.js +12 -1
  182. package/dist/components/SearchInput/SearchInput.js.map +1 -1
  183. package/dist/components/Select/Select.d.ts +10 -2
  184. package/dist/components/Select/Select.d.ts.map +1 -1
  185. package/dist/components/Select/Select.js +63 -18
  186. package/dist/components/Select/Select.js.map +1 -1
  187. package/dist/components/Select/SelectDropdown.d.ts +14 -2
  188. package/dist/components/Select/SelectDropdown.d.ts.map +1 -1
  189. package/dist/components/Select/SelectDropdown.js +20 -4
  190. package/dist/components/Select/SelectDropdown.js.map +1 -1
  191. package/dist/components/Select/SelectTrigger.d.ts +10 -3
  192. package/dist/components/Select/SelectTrigger.d.ts.map +1 -1
  193. package/dist/components/Select/SelectTrigger.js +12 -3
  194. package/dist/components/Select/SelectTrigger.js.map +1 -1
  195. package/dist/components/Select/useSelectKeyboard.d.ts +15 -1
  196. package/dist/components/Select/useSelectKeyboard.d.ts.map +1 -1
  197. package/dist/components/Select/useSelectKeyboard.js +73 -65
  198. package/dist/components/Select/useSelectKeyboard.js.map +1 -1
  199. package/dist/components/Separator/Separator.d.ts +10 -0
  200. package/dist/components/Separator/Separator.d.ts.map +1 -1
  201. package/dist/components/Separator/Separator.js +10 -0
  202. package/dist/components/Separator/Separator.js.map +1 -1
  203. package/dist/components/Sheet/Sheet.d.ts +25 -5
  204. package/dist/components/Sheet/Sheet.d.ts.map +1 -1
  205. package/dist/components/Sheet/Sheet.js +24 -6
  206. package/dist/components/Sheet/Sheet.js.map +1 -1
  207. package/dist/components/Sheet/components/SheetContext.d.ts +10 -0
  208. package/dist/components/Sheet/components/SheetContext.d.ts.map +1 -1
  209. package/dist/components/Sheet/components/SheetContext.js.map +1 -1
  210. package/dist/components/Sheet/components/SheetFooter.js +1 -1
  211. package/dist/components/Sheet/components/SheetFooter.js.map +1 -1
  212. package/dist/components/Sheet/components/SheetHeader.d.ts.map +1 -1
  213. package/dist/components/Sheet/components/SheetHeader.js +11 -2
  214. package/dist/components/Sheet/components/SheetHeader.js.map +1 -1
  215. package/dist/components/Sparkline/Sparkline.d.ts +21 -2
  216. package/dist/components/Sparkline/Sparkline.d.ts.map +1 -1
  217. package/dist/components/Sparkline/Sparkline.js +16 -3
  218. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  219. package/dist/components/Spinner/Spinner.d.ts +27 -2
  220. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  221. package/dist/components/Spinner/Spinner.js +28 -3
  222. package/dist/components/Spinner/Spinner.js.map +1 -1
  223. package/dist/components/Switch/Switch.d.ts +18 -0
  224. package/dist/components/Switch/Switch.d.ts.map +1 -1
  225. package/dist/components/Switch/Switch.js +19 -1
  226. package/dist/components/Switch/Switch.js.map +1 -1
  227. package/dist/components/Tabs/Tabs.d.ts +8 -2
  228. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  229. package/dist/components/Tabs/Tabs.js +6 -0
  230. package/dist/components/Tabs/Tabs.js.map +1 -1
  231. package/dist/components/Tabs/components/TabsList.d.ts +1 -1
  232. package/dist/components/Tabs/components/TabsList.d.ts.map +1 -1
  233. package/dist/components/Tabs/components/TabsList.js +5 -4
  234. package/dist/components/Tabs/components/TabsList.js.map +1 -1
  235. package/dist/components/Tabs/components/TabsPanels.d.ts +1 -1
  236. package/dist/components/Tabs/components/TabsPanels.d.ts.map +1 -1
  237. package/dist/components/Tabs/components/TabsPanels.js +5 -3
  238. package/dist/components/Tabs/components/TabsPanels.js.map +1 -1
  239. package/dist/components/Tabs/components/TabsTrigger.d.ts.map +1 -1
  240. package/dist/components/Tabs/components/TabsTrigger.js +22 -6
  241. package/dist/components/Tabs/components/TabsTrigger.js.map +1 -1
  242. package/dist/components/TagChip/TagChip.d.ts +16 -13
  243. package/dist/components/TagChip/TagChip.d.ts.map +1 -1
  244. package/dist/components/TagChip/TagChip.js +18 -3
  245. package/dist/components/TagChip/TagChip.js.map +1 -1
  246. package/dist/components/TagInput/TagInput.d.ts +12 -9
  247. package/dist/components/TagInput/TagInput.d.ts.map +1 -1
  248. package/dist/components/TagInput/TagInput.js +16 -4
  249. package/dist/components/TagInput/TagInput.js.map +1 -1
  250. package/dist/components/Text/Text.d.ts +9 -0
  251. package/dist/components/Text/Text.d.ts.map +1 -1
  252. package/dist/components/Text/Text.js +9 -0
  253. package/dist/components/Text/Text.js.map +1 -1
  254. package/dist/components/TextInline/TextInline.d.ts +15 -4
  255. package/dist/components/TextInline/TextInline.d.ts.map +1 -1
  256. package/dist/components/TextInline/TextInline.js +11 -0
  257. package/dist/components/TextInline/TextInline.js.map +1 -1
  258. package/dist/components/Textarea/Textarea.d.ts +12 -0
  259. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  260. package/dist/components/Textarea/Textarea.js +13 -1
  261. package/dist/components/Textarea/Textarea.js.map +1 -1
  262. package/dist/components/TimePicker/TimeColumn.d.ts +10 -1
  263. package/dist/components/TimePicker/TimeColumn.d.ts.map +1 -1
  264. package/dist/components/TimePicker/TimeColumn.js +8 -1
  265. package/dist/components/TimePicker/TimeColumn.js.map +1 -1
  266. package/dist/components/TimePicker/TimePicker.d.ts +34 -2
  267. package/dist/components/TimePicker/TimePicker.d.ts.map +1 -1
  268. package/dist/components/TimePicker/TimePicker.js +118 -15
  269. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  270. package/dist/components/TimePicker/TimeSegments.d.ts +50 -0
  271. package/dist/components/TimePicker/TimeSegments.d.ts.map +1 -0
  272. package/dist/components/TimePicker/TimeSegments.js +93 -0
  273. package/dist/components/TimePicker/TimeSegments.js.map +1 -0
  274. package/dist/components/TimePicker/timepicker.hooks.d.ts +0 -4
  275. package/dist/components/TimePicker/timepicker.hooks.d.ts.map +1 -1
  276. package/dist/components/TimePicker/timepicker.hooks.js +1 -23
  277. package/dist/components/TimePicker/timepicker.hooks.js.map +1 -1
  278. package/dist/components/TimePicker/timepicker.types.d.ts +14 -15
  279. package/dist/components/TimePicker/timepicker.types.d.ts.map +1 -1
  280. package/dist/components/TimePicker/timepicker.types.js +4 -3
  281. package/dist/components/TimePicker/timepicker.types.js.map +1 -1
  282. package/dist/components/Toast/Toast.d.ts +27 -0
  283. package/dist/components/Toast/Toast.d.ts.map +1 -1
  284. package/dist/components/Toast/Toast.js +28 -1
  285. package/dist/components/Toast/Toast.js.map +1 -1
  286. package/dist/components/Toggle/Toggle.d.ts +31 -12
  287. package/dist/components/Toggle/Toggle.d.ts.map +1 -1
  288. package/dist/components/Toggle/Toggle.js +19 -31
  289. package/dist/components/Toggle/Toggle.js.map +1 -1
  290. package/dist/components/Toggle/index.d.ts +1 -1
  291. package/dist/components/Toggle/index.d.ts.map +1 -1
  292. package/dist/components/Toggle/index.js +1 -1
  293. package/dist/components/Toggle/index.js.map +1 -1
  294. package/dist/components/ToggleGroup/ToggleGroup.d.ts +17 -0
  295. package/dist/components/ToggleGroup/ToggleGroup.d.ts.map +1 -1
  296. package/dist/components/ToggleGroup/ToggleGroup.js +17 -0
  297. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  298. package/dist/components/ToggleGroup/ToggleGroupItem.d.ts +1 -1
  299. package/dist/components/ToggleGroup/ToggleGroupItem.d.ts.map +1 -1
  300. package/dist/components/ToggleGroup/ToggleGroupItem.js +7 -6
  301. package/dist/components/ToggleGroup/ToggleGroupItem.js.map +1 -1
  302. package/dist/components/ToggleGroup/ToggleGroupMultiple.d.ts +4 -3
  303. package/dist/components/ToggleGroup/ToggleGroupMultiple.d.ts.map +1 -1
  304. package/dist/components/ToggleGroup/ToggleGroupMultiple.js +2 -2
  305. package/dist/components/ToggleGroup/ToggleGroupMultiple.js.map +1 -1
  306. package/dist/components/ToggleGroup/ToggleGroupSingle.d.ts +4 -3
  307. package/dist/components/ToggleGroup/ToggleGroupSingle.d.ts.map +1 -1
  308. package/dist/components/ToggleGroup/ToggleGroupSingle.js +2 -2
  309. package/dist/components/ToggleGroup/ToggleGroupSingle.js.map +1 -1
  310. package/dist/components/ToggleGroup/toggleGroup.types.d.ts +12 -3
  311. package/dist/components/ToggleGroup/toggleGroup.types.d.ts.map +1 -1
  312. package/dist/components/Tooltip/Tooltip.d.ts +6 -0
  313. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  314. package/dist/components/Tooltip/Tooltip.js +6 -0
  315. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  316. package/dist/date-time/index.d.ts +2 -0
  317. package/dist/date-time/index.d.ts.map +1 -1
  318. package/dist/date-time/index.js +9 -1
  319. package/dist/date-time/index.js.map +1 -1
  320. package/dist/date-time/iso.d.ts +261 -0
  321. package/dist/date-time/iso.d.ts.map +1 -0
  322. package/dist/date-time/iso.js +358 -0
  323. package/dist/date-time/iso.js.map +1 -0
  324. package/dist/date-time/now.d.ts +7 -6
  325. package/dist/date-time/now.d.ts.map +1 -1
  326. package/dist/date-time/now.js +3 -3
  327. package/dist/date-time/now.js.map +1 -1
  328. package/dist/internal/PickerField.d.ts +45 -0
  329. package/dist/internal/PickerField.d.ts.map +1 -0
  330. package/dist/internal/PickerField.js +24 -0
  331. package/dist/internal/PickerField.js.map +1 -0
  332. package/dist/internal/SegmentedField.d.ts +98 -0
  333. package/dist/internal/SegmentedField.d.ts.map +1 -0
  334. package/dist/internal/SegmentedField.js +315 -0
  335. package/dist/internal/SegmentedField.js.map +1 -0
  336. package/dist/internal/index.d.ts +2 -0
  337. package/dist/internal/index.d.ts.map +1 -1
  338. package/dist/internal/index.js +2 -0
  339. package/dist/internal/index.js.map +1 -1
  340. package/dist/theme/index.d.ts +4 -3
  341. package/dist/theme/index.d.ts.map +1 -1
  342. package/dist/theme/index.js +3 -2
  343. package/dist/theme/index.js.map +1 -1
  344. package/dist/theme/schema.d.ts +49 -33
  345. package/dist/theme/schema.d.ts.map +1 -1
  346. package/dist/theme/schema.js +30 -21
  347. package/dist/theme/schema.js.map +1 -1
  348. package/package.json +11 -59
  349. package/src/components/Badge/Badge.tsx +87 -49
  350. package/src/components/Badge/index.ts +10 -1
  351. package/src/components/BarChart/BarChart.tsx +37 -30
  352. package/src/components/Button/Button.tsx +129 -106
  353. package/src/components/Button/index.ts +10 -1
  354. package/src/components/Calendar/Calendar.tsx +104 -401
  355. package/src/components/Calendar/CalendarView.tsx +454 -0
  356. package/src/components/Calendar/calendar.types.ts +104 -29
  357. package/src/components/Calendar/index.ts +16 -17
  358. package/src/components/Card/Card.tsx +15 -2
  359. package/src/components/Checkbox/Checkbox.tsx +22 -2
  360. package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -0
  361. package/src/components/Code/Editor/Editor.tsx +2 -2
  362. package/src/components/Code/Editor/themes.ts +50 -32
  363. package/src/components/Code/ValidationStatus/ValidationStatus.tsx +6 -3
  364. package/src/components/DatePicker/DatePicker.tsx +369 -42
  365. package/src/components/DatePicker/DateSegments.tsx +125 -0
  366. package/src/components/DatePicker/datepicker.types.ts +58 -39
  367. package/src/components/DatePicker/index.ts +11 -3
  368. package/src/components/DateRangePicker/DateRangePicker.tsx +38 -24
  369. package/src/components/DateRangePicker/daterangepicker.types.ts +29 -23
  370. package/src/components/DateRangePicker/index.ts +9 -1
  371. package/src/components/DateTimePicker/DateTimePicker.tsx +189 -88
  372. package/src/components/DateTimePicker/DateTimeSegments.tsx +113 -0
  373. package/src/components/DateTimePicker/datetimepicker.types.ts +29 -19
  374. package/src/components/DateTimePicker/index.ts +9 -1
  375. package/src/components/DateTimeRangePicker/DateTimeRangePicker.tsx +251 -126
  376. package/src/components/DateTimeRangePicker/datetimerangepicker.types.ts +31 -20
  377. package/src/components/DateTimeRangePicker/index.ts +9 -0
  378. package/src/components/Field/Field.tsx +25 -26
  379. package/src/components/FormField/FormField.tsx +15 -0
  380. package/src/components/HoverCard/HoverCard.tsx +6 -0
  381. package/src/components/Input/Input.tsx +19 -4
  382. package/src/components/LineChart/LineChart.tsx +164 -141
  383. package/src/components/Markdown/Markdown.tsx +21 -3
  384. package/src/components/Message/Message.tsx +83 -17
  385. package/src/components/Message/index.ts +1 -1
  386. package/src/components/Modal/Modal.tsx +157 -86
  387. package/src/components/Modal/components/ModalContext.tsx +14 -0
  388. package/src/components/Modal/components/ModalHeader.tsx +15 -3
  389. package/src/components/Popover/Popover.tsx +36 -0
  390. package/src/components/Popover/components/PopoverBody.tsx +6 -1
  391. package/src/components/Popover/components/PopoverContext.tsx +1 -0
  392. package/src/components/Popover/components/PopoverTrigger.tsx +2 -1
  393. package/src/components/ProgressBar/ProgressBar.tsx +46 -28
  394. package/src/components/RadioButton/RadioButton.tsx +34 -3
  395. package/src/components/RadioButtonGroup/RadioButtonGroup.tsx +32 -0
  396. package/src/components/SearchInput/SearchInput.tsx +13 -2
  397. package/src/components/Select/Select.tsx +75 -19
  398. package/src/components/Select/SelectDropdown.tsx +45 -12
  399. package/src/components/Select/SelectTrigger.tsx +31 -8
  400. package/src/components/Select/useSelectKeyboard.ts +20 -10
  401. package/src/components/Separator/Separator.tsx +10 -0
  402. package/src/components/Sheet/Sheet.tsx +114 -83
  403. package/src/components/Sheet/components/SheetContext.tsx +10 -0
  404. package/src/components/Sheet/components/SheetFooter.tsx +1 -1
  405. package/src/components/Sheet/components/SheetHeader.tsx +18 -3
  406. package/src/components/Sparkline/Sparkline.tsx +40 -36
  407. package/src/components/Spinner/Spinner.tsx +28 -3
  408. package/src/components/Switch/Switch.tsx +27 -4
  409. package/src/components/Tabs/Tabs.tsx +6 -0
  410. package/src/components/Tabs/components/TabsList.tsx +5 -3
  411. package/src/components/Tabs/components/TabsPanels.tsx +5 -3
  412. package/src/components/Tabs/components/TabsTrigger.tsx +22 -5
  413. package/src/components/TagChip/TagChip.tsx +27 -18
  414. package/src/components/TagInput/TagInput.tsx +16 -11
  415. package/src/components/Text/Text.tsx +9 -0
  416. package/src/components/TextInline/TextInline.tsx +11 -0
  417. package/src/components/Textarea/Textarea.tsx +13 -1
  418. package/src/components/TimePicker/TimeColumn.tsx +24 -1
  419. package/src/components/TimePicker/TimePicker.tsx +157 -51
  420. package/src/components/TimePicker/TimeSegments.tsx +131 -0
  421. package/src/components/TimePicker/timepicker.hooks.ts +1 -24
  422. package/src/components/TimePicker/timepicker.types.ts +14 -16
  423. package/src/components/Toast/Toast.tsx +28 -1
  424. package/src/components/Toggle/Toggle.tsx +34 -32
  425. package/src/components/Toggle/index.ts +1 -1
  426. package/src/components/ToggleGroup/ToggleGroup.tsx +17 -0
  427. package/src/components/ToggleGroup/ToggleGroupItem.tsx +13 -8
  428. package/src/components/ToggleGroup/ToggleGroupMultiple.tsx +3 -1
  429. package/src/components/ToggleGroup/ToggleGroupSingle.tsx +3 -1
  430. package/src/components/ToggleGroup/toggleGroup.types.ts +12 -3
  431. package/src/components/Tooltip/Tooltip.tsx +6 -0
  432. package/src/date-time/index.ts +61 -1
  433. package/src/date-time/iso.ts +511 -0
  434. package/src/date-time/now.ts +10 -9
  435. package/src/internal/PickerField.tsx +90 -0
  436. package/src/internal/SegmentedField.tsx +445 -0
  437. package/src/internal/index.ts +2 -0
  438. package/src/theme/index.ts +11 -9
  439. package/src/theme/recipes/badge.css +140 -0
  440. package/src/theme/recipes/button.css +167 -0
  441. package/src/theme/recipes/card.css +26 -0
  442. package/src/theme/recipes/checkbox.css +44 -0
  443. package/src/theme/recipes/field.css +14 -0
  444. package/src/theme/recipes/index.css +28 -0
  445. package/src/theme/recipes/input.css +29 -0
  446. package/src/theme/recipes/message.css +47 -0
  447. package/src/theme/recipes/modal.css +31 -0
  448. package/src/theme/recipes/radio-button.css +42 -0
  449. package/src/theme/recipes/search-input.css +16 -0
  450. package/src/theme/recipes/select.css +105 -0
  451. package/src/theme/recipes/sheet.css +34 -0
  452. package/src/theme/recipes/spinner.css +17 -0
  453. package/src/theme/recipes/switch.css +39 -0
  454. package/src/theme/recipes/tabs.css +41 -0
  455. package/src/theme/recipes/tag-chip.css +27 -0
  456. package/src/theme/recipes/textarea.css +20 -0
  457. package/src/theme/recipes/toggle.css +92 -0
  458. package/src/theme/schema.ts +59 -58
  459. package/src/theme/tokens.css +824 -0
  460. package/dist/components/Avatar/Avatar.d.ts +0 -6
  461. package/dist/components/Avatar/Avatar.d.ts.map +0 -1
  462. package/dist/components/Avatar/Avatar.js +0 -11
  463. package/dist/components/Avatar/Avatar.js.map +0 -1
  464. package/dist/components/Avatar/index.d.ts +0 -2
  465. package/dist/components/Avatar/index.d.ts.map +0 -1
  466. package/dist/components/Avatar/index.js +0 -2
  467. package/dist/components/Avatar/index.js.map +0 -1
  468. package/dist/components/Breadcrumb/Breadcrumb.d.ts +0 -12
  469. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +0 -1
  470. package/dist/components/Breadcrumb/Breadcrumb.js +0 -19
  471. package/dist/components/Breadcrumb/Breadcrumb.js.map +0 -1
  472. package/dist/components/Breadcrumb/index.d.ts +0 -2
  473. package/dist/components/Breadcrumb/index.d.ts.map +0 -1
  474. package/dist/components/Breadcrumb/index.js +0 -2
  475. package/dist/components/Breadcrumb/index.js.map +0 -1
  476. package/dist/components/ColorDot/ColorDot.d.ts +0 -13
  477. package/dist/components/ColorDot/ColorDot.d.ts.map +0 -1
  478. package/dist/components/ColorDot/ColorDot.js +0 -34
  479. package/dist/components/ColorDot/ColorDot.js.map +0 -1
  480. package/dist/components/ColorDot/index.d.ts +0 -2
  481. package/dist/components/ColorDot/index.d.ts.map +0 -1
  482. package/dist/components/ColorDot/index.js +0 -2
  483. package/dist/components/ColorDot/index.js.map +0 -1
  484. package/dist/components/EmptyState/EmptyState.d.ts +0 -15
  485. package/dist/components/EmptyState/EmptyState.d.ts.map +0 -1
  486. package/dist/components/EmptyState/EmptyState.js +0 -7
  487. package/dist/components/EmptyState/EmptyState.js.map +0 -1
  488. package/dist/components/EmptyState/index.d.ts +0 -2
  489. package/dist/components/EmptyState/index.d.ts.map +0 -1
  490. package/dist/components/EmptyState/index.js +0 -2
  491. package/dist/components/EmptyState/index.js.map +0 -1
  492. package/dist/components/HeatMap/HeatMapCalendar.d.ts +0 -11
  493. package/dist/components/HeatMap/HeatMapCalendar.d.ts.map +0 -1
  494. package/dist/components/HeatMap/HeatMapCalendar.js +0 -68
  495. package/dist/components/HeatMap/HeatMapCalendar.js.map +0 -1
  496. package/dist/components/HeatMap/HeatMapMatrix.d.ts +0 -12
  497. package/dist/components/HeatMap/HeatMapMatrix.d.ts.map +0 -1
  498. package/dist/components/HeatMap/HeatMapMatrix.js +0 -35
  499. package/dist/components/HeatMap/HeatMapMatrix.js.map +0 -1
  500. package/dist/components/HeatMap/heat-map.utils.d.ts +0 -10
  501. package/dist/components/HeatMap/heat-map.utils.d.ts.map +0 -1
  502. package/dist/components/HeatMap/heat-map.utils.js +0 -10
  503. package/dist/components/HeatMap/heat-map.utils.js.map +0 -1
  504. package/dist/components/HeatMap/index.d.ts +0 -4
  505. package/dist/components/HeatMap/index.d.ts.map +0 -1
  506. package/dist/components/HeatMap/index.js +0 -3
  507. package/dist/components/HeatMap/index.js.map +0 -1
  508. package/dist/components/MetricList/MetricList.d.ts +0 -9
  509. package/dist/components/MetricList/MetricList.d.ts.map +0 -1
  510. package/dist/components/MetricList/MetricList.js +0 -6
  511. package/dist/components/MetricList/MetricList.js.map +0 -1
  512. package/dist/components/MetricList/MetricRow.d.ts +0 -13
  513. package/dist/components/MetricList/MetricRow.d.ts.map +0 -1
  514. package/dist/components/MetricList/MetricRow.js +0 -13
  515. package/dist/components/MetricList/MetricRow.js.map +0 -1
  516. package/dist/components/MetricList/index.d.ts +0 -3
  517. package/dist/components/MetricList/index.d.ts.map +0 -1
  518. package/dist/components/MetricList/index.js +0 -3
  519. package/dist/components/MetricList/index.js.map +0 -1
  520. package/dist/components/NavBottom/NavBottom.d.ts +0 -15
  521. package/dist/components/NavBottom/NavBottom.d.ts.map +0 -1
  522. package/dist/components/NavBottom/NavBottom.js +0 -19
  523. package/dist/components/NavBottom/NavBottom.js.map +0 -1
  524. package/dist/components/NavBottom/index.d.ts +0 -3
  525. package/dist/components/NavBottom/index.d.ts.map +0 -1
  526. package/dist/components/NavBottom/index.js +0 -2
  527. package/dist/components/NavBottom/index.js.map +0 -1
  528. package/dist/components/NavSide/NavItem.d.ts +0 -9
  529. package/dist/components/NavSide/NavItem.d.ts.map +0 -1
  530. package/dist/components/NavSide/NavItem.js +0 -13
  531. package/dist/components/NavSide/NavItem.js.map +0 -1
  532. package/dist/components/NavSide/NavSide.d.ts +0 -15
  533. package/dist/components/NavSide/NavSide.d.ts.map +0 -1
  534. package/dist/components/NavSide/NavSide.js +0 -10
  535. package/dist/components/NavSide/NavSide.js.map +0 -1
  536. package/dist/components/NavSide/index.d.ts +0 -3
  537. package/dist/components/NavSide/index.d.ts.map +0 -1
  538. package/dist/components/NavSide/index.js +0 -2
  539. package/dist/components/NavSide/index.js.map +0 -1
  540. package/dist/components/NavSide/types.d.ts +0 -38
  541. package/dist/components/NavSide/types.d.ts.map +0 -1
  542. package/dist/components/NavSide/types.js +0 -2
  543. package/dist/components/NavSide/types.js.map +0 -1
  544. package/dist/components/Pagination/Pagination.d.ts +0 -35
  545. package/dist/components/Pagination/Pagination.d.ts.map +0 -1
  546. package/dist/components/Pagination/Pagination.js +0 -26
  547. package/dist/components/Pagination/Pagination.js.map +0 -1
  548. package/dist/components/Pagination/index.d.ts +0 -3
  549. package/dist/components/Pagination/index.d.ts.map +0 -1
  550. package/dist/components/Pagination/index.js +0 -2
  551. package/dist/components/Pagination/index.js.map +0 -1
  552. package/dist/components/Skeleton/Skeleton.d.ts +0 -3
  553. package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
  554. package/dist/components/Skeleton/Skeleton.js +0 -7
  555. package/dist/components/Skeleton/Skeleton.js.map +0 -1
  556. package/dist/components/Skeleton/index.d.ts +0 -2
  557. package/dist/components/Skeleton/index.d.ts.map +0 -1
  558. package/dist/components/Skeleton/index.js +0 -2
  559. package/dist/components/Skeleton/index.js.map +0 -1
  560. package/dist/components/StatsCard/StatsCard.d.ts +0 -17
  561. package/dist/components/StatsCard/StatsCard.d.ts.map +0 -1
  562. package/dist/components/StatsCard/StatsCard.js +0 -13
  563. package/dist/components/StatsCard/StatsCard.js.map +0 -1
  564. package/dist/components/StatsCard/index.d.ts +0 -2
  565. package/dist/components/StatsCard/index.d.ts.map +0 -1
  566. package/dist/components/StatsCard/index.js +0 -2
  567. package/dist/components/StatsCard/index.js.map +0 -1
  568. package/dist/styles.css +0 -2
  569. package/dist/theme.generated.css +0 -438
  570. package/src/components/Avatar/Avatar.tsx +0 -19
  571. package/src/components/Avatar/index.ts +0 -1
  572. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -47
  573. package/src/components/Breadcrumb/index.ts +0 -5
  574. package/src/components/ColorDot/ColorDot.tsx +0 -50
  575. package/src/components/ColorDot/index.ts +0 -1
  576. package/src/components/EmptyState/EmptyState.tsx +0 -29
  577. package/src/components/EmptyState/index.ts +0 -1
  578. package/src/components/HeatMap/HeatMapCalendar.tsx +0 -127
  579. package/src/components/HeatMap/HeatMapMatrix.tsx +0 -75
  580. package/src/components/HeatMap/heat-map.utils.ts +0 -15
  581. package/src/components/HeatMap/index.ts +0 -3
  582. package/src/components/MetricList/MetricList.tsx +0 -13
  583. package/src/components/MetricList/MetricRow.tsx +0 -30
  584. package/src/components/MetricList/index.ts +0 -2
  585. package/src/components/NavBottom/NavBottom.tsx +0 -53
  586. package/src/components/NavBottom/index.ts +0 -3
  587. package/src/components/NavSide/NavItem.tsx +0 -39
  588. package/src/components/NavSide/NavSide.tsx +0 -40
  589. package/src/components/NavSide/index.ts +0 -2
  590. package/src/components/NavSide/types.ts +0 -36
  591. package/src/components/Pagination/Pagination.tsx +0 -86
  592. package/src/components/Pagination/index.ts +0 -2
  593. package/src/components/Skeleton/Skeleton.tsx +0 -7
  594. package/src/components/Skeleton/index.ts +0 -1
  595. package/src/components/StatsCard/StatsCard.tsx +0 -40
  596. package/src/components/StatsCard/index.ts +0 -1
  597. package/src/styles/base.css +0 -41
  598. package/src/theme/palette.json +0 -100
  599. package/src/theme/palette.schema.json +0 -40
  600. package/src/theme/theme.json +0 -349
  601. package/src/theme/theme.schema.json +0 -876
  602. package/src/theme/typography.json +0 -7
  603. package/src/theme/typography.schema.json +0 -36
  604. package/tailwind.config.ts +0 -261
@@ -0,0 +1,454 @@
1
+ /**
2
+ * CalendarView — the Temporal-typed calendar grid.
3
+ *
4
+ * Internal. Not reachable through the package's `exports` map: `./calendar`
5
+ * resolves to this directory's `index.ts`, which deliberately does not re-export
6
+ * it. Every picker composes this directly so that values cross the ISO boundary
7
+ * exactly once, at the picker's own edge, rather than being serialised and
8
+ * re-parsed on the way down to the grid.
9
+ *
10
+ * The public, ISO-typed `Calendar` is a thin wrapper in ./Calendar.tsx.
11
+ */
12
+
13
+ import { cn } from "@sixthshift/design-system/utils";
14
+ import { ChevronLeft, ChevronRight } from "lucide-react";
15
+ import * as React from "react";
16
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
17
+ import {
18
+ addDays,
19
+ addMonths,
20
+ endOfWeek,
21
+ formatMonthYear,
22
+ isPlainDate,
23
+ isSameMonth,
24
+ parseDate,
25
+ startOfMonth,
26
+ startOfWeek,
27
+ type Temporal,
28
+ today,
29
+ } from "../../date-time";
30
+ import { Button } from "../Button";
31
+ import { Separator } from "../Separator";
32
+ import {
33
+ defaultFormatDisplay,
34
+ getDateSelectionState,
35
+ isBeforeTemporal,
36
+ isDateDisabled,
37
+ isSameDateTemporal,
38
+ temporalToISO,
39
+ useCalendarDays,
40
+ } from "./calendar.hooks";
41
+ import type { CalendarViewProps, DateRangeValue, DisabledDateMatcher, PresetOption, RangePosition } from "./calendar.types";
42
+
43
+ const DAY_LABELS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"] as const;
44
+
45
+ function getDayLabels(weekStartsOn: number): string[] {
46
+ return [...DAY_LABELS.slice(weekStartsOn), ...DAY_LABELS.slice(0, weekStartsOn)];
47
+ }
48
+
49
+ function getRangePositionClasses(rangePosition: RangePosition, isSelected: boolean): string {
50
+ if (!isSelected) return "";
51
+
52
+ switch (rangePosition) {
53
+ case "start":
54
+ return "rounded-l-full rounded-r-none bg-bg-brand text-fg-on-brand";
55
+ case "end":
56
+ return "rounded-r-full rounded-l-none bg-bg-brand text-fg-on-brand";
57
+ case "middle":
58
+ return "rounded-none bg-bg-brand-subtle text-fg-normal";
59
+ case "single":
60
+ return "bg-bg-brand text-fg-on-brand";
61
+ default:
62
+ return "";
63
+ }
64
+ }
65
+
66
+ export const CalendarView = React.forwardRef<HTMLDivElement, CalendarViewProps>((props, ref) => {
67
+ const {
68
+ mode,
69
+ month,
70
+ onMonthChange,
71
+ minDate,
72
+ maxDate,
73
+ disabled,
74
+ weekStartsOn = 0,
75
+ autoFocusDay = false,
76
+ showFooter = false,
77
+ showToday = true,
78
+ onApply,
79
+ onCancel,
80
+ className,
81
+ } = props;
82
+
83
+ // Get mode-specific props
84
+ const value = "value" in props ? props.value : undefined;
85
+ const onSelect = "onSelect" in props ? props.onSelect : undefined;
86
+ const presets = "presets" in props ? props.presets : undefined;
87
+ const max = mode === "multiple" && "max" in props ? props.max : undefined;
88
+
89
+ // Selection handler
90
+ const handleSelect = useCallback(
91
+ (temporalDate: Temporal.PlainDate) => {
92
+ if (!onSelect) return;
93
+
94
+ if (mode === "single") {
95
+ const currentValue = value as Temporal.PlainDate | undefined;
96
+ if (currentValue && isSameDateTemporal(temporalDate, currentValue)) {
97
+ (onSelect as (date: Temporal.PlainDate | undefined) => void)(undefined);
98
+ } else {
99
+ (onSelect as (date: Temporal.PlainDate | undefined) => void)(temporalDate);
100
+ }
101
+ return;
102
+ }
103
+
104
+ if (mode === "multiple") {
105
+ const currentValue = (value as Temporal.PlainDate[]) || [];
106
+ const existingIndex = currentValue.findIndex((d) => isSameDateTemporal(temporalDate, d));
107
+
108
+ if (existingIndex >= 0) {
109
+ (onSelect as (dates: Temporal.PlainDate[]) => void)(currentValue.filter((_, i) => i !== existingIndex));
110
+ } else if (!max || currentValue.length < max) {
111
+ (onSelect as (dates: Temporal.PlainDate[]) => void)([...currentValue, temporalDate]);
112
+ }
113
+ return;
114
+ }
115
+
116
+ // Range mode
117
+ const currentRange = (value as DateRangeValue) || {
118
+ from: undefined,
119
+ to: undefined,
120
+ };
121
+
122
+ if (!currentRange.from) {
123
+ (onSelect as (range: DateRangeValue | undefined) => void)({ from: temporalDate, to: undefined });
124
+ return;
125
+ }
126
+
127
+ if (!currentRange.to) {
128
+ if (isBeforeTemporal(temporalDate, currentRange.from)) {
129
+ (onSelect as (range: DateRangeValue | undefined) => void)({ from: temporalDate, to: currentRange.from });
130
+ } else {
131
+ (onSelect as (range: DateRangeValue | undefined) => void)({ from: currentRange.from, to: temporalDate });
132
+ }
133
+ return;
134
+ }
135
+
136
+ (onSelect as (range: DateRangeValue | undefined) => void)({ from: temporalDate, to: undefined });
137
+ },
138
+ [mode, value, onSelect, max]
139
+ );
140
+
141
+ // Today button
142
+ const handleToday = useCallback(() => {
143
+ if (!onSelect) return;
144
+
145
+ const todayDate = today();
146
+ if (mode === "single") {
147
+ (onSelect as (date: Temporal.PlainDate | undefined) => void)(todayDate);
148
+ } else if (mode === "multiple") {
149
+ const current = (value as Temporal.PlainDate[]) || [];
150
+ if (!current.some((d) => isSameDateTemporal(d, todayDate))) {
151
+ if (!max || current.length < max) {
152
+ (onSelect as (dates: Temporal.PlainDate[]) => void)([...current, todayDate]);
153
+ }
154
+ }
155
+ }
156
+ onMonthChange(todayDate);
157
+ }, [mode, value, onSelect, max, onMonthChange]);
158
+
159
+ // Preset selection
160
+ const handlePresetClick = useCallback(
161
+ (preset: PresetOption<unknown>) => {
162
+ if (!onSelect) return;
163
+
164
+ if (mode === "single" && isPlainDate(preset.value)) {
165
+ (onSelect as (date: Temporal.PlainDate | undefined) => void)(preset.value);
166
+ } else if (mode === "range" && typeof preset.value === "object" && preset.value !== null && "from" in preset.value) {
167
+ (onSelect as (range: DateRangeValue | undefined) => void)(preset.value as DateRangeValue);
168
+ } else if (mode === "multiple" && Array.isArray(preset.value)) {
169
+ (onSelect as (dates: Temporal.PlainDate[]) => void)(preset.value as Temporal.PlainDate[]);
170
+ }
171
+ },
172
+ [mode, onSelect]
173
+ );
174
+
175
+ // Calendar navigation
176
+ const handlePrevMonth = () => onMonthChange(addMonths(month, -1));
177
+ const handleNextMonth = () => onMonthChange(addMonths(month, 1));
178
+
179
+ const days = useCalendarDays(month, weekStartsOn as 0 | 1 | 2 | 3 | 4 | 5 | 6);
180
+ const dayLabels = getDayLabels(weekStartsOn);
181
+
182
+ const handleDayClick = (date: Temporal.PlainDate) => {
183
+ if (!isDateDisabled(date, disabled, minDate, maxDate)) {
184
+ handleSelect(date);
185
+ }
186
+ };
187
+
188
+ // ---------------------------------------------------------------------------
189
+ // Roving focus
190
+ //
191
+ // A grid is a single tab stop: exactly one cell carries tabIndex={0} and the
192
+ // arrow keys move between cells. `focusedDate` is null until the user actually
193
+ // navigates, so we never steal focus on mount.
194
+ // ---------------------------------------------------------------------------
195
+ const [focusedDate, setFocusedDate] = useState<Temporal.PlainDate | null>(null);
196
+ const gridRef = useRef<HTMLTableElement>(null);
197
+
198
+ const firstSelected = useMemo((): Temporal.PlainDate | undefined => {
199
+ if (mode === "single") return isPlainDate(value) ? value : undefined;
200
+ if (mode === "multiple") return (value as Temporal.PlainDate[] | undefined)?.[0];
201
+ return (value as DateRangeValue | undefined)?.from;
202
+ }, [mode, value]);
203
+
204
+ const activeDate = useMemo(() => {
205
+ const isUsable = (date: Temporal.PlainDate) =>
206
+ isSameMonth(date, month) && !isDateDisabled(date, disabled as DisabledDateMatcher | DisabledDateMatcher[] | undefined, minDate, maxDate);
207
+
208
+ // Prefer where the user last was, then their selection, then today.
209
+ for (const candidate of [focusedDate, firstSelected, today()]) {
210
+ if (candidate && isUsable(candidate)) return candidate;
211
+ }
212
+ // Otherwise the first day of the month that can actually take focus, so the
213
+ // grid never ends up with zero tab stops.
214
+ const first = startOfMonth(month);
215
+ for (let i = 0; i < first.daysInMonth; i++) {
216
+ const candidate = addDays(first, i);
217
+ if (isUsable(candidate)) return candidate;
218
+ }
219
+ return first;
220
+ }, [focusedDate, firstSelected, month, disabled, minDate, maxDate]);
221
+
222
+ const moveFocus = useCallback(
223
+ (next: Temporal.PlainDate) => {
224
+ setFocusedDate(next);
225
+ if (!isSameMonth(next, month)) onMonthChange(next);
226
+ },
227
+ [month, onMonthChange]
228
+ );
229
+
230
+ const handleGridKeyDown = useCallback(
231
+ (event: React.KeyboardEvent<HTMLTableElement>) => {
232
+ // Navigate from the cell that actually has focus, not from the derived
233
+ // tab stop — otherwise focusing a day without selecting it would make the
234
+ // arrow keys jump back to today.
235
+ const focusedIso = (event.target as HTMLElement | null)?.closest?.("[data-date]")?.getAttribute("data-date");
236
+ const origin = focusedIso ? parseDate(focusedIso) : activeDate;
237
+
238
+ const dayStep: Record<string, number> = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };
239
+ const step = dayStep[event.key];
240
+
241
+ if (step !== undefined) {
242
+ event.preventDefault();
243
+ moveFocus(addDays(origin, step));
244
+ return;
245
+ }
246
+
247
+ switch (event.key) {
248
+ case "Home":
249
+ event.preventDefault();
250
+ moveFocus(startOfWeek(origin, weekStartsOn));
251
+ break;
252
+ case "End":
253
+ event.preventDefault();
254
+ moveFocus(endOfWeek(origin, weekStartsOn));
255
+ break;
256
+ case "PageUp":
257
+ event.preventDefault();
258
+ moveFocus(addMonths(origin, -1));
259
+ break;
260
+ case "PageDown":
261
+ event.preventDefault();
262
+ moveFocus(addMonths(origin, 1));
263
+ break;
264
+ default:
265
+ break;
266
+ }
267
+ },
268
+ [activeDate, moveFocus, weekStartsOn]
269
+ );
270
+
271
+ // Follow the roving tabIndex with real DOM focus, but only once the user has
272
+ // started navigating.
273
+ useEffect(() => {
274
+ if (!focusedDate) return;
275
+ gridRef.current?.querySelector<HTMLButtonElement>(`[data-date="${temporalToISO(focusedDate)}"]`)?.focus();
276
+ }, [focusedDate]);
277
+
278
+ // Seed that focus once when the caller asked for it. Deliberately keyed on
279
+ // `autoFocusDay` alone: `activeDate` changes as the user navigates, and
280
+ // re-running then would drag focus back to where it started.
281
+ // biome-ignore lint/correctness/useExhaustiveDependencies: see above
282
+ useEffect(() => {
283
+ if (autoFocusDay) setFocusedDate((current) => current ?? activeDate);
284
+ }, [autoFocusDay]);
285
+
286
+ // useCalendarDays always returns 42 days, so this is always 6 rows of 7.
287
+ const weeks = useMemo(() => {
288
+ const chunked: (typeof days)[] = [];
289
+ for (let i = 0; i < days.length; i += 7) chunked.push(days.slice(i, i + 7));
290
+ return chunked;
291
+ }, [days]);
292
+
293
+ // Check if a preset is currently active
294
+ const isPresetActive = useCallback(
295
+ (preset: PresetOption<unknown>): boolean => {
296
+ if (mode === "single" && isPlainDate(preset.value)) {
297
+ return isPlainDate(value) && isSameDateTemporal(value, preset.value);
298
+ }
299
+ if (mode === "range" && typeof preset.value === "object" && preset.value !== null && "from" in preset.value) {
300
+ const draft = value as DateRangeValue | undefined;
301
+ const presetVal = preset.value as DateRangeValue;
302
+ const fromMatch = (!draft?.from && !presetVal.from) || (draft?.from && presetVal.from && isSameDateTemporal(draft.from, presetVal.from));
303
+ const toMatch = (!draft?.to && !presetVal.to) || (draft?.to && presetVal.to && isSameDateTemporal(draft.to, presetVal.to));
304
+ return Boolean(fromMatch && toMatch);
305
+ }
306
+ if (mode === "multiple" && Array.isArray(preset.value)) {
307
+ const draft = (value as Temporal.PlainDate[]) || [];
308
+ const presetVal = preset.value as Temporal.PlainDate[];
309
+ return draft.length === presetVal.length && draft.every((d) => presetVal.some((p) => isSameDateTemporal(d, p)));
310
+ }
311
+ return false;
312
+ },
313
+ [mode, value]
314
+ );
315
+
316
+ return (
317
+ <div ref={ref} className={cn("flex", className)}>
318
+ {/* Presets Sidebar */}
319
+ {presets && presets.length > 0 && (
320
+ <div className="mr-3 flex flex-col gap-1 border-border-normal border-r pr-3">
321
+ {presets.map((preset) => (
322
+ <button
323
+ key={preset.label}
324
+ type="button"
325
+ onClick={() => handlePresetClick(preset)}
326
+ className={cn(
327
+ `rounded-md px-3 py-1.5 text-left text-sm transition-colors`,
328
+ `hover:bg-bg-subtle focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset`,
329
+ isPresetActive(preset) && "bg-bg-brand-subtle text-fg-brand"
330
+ )}
331
+ >
332
+ {preset.label}
333
+ </button>
334
+ ))}
335
+ </div>
336
+ )}
337
+
338
+ {/* Calendar */}
339
+ <div className="flex flex-col gap-3">
340
+ {/* Header with navigation */}
341
+ <div className="flex items-center justify-between">
342
+ <button
343
+ type="button"
344
+ onClick={handlePrevMonth}
345
+ className="rounded-lg p-2 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring"
346
+ aria-label="Previous month"
347
+ >
348
+ <ChevronLeft className="h-5 w-5" />
349
+ </button>
350
+
351
+ <span className="font-semibold text-sm">{formatMonthYear(month)}</span>
352
+
353
+ <button
354
+ type="button"
355
+ onClick={handleNextMonth}
356
+ className="rounded-lg p-2 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring"
357
+ aria-label="Next month"
358
+ >
359
+ <ChevronRight className="h-5 w-5" />
360
+ </button>
361
+ </div>
362
+
363
+ {/* Day grid — the ARIA grid pattern on real table semantics, so <tr>/<th>/<td>
364
+ supply row/columnheader/gridcell roles implicitly. One tab stop, arrow-key
365
+ navigation, and aria-selected on the cell (where it is valid) rather than
366
+ on the button (where it is not). */}
367
+ {/* biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: the ARIA grid
368
+ pattern is defined on <table>; a date picker is an interactive composite widget,
369
+ not a static table. Unlike the suppression this replaced, nothing here is being
370
+ hidden — the axe checks in the story tests verify the resulting ARIA for real. */}
371
+ <table ref={gridRef} role="grid" aria-label={formatMonthYear(month)} className="border-separate border-spacing-1" onKeyDown={handleGridKeyDown}>
372
+ <thead>
373
+ <tr>
374
+ {dayLabels.map((label) => (
375
+ <th key={label} scope="col" className="h-10 w-10 font-medium text-fg-subtle text-sm">
376
+ {label}
377
+ </th>
378
+ ))}
379
+ </tr>
380
+ </thead>
381
+ <tbody>
382
+ {weeks.map((week) => (
383
+ <tr key={temporalToISO(week[0]!.date)}>
384
+ {week.map((day) => {
385
+ const isDisabledDay = isDateDisabled(day.date, disabled as DisabledDateMatcher | DisabledDateMatcher[] | undefined, minDate, maxDate);
386
+ const selectionState = getDateSelectionState(day.date, mode, value);
387
+
388
+ if (!day.isCurrentMonth) {
389
+ return <td key={temporalToISO(day.date)} className="h-10 w-10" />;
390
+ }
391
+
392
+ return (
393
+ // Biome resolves <td> to role "cell" because it does not track the
394
+ // ancestor role="grid", under which a <td> is a gridcell and
395
+ // aria-selected is valid. axe, which does track it, passes.
396
+ // biome-ignore lint/a11y/useAriaPropsSupportedByRole: <td> in a grid is a gridcell
397
+ <td key={temporalToISO(day.date)} aria-selected={selectionState.isSelected} className="p-0">
398
+ <button
399
+ type="button"
400
+ data-date={temporalToISO(day.date)}
401
+ onClick={() => handleDayClick(day.date)}
402
+ disabled={isDisabledDay}
403
+ tabIndex={isSameDateTemporal(day.date, activeDate) ? 0 : -1}
404
+ className={cn(
405
+ `flex h-10 w-10 cursor-pointer items-center justify-center rounded-full text-sm transition-colors`,
406
+ `hover:bg-bg-brand-strong hover:text-fg-on-brand-strong focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-inset`,
407
+ day.isToday && !selectionState.isSelected && "font-medium ring-1 ring-border-normal ring-inset",
408
+ isDisabledDay && "cursor-not-allowed opacity-50",
409
+ getRangePositionClasses(selectionState.rangePosition, selectionState.isSelected)
410
+ )}
411
+ aria-label={defaultFormatDisplay(day.date)}
412
+ >
413
+ {day.date.day}
414
+ </button>
415
+ </td>
416
+ );
417
+ })}
418
+ </tr>
419
+ ))}
420
+ </tbody>
421
+ </table>
422
+
423
+ {/* Footer */}
424
+ {showFooter && (
425
+ <>
426
+ <Separator />
427
+ <div className="flex items-center justify-between">
428
+ <div>
429
+ {showToday && mode !== "range" && (
430
+ <Button type="button" variant="ghost" size="sm" onClick={handleToday}>
431
+ Today
432
+ </Button>
433
+ )}
434
+ </div>
435
+ <div className="flex gap-2">
436
+ {onCancel && (
437
+ <Button type="button" variant="ghost" size="sm" onClick={onCancel}>
438
+ Cancel
439
+ </Button>
440
+ )}
441
+ {onApply && (
442
+ <Button type="button" variant="solid" intent="brand" size="sm" onClick={onApply}>
443
+ Apply
444
+ </Button>
445
+ )}
446
+ </div>
447
+ </div>
448
+ </>
449
+ )}
450
+ </div>
451
+ </div>
452
+ );
453
+ });
454
+ CalendarView.displayName = "CalendarView";
@@ -1,36 +1,24 @@
1
1
  /**
2
- * Calendar types for the generic date picker calendar component
2
+ * Calendar types.
3
3
  *
4
- * This component is used by DatePicker, DateTimePicker, and DateTimeRangePicker
5
- * for consistent date selection UI.
4
+ * Two layers live here, and the distinction is the whole point:
5
+ *
6
+ * - **Public (`Calendar*`)** — ISO strings. This is what a consumer writes, and
7
+ * what `@sixthshift/design-system/calendar` exports.
8
+ * - **Internal (`CalendarView*`)** — Temporal objects. This is what the grid and
9
+ * `calendar.hooks` work in, and what every picker composes directly.
10
+ *
11
+ * The `CalendarView*` types are not exported from `./index.ts`, so they are
12
+ * unreachable through the package's `exports` map.
6
13
  */
7
14
 
8
- import type { Temporal, WeekStartsOn } from "../../date-time";
9
-
10
- /**
11
- * Date range value
12
- */
13
- export type DateRangeValue = {
14
- from: Temporal.PlainDate | undefined;
15
- to: Temporal.PlainDate | undefined;
16
- };
15
+ import type { DisabledDates, ISODate, ISODateRange, Temporal, TemporalDisabledMatcher, WeekStartsOn } from "../../date-time";
17
16
 
18
17
  /**
19
18
  * Selection mode
20
19
  */
21
20
  export type SelectionMode = "single" | "range" | "multiple";
22
21
 
23
- /**
24
- * Disabled date matchers
25
- */
26
- export type DisabledDateMatcher =
27
- | Temporal.PlainDate
28
- | Temporal.PlainDate[]
29
- | ((date: Temporal.PlainDate) => boolean)
30
- | { before: Temporal.PlainDate }
31
- | { after: Temporal.PlainDate }
32
- | { from: Temporal.PlainDate; to: Temporal.PlainDate };
33
-
34
22
  /**
35
23
  * Preset option (generic over value type)
36
24
  */
@@ -40,10 +28,87 @@ export type PresetOption<T> = {
40
28
  };
41
29
 
42
30
  // ============================================================================
43
- // Discriminated Union Props
31
+ // Public props — ISO strings
44
32
  // ============================================================================
45
33
 
46
34
  type CalendarBaseProps = {
35
+ /** Month being displayed. Any date within the month; the day is ignored. */
36
+ month: ISODate;
37
+ /** Called when the displayed month should change. */
38
+ onMonthChange: (month: ISODate) => void;
39
+
40
+ /** Earliest selectable date, inclusive. */
41
+ minDate?: ISODate | undefined;
42
+ /** Latest selectable date, inclusive. */
43
+ maxDate?: ISODate | undefined;
44
+ /** Which dates to refuse. See {@link DisabledDates}. */
45
+ disabled?: DisabledDates | DisabledDates[] | undefined;
46
+
47
+ /** First day of week (0 = Sunday, 1 = Monday) */
48
+ weekStartsOn?: WeekStartsOn | undefined;
49
+
50
+ /** Show footer with Today/Cancel/Apply buttons */
51
+ showFooter?: boolean | undefined;
52
+ /** Show Today button (only if showFooter=true) */
53
+ showToday?: boolean | undefined;
54
+ /** Called when Apply is clicked */
55
+ onApply?: (() => void) | undefined;
56
+ /** Called when Cancel is clicked */
57
+ onCancel?: (() => void) | undefined;
58
+
59
+ /** Additional CSS class */
60
+ className?: string | undefined;
61
+ };
62
+
63
+ export type CalendarSingleProps = CalendarBaseProps & {
64
+ mode: "single";
65
+ value: ISODate | undefined;
66
+ onSelect: (date: ISODate | undefined) => void;
67
+ presets?: PresetOption<ISODate>[] | undefined;
68
+ };
69
+
70
+ export type CalendarRangeProps = CalendarBaseProps & {
71
+ mode: "range";
72
+ value: ISODateRange | undefined;
73
+ onSelect: (range: ISODateRange | undefined) => void;
74
+ presets?: PresetOption<ISODateRange>[] | undefined;
75
+ };
76
+
77
+ export type CalendarMultipleProps = CalendarBaseProps & {
78
+ mode: "multiple";
79
+ value: ISODate[];
80
+ onSelect: (dates: ISODate[]) => void;
81
+ max?: number | undefined;
82
+ presets?: PresetOption<ISODate[]>[] | undefined;
83
+ };
84
+
85
+ /**
86
+ * Calendar props — discriminated union based on mode
87
+ */
88
+ export type CalendarProps = CalendarSingleProps | CalendarRangeProps | CalendarMultipleProps;
89
+
90
+ // ============================================================================
91
+ // Internal props — Temporal
92
+ // ============================================================================
93
+
94
+ /**
95
+ * Date range value in Temporal terms.
96
+ *
97
+ * The public equivalent is `ISODateRange` from `../../date-time`.
98
+ */
99
+ export type DateRangeValue = {
100
+ from: Temporal.PlainDate | undefined;
101
+ to: Temporal.PlainDate | undefined;
102
+ };
103
+
104
+ /**
105
+ * Disabled date matchers, Temporal-shaped.
106
+ *
107
+ * Produced from the public {@link DisabledDates} by `adaptDisabledDates`.
108
+ */
109
+ export type DisabledDateMatcher = TemporalDisabledMatcher;
110
+
111
+ type CalendarViewBaseProps = {
47
112
  /** Current month being displayed */
48
113
  month: Temporal.PlainDate;
49
114
  /** Called when month should change */
@@ -59,6 +124,16 @@ type CalendarBaseProps = {
59
124
  /** First day of week (0 = Sunday, 1 = Monday) */
60
125
  weekStartsOn?: WeekStartsOn | undefined;
61
126
 
127
+ /**
128
+ * Move DOM focus into the day grid on mount.
129
+ *
130
+ * Off by default: a grid that grabs focus when it appears is wrong for a
131
+ * pointer user who clicked a trigger. `DatePicker` turns it on only when the
132
+ * popover was opened from the keyboard (`Alt+ArrowDown`), where the whole
133
+ * point of opening it was to navigate days.
134
+ */
135
+ autoFocusDay?: boolean | undefined;
136
+
62
137
  /** Show footer with Today/Cancel/Apply buttons */
63
138
  showFooter?: boolean | undefined;
64
139
  /** Show Today button (only if showFooter=true) */
@@ -72,21 +147,21 @@ type CalendarBaseProps = {
72
147
  className?: string | undefined;
73
148
  };
74
149
 
75
- export type CalendarSingleProps = CalendarBaseProps & {
150
+ export type CalendarViewSingleProps = CalendarViewBaseProps & {
76
151
  mode: "single";
77
152
  value: Temporal.PlainDate | undefined;
78
153
  onSelect: (date: Temporal.PlainDate | undefined) => void;
79
154
  presets?: PresetOption<Temporal.PlainDate>[] | undefined;
80
155
  };
81
156
 
82
- export type CalendarRangeProps = CalendarBaseProps & {
157
+ export type CalendarViewRangeProps = CalendarViewBaseProps & {
83
158
  mode: "range";
84
159
  value: DateRangeValue | undefined;
85
160
  onSelect: (range: DateRangeValue | undefined) => void;
86
161
  presets?: PresetOption<DateRangeValue>[] | undefined;
87
162
  };
88
163
 
89
- export type CalendarMultipleProps = CalendarBaseProps & {
164
+ export type CalendarViewMultipleProps = CalendarViewBaseProps & {
90
165
  mode: "multiple";
91
166
  value: Temporal.PlainDate[];
92
167
  onSelect: (dates: Temporal.PlainDate[]) => void;
@@ -95,9 +170,9 @@ export type CalendarMultipleProps = CalendarBaseProps & {
95
170
  };
96
171
 
97
172
  /**
98
- * Calendar props - discriminated union based on mode
173
+ * CalendarView props — discriminated union based on mode
99
174
  */
100
- export type CalendarProps = CalendarSingleProps | CalendarRangeProps | CalendarMultipleProps;
175
+ export type CalendarViewProps = CalendarViewSingleProps | CalendarViewRangeProps | CalendarViewMultipleProps;
101
176
 
102
177
  // ============================================================================
103
178
  // Internal Types
@@ -1,27 +1,26 @@
1
+ /**
2
+ * Public surface of `@sixthshift/design-system/calendar`.
3
+ *
4
+ * `CalendarView`, the `CalendarView*` prop types, and everything in
5
+ * `calendar.hooks` are intentionally absent. The `exports` map resolves
6
+ * `./calendar` to this file, so anything not re-exported here cannot be imported
7
+ * by a consumer — which is what keeps Temporal out of the package's public API.
8
+ *
9
+ * Those helpers were previously re-exported from here, which leaked
10
+ * `Temporal.PlainDate` into the public API through their signatures. Pickers
11
+ * inside this package import `./CalendarView` and `./calendar.hooks` directly.
12
+ * Consumers who want date arithmetic use
13
+ * `@sixthshift/design-system/date-time`, whose ISO-native helpers cover the
14
+ * cases these were reachable for.
15
+ */
16
+
1
17
  export { Calendar } from "./Calendar";
2
- export {
3
- defaultFormatDisplay,
4
- formatMultipleDisplay,
5
- formatRangeDisplay,
6
- getDateSelectionState,
7
- getDisplayValue,
8
- isAfterTemporal,
9
- isBeforeTemporal,
10
- isBetweenTemporal,
11
- isDateDisabled,
12
- isSameDateTemporal,
13
- temporalToISO,
14
- useIsDateDisabled,
15
- useSelectionState,
16
- } from "./calendar.hooks";
17
18
  export type {
18
19
  CalendarMultipleProps,
19
20
  CalendarProps,
20
21
  CalendarRangeProps,
21
22
  CalendarSingleProps,
22
- DateRangeValue,
23
23
  DateSelectionState,
24
- DisabledDateMatcher,
25
24
  PresetOption,
26
25
  RangePosition,
27
26
  SelectionMode,