@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,4 +1,4 @@
1
- import { useEffect } from "react";
1
+ import { useCallback } from "react";
2
2
  import type { SelectOption } from "./Select";
3
3
 
4
4
  interface UseSelectKeyboardOptions<T extends string> {
@@ -14,6 +14,20 @@ interface UseSelectKeyboardOptions<T extends string> {
14
14
  focusTrigger: () => void;
15
15
  }
16
16
 
17
+ /**
18
+ * Returns the keydown handler for an open Select. It is attached to the element
19
+ * that actually holds focus — the listbox, or the search input in searchable
20
+ * mode — rather than to `document`.
21
+ *
22
+ * A document-level listener fired for every keystroke on the page while any
23
+ * Select was open, which meant a Select could swallow Escape or an arrow key
24
+ * from an overlay stacked above it, and two open Selects raced each other. It
25
+ * also decoupled key handling from focus, so nothing guaranteed the element the
26
+ * user was typing into was the one being navigated. Scoping the handler to the
27
+ * focused element makes both problems structurally impossible and is what lets
28
+ * `aria-activedescendant` mean something: the focused element owns the active
29
+ * option.
30
+ */
17
31
  export function useSelectKeyboard<T extends string>({
18
32
  open,
19
33
  searchable,
@@ -26,8 +40,8 @@ export function useSelectKeyboard<T extends string>({
26
40
  handleSelect,
27
41
  focusTrigger,
28
42
  }: UseSelectKeyboardOptions<T>) {
29
- useEffect(() => {
30
- const handleKeyDown = (event: KeyboardEvent) => {
43
+ return useCallback(
44
+ (event: React.KeyboardEvent<HTMLElement>) => {
31
45
  if (!open) return;
32
46
 
33
47
  const isTyping = searchable && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;
@@ -101,11 +115,7 @@ export function useSelectKeyboard<T extends string>({
101
115
  }
102
116
  }
103
117
  }
104
- };
105
-
106
- if (open) {
107
- document.addEventListener("keydown", handleKeyDown);
108
- return () => document.removeEventListener("keydown", handleKeyDown);
109
- }
110
- }, [open, searchable, searchValue, highlightedIndex, displayOptions, setOpen, setHighlightedIndex, setSearchValue, handleSelect, focusTrigger]);
118
+ },
119
+ [open, searchable, searchValue, highlightedIndex, displayOptions, setOpen, setHighlightedIndex, setSearchValue, handleSelect, focusTrigger]
120
+ );
111
121
  }
@@ -6,6 +6,16 @@ export type SeparatorProps = React.HTMLAttributes<HTMLDivElement> & {
6
6
  decorative?: boolean;
7
7
  };
8
8
 
9
+ /**
10
+ * Thin dividing line, horizontal or vertical (`orientation`, default
11
+ * `"horizontal"`). Renders a `<div>`, not `<hr>`.
12
+ *
13
+ * `decorative` (default `true`) controls whether it is exposed to assistive
14
+ * tech: decorative renders `role="none"` and no `aria-orientation`, so it is
15
+ * invisible to a screen reader; set `decorative={false}` for a divider that
16
+ * is actually part of the content's structure (e.g. between menu sections),
17
+ * which renders `role="separator"` and `aria-orientation` instead.
18
+ */
9
19
  const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => (
10
20
  <div
11
21
  ref={ref}
@@ -1,14 +1,14 @@
1
1
  import { FloatingFocusManager, useDismiss, useFloating, useInteractions, useRole } from "@floating-ui/react";
2
2
  import { useMergedFloatingRef, usePresence } from "@sixthshift/design-system/hooks";
3
3
  import { cn } from "@sixthshift/design-system/utils";
4
- import { type HTMLAttributes, type ReactNode, useCallback, useEffect, useMemo } from "react";
4
+ import { forwardRef, type HTMLAttributes, type ReactNode, useCallback, useEffect, useId, useMemo, useState } from "react";
5
5
  import { SheetBody, SheetContext, SheetFooter, SheetHeader } from "./components";
6
6
 
7
7
  // =============================================================================
8
8
  // Types
9
9
  // =============================================================================
10
10
 
11
- export type SheetProps = Pick<HTMLAttributes<HTMLDivElement>, "className" | "style"> & {
11
+ export type SheetProps = Pick<HTMLAttributes<HTMLDivElement>, "className" | "style" | "aria-label" | "aria-labelledby" | "aria-describedby"> & {
12
12
  /** Whether the sheet is open. Sheet owns its own mount lifecycle so exit animations can play. */
13
13
  open: boolean;
14
14
  /** Called when the sheet requests a state change (Esc, outside press, X button). */
@@ -41,94 +41,125 @@ const sizeClasses = {
41
41
  // Sheet
42
42
  // =============================================================================
43
43
 
44
- const SheetRoot = ({
45
- open,
46
- onOpenChange,
47
- side = "right",
48
- size = "md",
49
- dismissable = true,
50
- dismissOnOutsidePress = false,
51
- closable,
52
- className,
53
- style,
54
- children,
55
- }: SheetProps) => {
56
- const { ref: presenceRef, state, isMounted, show, hide } = usePresence();
57
-
58
- // Drive presence from the controlled `open` prop.
59
- // When `open` flips to false, we play the exit animation, then unmount.
60
- useEffect(() => {
61
- if (open) {
62
- show();
63
- } else if (isMounted) {
64
- hide();
65
- }
66
- }, [open, isMounted, show, hide]);
67
-
68
- const requestClose = useCallback(() => {
69
- onOpenChange(false);
70
- }, [onOpenChange]);
71
-
72
- const { refs, context } = useFloating({
73
- open,
74
- onOpenChange: (nextOpen) => {
75
- if (!nextOpen) requestClose();
44
+ const SheetRoot = forwardRef<HTMLDivElement, SheetProps>(
45
+ (
46
+ {
47
+ open,
48
+ onOpenChange,
49
+ side = "right",
50
+ size = "md",
51
+ dismissable = true,
52
+ dismissOnOutsidePress = false,
53
+ closable,
54
+ className,
55
+ style,
56
+ children,
57
+ "aria-label": ariaLabel,
58
+ "aria-labelledby": ariaLabelledBy,
59
+ "aria-describedby": ariaDescribedBy,
76
60
  },
77
- });
78
-
79
- const mergedRef = useMergedFloatingRef(refs, presenceRef);
80
-
81
- const dismiss = useDismiss(context, {
82
- enabled: dismissable,
83
- escapeKey: true,
84
- outsidePress: dismissOnOutsidePress,
85
- outsidePressEvent: "mousedown",
86
- });
87
-
88
- const role = useRole(context, { role: "dialog" });
89
-
90
- const { getFloatingProps } = useInteractions([dismiss, role]);
91
-
92
- const sheetContextValue = useMemo(() => ({ onClose: requestClose, closable }), [requestClose, closable]);
93
-
94
- if (!isMounted) return null;
95
-
96
- const isEntering = state === "entering";
97
- const isExiting = state === "exiting";
98
-
99
- return (
100
- <FloatingFocusManager context={context} modal={false}>
101
- <div
102
- ref={mergedRef}
103
- tabIndex={-1}
104
- data-state={state}
105
- data-side={side}
106
- className={cn(
107
- "fixed top-0 bottom-0 z-sheet flex flex-col overflow-hidden bg-bg-normal outline-hidden",
108
- "border-border-normal shadow-lg",
109
- side === "right" ? "right-0 border-l" : "left-0 border-r",
110
- sizeClasses[size],
111
- "max-sm:inset-x-0",
112
- isEntering && side === "right" && "animate-slide-right-in",
113
- isExiting && side === "right" && "animate-slide-right-out",
114
- isEntering && side === "left" && "animate-slide-left-in",
115
- isExiting && side === "left" && "animate-slide-left-out",
116
- className
117
- )}
118
- style={style}
119
- {...getFloatingProps({})}
120
- >
121
- <SheetContext.Provider value={sheetContextValue}>{children}</SheetContext.Provider>
122
- </div>
123
- </FloatingFocusManager>
124
- );
125
- };
61
+ ref
62
+ ) => {
63
+ const { ref: presenceRef, state, isMounted, show, hide } = usePresence();
64
+
65
+ // Drive presence from the controlled `open` prop.
66
+ // When `open` flips to false, we play the exit animation, then unmount.
67
+ useEffect(() => {
68
+ if (open) {
69
+ show();
70
+ } else if (isMounted) {
71
+ hide();
72
+ }
73
+ }, [open, isMounted, show, hide]);
74
+
75
+ const requestClose = useCallback(() => {
76
+ onOpenChange(false);
77
+ }, [onOpenChange]);
78
+
79
+ const { refs, context } = useFloating({
80
+ open,
81
+ onOpenChange: (nextOpen) => {
82
+ if (!nextOpen) requestClose();
83
+ },
84
+ });
85
+
86
+ const mergedRef = useMergedFloatingRef<HTMLDivElement>(refs, presenceRef, ref);
87
+
88
+ const dismiss = useDismiss(context, {
89
+ enabled: dismissable,
90
+ escapeKey: true,
91
+ outsidePress: dismissOnOutsidePress,
92
+ outsidePressEvent: "mousedown",
93
+ });
94
+
95
+ const role = useRole(context, { role: "dialog" });
96
+
97
+ const { getFloatingProps } = useInteractions([dismiss, role]);
98
+
99
+ // Named from its header, same contract as Modal — see SheetContext.
100
+ const titleId = useId();
101
+ const [hasTitle, setHasTitle] = useState(false);
102
+ const registerTitle = useCallback((present: boolean) => setHasTitle(present), []);
103
+
104
+ // `aria-labelledby` beats `aria-label` in the name computation, so a caller
105
+ // who passes a label must not also be pointed at the header — they would
106
+ // never see their own string win.
107
+ const labelledBy = ariaLabelledBy ?? (ariaLabel || !hasTitle ? undefined : titleId);
108
+
109
+ const sheetContextValue = useMemo(() => ({ onClose: requestClose, closable, titleId, registerTitle }), [requestClose, closable, titleId, registerTitle]);
110
+
111
+ if (!isMounted) return null;
112
+
113
+ const isEntering = state === "entering";
114
+ const isExiting = state === "exiting";
115
+
116
+ return (
117
+ <FloatingFocusManager context={context} modal={false}>
118
+ <div
119
+ ref={mergedRef}
120
+ // Explicit, though `getFloatingProps` also supplies it from `useRole`:
121
+ // the ARIA attributes below are only valid on a dialog, and static
122
+ // analysis cannot see a role that arrives through a spread. Matches Modal.
123
+ role="dialog"
124
+ aria-label={ariaLabel}
125
+ aria-labelledby={labelledBy}
126
+ aria-describedby={ariaDescribedBy}
127
+ tabIndex={-1}
128
+ data-state={state}
129
+ data-side={side}
130
+ className={cn(
131
+ "sheet fixed top-0 bottom-0 z-sheet flex flex-col overflow-hidden bg-(--sheet-bg) outline-hidden",
132
+ "border-(color:--sheet-border) shadow-lg",
133
+ side === "right" ? "right-0 border-l" : "left-0 border-r",
134
+ sizeClasses[size],
135
+ "max-sm:inset-x-0",
136
+ isEntering && side === "right" && "animate-slide-right-in",
137
+ isExiting && side === "right" && "animate-slide-right-out",
138
+ isEntering && side === "left" && "animate-slide-left-in",
139
+ isExiting && side === "left" && "animate-slide-left-out",
140
+ className
141
+ )}
142
+ style={style}
143
+ {...getFloatingProps({})}
144
+ >
145
+ <SheetContext.Provider value={sheetContextValue}>{children}</SheetContext.Provider>
146
+ </div>
147
+ </FloatingFocusManager>
148
+ );
149
+ }
150
+ );
126
151
  SheetRoot.displayName = "Sheet";
127
152
 
128
153
  // =============================================================================
129
154
  // Compound Component Export
130
155
  // =============================================================================
131
156
 
157
+ /**
158
+ * NOTE: Storybook shows the copy in Sheet.stories.tsx
159
+ * (`parameters.docs.description.component`), not this comment. react-docgen
160
+ * cannot extract a description from this declaration shape, so keeping a
161
+ * second copy here would only drift. Edit the stories file.
162
+ */
132
163
  export const Sheet = Object.assign(SheetRoot, {
133
164
  Header: SheetHeader,
134
165
  Body: SheetBody,
@@ -5,6 +5,16 @@ export type OnClose = (event?: MouseEvent<Element> | KeyboardEvent<Element>) =>
5
5
  interface SheetContextValue {
6
6
  onClose: OnClose;
7
7
  closable?: boolean | undefined;
8
+ /**
9
+ * The id `Sheet.Header` stamps on itself so the dialog can name itself from
10
+ * its own title instead of being announced as a bare "dialog".
11
+ */
12
+ titleId?: string;
13
+ /**
14
+ * The header reports its presence — a headerless sheet must not point
15
+ * `aria-labelledby` at an element that never rendered.
16
+ */
17
+ registerTitle?: (present: boolean) => void;
8
18
  }
9
19
 
10
20
  export const SheetContext = createContext<SheetContextValue | null>(null);
@@ -4,6 +4,6 @@ import * as React from "react";
4
4
  export type SheetFooterProps = React.HTMLAttributes<HTMLDivElement>;
5
5
 
6
6
  export const SheetFooter = React.forwardRef<HTMLDivElement, SheetFooterProps>(({ className, ...props }, ref) => (
7
- <div ref={ref} className={cn("flex items-center border-border-normal border-t p-4", className)} {...props} />
7
+ <div ref={ref} className={cn("sheet-footer border-(color:--sheet-footer-border) flex items-center border-t p-4", className)} {...props} />
8
8
  ));
9
9
  SheetFooter.displayName = "SheetFooter";
@@ -5,20 +5,35 @@ import { SheetContext } from "./SheetContext";
5
5
 
6
6
  export type SheetHeaderProps = React.HTMLAttributes<HTMLDivElement>;
7
7
 
8
- export const SheetHeader = React.forwardRef<HTMLDivElement, SheetHeaderProps>(({ className, children, ...props }, ref) => {
8
+ export const SheetHeader = React.forwardRef<HTMLDivElement, SheetHeaderProps>(({ className, children, id, ...props }, ref) => {
9
9
  const context = React.useContext(SheetContext);
10
10
  const closable = context?.closable;
11
11
  const onClose = context?.onClose;
12
+ const registerTitle = context?.registerTitle;
13
+
14
+ // Report the title to the sheet so it can name itself, and withdraw it on
15
+ // unmount. A caller-supplied `id` wins over the generated one — which the
16
+ // sheet can no longer resolve, so it is told there is no title to point at.
17
+ const ownsTitleId = id === undefined;
18
+ React.useEffect(() => {
19
+ registerTitle?.(ownsTitleId);
20
+ return () => registerTitle?.(false);
21
+ }, [registerTitle, ownsTitleId]);
12
22
 
13
23
  return (
14
- <div ref={ref} className={cn("flex flex-col space-y-1.5 border-border-normal border-b p-6", closable && "pr-12", className)} {...props}>
24
+ <div
25
+ ref={ref}
26
+ id={id ?? context?.titleId}
27
+ className={cn("sheet-header border-(color:--sheet-header-border) flex flex-col space-y-1.5 border-b p-6", closable && "pr-12", className)}
28
+ {...props}
29
+ >
15
30
  {children}
16
31
  {closable && (
17
32
  <button
18
33
  type="button"
19
34
  onClick={onClose}
20
35
  aria-label="Close"
21
- className="absolute top-4 right-4 cursor-pointer rounded-md p-1 text-fg-subtle transition-colors hover:bg-bg-subtle hover:text-fg-normal"
36
+ className="sheet-close absolute top-4 right-4 cursor-pointer rounded-md p-1 text-(--sheet-close-fg) transition-colors hover:bg-(--sheet-close-bg-hovered) hover:text-(--sheet-close-fg-hovered)"
22
37
  >
23
38
  <X size={16} />
24
39
  </button>
@@ -1,6 +1,6 @@
1
1
  import type { Interpolation } from "@sixthshift/design-system/line-chart";
2
2
  import { cn } from "@sixthshift/design-system/utils";
3
- import type * as React from "react";
3
+ import * as React from "react";
4
4
 
5
5
  export type SparklineProps = React.HTMLAttributes<HTMLSpanElement> & {
6
6
  data: number[];
@@ -51,43 +51,47 @@ function buildPath(points: { x: number; y: number }[], interpolation: Interpolat
51
51
  return parts.join(" ");
52
52
  }
53
53
 
54
- export const Sparkline = ({
55
- data,
56
- width = 80,
57
- height = 24,
58
- color = "var(--fg-brand)",
59
- fillArea = false,
60
- interpolation = "monotone",
61
- strokeWidth = 1.5,
62
- className,
63
- ...rest
64
- }: SparklineProps) => {
65
- if (data.length < 2) return null;
54
+ /**
55
+ * A minimal inline trend line for embedding in a table cell or card — an
56
+ * `<svg>` inside an `inline-block` `<span>`, sized to `width`/`height` rather
57
+ * than a chart that lays out its own labels or axes.
58
+ *
59
+ * Requires at least 2 data points; with fewer it renders nothing (`null`).
60
+ * `color` is a single CSS color string (default `var(--fg-brand)`), and
61
+ * `interpolation` reuses the same `Interpolation` type as `LineChart`. The
62
+ * accessible name is a static `aria-label="Trend line"` — it does not
63
+ * describe the actual values.
64
+ */
65
+ export const Sparkline = React.forwardRef<HTMLSpanElement, SparklineProps>(
66
+ ({ data, width = 80, height = 24, color = "var(--fg-brand)", fillArea = false, interpolation = "monotone", strokeWidth = 1.5, className, ...rest }, ref) => {
67
+ if (data.length < 2) return null;
66
68
 
67
- const min = Math.min(...data);
68
- const max = Math.max(...data);
69
- const range = max - min || 1;
69
+ const min = Math.min(...data);
70
+ const max = Math.max(...data);
71
+ const range = max - min || 1;
70
72
 
71
- const padY = 2;
72
- const padX = 1;
73
- const innerW = width - padX * 2;
74
- const innerH = height - padY * 2;
73
+ const padY = 2;
74
+ const padX = 1;
75
+ const innerW = width - padX * 2;
76
+ const innerH = height - padY * 2;
75
77
 
76
- const points = data.map((v, i) => ({
77
- x: padX + (i / (data.length - 1)) * innerW,
78
- y: padY + innerH - ((v - min) / range) * innerH,
79
- }));
78
+ const points = data.map((v, i) => ({
79
+ x: padX + (i / (data.length - 1)) * innerW,
80
+ y: padY + innerH - ((v - min) / range) * innerH,
81
+ }));
80
82
 
81
- const path = buildPath(points, interpolation);
83
+ const path = buildPath(points, interpolation);
82
84
 
83
- return (
84
- <span {...rest} className={cn("inline-block align-middle", className)}>
85
- <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} role="img" aria-label="Trend line">
86
- {fillArea && path && (
87
- <path d={`${path} L ${points[points.length - 1]!.x} ${height - padY} L ${points[0]!.x} ${height - padY} Z`} fill={color} opacity={0.12} />
88
- )}
89
- <path d={path} fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" />
90
- </svg>
91
- </span>
92
- );
93
- };
85
+ return (
86
+ <span ref={ref} {...rest} className={cn("inline-block align-middle", className)}>
87
+ <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} role="img" aria-label="Trend line">
88
+ {fillArea && path && (
89
+ <path d={`${path} L ${points[points.length - 1]!.x} ${height - padY} L ${points[0]!.x} ${height - padY} Z`} fill={color} opacity={0.12} />
90
+ )}
91
+ <path d={path} fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" />
92
+ </svg>
93
+ </span>
94
+ );
95
+ }
96
+ );
97
+ Sparkline.displayName = "Sparkline";
@@ -2,22 +2,47 @@ import { cn } from "@sixthshift/design-system/utils";
2
2
  import { cva, type VariantProps } from "class-variance-authority";
3
3
  import * as React from "react";
4
4
 
5
- const spinnerVariants = cva("animate-spin text-fg-subtle", {
5
+ /**
6
+ * Geometry (size) plus the one `--spinner-fg` component token.
7
+ *
8
+ * The colour used to be `text-fg-subtle`, a semantic token named directly in
9
+ * the class string — the one thing a consumer could not do was recolour a
10
+ * spinner without fighting `className` against it. `--spinner-fg` in
11
+ * src/theme/recipes/spinner.css is now that seam: a consumer overrides the
12
+ * variable, scoped to whatever subtree they like, instead of overriding a
13
+ * class.
14
+ */
15
+ const spinnerVariants = cva("spinner animate-spin text-(--spinner-fg)", {
6
16
  variants: {
7
17
  size: {
8
18
  sm: "h-4 w-4",
9
- default: "h-6 w-6",
19
+ md: "h-6 w-6",
10
20
  lg: "h-8 w-8",
11
21
  xl: "h-12 w-12",
12
22
  },
13
23
  },
14
24
  defaultVariants: {
15
- size: "default",
25
+ size: "md",
16
26
  },
17
27
  });
18
28
 
19
29
  export type SpinnerProps = React.SVGAttributes<SVGElement> & VariantProps<typeof spinnerVariants>;
20
30
 
31
+ /**
32
+ * Animated loading indicator — an inline `<svg>`, `size` scales it (`sm` |
33
+ * `md` | `lg` | `xl`). Use it for a fetching-more state at the bottom
34
+ * of an already-rendered list, and for an initial load inside a container that
35
+ * already reserves its final height, so resolving the load does not jump the
36
+ * layout (see docs/states.md).
37
+ *
38
+ * It is `aria-hidden="true"` unconditionally — it announces nothing to
39
+ * assistive tech on its own, so pair it with visible or `sr-only` text (or a
40
+ * live region) if the loading state needs to be announced.
41
+ *
42
+ * Colour reads the `--spinner-fg` component token
43
+ * (src/theme/recipes/spinner.css) rather than a class name, so a consumer
44
+ * can recolour a spinner scoped to a subtree without fighting `className`.
45
+ */
21
46
  const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(({ className, size, ...props }, ref) => (
22
47
  <svg
23
48
  ref={ref}
@@ -22,6 +22,24 @@ export type SwitchProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "o
22
22
  labelClassName?: string;
23
23
  };
24
24
 
25
+ /**
26
+ * A boolean on/off control rendered as a track with a sliding thumb.
27
+ *
28
+ * Controlled via `checked`/`defaultChecked`/`onCheckedChange`
29
+ * (`useControllableState`). Renders `role="switch"` with `aria-checked`, plus
30
+ * a `data-state="checked" | "unchecked"` attribute the theme recipe
31
+ * (`switch.css`) styles off of.
32
+ *
33
+ * `pending` shows a spinner in the thumb and blocks clicks without disabling
34
+ * the control — it sets `aria-busy` rather than `disabled`, so the switch
35
+ * stays perceivable and focusable while the change is in flight.
36
+ *
37
+ * Pass `label` to wrap the switch in a `<Label>` linked to it by `id`;
38
+ * without one, the caller is responsible for its own accessible name (e.g.
39
+ * `aria-label`). Pass `name` to also render a hidden, read-only checkbox
40
+ * input so the value participates in native form submission (`value`
41
+ * defaults to `"on"`).
42
+ */
25
43
  const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
26
44
  (
27
45
  {
@@ -63,8 +81,7 @@ const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
63
81
  ref={ref}
64
82
  onClick={() => !pending && setChecked(!checked)}
65
83
  className={cn(
66
- "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-normal disabled:cursor-not-allowed disabled:opacity-50",
67
- checked ? "bg-bg-brand" : "bg-bg-subtle",
84
+ "switch peer focus-visible:ring-(color:--switch-ring) inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-(--switch-bg) shadow-xs transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-bg-normal disabled:cursor-not-allowed disabled:opacity-50",
68
85
  pending && "cursor-default",
69
86
  className
70
87
  )}
@@ -72,12 +89,18 @@ const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(
72
89
  >
73
90
  <span
74
91
  className={cn(
75
- "pointer-events-none flex h-4 w-4 items-center justify-center rounded-full bg-bg-normal shadow-lg ring-0 transition-transform",
92
+ "switch-thumb pointer-events-none flex h-4 w-4 items-center justify-center rounded-full bg-(--switch-thumb-bg) shadow-lg ring-0 transition-transform",
76
93
  checked ? "translate-x-4" : "translate-x-0"
77
94
  )}
78
95
  >
79
96
  {pending && (
80
- <svg className="h-2.5 w-2.5 animate-spin text-fg-subtle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="true">
97
+ <svg
98
+ className="h-2.5 w-2.5 animate-spin text-(--switch-thumb-fg)"
99
+ xmlns="http://www.w3.org/2000/svg"
100
+ fill="none"
101
+ viewBox="0 0 24 24"
102
+ aria-hidden="true"
103
+ >
81
104
  <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
82
105
  <path
83
106
  className="opacity-75"
@@ -41,6 +41,12 @@ const TabsRoot = ({ items, value: controlledValue, defaultValue, onValueChange,
41
41
  return <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider>;
42
42
  };
43
43
 
44
+ /**
45
+ * NOTE: Storybook shows the copy in Tabs.stories.tsx
46
+ * (`parameters.docs.description.component`), not this comment. react-docgen
47
+ * cannot extract a description from an `Object.assign` / cast export, so a
48
+ * second copy here would only drift. Edit the stories file.
49
+ */
44
50
  export const Tabs = Object.assign(TabsRoot, {
45
51
  List: TabsList,
46
52
  Panels: TabsPanels,
@@ -1,6 +1,6 @@
1
1
  import { cn } from "@sixthshift/design-system/utils";
2
2
  import type * as React from "react";
3
- import { useCallback, useRef } from "react";
3
+ import { forwardRef, useCallback, useRef } from "react";
4
4
  import { useTabsContext } from "./TabsContext";
5
5
  import { TabsTrigger } from "./TabsTrigger";
6
6
 
@@ -11,7 +11,7 @@ export type TabsListProps = {
11
11
  className?: string;
12
12
  };
13
13
 
14
- export const TabsList = ({ orientation = "horizontal", className }: TabsListProps) => {
14
+ export const TabsList = forwardRef<HTMLDivElement, TabsListProps>(({ orientation = "horizontal", className }, ref) => {
15
15
  const { items, value, onValueChange } = useTabsContext();
16
16
  const triggerRefs = useRef<(HTMLButtonElement | null)[]>([]);
17
17
 
@@ -78,6 +78,7 @@ export const TabsList = ({ orientation = "horizontal", className }: TabsListProp
78
78
 
79
79
  return (
80
80
  <div
81
+ ref={ref}
81
82
  role="tablist"
82
83
  aria-orientation={orientation}
83
84
  className={cn("inline-flex gap-1", orientation === "vertical" ? "flex-col" : "flex-row items-center", className)}
@@ -95,4 +96,5 @@ export const TabsList = ({ orientation = "horizontal", className }: TabsListProp
95
96
  ))}
96
97
  </div>
97
98
  );
98
- };
99
+ });
100
+ TabsList.displayName = "TabsList";
@@ -1,4 +1,5 @@
1
1
  import { cn } from "@sixthshift/design-system/utils";
2
+ import { forwardRef } from "react";
2
3
  import { useTabsContext } from "./TabsContext";
3
4
 
4
5
  export type TabsPanelsProps = {
@@ -6,7 +7,7 @@ export type TabsPanelsProps = {
6
7
  className?: string;
7
8
  };
8
9
 
9
- export const TabsPanels = ({ className }: TabsPanelsProps) => {
10
+ export const TabsPanels = forwardRef<HTMLDivElement, TabsPanelsProps>(({ className }, ref) => {
10
11
  const { items, value, baseId } = useTabsContext();
11
12
 
12
13
  const activeItem = items.find((item) => item.value === value);
@@ -19,8 +20,9 @@ export const TabsPanels = ({ className }: TabsPanelsProps) => {
19
20
  const content = typeof activeItem.content === "function" ? activeItem.content() : activeItem.content;
20
21
 
21
22
  return (
22
- <div id={panelId} role="tabpanel" aria-labelledby={triggerId} className={cn("focus-visible:outline-hidden", className)}>
23
+ <div ref={ref} id={panelId} role="tabpanel" aria-labelledby={triggerId} className={cn("focus-visible:outline-hidden", className)}>
23
24
  {content}
24
25
  </div>
25
26
  );
26
- };
27
+ });
28
+ TabsPanels.displayName = "TabsPanels";