@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
@@ -1,14 +1,28 @@
1
1
  import { autoUpdate, FloatingPortal, flip, offset, shift, useClick, useDismiss, useFloating, useInteractions } from "@floating-ui/react";
2
2
  import { useControllableState } from "@sixthshift/design-system/hooks";
3
3
  import { cn } from "@sixthshift/design-system/utils";
4
- import { Calendar as CalendarIcon, X } from "lucide-react";
5
- import type * as React from "react";
6
- import { useCallback, useId, useMemo, useState } from "react";
7
- import { now, Temporal, today } from "../../date-time";
8
-
4
+ import { Calendar as CalendarIcon } from "lucide-react";
5
+ import * as React from "react";
6
+ import { useCallback, useId, useMemo, useRef, useState } from "react";
7
+ import {
8
+ adaptDisabledDates,
9
+ fromISODateOrUndefined,
10
+ fromISOInstantRange,
11
+ fromISOTimeOrUndefined,
12
+ now,
13
+ Temporal,
14
+ type TemporalInstantRange,
15
+ today,
16
+ toISOInstant,
17
+ toISOInstantRange,
18
+ } from "../../date-time";
19
+
20
+ import { PickerField } from "../../internal";
9
21
  import { Button } from "../Button";
10
- import { Calendar } from "../Calendar";
22
+ import { CalendarView } from "../Calendar/CalendarView";
23
+ import { isDateDisabled } from "../Calendar/calendar.hooks";
11
24
  import type { DateRangeValue } from "../Calendar/calendar.types";
25
+ import { DateTimeSegments } from "../DateTimePicker/DateTimeSegments";
12
26
  import { Separator } from "../Separator";
13
27
  import { PeriodSelector } from "../TimePicker/PeriodSelector";
14
28
  import { TimeColumn } from "../TimePicker/TimeColumn";
@@ -25,60 +39,10 @@ import {
25
39
  import type { ParsedTime, TimePeriod } from "../TimePicker/timepicker.types";
26
40
  import type { DateTimeRangePickerProps, DateTimeRangePresetOption, DateTimeRangeValue } from "./datetimerangepicker.types";
27
41
 
28
- /**
29
- * Format an Instant for display
30
- */
31
- function formatInstantDisplay(instant: Temporal.Instant, clockFormat: "12h" | "24h", showSeconds: boolean, timeZone?: string): string {
32
- const tz = timeZone ?? Temporal.Now.timeZoneId();
33
- const zoned = instant.toZonedDateTimeISO(tz);
34
- const plainDateTime = zoned.toPlainDateTime();
35
-
36
- // Format date part
37
- const datePart = plainDateTime.toLocaleString("en-US", {
38
- month: "long",
39
- day: "numeric",
40
- year: "numeric",
41
- });
42
-
43
- // Format time part based on props
44
- const timeOptions: Intl.DateTimeFormatOptions = {
45
- hour: "numeric",
46
- minute: "2-digit",
47
- hour12: clockFormat === "12h",
48
- };
49
-
50
- if (showSeconds) {
51
- timeOptions.second = "2-digit";
52
- }
53
-
54
- const timePart = plainDateTime.toLocaleString("en-US", timeOptions);
55
-
56
- return `${datePart}, ${timePart}`;
57
- }
58
-
59
- /**
60
- * Format an Instant range for display
61
- */
62
- function formatRangeDisplay(range: DateTimeRangeValue | undefined, clockFormat: "12h" | "24h", showSeconds: boolean): string {
63
- if (!range?.from && !range?.to) {
64
- return "";
65
- }
66
-
67
- if (range.from && !range.to) {
68
- return `${formatInstantDisplay(range.from, clockFormat, showSeconds)} – ...`;
69
- }
70
-
71
- if (!range.from && range.to) {
72
- return `... – ${formatInstantDisplay(range.to, clockFormat, showSeconds)}`;
73
- }
74
-
75
- return `${formatInstantDisplay(range.from!, clockFormat, showSeconds)} – ${formatInstantDisplay(range.to!, clockFormat, showSeconds)}`;
76
- }
77
-
78
42
  /**
79
43
  * Default preset ranges for DateTimeRangePicker
80
44
  *
81
- * Uses clean hour boundaries and returns Instant values
45
+ * Uses clean hour boundaries and returns canonical UTC instant strings
82
46
  */
83
47
  function getDefaultPresets(): DateTimeRangePresetOption[] {
84
48
  return [
@@ -87,7 +51,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
87
51
  value: () => {
88
52
  const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
89
53
  const start = end.subtract({ hours: 1 });
90
- return { from: start, to: end };
54
+ return { from: toISOInstant(start), to: toISOInstant(end) };
91
55
  },
92
56
  },
93
57
  {
@@ -95,7 +59,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
95
59
  value: () => {
96
60
  const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
97
61
  const start = end.subtract({ hours: 24 });
98
- return { from: start, to: end };
62
+ return { from: toISOInstant(start), to: toISOInstant(end) };
99
63
  },
100
64
  },
101
65
  {
@@ -103,7 +67,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
103
67
  value: () => {
104
68
  const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
105
69
  const start = end.subtract({ hours: 7 * 24 });
106
- return { from: start, to: end };
70
+ return { from: toISOInstant(start), to: toISOInstant(end) };
107
71
  },
108
72
  },
109
73
  {
@@ -111,7 +75,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
111
75
  value: () => {
112
76
  const end = now().round({ smallestUnit: "hour", roundingMode: "ceil" });
113
77
  const start = end.subtract({ hours: 30 * 24 });
114
- return { from: start, to: end };
78
+ return { from: toISOInstant(start), to: toISOInstant(end) };
115
79
  },
116
80
  },
117
81
  {
@@ -121,7 +85,7 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
121
85
  const tz = Temporal.Now.timeZoneId();
122
86
  const zonedNow = end.toZonedDateTimeISO(tz);
123
87
  const startOfMonth = zonedNow.toPlainDate().with({ day: 1 }).toPlainDateTime(Temporal.PlainTime.from("00:00:00")).toZonedDateTime(tz).toInstant();
124
- return { from: startOfMonth, to: end };
88
+ return { from: toISOInstant(startOfMonth), to: toISOInstant(end) };
125
89
  },
126
90
  },
127
91
  ];
@@ -130,10 +94,36 @@ function getDefaultPresets(): DateTimeRangePresetOption[] {
130
94
  /**
131
95
  * DateTimeRangePicker - A component for selecting a datetime range
132
96
  *
133
- * Combines date range selection with separate time pickers for start and end times.
134
- * Uses Temporal.PlainDateTime for all values.
97
+ * Combines a single range calendar with two sets of time columns — Start Time
98
+ * and End Time — shown side by side below it. Like `DateTimePicker`, it is
99
+ * not a composition of other picker components: it builds directly on the
100
+ * same internal calendar grid and time-column primitives `TimePicker` and
101
+ * `DateTimePicker` use.
102
+ *
103
+ * The trigger is two typeable fields, one per end — each a full date-and-time
104
+ * (`1520260900a` is January 5th 2026 at 9am), each with its own clear button,
105
+ * sharing one popover that anchors to whichever half is being edited. A typed
106
+ * end that falls outside `minDate`/`maxDate`/`minTime`/`maxTime` is flagged
107
+ * rather than clamped. See `SegmentedField` for the keyboard model.
108
+ *
109
+ * The value is an `ISOInstantRange` (`{ from?: ISOInstant, to?: ISOInstant }`,
110
+ * exported as `DateTimeRangeValue` for historical reasons) — both ends
111
+ * absolute instants, always UTC and ending in `Z`. Each end is edited in the
112
+ * viewer's local timezone and converted to/from UTC at the boundary. Supports
113
+ * controlled (`value`/`onChange`) and uncontrolled (`defaultValue`) use.
114
+ *
115
+ * Opening the popover seeds date-range and time drafts from the committed
116
+ * value; the footer's Apply combines them into an instant range and commits,
117
+ * Cancel discards the draft. `minDate`/`maxDate` and `disabledDates` bound the
118
+ * date grid. `minTime`/`maxTime` are wall-clock bounds that apply to **both**
119
+ * the start and end time columns identically — they do not mean "start no
120
+ * earlier than X, end no later than Y" relative to each other, and they say
121
+ * nothing about the resulting instants (a `maxTime` of `17:00` still allows an
122
+ * end date after the start date). `presets` (a zero-arg-function value, like
123
+ * `DateRangePicker`) replaces the built-in preset list; `showPresets={false}`
124
+ * hides the sidebar.
135
125
  */
136
- export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
126
+ export const DateTimeRangePicker = React.forwardRef<HTMLDivElement, DateTimeRangePickerProps>((props, ref) => {
137
127
  const {
138
128
  value,
139
129
  defaultValue,
@@ -147,8 +137,8 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
147
137
  maxTime,
148
138
  minuteStep = 1,
149
139
  clockFormat = "12h",
140
+ segmentOrder = "mdy",
150
141
  showSeconds = false,
151
- placeholder = "Select datetime range...",
152
142
  weekStartsOn = 0,
153
143
  name,
154
144
  isDisabled = false,
@@ -160,12 +150,33 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
160
150
 
161
151
  // Open state
162
152
  const [open, setOpen] = useState(false);
153
+ // The day grid takes focus only when the popover was opened from the keyboard.
154
+ const [autoFocusDay, setAutoFocusDay] = useState(false);
155
+
156
+ // ---------------------------------------------------------------------------
157
+ // The ISO boundary.
158
+ //
159
+ // Both ends of the range cross as canonical UTC instant strings; constraints
160
+ // cross as ISO dates and times. Below this block everything is Temporal, as
161
+ // before. Each conversion is memoised on its source value so the Temporal
162
+ // objects handed downstream stay referentially stable.
163
+ // ---------------------------------------------------------------------------
164
+
165
+ const temporalValue = useMemo(() => fromISOInstantRange(value), [value]);
166
+ const temporalDefaultValue = useMemo(() => fromISOInstantRange(defaultValue), [defaultValue]);
167
+ const temporalMinDate = useMemo(() => fromISODateOrUndefined(minDate), [minDate]);
168
+ const temporalMaxDate = useMemo(() => fromISODateOrUndefined(maxDate), [maxDate]);
169
+ const temporalMinTime = useMemo(() => fromISOTimeOrUndefined(minTime), [minTime]);
170
+ const temporalMaxTime = useMemo(() => fromISOTimeOrUndefined(maxTime), [maxTime]);
171
+ const temporalDisabledDates = useMemo(() => adaptDisabledDates(disabledDates), [disabledDates]);
172
+
173
+ const handleChange = useCallback((next: TemporalInstantRange | undefined) => onChange?.(toISOInstantRange(next)), [onChange]);
163
174
 
164
175
  // Controllable value state (external/committed value)
165
- const [committedValue, setCommittedValue] = useControllableState({
166
- value,
167
- defaultValue,
168
- onChange,
176
+ const [committedValue, setCommittedValue] = useControllableState<TemporalInstantRange | undefined>({
177
+ value: temporalValue,
178
+ defaultValue: temporalDefaultValue,
179
+ onChange: handleChange,
169
180
  });
170
181
 
171
182
  // Draft state (date range + time parts for both start and end)
@@ -303,8 +314,8 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
303
314
  };
304
315
  }, [clockFormat, draftEndHour, draftEndMinute, draftEndSecond, draftEndPeriod]);
305
316
 
306
- // Combine draft dates and times into DateTimeRangeValue
307
- const getDraftRange = useCallback((): DateTimeRangeValue => {
317
+ // Combine draft dates and times into the internal Temporal range
318
+ const getDraftRange = useCallback((): TemporalInstantRange => {
308
319
  const tz = Temporal.Now.timeZoneId();
309
320
 
310
321
  const from = draftDateRange?.from
@@ -380,19 +391,11 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
380
391
  }, [committedValue, clockFormat]);
381
392
 
382
393
  // Clear value
383
- const handleClear = useCallback(
384
- (e: React.MouseEvent) => {
385
- e.stopPropagation();
386
- e.preventDefault();
387
- setCommittedValue(undefined);
388
- },
389
- [setCommittedValue]
390
- );
391
394
 
392
395
  // Apply preset
393
396
  const _handlePresetClick = useCallback(
394
397
  (preset: { label: string; value: DateTimeRangeValue }) => {
395
- setCommittedValue(preset.value);
398
+ setCommittedValue(fromISOInstantRange(preset.value));
396
399
  setOpen(false);
397
400
  },
398
401
  [setCommittedValue]
@@ -414,11 +417,149 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
414
417
  // IDs for accessibility
415
418
  const id = useId();
416
419
  const contentId = `datetimerangepicker-content-${id}`;
417
- const inputId = `datetimerangepicker-input-${id}`;
418
420
 
419
421
  // Display value (from committed value)
420
- const displayValue = committedValue ? formatRangeDisplay(committedValue, clockFormat, showSeconds) : "";
421
- const hasValue = Boolean(committedValue?.from || committedValue?.to);
422
+
423
+ // ---------------------------------------------------------------------------
424
+ // Two typeable fields, one per end.
425
+ //
426
+ // A range is two instants, and typing one should not require knowing where the
427
+ // other ends. Each half is its own segmented field with its own clear button;
428
+ // they share the one popover, which anchors to whichever half is being edited.
429
+ // While it is open the fields show the draft, so picking in the grid or the
430
+ // columns shows up in the segments and vice versa.
431
+ // ---------------------------------------------------------------------------
432
+
433
+ const draftRange = getDraftRange();
434
+ const shownFor = (end: "from" | "to") => (open ? draftRange[end] : committedValue?.[end]);
435
+
436
+ /**
437
+ * A typed end can fall outside what the grid and columns allow. The field
438
+ * flags it rather than clamping; see `DatePicker` for why.
439
+ */
440
+ const outOfBounds = (instant: Temporal.Instant | undefined) => {
441
+ if (!instant) return false;
442
+ const zoned = instant.toZonedDateTimeISO(userTimeZone);
443
+ return (
444
+ isDateDisabled(zoned.toPlainDate(), temporalDisabledDates, temporalMinDate, temporalMaxDate) ||
445
+ isTimeDisabled(zoned.toPlainTime(), temporalMinTime, temporalMaxTime)
446
+ );
447
+ };
448
+
449
+ const setRangeEnd = useCallback(
450
+ (end: "from" | "to", instant: Temporal.Instant | undefined) => {
451
+ if (!open) {
452
+ const next = { from: end === "from" ? instant : committedValue?.from, to: end === "to" ? instant : committedValue?.to };
453
+ setCommittedValue(next.from || next.to ? next : undefined);
454
+ return;
455
+ }
456
+
457
+ if (!instant) {
458
+ setDraftDateRange((current) => ({ from: end === "from" ? undefined : current?.from, to: end === "to" ? undefined : current?.to }));
459
+ return;
460
+ }
461
+
462
+ const zoned = instant.toZonedDateTimeISO(userTimeZone);
463
+ const parsed = temporalToParsed(zoned.toPlainTime());
464
+ setDraftDateRange((current) => ({
465
+ from: end === "from" ? zoned.toPlainDate() : current?.from,
466
+ to: end === "to" ? zoned.toPlainDate() : current?.to,
467
+ }));
468
+ if (end === "from") {
469
+ setDraftStartHour(clockFormat === "12h" ? to12Hour(parsed.hour).hour12 : parsed.hour);
470
+ setDraftStartMinute(parsed.minute);
471
+ setDraftStartSecond(parsed.second);
472
+ setDraftStartPeriod(to12Hour(parsed.hour).period);
473
+ } else {
474
+ setDraftEndHour(clockFormat === "12h" ? to12Hour(parsed.hour).hour12 : parsed.hour);
475
+ setDraftEndMinute(parsed.minute);
476
+ setDraftEndSecond(parsed.second);
477
+ setDraftEndPeriod(to12Hour(parsed.hour).period);
478
+ }
479
+ },
480
+ [clockFormat, committedValue, open, setCommittedValue, userTimeZone]
481
+ );
482
+
483
+ const clearRangeEnd = useCallback(
484
+ (end: "from" | "to") => (event: React.MouseEvent) => {
485
+ event.stopPropagation();
486
+ event.preventDefault();
487
+ const next = { from: end === "from" ? undefined : committedValue?.from, to: end === "to" ? undefined : committedValue?.to };
488
+ // Clearing the last remaining end clears the range itself.
489
+ setCommittedValue(next.from || next.to ? next : undefined);
490
+ },
491
+ [committedValue, setCommittedValue]
492
+ );
493
+
494
+ const rangeHalves = useRef<Record<"from" | "to", HTMLDivElement | null>>({ from: null, to: null });
495
+ const anchorToHalf = useCallback(
496
+ (end: "from" | "to") => {
497
+ const node = rangeHalves.current[end];
498
+ if (node) refs.setPositionReference(node);
499
+ },
500
+ [refs]
501
+ );
502
+
503
+ /** `Alt+ArrowDown` from a segment: open the popover *and* go to the grid. */
504
+ const openWithGridFocus = useCallback(
505
+ (end: "from" | "to") => () => {
506
+ anchorToHalf(end);
507
+ setAutoFocusDay(true);
508
+ handleOpenChange(true);
509
+ },
510
+ [anchorToHalf, handleOpenChange]
511
+ );
512
+
513
+ /** `Enter` in a segment commits the draft, matching the popover's Apply. */
514
+ const handleFieldSubmit = useCallback(() => {
515
+ if (open) handleApply();
516
+ }, [handleApply, open]);
517
+
518
+ /**
519
+ * One end of the range. A render function rather than a component so the
520
+ * fields are not remounted — and focus is not dropped — on every keystroke.
521
+ */
522
+ const renderRangeHalf = (end: "from" | "to", label: string) => {
523
+ const settled = committedValue?.[end];
524
+
525
+ return (
526
+ <PickerField
527
+ ref={(node) => {
528
+ rangeHalves.current[end] = node;
529
+ }}
530
+ onFocusCapture={() => anchorToHalf(end)}
531
+ className="min-w-70 flex-1"
532
+ icon={<CalendarIcon className="h-4 w-4" />}
533
+ toggleLabel={`Open picker for ${label.toLowerCase()}`}
534
+ // Both handlers have to run: Floating UI's opens the popover, and ours
535
+ // points it at this half. Spreading after `onClick` would drop ours on
536
+ // the floor, which is how the popover ended up anchored to the whole
537
+ // trigger.
538
+ toggleProps={getReferenceProps({ onClick: () => anchorToHalf(end) })}
539
+ isOpen={open}
540
+ contentId={contentId}
541
+ isDisabled={isDisabled}
542
+ isInvalid={isInvalid || outOfBounds(shownFor(end))}
543
+ onClear={clearable && settled && !isDisabled ? clearRangeEnd(end) : undefined}
544
+ clearLabel={`Clear ${label.toLowerCase()}`}
545
+ >
546
+ <DateTimeSegments
547
+ className="h-full flex-1"
548
+ label={label}
549
+ value={shownFor(end)}
550
+ onChange={(instant) => setRangeEnd(end, instant)}
551
+ timeZone={userTimeZone}
552
+ order={segmentOrder}
553
+ clockFormat={clockFormat}
554
+ showSeconds={showSeconds}
555
+ isDisabled={isDisabled}
556
+ isInvalid={isInvalid || outOfBounds(shownFor(end))}
557
+ onOpenRequest={openWithGridFocus(end)}
558
+ onSubmit={handleFieldSubmit}
559
+ />
560
+ </PickerField>
561
+ );
562
+ };
422
563
 
423
564
  // Time selection handlers - Start time
424
565
  const handleStartHourChange = (hour: number) => setDraftStartHour(hour);
@@ -445,47 +586,29 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
445
586
  const checkTimeDisabled = useCallback(
446
587
  (hour: number, minute: number, second: number): boolean => {
447
588
  const temporal = Temporal.PlainTime.from({ hour, minute, second });
448
- return isTimeDisabled(temporal, minTime, maxTime);
589
+ return isTimeDisabled(temporal, temporalMinTime, temporalMaxTime);
449
590
  },
450
- [minTime, maxTime]
591
+ [temporalMinTime, temporalMaxTime]
451
592
  );
452
593
 
453
594
  return (
454
595
  <>
455
596
  {/* Trigger Input */}
456
- <div className="relative flex min-w-125 items-center">
457
- <CalendarIcon className="pointer-events-none absolute left-3 h-4 w-4 text-fg-subtle" />
458
- <input
459
- ref={refs.setReference as React.Ref<HTMLInputElement>}
460
- id={inputId}
461
- type="text"
462
- readOnly
463
- value={displayValue}
464
- placeholder={placeholder}
465
- disabled={isDisabled}
466
- role="combobox"
467
- aria-invalid={isInvalid}
468
- aria-haspopup="dialog"
469
- aria-expanded={open}
470
- aria-controls={open ? contentId : undefined}
471
- className={cn(
472
- `flex h-9 w-full min-w-125 cursor-pointer rounded-md border border-border-normal bg-transparent py-1 pl-9 text-sm shadow-xs transition-colors placeholder:text-fg-subtle focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50`,
473
- clearable && hasValue ? "pr-9" : "pr-3",
474
- isInvalid && "border-border-danger",
475
- className
476
- )}
477
- {...getReferenceProps()}
478
- />
479
- {clearable && hasValue && !isDisabled && (
480
- <button
481
- type="button"
482
- onClick={handleClear}
483
- className="absolute right-3 rounded-sm p-0.5 text-fg-subtle hover:bg-bg-subtle hover:text-fg-normal focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring"
484
- aria-label="Clear datetime range"
485
- >
486
- <X className="h-3.5 w-3.5" />
487
- </button>
488
- )}
597
+ <div
598
+ ref={(node) => {
599
+ // The container is the interaction reference, so a click in either half
600
+ // counts as inside; the *position* reference follows the active half.
601
+ refs.setReference(node);
602
+ if (typeof ref === "function") ref(node);
603
+ else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;
604
+ }}
605
+ className={cn("relative flex min-w-125 items-center gap-2", className)}
606
+ >
607
+ {renderRangeHalf("from", "Start date and time")}
608
+ <span aria-hidden="true" className="text-fg-subtle">
609
+ –
610
+ </span>
611
+ {renderRangeHalf("to", "End date and time")}
489
612
 
490
613
  {/* Hidden inputs for form submission */}
491
614
  {name && committedValue?.from && <input type="hidden" name={`${name}.from`} value={committedValue.from.toString()} />}
@@ -499,7 +622,7 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
499
622
  ref={refs.setFloating}
500
623
  id={contentId}
501
624
  role="dialog"
502
- aria-modal="true"
625
+ aria-label="Choose date and time range"
503
626
  style={floatingStyles}
504
627
  className="z-popover rounded-xl border border-border-normal bg-bg-normal p-4 shadow-lg"
505
628
  {...getFloatingProps()}
@@ -531,17 +654,18 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
531
654
  )}
532
655
 
533
656
  {/* Date Calendar */}
534
- <Calendar
657
+ <CalendarView
535
658
  mode="range"
536
659
  value={draftDateRange}
537
660
  onSelect={setDraftDateRange as (range: DateRangeValue | undefined) => void}
538
661
  month={month}
539
662
  onMonthChange={setMonth}
540
- minDate={minDate}
541
- maxDate={maxDate}
542
- disabled={disabledDates}
663
+ minDate={temporalMinDate}
664
+ maxDate={temporalMaxDate}
665
+ disabled={temporalDisabledDates}
543
666
  weekStartsOn={weekStartsOn}
544
667
  showFooter={false}
668
+ autoFocusDay={autoFocusDay}
545
669
  />
546
670
  </div>
547
671
 
@@ -667,7 +791,7 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
667
791
  <Button type="button" variant="ghost" size="sm" onClick={handleCancel}>
668
792
  Cancel
669
793
  </Button>
670
- <Button type="button" variant="solid" size="sm" onClick={handleApply}>
794
+ <Button type="button" variant="solid" intent="brand" size="sm" onClick={handleApply}>
671
795
  Apply
672
796
  </Button>
673
797
  </div>
@@ -676,4 +800,5 @@ export const DateTimeRangePicker = (props: DateTimeRangePickerProps) => {
676
800
  )}
677
801
  </>
678
802
  );
679
- };
803
+ });
804
+ DateTimeRangePicker.displayName = "DateTimeRangePicker";
@@ -1,20 +1,26 @@
1
- import type { Temporal, WeekStartsOn } from "../../date-time";
2
-
3
- export type DisabledDateMatcher =
4
- | Temporal.PlainDate
5
- | Temporal.PlainDate[]
6
- | ((date: Temporal.PlainDate) => boolean)
7
- | { before: Temporal.PlainDate }
8
- | { after: Temporal.PlainDate }
9
- | { from: Temporal.PlainDate; to: Temporal.PlainDate };
10
-
11
- export type DateTimeRangeValue = {
12
- from: Temporal.Instant | undefined;
13
- to: Temporal.Instant | undefined;
14
- };
1
+ /**
2
+ * DateTimeRangePicker types.
3
+ *
4
+ * Both ends of the range are absolute instants, exchanged as canonical UTC ISO
5
+ * strings (`"2026-08-26T00:30:00Z"`). Date and time constraints are plain dates
6
+ * and wall-clock times, since they describe the picker's grid rather than an
7
+ * absolute moment.
8
+ */
9
+
10
+ import type { DisabledDates, ISODate, ISOInstantRange, ISOTime, WeekStartsOn } from "../../date-time";
11
+ import type { DateSegmentOrder } from "../DatePicker/datepicker.types";
12
+
13
+ /**
14
+ * A datetime range.
15
+ *
16
+ * Alias of `ISOInstantRange`, kept under this name because it is the historical
17
+ * public type for this component.
18
+ */
19
+ export type DateTimeRangeValue = ISOInstantRange;
15
20
 
16
21
  export type DateTimeRangePresetOption = {
17
22
  label: string;
23
+ /** Called when the picker renders, so relative ranges stay current. */
18
24
  value: () => DateTimeRangeValue;
19
25
  };
20
26
 
@@ -29,21 +35,26 @@ export type DateTimeRangePickerProps = {
29
35
  showPresets?: boolean; // Default: true
30
36
 
31
37
  // Date constraints
32
- minDate?: Temporal.PlainDate;
33
- maxDate?: Temporal.PlainDate;
34
- disabledDates?: DisabledDateMatcher | DisabledDateMatcher[];
38
+ minDate?: ISODate;
39
+ maxDate?: ISODate;
40
+ disabledDates?: DisabledDates | DisabledDates[];
35
41
 
36
42
  // Time constraints (apply to both start and end times)
37
- minTime?: Temporal.PlainTime;
38
- maxTime?: Temporal.PlainTime;
43
+ minTime?: ISOTime;
44
+ maxTime?: ISOTime;
39
45
  minuteStep?: 1 | 5 | 10 | 15 | 30;
40
46
 
41
47
  // Time format
42
48
  clockFormat?: "12h" | "24h"; // Default: "12h"
49
+
50
+ /**
51
+ * Segment order for the date half of each typeable field (default `mdy`).
52
+ * Never inferred from the locale — `08/09` is a different date under each.
53
+ */
54
+ segmentOrder?: DateSegmentOrder;
43
55
  showSeconds?: boolean; // Default: false
44
56
 
45
57
  // Display
46
- placeholder?: string;
47
58
  weekStartsOn?: WeekStartsOn;
48
59
 
49
60
  // Form
@@ -1,2 +1,11 @@
1
+ /**
2
+ * Public surface of `@sixthshift/design-system/datetime-range-picker`.
3
+ *
4
+ * `DisabledDateMatcher` was a Temporal-shaped type and is gone; the ISO
5
+ * equivalent `DisabledDates` is re-exported here. `DateTimeRangeValue` survives
6
+ * as an alias of `ISOInstantRange`.
7
+ */
8
+
9
+ export type { DisabledDates, ISODate, ISOInstant, ISOInstantRange, ISOTime } from "../../date-time";
1
10
  export { DateTimeRangePicker } from "./DateTimeRangePicker";
2
11
  export type { DateTimeRangePickerProps, DateTimeRangePresetOption, DateTimeRangeValue } from "./datetimerangepicker.types";