@wealthx/shadcn 1.2.1 → 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 (247) hide show
  1. package/.turbo/turbo-build.log +203 -150
  2. package/CHANGELOG.md +29 -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-SYOD63OZ.mjs → chunk-5FQIKDKP.mjs} +6 -6
  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-WOEHFRGB.mjs → chunk-BDYZCBRT.mjs} +4 -4
  20. package/dist/{chunk-WAZD7NFU.mjs → chunk-BKNFWEH2.mjs} +6 -6
  21. package/dist/{chunk-CLIN5525.mjs → chunk-C7CQJNMR.mjs} +1 -1
  22. package/dist/{chunk-D4ILTPOG.mjs → chunk-CFMQP5QS.mjs} +5 -4
  23. package/dist/{chunk-VPBN3WOO.mjs → chunk-DGHAXJBN.mjs} +9 -7
  24. package/dist/chunk-DOEO3CDL.mjs +27 -0
  25. package/dist/{chunk-KUDCQ4FI.mjs → chunk-DUJTAXMH.mjs} +9 -4
  26. package/dist/{chunk-GGM2UYGG.mjs → chunk-EBXQWIYG.mjs} +10 -4
  27. package/dist/{chunk-PMB3A7V3.mjs → chunk-EI5F6FMT.mjs} +1 -1
  28. package/dist/chunk-EWRB4PAD.mjs +468 -0
  29. package/dist/chunk-FAKPBKLT.mjs +253 -0
  30. package/dist/chunk-FNQXOAYJ.mjs +169 -0
  31. package/dist/{chunk-4CX4SBRO.mjs → chunk-GHC7LLUX.mjs} +14 -5
  32. package/dist/chunk-HBZLGDIN.mjs +507 -0
  33. package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
  34. package/dist/{chunk-PR6V5XKM.mjs → chunk-HVY6KCCF.mjs} +7 -4
  35. package/dist/chunk-I3RZS7V2.mjs +136 -0
  36. package/dist/chunk-IAE3F7DR.mjs +1962 -0
  37. package/dist/{chunk-ZRO5JO3H.mjs → chunk-IHMFS7NZ.mjs} +81 -84
  38. package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
  39. package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
  40. package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
  41. package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
  42. package/dist/{chunk-CSDO6VBW.mjs → chunk-LBMRIB3G.mjs} +10 -10
  43. package/dist/chunk-LV35NGVG.mjs +272 -0
  44. package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
  45. package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
  46. package/dist/chunk-MIZQHHUO.mjs +441 -0
  47. package/dist/chunk-MN5NYQCL.mjs +29 -0
  48. package/dist/chunk-NL3ZO62D.mjs +31 -0
  49. package/dist/{chunk-Q76O3RIQ.mjs → chunk-NMOI6CQD.mjs} +1 -1
  50. package/dist/{chunk-P6AM5V7O.mjs → chunk-OODBHKG7.mjs} +1 -1
  51. package/dist/chunk-PBL4OQV2.mjs +283 -0
  52. package/dist/{chunk-3WMX6KWS.mjs → chunk-PU4YZQXV.mjs} +11 -12
  53. package/dist/chunk-QMY3AZJH.mjs +80 -0
  54. package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
  55. package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
  56. package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
  57. package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
  58. package/dist/chunk-U4NDAF2P.mjs +207 -0
  59. package/dist/{chunk-DOH3EHX7.mjs → chunk-U5X52X37.mjs} +1 -1
  60. package/dist/chunk-UMTOX62O.mjs +415 -0
  61. package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
  62. package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
  63. package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
  64. package/dist/chunk-ZC45IGZO.mjs +388 -0
  65. package/dist/components/ui/add-column-modal.js +42 -14
  66. package/dist/components/ui/add-column-modal.mjs +4 -4
  67. package/dist/components/ui/add-lead-modal.js +42 -11
  68. package/dist/components/ui/add-lead-modal.mjs +3 -3
  69. package/dist/components/ui/advisor-card.js +497 -0
  70. package/dist/components/ui/advisor-card.mjs +13 -0
  71. package/dist/components/ui/ai-assistant-drawer.js +11 -10
  72. package/dist/components/ui/ai-assistant-drawer.mjs +3 -3
  73. package/dist/components/ui/alert-dialog.js +2 -2
  74. package/dist/components/ui/alert-dialog.mjs +2 -2
  75. package/dist/components/ui/appointment-action-dialogs.js +1160 -0
  76. package/dist/components/ui/appointment-action-dialogs.mjs +23 -0
  77. package/dist/components/ui/appointment-availability-settings.js +1590 -0
  78. package/dist/components/ui/appointment-availability-settings.mjs +23 -0
  79. package/dist/components/ui/appointment-book-dialog.js +1744 -0
  80. package/dist/components/ui/appointment-book-dialog.mjs +27 -0
  81. package/dist/components/ui/appointment-calendar-view.js +833 -0
  82. package/dist/components/ui/appointment-calendar-view.mjs +14 -0
  83. package/dist/components/ui/appointment-detail-sheet.js +1517 -0
  84. package/dist/components/ui/appointment-detail-sheet.mjs +24 -0
  85. package/dist/components/ui/appointment-gmail-connect.js +467 -0
  86. package/dist/components/ui/appointment-gmail-connect.mjs +14 -0
  87. package/dist/components/ui/appointment-mini-card.js +345 -0
  88. package/dist/components/ui/appointment-mini-card.mjs +11 -0
  89. package/dist/components/ui/appointment-time-slot-picker.js +311 -0
  90. package/dist/components/ui/appointment-time-slot-picker.mjs +13 -0
  91. package/dist/components/ui/appointment-upcoming-card.js +1268 -0
  92. package/dist/components/ui/appointment-upcoming-card.mjs +21 -0
  93. package/dist/components/ui/backoffice-alert-history-chart.js +11 -5
  94. package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -4
  95. package/dist/components/ui/backoffice-alerts-chart.js +786 -0
  96. package/dist/components/ui/backoffice-alerts-chart.mjs +19 -0
  97. package/dist/components/ui/backoffice-connections-chart.js +817 -0
  98. package/dist/components/ui/backoffice-connections-chart.mjs +19 -0
  99. package/dist/components/ui/backoffice-contact-history-chart.js +11 -5
  100. package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -4
  101. package/dist/components/ui/badge.js +6 -6
  102. package/dist/components/ui/badge.mjs +1 -1
  103. package/dist/components/ui/borrowing-capacity-line-chart.js +30 -21
  104. package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -4
  105. package/dist/components/ui/button.js +2 -2
  106. package/dist/components/ui/button.mjs +1 -1
  107. package/dist/components/ui/calendar.js +2 -2
  108. package/dist/components/ui/calendar.mjs +2 -2
  109. package/dist/components/ui/card.js +1 -1
  110. package/dist/components/ui/card.mjs +1 -1
  111. package/dist/components/ui/cash-balance-line-chart.js +31 -23
  112. package/dist/components/ui/cash-balance-line-chart.mjs +5 -4
  113. package/dist/components/ui/cashflow-bar-chart.js +12 -5
  114. package/dist/components/ui/cashflow-bar-chart.mjs +5 -4
  115. package/dist/components/ui/chip.js +97 -18
  116. package/dist/components/ui/chip.mjs +3 -2
  117. package/dist/components/ui/color-picker.js +547 -0
  118. package/dist/components/ui/color-picker.mjs +24 -0
  119. package/dist/components/ui/data-table.js +182 -129
  120. package/dist/components/ui/data-table.mjs +3 -2
  121. package/dist/components/ui/date-picker.js +48 -27
  122. package/dist/components/ui/date-picker.mjs +4 -3
  123. package/dist/components/ui/dialog.js +37 -9
  124. package/dist/components/ui/dialog.mjs +2 -2
  125. package/dist/components/ui/expense-bar-chart.js +12 -5
  126. package/dist/components/ui/expense-bar-chart.mjs +5 -4
  127. package/dist/components/ui/field.mjs +2 -2
  128. package/dist/components/ui/financial-cards.js +322 -155
  129. package/dist/components/ui/financial-cards.mjs +5 -3
  130. package/dist/components/ui/financial-drawers.js +2 -2
  131. package/dist/components/ui/financial-drawers.mjs +3 -3
  132. package/dist/components/ui/financial-sections.js +14 -10
  133. package/dist/components/ui/financial-sections.mjs +6 -5
  134. package/dist/components/ui/form-primitives.js +4 -4
  135. package/dist/components/ui/form-primitives.mjs +3 -3
  136. package/dist/components/ui/income-bar-chart.js +12 -5
  137. package/dist/components/ui/income-bar-chart.mjs +5 -4
  138. package/dist/components/ui/input-group.js +2 -2
  139. package/dist/components/ui/input-group.mjs +2 -2
  140. package/dist/components/ui/kanban-column.js +52 -44
  141. package/dist/components/ui/kanban-column.mjs +7 -5
  142. package/dist/components/ui/opportunity-card.js +52 -44
  143. package/dist/components/ui/opportunity-card.mjs +6 -4
  144. package/dist/components/ui/opportunity-edit-modals.js +1371 -1267
  145. package/dist/components/ui/opportunity-edit-modals.mjs +10 -10
  146. package/dist/components/ui/opportunity-summary-tab.js +2748 -2161
  147. package/dist/components/ui/opportunity-summary-tab.mjs +16 -16
  148. package/dist/components/ui/page-header.js +92 -0
  149. package/dist/components/ui/page-header.mjs +8 -0
  150. package/dist/components/ui/page-top-bar.js +88 -0
  151. package/dist/components/ui/page-top-bar.mjs +8 -0
  152. package/dist/components/ui/pagination.js +303 -19
  153. package/dist/components/ui/pagination.mjs +11 -4
  154. package/dist/components/ui/pipeline-board.js +209 -195
  155. package/dist/components/ui/pipeline-board.mjs +10 -8
  156. package/dist/components/ui/pipeline-dialogs.js +118 -69
  157. package/dist/components/ui/pipeline-dialogs.mjs +8 -7
  158. package/dist/components/ui/pipeline-primitives.js +6 -6
  159. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  160. package/dist/components/ui/property-cashflow-doughnut-chart.js +14 -12
  161. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -4
  162. package/dist/components/ui/property-debt-equity-doughnut-chart.js +14 -12
  163. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -4
  164. package/dist/components/ui/property-mobile-estimate-line-chart.js +16 -14
  165. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -4
  166. package/dist/components/ui/sidebar-nav.js +679 -0
  167. package/dist/components/ui/sidebar-nav.mjs +14 -0
  168. package/dist/components/ui/stage-timeline.js +6 -6
  169. package/dist/components/ui/stage-timeline.mjs +3 -3
  170. package/dist/components/ui/stepper.js +283 -0
  171. package/dist/components/ui/stepper.mjs +18 -0
  172. package/dist/components/ui/toggle-group.js +4 -4
  173. package/dist/components/ui/toggle-group.mjs +2 -2
  174. package/dist/components/ui/toggle.js +4 -4
  175. package/dist/components/ui/toggle.mjs +1 -1
  176. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +18 -16
  177. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -4
  178. package/dist/components/ui/transactions-income-expense-bar-chart.js +28 -12
  179. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -4
  180. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +18 -16
  181. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -4
  182. package/dist/index.js +12927 -8522
  183. package/dist/index.mjs +288 -190
  184. package/dist/lib/typography.js +10 -10
  185. package/dist/lib/typography.mjs +1 -1
  186. package/dist/styles.css +1 -1
  187. package/package.json +86 -1
  188. package/src/components/index.tsx +146 -0
  189. package/src/components/ui/add-column-modal.tsx +7 -7
  190. package/src/components/ui/add-lead-modal.tsx +6 -3
  191. package/src/components/ui/advisor-card.tsx +227 -0
  192. package/src/components/ui/ai-assistant-drawer.tsx +4 -3
  193. package/src/components/ui/appointment-action-dialogs.tsx +297 -0
  194. package/src/components/ui/appointment-availability-settings.tsx +645 -0
  195. package/src/components/ui/appointment-book-dialog.tsx +618 -0
  196. package/src/components/ui/appointment-calendar-view.tsx +510 -0
  197. package/src/components/ui/appointment-detail-sheet.tsx +415 -0
  198. package/src/components/ui/appointment-gmail-connect.tsx +188 -0
  199. package/src/components/ui/appointment-mini-card.tsx +104 -0
  200. package/src/components/ui/appointment-time-slot-picker.tsx +123 -0
  201. package/src/components/ui/appointment-upcoming-card.tsx +635 -0
  202. package/src/components/ui/backoffice-alert-history-chart.tsx +10 -2
  203. package/src/components/ui/backoffice-alerts-chart.tsx +312 -0
  204. package/src/components/ui/backoffice-connections-chart.tsx +339 -0
  205. package/src/components/ui/backoffice-contact-history-chart.tsx +10 -2
  206. package/src/components/ui/badge.tsx +12 -6
  207. package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -11
  208. package/src/components/ui/button.tsx +2 -2
  209. package/src/components/ui/card.tsx +1 -1
  210. package/src/components/ui/cash-balance-line-chart.tsx +4 -23
  211. package/src/components/ui/cashflow-bar-chart.tsx +9 -2
  212. package/src/components/ui/chart-shared.tsx +4 -11
  213. package/src/components/ui/chip.tsx +23 -19
  214. package/src/components/ui/color-picker.tsx +309 -0
  215. package/src/components/ui/data-table.tsx +117 -83
  216. package/src/components/ui/date-picker.tsx +42 -37
  217. package/src/components/ui/dialog.tsx +72 -6
  218. package/src/components/ui/expense-bar-chart.tsx +11 -2
  219. package/src/components/ui/financial-cards.tsx +99 -10
  220. package/src/components/ui/income-bar-chart.tsx +11 -2
  221. package/src/components/ui/opportunity-card.tsx +10 -39
  222. package/src/components/ui/opportunity-edit-modals.tsx +98 -36
  223. package/src/components/ui/opportunity-summary-tab.tsx +548 -232
  224. package/src/components/ui/page-header.tsx +57 -0
  225. package/src/components/ui/page-top-bar.tsx +48 -0
  226. package/src/components/ui/pagination.tsx +171 -22
  227. package/src/components/ui/pipeline-board.tsx +12 -5
  228. package/src/components/ui/property-cashflow-doughnut-chart.tsx +3 -1
  229. package/src/components/ui/property-debt-equity-doughnut-chart.tsx +3 -1
  230. package/src/components/ui/property-mobile-estimate-line-chart.tsx +3 -1
  231. package/src/components/ui/sidebar-nav.tsx +516 -0
  232. package/src/components/ui/stepper.tsx +347 -0
  233. package/src/components/ui/toggle.tsx +4 -4
  234. package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +3 -1
  235. package/src/components/ui/transactions-income-expense-bar-chart.tsx +12 -9
  236. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +3 -1
  237. package/src/lib/format-currency.ts +44 -0
  238. package/src/lib/format-date.ts +50 -0
  239. package/src/lib/opportunity-constants.ts +12 -0
  240. package/src/lib/typography.ts +11 -11
  241. package/src/styles/globals.css +36 -34
  242. package/src/styles/styles-css.ts +1 -1
  243. package/tsup.config.ts +17 -0
  244. package/dist/chunk-PG6K5XEC.mjs +0 -475
  245. package/dist/chunk-WA6O6EUR.mjs +0 -1885
  246. package/dist/chunk-WNGWBVLV.mjs +0 -148
  247. package/dist/{chunk-LLVQKSU3.mjs → chunk-GD4BJDJR.mjs} +3 -3
@@ -1,10 +1,10 @@
1
+ import {
2
+ DatePicker
3
+ } from "./chunk-DUJTAXMH.mjs";
1
4
  import {
2
5
  ToggleGroup,
3
6
  ToggleGroupItem
4
- } from "./chunk-PMB3A7V3.mjs";
5
- import {
6
- DatePicker
7
- } from "./chunk-KUDCQ4FI.mjs";
7
+ } from "./chunk-EI5F6FMT.mjs";
8
8
  import {
9
9
  Select,
10
10
  SelectContent,
@@ -18,10 +18,10 @@ import {
18
18
  DialogFooter,
19
19
  DialogHeader,
20
20
  DialogTitle
21
- } from "./chunk-XIRTEFKH.mjs";
21
+ } from "./chunk-6DZEXFNB.mjs";
22
22
  import {
23
23
  Button
24
- } from "./chunk-2I5S2AMY.mjs";
24
+ } from "./chunk-XREGSKX3.mjs";
25
25
  import {
26
26
  cn
27
27
  } from "./chunk-VLQZANBF.mjs";
@@ -11,7 +11,7 @@ import {
11
11
  FALLBACK_TICK,
12
12
  formatTooltipDate,
13
13
  hexToRgba
14
- } from "./chunk-FZIXGLMV.mjs";
14
+ } from "./chunk-M3FV7LOK.mjs";
15
15
  import {
16
16
  Empty,
17
17
  EmptyDescription
@@ -22,7 +22,7 @@ import {
22
22
  CardContent,
23
23
  CardHeader,
24
24
  CardTitle
25
- } from "./chunk-CLIN5525.mjs";
25
+ } from "./chunk-C7CQJNMR.mjs";
26
26
  import {
27
27
  useThemeVars
28
28
  } from "./chunk-FEZKMUCF.mjs";
@@ -47,7 +47,14 @@ import {
47
47
  } from "chart.js";
48
48
  import { Chart } from "react-chartjs-2";
49
49
  import { jsx, jsxs } from "react/jsx-runtime";
50
- ChartJS.register(CategoryScale, LinearScale, BarController, BarElement, Tooltip, Legend);
50
+ ChartJS.register(
51
+ CategoryScale,
52
+ LinearScale,
53
+ BarController,
54
+ BarElement,
55
+ Tooltip,
56
+ Legend
57
+ );
51
58
  function ExpenseBarChart({
52
59
  expenseData,
53
60
  title = "Expenses",
@@ -186,7 +193,7 @@ function ExpenseBarChart({
186
193
  style: { maxWidth: width, fontFamily },
187
194
  children: [
188
195
  /* @__PURE__ */ jsxs(CardHeader, { className: "px-3 sm:px-6", children: [
189
- /* @__PURE__ */ jsx(CardTitle, { className: "text-sm sm:text-base", children: title }),
196
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }),
190
197
  /* @__PURE__ */ jsx(CardAction, { children: /* @__PURE__ */ jsx("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ jsx(
191
198
  ChartPeriodButton,
192
199
  {
@@ -0,0 +1,235 @@
1
+ import {
2
+ AlertDialog,
3
+ AlertDialogAction,
4
+ AlertDialogCancel,
5
+ AlertDialogContent,
6
+ AlertDialogDescription,
7
+ AlertDialogFooter,
8
+ AlertDialogHeader,
9
+ AlertDialogTitle
10
+ } from "./chunk-JMHR3YGZ.mjs";
11
+ import {
12
+ AppointmentSlotSection
13
+ } from "./chunk-3OYFOX3X.mjs";
14
+ import {
15
+ Textarea
16
+ } from "./chunk-34NWQURD.mjs";
17
+ import {
18
+ Calendar
19
+ } from "./chunk-OODBHKG7.mjs";
20
+ import {
21
+ Label
22
+ } from "./chunk-NSLMILBT.mjs";
23
+ import {
24
+ Separator
25
+ } from "./chunk-FH6QVUVZ.mjs";
26
+ import {
27
+ Dialog,
28
+ DialogClose,
29
+ DialogContent,
30
+ DialogDescription,
31
+ DialogFooter,
32
+ DialogHeader,
33
+ DialogTitle
34
+ } from "./chunk-6DZEXFNB.mjs";
35
+ import {
36
+ Button
37
+ } from "./chunk-XREGSKX3.mjs";
38
+
39
+ // src/components/ui/appointment-action-dialogs.tsx
40
+ import React from "react";
41
+ import { Calendar as CalendarIcon, Clock } from "lucide-react";
42
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
43
+ function AppointmentConfirmDialog({
44
+ open,
45
+ onOpenChange,
46
+ action,
47
+ clientName,
48
+ onConfirm
49
+ }) {
50
+ const isDecline = action === "decline";
51
+ const [cancelReason, setCancelReason] = React.useState("");
52
+ const handleOpenChange = (next) => {
53
+ if (!next) setCancelReason("");
54
+ onOpenChange(next);
55
+ };
56
+ return /* @__PURE__ */ jsx(AlertDialog, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs(AlertDialogContent, { children: [
57
+ /* @__PURE__ */ jsxs(AlertDialogHeader, { children: [
58
+ /* @__PURE__ */ jsx(AlertDialogTitle, { children: isDecline ? "Decline this appointment?" : "Accept this appointment?" }),
59
+ /* @__PURE__ */ jsx(AlertDialogDescription, { children: isDecline ? /* @__PURE__ */ jsxs(Fragment, { children: [
60
+ "This will cancel the appointment with",
61
+ " ",
62
+ /* @__PURE__ */ jsx("strong", { children: clientName }),
63
+ " and notify them by email. This action cannot be undone."
64
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
65
+ "The appointment with ",
66
+ /* @__PURE__ */ jsx("strong", { children: clientName }),
67
+ " will be confirmed and they will be notified by email."
68
+ ] }) })
69
+ ] }),
70
+ isDecline && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
71
+ /* @__PURE__ */ jsxs(Label, { htmlFor: "decline-reason", children: [
72
+ "Reason",
73
+ " ",
74
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "(optional)" })
75
+ ] }),
76
+ /* @__PURE__ */ jsx(
77
+ Textarea,
78
+ {
79
+ id: "decline-reason",
80
+ placeholder: "e.g. Advisor is unavailable at this time\u2026",
81
+ value: cancelReason,
82
+ onChange: (e) => setCancelReason(e.target.value),
83
+ className: "w-full resize-none",
84
+ rows: 2
85
+ }
86
+ )
87
+ ] }),
88
+ /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [
89
+ /* @__PURE__ */ jsx(AlertDialogCancel, { children: isDecline ? "Keep appointment" : "Cancel" }),
90
+ /* @__PURE__ */ jsx(
91
+ AlertDialogAction,
92
+ {
93
+ onClick: () => onConfirm(isDecline ? cancelReason : void 0),
94
+ className: isDecline ? "bg-destructive text-destructive-foreground hover:bg-destructive/90" : void 0,
95
+ children: isDecline ? "Decline appointment" : "Accept appointment"
96
+ }
97
+ )
98
+ ] })
99
+ ] }) });
100
+ }
101
+ function AppointmentRescheduleDialog({
102
+ open,
103
+ onOpenChange,
104
+ amSlots,
105
+ pmSlots,
106
+ currentDate,
107
+ currentTimeStart,
108
+ currentTimeEnd,
109
+ onReschedule
110
+ }) {
111
+ const [date, setDate] = React.useState(/* @__PURE__ */ new Date());
112
+ const [slot, setSlot] = React.useState();
113
+ const [note, setNote] = React.useState("");
114
+ const handleOpenChange = (next) => {
115
+ if (!next) {
116
+ setDate(/* @__PURE__ */ new Date());
117
+ setSlot(void 0);
118
+ setNote("");
119
+ }
120
+ onOpenChange(next);
121
+ };
122
+ const totalAvailable = [...amSlots, ...pmSlots].filter(
123
+ (s) => s.available
124
+ ).length;
125
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { size: "2xl", children: [
126
+ /* @__PURE__ */ jsxs(DialogHeader, { children: [
127
+ /* @__PURE__ */ jsx(DialogTitle, { children: "Propose New Time" }),
128
+ /* @__PURE__ */ jsx(DialogDescription, { children: "Select a new date and time slot. The client will be notified by email." })
129
+ ] }),
130
+ /* @__PURE__ */ jsx(Separator, {}),
131
+ (currentDate || currentTimeStart) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
132
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Current booking" }),
133
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 border border-border bg-muted/30 px-3 py-2.5 text-sm text-muted-foreground", children: [
134
+ currentDate && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
135
+ /* @__PURE__ */ jsx(CalendarIcon, { className: "h-3.5 w-3.5 shrink-0" }),
136
+ currentDate
137
+ ] }),
138
+ currentTimeStart && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
139
+ /* @__PURE__ */ jsx(Clock, { className: "h-3.5 w-3.5 shrink-0" }),
140
+ currentTimeStart,
141
+ currentTimeEnd ? ` \u2013 ${currentTimeEnd}` : ""
142
+ ] })
143
+ ] })
144
+ ] }),
145
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[auto_1fr] items-start gap-5", children: [
146
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
147
+ /* @__PURE__ */ jsx(Label, { children: "New date" }),
148
+ /* @__PURE__ */ jsx(
149
+ Calendar,
150
+ {
151
+ mode: "single",
152
+ selected: date,
153
+ onSelect: (d) => {
154
+ setDate(d);
155
+ setSlot(void 0);
156
+ },
157
+ captionLayout: "label",
158
+ fromDate: /* @__PURE__ */ new Date(),
159
+ disabled: { before: /* @__PURE__ */ new Date() },
160
+ className: "border border-border"
161
+ }
162
+ )
163
+ ] }),
164
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-5", children: date ? /* @__PURE__ */ jsxs(Fragment, { children: [
165
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
166
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: "Select a time slot" }),
167
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
168
+ totalAvailable,
169
+ " available"
170
+ ] })
171
+ ] }),
172
+ /* @__PURE__ */ jsx(
173
+ AppointmentSlotSection,
174
+ {
175
+ label: "Morning",
176
+ slots: amSlots,
177
+ selectedSlotId: slot == null ? void 0 : slot.id,
178
+ onSelect: setSlot
179
+ }
180
+ ),
181
+ /* @__PURE__ */ jsx(
182
+ AppointmentSlotSection,
183
+ {
184
+ label: "Afternoon",
185
+ slots: pmSlots,
186
+ selectedSlotId: slot == null ? void 0 : slot.id,
187
+ onSelect: setSlot
188
+ }
189
+ )
190
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-2 py-8 text-center", children: [
191
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: "Select a time slot" }),
192
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Pick a date on the left to see available slots." })
193
+ ] }) })
194
+ ] }),
195
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
196
+ /* @__PURE__ */ jsxs(Label, { htmlFor: "reschedule-note", children: [
197
+ "Note",
198
+ " ",
199
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "(optional)" })
200
+ ] }),
201
+ /* @__PURE__ */ jsx(
202
+ Textarea,
203
+ {
204
+ id: "reschedule-note",
205
+ placeholder: "e.g. Rescheduling due to an internal conflict \u2014 apologies for the inconvenience\u2026",
206
+ value: note,
207
+ onChange: (e) => setNote(e.target.value),
208
+ className: "w-full resize-none",
209
+ rows: 2
210
+ }
211
+ )
212
+ ] }),
213
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
214
+ /* @__PURE__ */ jsx(DialogClose, { render: /* @__PURE__ */ jsx(Button, { variant: "outline" }), children: "Cancel" }),
215
+ /* @__PURE__ */ jsx(
216
+ Button,
217
+ {
218
+ disabled: !date || !slot,
219
+ onClick: () => {
220
+ if (date && slot) {
221
+ onReschedule(date, slot, note);
222
+ handleOpenChange(false);
223
+ }
224
+ },
225
+ children: "Propose New Time"
226
+ }
227
+ )
228
+ ] })
229
+ ] }) });
230
+ }
231
+
232
+ export {
233
+ AppointmentConfirmDialog,
234
+ AppointmentRescheduleDialog
235
+ };
@@ -0,0 +1,302 @@
1
+ import {
2
+ Skeleton
3
+ } from "./chunk-D6ID6M4V.mjs";
4
+ import {
5
+ ChartLegendItem,
6
+ ChartPeriodButton,
7
+ FALLBACK_TICK,
8
+ formatCount,
9
+ formatMonthLabel,
10
+ formatTooltipDate,
11
+ hexToRgba
12
+ } from "./chunk-M3FV7LOK.mjs";
13
+ import {
14
+ Empty,
15
+ EmptyDescription
16
+ } from "./chunk-NQPOYKAQ.mjs";
17
+ import {
18
+ Card,
19
+ CardAction,
20
+ CardContent,
21
+ CardHeader,
22
+ CardTitle
23
+ } from "./chunk-C7CQJNMR.mjs";
24
+ import {
25
+ ToggleGroup,
26
+ ToggleGroupItem
27
+ } from "./chunk-EI5F6FMT.mjs";
28
+ import {
29
+ useThemeVars
30
+ } from "./chunk-FEZKMUCF.mjs";
31
+ import {
32
+ cn
33
+ } from "./chunk-VLQZANBF.mjs";
34
+
35
+ // src/components/ui/backoffice-connections-chart.tsx
36
+ import { useMemo, useState } from "react";
37
+ import {
38
+ Chart as ChartJS,
39
+ CategoryScale,
40
+ LinearScale,
41
+ LineController,
42
+ LineElement,
43
+ PointElement,
44
+ BarController,
45
+ BarElement,
46
+ Tooltip
47
+ } from "chart.js";
48
+ import { Chart } from "react-chartjs-2";
49
+ import { BarChart2, LineChart } from "lucide-react";
50
+ import { jsx, jsxs } from "react/jsx-runtime";
51
+ ChartJS.register(
52
+ CategoryScale,
53
+ LinearScale,
54
+ LineController,
55
+ LineElement,
56
+ PointElement,
57
+ BarController,
58
+ BarElement,
59
+ Tooltip
60
+ );
61
+ var PERIODS = [3, 6, 12];
62
+ var SLICE_COUNT = {
63
+ 3: 3,
64
+ 6: 6,
65
+ 12: 12
66
+ };
67
+ var ALL_COLOR = "#040D13";
68
+ var BANK_COLOR = "#33FF99";
69
+ var PROPERTY_COLOR = "#3B82F6";
70
+ var NONE_COLOR = "#9EAAB5";
71
+ function ConnectionsLegend() {
72
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-x-3 gap-y-1.5 pb-2", children: [
73
+ /* @__PURE__ */ jsx(
74
+ ChartLegendItem,
75
+ {
76
+ label: "All Contacts",
77
+ color: ALL_COLOR,
78
+ lineStyle: "solid"
79
+ }
80
+ ),
81
+ /* @__PURE__ */ jsx(
82
+ ChartLegendItem,
83
+ {
84
+ label: "Bank Connected",
85
+ color: BANK_COLOR,
86
+ lineStyle: "solid"
87
+ }
88
+ ),
89
+ /* @__PURE__ */ jsx(
90
+ ChartLegendItem,
91
+ {
92
+ label: "Property Connected",
93
+ color: PROPERTY_COLOR,
94
+ lineStyle: "solid"
95
+ }
96
+ ),
97
+ /* @__PURE__ */ jsx(
98
+ ChartLegendItem,
99
+ {
100
+ label: "Not Connected",
101
+ color: NONE_COLOR,
102
+ lineStyle: "solid"
103
+ }
104
+ )
105
+ ] });
106
+ }
107
+ function BackofficeConnectionsChart({
108
+ chartData,
109
+ title = "Contacts and Connections",
110
+ showLegend = true,
111
+ legendPosition = "top",
112
+ showXAxis = true,
113
+ showYAxis = false,
114
+ defaultPeriod = 6,
115
+ height = 200,
116
+ width = "100%",
117
+ className,
118
+ isLoading = false
119
+ }) {
120
+ const [period, setPeriod] = useState(defaultPeriod);
121
+ const [chartType, setChartType] = useState("line");
122
+ const themeVars = useThemeVars();
123
+ const fontFamily = themeVars["--font-sans"] || "Figtree, sans-serif";
124
+ const sliced = useMemo(() => {
125
+ if (!(chartData == null ? void 0 : chartData.length)) return null;
126
+ const count = Math.min(SLICE_COUNT[period], chartData.length);
127
+ return chartData.slice(chartData.length - count);
128
+ }, [chartData, period]);
129
+ const labels = useMemo(
130
+ () => {
131
+ var _a;
132
+ return (_a = sliced == null ? void 0 : sliced.map((p) => formatMonthLabel(p.date))) != null ? _a : [];
133
+ },
134
+ [sliced]
135
+ );
136
+ const isBar = chartType === "bar";
137
+ const datasets = useMemo(() => {
138
+ if (!sliced) return [];
139
+ return [
140
+ {
141
+ type: chartType,
142
+ label: "All Contacts",
143
+ data: sliced.map((p) => p.all),
144
+ borderColor: ALL_COLOR,
145
+ backgroundColor: isBar ? ALL_COLOR : hexToRgba(ALL_COLOR, 0.08),
146
+ fill: !isBar,
147
+ tension: 0.3,
148
+ pointRadius: 0,
149
+ borderWidth: 2
150
+ },
151
+ {
152
+ type: chartType,
153
+ label: "Bank Connected",
154
+ data: sliced.map((p) => p.bankConnected),
155
+ borderColor: BANK_COLOR,
156
+ backgroundColor: isBar ? BANK_COLOR : hexToRgba(BANK_COLOR, 0.08),
157
+ fill: !isBar,
158
+ tension: 0.3,
159
+ pointRadius: 0,
160
+ borderWidth: 2
161
+ },
162
+ {
163
+ type: chartType,
164
+ label: "Property Connected",
165
+ data: sliced.map((p) => p.propertyConnected),
166
+ borderColor: PROPERTY_COLOR,
167
+ backgroundColor: isBar ? PROPERTY_COLOR : hexToRgba(PROPERTY_COLOR, 0.08),
168
+ fill: !isBar,
169
+ tension: 0.3,
170
+ pointRadius: 0,
171
+ borderWidth: 2
172
+ },
173
+ {
174
+ type: chartType,
175
+ label: "Not Connected",
176
+ data: sliced.map((p) => p.notConnected),
177
+ borderColor: NONE_COLOR,
178
+ backgroundColor: isBar ? NONE_COLOR : hexToRgba(NONE_COLOR, 0.08),
179
+ fill: !isBar,
180
+ tension: 0.3,
181
+ pointRadius: 0,
182
+ borderWidth: 2
183
+ }
184
+ ];
185
+ }, [sliced, chartType, isBar]);
186
+ const options = useMemo(
187
+ () => ({
188
+ responsive: true,
189
+ maintainAspectRatio: false,
190
+ animation: { duration: 300 },
191
+ layout: { padding: 0 },
192
+ plugins: {
193
+ legend: { display: false },
194
+ tooltip: {
195
+ mode: "index",
196
+ intersect: false,
197
+ padding: 12,
198
+ cornerRadius: 0,
199
+ titleFont: { size: 11, weight: 600 },
200
+ bodyFont: { size: 12, weight: 500 },
201
+ callbacks: {
202
+ title: (tooltipItems) => {
203
+ var _a, _b, _c, _d;
204
+ const idx = (_a = tooltipItems[0]) == null ? void 0 : _a.dataIndex;
205
+ if (idx != null && ((_b = sliced == null ? void 0 : sliced[idx]) == null ? void 0 : _b.date)) {
206
+ return formatTooltipDate(sliced[idx].date, "monthly");
207
+ }
208
+ return (_d = (_c = tooltipItems[0]) == null ? void 0 : _c.label) != null ? _d : "";
209
+ },
210
+ label: (ctx) => {
211
+ const val = ctx.raw;
212
+ if (val === 0) return;
213
+ return ` ${ctx.dataset.label}: ${formatCount(val)}`;
214
+ }
215
+ }
216
+ }
217
+ },
218
+ scales: {
219
+ x: {
220
+ display: showXAxis,
221
+ grid: { display: false },
222
+ border: { display: false },
223
+ ticks: {
224
+ maxRotation: 0,
225
+ minRotation: 0,
226
+ color: FALLBACK_TICK,
227
+ font: { size: 10 }
228
+ }
229
+ },
230
+ y: {
231
+ display: showYAxis,
232
+ grid: { display: false },
233
+ border: { display: false },
234
+ beginAtZero: true,
235
+ ticks: {
236
+ padding: 8,
237
+ maxTicksLimit: 5,
238
+ color: FALLBACK_TICK,
239
+ font: { size: 10 },
240
+ callback: (v) => formatCount(Number(v))
241
+ }
242
+ }
243
+ }
244
+ }),
245
+ [showXAxis, showYAxis, sliced]
246
+ );
247
+ return /* @__PURE__ */ jsxs(
248
+ Card,
249
+ {
250
+ className: cn("w-full py-4 sm:py-6 gap-2", className),
251
+ style: { maxWidth: width, fontFamily },
252
+ children: [
253
+ /* @__PURE__ */ jsxs(CardHeader, { className: "px-3 sm:px-6", children: [
254
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }),
255
+ /* @__PURE__ */ jsx(CardAction, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
256
+ /* @__PURE__ */ jsxs(
257
+ ToggleGroup,
258
+ {
259
+ type: "single",
260
+ variant: "outline",
261
+ size: "sm",
262
+ value: chartType,
263
+ onValueChange: (v) => v && setChartType(v),
264
+ children: [
265
+ /* @__PURE__ */ jsx(ToggleGroupItem, { value: "line", "aria-label": "Line chart", children: /* @__PURE__ */ jsx(LineChart, { className: "size-3.5" }) }),
266
+ /* @__PURE__ */ jsx(ToggleGroupItem, { value: "bar", "aria-label": "Bar chart", children: /* @__PURE__ */ jsx(BarChart2, { className: "size-3.5" }) })
267
+ ]
268
+ }
269
+ ),
270
+ /* @__PURE__ */ jsx("div", { className: "flex gap-0.5 sm:gap-1", children: PERIODS.map((p) => /* @__PURE__ */ jsx(
271
+ ChartPeriodButton,
272
+ {
273
+ period: p,
274
+ active: period === p,
275
+ onClick: () => setPeriod(p)
276
+ },
277
+ p
278
+ )) })
279
+ ] }) })
280
+ ] }),
281
+ /* @__PURE__ */ jsx(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ jsx(Skeleton, { style: { height, width: "100%" } }) : !sliced ? /* @__PURE__ */ jsx(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ jsx(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
282
+ showLegend && legendPosition === "top" && /* @__PURE__ */ jsx(ConnectionsLegend, {}),
283
+ /* @__PURE__ */ jsx("div", { style: { height, width: "100%", position: "relative" }, children: /* @__PURE__ */ jsx(
284
+ Chart,
285
+ {
286
+ type: chartType,
287
+ data: { labels, datasets },
288
+ options,
289
+ "aria-label": title
290
+ },
291
+ chartType
292
+ ) }),
293
+ showLegend && legendPosition === "bottom" && /* @__PURE__ */ jsx(ConnectionsLegend, {})
294
+ ] }) })
295
+ ]
296
+ }
297
+ );
298
+ }
299
+
300
+ export {
301
+ BackofficeConnectionsChart
302
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buttonVariants
3
- } from "./chunk-2I5S2AMY.mjs";
3
+ } from "./chunk-XREGSKX3.mjs";
4
4
  import {
5
5
  useThemeVars
6
6
  } from "./chunk-FEZKMUCF.mjs";
@@ -51,38 +51,65 @@ function DialogOverlay(_a) {
51
51
  }, props)
52
52
  );
53
53
  }
54
+ var DIALOG_MAX_WIDTHS = {
55
+ sm: "24rem",
56
+ md: "28rem",
57
+ lg: "32rem",
58
+ xl: "36rem",
59
+ "2xl": "42rem",
60
+ "3xl": "48rem",
61
+ "4xl": "56rem",
62
+ full: "100%"
63
+ };
64
+ var DIALOG_AUTO_MIN_WIDTH = "20rem";
54
65
  function DialogContent(_a) {
55
66
  var _b = _a, {
56
67
  className,
57
68
  children,
58
69
  showCloseButton = true,
59
- style
70
+ style,
71
+ container,
72
+ align = "center",
73
+ size = "lg",
74
+ minWidth
60
75
  } = _b, props = __objRest(_b, [
61
76
  "className",
62
77
  "children",
63
78
  "showCloseButton",
64
- "style"
79
+ "style",
80
+ "container",
81
+ "align",
82
+ "size",
83
+ "minWidth"
65
84
  ]);
66
85
  const themeVars = useThemeVars();
67
- return /* @__PURE__ */ jsxs(DialogPortal, { children: [
86
+ const isAuto = size === "auto";
87
+ const sizeStyle = isAuto ? { minWidth: minWidth != null ? minWidth : DIALOG_AUTO_MIN_WIDTH } : { maxWidth: DIALOG_MAX_WIDTHS[size] };
88
+ return /* @__PURE__ */ jsxs(DialogPortal, { container: container != null ? container : void 0, children: [
68
89
  /* @__PURE__ */ jsx(DialogOverlay, { style: themeVars }),
69
90
  /* @__PURE__ */ jsxs(
70
91
  DialogPrimitive.Popup,
71
92
  __spreadProps(__spreadValues({
72
93
  className: cn(
73
- // WealthX: removed rounded-lg (sharp corners), shadow-lg (flat panels), foreground/50 scrim via DialogOverlay
74
- "fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 duration-200 outline-none data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 sm:max-w-lg",
94
+ // WealthX: removed rounded-lg (sharp corners), shadow-lg (flat panels)
95
+ // max-w-[calc(100%-2rem)] acts as a viewport-edge guard on all sizes.
96
+ // Fixed max-width is applied via inline style (sizeStyle) to avoid
97
+ // Tailwind v4 class-scanning gaps with dynamic class lookups.
98
+ "fixed left-[50%] z-50 grid max-w-[calc(100%-2rem)] translate-x-[-50%] gap-4 border bg-background p-6 duration-200 outline-none data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
99
+ // "auto" → hug content (with min-width floor); fixed sizes → fill to max-width
100
+ isAuto ? "w-auto" : "w-full",
101
+ align === "center" ? "top-[50%] translate-y-[-50%]" : "top-4 translate-y-0",
75
102
  className
76
103
  ),
77
104
  "data-slot": "dialog-content",
78
- style: __spreadValues(__spreadValues({}, themeVars), style)
105
+ style: __spreadValues(__spreadValues(__spreadValues({}, themeVars), sizeStyle), style)
79
106
  }, props), {
80
107
  children: [
81
108
  children,
82
109
  showCloseButton ? /* @__PURE__ */ jsxs(
83
110
  DialogPrimitive.Close,
84
111
  {
85
- className: "absolute top-4 right-4 transition-colors hover:bg-foreground/5 focus:outline-hidden focus:ring-2 focus:ring-border focus:ring-offset-0 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
112
+ className: "absolute top-4 right-4 inline-flex size-7 items-center justify-center transition-colors hover:bg-foreground/5 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-border focus-visible:ring-offset-0 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
86
113
  "data-slot": "dialog-close",
87
114
  children: [
88
115
  /* @__PURE__ */ jsx(XIcon, {}),
@@ -135,6 +162,7 @@ function DialogFooter(_a) {
135
162
  DialogPrimitive.Close,
136
163
  {
137
164
  className: cn(buttonVariants({ variant: "outline" })),
165
+ type: "button",
138
166
  children: "Close"
139
167
  }
140
168
  ) : null