@wealthx/shadcn 0.0.2 → 1.0.1

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 (189) hide show
  1. package/.turbo/turbo-build.log +135 -11
  2. package/CHANGELOG.md +12 -0
  3. package/CHANGES.md +345 -0
  4. package/README.md +128 -0
  5. package/dist/chunk-2WZVSBAY.mjs +232 -0
  6. package/dist/chunk-2Y7YJKPE.mjs +47 -0
  7. package/dist/chunk-3U7SD3MS.mjs +55 -0
  8. package/dist/chunk-3VQNJ235.mjs +114 -0
  9. package/dist/chunk-55CEW76V.mjs +35 -0
  10. package/dist/chunk-6AFMNC42.mjs +146 -0
  11. package/dist/chunk-6OJF6XRN.mjs +117 -0
  12. package/dist/chunk-7LDIMXGM.mjs +181 -0
  13. package/dist/chunk-AMJ23O53.mjs +122 -0
  14. package/dist/chunk-BBJBJSXQ.mjs +44 -0
  15. package/dist/chunk-BGP2N52Z.mjs +126 -0
  16. package/dist/chunk-BMFN37JH.mjs +41 -0
  17. package/dist/chunk-CGOKTPXU.mjs +79 -0
  18. package/dist/chunk-CZ3BW5GL.mjs +81 -0
  19. package/dist/chunk-DBHJ5KC3.mjs +55 -0
  20. package/dist/chunk-DDPA2XXS.mjs +97 -0
  21. package/dist/chunk-DS2AMHN2.mjs +30 -0
  22. package/dist/chunk-E3K6O4FZ.mjs +57 -0
  23. package/dist/chunk-FWCSY2DS.mjs +37 -0
  24. package/dist/chunk-GPRJQ24C.mjs +28 -0
  25. package/dist/chunk-HS7TFG7V.mjs +24 -0
  26. package/dist/chunk-HUVTPUV2.mjs +256 -0
  27. package/dist/chunk-IAOOZCUY.mjs +90 -0
  28. package/dist/chunk-JF4PHPD5.mjs +111 -0
  29. package/dist/chunk-JU2RUWHF.mjs +123 -0
  30. package/dist/chunk-KKHTJNMM.mjs +86 -0
  31. package/dist/chunk-MJIEMGRD.mjs +266 -0
  32. package/dist/chunk-MKFL5MNH.mjs +372 -0
  33. package/dist/chunk-MQ72DIBH.mjs +105 -0
  34. package/dist/chunk-NGYG2EA6.mjs +148 -0
  35. package/dist/chunk-NWZ46DJL.mjs +213 -0
  36. package/dist/chunk-OXQQNQZI.mjs +75 -0
  37. package/dist/chunk-PMKODV6M.mjs +161 -0
  38. package/dist/chunk-QOJ2DQD6.mjs +57 -0
  39. package/dist/chunk-RL772EH7.mjs +126 -0
  40. package/dist/chunk-SLWCCURD.mjs +99 -0
  41. package/dist/chunk-V7CNWJT3.mjs +10 -0
  42. package/dist/chunk-VG6UF6UT.mjs +68 -0
  43. package/dist/chunk-VYMHBV6D.mjs +123 -0
  44. package/dist/chunk-VZ2NR7L3.mjs +195 -0
  45. package/dist/chunk-YN5SYTOO.mjs +117 -0
  46. package/dist/chunk-Z3MK2KKZ.mjs +83 -0
  47. package/dist/chunk-ZN2QKLF6.mjs +187 -0
  48. package/dist/chunk-ZZV5JVNW.mjs +34 -0
  49. package/dist/components/ui/accordion.js +142 -0
  50. package/dist/components/ui/accordion.mjs +14 -0
  51. package/dist/components/ui/alert-dialog.js +413 -0
  52. package/dist/components/ui/alert-dialog.mjs +34 -0
  53. package/dist/components/ui/alert.js +134 -0
  54. package/dist/components/ui/alert.mjs +12 -0
  55. package/dist/components/ui/avatar.js +173 -0
  56. package/dist/components/ui/avatar.mjs +18 -0
  57. package/dist/components/ui/badge.js +163 -0
  58. package/dist/components/ui/badge.mjs +11 -0
  59. package/dist/components/ui/button.js +198 -0
  60. package/dist/components/ui/button.mjs +11 -0
  61. package/dist/components/ui/calendar.js +408 -0
  62. package/dist/components/ui/calendar.mjs +12 -0
  63. package/dist/components/ui/card.js +156 -0
  64. package/dist/components/ui/card.mjs +20 -0
  65. package/dist/components/ui/checkbox.js +166 -0
  66. package/dist/components/ui/checkbox.mjs +11 -0
  67. package/dist/components/ui/chip.js +199 -0
  68. package/dist/components/ui/chip.mjs +10 -0
  69. package/dist/components/ui/data-table.js +925 -0
  70. package/dist/components/ui/data-table.mjs +29 -0
  71. package/dist/components/ui/date-picker.js +561 -0
  72. package/dist/components/ui/date-picker.mjs +15 -0
  73. package/dist/components/ui/dialog.js +378 -0
  74. package/dist/components/ui/dialog.mjs +30 -0
  75. package/dist/components/ui/drawer.js +213 -0
  76. package/dist/components/ui/drawer.mjs +28 -0
  77. package/dist/components/ui/dropdown-menu.js +338 -0
  78. package/dist/components/ui/dropdown-menu.mjs +38 -0
  79. package/dist/components/ui/empty.js +173 -0
  80. package/dist/components/ui/empty.mjs +18 -0
  81. package/dist/components/ui/field.js +359 -0
  82. package/dist/components/ui/field.mjs +28 -0
  83. package/dist/components/ui/input-group.js +406 -0
  84. package/dist/components/ui/input-group.mjs +22 -0
  85. package/dist/components/ui/input-otp.js +149 -0
  86. package/dist/components/ui/input-otp.mjs +14 -0
  87. package/dist/components/ui/input.js +81 -0
  88. package/dist/components/ui/input.mjs +8 -0
  89. package/dist/components/ui/label.js +85 -0
  90. package/dist/components/ui/label.mjs +8 -0
  91. package/dist/components/ui/pagination.js +333 -0
  92. package/dist/components/ui/pagination.mjs +22 -0
  93. package/dist/components/ui/popover.js +167 -0
  94. package/dist/components/ui/popover.mjs +22 -0
  95. package/dist/components/ui/progress.js +97 -0
  96. package/dist/components/ui/progress.mjs +8 -0
  97. package/dist/components/ui/radio-group.js +178 -0
  98. package/dist/components/ui/radio-group.mjs +12 -0
  99. package/dist/components/ui/select.js +262 -0
  100. package/dist/components/ui/select.mjs +28 -0
  101. package/dist/components/ui/separator.js +86 -0
  102. package/dist/components/ui/separator.mjs +8 -0
  103. package/dist/components/ui/sheet.js +227 -0
  104. package/dist/components/ui/sheet.mjs +26 -0
  105. package/dist/components/ui/skeleton.js +75 -0
  106. package/dist/components/ui/skeleton.mjs +8 -0
  107. package/dist/components/ui/sonner.js +86 -0
  108. package/dist/components/ui/sonner.mjs +7 -0
  109. package/dist/components/ui/spinner.js +93 -0
  110. package/dist/components/ui/spinner.mjs +10 -0
  111. package/dist/components/ui/switch.js +178 -0
  112. package/dist/components/ui/switch.mjs +11 -0
  113. package/dist/components/ui/table.js +184 -0
  114. package/dist/components/ui/table.mjs +22 -0
  115. package/dist/components/ui/tabs.js +181 -0
  116. package/dist/components/ui/tabs.mjs +16 -0
  117. package/dist/components/ui/textarea.js +79 -0
  118. package/dist/components/ui/textarea.mjs +8 -0
  119. package/dist/components/ui/toggle-group.js +184 -0
  120. package/dist/components/ui/toggle-group.mjs +12 -0
  121. package/dist/components/ui/toggle.js +108 -0
  122. package/dist/components/ui/toggle.mjs +11 -0
  123. package/dist/components/ui/tooltip.js +140 -0
  124. package/dist/components/ui/tooltip.mjs +16 -0
  125. package/dist/index.js +4312 -90
  126. package/dist/index.mjs +459 -158
  127. package/dist/lib/colors.js +84 -0
  128. package/dist/lib/colors.mjs +13 -0
  129. package/dist/lib/theme-provider.js +150 -0
  130. package/dist/lib/theme-provider.mjs +13 -0
  131. package/dist/lib/typography.js +157 -0
  132. package/dist/lib/typography.mjs +25 -0
  133. package/dist/lib/utils.js +34 -0
  134. package/dist/lib/utils.mjs +7 -0
  135. package/dist/styles.css +1 -1
  136. package/package.json +228 -11
  137. package/scripts/build-css.ts +15 -9
  138. package/src/components/index.tsx +443 -0
  139. package/src/components/ui/accordion.tsx +99 -0
  140. package/src/components/ui/alert-dialog.tsx +239 -0
  141. package/src/components/ui/alert.tsx +81 -0
  142. package/src/components/ui/avatar.tsx +130 -0
  143. package/src/components/ui/badge.tsx +57 -0
  144. package/src/components/ui/button.tsx +69 -37
  145. package/src/components/ui/calendar.tsx +252 -0
  146. package/src/components/ui/card.tsx +106 -0
  147. package/src/components/ui/checkbox.tsx +111 -0
  148. package/src/components/ui/chip.tsx +65 -0
  149. package/src/components/ui/data-table.tsx +490 -0
  150. package/src/components/ui/date-picker.tsx +133 -0
  151. package/src/components/ui/dialog.tsx +195 -0
  152. package/src/components/ui/drawer.tsx +169 -0
  153. package/src/components/ui/dropdown-menu.tsx +315 -0
  154. package/src/components/ui/empty.tsx +128 -0
  155. package/src/components/ui/field.tsx +273 -0
  156. package/src/components/ui/input-group.tsx +190 -0
  157. package/src/components/ui/input-otp.tsx +90 -0
  158. package/src/components/ui/input.tsx +28 -0
  159. package/src/components/ui/label.tsx +24 -0
  160. package/src/components/ui/pagination.tsx +148 -0
  161. package/src/components/ui/popover.tsx +112 -0
  162. package/src/components/ui/progress.tsx +40 -0
  163. package/src/components/ui/radio-group.tsx +129 -0
  164. package/src/components/ui/select.tsx +201 -0
  165. package/src/components/ui/separator.tsx +26 -0
  166. package/src/components/ui/sheet.tsx +182 -0
  167. package/src/components/ui/skeleton.tsx +22 -0
  168. package/src/components/ui/sonner.tsx +48 -0
  169. package/src/components/ui/spinner.tsx +41 -0
  170. package/src/components/ui/switch.tsx +126 -0
  171. package/src/components/ui/table.tsx +143 -0
  172. package/src/components/ui/tabs.tsx +119 -0
  173. package/src/components/ui/textarea.tsx +28 -0
  174. package/src/components/ui/toggle-group.tsx +94 -0
  175. package/src/components/ui/toggle.tsx +59 -0
  176. package/src/components/ui/tooltip.tsx +80 -0
  177. package/src/index.ts +15 -3
  178. package/src/lib/colors.ts +74 -0
  179. package/src/lib/slot.tsx +68 -0
  180. package/src/lib/theme-provider.tsx +134 -0
  181. package/src/lib/typography.ts +153 -0
  182. package/src/lib/utils.ts +1 -1
  183. package/src/styles/globals.css +377 -107
  184. package/src/styles/styles-css.ts +1 -1
  185. package/tsup.config.ts +48 -2
  186. package/dist/index.d.mts +0 -27
  187. package/dist/index.d.ts +0 -27
  188. package/src/provider/ShadcnProvider.tsx +0 -89
  189. package/src/provider/index.ts +0 -2
@@ -14,23 +14,147 @@ npm warn Unknown project config "auto-install-peers". This will stop working in
14
14
  npm warn Unknown project config "public-hoist-pattern". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
15
15
  ≈ tailwindcss v4.2.2
16
16
 
17
- Done in 217ms
17
+ Done in 561ms
18
18
  Built dist/styles.css and src/styles/styles-css.ts
19
19
  warning package.json: No license field
20
20
  $ tsup
21
- CLI Building entry: src/index.ts
21
+ CLI Building entry: src/index.ts, src/lib/colors.ts, src/lib/theme-provider.tsx, src/lib/typography.ts, src/lib/utils.ts, src/components/ui/accordion.tsx, src/components/ui/alert-dialog.tsx, src/components/ui/alert.tsx, src/components/ui/avatar.tsx, src/components/ui/badge.tsx, src/components/ui/button.tsx, src/components/ui/calendar.tsx, src/components/ui/card.tsx, src/components/ui/checkbox.tsx, src/components/ui/chip.tsx, src/components/ui/data-table.tsx, src/components/ui/date-picker.tsx, src/components/ui/dialog.tsx, src/components/ui/drawer.tsx, src/components/ui/dropdown-menu.tsx, src/components/ui/empty.tsx, src/components/ui/field.tsx, src/components/ui/input-group.tsx, src/components/ui/input-otp.tsx, src/components/ui/input.tsx, src/components/ui/label.tsx, src/components/ui/pagination.tsx, src/components/ui/popover.tsx, src/components/ui/progress.tsx, src/components/ui/radio-group.tsx, src/components/ui/select.tsx, src/components/ui/separator.tsx, src/components/ui/sheet.tsx, src/components/ui/skeleton.tsx, src/components/ui/sonner.tsx, src/components/ui/spinner.tsx, src/components/ui/switch.tsx, src/components/ui/table.tsx, src/components/ui/tabs.tsx, src/components/ui/textarea.tsx, src/components/ui/toggle-group.tsx, src/components/ui/toggle.tsx, src/components/ui/tooltip.tsx
22
22
  CLI Using tsconfig: tsconfig.json
23
23
  CLI tsup v8.5.1
24
24
  CLI Using tsup config: /home/runner/work/wealthx-ui/wealthx-ui/packages/shadcn/tsup.config.ts
25
25
  CLI Target: es6
26
26
  CJS Build start
27
27
  ESM Build start
28
- CJS dist/index.js 25.07 KB
29
- CJS ⚡️ Build success in 69ms
30
- ESM dist/index.mjs 23.79 KB
31
- ESM ⚡️ Build success in 67ms
32
- DTS Build start
33
- DTS ⚡️ Build success in 4069ms
34
- DTS dist/index.d.ts 1.32 KB
35
- DTS dist/index.d.mts 1.32 KB
36
- Done in 11.04s.
28
+ CJS dist/index.js 154.63 KB
29
+ CJS dist/lib/colors.js 3.15 KB
30
+ CJS dist/lib/theme-provider.js 6.09 KB
31
+ CJS dist/lib/typography.js 5.49 KB
32
+ CJS dist/lib/utils.js 1.20 KB
33
+ CJS dist/components/ui/accordion.js 5.11 KB
34
+ CJS dist/components/ui/alert.js 4.57 KB
35
+ CJS dist/components/ui/alert-dialog.js 15.26 KB
36
+ CJS dist/components/ui/avatar.js 5.71 KB
37
+ CJS dist/components/ui/badge.js 6.12 KB
38
+ CJS dist/components/ui/button.js 7.98 KB
39
+ CJS dist/components/ui/calendar.js 15.83 KB
40
+ CJS dist/components/ui/card.js 4.91 KB
41
+ CJS dist/components/ui/checkbox.js 6.51 KB
42
+ CJS dist/components/ui/chip.js 7.36 KB
43
+ CJS dist/components/ui/data-table.js 37.83 KB
44
+ CJS dist/components/ui/date-picker.js 21.43 KB
45
+ CJS dist/components/ui/dialog.js 14.05 KB
46
+ CJS dist/components/ui/drawer.js 7.96 KB
47
+ CJS dist/components/ui/dropdown-menu.js 12.97 KB
48
+ CJS dist/components/ui/empty.js 5.30 KB
49
+ CJS dist/components/ui/field.js 11.19 KB
50
+ CJS dist/components/ui/input-group.js 15.80 KB
51
+ CJS dist/components/ui/input-otp.js 5.86 KB
52
+ CJS dist/components/ui/label.js 2.92 KB
53
+ CJS dist/components/ui/pagination.js 11.88 KB
54
+ CJS dist/components/ui/popover.js 5.81 KB
55
+ CJS dist/components/ui/progress.js 3.32 KB
56
+ CJS dist/components/ui/radio-group.js 6.54 KB
57
+ CJS dist/components/ui/input.js 3.26 KB
58
+ CJS dist/components/ui/separator.js 2.97 KB
59
+ CJS dist/components/ui/select.js 10.14 KB
60
+ CJS dist/components/ui/skeleton.js 2.62 KB
61
+ CJS dist/components/ui/sheet.js 8.05 KB
62
+ CJS dist/components/ui/sonner.js 3.35 KB
63
+ CJS dist/components/ui/spinner.js 3.12 KB
64
+ CJS dist/components/ui/switch.js 6.34 KB
65
+ CJS dist/components/ui/table.js 5.60 KB
66
+ CJS dist/components/ui/tabs.js 6.44 KB
67
+ CJS dist/components/ui/textarea.js 3.13 KB
68
+ CJS dist/components/ui/toggle-group.js 6.71 KB
69
+ CJS dist/components/ui/toggle.js 3.99 KB
70
+ CJS dist/components/ui/tooltip.js 5.03 KB
71
+ CJS ⚡️ Build success in 319ms
72
+ ESM dist/lib/colors.mjs 205.00 B
73
+ ESM dist/index.mjs 7.84 KB
74
+ ESM dist/chunk-DDPA2XXS.mjs 2.45 KB
75
+ ESM dist/chunk-3U7SD3MS.mjs 1.74 KB
76
+ ESM dist/chunk-CGOKTPXU.mjs 2.24 KB
77
+ ESM dist/chunk-PMKODV6M.mjs 4.88 KB
78
+ ESM dist/chunk-2Y7YJKPE.mjs 1.24 KB
79
+ ESM dist/chunk-BMFN37JH.mjs 865.00 B
80
+ ESM dist/chunk-VYMHBV6D.mjs 3.78 KB
81
+ ESM dist/chunk-RL772EH7.mjs 4.04 KB
82
+ ESM dist/chunk-NGYG2EA6.mjs 3.51 KB
83
+ ESM dist/chunk-BBJBJSXQ.mjs 995.00 B
84
+ ESM dist/chunk-JU2RUWHF.mjs 3.88 KB
85
+ ESM dist/chunk-AMJ23O53.mjs 3.58 KB
86
+ ESM dist/chunk-MQ72DIBH.mjs 3.01 KB
87
+ ESM dist/chunk-7LDIMXGM.mjs 5.28 KB
88
+ ESM dist/chunk-6AFMNC42.mjs 4.84 KB
89
+ ESM dist/chunk-YN5SYTOO.mjs 2.81 KB
90
+ ESM dist/chunk-HUVTPUV2.mjs 6.89 KB
91
+ ESM dist/chunk-ZZV5JVNW.mjs 835.00 B
92
+ ESM dist/chunk-55CEW76V.mjs 840.00 B
93
+ ESM dist/chunk-ZN2QKLF6.mjs 5.71 KB
94
+ ESM dist/chunk-GPRJQ24C.mjs 1005.00 B
95
+ ESM dist/chunk-Z3MK2KKZ.mjs 2.66 KB
96
+ ESM dist/chunk-6OJF6XRN.mjs 3.27 KB
97
+ ESM dist/chunk-2WZVSBAY.mjs 7.72 KB
98
+ ESM dist/chunk-SLWCCURD.mjs 2.45 KB
99
+ ESM dist/chunk-VG6UF6UT.mjs 1.63 KB
100
+ ESM dist/chunk-E3K6O4FZ.mjs 1.87 KB
101
+ ESM dist/chunk-MKFL5MNH.mjs 12.35 KB
102
+ ESM dist/chunk-HS7TFG7V.mjs 483.00 B
103
+ ESM dist/chunk-BGP2N52Z.mjs 3.07 KB
104
+ ESM dist/chunk-VZ2NR7L3.mjs 6.68 KB
105
+ ESM dist/chunk-MJIEMGRD.mjs 9.04 KB
106
+ ESM dist/chunk-DS2AMHN2.mjs 1.12 KB
107
+ ESM dist/chunk-JF4PHPD5.mjs 3.93 KB
108
+ ESM dist/lib/theme-provider.mjs 237.00 B
109
+ ESM dist/lib/typography.mjs 527.00 B
110
+ ESM dist/chunk-3VQNJ235.mjs 3.52 KB
111
+ ESM dist/lib/utils.mjs 95.00 B
112
+ ESM dist/chunk-KKHTJNMM.mjs 2.51 KB
113
+ ESM dist/chunk-NWZ46DJL.mjs 6.31 KB
114
+ ESM dist/chunk-IAOOZCUY.mjs 3.47 KB
115
+ ESM dist/chunk-DBHJ5KC3.mjs 1.56 KB
116
+ ESM dist/chunk-QOJ2DQD6.mjs 2.06 KB
117
+ ESM dist/chunk-V7CNWJT3.mjs 168.00 B
118
+ ESM dist/chunk-FWCSY2DS.mjs 1.30 KB
119
+ ESM dist/chunk-CZ3BW5GL.mjs 2.25 KB
120
+ ESM dist/components/ui/toggle-group.mjs 241.00 B
121
+ ESM dist/chunk-OXQQNQZI.mjs 2.93 KB
122
+ ESM dist/components/ui/toggle.mjs 194.00 B
123
+ ESM dist/components/ui/tooltip.mjs 326.00 B
124
+ ESM dist/components/ui/sheet.mjs 462.00 B
125
+ ESM dist/components/ui/skeleton.mjs 148.00 B
126
+ ESM dist/components/ui/sonner.mjs 111.00 B
127
+ ESM dist/components/ui/spinner.mjs 184.00 B
128
+ ESM dist/components/ui/switch.mjs 186.00 B
129
+ ESM dist/components/ui/table.mjs 336.00 B
130
+ ESM dist/components/ui/tabs.mjs 264.00 B
131
+ ESM dist/components/ui/textarea.mjs 148.00 B
132
+ ESM dist/components/ui/input.mjs 142.00 B
133
+ ESM dist/components/ui/label.mjs 142.00 B
134
+ ESM dist/components/ui/pagination.mjs 460.00 B
135
+ ESM dist/components/ui/popover.mjs 432.00 B
136
+ ESM dist/components/ui/progress.mjs 148.00 B
137
+ ESM dist/components/ui/select.mjs 538.00 B
138
+ ESM dist/components/ui/radio-group.mjs 224.00 B
139
+ ESM dist/components/ui/separator.mjs 150.00 B
140
+ ESM dist/components/ui/date-picker.mjs 376.00 B
141
+ ESM dist/components/ui/dialog.mjs 584.00 B
142
+ ESM dist/components/ui/drawer.mjs 514.00 B
143
+ ESM dist/components/ui/dropdown-menu.mjs 884.00 B
144
+ ESM dist/components/ui/empty.mjs 300.00 B
145
+ ESM dist/components/ui/field.mjs 486.00 B
146
+ ESM dist/components/ui/input-group.mjs 488.00 B
147
+ ESM dist/components/ui/input-otp.mjs 256.00 B
148
+ ESM dist/components/ui/avatar.mjs 310.00 B
149
+ ESM dist/components/ui/badge.mjs 211.00 B
150
+ ESM dist/components/ui/button.mjs 215.00 B
151
+ ESM dist/components/ui/calendar.mjs 260.00 B
152
+ ESM dist/components/ui/card.mjs 318.00 B
153
+ ESM dist/components/ui/checkbox.mjs 194.00 B
154
+ ESM dist/components/ui/chip.mjs 210.00 B
155
+ ESM dist/components/ui/data-table.mjs 736.00 B
156
+ ESM dist/components/ui/accordion.mjs 264.00 B
157
+ ESM dist/components/ui/alert.mjs 210.00 B
158
+ ESM dist/components/ui/alert-dialog.mjs 768.00 B
159
+ ESM ⚡️ Build success in 326ms
160
+ Done in 7.14s.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @wealthx/shadcn
2
2
 
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 026db62: Add README.md
8
+
9
+ ## 1.0.0
10
+
11
+ ### Major Changes
12
+
13
+ - 8dc9f79: Eslint fix
14
+
3
15
  ## 0.0.2
4
16
 
5
17
  ### Patch Changes
package/CHANGES.md ADDED
@@ -0,0 +1,345 @@
1
+ # shadcn Package — Changelog
2
+
3
+ > **Branch:** `shadcn`
4
+ > **Date:** 2026-03-20
5
+ > **Figma:** [Design System - shadcn](https://www.figma.com/design/9V9F0NGVsif8LGmEhVjOcT/Design-System---shadcn)
6
+
7
+ ---
8
+
9
+ ## 2026-03-23 — Table — New Component
10
+
11
+ ### New Components
12
+
13
+ #### Table
14
+
15
+ - **Install:** `npx shadcn@latest add table` (native HTML `<table>` wrapped in semantic sub-components)
16
+ - **Figma:** [shadcn kit — Table](https://www.figma.com/design/QJ0VIGgndNOAswHK9QEnLe/Preview---shadcn-kit-for-Figma---March-2026?node-id=184-890)
17
+ - **WealthX overrides:**
18
+ - `TableHead`: `text-foreground` → `text-muted-foreground` — header labels are secondary text
19
+ - `TableHead`: padding `px-2` → `px-4` — wider column padding per Figma
20
+ - `TableCell`: padding `p-2` → `px-4 py-3` — consistent cell padding per Figma
21
+ - `TableRow`: `transition-colors` → `transition-[background-color,opacity]` — scoped animation
22
+ - **Storybook:** `shadcn-table.stories.tsx` — 4 stories:
23
+ - `Invoices` — full table with header, body, footer, caption
24
+ - `WithBadgeStatus` — user list with Badge status indicators
25
+ - `Empty` — empty state with colspan placeholder row
26
+ - `WithCaption` — paginated table caption example
27
+
28
+ ### Files Changed
29
+
30
+ | File | Change |
31
+ | ------------------------------------------------- | -------------------------------------------- |
32
+ | `packages/shadcn/src/components/ui/table.tsx` | New — Table component with WealthX overrides |
33
+ | `packages/shadcn/package.json` | Added `./table` export entry |
34
+ | `packages/shadcn/tsup.config.ts` | Added `table.tsx` entry point |
35
+ | `apps/docs/stories/shadcn-table.stories.tsx` | New — 4 Storybook stories |
36
+ | `packages/ui/src/component-descriptions/table.md` | New — design changelog |
37
+
38
+ ---
39
+
40
+ ## 2026-03-20 — Separator, Skeleton, Button `xs` size
41
+
42
+ ### New Components
43
+
44
+ #### Separator
45
+
46
+ - **Install:** `npx shadcn@latest add separator` (Radix `SeparatorPrimitive.Root`)
47
+ - **Token:** `bg-border` — 1px line, orientation driven by `data-[orientation=horizontal|vertical]`
48
+ - **WealthX overrides:** none required — separator is a pure line with no border-radius
49
+ - **Figma:** page "Seperator" — component set `Separator` with 2 variants:
50
+ - `Orientation=horizontal` — 344×1px, fill bound to `border` variable
51
+ - `Orientation=vertical` — 1×80px, fill bound to `border` variable
52
+ - **Storybook:** `shadcn-separator.stories.tsx` — 4 stories:
53
+ - `Playground` — interactive orientation + decorative controls
54
+ - `All Variants (Figma match)` — horizontal + vertical
55
+ - `Usage / Between Sections` — real-world horizontal + inline vertical separators
56
+ - `Usage / Semantic (non-decorative)` — `decorative={false}` for screen readers
57
+
58
+ > **Note:** vertical separator requires a parent with a fixed height so that `h-full` computes correctly. Stories use `<div className="flex h-16 items-center">` as wrapper.
59
+
60
+ ---
61
+
62
+ #### Skeleton
63
+
64
+ - **Install:** `npx shadcn@latest add skeleton`
65
+ - **Base class (shadcn):** `animate-pulse rounded-md bg-accent`
66
+ - **WealthX override:** `rounded-md` removed — WealthX enforces square corners (`border-radius: 0`)
67
+ - **Circle variant** retains `rounded-full` via `className` prop — represents avatar/image placeholders
68
+ - **Bug fix:** shadcn output used `React.ComponentProps<"div">` without importing `React`.
69
+ Fixed to follow project convention:
70
+ ```tsx
71
+ import { type ComponentProps } from "react"
72
+ function Skeleton({ className, ...props }: ComponentProps<"div">) {
73
+ ```
74
+ - **Figma:** page "Skeleton" — component set `Skeleton` with 3 variants, all fills bound to `accent` variable:
75
+ - `Variant=line` — 250×16px, `cornerRadius: 0`
76
+ - `Variant=circle` — 48×48px, `cornerRadius: 24` (fully circular)
77
+ - `Variant=block` — 250×120px, `cornerRadius: 0`
78
+ - **Storybook:** `shadcn-skeleton.stories.tsx` — 4 stories:
79
+ - `Playground` — single skeleton block
80
+ - `All Variants (Figma match)` — line, circle, block
81
+ - `Usage / Card` — card image + avatar + two text lines
82
+ - `Usage / List` — 3 repeated list item skeletons
83
+
84
+ ---
85
+
86
+ ### Existing Component Updates
87
+
88
+ #### Button — `xs` size added
89
+
90
+ - **File:** `packages/shadcn/src/components/ui/button.tsx`
91
+ - **Change:** new `xs` entry in the `size` CVA map:
92
+ ```ts
93
+ xs: "h-6 gap-1 px-2 text-xs has-[>svg]:px-1.5",
94
+ ```
95
+ Matches Figma "Size=xs" variant (height 24px, text-xs)
96
+ - **Storybook:** `shadcn-button.stories.tsx` — added `"xs"` to size control options and `<Button size="xs">` to the Sizes render
97
+
98
+ ---
99
+
100
+ ### Package Configuration
101
+
102
+ | File | Change |
103
+ | -------------------------------- | ----------------------------------------------------- |
104
+ | `packages/shadcn/tsup.config.ts` | Added `separator.tsx` and `skeleton.tsx` entry points |
105
+ | `packages/shadcn/package.json` | Added `./separator` and `./skeleton` export entries |
106
+
107
+ ---
108
+
109
+ ### Tailwind CSS Safelist
110
+
111
+ `packages/shadcn/src/styles/globals.css` — extended `@source inline()` to force-generate classes that the glob scanner misses when new story files are added during a running dev server:
112
+
113
+ ```css
114
+ @source inline("h-10 h-12 h-16 h-20 h-24 h-28 h-32 h-36 h-40 h-44 h-48 size-10 size-12 size-14 size-16 rounded-full w-4/5 shrink-0");
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Files Changed
120
+
121
+ | File | Change |
122
+ | ------------------------------------------------- | ----------------------------------------------------------------- |
123
+ | `packages/shadcn/src/components/ui/separator.tsx` | ← New — shadcn Separator, no WealthX overrides |
124
+ | `packages/shadcn/src/components/ui/skeleton.tsx` | ← New — shadcn Skeleton, `rounded-md` removed, React import fixed |
125
+ | `packages/shadcn/src/components/ui/button.tsx` | Added `xs` size variant |
126
+ | `apps/docs/stories/shadcn-separator.stories.tsx` | ← New — 4 stories |
127
+ | `apps/docs/stories/shadcn-skeleton.stories.tsx` | ← New — 4 stories |
128
+ | `apps/docs/stories/shadcn-button.stories.tsx` | Added `xs` to size controls + Sizes story |
129
+ | `packages/shadcn/src/styles/globals.css` | Extended `@source inline()` safelist |
130
+ | `packages/shadcn/tsup.config.ts` | Added separator + skeleton entry points |
131
+ | `packages/shadcn/package.json` | Added `./separator` + `./skeleton` exports |
132
+
133
+ ---
134
+
135
+ ## 2026-03-22 — Field Compound Component + TypeScript Zero-Error Audit
136
+
137
+ ### New Components
138
+
139
+ #### Field (compound component system)
140
+
141
+ - **Install:** `npx shadcn@latest add field`
142
+ - **Figma:** [Design System - shadcn, node 1188-4205](https://www.figma.com/design/9V9F0NGVsif8LGmEhVjOcT/Design-System---shadcn?node-id=1188-4205)
143
+ - **Exports:** `Field`, `FieldLabel`, `FieldTitle`, `FieldContent`, `FieldDescription`, `FieldError`, `FieldGroup`, `FieldSet`, `FieldLegend`, `FieldSeparator`
144
+ - **WealthX overrides:**
145
+ - `FieldDescription` / `FieldError`: `text-xs` (12px) per Figma helper text spec — shadcn default is `text-sm`
146
+ - `FieldError.uniqueErrors`: `Array.from(new Map(...).values())` instead of spread `[...Map.values()]` — avoids `--downlevelIteration` requirement with `target: es5`
147
+ - Strict equality `=== 1` instead of `== 1` in `uniqueErrors.length` check
148
+ - **Orientation variants (CVA):** `vertical` (default) · `horizontal` · `responsive` (stacks mobile, row ≥md)
149
+ - **`FieldLabel` card-selection behavior:** `has-data-[state=checked]:bg-primary/5` is intentional (shadcn card-selection pattern). For plain inline checkboxes, use `<Label htmlFor>` directly instead of `<FieldLabel>` to avoid unwanted bg.
150
+
151
+ - **Storybook:** `apps/docs/stories/shadcn-field.stories.tsx` — 9 stories:
152
+ | Story | What it shows |
153
+ |---|---|
154
+ | `Playground` | Single Field with label + input + description |
155
+ | `Orientations` | vertical / horizontal / responsive variants |
156
+ | `WithError` | Valid · single error · multiple errors via `errors[]` prop |
157
+ | `FieldGroup` | Vertical group · 2-column horizontal grid |
158
+ | `FieldSet & Legend` | `<fieldset>` container with legend + group |
159
+ | `FieldSeparator` | Plain separator · labeled separator ("or") |
160
+ | `WithControls` | Inline checkbox (Label) · Switch + FieldTitle in horizontal Field |
161
+ | `WithTextarea` | Textarea inside Field |
162
+ | `Form Example` | Full realistic form: personal info + preferences + submit |
163
+
164
+ ---
165
+
166
+ ### Figma Components Added
167
+
168
+ New components built in Figma page 1188-4205, inside frame `1188:4206`:
169
+
170
+ | Component | Node | Dimensions | Notes |
171
+ | ----------------- | --------- | ------------ | -------------------------------------------------------------------------------------------- |
172
+ | `Field/Separator` | 3097:9667 | 496×16px | Reuses local Separator instance; plain horizontal rule |
173
+ | `Field/Legend` | 3097:9673 | 496×55px | SemiBold title + Regular description; 2 text swap properties |
174
+ | `Field/Buttons` | 3097:9726 | ComponentSet | Horizontal (Submit+Cancel) / Vertical (full-width Submit + Save draft + Sign in link) |
175
+ | `Field Group` | 3097:9782 | ComponentSet | Horizontal (2-col, 608px) / Vertical (full-height, 496px) — uses Input instances (3042:6881) |
176
+
177
+ ---
178
+
179
+ ### TypeScript Fixes — `apps/docs` Zero-Error Audit
180
+
181
+ Fixed 8 pre-existing TypeScript errors across existing story files. `tsc --noEmit` went from **55 errors → 0**.
182
+
183
+ #### `apps/docs/tsconfig.json` — Module resolution paths added
184
+
185
+ Root cause: stories import `@wealthx/shadcn/components/ui/field` but `package.json` exports map only short keys like `./field`. Vite resolves via regex alias at runtime; TypeScript had no matching `paths`.
186
+
187
+ ```json
188
+ "paths": {
189
+ "@wealthx/shadcn/*": ["../../packages/shadcn/src/*"],
190
+ "@wealthx/ui/*": ["../../packages/ui/src/*"],
191
+ "@/*": ["../../packages/shadcn/src/*"]
192
+ }
193
+ ```
194
+
195
+ #### Per-file fixes
196
+
197
+ | File | Error | Fix |
198
+ | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
199
+ | `autocomplete.stories.tsx` | MUI Autocomplete `onChange` types `newValue` as `unknown` | Cast: `newValue as string \| null` |
200
+ | `card.stories.tsx` | MUI `CardMedia` polymorphic type — `height` + `alt` not on base props | Cast entire props as `any` |
201
+ | `shadcn-calendar.stories.tsx` | `{...args}` spread after `mode="single"` loses type narrowing for `selected` | Destructure `{ captionLayout, showOutsideDays }` from args; pass explicitly |
202
+ | `shadcn-radio-group.stories.tsx` | `as const` on array makes optional props non-optional in destructuring | Replace with `as Array<{ label: string; defaultChecked?: boolean; ... }>` |
203
+ | `shadcn-tabs.stories.tsx` | `satisfies Meta<typeof Tabs>` rejects extra `argTypes` keys (`variant`, `showIconLeft`, `showIconRight`) not in `TabsProps` | Change to `= { ... } as Meta<typeof Tabs>` |
204
+
205
+ ---
206
+
207
+ ## Files Changed
208
+
209
+ | File | Change |
210
+ | -------------------------------------------------- | ---------------------------------------------------------------------------- |
211
+ | `packages/shadcn/src/components/ui/field.tsx` | ← New — shadcn Field compound component, WealthX overrides |
212
+ | `apps/docs/stories/shadcn-field.stories.tsx` | ← New — 9 stories |
213
+ | `apps/docs/tsconfig.json` | Added `paths` to mirror Vite aliases (fixes all module-resolution TS errors) |
214
+ | `apps/docs/stories/autocomplete.stories.tsx` | Fix: cast `newValue as string \| null` |
215
+ | `apps/docs/stories/card.stories.tsx` | Fix: cast CardMedia props as `any` |
216
+ | `apps/docs/stories/shadcn-calendar.stories.tsx` | Fix: destructure specific args instead of spreading all |
217
+ | `apps/docs/stories/shadcn-radio-group.stories.tsx` | Fix: explicit array type instead of `as const` |
218
+ | `apps/docs/stories/shadcn-tabs.stories.tsx` | Fix: `as Meta<typeof Tabs>` instead of `satisfies` |
219
+
220
+ ---
221
+
222
+ ## 2026-03-23 — Accordion, DropdownMenu — New Components + Story Refactors + Lint Fixes
223
+
224
+ ### New Components
225
+
226
+ #### Accordion
227
+
228
+ - **Install:** `npx shadcn@latest add accordion` (Radix `AccordionPrimitive`)
229
+ - **Figma:** [Design System - shadcn, Accordion](https://www.figma.com/design/9V9F0NGVsif8LGmEhVjOcT/Design-System---shadcn)
230
+ - **Exports:** `Accordion`, `AccordionItem`, `AccordionTrigger`, `AccordionContent`
231
+ - **WealthX overrides (documented in component header comment):**
232
+ - `AccordionItem`: removed `last:border-b-0` — consistent bottom border on every item including the last
233
+ - `AccordionTrigger`: `rounded-md` → `rounded-none` — WealthX sharp corners convention
234
+ - `AccordionTrigger`: `items-start` → `items-center` — single-line trigger vertical alignment
235
+ - `AccordionTrigger`: `transition-all` → `transition-[color,opacity]` — scoped animation (prevents layout thrashing from animating all properties)
236
+ - `AccordionTrigger`: focus ring changed from `ring-ring/50` to `ring-foreground/30` — neutral focus color, no brand primary green
237
+ - `AccordionContent`: inner div uses `pb-4 text-muted-foreground` — matches Figma muted content style
238
+ - **CSS animations** added to `globals.css` inside `@theme inline`:
239
+ ```css
240
+ --animate-accordion-down: accordion-down 0.2s ease-out;
241
+ --animate-accordion-up: accordion-up 0.2s ease-out;
242
+ @keyframes accordion-down {
243
+ from {
244
+ height: 0;
245
+ }
246
+ to {
247
+ height: var(--radix-accordion-content-height);
248
+ }
249
+ }
250
+ @keyframes accordion-up {
251
+ from {
252
+ height: var(--radix-accordion-content-height);
253
+ }
254
+ to {
255
+ height: 0;
256
+ }
257
+ }
258
+ ```
259
+ - **Tailwind safelist** extended with `@source inline()` for data-state animation classes and focus ring:
260
+ ```css
261
+ @source inline("data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down focus-visible:ring-foreground/30 [&[data-state=open]>svg]:rotate-180");
262
+ ```
263
+ - **Storybook:** `apps/docs/stories/shadcn-accordion.stories.tsx` — 5 stories in `shadcn/Accordion` section:
264
+ | Story | What it shows |
265
+ |---|---|
266
+ | `Simple` | Single-type collapsible accordion, FAQ fixture |
267
+ | `MultipleOpen` | `type="multiple"` with two items open by default |
268
+ | `WithDisabledItem` | Mixed active + disabled items |
269
+ | `DefaultOpen` | `defaultValue` pre-opens one item on mount |
270
+ | `White-Label (Navy theme)` | Custom `--primary` CSS var override via `style` prop |
271
+ - **Story architecture:** extracted `ItemDef` interface, `FAQ` / `PRODUCT` / `PORTFOLIO` / `WHITELABEL` fixture arrays, `Items` helper component — stories contain no inline data
272
+
273
+ ---
274
+
275
+ #### DropdownMenu
276
+
277
+ - **Install:** `npx shadcn@latest add dropdown-menu` (Radix `DropdownMenuPrimitive`)
278
+ - **Figma:** [Design System - shadcn, node 73-229](https://www.figma.com/design/9V9F0NGVsif8LGmEhVjOcT/Design-System---shadcn?node-id=73-229)
279
+ - **Exports:** `DropdownMenu`, `DropdownMenuPortal`, `DropdownMenuTrigger`, `DropdownMenuContent`, `DropdownMenuItem`, `DropdownMenuLabel`, `DropdownMenuSeparator`, `DropdownMenuGroup`, `DropdownMenuShortcut`, `DropdownMenuSub`, `DropdownMenuSubTrigger`, `DropdownMenuSubContent`, `DropdownMenuCheckboxItem`, `DropdownMenuRadioGroup`, `DropdownMenuRadioItem`
280
+ - **WealthX overrides (documented in component header comment):**
281
+ - All `rounded-md` / `rounded-sm` → `rounded-none` — sharp corners on content, items, sub-trigger, checkbox/radio items, sub-content
282
+ - `DropdownMenuCheckboxItem` / `DropdownMenuRadioItem`: added `data-[state=checked]:bg-primary/10` — subtle checked state tint
283
+ - **Tailwind safelist** extended for destructive variant dynamic classes:
284
+ ```css
285
+ @source inline("data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20");
286
+ ```
287
+ - **Storybook:** `apps/docs/stories/shadcn-dropdown-menu.stories.tsx` — 5 stories in `shadcn/DropdownMenu` section:
288
+ | Story | What it shows |
289
+ |---|---|
290
+ | `Simple` | Basic items with icons and separators |
291
+ | `WithShortcuts` | Items with keyboard shortcut labels |
292
+ | `WithSubMenu` | Nested sub-menu trigger + content |
293
+ | `WithCheckboxItems` | Checkbox group with checked state |
294
+ | `WithRadioItems` | Radio group with exclusive selection |
295
+
296
+ ---
297
+
298
+ ### globals.css Updates
299
+
300
+ `packages/shadcn/src/styles/globals.css`:
301
+
302
+ | Change | Purpose |
303
+ | --------------------------------------------------------------- | ---------------------------------------------------------------------------- |
304
+ | Added `@keyframes accordion-down/up` inside `@theme inline` | Enable Radix accordion open/close height animation |
305
+ | Added `--animate-accordion-down/up` CSS variables | Tailwind `animate-accordion-*` utility hooks |
306
+ | Added destructive variant `@source inline()` safelist | Force-generate DropdownMenu destructive state classes missed by glob scanner |
307
+ | Added accordion state `@source inline()` safelist | Force-generate accordion animation + focus-ring classes |
308
+ | Added `@layer base { * { border-color: var(--color-border) } }` | Default border color uses `border` DS token instead of browser default |
309
+
310
+ ---
311
+
312
+ ### Dependency Fix — `apps/docs`
313
+
314
+ `apps/docs/package.json` was missing two direct dependencies used in shadcn stories, causing `import/no-extraneous-dependencies` ESLint warnings:
315
+
316
+ | Package | Change |
317
+ | ----------------- | ----------------------------- |
318
+ | `@wealthx/shadcn` | Added `"*"` to `dependencies` |
319
+ | `lucide-react` | Added `"*"` to `dependencies` |
320
+
321
+ After fix: `eslint ./stories/shadcn-accordion.stories.tsx --max-warnings 0` → 0 warnings.
322
+
323
+ ---
324
+
325
+ ### Component Descriptions Added
326
+
327
+ | File | Content |
328
+ | --------------------------------------------------------- | ------------------------------------------------------------------- |
329
+ | `packages/ui/src/component-descriptions/accordion.md` | Figma component set structure, token bindings, WealthX DS decisions |
330
+ | `packages/ui/src/component-descriptions/dropdown-menu.md` | Figma component set structure, token bindings, variant map |
331
+
332
+ ---
333
+
334
+ ## Files Changed
335
+
336
+ | File | Change |
337
+ | --------------------------------------------------------- | ----------------------------------------------------------------------- |
338
+ | `packages/shadcn/src/components/ui/accordion.tsx` | ← New — shadcn Accordion, 6 WealthX overrides |
339
+ | `packages/shadcn/src/components/ui/dropdown-menu.tsx` | ← New — shadcn DropdownMenu, `rounded-none` on all sub-components |
340
+ | `apps/docs/stories/shadcn-accordion.stories.tsx` | ← New — 5 stories, extracted fixtures + `Items` helper |
341
+ | `apps/docs/stories/shadcn-dropdown-menu.stories.tsx` | ← New — 5 stories covering all major variants |
342
+ | `packages/shadcn/src/styles/globals.css` | Accordion keyframes + CSS vars, destructive safelist, border base layer |
343
+ | `apps/docs/package.json` | Added `@wealthx/shadcn` + `lucide-react` to dependencies |
344
+ | `packages/ui/src/component-descriptions/accordion.md` | ← New — Accordion design changelog |
345
+ | `packages/ui/src/component-descriptions/dropdown-menu.md` | ← New — DropdownMenu design changelog |
package/README.md ADDED
@@ -0,0 +1,128 @@
1
+ # @wealthx/shadcn
2
+
3
+ WealthX component library built on [shadcn/ui](https://ui.shadcn.com), Tailwind CSS v4, and Radix primitives.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ yarn add @wealthx/shadcn
9
+ ```
10
+
11
+ **Peer dependencies:** `react` and `react-dom` (^18.3.1)
12
+
13
+ ## Setup
14
+
15
+ Import the global stylesheet in your app entry point:
16
+
17
+ ```tsx
18
+ import "@wealthx/shadcn/styles.css";
19
+ ```
20
+
21
+ Wrap your app with the `ThemeProvider` for runtime theming:
22
+
23
+ ```tsx
24
+ import { ThemeProvider } from "@wealthx/shadcn/theme";
25
+
26
+ <ThemeProvider primaryColor="#33FF99" secondaryColor="#162029">
27
+ <App />
28
+ </ThemeProvider>
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ Import components from the package root or individual entry points:
34
+
35
+ ```tsx
36
+ // Barrel import
37
+ import { Button, Card, Input } from "@wealthx/shadcn";
38
+
39
+ // Individual entry points (better tree-shaking)
40
+ import { Button } from "@wealthx/shadcn/button";
41
+ import { Card } from "@wealthx/shadcn/card";
42
+ ```
43
+
44
+ ## Components
45
+
46
+ | Component | Import path | Description |
47
+ |-----------|------------|-------------|
48
+ | Accordion | `./accordion` | Collapsible content sections |
49
+ | Alert | `./alert` | Status messages |
50
+ | AlertDialog | `./alert-dialog` | Confirmation modals |
51
+ | Avatar | `./avatar` | User images with fallback, group, and badge |
52
+ | Badge | `./badge` | Labels and tags |
53
+ | Button | `./button` | Primary action element |
54
+ | Calendar | `./calendar` | Date picker calendar |
55
+ | Card | `./card` | Container with header, content, and footer |
56
+ | Checkbox | `./checkbox` | Single or multiple selection |
57
+ | Chip | `./chip` | Small labeled element |
58
+ | DataTable | `./data-table` | Table powered by TanStack Table |
59
+ | DatePicker | `./date-picker` | Calendar with popover |
60
+ | Dialog | `./dialog` | Modal dialog |
61
+ | Drawer | `./drawer` | Slide-out side panel |
62
+ | DropdownMenu | `./dropdown-menu` | Contextual menu |
63
+ | Empty | `./empty` | Empty state placeholder |
64
+ | Field | `./field` | Form field wrapper with label and error |
65
+ | Input | `./input` | Text input |
66
+ | InputGroup | `./input-group` | Input with addons and buttons |
67
+ | InputOTP | `./input-otp` | Multi-slot OTP entry |
68
+ | Label | `./label` | Form label |
69
+ | Pagination | `./pagination` | Page navigation |
70
+ | Popover | `./popover` | Floating content |
71
+ | Progress | `./progress` | Progress bar |
72
+ | RadioGroup | `./radio-group` | Single selection group |
73
+ | Select | `./select` | Dropdown select |
74
+ | Separator | `./separator` | Visual divider |
75
+ | Sheet | `./sheet` | Off-canvas panel |
76
+ | Skeleton | `./skeleton` | Loading placeholder |
77
+ | Sonner | `./sonner` | Toast notifications |
78
+ | Spinner | `./spinner` | Loading indicator |
79
+ | Switch | `./switch` | Toggle switch |
80
+ | Table | `./table` | Basic HTML table |
81
+ | Tabs | `./tabs` | Tabbed interface |
82
+ | Textarea | `./textarea` | Multi-line text input |
83
+ | Toggle | `./toggle` | Button toggle |
84
+ | ToggleGroup | `./toggle-group` | Grouped toggles |
85
+ | Tooltip | `./tooltip` | Hover hint |
86
+
87
+ ## Utilities
88
+
89
+ | Export | Import path | Description |
90
+ |--------|------------|-------------|
91
+ | `cn()` | `@wealthx/shadcn/lib/utils` | Merge class names (clsx + tailwind-merge) |
92
+ | Color utils | `@wealthx/shadcn/lib/colors` | `hexToRgb`, `hexToOklch`, `getContrastText`, `getLuminance` |
93
+ | Typography | `@wealthx/shadcn/typography` | Rem-based type scale with CSS variable generators |
94
+ | ThemeProvider | `@wealthx/shadcn/theme` | Runtime theme provider for tenant colors |
95
+
96
+ ## Design tokens
97
+
98
+ All tokens are defined as CSS custom properties in `src/styles/globals.css`:
99
+
100
+ - **Colors** — OKLch format. Core tokens: `--background`, `--foreground`, `--primary`, `--secondary`, `--muted`, `--accent`, `--destructive`. Status tokens: `--warning`, `--success`, `--info`. Chart series: `--chart-1` through `--chart-5`.
101
+ - **Typography** — Figtree font family. 13 styles from Display down to Code, each with `--font-size-*`, `--line-height-*`, `--letter-spacing-*`, and `--font-weight-*` variables.
102
+ - **Border radius** — All radii set to `0px` (sharp corners by design).
103
+
104
+ ## Development
105
+
106
+ ```bash
107
+ # Install dependencies
108
+ yarn
109
+
110
+ # Build the package (CSS + JS)
111
+ yarn workspace @wealthx/shadcn build
112
+
113
+ # Watch mode
114
+ yarn workspace @wealthx/shadcn dev
115
+
116
+ # Lint
117
+ yarn workspace @wealthx/shadcn lint
118
+ ```
119
+
120
+ ## Tech stack
121
+
122
+ - [shadcn/ui](https://ui.shadcn.com) — Component primitives
123
+ - [Tailwind CSS v4](https://tailwindcss.com) — Utility-first styles
124
+ - [Radix Primitives](https://www.radix-ui.com) via `@base-ui/react` — Accessible headless components
125
+ - [TanStack Table](https://tanstack.com/table) — DataTable
126
+ - [Lucide](https://lucide.dev) — Icons
127
+ - [tsup](https://tsup.egoist.dev) — Build tooling (CJS + ESM)
128
+ - [class-variance-authority](https://cva.style) — Variant management