@wealthx/shadcn 1.2.2 → 1.3.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 (229) hide show
  1. package/.turbo/turbo-build.log +200 -156
  2. package/CHANGELOG.md +22 -0
  3. package/dist/{chunk-4Y6R4WEC.mjs → chunk-2A5RRQGG.mjs} +9 -22
  4. package/dist/{chunk-TS2ZX2VS.mjs → chunk-2UM72RJ7.mjs} +11 -15
  5. package/dist/{chunk-A56YQQHG.mjs → chunk-3NCUZIFP.mjs} +2 -2
  6. package/dist/chunk-3OYFOX3X.mjs +79 -0
  7. package/dist/{chunk-RP3SQYA3.mjs → chunk-3TTACBDP.mjs} +9 -4
  8. package/dist/chunk-4GAWMKMI.mjs +710 -0
  9. package/dist/{chunk-VGSESELX.mjs → chunk-5FQIKDKP.mjs} +5 -5
  10. package/dist/{chunk-K3JYD4IU.mjs → chunk-5IS7G74I.mjs} +11 -4
  11. package/dist/chunk-6AW4KJHE.mjs +235 -0
  12. package/dist/chunk-6CR5N2JW.mjs +302 -0
  13. package/dist/{chunk-XIRTEFKH.mjs → chunk-6DZEXFNB.mjs} +36 -8
  14. package/dist/chunk-6O6KD7CE.mjs +271 -0
  15. package/dist/chunk-7PV3IWCN.mjs +33 -0
  16. package/dist/{chunk-SPJ5KXW7.mjs → chunk-7S5AESZO.mjs} +5 -5
  17. package/dist/{chunk-RYCLWMZ7.mjs → chunk-ABFDMHOR.mjs} +9 -7
  18. package/dist/{chunk-SWGT756Z.mjs → chunk-AMQZRHEZ.mjs} +10 -4
  19. package/dist/{chunk-WAZD7NFU.mjs → chunk-BKNFWEH2.mjs} +6 -6
  20. package/dist/{chunk-CLIN5525.mjs → chunk-C7CQJNMR.mjs} +1 -1
  21. package/dist/{chunk-D4ILTPOG.mjs → chunk-CFMQP5QS.mjs} +5 -4
  22. package/dist/{chunk-VPBN3WOO.mjs → chunk-DGHAXJBN.mjs} +9 -7
  23. package/dist/chunk-DOEO3CDL.mjs +27 -0
  24. package/dist/{chunk-5MEWU56Z.mjs → chunk-DUJTAXMH.mjs} +11 -6
  25. package/dist/{chunk-GGM2UYGG.mjs → chunk-EBXQWIYG.mjs} +10 -4
  26. package/dist/chunk-EWRB4PAD.mjs +468 -0
  27. package/dist/{chunk-ZSHYDDRB.mjs → chunk-FAKPBKLT.mjs} +6 -2
  28. package/dist/chunk-FNQXOAYJ.mjs +169 -0
  29. package/dist/{chunk-A6AAWBPF.mjs → chunk-GHC7LLUX.mjs} +13 -4
  30. package/dist/chunk-HBZLGDIN.mjs +507 -0
  31. package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
  32. package/dist/{chunk-CGH4DRNG.mjs → chunk-HVY6KCCF.mjs} +10 -7
  33. package/dist/chunk-I3RZS7V2.mjs +136 -0
  34. package/dist/chunk-IAE3F7DR.mjs +1962 -0
  35. package/dist/{chunk-UT4KJR7V.mjs → chunk-IHMFS7NZ.mjs} +35 -74
  36. package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
  37. package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
  38. package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
  39. package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
  40. package/dist/chunk-LV35NGVG.mjs +272 -0
  41. package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
  42. package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
  43. package/dist/chunk-MIZQHHUO.mjs +441 -0
  44. package/dist/chunk-MN5NYQCL.mjs +29 -0
  45. package/dist/chunk-NL3ZO62D.mjs +31 -0
  46. package/dist/{chunk-Q76O3RIQ.mjs → chunk-NMOI6CQD.mjs} +1 -1
  47. package/dist/{chunk-P6AM5V7O.mjs → chunk-OODBHKG7.mjs} +1 -1
  48. package/dist/chunk-PBL4OQV2.mjs +283 -0
  49. package/dist/{chunk-Y4QFWRNR.mjs → chunk-PU4YZQXV.mjs} +17 -18
  50. package/dist/chunk-QMY3AZJH.mjs +80 -0
  51. package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
  52. package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
  53. package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
  54. package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
  55. package/dist/chunk-UMTOX62O.mjs +415 -0
  56. package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
  57. package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
  58. package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
  59. package/dist/{chunk-ZRSDX6OW.mjs → chunk-ZC45IGZO.mjs} +33 -30
  60. package/dist/components/ui/add-column-modal.js +42 -14
  61. package/dist/components/ui/add-column-modal.mjs +5 -5
  62. package/dist/components/ui/add-lead-modal.js +42 -11
  63. package/dist/components/ui/add-lead-modal.mjs +3 -3
  64. package/dist/components/ui/advisor-card.js +497 -0
  65. package/dist/components/ui/advisor-card.mjs +13 -0
  66. package/dist/components/ui/ai-assistant-drawer.js +11 -10
  67. package/dist/components/ui/ai-assistant-drawer.mjs +3 -3
  68. package/dist/components/ui/alert-dialog.js +2 -2
  69. package/dist/components/ui/alert-dialog.mjs +2 -2
  70. package/dist/components/ui/appointment-action-dialogs.js +1160 -0
  71. package/dist/components/ui/appointment-action-dialogs.mjs +23 -0
  72. package/dist/components/ui/appointment-availability-settings.js +1590 -0
  73. package/dist/components/ui/appointment-availability-settings.mjs +23 -0
  74. package/dist/components/ui/appointment-book-dialog.js +1744 -0
  75. package/dist/components/ui/appointment-book-dialog.mjs +27 -0
  76. package/dist/components/ui/appointment-calendar-view.js +833 -0
  77. package/dist/components/ui/appointment-calendar-view.mjs +14 -0
  78. package/dist/components/ui/appointment-detail-sheet.js +1517 -0
  79. package/dist/components/ui/appointment-detail-sheet.mjs +24 -0
  80. package/dist/components/ui/appointment-gmail-connect.js +467 -0
  81. package/dist/components/ui/appointment-gmail-connect.mjs +14 -0
  82. package/dist/components/ui/appointment-mini-card.js +345 -0
  83. package/dist/components/ui/appointment-mini-card.mjs +11 -0
  84. package/dist/components/ui/appointment-time-slot-picker.js +311 -0
  85. package/dist/components/ui/appointment-time-slot-picker.mjs +13 -0
  86. package/dist/components/ui/appointment-upcoming-card.js +1268 -0
  87. package/dist/components/ui/appointment-upcoming-card.mjs +21 -0
  88. package/dist/components/ui/backoffice-alert-history-chart.js +11 -5
  89. package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -4
  90. package/dist/components/ui/backoffice-alerts-chart.js +786 -0
  91. package/dist/components/ui/backoffice-alerts-chart.mjs +19 -0
  92. package/dist/components/ui/backoffice-connections-chart.js +817 -0
  93. package/dist/components/ui/backoffice-connections-chart.mjs +19 -0
  94. package/dist/components/ui/backoffice-contact-history-chart.js +11 -5
  95. package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -4
  96. package/dist/components/ui/badge.js +6 -6
  97. package/dist/components/ui/badge.mjs +1 -1
  98. package/dist/components/ui/borrowing-capacity-line-chart.js +30 -21
  99. package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -4
  100. package/dist/components/ui/button.js +2 -2
  101. package/dist/components/ui/button.mjs +1 -1
  102. package/dist/components/ui/calendar.js +2 -2
  103. package/dist/components/ui/calendar.mjs +2 -2
  104. package/dist/components/ui/card.js +1 -1
  105. package/dist/components/ui/card.mjs +1 -1
  106. package/dist/components/ui/cash-balance-line-chart.js +31 -23
  107. package/dist/components/ui/cash-balance-line-chart.mjs +5 -4
  108. package/dist/components/ui/cashflow-bar-chart.js +12 -5
  109. package/dist/components/ui/cashflow-bar-chart.mjs +5 -4
  110. package/dist/components/ui/chip.js +97 -18
  111. package/dist/components/ui/chip.mjs +3 -2
  112. package/dist/components/ui/color-picker.js +158 -28
  113. package/dist/components/ui/color-picker.mjs +3 -1
  114. package/dist/components/ui/data-table.js +140 -119
  115. package/dist/components/ui/data-table.mjs +3 -2
  116. package/dist/components/ui/date-picker.js +48 -27
  117. package/dist/components/ui/date-picker.mjs +4 -3
  118. package/dist/components/ui/dialog.js +37 -9
  119. package/dist/components/ui/dialog.mjs +2 -2
  120. package/dist/components/ui/expense-bar-chart.js +12 -5
  121. package/dist/components/ui/expense-bar-chart.mjs +5 -4
  122. package/dist/components/ui/field.mjs +2 -2
  123. package/dist/components/ui/financial-cards.js +322 -155
  124. package/dist/components/ui/financial-cards.mjs +5 -3
  125. package/dist/components/ui/financial-drawers.js +2 -2
  126. package/dist/components/ui/financial-drawers.mjs +3 -3
  127. package/dist/components/ui/financial-sections.js +14 -10
  128. package/dist/components/ui/financial-sections.mjs +6 -5
  129. package/dist/components/ui/income-bar-chart.js +12 -5
  130. package/dist/components/ui/income-bar-chart.mjs +5 -4
  131. package/dist/components/ui/input-group.js +2 -2
  132. package/dist/components/ui/input-group.mjs +2 -2
  133. package/dist/components/ui/kanban-column.js +52 -44
  134. package/dist/components/ui/kanban-column.mjs +7 -5
  135. package/dist/components/ui/opportunity-card.js +52 -44
  136. package/dist/components/ui/opportunity-card.mjs +6 -4
  137. package/dist/components/ui/opportunity-edit-modals.js +1367 -1263
  138. package/dist/components/ui/opportunity-edit-modals.mjs +8 -8
  139. package/dist/components/ui/opportunity-summary-tab.js +2744 -2157
  140. package/dist/components/ui/opportunity-summary-tab.mjs +14 -14
  141. package/dist/components/ui/page-header.js +92 -0
  142. package/dist/components/ui/page-header.mjs +8 -0
  143. package/dist/components/ui/page-top-bar.js +88 -0
  144. package/dist/components/ui/page-top-bar.mjs +8 -0
  145. package/dist/components/ui/pagination.js +303 -19
  146. package/dist/components/ui/pagination.mjs +11 -4
  147. package/dist/components/ui/pipeline-board.js +205 -191
  148. package/dist/components/ui/pipeline-board.mjs +9 -7
  149. package/dist/components/ui/pipeline-dialogs.js +114 -65
  150. package/dist/components/ui/pipeline-dialogs.mjs +7 -6
  151. package/dist/components/ui/pipeline-primitives.js +6 -6
  152. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  153. package/dist/components/ui/property-cashflow-doughnut-chart.js +14 -12
  154. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -4
  155. package/dist/components/ui/property-debt-equity-doughnut-chart.js +14 -12
  156. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -4
  157. package/dist/components/ui/property-mobile-estimate-line-chart.js +16 -14
  158. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -4
  159. package/dist/components/ui/sidebar-nav.js +234 -95
  160. package/dist/components/ui/sidebar-nav.mjs +4 -1
  161. package/dist/components/ui/stage-timeline.js +6 -6
  162. package/dist/components/ui/stage-timeline.mjs +3 -3
  163. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +18 -16
  164. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -4
  165. package/dist/components/ui/transactions-income-expense-bar-chart.js +28 -12
  166. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -4
  167. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +18 -16
  168. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -4
  169. package/dist/index.js +12899 -9343
  170. package/dist/index.mjs +256 -190
  171. package/dist/styles.css +1 -1
  172. package/package.json +71 -1
  173. package/src/components/index.tsx +114 -9
  174. package/src/components/ui/add-column-modal.tsx +7 -7
  175. package/src/components/ui/add-lead-modal.tsx +6 -3
  176. package/src/components/ui/advisor-card.tsx +227 -0
  177. package/src/components/ui/ai-assistant-drawer.tsx +4 -3
  178. package/src/components/ui/appointment-action-dialogs.tsx +297 -0
  179. package/src/components/ui/appointment-availability-settings.tsx +645 -0
  180. package/src/components/ui/appointment-book-dialog.tsx +618 -0
  181. package/src/components/ui/appointment-calendar-view.tsx +510 -0
  182. package/src/components/ui/appointment-detail-sheet.tsx +415 -0
  183. package/src/components/ui/appointment-gmail-connect.tsx +188 -0
  184. package/src/components/ui/appointment-mini-card.tsx +104 -0
  185. package/src/components/ui/appointment-time-slot-picker.tsx +123 -0
  186. package/src/components/ui/appointment-upcoming-card.tsx +635 -0
  187. package/src/components/ui/backoffice-alert-history-chart.tsx +10 -2
  188. package/src/components/ui/backoffice-alerts-chart.tsx +312 -0
  189. package/src/components/ui/backoffice-connections-chart.tsx +339 -0
  190. package/src/components/ui/backoffice-contact-history-chart.tsx +10 -2
  191. package/src/components/ui/badge.tsx +12 -6
  192. package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -11
  193. package/src/components/ui/button.tsx +2 -2
  194. package/src/components/ui/card.tsx +1 -1
  195. package/src/components/ui/cash-balance-line-chart.tsx +4 -23
  196. package/src/components/ui/cashflow-bar-chart.tsx +9 -2
  197. package/src/components/ui/chart-shared.tsx +4 -11
  198. package/src/components/ui/chip.tsx +23 -19
  199. package/src/components/ui/color-picker.tsx +4 -2
  200. package/src/components/ui/data-table.tsx +28 -74
  201. package/src/components/ui/date-picker.tsx +42 -37
  202. package/src/components/ui/dialog.tsx +72 -6
  203. package/src/components/ui/expense-bar-chart.tsx +11 -2
  204. package/src/components/ui/financial-cards.tsx +99 -10
  205. package/src/components/ui/income-bar-chart.tsx +11 -2
  206. package/src/components/ui/opportunity-card.tsx +10 -39
  207. package/src/components/ui/opportunity-edit-modals.tsx +98 -36
  208. package/src/components/ui/opportunity-summary-tab.tsx +548 -232
  209. package/src/components/ui/page-header.tsx +57 -0
  210. package/src/components/ui/page-top-bar.tsx +48 -0
  211. package/src/components/ui/pagination.tsx +171 -22
  212. package/src/components/ui/pipeline-board.tsx +12 -5
  213. package/src/components/ui/property-cashflow-doughnut-chart.tsx +3 -1
  214. package/src/components/ui/property-debt-equity-doughnut-chart.tsx +3 -1
  215. package/src/components/ui/property-mobile-estimate-line-chart.tsx +3 -1
  216. package/src/components/ui/sidebar-nav.tsx +36 -37
  217. package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +3 -1
  218. package/src/components/ui/transactions-income-expense-bar-chart.tsx +12 -9
  219. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +3 -1
  220. package/src/lib/format-currency.ts +44 -0
  221. package/src/lib/format-date.ts +50 -0
  222. package/src/lib/opportunity-constants.ts +12 -0
  223. package/src/styles/globals.css +17 -15
  224. package/src/styles/styles-css.ts +1 -1
  225. package/tsup.config.ts +14 -0
  226. package/dist/chunk-S4QRUQNW.mjs +0 -475
  227. package/dist/chunk-URGMJAE3.mjs +0 -1885
  228. package/dist/chunk-WNGWBVLV.mjs +0 -148
  229. package/dist/{chunk-LLVQKSU3.mjs → chunk-GD4BJDJR.mjs} +3 -3
@@ -62,6 +62,11 @@ __export(chip_exports, {
62
62
  Chip: () => Chip
63
63
  });
64
64
  module.exports = __toCommonJS(chip_exports);
65
+ var import_lucide_react2 = require("lucide-react");
66
+
67
+ // src/components/ui/button.tsx
68
+ var import_react = require("react");
69
+ var import_class_variance_authority = require("class-variance-authority");
65
70
  var import_lucide_react = require("lucide-react");
66
71
 
67
72
  // src/lib/utils.ts
@@ -103,9 +108,6 @@ function cn(...inputs) {
103
108
  return twMerge((0, import_clsx.clsx)(inputs));
104
109
  }
105
110
 
106
- // src/components/ui/badge.tsx
107
- var import_class_variance_authority = require("class-variance-authority");
108
-
109
111
  // src/lib/slot.tsx
110
112
  var React = __toESM(require("react"));
111
113
  function mergeRefs(...refs) {
@@ -153,19 +155,94 @@ var Slot = React.forwardRef(
153
155
  );
154
156
  Slot.displayName = "Slot";
155
157
 
156
- // src/components/ui/badge.tsx
158
+ // src/components/ui/button.tsx
157
159
  var import_jsx_runtime = require("react/jsx-runtime");
158
- var badgeVariants = (0, import_class_variance_authority.cva)(
160
+ var buttonVariants = (0, import_class_variance_authority.cva)(
161
+ "inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-button whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
162
+ {
163
+ variants: {
164
+ variant: {
165
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
166
+ secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
167
+ destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
168
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
169
+ "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
170
+ "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
171
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
172
+ link: "text-primary underline-offset-4 hover:underline"
173
+ },
174
+ size: {
175
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
176
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
177
+ sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
178
+ lg: "h-10 px-6 has-[>svg]:px-4",
179
+ icon: "size-9",
180
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
181
+ "icon-sm": "size-8",
182
+ "icon-lg": "size-10"
183
+ }
184
+ },
185
+ defaultVariants: {
186
+ variant: "default",
187
+ size: "default"
188
+ }
189
+ }
190
+ );
191
+ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
192
+ var _b = _a, {
193
+ className,
194
+ variant,
195
+ size,
196
+ asChild = false,
197
+ loading = false,
198
+ disabled,
199
+ type = "button",
200
+ children
201
+ } = _b, props = __objRest(_b, [
202
+ "className",
203
+ "variant",
204
+ "size",
205
+ "asChild",
206
+ "loading",
207
+ "disabled",
208
+ "type",
209
+ "children"
210
+ ]);
211
+ const Comp = asChild ? Slot : "button";
212
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
213
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
214
+ Comp,
215
+ __spreadProps(__spreadValues({
216
+ className: cn(buttonVariants({ variant, size, className })),
217
+ "data-size": size,
218
+ "data-slot": "button",
219
+ "data-variant": variant,
220
+ disabled: loading || disabled,
221
+ ref,
222
+ type
223
+ }, props), {
224
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
225
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
226
+ !isIconOnly && children
227
+ ] }) : children
228
+ })
229
+ );
230
+ });
231
+
232
+ // src/components/ui/badge.tsx
233
+ var import_class_variance_authority2 = require("class-variance-authority");
234
+ var import_jsx_runtime2 = require("react/jsx-runtime");
235
+ var badgeVariants = (0, import_class_variance_authority2.cva)(
159
236
  "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
160
237
  {
161
238
  variants: {
162
239
  variant: {
163
- default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
164
- secondary: "bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
165
- destructive: "bg-destructive text-destructive-foreground focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
166
- success: "bg-success text-success-foreground [a&]:hover:bg-success/90",
167
- warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90",
168
- info: "bg-info text-info-foreground [a&]:hover:bg-info/90",
240
+ default: "border-primary/40 bg-primary/10 text-foreground [a&]:hover:bg-primary/15",
241
+ secondary: "border-border bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
242
+ destructive: "border-destructive/40 bg-destructive/10 text-destructive-text focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/15",
243
+ success: "border-success/40 bg-success/10 text-success-text [a&]:hover:bg-success/15",
244
+ warning: "border-warning/40 bg-warning/10 text-warning-text [a&]:hover:bg-warning/15",
245
+ info: "border-info/40 bg-info/10 text-info-text [a&]:hover:bg-info/15",
169
246
  outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
170
247
  ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
171
248
  link: "text-primary underline-offset-4 [a&]:hover:underline"
@@ -178,7 +255,7 @@ var badgeVariants = (0, import_class_variance_authority.cva)(
178
255
  );
179
256
 
180
257
  // src/components/ui/chip.tsx
181
- var import_jsx_runtime2 = require("react/jsx-runtime");
258
+ var import_jsx_runtime3 = require("react/jsx-runtime");
182
259
  function Chip(_a) {
183
260
  var _b = _a, {
184
261
  className,
@@ -193,7 +270,7 @@ function Chip(_a) {
193
270
  "disabled",
194
271
  "children"
195
272
  ]);
196
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
273
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
197
274
  "span",
198
275
  __spreadProps(__spreadValues({
199
276
  "aria-disabled": disabled,
@@ -209,19 +286,21 @@ function Chip(_a) {
209
286
  }, props), {
210
287
  children: [
211
288
  children,
212
- onRemove ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
213
- "button",
289
+ onRemove ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
290
+ Button,
214
291
  {
292
+ type: "button",
293
+ variant: "ghost",
294
+ size: "icon",
215
295
  "aria-label": "Remove",
216
- className: "ml-0.5 inline-flex shrink-0 items-center justify-center rounded-full p-0.5 opacity-60 hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none",
296
+ className: "ml-0.5 size-4 shrink-0 rounded-full p-0.5 opacity-60 hover:opacity-100 disabled:pointer-events-none",
217
297
  "data-slot": "chip-remove",
218
298
  disabled,
219
299
  onClick: (e) => {
220
300
  e.stopPropagation();
221
301
  onRemove();
222
302
  },
223
- type: "button",
224
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.X, { className: "size-3" })
303
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.X, { className: "size-3" })
225
304
  }
226
305
  ) : null
227
306
  ]
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  Chip
3
- } from "../../chunk-RP3SQYA3.mjs";
4
- import "../../chunk-WAZD7NFU.mjs";
3
+ } from "../../chunk-3TTACBDP.mjs";
4
+ import "../../chunk-BKNFWEH2.mjs";
5
+ import "../../chunk-XREGSKX3.mjs";
5
6
  import "../../chunk-DBHJ5KC3.mjs";
6
7
  import "../../chunk-VLQZANBF.mjs";
7
8
  import "../../chunk-FWCSY2DS.mjs";
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
7
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
8
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
9
  var __getProtoOf = Object.getPrototypeOf;
@@ -19,6 +21,7 @@ var __spreadValues = (a, b) => {
19
21
  }
20
22
  return a;
21
23
  };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
25
  var __objRest = (source, exclude) => {
23
26
  var target = {};
24
27
  for (var prop in source)
@@ -64,7 +67,7 @@ __export(color_picker_exports, {
64
67
  normalizeHex: () => normalizeHex
65
68
  });
66
69
  module.exports = __toCommonJS(color_picker_exports);
67
- var React2 = __toESM(require("react"));
70
+ var React3 = __toESM(require("react"));
68
71
 
69
72
  // src/lib/utils.ts
70
73
  var import_clsx = require("clsx");
@@ -179,8 +182,134 @@ function Input(_a) {
179
182
  );
180
183
  }
181
184
 
182
- // src/components/ui/color-picker.tsx
185
+ // src/components/ui/button.tsx
186
+ var import_react2 = require("react");
187
+ var import_class_variance_authority = require("class-variance-authority");
188
+ var import_lucide_react = require("lucide-react");
189
+
190
+ // src/lib/slot.tsx
191
+ var React2 = __toESM(require("react"));
192
+ function mergeRefs(...refs) {
193
+ return (value) => {
194
+ for (const ref of refs) {
195
+ if (typeof ref === "function") ref(value);
196
+ else if (ref !== null)
197
+ ref.current = value;
198
+ }
199
+ };
200
+ }
201
+ var Slot = React2.forwardRef(
202
+ (_a, forwardedRef) => {
203
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
204
+ const child = React2.Children.only(children);
205
+ if (!React2.isValidElement(child)) return null;
206
+ const childProps = child.props;
207
+ const merged = __spreadValues({}, props);
208
+ for (const key of Object.keys(childProps)) {
209
+ if (key === "className") {
210
+ merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
211
+ } else if (key === "style") {
212
+ merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
213
+ } else if (key.startsWith("on") && typeof childProps[key] === "function") {
214
+ const parentHandler = props[key];
215
+ if (typeof parentHandler === "function") {
216
+ merged[key] = (...args) => {
217
+ childProps[key](...args);
218
+ parentHandler(...args);
219
+ };
220
+ } else {
221
+ merged[key] = childProps[key];
222
+ }
223
+ } else {
224
+ merged[key] = childProps[key];
225
+ }
226
+ }
227
+ const childRef = child.ref;
228
+ merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
229
+ return React2.cloneElement(
230
+ child,
231
+ merged
232
+ );
233
+ }
234
+ );
235
+ Slot.displayName = "Slot";
236
+
237
+ // src/components/ui/button.tsx
183
238
  var import_jsx_runtime4 = require("react/jsx-runtime");
239
+ var buttonVariants = (0, import_class_variance_authority.cva)(
240
+ "inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-button whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
241
+ {
242
+ variants: {
243
+ variant: {
244
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
245
+ secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
246
+ destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
247
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
248
+ "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
249
+ "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
250
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
251
+ link: "text-primary underline-offset-4 hover:underline"
252
+ },
253
+ size: {
254
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
255
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
256
+ sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
257
+ lg: "h-10 px-6 has-[>svg]:px-4",
258
+ icon: "size-9",
259
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
260
+ "icon-sm": "size-8",
261
+ "icon-lg": "size-10"
262
+ }
263
+ },
264
+ defaultVariants: {
265
+ variant: "default",
266
+ size: "default"
267
+ }
268
+ }
269
+ );
270
+ var Button = (0, import_react2.forwardRef)(function Button2(_a, ref) {
271
+ var _b = _a, {
272
+ className,
273
+ variant,
274
+ size,
275
+ asChild = false,
276
+ loading = false,
277
+ disabled,
278
+ type = "button",
279
+ children
280
+ } = _b, props = __objRest(_b, [
281
+ "className",
282
+ "variant",
283
+ "size",
284
+ "asChild",
285
+ "loading",
286
+ "disabled",
287
+ "type",
288
+ "children"
289
+ ]);
290
+ const Comp = asChild ? Slot : "button";
291
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
292
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
293
+ Comp,
294
+ __spreadProps(__spreadValues({
295
+ className: cn(buttonVariants({ variant, size, className })),
296
+ "data-size": size,
297
+ "data-slot": "button",
298
+ "data-variant": variant,
299
+ disabled: loading || disabled,
300
+ ref,
301
+ type
302
+ }, props), {
303
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
304
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
305
+ !isIconOnly && children
306
+ ] }) : children
307
+ })
308
+ );
309
+ });
310
+
311
+ // src/components/ui/color-picker.tsx
312
+ var import_jsx_runtime5 = require("react/jsx-runtime");
184
313
  var COLOR_PICKER_PRESETS = [
185
314
  // Blues
186
315
  "#1E40AF",
@@ -232,16 +361,17 @@ function ColorSwatch({
232
361
  onClick,
233
362
  className
234
363
  }) {
235
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
236
- "button",
364
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
365
+ Button,
237
366
  {
238
367
  type: "button",
368
+ variant: "ghost",
239
369
  title: color,
240
370
  "aria-label": `Select color ${color}`,
241
371
  "aria-pressed": selected,
242
372
  onClick: () => onClick == null ? void 0 : onClick(color),
243
373
  className: cn(
244
- "relative shrink-0 transition-all outline-none shadow-[inset_0_0_0_1px_rgba(0,0,0,0.12)]",
374
+ "relative shrink-0 p-0 transition-all outline-none shadow-[inset_0_0_0_1px_rgba(0,0,0,0.12)]",
245
375
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
246
376
  size === "md" ? "size-7" : "size-5",
247
377
  selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
@@ -256,8 +386,8 @@ function ColorPickerContent({
256
386
  onChange,
257
387
  presets = COLOR_PICKER_PRESETS
258
388
  }) {
259
- const [hexInput, setHexInput] = React2.useState(value);
260
- React2.useEffect(() => {
389
+ const [hexInput, setHexInput] = React3.useState(value);
390
+ React3.useEffect(() => {
261
391
  setHexInput(value);
262
392
  }, [value]);
263
393
  function handleHexInputChange(e) {
@@ -279,10 +409,10 @@ function ColorPickerContent({
279
409
  }
280
410
  const normalizedInput = normalizeHex(hexInput);
281
411
  const isValid = isValidHex(normalizedInput);
282
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { "data-slot": "color-picker-content", className: "flex flex-col gap-4", children: [
283
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
284
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mb-2 text-xs font-medium text-muted-foreground", children: "Presets" }),
285
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "grid grid-cols-7 gap-1.5", children: presets.map((color) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
412
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { "data-slot": "color-picker-content", className: "flex flex-col gap-4", children: [
413
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
414
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mb-2 text-xs font-medium text-muted-foreground", children: "Presets" }),
415
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "grid grid-cols-7 gap-1.5", children: presets.map((color) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
286
416
  ColorSwatch,
287
417
  {
288
418
  color,
@@ -292,10 +422,10 @@ function ColorPickerContent({
292
422
  color
293
423
  )) })
294
424
  ] }),
295
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
296
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mb-2 text-xs font-medium text-muted-foreground", children: "Custom hex" }),
297
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-2", children: [
298
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
425
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
426
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mb-2 text-xs font-medium text-muted-foreground", children: "Custom hex" }),
427
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-2", children: [
428
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
299
429
  "label",
300
430
  {
301
431
  className: "relative size-9 shrink-0 cursor-pointer border border-border",
@@ -303,7 +433,7 @@ function ColorPickerContent({
303
433
  style: {
304
434
  backgroundColor: isValid ? normalizedInput : value
305
435
  },
306
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
436
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
307
437
  "input",
308
438
  {
309
439
  type: "color",
@@ -318,7 +448,7 @@ function ColorPickerContent({
318
448
  )
319
449
  }
320
450
  ),
321
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
451
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
322
452
  Input,
323
453
  {
324
454
  "aria-label": "Hex color value",
@@ -344,25 +474,25 @@ function ColorPicker({
344
474
  className
345
475
  }) {
346
476
  const isControlled = controlledValue !== void 0;
347
- const [internalValue, setInternalValue] = React2.useState(defaultValue);
477
+ const [internalValue, setInternalValue] = React3.useState(defaultValue);
348
478
  const color = isControlled ? controlledValue : internalValue;
349
- const [open, setOpen] = React2.useState(false);
350
- React2.useEffect(() => {
479
+ const [open, setOpen] = React3.useState(false);
480
+ React3.useEffect(() => {
351
481
  if (disabled) setOpen(false);
352
482
  }, [disabled]);
353
483
  function handleChange(newColor) {
354
484
  if (!isControlled) setInternalValue(newColor);
355
485
  onChange == null ? void 0 : onChange(newColor);
356
486
  }
357
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
487
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
358
488
  "div",
359
489
  {
360
490
  "data-slot": "color-picker",
361
491
  className: cn("inline-flex flex-col gap-1.5 font-sans", className),
362
492
  children: [
363
- label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
364
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
365
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
493
+ label && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
494
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
495
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
366
496
  PopoverTrigger,
367
497
  {
368
498
  disabled,
@@ -373,7 +503,7 @@ function ColorPicker({
373
503
  "disabled:cursor-not-allowed disabled:opacity-50"
374
504
  ),
375
505
  children: [
376
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
506
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
377
507
  "span",
378
508
  {
379
509
  "aria-hidden": true,
@@ -381,17 +511,17 @@ function ColorPicker({
381
511
  style: { backgroundColor: color }
382
512
  }
383
513
  ),
384
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "font-mono text-xs uppercase tracking-wide", children: color })
514
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "font-mono text-xs uppercase tracking-wide", children: color })
385
515
  ]
386
516
  }
387
517
  ),
388
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
518
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
389
519
  PopoverContent,
390
520
  {
391
521
  className: "w-[220px] p-4",
392
522
  align: "start",
393
523
  "data-shadcn-scope": true,
394
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
524
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
395
525
  ColorPickerContent,
396
526
  {
397
527
  value: color,
@@ -5,9 +5,11 @@ import {
5
5
  ColorSwatch,
6
6
  isValidHex,
7
7
  normalizeHex
8
- } from "../../chunk-ZSHYDDRB.mjs";
8
+ } from "../../chunk-FAKPBKLT.mjs";
9
9
  import "../../chunk-3GF7OVTP.mjs";
10
10
  import "../../chunk-GYMYRIZP.mjs";
11
+ import "../../chunk-XREGSKX3.mjs";
12
+ import "../../chunk-DBHJ5KC3.mjs";
11
13
  import "../../chunk-FEZKMUCF.mjs";
12
14
  import "../../chunk-QOJ2DQD6.mjs";
13
15
  import "../../chunk-VLQZANBF.mjs";