@mbao01/common 0.8.1 → 0.9.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 (269) hide show
  1. package/dist/types/components/ActivityFeed/ActivityFeed.d.ts +6 -0
  2. package/dist/types/components/ActivityFeed/constants.d.ts +6 -0
  3. package/dist/types/components/ActivityFeed/index.d.ts +2 -0
  4. package/dist/types/components/ActivityFeed/types.d.ts +21 -0
  5. package/dist/types/components/Amount/Amount.d.ts +6 -0
  6. package/dist/types/components/Amount/index.d.ts +2 -0
  7. package/dist/types/components/Amount/types.d.ts +19 -0
  8. package/dist/types/components/AnimatedCounter/AnimatedCounter.d.ts +6 -0
  9. package/dist/types/components/AnimatedCounter/index.d.ts +2 -0
  10. package/dist/types/components/AnimatedCounter/types.d.ts +13 -0
  11. package/dist/types/components/AnimatedGroup/AnimatedGroup.d.ts +6 -0
  12. package/dist/types/components/AnimatedGroup/index.d.ts +2 -0
  13. package/dist/types/components/AnimatedGroup/types.d.ts +22 -0
  14. package/dist/types/components/AnimatedList/AnimatedList.d.ts +6 -0
  15. package/dist/types/components/AnimatedList/index.d.ts +2 -0
  16. package/dist/types/components/AnimatedList/types.d.ts +13 -0
  17. package/dist/types/components/BorderBeam/BorderBeam.d.ts +6 -0
  18. package/dist/types/components/BorderBeam/index.d.ts +2 -0
  19. package/dist/types/components/BorderBeam/types.d.ts +13 -0
  20. package/dist/types/components/Box/Box.d.ts +4 -0
  21. package/dist/types/components/Box/constants.d.ts +4 -0
  22. package/dist/types/components/CalendarHeatmap/CalendarHeatmap.d.ts +6 -0
  23. package/dist/types/components/CalendarHeatmap/index.d.ts +2 -0
  24. package/dist/types/components/CalendarHeatmap/types.d.ts +25 -0
  25. package/dist/types/components/Chart/stories/examples/AreaChart.d.ts +6 -0
  26. package/dist/types/components/Chart/stories/examples/BarChart.d.ts +11 -0
  27. package/dist/types/components/Chart/stories/examples/LineChart.d.ts +10 -0
  28. package/dist/types/components/Chart/stories/examples/PieChart.d.ts +5 -0
  29. package/dist/types/components/Chart/stories/examples/RadialChart.d.ts +5 -0
  30. package/dist/types/components/CircularProgress/CircularProgress.d.ts +6 -0
  31. package/dist/types/components/CircularProgress/constants.d.ts +5 -0
  32. package/dist/types/components/CircularProgress/index.d.ts +2 -0
  33. package/dist/types/components/CircularProgress/types.d.ts +17 -0
  34. package/dist/types/components/ComparisonBar/ComparisonBar.d.ts +6 -0
  35. package/dist/types/components/ComparisonBar/constants.d.ts +4 -0
  36. package/dist/types/components/ComparisonBar/index.d.ts +2 -0
  37. package/dist/types/components/ComparisonBar/types.d.ts +21 -0
  38. package/dist/types/components/Confetti/Confetti.d.ts +6 -0
  39. package/dist/types/components/Confetti/index.d.ts +2 -0
  40. package/dist/types/components/Confetti/types.d.ts +19 -0
  41. package/dist/types/components/CountdownTimer/CountdownTimer.d.ts +6 -0
  42. package/dist/types/components/CountdownTimer/index.d.ts +2 -0
  43. package/dist/types/components/CountdownTimer/types.d.ts +13 -0
  44. package/dist/types/components/DataList/DataList.d.ts +6 -0
  45. package/dist/types/components/DataList/constants.d.ts +12 -0
  46. package/dist/types/components/DataList/index.d.ts +2 -0
  47. package/dist/types/components/DataList/types.d.ts +15 -0
  48. package/dist/types/components/DatePicker/DateRangePresetPicker.d.ts +2 -0
  49. package/dist/types/components/DatePicker/index.d.ts +1 -0
  50. package/dist/types/components/DatePicker/types.d.ts +19 -0
  51. package/dist/types/components/Description/Description.d.ts +2 -1
  52. package/dist/types/components/Description/DescriptionGroup.d.ts +6 -0
  53. package/dist/types/components/Description/constants.d.ts +23 -0
  54. package/dist/types/components/Description/index.d.ts +2 -0
  55. package/dist/types/components/Description/types.d.ts +28 -3
  56. package/dist/types/components/Form/DatetimeInput/DatetimeInput.d.ts +1 -1
  57. package/dist/types/components/GlowCard/GlowCard.d.ts +6 -0
  58. package/dist/types/components/GlowCard/index.d.ts +2 -0
  59. package/dist/types/components/GlowCard/types.d.ts +8 -0
  60. package/dist/types/components/GradientText/GradientText.d.ts +6 -0
  61. package/dist/types/components/GradientText/index.d.ts +2 -0
  62. package/dist/types/components/GradientText/types.d.ts +14 -0
  63. package/dist/types/components/Greeting/Greeting.d.ts +6 -0
  64. package/dist/types/components/Greeting/index.d.ts +2 -0
  65. package/dist/types/components/Greeting/types.d.ts +9 -0
  66. package/dist/types/components/KPICard/KPICard.d.ts +6 -0
  67. package/dist/types/components/KPICard/index.d.ts +2 -0
  68. package/dist/types/components/KPICard/types.d.ts +21 -0
  69. package/dist/types/components/Marquee/Marquee.d.ts +6 -0
  70. package/dist/types/components/Marquee/index.d.ts +2 -0
  71. package/dist/types/components/Marquee/types.d.ts +12 -0
  72. package/dist/types/components/Meteors/Meteors.d.ts +6 -0
  73. package/dist/types/components/Meteors/index.d.ts +2 -0
  74. package/dist/types/components/Meteors/types.d.ts +5 -0
  75. package/dist/types/components/MiniAreaChart/MiniAreaChart.d.ts +6 -0
  76. package/dist/types/components/MiniAreaChart/index.d.ts +2 -0
  77. package/dist/types/components/MiniAreaChart/types.d.ts +10 -0
  78. package/dist/types/components/MiniBarChart/MiniBarChart.d.ts +6 -0
  79. package/dist/types/components/MiniBarChart/index.d.ts +2 -0
  80. package/dist/types/components/MiniBarChart/types.d.ts +15 -0
  81. package/dist/types/components/MiniDonutChart/MiniDonutChart.d.ts +6 -0
  82. package/dist/types/components/MiniDonutChart/index.d.ts +2 -0
  83. package/dist/types/components/MiniDonutChart/types.d.ts +15 -0
  84. package/dist/types/components/MiniStackedBar/MiniStackedBar.d.ts +6 -0
  85. package/dist/types/components/MiniStackedBar/index.d.ts +2 -0
  86. package/dist/types/components/MiniStackedBar/types.d.ts +13 -0
  87. package/dist/types/components/NumberTicker/NumberTicker.d.ts +6 -0
  88. package/dist/types/components/NumberTicker/index.d.ts +2 -0
  89. package/dist/types/components/NumberTicker/types.d.ts +11 -0
  90. package/dist/types/components/Pulse/Pulse.d.ts +6 -0
  91. package/dist/types/components/Pulse/constants.d.ts +10 -0
  92. package/dist/types/components/Pulse/index.d.ts +2 -0
  93. package/dist/types/components/Pulse/types.d.ts +11 -0
  94. package/dist/types/components/ShinyButton/ShinyButton.d.ts +6 -0
  95. package/dist/types/components/ShinyButton/index.d.ts +2 -0
  96. package/dist/types/components/ShinyButton/types.d.ts +4 -0
  97. package/dist/types/components/Sparkline/Sparkline.d.ts +6 -0
  98. package/dist/types/components/Sparkline/index.d.ts +2 -0
  99. package/dist/types/components/Sparkline/types.d.ts +17 -0
  100. package/dist/types/components/SpotlightCard/SpotlightCard.d.ts +6 -0
  101. package/dist/types/components/SpotlightCard/index.d.ts +2 -0
  102. package/dist/types/components/SpotlightCard/types.d.ts +7 -0
  103. package/dist/types/components/StatCard/StatCard.d.ts +6 -0
  104. package/dist/types/components/StatCard/index.d.ts +2 -0
  105. package/dist/types/components/StatCard/types.d.ts +15 -0
  106. package/dist/types/components/TextShimmer/TextShimmer.d.ts +6 -0
  107. package/dist/types/components/TextShimmer/index.d.ts +2 -0
  108. package/dist/types/components/TextShimmer/types.d.ts +7 -0
  109. package/dist/types/components/TrendBadge/TrendBadge.d.ts +6 -0
  110. package/dist/types/components/TrendBadge/constants.d.ts +7 -0
  111. package/dist/types/components/TrendBadge/index.d.ts +2 -0
  112. package/dist/types/components/TrendBadge/types.d.ts +15 -0
  113. package/dist/types/components/WidgetShell/WidgetShell.d.ts +6 -0
  114. package/dist/types/components/WidgetShell/index.d.ts +2 -0
  115. package/dist/types/components/WidgetShell/types.d.ts +20 -0
  116. package/dist/types/index.d.ts +33 -0
  117. package/package.json +2 -1
  118. package/src/components/Accordion/constants.ts +1 -1
  119. package/src/components/ActivityFeed/ActivityFeed.tsx +51 -0
  120. package/src/components/ActivityFeed/constants.ts +19 -0
  121. package/src/components/ActivityFeed/index.ts +2 -0
  122. package/src/components/ActivityFeed/types.ts +23 -0
  123. package/src/components/Alert/constants.ts +1 -1
  124. package/src/components/AlertDialog/constants.ts +1 -1
  125. package/src/components/Amount/Amount.tsx +50 -0
  126. package/src/components/Amount/index.ts +2 -0
  127. package/src/components/Amount/types.ts +20 -0
  128. package/src/components/AnimatedCounter/AnimatedCounter.tsx +68 -0
  129. package/src/components/AnimatedCounter/index.ts +2 -0
  130. package/src/components/AnimatedCounter/types.ts +14 -0
  131. package/src/components/AnimatedGroup/AnimatedGroup.tsx +97 -0
  132. package/src/components/AnimatedGroup/index.ts +2 -0
  133. package/src/components/AnimatedGroup/types.ts +21 -0
  134. package/src/components/AnimatedList/AnimatedList.tsx +42 -0
  135. package/src/components/AnimatedList/index.ts +2 -0
  136. package/src/components/AnimatedList/types.ts +15 -0
  137. package/src/components/Badge/constants.ts +1 -1
  138. package/src/components/Banner/constants.ts +1 -1
  139. package/src/components/BorderBeam/BorderBeam.tsx +41 -0
  140. package/src/components/BorderBeam/index.ts +2 -0
  141. package/src/components/BorderBeam/types.ts +14 -0
  142. package/src/components/Box/Box.tsx +8 -2
  143. package/src/components/Box/constants.ts +35 -0
  144. package/src/components/Button/constants.ts +66 -63
  145. package/src/components/CalendarHeatmap/CalendarHeatmap.tsx +141 -0
  146. package/src/components/CalendarHeatmap/index.ts +2 -0
  147. package/src/components/CalendarHeatmap/types.ts +27 -0
  148. package/src/components/Card/constants.ts +24 -21
  149. package/src/components/Carousel/constants.ts +2 -2
  150. package/src/components/Chart/stories/examples/AreaChart.tsx +55 -0
  151. package/src/components/Chart/stories/examples/BarChart.tsx +95 -0
  152. package/src/components/Chart/stories/examples/LineChart.tsx +111 -0
  153. package/src/components/Chart/stories/examples/PieChart.tsx +55 -0
  154. package/src/components/Chart/stories/examples/RadialChart.tsx +65 -0
  155. package/src/components/CircularProgress/CircularProgress.tsx +46 -0
  156. package/src/components/CircularProgress/constants.ts +32 -0
  157. package/src/components/CircularProgress/index.ts +2 -0
  158. package/src/components/CircularProgress/types.ts +18 -0
  159. package/src/components/Command/constants.ts +1 -1
  160. package/src/components/ComparisonBar/ComparisonBar.tsx +65 -0
  161. package/src/components/ComparisonBar/constants.ts +23 -0
  162. package/src/components/ComparisonBar/index.ts +2 -0
  163. package/src/components/ComparisonBar/types.ts +23 -0
  164. package/src/components/Confetti/Confetti.tsx +82 -0
  165. package/src/components/Confetti/index.ts +2 -0
  166. package/src/components/Confetti/types.ts +20 -0
  167. package/src/components/CountdownTimer/CountdownTimer.tsx +91 -0
  168. package/src/components/CountdownTimer/index.ts +2 -0
  169. package/src/components/CountdownTimer/types.ts +14 -0
  170. package/src/components/DataList/DataList.tsx +32 -0
  171. package/src/components/DataList/constants.ts +47 -0
  172. package/src/components/DataList/index.ts +2 -0
  173. package/src/components/DataList/types.ts +17 -0
  174. package/src/components/DatePicker/DateRangePresetPicker.tsx +122 -0
  175. package/src/components/DatePicker/index.ts +1 -0
  176. package/src/components/DatePicker/types.ts +22 -0
  177. package/src/components/Description/Description.tsx +67 -5
  178. package/src/components/Description/DescriptionGroup.tsx +39 -0
  179. package/src/components/Description/constants.ts +128 -0
  180. package/src/components/Description/index.ts +10 -0
  181. package/src/components/Description/types.ts +31 -3
  182. package/src/components/Dialog/constants.ts +2 -2
  183. package/src/components/Dock/constants.ts +2 -2
  184. package/src/components/Drawer/constants.ts +2 -2
  185. package/src/components/Form/Checkbox/constants.ts +1 -1
  186. package/src/components/Form/DatetimeInput/constants.ts +1 -1
  187. package/src/components/Form/Input/constants.ts +1 -1
  188. package/src/components/Form/MultiSelect/constants.ts +1 -1
  189. package/src/components/Form/NativeSelect/constants.ts +1 -1
  190. package/src/components/Form/Radio/constants.ts +1 -1
  191. package/src/components/Form/Select/constants.ts +1 -1
  192. package/src/components/Form/Slider/constants.ts +1 -1
  193. package/src/components/Form/Switch/constants.ts +1 -1
  194. package/src/components/Form/Textarea/constants.ts +1 -1
  195. package/src/components/GlowCard/GlowCard.tsx +46 -0
  196. package/src/components/GlowCard/index.ts +2 -0
  197. package/src/components/GlowCard/types.ts +9 -0
  198. package/src/components/GradientText/GradientText.tsx +36 -0
  199. package/src/components/GradientText/index.ts +2 -0
  200. package/src/components/GradientText/types.ts +15 -0
  201. package/src/components/Greeting/Greeting.tsx +46 -0
  202. package/src/components/Greeting/index.ts +2 -0
  203. package/src/components/Greeting/types.ts +10 -0
  204. package/src/components/KPICard/KPICard.tsx +85 -0
  205. package/src/components/KPICard/index.ts +2 -0
  206. package/src/components/KPICard/types.ts +22 -0
  207. package/src/components/Marquee/Marquee.tsx +45 -0
  208. package/src/components/Marquee/index.ts +2 -0
  209. package/src/components/Marquee/types.ts +13 -0
  210. package/src/components/Menu/Menubar/constants.ts +2 -2
  211. package/src/components/Menu/NavigationMenu/constants.ts +2 -2
  212. package/src/components/Meteors/Meteors.tsx +38 -0
  213. package/src/components/Meteors/index.ts +2 -0
  214. package/src/components/Meteors/types.ts +6 -0
  215. package/src/components/MiniAreaChart/MiniAreaChart.tsx +68 -0
  216. package/src/components/MiniAreaChart/index.ts +2 -0
  217. package/src/components/MiniAreaChart/types.ts +11 -0
  218. package/src/components/MiniBarChart/MiniBarChart.tsx +49 -0
  219. package/src/components/MiniBarChart/index.ts +2 -0
  220. package/src/components/MiniBarChart/types.ts +16 -0
  221. package/src/components/MiniDonutChart/MiniDonutChart.tsx +87 -0
  222. package/src/components/MiniDonutChart/index.ts +2 -0
  223. package/src/components/MiniDonutChart/types.ts +17 -0
  224. package/src/components/MiniStackedBar/MiniStackedBar.tsx +61 -0
  225. package/src/components/MiniStackedBar/index.ts +2 -0
  226. package/src/components/MiniStackedBar/types.ts +15 -0
  227. package/src/components/NumberTicker/NumberTicker.tsx +58 -0
  228. package/src/components/NumberTicker/index.ts +2 -0
  229. package/src/components/NumberTicker/types.ts +12 -0
  230. package/src/components/Pagination/constants.ts +2 -2
  231. package/src/components/Progress/constants.ts +1 -1
  232. package/src/components/Pulse/Pulse.tsx +26 -0
  233. package/src/components/Pulse/constants.ts +55 -0
  234. package/src/components/Pulse/index.ts +2 -0
  235. package/src/components/Pulse/types.ts +12 -0
  236. package/src/components/Resizable/constants.ts +1 -1
  237. package/src/components/Sheet/constants.ts +1 -1
  238. package/src/components/ShinyButton/ShinyButton.tsx +57 -0
  239. package/src/components/ShinyButton/index.ts +2 -0
  240. package/src/components/ShinyButton/types.ts +8 -0
  241. package/src/components/Skeleton/constants.ts +1 -1
  242. package/src/components/Sonner/constants.ts +1 -1
  243. package/src/components/Sparkline/Sparkline.tsx +108 -0
  244. package/src/components/Sparkline/index.ts +2 -0
  245. package/src/components/Sparkline/types.ts +18 -0
  246. package/src/components/SpotlightCard/SpotlightCard.tsx +56 -0
  247. package/src/components/SpotlightCard/index.ts +2 -0
  248. package/src/components/SpotlightCard/types.ts +8 -0
  249. package/src/components/Stat/constants.ts +1 -1
  250. package/src/components/StatCard/StatCard.tsx +59 -0
  251. package/src/components/StatCard/index.ts +2 -0
  252. package/src/components/StatCard/types.ts +16 -0
  253. package/src/components/Tabs/constants.ts +1 -1
  254. package/src/components/TextShimmer/TextShimmer.tsx +34 -0
  255. package/src/components/TextShimmer/index.ts +2 -0
  256. package/src/components/TextShimmer/types.ts +8 -0
  257. package/src/components/Timeline/constants.ts +1 -1
  258. package/src/components/Toggle/constants.ts +1 -1
  259. package/src/components/Tooltip/constants.ts +1 -1
  260. package/src/components/TrendBadge/TrendBadge.tsx +40 -0
  261. package/src/components/TrendBadge/constants.ts +38 -0
  262. package/src/components/TrendBadge/index.ts +2 -0
  263. package/src/components/TrendBadge/types.ts +16 -0
  264. package/src/components/WidgetShell/WidgetShell.tsx +101 -0
  265. package/src/components/WidgetShell/index.ts +2 -0
  266. package/src/components/WidgetShell/types.ts +22 -0
  267. package/src/index.ts +35 -0
  268. package/src/stylesheets/tailwind.css +208 -0
  269. package/src/utilities/getSubpaths/getSubpaths.ts +1 -2
@@ -4,11 +4,17 @@ import { getBoxClasses } from "./constants";
4
4
  import { type BoxProps } from "./types";
5
5
 
6
6
  export const Box = React.forwardRef<HTMLDivElement, BoxProps>(
7
- ({ className, display, position, overflow, children, ...props }, ref) => {
7
+ (
8
+ { className, style, display, position, overflow, rounded, padding, shadow, children, ...props },
9
+ ref
10
+ ) => {
8
11
  return (
9
12
  <div
10
13
  ref={ref}
11
- className={cn(getBoxClasses({ display, position, overflow }), className)}
14
+ className={cn(
15
+ getBoxClasses({ style, display, position, overflow, rounded, padding, shadow }),
16
+ className
17
+ )}
12
18
  {...props}
13
19
  >
14
20
  {children}
@@ -3,6 +3,18 @@ import { createVariants } from "../../utilities";
3
3
 
4
4
  export const getBoxClasses = cva("", {
5
5
  variants: createVariants({
6
+ style: {
7
+ default: "",
8
+ outlined: "border border-base-200",
9
+ bordered: "border-[4px] border-double border-base-200",
10
+ elevated: "border border-base-200 bg-base-100 shadow-md",
11
+ ghost: "bg-base-200/40",
12
+ gradient:
13
+ "relative border-0 bg-base-100 before:absolute before:inset-0 before:-z-10 before:-m-[2px] before:rounded-[inherit] before:bg-linear-to-br before:from-primary before:via-secondary before:to-accent",
14
+ strip: "border border-base-300 ring-1 ring-base-300 ring-offset-[2px] ring-offset-base-200",
15
+ glass: "border border-white/20 bg-white/10 shadow-lg backdrop-blur-md",
16
+ inset: "border border-base-200 bg-base-200/20 shadow-inner",
17
+ },
6
18
  display: {
7
19
  block: "block",
8
20
  inline: "inline",
@@ -30,5 +42,28 @@ export const getBoxClasses = cva("", {
30
42
  "x-hidden": "overflow-x-hidden",
31
43
  "y-hidden": "overflow-y-hidden",
32
44
  },
45
+ rounded: {
46
+ none: "rounded-none",
47
+ sm: "rounded-sm",
48
+ md: "rounded-md",
49
+ lg: "rounded-lg",
50
+ xl: "rounded-xl",
51
+ "2xl": "rounded-2xl",
52
+ full: "rounded-full",
53
+ },
54
+ padding: {
55
+ none: "p-0",
56
+ sm: "p-2",
57
+ md: "p-4",
58
+ lg: "p-6",
59
+ xl: "p-8",
60
+ },
61
+ shadow: {
62
+ none: "shadow-none",
63
+ sm: "shadow-sm",
64
+ md: "shadow-md",
65
+ lg: "shadow-lg",
66
+ xl: "shadow-xl",
67
+ },
33
68
  }),
34
69
  });
@@ -1,66 +1,69 @@
1
1
  import { cva } from "../../libs";
2
2
  import { createVariants } from "../../utilities";
3
3
 
4
- export const getButtonClasses = cva("btn", {
5
- variants: createVariants({
6
- variant: {
7
- accent: "btn-accent",
8
- default: "btn-default",
9
- error: "btn-error",
10
- ghost: "btn-ghost",
11
- info: "btn-info",
12
- neutral: "btn-neutral",
13
- primary: "btn-primary",
14
- secondary: "btn-secondary",
15
- success: "btn-success",
16
- warning: "btn-warning",
17
- },
18
- outline: {
19
- true: "btn-outline",
20
- },
21
- link: {
22
- true: "btn-link",
23
- },
24
- rounded: {
25
- xs: "rounded-xs",
26
- sm: "rounded-sm",
27
- md: "rounded-md",
28
- lg: "rounded-lg",
29
- },
30
- wide: {
31
- true: "btn-wide",
32
- },
33
- size: {
34
- xs: "btn-xs",
35
- sm: "btn-sm",
36
- md: "btn-md",
37
- lg: "btn-lg",
38
- },
39
- isLoading: {
40
- true: "relative overflow-hidden",
41
- },
42
- disabled: {
43
- true: "",
44
- },
45
- }),
46
- compoundVariants: [
47
- {
48
- size: undefined,
49
- className: "min-h-fit h-10",
50
- },
51
- {
52
- rounded: undefined,
53
- className: "rounded-md",
54
- },
55
- {
56
- disabled: true,
57
- isLoading: true,
58
- className: "text-transparent",
59
- },
60
- {
61
- variant: undefined,
62
- outline: true,
63
- className: "border-base-content/20",
64
- },
65
- ],
66
- });
4
+ export const getButtonClasses = cva(
5
+ "btn transition-all duration-200 ease-out active:scale-[0.97]",
6
+ {
7
+ variants: createVariants({
8
+ variant: {
9
+ accent: "btn-accent shadow-sm hover:shadow-md hover:shadow-accent/20",
10
+ default: "btn-default shadow-sm hover:shadow-md",
11
+ error: "btn-error shadow-sm hover:shadow-md hover:shadow-error/20",
12
+ ghost: "btn-ghost hover:bg-base-200/80",
13
+ info: "btn-info shadow-sm hover:shadow-md hover:shadow-info/20",
14
+ neutral: "btn-neutral shadow-sm hover:shadow-md hover:shadow-neutral/20",
15
+ primary: "btn-primary shadow-sm hover:shadow-md hover:shadow-primary/25",
16
+ secondary: "btn-secondary shadow-sm hover:shadow-md hover:shadow-secondary/20",
17
+ success: "btn-success shadow-sm hover:shadow-md hover:shadow-success/20",
18
+ warning: "btn-warning shadow-sm hover:shadow-md hover:shadow-warning/20",
19
+ },
20
+ outline: {
21
+ true: "btn-outline",
22
+ },
23
+ link: {
24
+ true: "btn-link !shadow-none active:scale-100",
25
+ },
26
+ rounded: {
27
+ xs: "rounded-xs",
28
+ sm: "rounded-sm",
29
+ md: "rounded-md",
30
+ lg: "rounded-lg",
31
+ },
32
+ wide: {
33
+ true: "btn-wide",
34
+ },
35
+ size: {
36
+ xs: "btn-xs",
37
+ sm: "btn-sm",
38
+ md: "btn-md",
39
+ lg: "btn-lg",
40
+ },
41
+ isLoading: {
42
+ true: "relative overflow-hidden",
43
+ },
44
+ disabled: {
45
+ true: "",
46
+ },
47
+ }),
48
+ compoundVariants: [
49
+ {
50
+ size: undefined,
51
+ className: "min-h-fit h-10",
52
+ },
53
+ {
54
+ rounded: undefined,
55
+ className: "rounded-md",
56
+ },
57
+ {
58
+ disabled: true,
59
+ isLoading: true,
60
+ className: "text-transparent",
61
+ },
62
+ {
63
+ variant: undefined,
64
+ outline: true,
65
+ className: "border-base-content/20",
66
+ },
67
+ ],
68
+ }
69
+ );
@@ -0,0 +1,141 @@
1
+ import { useMemo } from "react";
2
+ import { cn } from "../../utilities";
3
+ import type { CalendarHeatmapProps } from "./types";
4
+
5
+ const DEFAULT_COLORS: [string, string, string, string, string] = [
6
+ "oklch(0.9 0.02 250)",
7
+ "oklch(0.8 0.08 250)",
8
+ "oklch(0.7 0.12 250)",
9
+ "oklch(0.6 0.16 250)",
10
+ "oklch(0.5 0.2 250)",
11
+ ];
12
+
13
+ const MONTH_LABELS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
14
+ const DAY_LABELS = ["", "Mon", "", "Wed", "", "Fri", ""];
15
+
16
+ const CalendarHeatmap = ({
17
+ data,
18
+ className,
19
+ startDate,
20
+ endDate,
21
+ colors = DEFAULT_COLORS,
22
+ cellSize = 12,
23
+ cellGap = 2,
24
+ showMonthLabels = true,
25
+ showDayLabels = true,
26
+ formatTooltip = (date, value) => `${date}: ${value}`,
27
+ ...props
28
+ }: CalendarHeatmapProps) => {
29
+ const { weeks, monthPositions, maxValue } = useMemo(() => {
30
+ const end = endDate ?? new Date();
31
+ const start = startDate ?? new Date(end.getFullYear() - 1, end.getMonth(), end.getDate() + 1);
32
+
33
+ const dataMap = new Map(data.map((d) => [d.date, d.value]));
34
+ const max = Math.max(1, ...data.map((d) => d.value));
35
+
36
+ const weeksArr: { date: string; value: number; day: number }[][] = [];
37
+ const months: { label: string; x: number }[] = [];
38
+ let currentWeek: { date: string; value: number; day: number }[] = [];
39
+ let lastMonth = -1;
40
+
41
+ const cursor = new Date(start);
42
+ // Align to Sunday
43
+ while (cursor.getDay() !== 0) {
44
+ cursor.setDate(cursor.getDate() - 1);
45
+ }
46
+
47
+ while (cursor <= end) {
48
+ const dateStr = cursor.toISOString().split("T")[0];
49
+ const day = cursor.getDay();
50
+ const month = cursor.getMonth();
51
+
52
+ if (day === 0 && currentWeek.length > 0) {
53
+ weeksArr.push(currentWeek);
54
+ currentWeek = [];
55
+ }
56
+
57
+ if (month !== lastMonth) {
58
+ months.push({ label: MONTH_LABELS[month], x: weeksArr.length });
59
+ lastMonth = month;
60
+ }
61
+
62
+ currentWeek.push({
63
+ date: dateStr,
64
+ value: dataMap.get(dateStr) ?? 0,
65
+ day,
66
+ });
67
+
68
+ cursor.setDate(cursor.getDate() + 1);
69
+ }
70
+ if (currentWeek.length > 0) weeksArr.push(currentWeek);
71
+
72
+ return { weeks: weeksArr, monthPositions: months, maxValue: max };
73
+ }, [data, startDate, endDate]);
74
+
75
+ const getColor = (value: number) => {
76
+ if (value === 0) return "oklch(0.95 0 0)";
77
+ const level = Math.min(4, Math.floor((value / maxValue) * 4));
78
+ return colors[level];
79
+ };
80
+
81
+ const labelWidth = showDayLabels ? 28 : 0;
82
+
83
+ return (
84
+ <div className={cn("inline-flex flex-col gap-1", className)} {...props}>
85
+ {showMonthLabels && (
86
+ <div className="flex" style={{ paddingLeft: labelWidth }}>
87
+ {monthPositions.map((m, i) => (
88
+ <span
89
+ key={i}
90
+ className="text-[10px] text-base-content/50"
91
+ style={{
92
+ position: "relative",
93
+ left: m.x * (cellSize + cellGap),
94
+ width: 0,
95
+ whiteSpace: "nowrap",
96
+ }}
97
+ >
98
+ {m.label}
99
+ </span>
100
+ ))}
101
+ </div>
102
+ )}
103
+ <div className="flex gap-0">
104
+ {showDayLabels && (
105
+ <div
106
+ className="flex flex-col justify-between shrink-0"
107
+ style={{ width: labelWidth, height: 7 * (cellSize + cellGap) - cellGap }}
108
+ >
109
+ {DAY_LABELS.map((label, i) => (
110
+ <span key={i} className="text-[10px] text-base-content/50 leading-none" style={{ height: cellSize }}>
111
+ {label}
112
+ </span>
113
+ ))}
114
+ </div>
115
+ )}
116
+ <div className="flex" style={{ gap: cellGap }}>
117
+ {weeks.map((week, wi) => (
118
+ <div key={wi} className="flex flex-col" style={{ gap: cellGap }}>
119
+ {week.map((cell) => (
120
+ <div
121
+ key={cell.date}
122
+ className="rounded-[2px] transition-colors duration-150"
123
+ style={{
124
+ width: cellSize,
125
+ height: cellSize,
126
+ backgroundColor: getColor(cell.value),
127
+ }}
128
+ title={formatTooltip(cell.date, cell.value)}
129
+ />
130
+ ))}
131
+ </div>
132
+ ))}
133
+ </div>
134
+ </div>
135
+ </div>
136
+ );
137
+ };
138
+
139
+ CalendarHeatmap.displayName = "CalendarHeatmap";
140
+
141
+ export { CalendarHeatmap };
@@ -0,0 +1,2 @@
1
+ export { CalendarHeatmap } from "./CalendarHeatmap";
2
+ export type { CalendarHeatmapProps, HeatmapDataPoint } from "./types";
@@ -0,0 +1,27 @@
1
+ import type { HTMLAttributes } from "react";
2
+
3
+ export type HeatmapDataPoint = {
4
+ date: string; // ISO date string (YYYY-MM-DD)
5
+ value: number;
6
+ };
7
+
8
+ export type CalendarHeatmapProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
9
+ /** Data points with date and value */
10
+ data: HeatmapDataPoint[];
11
+ /** Start date (defaults to 1 year ago) */
12
+ startDate?: Date;
13
+ /** End date (defaults to today) */
14
+ endDate?: Date;
15
+ /** Color scale — array of 5 colors from low to high */
16
+ colors?: [string, string, string, string, string];
17
+ /** Cell size in pixels */
18
+ cellSize?: number;
19
+ /** Gap between cells in pixels */
20
+ cellGap?: number;
21
+ /** Whether to show month labels */
22
+ showMonthLabels?: boolean;
23
+ /** Whether to show day-of-week labels */
24
+ showDayLabels?: boolean;
25
+ /** Tooltip formatter */
26
+ formatTooltip?: (date: string, value: number) => string;
27
+ };
@@ -1,24 +1,27 @@
1
1
  import { cva } from "../../libs";
2
2
  import { createVariants } from "../../utilities";
3
3
 
4
- export const getCardClasses = cva("card", {
5
- variants: createVariants({
6
- border: {
7
- solid: "card-border",
8
- dash: "card-dash",
9
- },
10
- size: {
11
- xs: "card-xs",
12
- sm: "card-sm",
13
- md: "card-md",
14
- lg: "card-lg",
15
- xl: "card-xl",
16
- },
17
- horizontal: {
18
- true: "card-side",
19
- },
20
- overlay: {
21
- true: "image-full",
22
- },
23
- }),
24
- });
4
+ export const getCardClasses = cva(
5
+ "card transition-all duration-300 ease-out hover:shadow-lg",
6
+ {
7
+ variants: createVariants({
8
+ border: {
9
+ solid: "card-border",
10
+ dash: "card-dash",
11
+ },
12
+ size: {
13
+ xs: "card-xs",
14
+ sm: "card-sm",
15
+ md: "card-md",
16
+ lg: "card-lg",
17
+ xl: "card-xl",
18
+ },
19
+ horizontal: {
20
+ true: "card-side",
21
+ },
22
+ overlay: {
23
+ true: "image-full",
24
+ },
25
+ }),
26
+ }
27
+ );
@@ -26,7 +26,7 @@ export const getCarouselItemClasses = cva("min-w-0 shrink-0 grow-0 basis-full",
26
26
  });
27
27
 
28
28
  export const getCarouselNextClasses = cva(
29
- "absolute h-8 w-8 rounded-full p-0 disabled:bg-transparent",
29
+ "absolute h-8 w-8 rounded-full p-0 transition-all duration-200 hover:scale-110 disabled:bg-transparent",
30
30
  {
31
31
  variants: createVariants({
32
32
  orientation: {
@@ -41,7 +41,7 @@ export const getCarouselNextClasses = cva(
41
41
  );
42
42
 
43
43
  export const getCarouselPreviousClasses = cva(
44
- "absolute h-8 w-8 rounded-full p-0 disabled:bg-transparent",
44
+ "absolute h-8 w-8 rounded-full p-0 transition-all duration-200 hover:scale-110 disabled:bg-transparent",
45
45
  {
46
46
  variants: createVariants({
47
47
  orientation: {
@@ -154,3 +154,58 @@ export const WithLegendAreaChartExample = (props: Partial<AreaChartProps>) => {
154
154
  </Chart>
155
155
  );
156
156
  };
157
+
158
+ /**
159
+ * Smooth gradient area chart — a single data series with a lush gradient fill,
160
+ * smooth natural curve, and a tooltip with a value callout. Matches the style
161
+ * of the "Total Sales" chart in premium dashboards.
162
+ */
163
+ export const GradientAreaChartExample = (props: Partial<AreaChartProps>) => {
164
+ const chartConfig = {
165
+ value: {
166
+ label: "Revenue",
167
+ color: "hsl(var(--chart-1))",
168
+ },
169
+ } satisfies ChartConfig;
170
+
171
+ return (
172
+ <Chart config={chartConfig} className="h-[250px] w-full">
173
+ <AreaChart {...props.areaChart}>
174
+ <defs>
175
+ <linearGradient id="gradientFill" x1="0" y1="0" x2="0" y2="1">
176
+ <stop offset="0%" stopColor="var(--color-value)" stopOpacity={0.3} />
177
+ <stop offset="100%" stopColor="var(--color-value)" stopOpacity={0.02} />
178
+ </linearGradient>
179
+ </defs>
180
+ <CartesianGrid vertical={false} strokeDasharray="3 3" />
181
+ <XAxis
182
+ dataKey="month"
183
+ tickLine={false}
184
+ axisLine={false}
185
+ tickMargin={8}
186
+ {...props.xAxis}
187
+ />
188
+ <YAxis
189
+ tickLine={false}
190
+ axisLine={false}
191
+ tickMargin={8}
192
+ tickFormatter={(v: number) => `$${(v / 1000).toFixed(0)}k`}
193
+ {...props.yAxis}
194
+ />
195
+ <ChartTooltip
196
+ content={<ChartTooltipContent indicator="line" />}
197
+ />
198
+ <Area
199
+ dataKey="value"
200
+ type="natural"
201
+ fill="url(#gradientFill)"
202
+ stroke="var(--color-value)"
203
+ strokeWidth={2.5}
204
+ dot={false}
205
+ activeDot={{ r: 5, strokeWidth: 2, fill: "var(--color-value)" }}
206
+ {...props.area}
207
+ />
208
+ </AreaChart>
209
+ </Chart>
210
+ );
211
+ };
@@ -419,3 +419,98 @@ export const NegativeBarChartExample = (props: Partial<BarChartProps>) => {
419
419
  </Chart>
420
420
  );
421
421
  };
422
+
423
+ /**
424
+ * Rounded pill-shaped bar chart — thick bars with fully rounded tops,
425
+ * inspired by modern dashboard UIs. One bar per day of week with
426
+ * the active/current day highlighted.
427
+ */
428
+ export const RoundedBarChartExample = (props: Partial<BarChartProps>) => {
429
+ const chartConfig = {
430
+ visitors: {
431
+ label: "Visitors",
432
+ color: "hsl(var(--chart-1))",
433
+ },
434
+ } satisfies ChartConfig;
435
+
436
+ return (
437
+ <Chart config={chartConfig} className="h-[200px] w-full">
438
+ <BarChart
439
+ accessibilityLayer
440
+ barCategoryGap="25%"
441
+ {...props.barChart}
442
+ >
443
+ <XAxis
444
+ dataKey="day"
445
+ tickLine={false}
446
+ axisLine={false}
447
+ tickMargin={8}
448
+ {...props.xAxis}
449
+ />
450
+ <YAxis hide {...props.yAxis} />
451
+ <ChartTooltip cursor={false} content={<ChartTooltipContent hideLabel />} />
452
+ <Bar dataKey="visitors" radius={[999, 999, 999, 999]} barSize={28} {...props.bar}>
453
+ {(props.barChart as { data: { day: string; visitors: number; active?: boolean }[] })?.data?.map(
454
+ (entry, index) => (
455
+ <Cell
456
+ key={`cell-${index}`}
457
+ fill={entry.active ? "var(--color-visitors)" : "var(--color-visitors)"}
458
+ fillOpacity={entry.active ? 1 : 0.2}
459
+ />
460
+ )
461
+ )}
462
+ </Bar>
463
+ </BarChart>
464
+ </Chart>
465
+ );
466
+ };
467
+
468
+ /**
469
+ * Grouped rounded bar chart — side-by-side bars with rounded tops
470
+ * for comparing two data series.
471
+ */
472
+ export const GroupedRoundedBarChartExample = (props: Partial<BarChartProps>) => {
473
+ const chartConfig = {
474
+ income: {
475
+ label: "Income",
476
+ color: "hsl(var(--chart-1))",
477
+ },
478
+ expenses: {
479
+ label: "Expenses",
480
+ color: "hsl(var(--chart-2))",
481
+ },
482
+ } satisfies ChartConfig;
483
+
484
+ return (
485
+ <Chart config={chartConfig} className="h-[250px] w-full">
486
+ <BarChart accessibilityLayer barCategoryGap="20%" {...props.barChart}>
487
+ <CartesianGrid vertical={false} strokeDasharray="3 3" />
488
+ <XAxis
489
+ dataKey="month"
490
+ tickLine={false}
491
+ axisLine={false}
492
+ tickMargin={8}
493
+ tickFormatter={(value: string) => value.slice(0, 3)}
494
+ {...props.xAxis}
495
+ />
496
+ <YAxis tickLine={false} axisLine={false} tickMargin={8} {...props.yAxis} />
497
+ <ChartTooltip content={<ChartTooltipContent />} />
498
+ <ChartLegend content={<ChartLegendContent />} />
499
+ <Bar
500
+ dataKey="income"
501
+ fill="var(--color-income)"
502
+ radius={[6, 6, 0, 0]}
503
+ barSize={18}
504
+ {...props.bar}
505
+ />
506
+ <Bar
507
+ dataKey="expenses"
508
+ fill="var(--color-expenses)"
509
+ radius={[6, 6, 0, 0]}
510
+ barSize={18}
511
+ {...props.bar}
512
+ />
513
+ </BarChart>
514
+ </Chart>
515
+ );
516
+ };