@youcan/celeste 0.9.3 → 0.10.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 (534) hide show
  1. package/dist/celeste.css +1030 -634
  2. package/dist/cjs/bar-chart.cjs +2 -0
  3. package/dist/cjs/chart-card.cjs +2 -0
  4. package/dist/cjs/chart-legend.cjs +2 -0
  5. package/dist/cjs/chart-plot.cjs +2 -0
  6. package/dist/cjs/chart-tooltip.cjs +25 -0
  7. package/dist/cjs/chart.cjs +38 -0
  8. package/dist/cjs/chunks/BubbleSelect.cjs +5 -6
  9. package/dist/cjs/chunks/CollapsibleRoot.cjs +3 -4
  10. package/dist/cjs/chunks/Collection.cjs +3 -4
  11. package/dist/cjs/chunks/ComboboxContent.cjs +7 -7
  12. package/dist/cjs/chunks/ComboboxGroup.cjs +4 -5
  13. package/dist/cjs/chunks/ComboboxInput.cjs +3 -4
  14. package/dist/cjs/chunks/ComboboxItem.cjs +7 -7
  15. package/dist/cjs/chunks/ComboboxLabel.cjs +1 -2
  16. package/dist/cjs/chunks/ComboboxRoot.cjs +17 -14
  17. package/dist/cjs/chunks/ComboboxSeparator.cjs +1 -2
  18. package/dist/cjs/chunks/ConfigProvider.cjs +2 -2
  19. package/dist/cjs/chunks/DialogClose.cjs +1 -2
  20. package/dist/cjs/chunks/DialogDescription.cjs +1 -2
  21. package/dist/cjs/chunks/DialogPortal.cjs +10 -10
  22. package/dist/cjs/chunks/DialogRoot.cjs +3 -4
  23. package/dist/cjs/chunks/DialogTitle.cjs +1 -2
  24. package/dist/cjs/chunks/DialogTrigger.cjs +1 -2
  25. package/dist/cjs/chunks/DismissableLayer.cjs +5 -5
  26. package/dist/cjs/chunks/DropdownMenuPortal.cjs +2 -3
  27. package/dist/cjs/chunks/DropdownMenuRoot.cjs +3 -4
  28. package/dist/cjs/chunks/FocusScope.cjs +7 -7
  29. package/dist/cjs/chunks/Label.cjs +1 -2
  30. package/dist/cjs/chunks/MenuAnchor.cjs +1 -2
  31. package/dist/cjs/chunks/MenuContentImpl.cjs +4 -4
  32. package/dist/cjs/chunks/MenuGroup.cjs +2 -3
  33. package/dist/cjs/chunks/MenuItemImpl.cjs +1 -2
  34. package/dist/cjs/chunks/MenuRoot.cjs +8 -8
  35. package/dist/cjs/chunks/MenuSub.cjs +3 -4
  36. package/dist/cjs/chunks/PaginationRoot.cjs +3 -4
  37. package/dist/cjs/chunks/PinInputRoot.cjs +3 -4
  38. package/dist/cjs/chunks/PopoverRoot.cjs +3 -4
  39. package/dist/cjs/chunks/PopperAnchor.cjs +1 -2
  40. package/dist/cjs/chunks/PopperArrow.cjs +2 -3
  41. package/dist/cjs/chunks/PopperContent.cjs +263 -298
  42. package/dist/cjs/chunks/PopperRoot.cjs +2 -3
  43. package/dist/cjs/chunks/Presence.cjs +7 -7
  44. package/dist/cjs/chunks/Primitive.cjs +5 -6
  45. package/dist/cjs/chunks/ProgressIndicator.cjs +4 -5
  46. package/dist/cjs/chunks/RadioGroupRoot.cjs +3 -4
  47. package/dist/cjs/chunks/RovingFocusGroup.cjs +6 -6
  48. package/dist/cjs/chunks/RovingFocusItem.cjs +1 -2
  49. package/dist/cjs/chunks/SelectGroup.cjs +2 -3
  50. package/dist/cjs/chunks/SelectItemAlignedPosition.cjs +9 -9
  51. package/dist/cjs/chunks/TabsRoot.cjs +4 -5
  52. package/dist/cjs/chunks/Teleport.cjs +2 -3
  53. package/dist/cjs/chunks/ToggleGroupRoot.cjs +4 -5
  54. package/dist/cjs/chunks/TooltipProvider.cjs +2 -3
  55. package/dist/cjs/chunks/TooltipRoot.cjs +5 -5
  56. package/dist/cjs/chunks/VisuallyHidden.cjs +1 -2
  57. package/dist/cjs/chunks/VisuallyHiddenInput.cjs +4 -4
  58. package/dist/cjs/chunks/alert.cjs +17 -12
  59. package/dist/cjs/chunks/alpha-slider.cjs +1 -4
  60. package/dist/cjs/chunks/badge.cjs +18 -13
  61. package/dist/cjs/chunks/bar-chart.cjs +10322 -0
  62. package/dist/cjs/chunks/button.cjs +12 -7
  63. package/dist/cjs/chunks/calendar.cjs +39 -33
  64. package/dist/cjs/chunks/chart-card.cjs +69 -0
  65. package/dist/cjs/chunks/chart-legend.cjs +88 -0
  66. package/dist/cjs/chunks/chart-plot.cjs +92 -0
  67. package/dist/cjs/chunks/checkbox-card.cjs +15 -10
  68. package/dist/cjs/chunks/checkbox-label.cjs +11 -6
  69. package/dist/cjs/chunks/checkbox.cjs +18 -12
  70. package/dist/cjs/chunks/clamp.cjs +1 -1
  71. package/dist/cjs/chunks/collapsible-content.cjs +9 -4
  72. package/dist/cjs/chunks/collapsible-trigger.cjs +1 -2
  73. package/dist/cjs/chunks/collapsible.cjs +0 -1
  74. package/dist/cjs/chunks/color-area.cjs +3 -4
  75. package/dist/cjs/chunks/color-picker.cjs +69 -42
  76. package/dist/cjs/chunks/color-swatch.cjs +4 -5
  77. package/dist/cjs/chunks/combobox-anchor.cjs +11 -5
  78. package/dist/cjs/chunks/combobox-empty.cjs +10 -5
  79. package/dist/cjs/chunks/combobox-group.cjs +11 -6
  80. package/dist/cjs/chunks/combobox-input.cjs +11 -6
  81. package/dist/cjs/chunks/combobox-item.cjs +23 -17
  82. package/dist/cjs/chunks/combobox-list.cjs +14 -8
  83. package/dist/cjs/chunks/combobox-root.cjs +2 -3
  84. package/dist/cjs/chunks/combobox-separator.cjs +9 -4
  85. package/dist/cjs/chunks/combobox-trigger.cjs +14 -8
  86. package/dist/cjs/chunks/combobox.cjs +14 -14
  87. package/dist/cjs/chunks/compact-button.cjs +13 -8
  88. package/dist/cjs/chunks/components.cjs +20 -4
  89. package/dist/cjs/chunks/content-divider.cjs +14 -9
  90. package/dist/cjs/chunks/counter-input.cjs +145 -111
  91. package/dist/cjs/chunks/createContext.cjs +1 -2
  92. package/dist/cjs/chunks/date-picker.cjs +14 -9
  93. package/dist/cjs/chunks/digit-input-group.cjs +12 -6
  94. package/dist/cjs/chunks/digit-input-slot.cjs +13 -7
  95. package/dist/cjs/chunks/digit-input.cjs +13 -7
  96. package/dist/cjs/chunks/dist.cjs +120 -230
  97. package/dist/cjs/chunks/dist2.cjs +459 -15492
  98. package/dist/cjs/chunks/dist3.cjs +16177 -0
  99. package/dist/cjs/chunks/dropdown-menu-content.cjs +15 -9
  100. package/dist/cjs/chunks/dropdown-menu-group.cjs +3 -4
  101. package/dist/cjs/chunks/dropdown-menu-item.cjs +13 -7
  102. package/dist/cjs/chunks/dropdown-menu-label.cjs +13 -7
  103. package/dist/cjs/chunks/dropdown-menu-separator.cjs +11 -6
  104. package/dist/cjs/chunks/dropdown-menu-sub-content.cjs +13 -7
  105. package/dist/cjs/chunks/dropdown-menu-sub-trigger.cjs +13 -7
  106. package/dist/cjs/chunks/dropdown-menu-sub.cjs +2 -3
  107. package/dist/cjs/chunks/dropdown-menu-trigger.cjs +3 -4
  108. package/dist/cjs/chunks/dropdown-menu.cjs +11 -5
  109. package/dist/cjs/chunks/extra-settings.cjs +3 -7
  110. package/dist/cjs/chunks/fancy-button.cjs +12 -7
  111. package/dist/cjs/chunks/file-upload-area.cjs +24 -17
  112. package/dist/cjs/chunks/getActiveElement.cjs +1 -1
  113. package/dist/cjs/chunks/handleAndDispatchCustomEvent.cjs +1 -1
  114. package/dist/cjs/chunks/hint-text.cjs +13 -8
  115. package/dist/cjs/chunks/hue-slider.cjs +3 -6
  116. package/dist/cjs/chunks/isValueEqualOrExist.cjs +1 -1
  117. package/dist/cjs/chunks/label2.cjs +15 -10
  118. package/dist/cjs/chunks/link-bubble.cjs +12 -15
  119. package/dist/cjs/chunks/link-button.cjs +14 -9
  120. package/dist/cjs/chunks/menus.cjs +236 -42
  121. package/dist/cjs/chunks/modal-body.cjs +9 -4
  122. package/dist/cjs/chunks/modal-close.cjs +0 -1
  123. package/dist/cjs/chunks/modal-content.cjs +18 -6
  124. package/dist/cjs/chunks/modal-footer.cjs +9 -4
  125. package/dist/cjs/chunks/modal-header.cjs +18 -13
  126. package/dist/cjs/chunks/modal-trigger.cjs +0 -1
  127. package/dist/cjs/chunks/modal.cjs +0 -1
  128. package/dist/cjs/chunks/nullish.cjs +1 -1
  129. package/dist/cjs/chunks/ohash.D__AXeF1.cjs +1 -1
  130. package/dist/cjs/chunks/pagination-content.cjs +14 -9
  131. package/dist/cjs/chunks/pagination-ellipsis.cjs +12 -7
  132. package/dist/cjs/chunks/pagination-first.cjs +11 -5
  133. package/dist/cjs/chunks/pagination-item.cjs +10 -5
  134. package/dist/cjs/chunks/pagination-last.cjs +11 -5
  135. package/dist/cjs/chunks/pagination-next.cjs +11 -5
  136. package/dist/cjs/chunks/pagination-previous.cjs +11 -5
  137. package/dist/cjs/chunks/pagination.cjs +12 -6
  138. package/dist/cjs/chunks/popover-content.cjs +27 -21
  139. package/dist/cjs/chunks/popover-trigger.cjs +3 -4
  140. package/dist/cjs/chunks/popover.cjs +0 -1
  141. package/dist/cjs/chunks/progress-bar.cjs +14 -9
  142. package/dist/cjs/chunks/progress-circle.cjs +10 -5
  143. package/dist/cjs/chunks/radio-group-card.cjs +15 -10
  144. package/dist/cjs/chunks/radio-group-item.cjs +15 -9
  145. package/dist/cjs/chunks/radio-group-label.cjs +11 -6
  146. package/dist/cjs/chunks/radio-group.cjs +9 -3
  147. package/dist/cjs/chunks/range-calendar.cjs +56 -47
  148. package/dist/cjs/chunks/range-picker.cjs +19 -14
  149. package/dist/cjs/chunks/rich-editor.cjs +1130 -262
  150. package/dist/cjs/chunks/{chunk.cjs → rolldown-runtime.cjs} +8 -1
  151. package/dist/cjs/chunks/scroll-area.cjs +13 -8
  152. package/dist/cjs/chunks/scroll-bar.cjs +43 -29
  153. package/dist/cjs/chunks/segmented-control-item.cjs +12 -7
  154. package/dist/cjs/chunks/segmented-control.cjs +11 -5
  155. package/dist/cjs/chunks/select-content.cjs +16 -10
  156. package/dist/cjs/chunks/select-group.cjs +0 -1
  157. package/dist/cjs/chunks/select-icon.cjs +9 -4
  158. package/dist/cjs/chunks/select-item.cjs +17 -11
  159. package/dist/cjs/chunks/select-label.cjs +10 -5
  160. package/dist/cjs/chunks/select-separator.cjs +10 -5
  161. package/dist/cjs/chunks/select-trigger.cjs +12 -7
  162. package/dist/cjs/chunks/select-value.cjs +10 -5
  163. package/dist/cjs/chunks/select.cjs +9 -3
  164. package/dist/cjs/chunks/sheet-close.cjs +9 -4
  165. package/dist/cjs/chunks/sheet-content.cjs +13 -7
  166. package/dist/cjs/chunks/sheet-description.cjs +11 -6
  167. package/dist/cjs/chunks/sheet-footer.cjs +9 -4
  168. package/dist/cjs/chunks/sheet-header.cjs +9 -4
  169. package/dist/cjs/chunks/sheet-title.cjs +11 -6
  170. package/dist/cjs/chunks/sheet-trigger.cjs +0 -1
  171. package/dist/cjs/chunks/sheet.cjs +0 -1
  172. package/dist/cjs/chunks/sidebar-content.cjs +7 -2
  173. package/dist/cjs/chunks/sidebar-element.cjs +8 -3
  174. package/dist/cjs/chunks/sidebar-footer.cjs +7 -2
  175. package/dist/cjs/chunks/sidebar-group-content.cjs +9 -4
  176. package/dist/cjs/chunks/sidebar-group-label.cjs +9 -4
  177. package/dist/cjs/chunks/sidebar-group.cjs +7 -2
  178. package/dist/cjs/chunks/sidebar-header.cjs +7 -2
  179. package/dist/cjs/chunks/sidebar-menu-action.cjs +10 -5
  180. package/dist/cjs/chunks/sidebar-menu-badge.cjs +11 -6
  181. package/dist/cjs/chunks/sidebar-menu-button.cjs +11 -6
  182. package/dist/cjs/chunks/sidebar-menu-item.cjs +7 -2
  183. package/dist/cjs/chunks/sidebar-menu-sub-button.cjs +12 -7
  184. package/dist/cjs/chunks/sidebar-menu-sub-item.cjs +7 -2
  185. package/dist/cjs/chunks/sidebar-menu-sub.cjs +7 -2
  186. package/dist/cjs/chunks/sidebar-menu.cjs +7 -2
  187. package/dist/cjs/chunks/sidebar-provider.cjs +14 -8
  188. package/dist/cjs/chunks/sidebar-trigger.cjs +10 -5
  189. package/dist/cjs/chunks/sidebar.cjs +11 -6
  190. package/dist/cjs/chunks/slider.cjs +38 -24
  191. package/dist/cjs/chunks/social-button.cjs +5 -6
  192. package/dist/cjs/chunks/sonner-alert.cjs +2 -3
  193. package/dist/cjs/chunks/sonner.cjs +4 -4
  194. package/dist/cjs/chunks/status-badge.cjs +13 -8
  195. package/dist/cjs/chunks/switch.cjs +13 -7
  196. package/dist/cjs/chunks/tab-menu-content.cjs +10 -5
  197. package/dist/cjs/chunks/tab-menu-item.cjs +12 -6
  198. package/dist/cjs/chunks/tab-menu-list.cjs +10 -5
  199. package/dist/cjs/chunks/tab-menu.cjs +2 -3
  200. package/dist/cjs/chunks/table-body.cjs +9 -4
  201. package/dist/cjs/chunks/table-caption.cjs +9 -4
  202. package/dist/cjs/chunks/table-cell.cjs +9 -4
  203. package/dist/cjs/chunks/table-footer.cjs +9 -4
  204. package/dist/cjs/chunks/table-head.cjs +9 -4
  205. package/dist/cjs/chunks/table-header.cjs +7 -2
  206. package/dist/cjs/chunks/table-row.cjs +9 -4
  207. package/dist/cjs/chunks/table.cjs +9 -4
  208. package/dist/cjs/chunks/table2.cjs +9 -4
  209. package/dist/cjs/chunks/tag.cjs +16 -11
  210. package/dist/cjs/chunks/text-input-affix.cjs +9 -4
  211. package/dist/cjs/chunks/text-input-button.cjs +9 -4
  212. package/dist/cjs/chunks/text-input.cjs +10 -10
  213. package/dist/cjs/chunks/textarea.cjs +15 -10
  214. package/dist/cjs/chunks/tooltip-content.cjs +38 -32
  215. package/dist/cjs/chunks/tooltip-provider.cjs +0 -1
  216. package/dist/cjs/chunks/tooltip-root.cjs +2 -2
  217. package/dist/cjs/chunks/tooltip-trigger.cjs +1 -2
  218. package/dist/cjs/chunks/tooltip.cjs +17 -11
  219. package/dist/cjs/chunks/use-color-model.cjs +7 -12
  220. package/dist/cjs/chunks/useArrowNavigation.cjs +1 -1
  221. package/dist/cjs/chunks/useCalendar.cjs +669 -598
  222. package/dist/cjs/chunks/useComposing.cjs +1 -2
  223. package/dist/cjs/chunks/useDirection.cjs +1 -2
  224. package/dist/cjs/chunks/useEmitAsProps.cjs +1 -2
  225. package/dist/cjs/chunks/useFocusGuards.cjs +1 -2
  226. package/dist/cjs/chunks/useFormControl.cjs +2 -3
  227. package/dist/cjs/chunks/useForwardExpose.cjs +2 -3
  228. package/dist/cjs/chunks/useForwardProps.cjs +1 -2
  229. package/dist/cjs/chunks/useForwardPropsEmits.cjs +1 -2
  230. package/dist/cjs/chunks/useForwardScopeId.cjs +1 -2
  231. package/dist/cjs/chunks/useHideOthers.cjs +4 -5
  232. package/dist/cjs/chunks/useId.cjs +3 -3
  233. package/dist/cjs/chunks/useKbd.cjs +1 -1
  234. package/dist/cjs/chunks/useLocale.cjs +1 -2
  235. package/dist/cjs/chunks/useNonce.cjs +1 -2
  236. package/dist/cjs/chunks/usePrimitiveElement.cjs +2 -3
  237. package/dist/cjs/chunks/useSize.cjs +2 -3
  238. package/dist/cjs/chunks/useTypeahead.cjs +1 -1
  239. package/dist/cjs/chunks/utils.cjs +1 -1
  240. package/dist/cjs/chunks/utils2.cjs +1 -1
  241. package/dist/cjs/chunks/utils3.cjs +1 -1
  242. package/dist/cjs/color.cjs +1 -3
  243. package/dist/cjs/command-group.cjs +11 -6
  244. package/dist/cjs/command-input.cjs +12 -6
  245. package/dist/cjs/command-item.cjs +10 -4
  246. package/dist/cjs/command-list.cjs +10 -4
  247. package/dist/cjs/command-root.cjs +10 -4
  248. package/dist/cjs/command-separator.cjs +9 -4
  249. package/dist/cjs/config.cjs +0 -1
  250. package/dist/cjs/index.cjs +21 -1
  251. package/dist/cjs/use-chart-motion.cjs +17 -0
  252. package/dist/cjs/use-delegated-props.cjs +0 -1
  253. package/dist/cjs/use-locale.cjs +8 -0
  254. package/dist/cjs/use-sidebar.cjs +1 -1
  255. package/dist/cjs/use-user-select.cjs +0 -1
  256. package/dist/components/chart/bar-chart.d.ts +39 -0
  257. package/dist/components/chart/chart-card.d.ts +26 -0
  258. package/dist/components/chart/chart-legend.d.ts +32 -0
  259. package/dist/components/chart/chart-plot.d.ts +35 -0
  260. package/dist/components/chart/chart-tooltip.d.ts +11 -0
  261. package/dist/components/chart/index.d.ts +9 -0
  262. package/dist/components/color-picker/hue-slider.d.ts +1 -4
  263. package/dist/components/digit-input/digit-input.d.ts +1 -1
  264. package/dist/components/index.d.ts +1 -0
  265. package/dist/components/popover/popover-content.d.ts +1 -1
  266. package/dist/components/progress/progress-bar.d.ts +1 -1
  267. package/dist/components/text-input/text-input.d.ts +1 -0
  268. package/dist/composables/index.d.ts +2 -0
  269. package/dist/composables/use-chart-motion.d.ts +7 -0
  270. package/dist/composables/use-locale.d.ts +2 -0
  271. package/dist/es/bar-chart.js +2 -0
  272. package/dist/es/chart-card.js +2 -0
  273. package/dist/es/chart-legend.js +2 -0
  274. package/dist/es/chart-plot.js +2 -0
  275. package/dist/es/chart-tooltip.js +24 -0
  276. package/dist/es/chart.js +33 -0
  277. package/dist/es/chunks/BubbleSelect.js +5 -5
  278. package/dist/es/chunks/CollapsibleRoot.js +3 -3
  279. package/dist/es/chunks/Collection.js +3 -3
  280. package/dist/es/chunks/ComboboxContent.js +9 -8
  281. package/dist/es/chunks/ComboboxGroup.js +4 -4
  282. package/dist/es/chunks/ComboboxInput.js +3 -3
  283. package/dist/es/chunks/ComboboxItem.js +7 -6
  284. package/dist/es/chunks/ComboboxLabel.js +1 -1
  285. package/dist/es/chunks/ComboboxRoot.js +15 -11
  286. package/dist/es/chunks/ComboboxSeparator.js +1 -1
  287. package/dist/es/chunks/ConfigProvider.js +2 -2
  288. package/dist/es/chunks/DialogClose.js +1 -1
  289. package/dist/es/chunks/DialogDescription.js +1 -1
  290. package/dist/es/chunks/DialogPortal.js +10 -9
  291. package/dist/es/chunks/DialogRoot.js +3 -3
  292. package/dist/es/chunks/DialogTitle.js +1 -1
  293. package/dist/es/chunks/DialogTrigger.js +1 -1
  294. package/dist/es/chunks/DismissableLayer.js +5 -4
  295. package/dist/es/chunks/DropdownMenuPortal.js +2 -2
  296. package/dist/es/chunks/DropdownMenuRoot.js +3 -3
  297. package/dist/es/chunks/FocusScope.js +7 -6
  298. package/dist/es/chunks/Label.js +1 -1
  299. package/dist/es/chunks/MenuAnchor.js +1 -1
  300. package/dist/es/chunks/MenuContentImpl.js +5 -4
  301. package/dist/es/chunks/MenuGroup.js +2 -2
  302. package/dist/es/chunks/MenuItemImpl.js +1 -1
  303. package/dist/es/chunks/MenuRoot.js +6 -5
  304. package/dist/es/chunks/MenuSub.js +3 -3
  305. package/dist/es/chunks/PaginationRoot.js +3 -3
  306. package/dist/es/chunks/PinInputRoot.js +3 -3
  307. package/dist/es/chunks/PopoverRoot.js +3 -3
  308. package/dist/es/chunks/PopperAnchor.js +1 -1
  309. package/dist/es/chunks/PopperArrow.js +3 -3
  310. package/dist/es/chunks/PopperContent.js +261 -321
  311. package/dist/es/chunks/PopperRoot.js +2 -2
  312. package/dist/es/chunks/Presence.js +6 -5
  313. package/dist/es/chunks/Primitive.js +5 -5
  314. package/dist/es/chunks/ProgressIndicator.js +4 -4
  315. package/dist/es/chunks/RadioGroupRoot.js +3 -3
  316. package/dist/es/chunks/RovingFocusGroup.js +6 -5
  317. package/dist/es/chunks/RovingFocusItem.js +1 -1
  318. package/dist/es/chunks/SelectGroup.js +2 -2
  319. package/dist/es/chunks/SelectItemAlignedPosition.js +10 -9
  320. package/dist/es/chunks/TabsRoot.js +4 -4
  321. package/dist/es/chunks/Teleport.js +2 -2
  322. package/dist/es/chunks/ToggleGroupRoot.js +4 -4
  323. package/dist/es/chunks/TooltipProvider.js +2 -2
  324. package/dist/es/chunks/TooltipRoot.js +5 -4
  325. package/dist/es/chunks/VisuallyHidden.js +1 -1
  326. package/dist/es/chunks/VisuallyHiddenInput.js +4 -3
  327. package/dist/es/chunks/alert.js +16 -10
  328. package/dist/es/chunks/alpha-slider.js +1 -3
  329. package/dist/es/chunks/badge.js +17 -11
  330. package/dist/es/chunks/bar-chart.js +10314 -0
  331. package/dist/es/chunks/button.js +11 -5
  332. package/dist/es/chunks/calendar.js +39 -32
  333. package/dist/es/chunks/chart-card.js +63 -0
  334. package/dist/es/chunks/chart-legend.js +82 -0
  335. package/dist/es/chunks/chart-plot.js +87 -0
  336. package/dist/es/chunks/checkbox-card.js +14 -8
  337. package/dist/es/chunks/checkbox-label.js +10 -4
  338. package/dist/es/chunks/checkbox.js +18 -11
  339. package/dist/es/chunks/clamp.js +1 -1
  340. package/dist/es/chunks/collapsible-content.js +9 -3
  341. package/dist/es/chunks/collapsible-trigger.js +1 -1
  342. package/dist/es/chunks/color-area.js +7 -5
  343. package/dist/es/chunks/color-picker.js +68 -40
  344. package/dist/es/chunks/color-swatch.js +3 -3
  345. package/dist/es/chunks/combobox-anchor.js +11 -4
  346. package/dist/es/chunks/combobox-empty.js +9 -3
  347. package/dist/es/chunks/combobox-group.js +10 -4
  348. package/dist/es/chunks/combobox-input.js +10 -4
  349. package/dist/es/chunks/combobox-item.js +22 -15
  350. package/dist/es/chunks/combobox-list.js +13 -6
  351. package/dist/es/chunks/combobox-root.js +1 -1
  352. package/dist/es/chunks/combobox-separator.js +8 -2
  353. package/dist/es/chunks/combobox-trigger.js +13 -6
  354. package/dist/es/chunks/combobox.js +13 -12
  355. package/dist/es/chunks/compact-button.js +12 -6
  356. package/dist/es/chunks/components.js +19 -3
  357. package/dist/es/chunks/content-divider.js +14 -8
  358. package/dist/es/chunks/counter-input.js +141 -106
  359. package/dist/es/chunks/createContext.js +1 -1
  360. package/dist/es/chunks/date-picker.js +13 -7
  361. package/dist/es/chunks/digit-input-group.js +11 -4
  362. package/dist/es/chunks/digit-input-slot.js +12 -5
  363. package/dist/es/chunks/digit-input.js +12 -5
  364. package/dist/es/chunks/dist.js +90 -205
  365. package/dist/es/chunks/dist2.js +434 -15275
  366. package/dist/es/chunks/dist3.js +15890 -0
  367. package/dist/es/chunks/dropdown-menu-content.js +14 -7
  368. package/dist/es/chunks/dropdown-menu-group.js +2 -2
  369. package/dist/es/chunks/dropdown-menu-item.js +12 -5
  370. package/dist/es/chunks/dropdown-menu-label.js +12 -5
  371. package/dist/es/chunks/dropdown-menu-separator.js +10 -4
  372. package/dist/es/chunks/dropdown-menu-sub-content.js +12 -5
  373. package/dist/es/chunks/dropdown-menu-sub-trigger.js +12 -5
  374. package/dist/es/chunks/dropdown-menu-sub.js +2 -2
  375. package/dist/es/chunks/dropdown-menu-trigger.js +2 -2
  376. package/dist/es/chunks/dropdown-menu.js +10 -3
  377. package/dist/es/chunks/extra-settings.js +2 -5
  378. package/dist/es/chunks/fancy-button.js +11 -5
  379. package/dist/es/chunks/file-upload-area.js +23 -15
  380. package/dist/es/chunks/getActiveElement.js +1 -1
  381. package/dist/es/chunks/handleAndDispatchCustomEvent.js +1 -1
  382. package/dist/es/chunks/hint-text.js +12 -6
  383. package/dist/es/chunks/hue-slider.js +3 -5
  384. package/dist/es/chunks/isValueEqualOrExist.js +1 -1
  385. package/dist/es/chunks/label2.js +14 -8
  386. package/dist/es/chunks/link-bubble.js +11 -13
  387. package/dist/es/chunks/link-button.js +13 -7
  388. package/dist/es/chunks/menus.js +236 -41
  389. package/dist/es/chunks/modal-body.js +8 -2
  390. package/dist/es/chunks/modal-content.js +17 -4
  391. package/dist/es/chunks/modal-footer.js +8 -2
  392. package/dist/es/chunks/modal-header.js +17 -11
  393. package/dist/es/chunks/nullish.js +1 -1
  394. package/dist/es/chunks/ohash.D__AXeF1.js +1 -1
  395. package/dist/es/chunks/pagination-content.js +12 -6
  396. package/dist/es/chunks/pagination-ellipsis.js +10 -4
  397. package/dist/es/chunks/pagination-first.js +11 -4
  398. package/dist/es/chunks/pagination-item.js +9 -3
  399. package/dist/es/chunks/pagination-last.js +11 -4
  400. package/dist/es/chunks/pagination-next.js +11 -4
  401. package/dist/es/chunks/pagination-previous.js +11 -4
  402. package/dist/es/chunks/pagination.js +11 -4
  403. package/dist/es/chunks/popover-content.js +28 -21
  404. package/dist/es/chunks/popover-trigger.js +2 -2
  405. package/dist/es/chunks/progress-bar.js +13 -7
  406. package/dist/es/chunks/progress-circle.js +9 -3
  407. package/dist/es/chunks/radio-group-card.js +14 -8
  408. package/dist/es/chunks/radio-group-item.js +15 -8
  409. package/dist/es/chunks/radio-group-label.js +10 -4
  410. package/dist/es/chunks/radio-group.js +9 -2
  411. package/dist/es/chunks/range-calendar.js +56 -46
  412. package/dist/es/chunks/range-picker.js +19 -13
  413. package/dist/es/chunks/rich-editor.js +1129 -260
  414. package/dist/es/chunks/rolldown-runtime.js +34 -0
  415. package/dist/es/chunks/scroll-area.js +12 -6
  416. package/dist/es/chunks/scroll-bar.js +39 -24
  417. package/dist/es/chunks/segmented-control-item.js +11 -5
  418. package/dist/es/chunks/segmented-control.js +10 -3
  419. package/dist/es/chunks/select-content.js +15 -8
  420. package/dist/es/chunks/select-icon.js +8 -2
  421. package/dist/es/chunks/select-item.js +16 -9
  422. package/dist/es/chunks/select-label.js +9 -3
  423. package/dist/es/chunks/select-separator.js +9 -3
  424. package/dist/es/chunks/select-trigger.js +11 -5
  425. package/dist/es/chunks/select-value.js +9 -3
  426. package/dist/es/chunks/select.js +9 -2
  427. package/dist/es/chunks/sheet-close.js +8 -2
  428. package/dist/es/chunks/sheet-content.js +12 -5
  429. package/dist/es/chunks/sheet-description.js +9 -3
  430. package/dist/es/chunks/sheet-footer.js +8 -2
  431. package/dist/es/chunks/sheet-header.js +8 -2
  432. package/dist/es/chunks/sheet-title.js +9 -3
  433. package/dist/es/chunks/sidebar-content.js +7 -1
  434. package/dist/es/chunks/sidebar-element.js +8 -2
  435. package/dist/es/chunks/sidebar-footer.js +7 -1
  436. package/dist/es/chunks/sidebar-group-content.js +8 -2
  437. package/dist/es/chunks/sidebar-group-label.js +9 -3
  438. package/dist/es/chunks/sidebar-group.js +7 -1
  439. package/dist/es/chunks/sidebar-header.js +7 -1
  440. package/dist/es/chunks/sidebar-menu-action.js +10 -4
  441. package/dist/es/chunks/sidebar-menu-badge.js +11 -5
  442. package/dist/es/chunks/sidebar-menu-button.js +10 -4
  443. package/dist/es/chunks/sidebar-menu-item.js +7 -1
  444. package/dist/es/chunks/sidebar-menu-sub-button.js +12 -6
  445. package/dist/es/chunks/sidebar-menu-sub-item.js +7 -1
  446. package/dist/es/chunks/sidebar-menu-sub.js +7 -1
  447. package/dist/es/chunks/sidebar-menu.js +7 -1
  448. package/dist/es/chunks/sidebar-provider.js +10 -3
  449. package/dist/es/chunks/sidebar-trigger.js +9 -3
  450. package/dist/es/chunks/sidebar.js +11 -5
  451. package/dist/es/chunks/slider.js +38 -23
  452. package/dist/es/chunks/social-button.js +4 -4
  453. package/dist/es/chunks/sonner-alert.js +1 -1
  454. package/dist/es/chunks/sonner.js +4 -3
  455. package/dist/es/chunks/status-badge.js +12 -6
  456. package/dist/es/chunks/switch.js +13 -6
  457. package/dist/es/chunks/tab-menu-content.js +9 -3
  458. package/dist/es/chunks/tab-menu-item.js +11 -4
  459. package/dist/es/chunks/tab-menu-list.js +9 -3
  460. package/dist/es/chunks/tab-menu.js +1 -1
  461. package/dist/es/chunks/table-body.js +8 -2
  462. package/dist/es/chunks/table-caption.js +8 -2
  463. package/dist/es/chunks/table-cell.js +8 -2
  464. package/dist/es/chunks/table-footer.js +8 -2
  465. package/dist/es/chunks/table-head.js +8 -2
  466. package/dist/es/chunks/table-header.js +7 -1
  467. package/dist/es/chunks/table-row.js +8 -2
  468. package/dist/es/chunks/table.js +8 -2
  469. package/dist/es/chunks/table2.js +8 -2
  470. package/dist/es/chunks/tag.js +15 -9
  471. package/dist/es/chunks/text-input-affix.js +8 -2
  472. package/dist/es/chunks/text-input-button.js +8 -2
  473. package/dist/es/chunks/text-input.js +10 -9
  474. package/dist/es/chunks/textarea.js +14 -8
  475. package/dist/es/chunks/tooltip-content.js +38 -31
  476. package/dist/es/chunks/tooltip-root.js +2 -1
  477. package/dist/es/chunks/tooltip-trigger.js +1 -1
  478. package/dist/es/chunks/tooltip.js +17 -10
  479. package/dist/es/chunks/use-color-model.js +7 -11
  480. package/dist/es/chunks/useArrowNavigation.js +1 -1
  481. package/dist/es/chunks/useCalendar.js +656 -584
  482. package/dist/es/chunks/useComposing.js +1 -1
  483. package/dist/es/chunks/useDirection.js +1 -1
  484. package/dist/es/chunks/useEmitAsProps.js +1 -1
  485. package/dist/es/chunks/useFocusGuards.js +2 -2
  486. package/dist/es/chunks/useFormControl.js +2 -2
  487. package/dist/es/chunks/useForwardExpose.js +2 -2
  488. package/dist/es/chunks/useForwardProps.js +1 -1
  489. package/dist/es/chunks/useForwardPropsEmits.js +1 -1
  490. package/dist/es/chunks/useForwardScopeId.js +1 -1
  491. package/dist/es/chunks/useHideOthers.js +4 -4
  492. package/dist/es/chunks/useId.js +1 -1
  493. package/dist/es/chunks/useKbd.js +1 -1
  494. package/dist/es/chunks/useLocale.js +1 -1
  495. package/dist/es/chunks/useNonce.js +1 -1
  496. package/dist/es/chunks/usePrimitiveElement.js +2 -2
  497. package/dist/es/chunks/useSize.js +2 -2
  498. package/dist/es/chunks/useTypeahead.js +2 -2
  499. package/dist/es/chunks/utils.js +1 -1
  500. package/dist/es/chunks/utils2.js +1 -1
  501. package/dist/es/chunks/utils3.js +1 -1
  502. package/dist/es/color.js +1 -3
  503. package/dist/es/command-group.js +10 -4
  504. package/dist/es/command-input.js +11 -4
  505. package/dist/es/command-item.js +10 -3
  506. package/dist/es/command-list.js +10 -3
  507. package/dist/es/command-root.js +10 -3
  508. package/dist/es/command-separator.js +8 -2
  509. package/dist/es/index.js +9 -1
  510. package/dist/es/use-chart-motion.js +15 -0
  511. package/dist/es/use-locale.js +8 -0
  512. package/dist/es/use-sidebar.js +1 -1
  513. package/dist/utils/chart.d.ts +6 -0
  514. package/dist/utils/index.d.ts +1 -0
  515. package/package.json +46 -44
  516. package/src/components/chart/bar-chart.vue +383 -0
  517. package/src/components/chart/chart-card.vue +99 -0
  518. package/src/components/chart/chart-legend.vue +164 -0
  519. package/src/components/chart/chart-plot.vue +350 -0
  520. package/src/components/chart/chart-tooltip.ts +35 -0
  521. package/src/components/chart/index.ts +13 -0
  522. package/src/components/chart/stories/bar-chart.stories.ts +319 -0
  523. package/src/components/color-picker/hue-slider.vue +1 -1
  524. package/src/components/file-upload/file-upload-area.vue +1 -1
  525. package/src/components/index.ts +1 -0
  526. package/src/components/text-input/text-input.vue +1 -0
  527. package/src/components/tooltip/tooltip-content.vue +5 -1
  528. package/src/composables/index.ts +2 -0
  529. package/src/composables/use-chart-motion.ts +18 -0
  530. package/src/composables/use-locale.ts +8 -0
  531. package/src/utils/chart.ts +42 -0
  532. package/src/utils/index.ts +1 -0
  533. package/dist/cjs/chunks/core.cjs +0 -325
  534. package/dist/es/chunks/core.js +0 -289
@@ -0,0 +1,319 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3-vite';
2
+ import { onUnmounted } from 'vue';
3
+ import { useLocale } from '@/composables/use-locale';
4
+ import BarChart from '../bar-chart.vue';
5
+ import ChartCard from '../chart-card.vue';
6
+
7
+ const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
8
+
9
+ const channels = MONTHS.map((month, i) => ({
10
+ month,
11
+ online: [190, 210, 185, 240, 255, 281, 268, 309, 335, 318, 372, 426][i] * 1000,
12
+ marketplace: [128, 132, 116, 148, 157, 174, 163, 189, 205, 194, 229, 262][i] * 1000,
13
+ wholesale: [41, 38, 52, 44, 61, 58, 72, 66, 81, 77, 94, 102][i] * 1000,
14
+ }));
15
+
16
+ const periods = MONTHS.slice(0, 6).map((month, i) => ({
17
+ month,
18
+ current: [412, 468, 431, 522, 587, 640][i],
19
+ previous: [366, 402, 418, 455, 498, 511][i],
20
+ }));
21
+
22
+ const DAY = 24 * 60 * 60 * 1000;
23
+ const START = new Date(2026, 3, 1).getTime();
24
+
25
+ const sessions = Array.from({ length: 90 }, (_, i) => {
26
+ const day = new Date(START + i * DAY);
27
+ const weekend = [0, 6].includes(day.getDay()) ? 1.24 : 1;
28
+ const base = (210 + i * 1.35) * weekend;
29
+ const wave = Math.abs(Math.sin(i * 1.7)) * 0.6 + 0.72;
30
+
31
+ return {
32
+ day: day.toLocaleDateString('en-GB', { day: 'numeric', month: 'short' }),
33
+ desktop: Math.round(base * wave),
34
+ mobile: Math.round(base * (wave + 0.14)),
35
+ };
36
+ });
37
+
38
+ const meta: Meta<typeof BarChart> = {
39
+ title: 'Components/Chart/Bar Chart',
40
+ component: BarChart,
41
+ parameters: {
42
+ docs: {
43
+ description: {
44
+ component: `
45
+ Bar chart built on \`unovis\`. Two layouts: \`grouped\` compares two periods side by side,
46
+ \`stacked\` shows how one total splits up.
47
+
48
+ \`\`\`vue
49
+ <script setup lang="ts">
50
+ import { BarChart, formatNumber } from '@youcan/celeste';
51
+
52
+ const data = [{ month: 'Jan', online: 190000, marketplace: 128000 }];
53
+ const series = [
54
+ { key: 'online', name: 'Online store' },
55
+ { key: 'marketplace', name: 'Marketplace' },
56
+ ];
57
+ <\/script>
58
+
59
+ <template>
60
+ <BarChart :data="data" :series="series" category="month" layout="stacked" />
61
+ </template>
62
+ \`\`\`
63
+
64
+ ### Props
65
+
66
+ | Prop | Default | What it does |
67
+ | --- | --- | --- |
68
+ | \`data\` | required | One row per bar. |
69
+ | \`series\` | required | \`{ key, name, color?, muted? }\`. The order is the stack order: the first series sits at the bottom. |
70
+ | \`category\` | required | Key that holds the bar label. |
71
+ | \`layout\` | \`stacked\` | \`stacked\` or \`grouped\`. |
72
+ | \`dense\` | \`false\` | Preset for more than about 40 bars. See the dense story. |
73
+ | \`size\` | \`default\` | Plot height: 240px, or 150px for \`compact\`. |
74
+ | \`state\` | \`ready\` | \`loading\`, \`empty\` and \`error\` replace the plot and keep the height. |
75
+ | \`format\` | \`formatNumber\` | Tooltip and data table values. |
76
+ | \`tickFormat\` | \`formatCompact\` | Value axis ticks. |
77
+ | \`ticks\` | \`4\` | Gridline count. |
78
+ | \`radius\` | \`5\` | Corner radius of the outer bar end. |
79
+ | \`legend\` | \`inline\` above one series | \`inline\`, \`chip\`, \`table\` or \`none\`. |
80
+ | \`total\` | \`true\` | Total row in the tooltip. |
81
+ | \`ariaLabel\` | generated | Overrides the generated description. |
82
+ | \`tableVisible\` | \`false\` | Shows the data table that screen readers always get. |
83
+
84
+ ### Prerequisites
85
+
86
+ Every chart family needs these. They ship with this component:
87
+
88
+ - **Token layer.** \`chart-plot.vue\` maps \`--chart-1\` … \`--chart-8\` onto existing Celeste
89
+ colors, then bridges them to \`--vis-color0\` … \`--vis-color7\`. Series take a color by index,
90
+ never by meaning: index 1 is brand magenta. Set \`muted: true\` on a series to get
91
+ \`--chart-muted\` instead, which is what a previous period uses.
92
+ - **Dark theme.** Flip \`data-theme\`. Nothing in a chart hard-codes a color, so the series step
93
+ one shade lighter and the grid, tooltip and axis text follow the tokens.
94
+ - **Number format.** \`formatNumber\` and \`formatCompact\` run through \`Intl.NumberFormat\`.
95
+ The tag comes from \`useLocale()\`, one writable ref for all of Celeste, \`en-US\` by default:
96
+ \`useLocale().value = 'fr-MA'\`. Charts re-render when it changes. Every numeral in a chart is
97
+ InterDisplay with \`tabular-nums\`, so columns of digits line up and still sound like the rest
98
+ of the UI.
99
+ - **Axes.** Horizontal gridlines only, no axis spines, no tick marks. Bar charts always start
100
+ the value axis at zero.
101
+ - **Tooltip.** \`chartTooltip()\` builds the markup, so a single tooltip and a crosshair tooltip
102
+ can never drift apart. The surface reads the \`--vis-tooltip-*\` bridge.
103
+ - **Legend.** Below the plot, behind a hairline, and only when there is more than one series.
104
+ Clicking an item filters that series out and the value axis rescales.
105
+ - **Motion.** \`useChartMotion()\` returns 0 milliseconds while the reader asks for reduced
106
+ motion, so the data appears at its final state.
107
+ - **Accessibility.** The plot carries \`role="img"\` and a generated \`aria-label\`. A table with
108
+ the same numbers is always in the DOM, hidden until \`tableVisible\`.
109
+
110
+ `,
111
+ },
112
+ },
113
+ },
114
+ };
115
+
116
+ export default meta;
117
+
118
+ type Story = StoryObj<typeof BarChart>;
119
+
120
+ export const Stacked: Story = {
121
+ name: 'Stacked',
122
+ parameters: {
123
+ docs: { description: { story: 'One total, split by channel. Segments touch and only the top corners round, so a column reads as one bar.' } },
124
+ },
125
+ args: {
126
+ data: channels,
127
+ category: 'month',
128
+ layout: 'stacked',
129
+ series: [
130
+ { key: 'online', name: 'Online store' },
131
+ { key: 'marketplace', name: 'Marketplace' },
132
+ { key: 'wholesale', name: 'Wholesale' },
133
+ ],
134
+ },
135
+ };
136
+
137
+ export const Grouped: Story = {
138
+ name: 'Grouped',
139
+ parameters: {
140
+ docs: { description: { story: 'Two periods side by side. The previous period is muted, never a second brand color.' } },
141
+ },
142
+ args: {
143
+ data: periods,
144
+ category: 'month',
145
+ layout: 'grouped',
146
+ series: [
147
+ { key: 'current', name: 'This year' },
148
+ { key: 'previous', name: 'Last year', muted: true },
149
+ ],
150
+ },
151
+ };
152
+
153
+ export const SingleSeries: Story = {
154
+ name: 'Single series',
155
+ parameters: {
156
+ docs: { description: { story: 'One series takes brand magenta and drops the legend. In the grouped layout a zero value keeps a 2px stub, so a zero reads differently from missing data.' } },
157
+ },
158
+ args: {
159
+ data: [
160
+ { day: 'Mon', orders: 128 },
161
+ { day: 'Tue', orders: 96 },
162
+ { day: 'Wed', orders: 0 },
163
+ { day: 'Thu', orders: 143 },
164
+ { day: 'Fri', orders: 187 },
165
+ { day: 'Sat', orders: 212 },
166
+ { day: 'Sun', orders: 164 },
167
+ ],
168
+ category: 'day',
169
+ layout: 'grouped',
170
+ series: [{ key: 'orders', name: 'Orders' }],
171
+ },
172
+ };
173
+
174
+ export const Dense: Story = {
175
+ name: 'Dense',
176
+ parameters: {
177
+ docs: { description: { story: 'One bar per day over 90 days. The preset draws a single bar of the total, thins the bars and the labels, and swaps per-bar hover for a crosshair that scans the plot. The tooltip still lists every series.' } },
178
+ },
179
+ args: {
180
+ data: sessions,
181
+ category: 'day',
182
+ dense: true,
183
+ series: [
184
+ { key: 'desktop', name: 'Desktop' },
185
+ { key: 'mobile', name: 'Mobile' },
186
+ ],
187
+ },
188
+ };
189
+
190
+ export const InACard: Story = {
191
+ name: 'In a chart card',
192
+ parameters: {
193
+ docs: { description: { story: 'The framed container. The card owns the title, the KPI, the delta and the toolbar; the chart draws the plot and the legend.' } },
194
+ },
195
+ render: () => ({
196
+ components: { BarChart, ChartCard },
197
+ setup() {
198
+ return {
199
+ data: channels,
200
+ series: [
201
+ { key: 'online', name: 'Online store' },
202
+ { key: 'marketplace', name: 'Marketplace' },
203
+ { key: 'wholesale', name: 'Wholesale' },
204
+ ],
205
+ };
206
+ },
207
+ template: `
208
+ <ChartCard
209
+ title="Revenue"
210
+ value="688,240 MAD"
211
+ caption="vs. previous 12 months"
212
+ :delta="{ value: '14.5%', direction: 'up' }"
213
+ >
214
+ <BarChart :data="data" :series="series" category="month" />
215
+ </ChartCard>
216
+ `,
217
+ }),
218
+ };
219
+
220
+ export const LegendVariants: Story = {
221
+ name: 'Legend variants',
222
+ render: () => ({
223
+ components: { BarChart },
224
+ setup() {
225
+ const series = [
226
+ { key: 'online', name: 'Online store' },
227
+ { key: 'marketplace', name: 'Marketplace' },
228
+ { key: 'wholesale', name: 'Wholesale' },
229
+ ];
230
+
231
+ return { data: channels, series, variants: ['inline', 'chip', 'table'] as const };
232
+ },
233
+ template: `
234
+ <div style="display: flex; flex-direction: column; gap: 32px;">
235
+ <div v-for="variant in variants" :key="variant">
236
+ <p style="margin-bottom: 12px; font: var(--label-sm);">{{ variant }}</p>
237
+ <BarChart :data="data" :series="series" category="month" :legend="variant" />
238
+ </div>
239
+ </div>
240
+ `,
241
+ }),
242
+ };
243
+
244
+ export const Locale: Story = {
245
+ name: 'Locale',
246
+ parameters: {
247
+ docs: { description: { story: 'Every numeral goes through `Intl.NumberFormat`. Set `useLocale().value` once and all of Celeste follows.' } },
248
+ },
249
+ render: () => ({
250
+ components: { BarChart },
251
+ setup() {
252
+ const locale = useLocale();
253
+ const previous = locale.value;
254
+
255
+ locale.value = 'fr-MA';
256
+ onUnmounted(() => locale.value = previous);
257
+
258
+ return {
259
+ data: channels,
260
+ series: [
261
+ { key: 'online', name: 'Boutique en ligne' },
262
+ { key: 'marketplace', name: 'Place de marché' },
263
+ ],
264
+ };
265
+ },
266
+ template: `<BarChart :data="data" :series="series" category="month" />`,
267
+ }),
268
+ };
269
+
270
+ export const States: Story = {
271
+ name: 'Loading, empty and error',
272
+ parameters: {
273
+ docs: { description: { story: 'The plot keeps its height in every state, so a dashboard never reflows.' } },
274
+ },
275
+ render: () => ({
276
+ components: { BarChart },
277
+ setup() {
278
+ return {
279
+ data: channels,
280
+ series: [{ key: 'online', name: 'Online store' }],
281
+ states: [
282
+ { state: 'loading' },
283
+ { state: 'empty', title: 'No orders yet', description: 'Your first sale will show up here.' },
284
+ { state: 'error', title: 'Could not load revenue', description: 'Try again in a moment.' },
285
+ ] as const,
286
+ };
287
+ },
288
+ template: `
289
+ <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px;">
290
+ <BarChart
291
+ v-for="s in states"
292
+ :key="s.state"
293
+ v-bind="s"
294
+ size="compact"
295
+ :data="data"
296
+ :series="series"
297
+ category="month"
298
+ />
299
+ </div>
300
+ `,
301
+ }),
302
+ };
303
+
304
+ export const DataTable: Story = {
305
+ name: 'Data table fallback',
306
+ parameters: {
307
+ docs: { description: { story: 'The same table a screen reader reads, made visible. Wire it to a "View as table" control in the card toolbar.' } },
308
+ },
309
+ args: {
310
+ data: periods,
311
+ category: 'month',
312
+ layout: 'grouped',
313
+ tableVisible: true,
314
+ series: [
315
+ { key: 'current', name: 'This year' },
316
+ { key: 'previous', name: 'Last year', muted: true },
317
+ ],
318
+ },
319
+ };
@@ -3,7 +3,7 @@ import { computed, onUnmounted, ref, useTemplateRef, watch } from 'vue';
3
3
  import { getAbsolutePosition, getPageXYFromEvent, resolveArrowDirection } from '@/utils/color.ts';
4
4
  import { useUserPageSelection } from './composable/use-user-select.ts';
5
5
 
6
- const hue = defineModel({
6
+ const hue = defineModel<number>({
7
7
  default: 0,
8
8
  });
9
9
 
@@ -42,7 +42,7 @@ const props = withDefaults(defineProps<FileUploadAreaProps>(), {
42
42
 
43
43
  const emit = defineEmits<FileUploadAreaEmit>();
44
44
 
45
- const files = defineModel<File[]>({ default: [] });
45
+ const files = defineModel<File[]>({ default: () => [] });
46
46
 
47
47
  const dropZoneRef = useTemplateRef<HTMLElement>('dropZoneRef');
48
48
  const { isOverDropZone } = useDropZone(dropZoneRef, { onDrop });
@@ -2,6 +2,7 @@ export * from './alert';
2
2
  export * from './badge';
3
3
  export * from './button';
4
4
  export * from './calendar';
5
+ export * from './chart';
5
6
  export * from './checkbox';
6
7
  export * from './collapsible';
7
8
  export * from './color-picker';
@@ -10,6 +10,7 @@ export interface TextInputProps extends /* @vue-ignore */ InputHTMLAttributes {
10
10
  type?: 'text' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'date';
11
11
  size?: 'xs' | 'sm' | 'md';
12
12
  hasError?: boolean;
13
+ autocomplete?: string;
13
14
  }
14
15
 
15
16
  const props = withDefaults(defineProps<TextInputProps>(), {
@@ -44,7 +44,11 @@ function handleDismiss() {
44
44
  :variant="variant"
45
45
  :class="clsx('celeste-tooltip-content', props.class)"
46
46
  >
47
- <i v-if="icon" :class="`celeste-tooltip-content-icon ${icon}`" />
47
+ <i
48
+ v-if="icon"
49
+ class="celeste-tooltip-content-icon"
50
+ :class="icon"
51
+ />
48
52
  <div class="celeste-tooltip-content-box">
49
53
  <span v-if="title" class="celeste-tooltip-content-title">{{ title }}</span>
50
54
  <span v-if="description" class="celeste-tooltip-content-description">
@@ -1,2 +1,4 @@
1
+ export * from './use-chart-motion';
1
2
  export * from './use-delegated-props';
3
+ export * from './use-locale';
2
4
  export * from './use-sidebar';
@@ -0,0 +1,18 @@
1
+ import type { ComputedRef } from 'vue';
2
+ import { useMediaQuery } from '@vueuse/core';
3
+ import { computed } from 'vue';
4
+
5
+ export const CHART_DURATION = {
6
+ bar: 400,
7
+ update: 300,
8
+ hover: 200,
9
+ } as const;
10
+
11
+ export function useChartMotion(
12
+ duration: keyof typeof CHART_DURATION | number = 'update',
13
+ ): ComputedRef<number> {
14
+ const reduced = useMediaQuery('(prefers-reduced-motion: reduce)');
15
+ const ms = typeof duration === 'number' ? duration : CHART_DURATION[duration];
16
+
17
+ return computed(() => reduced.value ? 0 : ms);
18
+ }
@@ -0,0 +1,8 @@
1
+ import type { Ref } from 'vue';
2
+ import { ref } from 'vue';
3
+
4
+ const locale = ref('en-US');
5
+
6
+ export function useLocale(): Ref<string> {
7
+ return locale;
8
+ }
@@ -0,0 +1,42 @@
1
+ import { useLocale } from '@/composables/use-locale';
2
+
3
+ export const CHART_SERIES_COLORS = 8;
4
+
5
+ export type ChartFormat = (value: number, locale?: string) => string;
6
+
7
+ const formatters = new Map<string, Intl.NumberFormat>();
8
+
9
+ function formatter(locale: string | undefined, options: Intl.NumberFormatOptions): Intl.NumberFormat {
10
+ const tag = locale ?? useLocale().value;
11
+ const key = tag + JSON.stringify(options);
12
+
13
+ if (!formatters.has(key))
14
+ formatters.set(key, new Intl.NumberFormat(tag, options));
15
+
16
+ return formatters.get(key)!;
17
+ }
18
+
19
+ export function chartColor(index: number): string {
20
+ return `var(--vis-color${index % CHART_SERIES_COLORS})`;
21
+ }
22
+
23
+ export function formatNumber(value: number, locale?: string): string {
24
+ return formatter(locale, { maximumFractionDigits: 2 }).format(value);
25
+ }
26
+
27
+ export function formatCompact(value: number, locale?: string): string {
28
+ return formatter(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(value);
29
+ }
30
+
31
+ export function niceTicks(max: number, count = 4): number[] {
32
+ if (!(max > 0))
33
+ return [0, 1];
34
+
35
+ const raw = max / count;
36
+ const base = 10 ** Math.floor(Math.log10(raw));
37
+ const norm = raw / base;
38
+ const step = base * (norm >= 7.07 ? 10 : norm >= 3.16 ? 5 : norm >= 1.41 ? 2 : 1);
39
+ const steps = Math.ceil(max / step);
40
+
41
+ return Array.from({ length: steps + 1 }, (_, i) => i * step);
42
+ }
@@ -1,3 +1,4 @@
1
+ export * from './chart';
1
2
  export * from './color';
2
3
  export * from './crypto';
3
4
  export * from './sonner';