@wealthx/shadcn 1.5.41 → 1.5.43

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 (210) hide show
  1. package/.turbo/turbo-build.log +204 -199
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-5FHBC6DY.mjs → chunk-33WZ5NCW.mjs} +1 -1
  4. package/dist/{chunk-C35JMOII.mjs → chunk-3G6JUYRE.mjs} +4 -4
  5. package/dist/{chunk-LBXIYS34.mjs → chunk-4PVCJ3JD.mjs} +1 -1
  6. package/dist/{chunk-EHQL64B7.mjs → chunk-4SUXTO2Z.mjs} +4 -4
  7. package/dist/{chunk-BAONSY54.mjs → chunk-5RYH7SOQ.mjs} +1 -1
  8. package/dist/{chunk-3C4DZTGA.mjs → chunk-5XD7A7YC.mjs} +1 -1
  9. package/dist/{chunk-5DAQU3B6.mjs → chunk-66JXT7NY.mjs} +1 -1
  10. package/dist/{chunk-NGKTJRFN.mjs → chunk-6DO4EGT2.mjs} +2 -2
  11. package/dist/{chunk-C7ZTZTEW.mjs → chunk-6XJWL2E5.mjs} +1 -1
  12. package/dist/{chunk-FQUT5XD6.mjs → chunk-A4UP4QFB.mjs} +1 -1
  13. package/dist/{chunk-USIRKDYQ.mjs → chunk-BFCX7ADE.mjs} +1 -1
  14. package/dist/{chunk-XGRSPFFC.mjs → chunk-CQHKU24Z.mjs} +1 -1
  15. package/dist/{chunk-HONTZFLO.mjs → chunk-DP4ER6TJ.mjs} +1 -1
  16. package/dist/{chunk-VLVEZHFE.mjs → chunk-EFSLAMHI.mjs} +4 -4
  17. package/dist/{chunk-FYZBGWYR.mjs → chunk-FVSOFXJQ.mjs} +1 -1
  18. package/dist/{chunk-JUMEIPII.mjs → chunk-G2MOZZPE.mjs} +8 -8
  19. package/dist/{chunk-D3HKFRQO.mjs → chunk-GQWKBESP.mjs} +8 -5
  20. package/dist/{chunk-MD66TGX7.mjs → chunk-GXDKWCMV.mjs} +1 -1
  21. package/dist/{chunk-77L3UPBW.mjs → chunk-H7NOUDU3.mjs} +5 -5
  22. package/dist/{chunk-4LLTZ45R.mjs → chunk-HOXTEU5K.mjs} +8 -7
  23. package/dist/{chunk-ZA37ZWZW.mjs → chunk-IXW77PMI.mjs} +7 -7
  24. package/dist/{chunk-XHZONBL4.mjs → chunk-JLEQU5BO.mjs} +1 -1
  25. package/dist/{chunk-6UKOJLXO.mjs → chunk-JSFWRD7K.mjs} +4 -4
  26. package/dist/{chunk-7PTRHNUV.mjs → chunk-JY3FUGNL.mjs} +1 -1
  27. package/dist/{chunk-3ZU5BH6X.mjs → chunk-KEOAPKJO.mjs} +3 -3
  28. package/dist/{chunk-4QTHK7ML.mjs → chunk-KWYFJQV6.mjs} +1 -1
  29. package/dist/{chunk-FGMDBJCF.mjs → chunk-LDPCSE7J.mjs} +4 -4
  30. package/dist/chunk-LFWNKXZU.mjs +109 -0
  31. package/dist/{chunk-IRZWYTGV.mjs → chunk-M32YSAWL.mjs} +8 -7
  32. package/dist/{chunk-LLAGF6BA.mjs → chunk-MUB2G36A.mjs} +1 -1
  33. package/dist/{chunk-DQNNP6I4.mjs → chunk-NIETQFJQ.mjs} +1 -1
  34. package/dist/{chunk-RUX3OLVZ.mjs → chunk-OTFG57ZF.mjs} +1 -1
  35. package/dist/{chunk-OKIWXOJL.mjs → chunk-OWTW5WAJ.mjs} +1 -1
  36. package/dist/{chunk-WWIWRNBK.mjs → chunk-P7NSCTAW.mjs} +1 -1
  37. package/dist/{chunk-BZWQU52U.mjs → chunk-QZREZL2F.mjs} +1 -1
  38. package/dist/{chunk-E432NK23.mjs → chunk-RBQ4BZUV.mjs} +6 -6
  39. package/dist/{chunk-I2EKKSEF.mjs → chunk-RKBLVNDC.mjs} +4 -7
  40. package/dist/{chunk-LHQACMZY.mjs → chunk-SPPQFW32.mjs} +106 -50
  41. package/dist/{chunk-OSSS56CB.mjs → chunk-SUXJWKRI.mjs} +4 -4
  42. package/dist/{chunk-SCGCGVDN.mjs → chunk-SZXIPE5J.mjs} +1 -1
  43. package/dist/{chunk-GIQGZFP6.mjs → chunk-THOHFAW2.mjs} +28 -12
  44. package/dist/{chunk-VVURVETY.mjs → chunk-TOQRA2TD.mjs} +1 -1
  45. package/dist/{chunk-GYWOD2YI.mjs → chunk-TZSDYQFH.mjs} +4 -4
  46. package/dist/{chunk-S7SBLNX4.mjs → chunk-UB3WG6I4.mjs} +1 -1
  47. package/dist/{chunk-PGJRZHN7.mjs → chunk-UVZ3JWFG.mjs} +1 -1
  48. package/dist/{chunk-UD5UF5OC.mjs → chunk-W7OPFKTZ.mjs} +4 -4
  49. package/dist/{chunk-YEWNFK5S.mjs → chunk-WLXP4OOF.mjs} +5 -5
  50. package/dist/{chunk-ORMC3TV3.mjs → chunk-XYXYTTNW.mjs} +1 -1
  51. package/dist/{chunk-CZOGJC76.mjs → chunk-YACFZWRR.mjs} +7 -7
  52. package/dist/{chunk-UTCW5YUX.mjs → chunk-YPATB6YQ.mjs} +9 -9
  53. package/dist/{chunk-BZGFW6L7.mjs → chunk-YWJAIPUA.mjs} +1 -1
  54. package/dist/{chunk-MHBQJVHE.mjs → chunk-Z65BGSHI.mjs} +5 -5
  55. package/dist/{chunk-PCULNQWA.mjs → chunk-ZGSFRUVI.mjs} +3 -3
  56. package/dist/{chunk-7NQKFPXE.mjs → chunk-ZRYG6ICN.mjs} +1 -1
  57. package/dist/{chunk-ZFKAYRFQ.mjs → chunk-ZUHFYW65.mjs} +1 -1
  58. package/dist/components/ui/about-you-form.mjs +2 -2
  59. package/dist/components/ui/account-list-carousel.mjs +2 -2
  60. package/dist/components/ui/add-column-modal.mjs +4 -4
  61. package/dist/components/ui/add-lead-modal.mjs +4 -4
  62. package/dist/components/ui/advisor-card.mjs +2 -2
  63. package/dist/components/ui/ai-assistant-drawer.mjs +2 -2
  64. package/dist/components/ui/ai-builder/index.mjs +4 -4
  65. package/dist/components/ui/ai-conversations/index.mjs +4 -4
  66. package/dist/components/ui/alert-dialog.mjs +3 -3
  67. package/dist/components/ui/applicant-expenses-section.mjs +1 -1
  68. package/dist/components/ui/appointment-action-dialogs.mjs +5 -5
  69. package/dist/components/ui/appointment-availability-settings.mjs +4 -4
  70. package/dist/components/ui/appointment-book-dialog.mjs +4 -4
  71. package/dist/components/ui/appointment-detail-sheet.mjs +6 -6
  72. package/dist/components/ui/appointment-upcoming-card.mjs +4 -4
  73. package/dist/components/ui/asset-accordion.mjs +7 -7
  74. package/dist/components/ui/assets-liabilities-side-card.js +19 -66
  75. package/dist/components/ui/assets-liabilities-side-card.mjs +22 -69
  76. package/dist/components/ui/backoffice-alert-history-chart.js +1 -1
  77. package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -5
  78. package/dist/components/ui/backoffice-alert-matching-chart.js +1 -1
  79. package/dist/components/ui/backoffice-alert-matching-chart.mjs +5 -5
  80. package/dist/components/ui/backoffice-alerts-chart.js +1 -1
  81. package/dist/components/ui/backoffice-alerts-chart.mjs +5 -5
  82. package/dist/components/ui/backoffice-connections-chart.js +1 -1
  83. package/dist/components/ui/backoffice-connections-chart.mjs +5 -5
  84. package/dist/components/ui/backoffice-contact-history-chart.js +1 -1
  85. package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -5
  86. package/dist/components/ui/backoffice-contact-matching-chart.js +1 -1
  87. package/dist/components/ui/backoffice-contact-matching-chart.mjs +5 -5
  88. package/dist/components/ui/backoffice-signup-steps.mjs +4 -4
  89. package/dist/components/ui/bank-statement-generate-dialog.mjs +4 -4
  90. package/dist/components/ui/bank-statement-pdf-viewer.mjs +4 -4
  91. package/dist/components/ui/borrowing-capacity-atoms.js +3 -6
  92. package/dist/components/ui/borrowing-capacity-atoms.mjs +2 -2
  93. package/dist/components/ui/borrowing-capacity-card.js +5 -5
  94. package/dist/components/ui/borrowing-capacity-card.mjs +6 -6
  95. package/dist/components/ui/borrowing-capacity-line-chart.js +5 -5
  96. package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -5
  97. package/dist/components/ui/calculator-section.mjs +4 -4
  98. package/dist/components/ui/cash-balance-line-chart.js +102 -46
  99. package/dist/components/ui/cash-balance-line-chart.mjs +5 -5
  100. package/dist/components/ui/cashflow-bar-chart.js +7 -4
  101. package/dist/components/ui/cashflow-bar-chart.mjs +5 -5
  102. package/dist/components/ui/category-edit-dialog.mjs +4 -4
  103. package/dist/components/ui/color-picker.mjs +2 -2
  104. package/dist/components/ui/contact-alert-dialog/index.mjs +4 -4
  105. package/dist/components/ui/create-contact-modal.mjs +4 -4
  106. package/dist/components/ui/csv-import-modal.mjs +4 -4
  107. package/dist/components/ui/dashboard-expense-categories.js +96 -63
  108. package/dist/components/ui/dashboard-expense-categories.mjs +101 -66
  109. package/dist/components/ui/dashboard-transactions-table.js +37 -44
  110. package/dist/components/ui/dashboard-transactions-table.mjs +45 -52
  111. package/dist/components/ui/data-table.mjs +2 -2
  112. package/dist/components/ui/date-picker.mjs +2 -2
  113. package/dist/components/ui/debt-accordion.mjs +7 -7
  114. package/dist/components/ui/delete-contact-component.mjs +4 -4
  115. package/dist/components/ui/dialog.mjs +3 -3
  116. package/dist/components/ui/document-checklist-template.mjs +2 -2
  117. package/dist/components/ui/expense-bar-chart.js +8 -7
  118. package/dist/components/ui/expense-bar-chart.mjs +5 -5
  119. package/dist/components/ui/expense-categories-bar.js +261 -0
  120. package/dist/components/ui/expense-categories-bar.mjs +12 -0
  121. package/dist/components/ui/expense-work-details.js +8 -7
  122. package/dist/components/ui/expense-work-details.mjs +7 -7
  123. package/dist/components/ui/file-preview-dialog.mjs +4 -4
  124. package/dist/components/ui/financial-cards.mjs +2 -2
  125. package/dist/components/ui/financial-drawers.mjs +2 -2
  126. package/dist/components/ui/financial-sections.mjs +3 -3
  127. package/dist/components/ui/frontend-signup-steps.mjs +2 -2
  128. package/dist/components/ui/income-bar-chart.js +8 -7
  129. package/dist/components/ui/income-bar-chart.mjs +5 -5
  130. package/dist/components/ui/income-sources-card.mjs +1 -1
  131. package/dist/components/ui/income-summary-component.mjs +1 -1
  132. package/dist/components/ui/income-work-details.js +8 -7
  133. package/dist/components/ui/income-work-details.mjs +6 -6
  134. package/dist/components/ui/incoming-outgoings-card.js +2 -2
  135. package/dist/components/ui/incoming-outgoings-card.mjs +3 -3
  136. package/dist/components/ui/interest-rate-section.mjs +1 -1
  137. package/dist/components/ui/kanban-column.mjs +5 -5
  138. package/dist/components/ui/loan-application-cards.mjs +3 -3
  139. package/dist/components/ui/loan-financials.mjs +3 -3
  140. package/dist/components/ui/money-input-with-slider.mjs +2 -2
  141. package/dist/components/ui/opportunity-card.mjs +4 -4
  142. package/dist/components/ui/opportunity-edit-modals.mjs +4 -4
  143. package/dist/components/ui/opportunity-summary-tab.mjs +8 -8
  144. package/dist/components/ui/pagination.mjs +2 -2
  145. package/dist/components/ui/pipeline-board.mjs +6 -6
  146. package/dist/components/ui/pipeline-chart.mjs +2 -2
  147. package/dist/components/ui/pipeline-dialogs.mjs +4 -4
  148. package/dist/components/ui/policy-ai/index.mjs +2 -2
  149. package/dist/components/ui/property-asset-card.mjs +4 -4
  150. package/dist/components/ui/property-cashflow-doughnut-chart.js +3 -3
  151. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -5
  152. package/dist/components/ui/property-debt-equity-doughnut-chart.js +3 -3
  153. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -5
  154. package/dist/components/ui/property-list-carousel.mjs +2 -2
  155. package/dist/components/ui/property-mobile-estimate-line-chart.js +4 -4
  156. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -5
  157. package/dist/components/ui/property-report-dialog.mjs +5 -5
  158. package/dist/components/ui/resource-center/index.mjs +4 -4
  159. package/dist/components/ui/review-alerts-dialog.mjs +4 -4
  160. package/dist/components/ui/savings-goal-modal.mjs +7 -7
  161. package/dist/components/ui/scenario-drawer.mjs +4 -4
  162. package/dist/components/ui/scenario-list.js +4 -7
  163. package/dist/components/ui/scenario-list.mjs +5 -5
  164. package/dist/components/ui/share-details-dialog.mjs +4 -4
  165. package/dist/components/ui/sidebar-nav.mjs +4 -4
  166. package/dist/components/ui/signup-form-primitives.mjs +2 -2
  167. package/dist/components/ui/stage-timeline.mjs +1 -1
  168. package/dist/components/ui/support-agent/index.js +27 -11
  169. package/dist/components/ui/support-agent/index.mjs +3 -3
  170. package/dist/components/ui/top-three-product.mjs +1 -1
  171. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +3 -3
  172. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -5
  173. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -5
  174. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +4 -4
  175. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -5
  176. package/dist/components/ui/transactions-summary-block.js +13 -0
  177. package/dist/components/ui/transactions-summary-block.mjs +13 -0
  178. package/dist/index.js +2119 -1946
  179. package/dist/index.mjs +139 -135
  180. package/dist/lib/format-currency.js +54 -0
  181. package/dist/lib/format-currency.mjs +9 -0
  182. package/dist/styles.css +1 -1
  183. package/package.json +6 -1
  184. package/src/component-descriptions/assets-liabilities-side-card.md +19 -0
  185. package/src/component-descriptions/pipeline-chart.md +17 -0
  186. package/src/components/index.tsx +6 -0
  187. package/src/components/ui/assets-liabilities-side-card.tsx +43 -83
  188. package/src/components/ui/borrowing-capacity-atoms.tsx +4 -7
  189. package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -4
  190. package/src/components/ui/cash-balance-line-chart.tsx +123 -42
  191. package/src/components/ui/cashflow-bar-chart.tsx +7 -4
  192. package/src/components/ui/chart-shared.tsx +4 -4
  193. package/src/components/ui/dashboard-expense-categories.tsx +136 -60
  194. package/src/components/ui/dashboard-transactions-table.tsx +42 -28
  195. package/src/components/ui/expense-bar-chart.tsx +32 -19
  196. package/src/components/ui/expense-categories-bar.tsx +178 -0
  197. package/src/components/ui/income-bar-chart.tsx +32 -19
  198. package/src/components/ui/incoming-outgoings-card.tsx +2 -2
  199. package/src/components/ui/property-mobile-estimate-line-chart.tsx +4 -4
  200. package/src/components/ui/scenario-list.tsx +2 -2
  201. package/src/components/ui/support-agent/support-agent-panel.tsx +40 -11
  202. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +7 -5
  203. package/src/components/ui/transactions-summary-block.tsx +39 -6
  204. package/src/styles/styles-css.ts +1 -1
  205. package/tsup.config.ts +2 -0
  206. package/dist/{chunk-CEYEK3TI.mjs → chunk-B4R62ID3.mjs} +3 -3
  207. package/dist/{chunk-7LN5OGC2.mjs → chunk-E3VAK4EB.mjs} +3 -3
  208. package/dist/{chunk-EY36WDCF.mjs → chunk-EEZFXE3P.mjs} +3 -3
  209. package/dist/{chunk-T5FRVEJQ.mjs → chunk-JTMN36BK.mjs} +3 -3
  210. /package/dist/{chunk-MN5NYQCL.mjs → chunk-XQDTFNVL.mjs} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CategoryEditDialog
3
- } from "../../chunk-C35JMOII.mjs";
3
+ } from "../../chunk-3G6JUYRE.mjs";
4
4
  import {
5
5
  Chip
6
6
  } from "../../chunk-MPA2HV5U.mjs";
@@ -11,27 +11,27 @@ import {
11
11
  CardTitle
12
12
  } from "../../chunk-3VDET466.mjs";
13
13
  import "../../chunk-PNSYFE3K.mjs";
14
- import "../../chunk-T5FRVEJQ.mjs";
14
+ import "../../chunk-JTMN36BK.mjs";
15
15
  import {
16
16
  Spinner
17
17
  } from "../../chunk-JVMXMFBB.mjs";
18
18
  import {
19
19
  Badge
20
20
  } from "../../chunk-X6RC5UWB.mjs";
21
+ import {
22
+ formatCurrency
23
+ } from "../../chunk-XQDTFNVL.mjs";
21
24
  import {
22
25
  formatDateShort
23
26
  } from "../../chunk-LHWJQNLG.mjs";
24
27
  import "../../chunk-LBTHZSBT.mjs";
25
- import "../../chunk-XYSRRDBH.mjs";
26
- import "../../chunk-FRCTOAKZ.mjs";
27
- import "../../chunk-UNACI2YK.mjs";
28
- import {
29
- formatCurrency
30
- } from "../../chunk-MN5NYQCL.mjs";
31
28
  import {
32
29
  Button
33
30
  } from "../../chunk-NOOEKOWY.mjs";
34
31
  import "../../chunk-R4HCRDU5.mjs";
32
+ import "../../chunk-XYSRRDBH.mjs";
33
+ import "../../chunk-FRCTOAKZ.mjs";
34
+ import "../../chunk-UNACI2YK.mjs";
35
35
  import {
36
36
  cn
37
37
  } from "../../chunk-AFML43VJ.mjs";
@@ -52,7 +52,7 @@ function CategoryChip({
52
52
  {
53
53
  asChild: true,
54
54
  variant: "secondary",
55
- className: "cursor-pointer transition-colors hover:border-primary/40 hover:bg-primary/10 hover:text-primary",
55
+ className: "cursor-pointer transition-colors hover:bg-muted",
56
56
  children: /* @__PURE__ */ jsxs("button", { type: "button", onClick, children: [
57
57
  label,
58
58
  /* @__PURE__ */ jsx(Pencil, { className: "size-2.5 shrink-0 opacity-60" })
@@ -64,50 +64,40 @@ function CategoryChip({
64
64
  }
65
65
  function TransactionRow({
66
66
  tx,
67
- isDimmed,
68
67
  canEdit,
69
68
  onChipClick
70
69
  }) {
71
70
  var _a;
72
71
  const isCredit = tx.amount >= 0;
73
72
  const categoryLabel = (_a = tx.editedCategoryName) != null ? _a : tx.category;
74
- return /* @__PURE__ */ jsxs(
75
- "div",
76
- {
77
- className: cn(
78
- "flex items-start justify-between gap-4 border-b border-border py-3 last:border-0 transition-opacity",
79
- isDimmed && "opacity-30"
80
- ),
81
- children: [
82
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
83
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: formatDateShort(tx.date) }),
84
- /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-sm font-medium text-foreground", children: tx.description }),
85
- tx.merchant && /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: tx.merchant }),
86
- categoryLabel && /* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(
87
- CategoryChip,
88
- {
89
- label: categoryLabel,
90
- canEdit,
91
- onClick: onChipClick
92
- }
93
- ) })
94
- ] }),
95
- /* @__PURE__ */ jsxs(
96
- "span",
97
- {
98
- className: cn(
99
- "shrink-0 text-sm font-semibold",
100
- isCredit ? "text-success" : "text-foreground"
101
- ),
102
- children: [
103
- isCredit ? "+" : "",
104
- formatCurrency(tx.amount, { showSign: false })
105
- ]
106
- }
107
- )
108
- ]
109
- }
110
- );
73
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4 border-b border-border py-3 last:border-0", children: [
74
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
75
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: formatDateShort(tx.date) }),
76
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-sm font-medium text-foreground", children: tx.description }),
77
+ tx.merchant && /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: tx.merchant }),
78
+ categoryLabel && /* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(
79
+ CategoryChip,
80
+ {
81
+ label: categoryLabel,
82
+ canEdit,
83
+ onClick: onChipClick
84
+ }
85
+ ) })
86
+ ] }),
87
+ /* @__PURE__ */ jsxs(
88
+ "span",
89
+ {
90
+ className: cn(
91
+ "shrink-0 text-sm font-semibold",
92
+ isCredit ? "text-success" : "text-foreground"
93
+ ),
94
+ children: [
95
+ isCredit ? "+" : "",
96
+ formatCurrency(tx.amount, { showSign: false })
97
+ ]
98
+ }
99
+ )
100
+ ] });
111
101
  }
112
102
  function DashboardTransactionsTable({
113
103
  transactions = [],
@@ -119,7 +109,9 @@ function DashboardTransactionsTable({
119
109
  className,
120
110
  selectedCategoryId,
121
111
  categories,
122
- onCategoryChange
112
+ onCategoryChange,
113
+ showHeader = true,
114
+ showTab = true
123
115
  }) {
124
116
  const isFiltering = selectedCategoryId != null;
125
117
  const canEdit = !!(categories == null ? void 0 : categories.length);
@@ -132,16 +124,17 @@ function DashboardTransactionsTable({
132
124
  };
133
125
  return /* @__PURE__ */ jsxs(Fragment, { children: [
134
126
  /* @__PURE__ */ jsxs(Card, { className: cn("flex flex-col", className), children: [
135
- /* @__PURE__ */ jsxs(CardHeader, { className: "pb-0", children: [
127
+ showHeader && /* @__PURE__ */ jsxs(CardHeader, { className: "pb-0", children: [
136
128
  /* @__PURE__ */ jsx(CardTitle, { className: "text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: title }),
137
- /* @__PURE__ */ jsx("div", { className: "mt-2 flex border-b border-border", children: /* @__PURE__ */ jsx("span", { className: "border-b-2 border-foreground pb-1.5 text-xs font-semibold text-foreground", children: "Account Transaction" }) })
129
+ showTab && /* @__PURE__ */ jsx("div", { className: "mt-2 flex border-b border-border", children: /* @__PURE__ */ jsx("span", { className: "border-b-2 border-foreground pb-1.5 text-xs font-semibold text-foreground", children: "Account Transaction" }) })
138
130
  ] }),
139
131
  /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-1 flex-col px-4 pb-0 pt-0", children: [
140
- isLoading ? /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ jsx(Spinner, { size: "default" }) }) : transactions.length === 0 ? /* @__PURE__ */ jsx("p", { className: "py-8 text-center text-sm text-muted-foreground", children: "No transactions found" }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col", children: transactions.map((tx) => /* @__PURE__ */ jsx(
132
+ isLoading ? /* @__PURE__ */ jsx("div", { className: "flex flex-1 items-center justify-center py-8", children: /* @__PURE__ */ jsx(Spinner, { size: "default" }) }) : transactions.length === 0 ? /* @__PURE__ */ jsx("p", { className: "py-8 text-center text-sm text-muted-foreground", children: "No transactions found" }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col", children: transactions.filter(
133
+ (tx) => !isFiltering || tx.categoryId === selectedCategoryId
134
+ ).map((tx) => /* @__PURE__ */ jsx(
141
135
  TransactionRow,
142
136
  {
143
137
  tx,
144
- isDimmed: isFiltering && tx.categoryId !== selectedCategoryId,
145
138
  canEdit,
146
139
  onChipClick: () => setEditingTx(tx)
147
140
  },
@@ -13,10 +13,10 @@ import "../../chunk-IKXYTCSB.mjs";
13
13
  import "../../chunk-K6VCC2MK.mjs";
14
14
  import "../../chunk-H5DTKPJ2.mjs";
15
15
  import "../../chunk-LBTHZSBT.mjs";
16
- import "../../chunk-XYSRRDBH.mjs";
17
- import "../../chunk-FRCTOAKZ.mjs";
18
16
  import "../../chunk-NOOEKOWY.mjs";
19
17
  import "../../chunk-R4HCRDU5.mjs";
18
+ import "../../chunk-XYSRRDBH.mjs";
19
+ import "../../chunk-FRCTOAKZ.mjs";
20
20
  import "../../chunk-AFML43VJ.mjs";
21
21
  import "../../chunk-WNQUEZJF.mjs";
22
22
  export {
@@ -5,10 +5,10 @@ import "../../chunk-F3CU6KEI.mjs";
5
5
  import "../../chunk-FBNEIYSE.mjs";
6
6
  import "../../chunk-LHWJQNLG.mjs";
7
7
  import "../../chunk-LBTHZSBT.mjs";
8
- import "../../chunk-XYSRRDBH.mjs";
9
- import "../../chunk-FRCTOAKZ.mjs";
10
8
  import "../../chunk-NOOEKOWY.mjs";
11
9
  import "../../chunk-R4HCRDU5.mjs";
10
+ import "../../chunk-XYSRRDBH.mjs";
11
+ import "../../chunk-FRCTOAKZ.mjs";
12
12
  import "../../chunk-AFML43VJ.mjs";
13
13
  import "../../chunk-WNQUEZJF.mjs";
14
14
  export {
@@ -1,16 +1,16 @@
1
- import {
2
- Accordion,
3
- AccordionContent,
4
- AccordionItem,
5
- AccordionTrigger
6
- } from "../../chunk-UNACI2YK.mjs";
7
1
  import {
8
2
  formatCurrency
9
- } from "../../chunk-MN5NYQCL.mjs";
3
+ } from "../../chunk-XQDTFNVL.mjs";
10
4
  import {
11
5
  Button
12
6
  } from "../../chunk-NOOEKOWY.mjs";
13
7
  import "../../chunk-R4HCRDU5.mjs";
8
+ import {
9
+ Accordion,
10
+ AccordionContent,
11
+ AccordionItem,
12
+ AccordionTrigger
13
+ } from "../../chunk-UNACI2YK.mjs";
14
14
  import {
15
15
  cn
16
16
  } from "../../chunk-AFML43VJ.mjs";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  DeleteContactComponent
3
- } from "../../chunk-5DAQU3B6.mjs";
3
+ } from "../../chunk-66JXT7NY.mjs";
4
4
  import "../../chunk-JVMXMFBB.mjs";
5
- import "../../chunk-CEYEK3TI.mjs";
6
- import "../../chunk-XYSRRDBH.mjs";
7
- import "../../chunk-FRCTOAKZ.mjs";
5
+ import "../../chunk-B4R62ID3.mjs";
8
6
  import "../../chunk-NOOEKOWY.mjs";
9
7
  import "../../chunk-R4HCRDU5.mjs";
8
+ import "../../chunk-XYSRRDBH.mjs";
9
+ import "../../chunk-FRCTOAKZ.mjs";
10
10
  import "../../chunk-AFML43VJ.mjs";
11
11
  import "../../chunk-WNQUEZJF.mjs";
12
12
  export {
@@ -9,11 +9,11 @@ import {
9
9
  DialogPortal,
10
10
  DialogTitle,
11
11
  DialogTrigger
12
- } from "../../chunk-T5FRVEJQ.mjs";
13
- import "../../chunk-XYSRRDBH.mjs";
14
- import "../../chunk-FRCTOAKZ.mjs";
12
+ } from "../../chunk-JTMN36BK.mjs";
15
13
  import "../../chunk-NOOEKOWY.mjs";
16
14
  import "../../chunk-R4HCRDU5.mjs";
15
+ import "../../chunk-XYSRRDBH.mjs";
16
+ import "../../chunk-FRCTOAKZ.mjs";
17
17
  import "../../chunk-AFML43VJ.mjs";
18
18
  import "../../chunk-WNQUEZJF.mjs";
19
19
  export {
@@ -4,10 +4,10 @@ import {
4
4
  import "../../chunk-PNSYFE3K.mjs";
5
5
  import "../../chunk-K6VCC2MK.mjs";
6
6
  import "../../chunk-LBTHZSBT.mjs";
7
- import "../../chunk-XYSRRDBH.mjs";
8
- import "../../chunk-FRCTOAKZ.mjs";
9
7
  import "../../chunk-NOOEKOWY.mjs";
10
8
  import "../../chunk-R4HCRDU5.mjs";
9
+ import "../../chunk-XYSRRDBH.mjs";
10
+ import "../../chunk-FRCTOAKZ.mjs";
11
11
  import "../../chunk-AFML43VJ.mjs";
12
12
  import "../../chunk-WNQUEZJF.mjs";
13
13
  export {
@@ -429,7 +429,7 @@ function ChartLegendItem({
429
429
  }
430
430
  }
431
431
  ),
432
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none", children: label })
432
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-sm text-muted-foreground leading-none", children: label })
433
433
  ] });
434
434
  }
435
435
  function ChartPeriodButton({
@@ -474,7 +474,8 @@ function ExpenseBarChart({
474
474
  height = 280,
475
475
  width = "100%",
476
476
  className,
477
- isLoading = false
477
+ isLoading = false,
478
+ showPeriodSelector = true
478
479
  }) {
479
480
  const periods = CHART_PERIODS[granularity];
480
481
  const [period, setPeriod] = (0, import_react3.useState)(defaultPeriod);
@@ -574,7 +575,7 @@ function ExpenseBarChart({
574
575
  stacked: true,
575
576
  grid: { display: false },
576
577
  border: { display: false },
577
- ticks: { font: { size: 10 }, color: FALLBACK_TICK }
578
+ ticks: { font: { size: 12 }, color: FALLBACK_TICK }
578
579
  },
579
580
  y: {
580
581
  display: showYAxis,
@@ -582,7 +583,7 @@ function ExpenseBarChart({
582
583
  grid: { display: false },
583
584
  border: { display: false },
584
585
  ticks: {
585
- font: { size: 10 },
586
+ font: { size: 12 },
586
587
  color: FALLBACK_TICK,
587
588
  maxTicksLimit: 5,
588
589
  padding: 8,
@@ -599,9 +600,9 @@ function ExpenseBarChart({
599
600
  className: cn("w-full py-4 sm:py-6 gap-2", className),
600
601
  style: { maxWidth: width, fontFamily },
601
602
  children: [
602
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
603
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }),
604
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
603
+ (title || showPeriodSelector) && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
604
+ title && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }),
605
+ showPeriodSelector && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
605
606
  ChartPeriodButton,
606
607
  {
607
608
  period: p,
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  ExpenseBarChart
3
- } from "../../chunk-4LLTZ45R.mjs";
3
+ } from "../../chunk-HOXTEU5K.mjs";
4
4
  import "../../chunk-GTAVSBDO.mjs";
5
- import "../../chunk-YEWNFK5S.mjs";
5
+ import "../../chunk-WLXP4OOF.mjs";
6
6
  import "../../chunk-R2ON6CAN.mjs";
7
7
  import "../../chunk-3VDET466.mjs";
8
- import "../../chunk-XYSRRDBH.mjs";
9
- import "../../chunk-FRCTOAKZ.mjs";
10
- import "../../chunk-MN5NYQCL.mjs";
8
+ import "../../chunk-XQDTFNVL.mjs";
11
9
  import "../../chunk-NOOEKOWY.mjs";
12
10
  import "../../chunk-R4HCRDU5.mjs";
11
+ import "../../chunk-XYSRRDBH.mjs";
12
+ import "../../chunk-FRCTOAKZ.mjs";
13
13
  import "../../chunk-AFML43VJ.mjs";
14
14
  import "../../chunk-WNQUEZJF.mjs";
15
15
  export {
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __objRest = (source, exclude) => {
24
+ var target = {};
25
+ for (var prop in source)
26
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
27
+ target[prop] = source[prop];
28
+ if (source != null && __getOwnPropSymbols)
29
+ for (var prop of __getOwnPropSymbols(source)) {
30
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
31
+ target[prop] = source[prop];
32
+ }
33
+ return target;
34
+ };
35
+ var __export = (target, all) => {
36
+ for (var name in all)
37
+ __defProp(target, name, { get: all[name], enumerable: true });
38
+ };
39
+ var __copyProps = (to, from, except, desc) => {
40
+ if (from && typeof from === "object" || typeof from === "function") {
41
+ for (let key of __getOwnPropNames(from))
42
+ if (!__hasOwnProp.call(to, key) && key !== except)
43
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
44
+ }
45
+ return to;
46
+ };
47
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
48
+
49
+ // src/components/ui/expense-categories-bar.tsx
50
+ var expense_categories_bar_exports = {};
51
+ __export(expense_categories_bar_exports, {
52
+ ExpenseCategoriesBar: () => ExpenseCategoriesBar
53
+ });
54
+ module.exports = __toCommonJS(expense_categories_bar_exports);
55
+ var import_react2 = require("react");
56
+ var import_lucide_react = require("lucide-react");
57
+
58
+ // src/components/ui/tooltip.tsx
59
+ var import_tooltip = require("@base-ui/react/tooltip");
60
+
61
+ // src/lib/utils.ts
62
+ var import_clsx = require("clsx");
63
+ var import_tailwind_merge = require("tailwind-merge");
64
+ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
65
+ extend: {
66
+ classGroups: {
67
+ "font-size": [
68
+ {
69
+ text: [
70
+ "display-large",
71
+ "display-medium",
72
+ "display-small",
73
+ "h1",
74
+ "h2",
75
+ "h3",
76
+ "h4",
77
+ "h5",
78
+ "h6",
79
+ "body-large",
80
+ "body-medium",
81
+ "body-small",
82
+ "label-large",
83
+ "label-medium",
84
+ "label-small",
85
+ "button",
86
+ "button-xs",
87
+ "caption",
88
+ "overline",
89
+ "code"
90
+ ]
91
+ }
92
+ ]
93
+ }
94
+ }
95
+ });
96
+ function cn(...inputs) {
97
+ return twMerge((0, import_clsx.clsx)(inputs));
98
+ }
99
+
100
+ // src/lib/theme-provider.tsx
101
+ var import_react = require("react");
102
+ var import_jsx_runtime = require("react/jsx-runtime");
103
+ var ThemeVarsContext = (0, import_react.createContext)({});
104
+ function useThemeVars() {
105
+ return (0, import_react.useContext)(ThemeVarsContext);
106
+ }
107
+
108
+ // src/components/ui/tooltip.tsx
109
+ var import_jsx_runtime2 = require("react/jsx-runtime");
110
+ function Tooltip(_a) {
111
+ var props = __objRest(_a, []);
112
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
113
+ }
114
+ function TooltipTrigger(_a) {
115
+ var props = __objRest(_a, []);
116
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
117
+ }
118
+ function TooltipContent(_a) {
119
+ var _b = _a, {
120
+ className,
121
+ sideOffset = 8,
122
+ side,
123
+ children,
124
+ style
125
+ } = _b, props = __objRest(_b, [
126
+ "className",
127
+ "sideOffset",
128
+ "side",
129
+ "children",
130
+ "style"
131
+ ]);
132
+ const themeVars = useThemeVars();
133
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Positioner, { sideOffset, side, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
134
+ import_tooltip.Tooltip.Popup,
135
+ __spreadProps(__spreadValues({
136
+ className: cn(
137
+ "relative z-50 w-fit animate-in overflow-visible bg-brand-secondary px-3 py-1.5 text-caption text-balance text-brand-secondary-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-ending-style:fill-mode-forwards",
138
+ className
139
+ ),
140
+ "data-slot": "tooltip-content",
141
+ style: __spreadValues(__spreadValues({}, themeVars), style)
142
+ }, props), {
143
+ children: [
144
+ children,
145
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Arrow, { className: "z-50 size-2.5 rotate-45 bg-brand-secondary data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1 data-[side=top]:-bottom-1" })
146
+ ]
147
+ })
148
+ ) }) });
149
+ }
150
+
151
+ // src/lib/format-currency.ts
152
+ function formatCurrency(value, options) {
153
+ const { decimals = 0, showSign = false } = options != null ? options : {};
154
+ const abs = Math.abs(value);
155
+ const formatted = new Intl.NumberFormat("en-AU", {
156
+ style: "currency",
157
+ currency: "AUD",
158
+ minimumFractionDigits: decimals,
159
+ maximumFractionDigits: decimals
160
+ }).format(abs);
161
+ if (!showSign) return value < 0 ? `-${formatted}` : formatted;
162
+ if (value > 0) return `+${formatted}`;
163
+ if (value < 0) return `-${formatted}`;
164
+ return formatted;
165
+ }
166
+
167
+ // src/components/ui/expense-categories-bar.tsx
168
+ var import_jsx_runtime3 = require("react/jsx-runtime");
169
+ function ExpenseCategoriesBar({
170
+ title,
171
+ subtitle,
172
+ tooltipText,
173
+ parts = [],
174
+ icons = [],
175
+ color = "secondary",
176
+ className
177
+ }) {
178
+ const [hoveredIndex, setHoveredIndex] = (0, import_react2.useState)(-1);
179
+ const segmentBase = color === "primary" ? "bg-primary" : "bg-brand-secondary";
180
+ const segmentHover = color === "primary" ? "border-primary/50 bg-primary/60" : "border-brand-secondary/50 bg-brand-secondary/60";
181
+ const iconDefault = color === "primary" ? "[&_svg]:stroke-primary-foreground [&_svg]:text-primary-foreground" : "[&_svg]:stroke-brand-secondary-foreground [&_svg]:text-brand-secondary-foreground";
182
+ const iconHovered = "[&_svg]:stroke-foreground [&_svg]:text-foreground";
183
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: cn("flex flex-col", className), children: [
184
+ (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-baseline gap-2", children: [
185
+ title && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "m-0 overflow-hidden text-ellipsis whitespace-nowrap text-[22px] font-normal leading-tight", children: title }),
186
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex min-w-0 items-center gap-1", children: [
187
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "whitespace-nowrap text-sm text-muted-foreground", children: subtitle }),
188
+ tooltipText && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Tooltip, { children: [
189
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
190
+ TooltipTrigger,
191
+ {
192
+ render: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
193
+ "button",
194
+ {
195
+ type: "button",
196
+ className: "flex items-center text-muted-foreground transition-colors hover:text-foreground"
197
+ }
198
+ ),
199
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.Info, { className: "size-4" })
200
+ }
201
+ ),
202
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipContent, { side: "top", children: tooltipText })
203
+ ] })
204
+ ] })
205
+ ] }),
206
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
207
+ "div",
208
+ {
209
+ className: "mt-4 mb-6 flex h-8 w-full gap-px",
210
+ onMouseLeave: () => setHoveredIndex(-1),
211
+ children: parts.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "grow bg-muted" }) : parts.map((part, index) => {
212
+ const isHovered = hoveredIndex === index;
213
+ const showIcon = part.percentage > 0.01;
214
+ const icon = icons[index];
215
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Tooltip, { open: isHovered, children: [
216
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
217
+ TooltipTrigger,
218
+ {
219
+ render: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
220
+ "div",
221
+ {
222
+ className: cn(
223
+ "relative border border-transparent transition-colors duration-200",
224
+ segmentBase,
225
+ isHovered && segmentHover
226
+ ),
227
+ style: {
228
+ flexGrow: Math.max(part.percentage, 1e-4) * 10
229
+ },
230
+ onMouseEnter: () => setHoveredIndex(index)
231
+ }
232
+ ),
233
+ children: showIcon && icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
234
+ "div",
235
+ {
236
+ className: cn(
237
+ "absolute left-2 top-0 bottom-0 flex items-center [&_svg]:size-4",
238
+ isHovered ? iconHovered : iconDefault
239
+ ),
240
+ children: icon
241
+ }
242
+ )
243
+ }
244
+ ),
245
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipContent, { side: "top", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex flex-col gap-1.5 min-w-[120px]", children: [
246
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-2", children: [
247
+ icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "[&_svg]:size-4", children: icon }),
248
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-sm font-semibold leading-tight line-clamp-2", children: part.title })
249
+ ] }),
250
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "self-end text-sm font-bold", children: formatCurrency(part.amount) })
251
+ ] }) })
252
+ ] }, part.id);
253
+ })
254
+ }
255
+ )
256
+ ] });
257
+ }
258
+ // Annotate the CommonJS export names for ESM import in node:
259
+ 0 && (module.exports = {
260
+ ExpenseCategoriesBar
261
+ });
@@ -0,0 +1,12 @@
1
+ import {
2
+ ExpenseCategoriesBar
3
+ } from "../../chunk-LFWNKXZU.mjs";
4
+ import "../../chunk-3S6KVFF5.mjs";
5
+ import "../../chunk-XQDTFNVL.mjs";
6
+ import "../../chunk-XYSRRDBH.mjs";
7
+ import "../../chunk-FRCTOAKZ.mjs";
8
+ import "../../chunk-AFML43VJ.mjs";
9
+ import "../../chunk-WNQUEZJF.mjs";
10
+ export {
11
+ ExpenseCategoriesBar
12
+ };
@@ -494,7 +494,7 @@ function ChartLegendItem({
494
494
  }
495
495
  }
496
496
  ),
497
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none", children: label })
497
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-sm text-muted-foreground leading-none", children: label })
498
498
  ] });
499
499
  }
500
500
  function ChartPeriodButton({
@@ -539,7 +539,8 @@ function ExpenseBarChart({
539
539
  height = 280,
540
540
  width = "100%",
541
541
  className,
542
- isLoading = false
542
+ isLoading = false,
543
+ showPeriodSelector = true
543
544
  }) {
544
545
  const periods = CHART_PERIODS[granularity];
545
546
  const [period, setPeriod] = (0, import_react4.useState)(defaultPeriod);
@@ -639,7 +640,7 @@ function ExpenseBarChart({
639
640
  stacked: true,
640
641
  grid: { display: false },
641
642
  border: { display: false },
642
- ticks: { font: { size: 10 }, color: FALLBACK_TICK }
643
+ ticks: { font: { size: 12 }, color: FALLBACK_TICK }
643
644
  },
644
645
  y: {
645
646
  display: showYAxis,
@@ -647,7 +648,7 @@ function ExpenseBarChart({
647
648
  grid: { display: false },
648
649
  border: { display: false },
649
650
  ticks: {
650
- font: { size: 10 },
651
+ font: { size: 12 },
651
652
  color: FALLBACK_TICK,
652
653
  maxTicksLimit: 5,
653
654
  padding: 8,
@@ -664,9 +665,9 @@ function ExpenseBarChart({
664
665
  className: cn("w-full py-4 sm:py-6 gap-2", className),
665
666
  style: { maxWidth: width, fontFamily },
666
667
  children: [
667
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
668
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }),
669
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
668
+ (title || showPeriodSelector) && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(CardHeader, { className: "px-3 sm:px-6", children: [
669
+ title && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }),
670
+ showPeriodSelector && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CardAction, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex gap-0.5 sm:gap-1", children: periods.map((p) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
670
671
  ChartPeriodButton,
671
672
  {
672
673
  period: p,