@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,13 +1,23 @@
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 { Clock, X } from "lucide-react";
5
- import type * as React from "react";
6
- import { useCallback, useId, useState } from "react";
7
- import { Temporal, today } from "../../date-time";
8
-
4
+ import { Clock } from "lucide-react";
5
+ import * as React from "react";
6
+ import { useCallback, useId, useMemo, useState } from "react";
7
+ import {
8
+ adaptDisabledDates,
9
+ fromISODateOrUndefined,
10
+ fromISOInstantOrUndefined,
11
+ fromISOTimeOrUndefined,
12
+ Temporal,
13
+ today,
14
+ toISOInstantOrUndefined,
15
+ } from "../../date-time";
16
+
17
+ import { PickerField } from "../../internal";
9
18
  import { Button } from "../Button";
10
- import { Calendar } from "../Calendar";
19
+ import { CalendarView } from "../Calendar/CalendarView";
20
+ import { isDateDisabled } from "../Calendar/calendar.hooks";
11
21
  import { Separator } from "../Separator";
12
22
  import { PeriodSelector } from "../TimePicker/PeriodSelector";
13
23
  import { TimeColumn } from "../TimePicker/TimeColumn";
@@ -22,46 +32,44 @@ import {
22
32
  to24Hour,
23
33
  } from "../TimePicker/timepicker.hooks";
24
34
  import type { ParsedTime, TimePeriod } from "../TimePicker/timepicker.types";
35
+ import { DateTimeSegments } from "./DateTimeSegments";
25
36
  import type { DateTimePickerProps } from "./datetimepicker.types";
26
37
 
27
- /**
28
- * Format an Instant for display
29
- */
30
- function formatInstantDisplay(instant: Temporal.Instant, clockFormat: "12h" | "24h", showSeconds: boolean, timeZone?: string): string {
31
- const tz = timeZone ?? Temporal.Now.timeZoneId();
32
- const zoned = instant.toZonedDateTimeISO(tz);
33
- const plainDateTime = zoned.toPlainDateTime();
34
-
35
- // Format date part
36
- const datePart = plainDateTime.toLocaleString("en-US", {
37
- month: "long",
38
- day: "numeric",
39
- year: "numeric",
40
- });
41
-
42
- // Format time part based on props
43
- const timeOptions: Intl.DateTimeFormatOptions = {
44
- hour: "numeric",
45
- minute: "2-digit",
46
- hour12: clockFormat === "12h",
47
- };
48
-
49
- if (showSeconds) {
50
- timeOptions.second = "2-digit";
51
- }
52
-
53
- const timePart = plainDateTime.toLocaleString("en-US", timeOptions);
54
-
55
- return `${datePart}, ${timePart}`;
56
- }
57
-
58
38
  /**
59
39
  * DateTimePicker - A component for selecting both date and time
60
40
  *
61
- * Combines date and time selection in a single popup with side-by-side layout.
62
- * Uses Temporal.Instant for all values (timezone-aware).
41
+ * Combines date and time selection in a single popup with side-by-side layout:
42
+ * a `Calendar` grid on the left, hour/minute(/second) columns on the right.
43
+ *
44
+ * The trigger is one typeable field of date *and* time segments — one value, so
45
+ * the digits roll straight from the year into the hour: `1520260330p` is January
46
+ * 5th 2026 at 3:30pm, typed without a tab. `segmentOrder` sets the date half's
47
+ * order (never inferred from the locale), `clockFormat` decides the hour's range
48
+ * and whether there is an AM/PM segment, and `Alt+ArrowDown` opens the popover
49
+ * on the month being typed. See `SegmentedField` for the whole keyboard model.
50
+ * It is not a composition of `DatePicker` and `TimePicker` — it builds
51
+ * directly on the same internal calendar grid and time-column primitives
52
+ * those two use, so the two stay visually consistent without either being
53
+ * mounted as a component.
54
+ *
55
+ * The value is a single absolute instant: an `ISOInstant` string
56
+ * (`"2026-08-26T00:30:00Z"`), always UTC and always ending in `Z`. It is
57
+ * edited in the viewer's local timezone (`Temporal.Now.timeZoneId()`) and
58
+ * converted to/from UTC at the boundary, so the same stored instant displays
59
+ * differently to viewers in different timezones. Input written with a
60
+ * numeric offset is normalised to the `Z` form. Supports controlled
61
+ * (`value`/`onChange`) and uncontrolled (`defaultValue`) use.
62
+ *
63
+ * Opening the popover seeds date and time drafts from the committed value (or
64
+ * today + the current time, if none); the footer's Apply combines them into
65
+ * an instant and commits, Cancel discards the draft. `minDate`/`maxDate` and
66
+ * `disabledDates` bound the date grid; `minTime`/`maxTime` bound the wall-clock
67
+ * time columns — these are plain date/time constraints on the picker's grid,
68
+ * not constraints on the resulting instant. `clockFormat` and `showSeconds`
69
+ * control the time columns; `clearable` (default `true`) shows the clear
70
+ * button.
63
71
  */
64
- export const DateTimePicker = (props: DateTimePickerProps) => {
72
+ export const DateTimePicker = React.forwardRef<HTMLDivElement, DateTimePickerProps>((props, ref) => {
65
73
  const {
66
74
  value,
67
75
  defaultValue,
@@ -74,7 +82,6 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
74
82
  minuteStep = 1,
75
83
  clockFormat = "12h",
76
84
  showSeconds = false,
77
- placeholder = "Select date and time...",
78
85
  weekStartsOn = 0,
79
86
  name,
80
87
  isDisabled = false,
@@ -82,16 +89,38 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
82
89
  className,
83
90
  align = "end",
84
91
  clearable = true,
92
+ segmentOrder = "mdy",
85
93
  } = props;
86
94
 
87
95
  // Open state
88
96
  const [open, setOpen] = useState(false);
97
+ // The day grid takes focus only when the popover was opened from the keyboard.
98
+ const [autoFocusDay, setAutoFocusDay] = useState(false);
99
+
100
+ // ---------------------------------------------------------------------------
101
+ // The ISO boundary.
102
+ //
103
+ // The value crosses as a canonical UTC instant string; constraints cross as
104
+ // ISO dates and times. Below this block everything is Temporal, exactly as
105
+ // before. Each conversion is memoised on its source string so the Temporal
106
+ // values stay referentially stable across renders.
107
+ // ---------------------------------------------------------------------------
108
+
109
+ const temporalValue = useMemo(() => fromISOInstantOrUndefined(value), [value]);
110
+ const temporalDefaultValue = useMemo(() => fromISOInstantOrUndefined(defaultValue), [defaultValue]);
111
+ const temporalMinDate = useMemo(() => fromISODateOrUndefined(minDate), [minDate]);
112
+ const temporalMaxDate = useMemo(() => fromISODateOrUndefined(maxDate), [maxDate]);
113
+ const temporalMinTime = useMemo(() => fromISOTimeOrUndefined(minTime), [minTime]);
114
+ const temporalMaxTime = useMemo(() => fromISOTimeOrUndefined(maxTime), [maxTime]);
115
+ const temporalDisabledDates = useMemo(() => adaptDisabledDates(disabledDates), [disabledDates]);
116
+
117
+ const handleChange = useCallback((next: Temporal.Instant | undefined) => onChange?.(toISOInstantOrUndefined(next)), [onChange]);
89
118
 
90
119
  // Controllable value state (external/committed value)
91
- const [committedValue, setCommittedValue] = useControllableState({
92
- value,
93
- defaultValue,
94
- onChange,
120
+ const [committedValue, setCommittedValue] = useControllableState<Temporal.Instant | undefined>({
121
+ value: temporalValue,
122
+ defaultValue: temporalDefaultValue,
123
+ onChange: handleChange,
95
124
  });
96
125
 
97
126
  // Draft state (date + time parts)
@@ -117,6 +146,7 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
117
146
  // Sync draft when popup opens
118
147
  const handleOpenChange = useCallback(
119
148
  (newOpen: boolean) => {
149
+ if (!newOpen) setAutoFocusDay(false);
120
150
  if (newOpen) {
121
151
  const tz = Temporal.Now.timeZoneId();
122
152
  if (committedValue) {
@@ -229,9 +259,82 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
229
259
  const inputId = `datetimepicker-input-${id}`;
230
260
 
231
261
  // Display value (from committed value)
232
- const displayValue = committedValue ? formatInstantDisplay(committedValue, clockFormat, showSeconds) : "";
233
262
  const hasValue = Boolean(committedValue);
234
263
 
264
+ // ---------------------------------------------------------------------------
265
+ // The typeable field.
266
+ //
267
+ // The segments show the draft while the popover is open and the committed
268
+ // value while it is closed, so typing moves the grid and columns, and picking
269
+ // in either shows up in the segments. Open means the popover's Apply/Cancel
270
+ // owns the value; closed means a complete date-time commits as soon as it is
271
+ // complete.
272
+ //
273
+ // The draft is a date plus loose time parts, so it only composes into an
274
+ // instant once the date exists. Until then the field has nothing to show,
275
+ // which is exactly `undefined`.
276
+ // ---------------------------------------------------------------------------
277
+
278
+ const userZone = Temporal.Now.timeZoneId();
279
+
280
+ const draftInstant = useMemo(() => {
281
+ if (!draftDate) return undefined;
282
+ const parsed = getDraftTime();
283
+ return draftDate
284
+ .toPlainDateTime({ hour: parsed.hour, minute: parsed.minute, second: showSeconds ? parsed.second : 0 })
285
+ .toZonedDateTime(userZone)
286
+ .toInstant();
287
+ }, [draftDate, getDraftTime, showSeconds, userZone]);
288
+
289
+ const segmentValue = open ? draftInstant : committedValue;
290
+
291
+ /**
292
+ * A typed instant can fall outside what the grid and columns allow — the date
293
+ * past `maxDate`, or the time outside `minTime`/`maxTime`. The field flags it
294
+ * rather than clamping; see `DatePicker` for why.
295
+ */
296
+ const outOfBounds = useMemo(() => {
297
+ if (!segmentValue) return false;
298
+ const zoned = segmentValue.toZonedDateTimeISO(userZone);
299
+ return (
300
+ isDateDisabled(zoned.toPlainDate(), temporalDisabledDates, temporalMinDate, temporalMaxDate) ||
301
+ isTimeDisabled(zoned.toPlainTime(), temporalMinTime, temporalMaxTime)
302
+ );
303
+ }, [segmentValue, temporalDisabledDates, temporalMaxDate, temporalMaxTime, temporalMinDate, temporalMinTime, userZone]);
304
+
305
+ const handleSegmentsChange = useCallback(
306
+ (instant: Temporal.Instant | undefined) => {
307
+ if (!open) {
308
+ setCommittedValue(instant);
309
+ return;
310
+ }
311
+ if (!instant) {
312
+ setDraftDate(undefined);
313
+ return;
314
+ }
315
+ const zoned = instant.toZonedDateTimeISO(userZone);
316
+ const parsed = temporalToParsed(zoned.toPlainTime());
317
+ setDraftDate(zoned.toPlainDate());
318
+ setMonth(zoned.toPlainDate());
319
+ setDraftHour(clockFormat === "12h" ? to12Hour(parsed.hour).hour12 : parsed.hour);
320
+ setDraftMinute(parsed.minute);
321
+ setDraftSecond(parsed.second);
322
+ setDraftPeriod(to12Hour(parsed.hour).period);
323
+ },
324
+ [clockFormat, open, setCommittedValue, userZone]
325
+ );
326
+
327
+ /** `Alt+ArrowDown` from a segment: open the popover *and* go to the grid. */
328
+ const openWithGridFocus = useCallback(() => {
329
+ setAutoFocusDay(true);
330
+ handleOpenChange(true);
331
+ }, [handleOpenChange]);
332
+
333
+ /** `Enter` in a segment commits the draft, matching the popover's Apply. */
334
+ const handleFieldSubmit = useCallback(() => {
335
+ if (open) handleApply();
336
+ }, [handleApply, open]);
337
+
235
338
  // Time selection handlers
236
339
  const handleHourChange = (hour: number) => setDraftHour(hour);
237
340
  const handleMinuteChange = (minute: number) => setDraftMinute(minute);
@@ -250,47 +353,43 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
250
353
  const checkTimeDisabled = useCallback(
251
354
  (hour: number, minute: number, second: number): boolean => {
252
355
  const temporal = Temporal.PlainTime.from({ hour, minute, second });
253
- return isTimeDisabled(temporal, minTime, maxTime);
356
+ return isTimeDisabled(temporal, temporalMinTime, temporalMaxTime);
254
357
  },
255
- [minTime, maxTime]
358
+ [temporalMinTime, temporalMaxTime]
256
359
  );
257
360
 
258
361
  return (
259
362
  <>
260
363
  {/* Trigger Input */}
261
- <div className="relative flex items-center">
262
- <Clock className="pointer-events-none absolute left-3 h-4 w-4 text-fg-subtle" />
263
- <input
264
- ref={refs.setReference as React.Ref<HTMLInputElement>}
265
- id={inputId}
266
- type="text"
267
- readOnly
268
- value={displayValue}
269
- placeholder={placeholder}
270
- disabled={isDisabled}
271
- role="combobox"
272
- aria-invalid={isInvalid}
273
- aria-haspopup="dialog"
274
- aria-expanded={open}
275
- aria-controls={open ? contentId : undefined}
276
- className={cn(
277
- `flex h-9 w-full 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`,
278
- clearable && hasValue ? "pr-9" : "pr-3",
279
- isInvalid && "border-border-danger",
280
- className
281
- )}
282
- {...getReferenceProps()}
283
- />
284
- {clearable && hasValue && !isDisabled && (
285
- <button
286
- type="button"
287
- onClick={handleClear}
288
- 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"
289
- aria-label="Clear date and time"
290
- >
291
- <X className="h-3.5 w-3.5" />
292
- </button>
293
- )}
364
+ <div ref={ref} className="relative flex items-center">
365
+ <PickerField
366
+ ref={refs.setReference as React.Ref<HTMLDivElement>}
367
+ className={cn("w-full min-w-80", className)}
368
+ icon={<Clock className="h-4 w-4" />}
369
+ toggleLabel="Open date and time picker"
370
+ toggleProps={getReferenceProps()}
371
+ isOpen={open}
372
+ contentId={contentId}
373
+ isDisabled={isDisabled}
374
+ isInvalid={isInvalid || outOfBounds}
375
+ onClear={clearable && hasValue && !isDisabled ? handleClear : undefined}
376
+ clearLabel="Clear date and time"
377
+ >
378
+ <DateTimeSegments
379
+ className="h-full flex-1"
380
+ id={inputId}
381
+ value={segmentValue}
382
+ onChange={handleSegmentsChange}
383
+ timeZone={userZone}
384
+ order={segmentOrder}
385
+ clockFormat={clockFormat}
386
+ showSeconds={showSeconds}
387
+ isDisabled={isDisabled}
388
+ isInvalid={isInvalid || outOfBounds}
389
+ onOpenRequest={openWithGridFocus}
390
+ onSubmit={handleFieldSubmit}
391
+ />
392
+ </PickerField>
294
393
 
295
394
  {/* Hidden input for form submission */}
296
395
  {name && committedValue && <input type="hidden" name={name} value={committedValue.toString()} />}
@@ -303,24 +402,25 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
303
402
  ref={refs.setFloating}
304
403
  id={contentId}
305
404
  role="dialog"
306
- aria-modal="true"
405
+ aria-label="Choose date and time"
307
406
  style={floatingStyles}
308
407
  className="z-popover rounded-xl border border-border-normal bg-bg-normal p-4 shadow-lg"
309
408
  {...getFloatingProps()}
310
409
  >
311
410
  <div className="flex gap-4">
312
411
  {/* Date Calendar (left side) */}
313
- <Calendar
412
+ <CalendarView
314
413
  mode="single"
315
414
  value={draftDate}
316
415
  onSelect={setDraftDate as (date: Temporal.PlainDate | undefined) => void}
317
416
  month={month}
318
417
  onMonthChange={setMonth}
319
- minDate={minDate}
320
- maxDate={maxDate}
321
- disabled={disabledDates}
418
+ minDate={temporalMinDate}
419
+ maxDate={temporalMaxDate}
420
+ disabled={temporalDisabledDates}
322
421
  weekStartsOn={weekStartsOn}
323
422
  showFooter={false}
423
+ autoFocusDay={autoFocusDay}
324
424
  />
325
425
 
326
426
  <Separator orientation="vertical" />
@@ -387,7 +487,7 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
387
487
  <Button type="button" variant="ghost" size="sm" onClick={handleCancel}>
388
488
  Cancel
389
489
  </Button>
390
- <Button type="button" variant="solid" size="sm" onClick={handleApply}>
490
+ <Button type="button" variant="solid" intent="brand" size="sm" onClick={handleApply}>
391
491
  Apply
392
492
  </Button>
393
493
  </div>
@@ -396,4 +496,5 @@ export const DateTimePicker = (props: DateTimePickerProps) => {
396
496
  )}
397
497
  </>
398
498
  );
399
- };
499
+ });
500
+ DateTimePicker.displayName = "DateTimePicker";
@@ -0,0 +1,113 @@
1
+ import { Temporal } from "../../date-time";
2
+ import { SegmentedField, type SegmentSpec, type SegmentValues } from "../../internal";
3
+ import { dateFromSegments, dateSpec, dateToSegments, parseDatePasteIn } from "../DatePicker/DateSegments";
4
+ import type { DateSegmentOrder } from "../DatePicker/datepicker.types";
5
+ import { timeCodec, timeSpec } from "../TimePicker/TimeSegments";
6
+ import type { ClockFormat } from "../TimePicker/timepicker.types";
7
+
8
+ export type DateTimeSegmentsProps = {
9
+ /** The instant the segments display, or `undefined` for an empty field. */
10
+ value: Temporal.Instant | undefined;
11
+ /**
12
+ * Fires with a complete instant, or `undefined` the moment the segments stop
13
+ * describing one. Never fires a partial value.
14
+ */
15
+ onChange: (instant: Temporal.Instant | undefined) => void;
16
+ /** The zone the segments are read and written in. */
17
+ timeZone: string;
18
+ order?: DateSegmentOrder | undefined;
19
+ clockFormat?: ClockFormat | undefined;
20
+ showSeconds?: boolean | undefined;
21
+ isDisabled?: boolean | undefined;
22
+ isInvalid?: boolean | undefined;
23
+ label?: string | undefined;
24
+ onOpenRequest?: (() => void) | undefined;
25
+ onSubmit?: (() => void) | undefined;
26
+ id?: string | undefined;
27
+ className?: string | undefined;
28
+ };
29
+
30
+ /**
31
+ * The typeable half of `DateTimePicker`: one field of date *and* time segments.
32
+ *
33
+ * Deliberately one `SegmentedField` rather than a date field beside a time
34
+ * field: it is one value, so `Tab` and the digit roll-forward should carry
35
+ * straight from the year into the hour. `152026330p` is January 5th 2026 at
36
+ * 3:30pm, typed without a single tab.
37
+ *
38
+ * The date and time halves reuse the specs and codecs from `DatePicker` and
39
+ * `TimePicker`, so the three fields cannot drift apart in behaviour. What is
40
+ * specific here is the zone: segments are wall-clock, the value is an instant,
41
+ * and this is where that conversion happens.
42
+ *
43
+ * Internal to `DateTimePicker`; not exported from `./index.ts`.
44
+ */
45
+ export function DateTimeSegments({
46
+ value,
47
+ onChange,
48
+ timeZone,
49
+ order = "mdy",
50
+ clockFormat = "12h",
51
+ showSeconds = false,
52
+ label = "Date and time",
53
+ ...rest
54
+ }: DateTimeSegmentsProps) {
55
+ const format = showSeconds ? "HH:mm:ss" : "HH:mm";
56
+ // A space, not a slash: it separates the date from the time rather than one
57
+ // number from the next.
58
+ const spec: SegmentSpec[] = [...dateSpec(order), ...timeSpec(format, clockFormat, " ")];
59
+ const time = timeCodec(format, clockFormat);
60
+
61
+ const toSegments = (instant: Temporal.Instant | undefined): SegmentValues => {
62
+ if (!instant) return { ...dateToSegments(undefined), ...time.toSegments(undefined) };
63
+ const zoned = instant.toZonedDateTimeISO(timeZone);
64
+ return { ...dateToSegments(zoned.toPlainDate()), ...time.toSegments(zoned.toPlainTime()) };
65
+ };
66
+
67
+ const fromSegments = (values: Record<string, number>): Temporal.Instant => {
68
+ const date = dateFromSegments(values);
69
+ const plainTime = time.fromSegments(values);
70
+ return date.toPlainDateTime(plainTime).toZonedDateTime(timeZone).toInstant();
71
+ };
72
+
73
+ /**
74
+ * A pasted string is split at the first space: the date half is read by the
75
+ * date field's rules (ISO always, otherwise the segment order) and the time
76
+ * half by the clock's. Either half alone is accepted, leaving the other empty.
77
+ */
78
+ const parsePaste = (text: string): SegmentValues | null => {
79
+ const trimmed = text.trim();
80
+ // An ISO instant pastes as a whole.
81
+ try {
82
+ if (/\d{4}-\d{2}-\d{2}T/.test(trimmed)) return toSegments(Temporal.Instant.from(trimmed));
83
+ } catch {
84
+ // Not an instant after all; fall through to the halves below.
85
+ }
86
+
87
+ const [datePart, ...timeParts] = trimmed.split(/\s+/);
88
+ const datePasted = datePart ? parseDatePasteIn(order)(datePart) : null;
89
+ const timePasted = timeParts.length > 0 ? time.parsePaste(timeParts.join(" ")) : null;
90
+ if (!datePasted && !timePasted) return null;
91
+
92
+ return {
93
+ ...dateToSegments(undefined),
94
+ ...time.toSegments(undefined),
95
+ ...(datePasted ?? {}),
96
+ ...(timePasted ?? {}),
97
+ };
98
+ };
99
+
100
+ return (
101
+ <SegmentedField<Temporal.Instant>
102
+ spec={spec}
103
+ value={value}
104
+ toSegments={toSegments}
105
+ fromSegments={fromSegments}
106
+ keyOf={(instant) => instant.toString()}
107
+ onChange={onChange}
108
+ parsePaste={parsePaste}
109
+ label={label}
110
+ {...rest}
111
+ />
112
+ );
113
+ }
@@ -1,27 +1,32 @@
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 };
1
+ /**
2
+ * DateTimePicker types.
3
+ *
4
+ * The value is an absolute instant, exchanged as a canonical UTC ISO string
5
+ * (`"2026-08-26T00:30:00Z"`). Input written with a numeric offset is accepted and
6
+ * normalised to the `Z` form, so one instant always has one representation.
7
+ *
8
+ * Date and time constraints are plain dates and wall-clock times, since they
9
+ * describe the picker's grid rather than an absolute moment.
10
+ */
11
+
12
+ import type { DisabledDates, ISODate, ISOInstant, ISOTime, WeekStartsOn } from "../../date-time";
13
+ import type { DateSegmentOrder } from "../DatePicker/datepicker.types";
10
14
 
11
15
  export type DateTimePickerProps = {
12
- // Value (controlled/uncontrolled) - NOW USES INSTANT
13
- value?: Temporal.Instant | undefined;
14
- defaultValue?: Temporal.Instant | undefined;
15
- onChange?: (instant: Temporal.Instant | undefined) => void;
16
+ // Value (controlled/uncontrolled) — an absolute instant, in UTC
17
+ value?: ISOInstant | undefined;
18
+ defaultValue?: ISOInstant | undefined;
19
+ /** Called with a canonical UTC instant string, or undefined when cleared. */
20
+ onChange?: (instant: ISOInstant | undefined) => void;
16
21
 
17
22
  // Date constraints
18
- minDate?: Temporal.PlainDate;
19
- maxDate?: Temporal.PlainDate;
20
- disabledDates?: DisabledDateMatcher | DisabledDateMatcher[];
23
+ minDate?: ISODate;
24
+ maxDate?: ISODate;
25
+ disabledDates?: DisabledDates | DisabledDates[];
21
26
 
22
27
  // Time constraints
23
- minTime?: Temporal.PlainTime;
24
- maxTime?: Temporal.PlainTime;
28
+ minTime?: ISOTime;
29
+ maxTime?: ISOTime;
25
30
  minuteStep?: 1 | 5 | 10 | 15 | 30;
26
31
 
27
32
  // Time format
@@ -29,9 +34,14 @@ export type DateTimePickerProps = {
29
34
  showSeconds?: boolean; // Default: false
30
35
 
31
36
  // Display
32
- placeholder?: string;
33
37
  weekStartsOn?: WeekStartsOn;
34
38
 
39
+ /**
40
+ * Segment order for the date half of the typeable field (default `mdy`).
41
+ * Never inferred from the locale — `08/09` is a different date under each.
42
+ */
43
+ segmentOrder?: DateSegmentOrder;
44
+
35
45
  // Form
36
46
  name?: string;
37
47
 
@@ -1,2 +1,10 @@
1
+ /**
2
+ * Public surface of `@sixthshift/design-system/datetime-picker`.
3
+ *
4
+ * `DisabledDateMatcher` was a Temporal-shaped type and is gone; the ISO
5
+ * equivalent `DisabledDates` is re-exported here.
6
+ */
7
+
8
+ export type { DisabledDates, ISODate, ISOInstant, ISOTime } from "../../date-time";
1
9
  export { DateTimePicker } from "./DateTimePicker";
2
- export type { DateTimePickerProps, DisabledDateMatcher } from "./datetimepicker.types";
10
+ export type { DateTimePickerProps } from "./datetimepicker.types";