@mbao01/common 0.8.0 → 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 (276) 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/components/ChartLegend.d.ts +1 -2
  26. package/dist/types/components/Chart/stories/args/index.d.ts +1 -1
  27. package/dist/types/components/Chart/stories/examples/AreaChart.d.ts +6 -0
  28. package/dist/types/components/Chart/stories/examples/BarChart.d.ts +11 -0
  29. package/dist/types/components/Chart/stories/examples/LineChart.d.ts +10 -0
  30. package/dist/types/components/Chart/stories/examples/PieChart.d.ts +5 -0
  31. package/dist/types/components/Chart/stories/examples/RadialChart.d.ts +5 -0
  32. package/dist/types/components/Chart/types.d.ts +1 -1
  33. package/dist/types/components/CircularProgress/CircularProgress.d.ts +6 -0
  34. package/dist/types/components/CircularProgress/constants.d.ts +5 -0
  35. package/dist/types/components/CircularProgress/index.d.ts +2 -0
  36. package/dist/types/components/CircularProgress/types.d.ts +17 -0
  37. package/dist/types/components/ComparisonBar/ComparisonBar.d.ts +6 -0
  38. package/dist/types/components/ComparisonBar/constants.d.ts +4 -0
  39. package/dist/types/components/ComparisonBar/index.d.ts +2 -0
  40. package/dist/types/components/ComparisonBar/types.d.ts +21 -0
  41. package/dist/types/components/Confetti/Confetti.d.ts +6 -0
  42. package/dist/types/components/Confetti/index.d.ts +2 -0
  43. package/dist/types/components/Confetti/types.d.ts +19 -0
  44. package/dist/types/components/CountdownTimer/CountdownTimer.d.ts +6 -0
  45. package/dist/types/components/CountdownTimer/index.d.ts +2 -0
  46. package/dist/types/components/CountdownTimer/types.d.ts +13 -0
  47. package/dist/types/components/DataList/DataList.d.ts +6 -0
  48. package/dist/types/components/DataList/constants.d.ts +12 -0
  49. package/dist/types/components/DataList/index.d.ts +2 -0
  50. package/dist/types/components/DataList/types.d.ts +15 -0
  51. package/dist/types/components/DatePicker/DateRangePresetPicker.d.ts +2 -0
  52. package/dist/types/components/DatePicker/index.d.ts +1 -0
  53. package/dist/types/components/DatePicker/types.d.ts +19 -0
  54. package/dist/types/components/Description/Description.d.ts +2 -1
  55. package/dist/types/components/Description/DescriptionGroup.d.ts +6 -0
  56. package/dist/types/components/Description/constants.d.ts +23 -0
  57. package/dist/types/components/Description/index.d.ts +2 -0
  58. package/dist/types/components/Description/types.d.ts +28 -3
  59. package/dist/types/components/Form/DatetimeInput/DatetimeInput.d.ts +1 -1
  60. package/dist/types/components/GlowCard/GlowCard.d.ts +6 -0
  61. package/dist/types/components/GlowCard/index.d.ts +2 -0
  62. package/dist/types/components/GlowCard/types.d.ts +8 -0
  63. package/dist/types/components/GradientText/GradientText.d.ts +6 -0
  64. package/dist/types/components/GradientText/index.d.ts +2 -0
  65. package/dist/types/components/GradientText/types.d.ts +14 -0
  66. package/dist/types/components/Greeting/Greeting.d.ts +6 -0
  67. package/dist/types/components/Greeting/index.d.ts +2 -0
  68. package/dist/types/components/Greeting/types.d.ts +9 -0
  69. package/dist/types/components/KPICard/KPICard.d.ts +6 -0
  70. package/dist/types/components/KPICard/index.d.ts +2 -0
  71. package/dist/types/components/KPICard/types.d.ts +21 -0
  72. package/dist/types/components/Marquee/Marquee.d.ts +6 -0
  73. package/dist/types/components/Marquee/index.d.ts +2 -0
  74. package/dist/types/components/Marquee/types.d.ts +12 -0
  75. package/dist/types/components/Meteors/Meteors.d.ts +6 -0
  76. package/dist/types/components/Meteors/index.d.ts +2 -0
  77. package/dist/types/components/Meteors/types.d.ts +5 -0
  78. package/dist/types/components/MiniAreaChart/MiniAreaChart.d.ts +6 -0
  79. package/dist/types/components/MiniAreaChart/index.d.ts +2 -0
  80. package/dist/types/components/MiniAreaChart/types.d.ts +10 -0
  81. package/dist/types/components/MiniBarChart/MiniBarChart.d.ts +6 -0
  82. package/dist/types/components/MiniBarChart/index.d.ts +2 -0
  83. package/dist/types/components/MiniBarChart/types.d.ts +15 -0
  84. package/dist/types/components/MiniDonutChart/MiniDonutChart.d.ts +6 -0
  85. package/dist/types/components/MiniDonutChart/index.d.ts +2 -0
  86. package/dist/types/components/MiniDonutChart/types.d.ts +15 -0
  87. package/dist/types/components/MiniStackedBar/MiniStackedBar.d.ts +6 -0
  88. package/dist/types/components/MiniStackedBar/index.d.ts +2 -0
  89. package/dist/types/components/MiniStackedBar/types.d.ts +13 -0
  90. package/dist/types/components/NumberTicker/NumberTicker.d.ts +6 -0
  91. package/dist/types/components/NumberTicker/index.d.ts +2 -0
  92. package/dist/types/components/NumberTicker/types.d.ts +11 -0
  93. package/dist/types/components/Pulse/Pulse.d.ts +6 -0
  94. package/dist/types/components/Pulse/constants.d.ts +10 -0
  95. package/dist/types/components/Pulse/index.d.ts +2 -0
  96. package/dist/types/components/Pulse/types.d.ts +11 -0
  97. package/dist/types/components/Resizable/Resizable.d.ts +1 -1
  98. package/dist/types/components/ShinyButton/ShinyButton.d.ts +6 -0
  99. package/dist/types/components/ShinyButton/index.d.ts +2 -0
  100. package/dist/types/components/ShinyButton/types.d.ts +4 -0
  101. package/dist/types/components/Sparkline/Sparkline.d.ts +6 -0
  102. package/dist/types/components/Sparkline/index.d.ts +2 -0
  103. package/dist/types/components/Sparkline/types.d.ts +17 -0
  104. package/dist/types/components/SpotlightCard/SpotlightCard.d.ts +6 -0
  105. package/dist/types/components/SpotlightCard/index.d.ts +2 -0
  106. package/dist/types/components/SpotlightCard/types.d.ts +7 -0
  107. package/dist/types/components/StatCard/StatCard.d.ts +6 -0
  108. package/dist/types/components/StatCard/index.d.ts +2 -0
  109. package/dist/types/components/StatCard/types.d.ts +15 -0
  110. package/dist/types/components/TextShimmer/TextShimmer.d.ts +6 -0
  111. package/dist/types/components/TextShimmer/index.d.ts +2 -0
  112. package/dist/types/components/TextShimmer/types.d.ts +7 -0
  113. package/dist/types/components/TrendBadge/TrendBadge.d.ts +6 -0
  114. package/dist/types/components/TrendBadge/constants.d.ts +7 -0
  115. package/dist/types/components/TrendBadge/index.d.ts +2 -0
  116. package/dist/types/components/TrendBadge/types.d.ts +15 -0
  117. package/dist/types/components/WidgetShell/WidgetShell.d.ts +6 -0
  118. package/dist/types/components/WidgetShell/index.d.ts +2 -0
  119. package/dist/types/components/WidgetShell/types.d.ts +20 -0
  120. package/dist/types/index.d.ts +33 -0
  121. package/package.json +58 -58
  122. package/src/components/Accordion/constants.ts +1 -1
  123. package/src/components/ActivityFeed/ActivityFeed.tsx +51 -0
  124. package/src/components/ActivityFeed/constants.ts +19 -0
  125. package/src/components/ActivityFeed/index.ts +2 -0
  126. package/src/components/ActivityFeed/types.ts +23 -0
  127. package/src/components/Alert/constants.ts +1 -1
  128. package/src/components/AlertDialog/constants.ts +1 -1
  129. package/src/components/Amount/Amount.tsx +50 -0
  130. package/src/components/Amount/index.ts +2 -0
  131. package/src/components/Amount/types.ts +20 -0
  132. package/src/components/AnimatedCounter/AnimatedCounter.tsx +68 -0
  133. package/src/components/AnimatedCounter/index.ts +2 -0
  134. package/src/components/AnimatedCounter/types.ts +14 -0
  135. package/src/components/AnimatedGroup/AnimatedGroup.tsx +97 -0
  136. package/src/components/AnimatedGroup/index.ts +2 -0
  137. package/src/components/AnimatedGroup/types.ts +21 -0
  138. package/src/components/AnimatedList/AnimatedList.tsx +42 -0
  139. package/src/components/AnimatedList/index.ts +2 -0
  140. package/src/components/AnimatedList/types.ts +15 -0
  141. package/src/components/Badge/constants.ts +1 -1
  142. package/src/components/Banner/constants.ts +1 -1
  143. package/src/components/BorderBeam/BorderBeam.tsx +41 -0
  144. package/src/components/BorderBeam/index.ts +2 -0
  145. package/src/components/BorderBeam/types.ts +14 -0
  146. package/src/components/Box/Box.tsx +8 -2
  147. package/src/components/Box/constants.ts +35 -0
  148. package/src/components/Button/constants.ts +66 -63
  149. package/src/components/CalendarHeatmap/CalendarHeatmap.tsx +141 -0
  150. package/src/components/CalendarHeatmap/index.ts +2 -0
  151. package/src/components/CalendarHeatmap/types.ts +27 -0
  152. package/src/components/Card/constants.ts +24 -21
  153. package/src/components/Carousel/constants.ts +2 -2
  154. package/src/components/Chart/components/ChartTooltip.tsx +1 -1
  155. package/src/components/Chart/stories/args/index.ts +2 -1
  156. package/src/components/Chart/stories/examples/AreaChart.tsx +55 -0
  157. package/src/components/Chart/stories/examples/BarChart.tsx +104 -6
  158. package/src/components/Chart/stories/examples/LineChart.tsx +111 -0
  159. package/src/components/Chart/stories/examples/PieChart.tsx +55 -0
  160. package/src/components/Chart/stories/examples/RadialChart.tsx +65 -0
  161. package/src/components/Chart/types.ts +1 -1
  162. package/src/components/CircularProgress/CircularProgress.tsx +46 -0
  163. package/src/components/CircularProgress/constants.ts +32 -0
  164. package/src/components/CircularProgress/index.ts +2 -0
  165. package/src/components/CircularProgress/types.ts +18 -0
  166. package/src/components/Command/constants.ts +1 -1
  167. package/src/components/ComparisonBar/ComparisonBar.tsx +65 -0
  168. package/src/components/ComparisonBar/constants.ts +23 -0
  169. package/src/components/ComparisonBar/index.ts +2 -0
  170. package/src/components/ComparisonBar/types.ts +23 -0
  171. package/src/components/Confetti/Confetti.tsx +82 -0
  172. package/src/components/Confetti/index.ts +2 -0
  173. package/src/components/Confetti/types.ts +20 -0
  174. package/src/components/CountdownTimer/CountdownTimer.tsx +91 -0
  175. package/src/components/CountdownTimer/index.ts +2 -0
  176. package/src/components/CountdownTimer/types.ts +14 -0
  177. package/src/components/DataList/DataList.tsx +32 -0
  178. package/src/components/DataList/constants.ts +47 -0
  179. package/src/components/DataList/index.ts +2 -0
  180. package/src/components/DataList/types.ts +17 -0
  181. package/src/components/DatePicker/DateRangePresetPicker.tsx +122 -0
  182. package/src/components/DatePicker/index.ts +1 -0
  183. package/src/components/DatePicker/types.ts +22 -0
  184. package/src/components/Description/Description.tsx +67 -5
  185. package/src/components/Description/DescriptionGroup.tsx +39 -0
  186. package/src/components/Description/constants.ts +128 -0
  187. package/src/components/Description/index.ts +10 -0
  188. package/src/components/Description/types.ts +31 -3
  189. package/src/components/Dialog/constants.ts +2 -2
  190. package/src/components/Dock/constants.ts +2 -2
  191. package/src/components/Drawer/constants.ts +2 -2
  192. package/src/components/Form/Checkbox/constants.ts +1 -1
  193. package/src/components/Form/DatetimeInput/constants.ts +1 -1
  194. package/src/components/Form/Input/constants.ts +1 -1
  195. package/src/components/Form/MultiSelect/constants.ts +1 -1
  196. package/src/components/Form/NativeSelect/constants.ts +1 -1
  197. package/src/components/Form/Radio/constants.ts +1 -1
  198. package/src/components/Form/Select/constants.ts +1 -1
  199. package/src/components/Form/Slider/constants.ts +1 -1
  200. package/src/components/Form/Switch/constants.ts +1 -1
  201. package/src/components/Form/Textarea/constants.ts +1 -1
  202. package/src/components/GlowCard/GlowCard.tsx +46 -0
  203. package/src/components/GlowCard/index.ts +2 -0
  204. package/src/components/GlowCard/types.ts +9 -0
  205. package/src/components/GradientText/GradientText.tsx +36 -0
  206. package/src/components/GradientText/index.ts +2 -0
  207. package/src/components/GradientText/types.ts +15 -0
  208. package/src/components/Greeting/Greeting.tsx +46 -0
  209. package/src/components/Greeting/index.ts +2 -0
  210. package/src/components/Greeting/types.ts +10 -0
  211. package/src/components/KPICard/KPICard.tsx +85 -0
  212. package/src/components/KPICard/index.ts +2 -0
  213. package/src/components/KPICard/types.ts +22 -0
  214. package/src/components/Marquee/Marquee.tsx +45 -0
  215. package/src/components/Marquee/index.ts +2 -0
  216. package/src/components/Marquee/types.ts +13 -0
  217. package/src/components/Menu/Menubar/constants.ts +2 -2
  218. package/src/components/Menu/NavigationMenu/constants.ts +2 -2
  219. package/src/components/Meteors/Meteors.tsx +38 -0
  220. package/src/components/Meteors/index.ts +2 -0
  221. package/src/components/Meteors/types.ts +6 -0
  222. package/src/components/MiniAreaChart/MiniAreaChart.tsx +68 -0
  223. package/src/components/MiniAreaChart/index.ts +2 -0
  224. package/src/components/MiniAreaChart/types.ts +11 -0
  225. package/src/components/MiniBarChart/MiniBarChart.tsx +49 -0
  226. package/src/components/MiniBarChart/index.ts +2 -0
  227. package/src/components/MiniBarChart/types.ts +16 -0
  228. package/src/components/MiniDonutChart/MiniDonutChart.tsx +87 -0
  229. package/src/components/MiniDonutChart/index.ts +2 -0
  230. package/src/components/MiniDonutChart/types.ts +17 -0
  231. package/src/components/MiniStackedBar/MiniStackedBar.tsx +61 -0
  232. package/src/components/MiniStackedBar/index.ts +2 -0
  233. package/src/components/MiniStackedBar/types.ts +15 -0
  234. package/src/components/NumberTicker/NumberTicker.tsx +58 -0
  235. package/src/components/NumberTicker/index.ts +2 -0
  236. package/src/components/NumberTicker/types.ts +12 -0
  237. package/src/components/Pagination/constants.ts +2 -2
  238. package/src/components/Progress/constants.ts +1 -1
  239. package/src/components/Pulse/Pulse.tsx +26 -0
  240. package/src/components/Pulse/constants.ts +55 -0
  241. package/src/components/Pulse/index.ts +2 -0
  242. package/src/components/Pulse/types.ts +12 -0
  243. package/src/components/Resizable/constants.ts +1 -1
  244. package/src/components/Sheet/constants.ts +1 -1
  245. package/src/components/ShinyButton/ShinyButton.tsx +57 -0
  246. package/src/components/ShinyButton/index.ts +2 -0
  247. package/src/components/ShinyButton/types.ts +8 -0
  248. package/src/components/Skeleton/constants.ts +1 -1
  249. package/src/components/Sonner/constants.ts +1 -1
  250. package/src/components/Sparkline/Sparkline.tsx +108 -0
  251. package/src/components/Sparkline/index.ts +2 -0
  252. package/src/components/Sparkline/types.ts +18 -0
  253. package/src/components/SpotlightCard/SpotlightCard.tsx +56 -0
  254. package/src/components/SpotlightCard/index.ts +2 -0
  255. package/src/components/SpotlightCard/types.ts +8 -0
  256. package/src/components/Stat/constants.ts +1 -1
  257. package/src/components/StatCard/StatCard.tsx +59 -0
  258. package/src/components/StatCard/index.ts +2 -0
  259. package/src/components/StatCard/types.ts +16 -0
  260. package/src/components/Tabs/constants.ts +1 -1
  261. package/src/components/TextShimmer/TextShimmer.tsx +34 -0
  262. package/src/components/TextShimmer/index.ts +2 -0
  263. package/src/components/TextShimmer/types.ts +8 -0
  264. package/src/components/Timeline/constants.ts +1 -1
  265. package/src/components/Toggle/constants.ts +1 -1
  266. package/src/components/Tooltip/constants.ts +1 -1
  267. package/src/components/TrendBadge/TrendBadge.tsx +40 -0
  268. package/src/components/TrendBadge/constants.ts +38 -0
  269. package/src/components/TrendBadge/index.ts +2 -0
  270. package/src/components/TrendBadge/types.ts +16 -0
  271. package/src/components/WidgetShell/WidgetShell.tsx +101 -0
  272. package/src/components/WidgetShell/index.ts +2 -0
  273. package/src/components/WidgetShell/types.ts +22 -0
  274. package/src/index.ts +35 -0
  275. package/src/stylesheets/tailwind.css +210 -0
  276. package/src/utilities/getSubpaths/getSubpaths.ts +1 -2
@@ -0,0 +1,128 @@
1
+ import { cva } from "../../libs";
2
+ import { createVariants } from "../../utilities";
3
+
4
+ export const getDescriptionClasses = cva("", {
5
+ variants: {
6
+ variant: {
7
+ default: "",
8
+ card: "rounded-lg border border-base-200 bg-base-100 p-4 shadow-sm",
9
+ subtle: "rounded-md bg-base-200/40 p-3",
10
+ },
11
+ layout: {
12
+ vertical: "flex flex-col",
13
+ horizontal: "grid grid-cols-[auto_1fr] gap-x-6",
14
+ inline: "flex flex-wrap gap-x-6 gap-y-1",
15
+ },
16
+ size: {
17
+ sm: "" as const,
18
+ md: "" as const,
19
+ lg: "" as const,
20
+ },
21
+ },
22
+ defaultVariants: {
23
+ variant: "default",
24
+ layout: "vertical",
25
+ size: "md",
26
+ },
27
+ });
28
+
29
+ export const getDescriptionTermClasses = cva("shrink-0 font-medium text-base-content/60", {
30
+ variants: createVariants({
31
+ size: {
32
+ sm: "py-1 text-xs",
33
+ md: "py-2 text-sm",
34
+ lg: "py-2.5 text-base",
35
+ },
36
+ layout: {
37
+ vertical: "",
38
+ horizontal: "py-2",
39
+ inline: "py-0",
40
+ },
41
+ }),
42
+ defaultVariants: {
43
+ size: "md",
44
+ layout: "vertical",
45
+ },
46
+ });
47
+
48
+ export const getDescriptionDetailClasses = cva("text-base-content transition-colors duration-150", {
49
+ variants: createVariants({
50
+ size: {
51
+ sm: "py-1 text-xs",
52
+ md: "py-2 text-sm",
53
+ lg: "py-2.5 text-base",
54
+ },
55
+ layout: {
56
+ vertical: "not-last:mb-1",
57
+ horizontal: "py-2",
58
+ inline: "py-0 font-medium",
59
+ },
60
+ dividers: {
61
+ true: "",
62
+ false: "",
63
+ },
64
+ }),
65
+ compoundVariants: [
66
+ { layout: "vertical", dividers: true, className: "border-b border-base-200 last:border-0" },
67
+ { layout: "horizontal", dividers: true, className: "border-b border-base-200" },
68
+ ],
69
+ defaultVariants: {
70
+ size: "md",
71
+ layout: "vertical",
72
+ dividers: false,
73
+ },
74
+ });
75
+
76
+ export const getDescriptionPairClasses = cva("transition-colors duration-150", {
77
+ variants: createVariants({
78
+ layout: {
79
+ vertical: "",
80
+ horizontal: "contents",
81
+ inline: "flex items-baseline gap-1.5",
82
+ },
83
+ striped: {
84
+ true: "",
85
+ false: "",
86
+ },
87
+ }),
88
+ compoundVariants: [
89
+ { layout: "vertical", striped: true, className: "even:bg-base-200/30 px-2 -mx-2 rounded" },
90
+ { layout: "horizontal", striped: true, className: "" },
91
+ ],
92
+ defaultVariants: {
93
+ layout: "vertical",
94
+ striped: false,
95
+ },
96
+ });
97
+
98
+ export const getDescriptionGroupClasses = cva("flex gap-6", {
99
+ variants: createVariants({
100
+ direction: {
101
+ row: "flex-row flex-wrap",
102
+ column: "flex-col",
103
+ },
104
+ dividers: {
105
+ true: "",
106
+ false: "",
107
+ },
108
+ }),
109
+ compoundVariants: [
110
+ {
111
+ direction: "column",
112
+ dividers: true,
113
+ className: "[&>*+*]:border-t [&>*+*]:border-base-200 [&>*+*]:pt-6",
114
+ },
115
+ {
116
+ direction: "row",
117
+ dividers: true,
118
+ className:
119
+ "[&>*+*]:border-l [&>*+*]:border-base-200 [&>*+*]:pl-6",
120
+ },
121
+ ],
122
+ defaultVariants: {
123
+ direction: "column",
124
+ dividers: false,
125
+ },
126
+ });
127
+
128
+ export const getDescriptionGroupItemClasses = cva("flex-1 min-w-0");
@@ -1 +1,11 @@
1
1
  export { Description } from "./Description";
2
+ export { DescriptionGroup } from "./DescriptionGroup";
3
+ export type {
4
+ DescriptionProps,
5
+ DescriptionTermProps,
6
+ DescriptionDetailProps,
7
+ DescriptionGroupProps,
8
+ DescriptionSize,
9
+ DescriptionLayout,
10
+ DescriptionVariant,
11
+ } from "./types";
@@ -1,5 +1,33 @@
1
- export type DescriptionProps = React.HTMLAttributes<HTMLDListElement>;
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
2
 
3
- export type DescriptionTermProps = React.HTMLAttributes<HTMLElement>;
3
+ export type DescriptionSize = "sm" | "md" | "lg";
4
+ export type DescriptionLayout = "vertical" | "horizontal" | "inline";
5
+ export type DescriptionVariant = "default" | "card" | "subtle";
4
6
 
5
- export type DescriptionDetailProps = React.HTMLAttributes<HTMLElement>;
7
+ export type DescriptionProps = HTMLAttributes<HTMLDListElement> & {
8
+ /** Visual variant */
9
+ variant?: DescriptionVariant;
10
+ /** Layout direction */
11
+ layout?: DescriptionLayout;
12
+ /** Size preset */
13
+ size?: DescriptionSize;
14
+ /** Show dividers between items */
15
+ dividers?: boolean;
16
+ /** Alternate row shading */
17
+ striped?: boolean;
18
+ };
19
+
20
+ export type DescriptionTermProps = HTMLAttributes<HTMLElement>;
21
+
22
+ export type DescriptionDetailProps = HTMLAttributes<HTMLElement>;
23
+
24
+ export type DescriptionGroupProps = HTMLAttributes<HTMLDivElement> & {
25
+ /** Direction to stack descriptions */
26
+ direction?: "row" | "column";
27
+ /** Show dividers between descriptions */
28
+ dividers?: boolean;
29
+ /** Optional heading for the group */
30
+ title?: ReactNode;
31
+ /** Optional subheading */
32
+ description?: ReactNode;
33
+ };
@@ -2,7 +2,7 @@ import { cva } from "../../libs";
2
2
  import { createVariants } from "../../utilities";
3
3
 
4
4
  export const getDialogOverlayClasses = cva(
5
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
5
+ "fixed inset-0 z-50 bg-black/60 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
6
6
  );
7
7
 
8
8
  export const getDialogContentClasses = cva(
@@ -41,5 +41,5 @@ export const getDialogTitleClasses = cva("text-lg font-semibold leading-none tra
41
41
  export const getDialogDescriptionClasses = cva("text-sm text-muted-foreground");
42
42
 
43
43
  export const getDialogCloseClasses = cva(
44
- "absolute right-4 top-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"
44
+ "absolute right-4 top-4 rounded-xs opacity-70 ring-offset-background transition-all duration-200 hover:opacity-100 hover:rotate-90 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"
45
45
  );
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../libs";
2
2
  import { createVariants } from "../../utilities";
3
3
 
4
- export const getDockClasses = cva("dock", {
4
+ export const getDockClasses = cva("dock transition-all duration-300", {
5
5
  variants: createVariants({
6
6
  variant: {
7
7
  accent: "bg-accent text-accent-content border-accent",
@@ -40,7 +40,7 @@ export const getDockClasses = cva("dock", {
40
40
  ],
41
41
  });
42
42
 
43
- export const getDockButtonClasses = cva("", {
43
+ export const getDockButtonClasses = cva("transition-all duration-200", {
44
44
  variants: createVariants({
45
45
  active: {
46
46
  true: "dock-active",
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../libs";
2
2
 
3
3
  export const getDrawerContentClasses = cva(
4
- "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-base-100"
4
+ "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-base-100 shadow-lg"
5
5
  );
6
6
 
7
7
  export const getDrawerDescriptionClasses = cva("text-sm");
@@ -10,6 +10,6 @@ export const getDrawerHeaderClasses = cva("grid gap-1.5 p-4 text-center sm:text-
10
10
 
11
11
  export const getDrawerFooterClasses = cva("mt-auto flex flex-col gap-2 p-4");
12
12
 
13
- export const getDrawerOverlayClasses = cva("fixed inset-0 z-50 bg-black/80");
13
+ export const getDrawerOverlayClasses = cva("fixed inset-0 z-50 bg-black/60 backdrop-blur-sm");
14
14
 
15
15
  export const getDrawerTitleClasses = cva("text-lg font-semibold leading-none tracking-tight");
@@ -2,7 +2,7 @@ import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
4
  export const getCheckboxClasses = cva(
5
- "peer flex items-center justify-center h-4 w-4 shrink-0 rounded-xs border focus-visible:border-base-content focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-base-content disabled:cursor-not-allowed disabled:opacity-50",
5
+ "peer flex items-center justify-center h-4 w-4 shrink-0 rounded-xs border transition-all duration-200 focus-visible:border-base-content focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-base-content disabled:cursor-not-allowed disabled:opacity-50",
6
6
  {
7
7
  variants: createVariants({
8
8
  variant: {
@@ -37,7 +37,7 @@ export const getDatetimeCalendarIconClasses = cva("", {
37
37
  });
38
38
 
39
39
  export const getTimePickerClasses = cva(
40
- "border border-neutral-content bg-base-100 shadow-xs cursor-pointer ring-0 py-2 h-8 px-3 w-full text-sm outline-0 inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-base-content disabled:pointer-events-none disabled:opacity-50 hover:bg-base-200",
40
+ "border border-neutral-content bg-base-100 shadow-xs cursor-pointer ring-0 py-2 h-8 px-3 w-full text-sm outline-0 inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium transition-all duration-200 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-base-content disabled:pointer-events-none disabled:opacity-50 hover:bg-base-200",
41
41
  {
42
42
  variants: createVariants({
43
43
  selected: {
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
- export const getInputClasses = cva("input rounded-md transition-all duration-100", {
4
+ export const getInputClasses = cva("input rounded-md transition-all duration-200", {
5
5
  variants: createVariants({
6
6
  variant: {
7
7
  default: "bg-transparent",
@@ -6,7 +6,7 @@ export const getMultiSelectClasses = cva("overflow-visible bg-transparent flex f
6
6
  export const getMultiSelectTriggerClasses = cva("flex-wrap h-fit w-fit py-2 overflow-hidden");
7
7
 
8
8
  export const getMultiSelectItemClasses = cva(
9
- "cursor-pointer transition-colors flex justify-between aria-selected:bg-base-300 aria-selected:text-base-content rounded-xs py-1.5 px-2 text-sm outline-hidden",
9
+ "cursor-pointer transition-all duration-150 flex justify-between aria-selected:bg-base-300 aria-selected:text-base-content rounded-xs py-1.5 px-2 text-sm outline-hidden",
10
10
  {
11
11
  variants: createVariants({
12
12
  included: {
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
- export const getNativeSelectClasses = cva("select", {
4
+ export const getNativeSelectClasses = cva("select transition-all duration-200", {
5
5
  variants: createVariants({
6
6
  nativeOptions: {
7
7
  true: "appearance-none",
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
- export const getRadioClasses = cva("radio", {
4
+ export const getRadioClasses = cva("radio transition-all duration-200", {
5
5
  variants: createVariants({
6
6
  variant: {
7
7
  primary: "radio-primary",
@@ -2,7 +2,7 @@ import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
4
  export const getSelectTriggerClasses = cva(
5
- "select flex items-center justify-between rounded-md text-sm text-left disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-100",
5
+ "select flex items-center justify-between rounded-md text-sm text-left disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200",
6
6
  {
7
7
  variants: createVariants({
8
8
  variant: {
@@ -58,7 +58,7 @@ export const getSliderClasses = cva("absolute h-full", {
58
58
  });
59
59
 
60
60
  export const getSliderThumbClasses = cva(
61
- "block h-5 w-5 rounded-full border-2 ring-offset-neutral transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
61
+ "block h-5 w-5 rounded-full border-2 ring-offset-neutral transition-all duration-200 hover:scale-110 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
62
62
  {
63
63
  variants: createVariants({
64
64
  variant: {
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
- export const getSwitchClasses = cva("toggle", {
4
+ export const getSwitchClasses = cva("toggle transition-all duration-200", {
5
5
  variants: createVariants({
6
6
  variant: {
7
7
  primary: "toggle-primary",
@@ -1,7 +1,7 @@
1
1
  import { cva } from "../../../libs";
2
2
  import { createVariants } from "../../../utilities";
3
3
 
4
- export const getTextareaClasses = cva("textarea rounded-md transition-all duration-100", {
4
+ export const getTextareaClasses = cva("textarea rounded-md transition-all duration-200", {
5
5
  variants: createVariants({
6
6
  variant: {
7
7
  default: "bg-transparent",
@@ -0,0 +1,46 @@
1
+ import type { CSSProperties } from "react";
2
+ import { cn } from "../../utilities";
3
+ import type { GlowCardProps } from "./types";
4
+
5
+ const GlowCard = ({
6
+ children,
7
+ className,
8
+ gradientFrom = "oklch(0.7 0.25 250)",
9
+ gradientVia = "oklch(0.7 0.2 330)",
10
+ gradientTo = "oklch(0.7 0.25 150)",
11
+ ...props
12
+ }: GlowCardProps) => {
13
+ return (
14
+ <div
15
+ className={cn(
16
+ "group relative rounded-xl p-px transition-shadow duration-500",
17
+ className
18
+ )}
19
+ {...props}
20
+ >
21
+ <div
22
+ className="absolute -inset-px rounded-xl opacity-50 blur-sm transition-opacity duration-500 group-hover:opacity-100"
23
+ style={
24
+ {
25
+ background: `linear-gradient(135deg, ${gradientFrom}, ${gradientVia}, ${gradientTo})`,
26
+ } as CSSProperties
27
+ }
28
+ aria-hidden="true"
29
+ />
30
+ <div
31
+ className="absolute -inset-px rounded-xl opacity-0 transition-opacity duration-500 group-hover:opacity-100"
32
+ style={
33
+ {
34
+ background: `linear-gradient(135deg, ${gradientFrom}, ${gradientVia}, ${gradientTo})`,
35
+ } as CSSProperties
36
+ }
37
+ aria-hidden="true"
38
+ />
39
+ <div className="relative rounded-xl bg-base-100 p-6">{children}</div>
40
+ </div>
41
+ );
42
+ };
43
+
44
+ GlowCard.displayName = "GlowCard";
45
+
46
+ export { GlowCard };
@@ -0,0 +1,2 @@
1
+ export { GlowCard } from "./GlowCard";
2
+ export type { GlowCardProps } from "./types";
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+
3
+ export type GlowCardProps = HTMLAttributes<HTMLDivElement> & {
4
+ children: ReactNode;
5
+ /** Gradient colors for the glow border */
6
+ gradientFrom?: string;
7
+ gradientVia?: string;
8
+ gradientTo?: string;
9
+ };
@@ -0,0 +1,36 @@
1
+ import type { CSSProperties } from "react";
2
+ import { cn } from "../../utilities";
3
+ import type { GradientTextProps } from "./types";
4
+
5
+ const GradientText = ({
6
+ children,
7
+ className,
8
+ from = "oklch(0.7 0.25 250)",
9
+ via,
10
+ to = "oklch(0.7 0.2 330)",
11
+ angle = 135,
12
+ animated = false,
13
+ ...props
14
+ }: GradientTextProps) => {
15
+ const gradient = via
16
+ ? `linear-gradient(${angle}deg, ${from}, ${via}, ${to})`
17
+ : `linear-gradient(${angle}deg, ${from}, ${to})`;
18
+
19
+ return (
20
+ <span
21
+ className={cn(
22
+ "bg-clip-text text-transparent",
23
+ animated && "animate-gradient bg-[length:300%_100%]",
24
+ className
25
+ )}
26
+ style={{ backgroundImage: gradient } as CSSProperties}
27
+ {...props}
28
+ >
29
+ {children}
30
+ </span>
31
+ );
32
+ };
33
+
34
+ GradientText.displayName = "GradientText";
35
+
36
+ export { GradientText };
@@ -0,0 +1,2 @@
1
+ export { GradientText } from "./GradientText";
2
+ export type { GradientTextProps } from "./types";
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+
3
+ export type GradientTextProps = HTMLAttributes<HTMLSpanElement> & {
4
+ children: ReactNode;
5
+ /** Gradient start color */
6
+ from?: string;
7
+ /** Gradient middle color */
8
+ via?: string;
9
+ /** Gradient end color */
10
+ to?: string;
11
+ /** Gradient direction in degrees */
12
+ angle?: number;
13
+ /** Whether to animate the gradient */
14
+ animated?: boolean;
15
+ };
@@ -0,0 +1,46 @@
1
+ import { useMemo } from "react";
2
+ import { cn } from "../../utilities";
3
+ import type { GreetingProps } from "./types";
4
+
5
+ const getTimeGreeting = () => {
6
+ const hour = new Date().getHours();
7
+ if (hour < 12) return "Good morning";
8
+ if (hour < 17) return "Good afternoon";
9
+ return "Good evening";
10
+ };
11
+
12
+ const Greeting = ({
13
+ name,
14
+ className,
15
+ subtitle,
16
+ greeting: customGreeting,
17
+ ...props
18
+ }: GreetingProps) => {
19
+ const greeting = useMemo(() => customGreeting ?? getTimeGreeting(), [customGreeting]);
20
+
21
+ const dateStr = useMemo(
22
+ () =>
23
+ new Date().toLocaleDateString("en-US", {
24
+ weekday: "long",
25
+ year: "numeric",
26
+ month: "long",
27
+ day: "numeric",
28
+ }),
29
+ []
30
+ );
31
+
32
+ return (
33
+ <div className={cn("flex flex-col gap-1", className)} {...props}>
34
+ <h1 className="text-2xl font-bold tracking-tight">
35
+ {greeting}, {name}
36
+ </h1>
37
+ <p className="text-sm text-base-content/60">
38
+ {subtitle ?? dateStr}
39
+ </p>
40
+ </div>
41
+ );
42
+ };
43
+
44
+ Greeting.displayName = "Greeting";
45
+
46
+ export { Greeting };
@@ -0,0 +1,2 @@
1
+ export { Greeting } from "./Greeting";
2
+ export type { GreetingProps } from "./types";
@@ -0,0 +1,10 @@
1
+ import type { HTMLAttributes } from "react";
2
+
3
+ export type GreetingProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
4
+ /** User's name */
5
+ name: string;
6
+ /** Optional subtitle/context line */
7
+ subtitle?: string;
8
+ /** Custom greeting override (bypasses time-based greeting) */
9
+ greeting?: string;
10
+ };
@@ -0,0 +1,85 @@
1
+ import { cn } from "../../utilities";
2
+ import { Sparkline } from "../Sparkline";
3
+ import { TrendBadge } from "../TrendBadge";
4
+ import type { KPICardProps } from "./types";
5
+
6
+ const KPICard = ({
7
+ title,
8
+ value,
9
+ change,
10
+ description,
11
+ sparklineData,
12
+ sparklineColor,
13
+ sparklineFilled = true,
14
+ icon,
15
+ loading = false,
16
+ className,
17
+ ...props
18
+ }: KPICardProps) => {
19
+ if (loading) {
20
+ return (
21
+ <div
22
+ className={cn(
23
+ "rounded-lg border bg-base-100 p-4 shadow-sm transition-shadow duration-300 hover:shadow-md",
24
+ className
25
+ )}
26
+ {...props}
27
+ >
28
+ <div className="flex items-center justify-between">
29
+ <span className="skeleton h-4 w-24 rounded" />
30
+ {icon && <span className="skeleton size-8 rounded-md" />}
31
+ </div>
32
+ <div className="mt-3 flex items-end justify-between gap-4">
33
+ <div className="flex flex-col gap-1.5">
34
+ <span className="skeleton h-7 w-28 rounded" />
35
+ <span className="skeleton h-3.5 w-20 rounded" />
36
+ </div>
37
+ <span className="skeleton h-8 w-20 rounded" />
38
+ </div>
39
+ </div>
40
+ );
41
+ }
42
+
43
+ return (
44
+ <div
45
+ className={cn(
46
+ "rounded-lg border bg-base-100 p-4 shadow-sm transition-shadow duration-300 hover:shadow-md",
47
+ className
48
+ )}
49
+ {...props}
50
+ >
51
+ <div className="flex items-center justify-between">
52
+ <span className="text-sm font-medium text-base-content/60">{title}</span>
53
+ {icon && (
54
+ <div className="flex size-8 items-center justify-center rounded-md bg-base-200/50 text-base-content/60">
55
+ {icon}
56
+ </div>
57
+ )}
58
+ </div>
59
+ <div className="mt-3 flex items-end justify-between gap-4">
60
+ <div className="flex flex-col gap-1">
61
+ <span className="text-2xl font-bold tracking-tight">{value}</span>
62
+ <div className="flex items-center gap-2">
63
+ {change !== undefined && <TrendBadge value={change} size="xs" />}
64
+ {description && (
65
+ <span className="text-xs text-base-content/50">{description}</span>
66
+ )}
67
+ </div>
68
+ </div>
69
+ {sparklineData && sparklineData.length >= 2 && (
70
+ <Sparkline
71
+ data={sparklineData}
72
+ color={sparklineColor ?? (change !== undefined && change >= 0 ? "oklch(0.7 0.2 150)" : "oklch(0.65 0.25 25)")}
73
+ filled={sparklineFilled}
74
+ width={80}
75
+ height={32}
76
+ />
77
+ )}
78
+ </div>
79
+ </div>
80
+ );
81
+ };
82
+
83
+ KPICard.displayName = "KPICard";
84
+
85
+ export { KPICard };
@@ -0,0 +1,2 @@
1
+ export { KPICard } from "./KPICard";
2
+ export type { KPICardProps } from "./types";
@@ -0,0 +1,22 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+
3
+ export type KPICardProps = HTMLAttributes<HTMLDivElement> & {
4
+ /** Card title/label */
5
+ title: string;
6
+ /** Primary value to display */
7
+ value: ReactNode;
8
+ /** Trend change percentage */
9
+ change?: number;
10
+ /** Description text below value */
11
+ description?: string;
12
+ /** Sparkline data points */
13
+ sparklineData?: number[];
14
+ /** Sparkline color */
15
+ sparklineColor?: string;
16
+ /** Whether sparkline is filled */
17
+ sparklineFilled?: boolean;
18
+ /** Icon to show in the card */
19
+ icon?: ReactNode;
20
+ /** Loading state */
21
+ loading?: boolean;
22
+ };