@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,8 +62,8 @@ __export(sidebar_nav_exports, {
62
62
  SidebarNav: () => SidebarNav
63
63
  });
64
64
  module.exports = __toCommonJS(sidebar_nav_exports);
65
- var React2 = __toESM(require("react"));
66
- var import_lucide_react = require("lucide-react");
65
+ var React3 = __toESM(require("react"));
66
+ var import_lucide_react2 = require("lucide-react");
67
67
 
68
68
  // src/lib/utils.ts
69
69
  var import_clsx = require("clsx");
@@ -104,26 +104,168 @@ function cn(...inputs) {
104
104
  return twMerge((0, import_clsx.clsx)(inputs));
105
105
  }
106
106
 
107
+ // src/lib/format-currency.ts
108
+ function formatCurrency(value, options) {
109
+ const { decimals = 0, showSign = false } = options != null ? options : {};
110
+ const abs = Math.abs(value);
111
+ const formatted = new Intl.NumberFormat("en-AU", {
112
+ style: "currency",
113
+ currency: "AUD",
114
+ minimumFractionDigits: decimals,
115
+ maximumFractionDigits: decimals
116
+ }).format(abs);
117
+ if (!showSign) return value < 0 ? `-${formatted}` : formatted;
118
+ if (value > 0) return `+${formatted}`;
119
+ if (value < 0) return `-${formatted}`;
120
+ return formatted;
121
+ }
122
+
123
+ // src/components/ui/button.tsx
124
+ var import_react = require("react");
125
+ var import_class_variance_authority = require("class-variance-authority");
126
+ var import_lucide_react = require("lucide-react");
127
+
128
+ // src/lib/slot.tsx
129
+ var React = __toESM(require("react"));
130
+ function mergeRefs(...refs) {
131
+ return (value) => {
132
+ for (const ref of refs) {
133
+ if (typeof ref === "function") ref(value);
134
+ else if (ref !== null)
135
+ ref.current = value;
136
+ }
137
+ };
138
+ }
139
+ var Slot = React.forwardRef(
140
+ (_a, forwardedRef) => {
141
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
142
+ const child = React.Children.only(children);
143
+ if (!React.isValidElement(child)) return null;
144
+ const childProps = child.props;
145
+ const merged = __spreadValues({}, props);
146
+ for (const key of Object.keys(childProps)) {
147
+ if (key === "className") {
148
+ merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
149
+ } else if (key === "style") {
150
+ merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
151
+ } else if (key.startsWith("on") && typeof childProps[key] === "function") {
152
+ const parentHandler = props[key];
153
+ if (typeof parentHandler === "function") {
154
+ merged[key] = (...args) => {
155
+ childProps[key](...args);
156
+ parentHandler(...args);
157
+ };
158
+ } else {
159
+ merged[key] = childProps[key];
160
+ }
161
+ } else {
162
+ merged[key] = childProps[key];
163
+ }
164
+ }
165
+ const childRef = child.ref;
166
+ merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
167
+ return React.cloneElement(
168
+ child,
169
+ merged
170
+ );
171
+ }
172
+ );
173
+ Slot.displayName = "Slot";
174
+
175
+ // src/components/ui/button.tsx
176
+ var import_jsx_runtime = require("react/jsx-runtime");
177
+ var buttonVariants = (0, import_class_variance_authority.cva)(
178
+ "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",
179
+ {
180
+ variants: {
181
+ variant: {
182
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
183
+ secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
184
+ 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",
185
+ 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",
186
+ "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
187
+ "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
188
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
189
+ link: "text-primary underline-offset-4 hover:underline"
190
+ },
191
+ size: {
192
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
193
+ xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
194
+ sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
195
+ lg: "h-10 px-6 has-[>svg]:px-4",
196
+ icon: "size-9",
197
+ "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
198
+ "icon-sm": "size-8",
199
+ "icon-lg": "size-10"
200
+ }
201
+ },
202
+ defaultVariants: {
203
+ variant: "default",
204
+ size: "default"
205
+ }
206
+ }
207
+ );
208
+ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
209
+ var _b = _a, {
210
+ className,
211
+ variant,
212
+ size,
213
+ asChild = false,
214
+ loading = false,
215
+ disabled,
216
+ type = "button",
217
+ children
218
+ } = _b, props = __objRest(_b, [
219
+ "className",
220
+ "variant",
221
+ "size",
222
+ "asChild",
223
+ "loading",
224
+ "disabled",
225
+ "type",
226
+ "children"
227
+ ]);
228
+ const Comp = asChild ? Slot : "button";
229
+ const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
230
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
231
+ Comp,
232
+ __spreadProps(__spreadValues({
233
+ className: cn(buttonVariants({ variant, size, className })),
234
+ "data-size": size,
235
+ "data-slot": "button",
236
+ "data-variant": variant,
237
+ disabled: loading || disabled,
238
+ ref,
239
+ type
240
+ }, props), {
241
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
242
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
243
+ !isIconOnly && children
244
+ ] }) : children
245
+ })
246
+ );
247
+ });
248
+
107
249
  // src/components/ui/tooltip.tsx
108
250
  var import_tooltip = require("@base-ui/react/tooltip");
109
251
 
110
252
  // src/lib/theme-provider.tsx
111
- var import_react = require("react");
112
- var import_jsx_runtime = require("react/jsx-runtime");
113
- var ThemeVarsContext = (0, import_react.createContext)({});
253
+ var import_react2 = require("react");
254
+ var import_jsx_runtime2 = require("react/jsx-runtime");
255
+ var ThemeVarsContext = (0, import_react2.createContext)({});
114
256
  function useThemeVars() {
115
- return (0, import_react.useContext)(ThemeVarsContext);
257
+ return (0, import_react2.useContext)(ThemeVarsContext);
116
258
  }
117
259
 
118
260
  // src/components/ui/tooltip.tsx
119
- var import_jsx_runtime2 = require("react/jsx-runtime");
261
+ var import_jsx_runtime3 = require("react/jsx-runtime");
120
262
  function TooltipProvider(_a) {
121
263
  var _b = _a, {
122
264
  delay = 0
123
265
  } = _b, props = __objRest(_b, [
124
266
  "delay"
125
267
  ]);
126
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
268
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
127
269
  import_tooltip.Tooltip.Provider,
128
270
  __spreadValues({
129
271
  "data-slot": "tooltip-provider",
@@ -133,11 +275,11 @@ function TooltipProvider(_a) {
133
275
  }
134
276
  function Tooltip(_a) {
135
277
  var props = __objRest(_a, []);
136
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
278
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_tooltip.Tooltip.Root, __spreadValues({ "data-slot": "tooltip" }, props));
137
279
  }
138
280
  function TooltipTrigger(_a) {
139
281
  var props = __objRest(_a, []);
140
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
282
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_tooltip.Tooltip.Trigger, __spreadValues({ "data-slot": "tooltip-trigger" }, props));
141
283
  }
142
284
  function TooltipContent(_a) {
143
285
  var _b = _a, {
@@ -154,7 +296,7 @@ function TooltipContent(_a) {
154
296
  "style"
155
297
  ]);
156
298
  const themeVars = useThemeVars();
157
- 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)(
299
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_tooltip.Tooltip.Positioner, { sideOffset, side, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
158
300
  import_tooltip.Tooltip.Popup,
159
301
  __spreadProps(__spreadValues({
160
302
  className: cn(
@@ -166,30 +308,17 @@ function TooltipContent(_a) {
166
308
  }, props), {
167
309
  children: [
168
310
  children,
169
- /* @__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" })
311
+ /* @__PURE__ */ (0, import_jsx_runtime3.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" })
170
312
  ]
171
313
  })
172
314
  ) }) });
173
315
  }
174
316
 
175
317
  // src/components/ui/sidebar-nav.tsx
176
- var import_jsx_runtime3 = require("react/jsx-runtime");
318
+ var import_jsx_runtime4 = require("react/jsx-runtime");
177
319
  function getInitials(name) {
178
320
  return name.split(" ").filter(Boolean).map((word) => word[0]).join("").toUpperCase().slice(0, 2);
179
321
  }
180
- function formatCurrency(value, isNetItem = false) {
181
- const abs = Math.abs(value);
182
- const formatted = new Intl.NumberFormat("en-AU", {
183
- style: "currency",
184
- currency: "AUD",
185
- minimumFractionDigits: 0,
186
- maximumFractionDigits: 0
187
- }).format(abs);
188
- if (!isNetItem) return formatted;
189
- if (value > 0) return `+${formatted}`;
190
- if (value < 0) return `-${formatted}`;
191
- return formatted;
192
- }
193
322
  function navIconCn(isActive) {
194
323
  return cn(
195
324
  "shrink-0 transition-colors",
@@ -198,19 +327,19 @@ function navIconCn(isActive) {
198
327
  }
199
328
  function NavTooltip({ label, collapsed, children }) {
200
329
  if (!collapsed) return children;
201
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Tooltip, { children: [
202
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipTrigger, { render: children }),
203
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipContent, { side: "right", children: label })
330
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Tooltip, { children: [
331
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TooltipTrigger, { render: children }),
332
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TooltipContent, { side: "right", children: label })
204
333
  ] });
205
334
  }
206
335
  function MetricsGroup({ group }) {
207
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "border-b border-white/15 py-4 px-5 flex flex-col gap-1.5", children: group.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
336
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "border-b border-white/15 py-4 px-5 flex flex-col gap-1.5", children: group.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
208
337
  "div",
209
338
  {
210
339
  className: "flex items-center justify-between gap-2",
211
340
  children: [
212
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-1 min-w-0", children: [
213
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
341
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-1 min-w-0", children: [
342
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
214
343
  "span",
215
344
  {
216
345
  className: cn(
@@ -220,8 +349,8 @@ function MetricsGroup({ group }) {
220
349
  children: item.name
221
350
  }
222
351
  ),
223
- item.info && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
224
- import_lucide_react.Info,
352
+ item.info && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
353
+ import_lucide_react2.Info,
225
354
  {
226
355
  size: 11,
227
356
  strokeWidth: 2,
@@ -229,14 +358,14 @@ function MetricsGroup({ group }) {
229
358
  }
230
359
  )
231
360
  ] }),
232
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
361
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
233
362
  "span",
234
363
  {
235
364
  className: cn(
236
365
  "text-sm font-semibold tabular-nums shrink-0 text-brand-secondary-foreground",
237
366
  item.isNetItem && item.value < 0 && "text-destructive"
238
367
  ),
239
- children: formatCurrency(item.value, item.isNetItem)
368
+ children: formatCurrency(item.value, { showSign: item.isNetItem })
240
369
  }
241
370
  )
242
371
  ]
@@ -251,21 +380,22 @@ function SidebarNavItemView({
251
380
  }) {
252
381
  var _a;
253
382
  const Icon = item.icon;
254
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(NavTooltip, { label: item.title, collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
255
- "button",
383
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(NavTooltip, { label: item.title, collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
384
+ Button,
256
385
  {
257
386
  type: "button",
387
+ variant: "ghost",
258
388
  onClick: () => onNavigate == null ? void 0 : onNavigate(item.href),
259
389
  className: cn(
260
- "group flex w-full items-center gap-3 py-2.5 text-base font-medium transition-colors",
390
+ "group h-auto w-full items-center gap-3 py-2.5 text-base font-medium transition-colors",
261
391
  "text-brand-secondary-foreground/70 hover:bg-white/10 hover:text-brand-secondary-foreground",
262
392
  collapsed ? "justify-center px-2" : cn(
263
- "px-3 border-l-4",
393
+ "justify-start px-3 border-l-4",
264
394
  item.isActive ? "bg-white/15 text-brand-secondary-foreground border-primary" : "border-transparent"
265
395
  )
266
396
  ),
267
397
  children: [
268
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
398
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
269
399
  Icon,
270
400
  {
271
401
  className: navIconCn((_a = item.isActive) != null ? _a : false),
@@ -273,7 +403,7 @@ function SidebarNavItemView({
273
403
  strokeWidth: 1.75
274
404
  }
275
405
  ),
276
- !collapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "truncate", children: item.title })
406
+ !collapsed && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "truncate", children: item.title })
277
407
  ]
278
408
  }
279
409
  ) });
@@ -286,22 +416,23 @@ function CollapsibleNavItem({
286
416
  var _a, _b;
287
417
  const Icon = item.icon;
288
418
  const hasActiveChild = (_b = (_a = item.subItems) == null ? void 0 : _a.some((sub) => sub.isActive)) != null ? _b : false;
289
- const [open, setOpen] = React2.useState(hasActiveChild);
290
- React2.useEffect(() => {
419
+ const [open, setOpen] = React3.useState(hasActiveChild);
420
+ React3.useEffect(() => {
291
421
  if (hasActiveChild) setOpen(true);
292
422
  }, [hasActiveChild]);
293
423
  if (collapsed) {
294
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(NavTooltip, { label: item.title, collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
295
- "button",
424
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(NavTooltip, { label: item.title, collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
425
+ Button,
296
426
  {
297
427
  type: "button",
428
+ variant: "ghost",
298
429
  onClick: () => onNavigate == null ? void 0 : onNavigate(item.href),
299
430
  className: cn(
300
- "group flex w-full items-center justify-center px-2 py-2.5 transition-colors",
431
+ "group h-auto w-full justify-center px-2 py-2.5 transition-colors",
301
432
  "text-brand-secondary-foreground/70 hover:bg-white/10 hover:text-brand-secondary-foreground",
302
433
  hasActiveChild && "bg-white/15 text-brand-secondary-foreground"
303
434
  ),
304
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
435
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
305
436
  Icon,
306
437
  {
307
438
  className: navIconCn(hasActiveChild),
@@ -312,20 +443,21 @@ function CollapsibleNavItem({
312
443
  }
313
444
  ) });
314
445
  }
315
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
316
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
317
- "button",
446
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
447
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
448
+ Button,
318
449
  {
319
450
  type: "button",
451
+ variant: "ghost",
320
452
  onClick: () => setOpen((prev) => !prev),
321
453
  className: cn(
322
- "group flex w-full items-center gap-3 px-3 py-2.5 text-base font-medium transition-colors",
454
+ "group h-auto w-full justify-start gap-3 px-3 py-2.5 text-base font-medium transition-colors",
323
455
  "text-brand-secondary-foreground/70 hover:bg-white/10 hover:text-brand-secondary-foreground",
324
456
  "border-l-4 border-transparent",
325
457
  hasActiveChild && "bg-white/15 text-brand-secondary-foreground border-primary"
326
458
  ),
327
459
  children: [
328
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
460
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
329
461
  Icon,
330
462
  {
331
463
  className: navIconCn(hasActiveChild),
@@ -333,9 +465,9 @@ function CollapsibleNavItem({
333
465
  strokeWidth: 1.75
334
466
  }
335
467
  ),
336
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "flex-1 truncate text-left", children: item.title }),
337
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
338
- import_lucide_react.ChevronDown,
468
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "flex-1 truncate text-left", children: item.title }),
469
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
470
+ import_lucide_react2.ChevronDown,
339
471
  {
340
472
  className: cn(
341
473
  "ml-auto shrink-0 text-brand-secondary-foreground/40 transition-transform duration-200",
@@ -348,19 +480,20 @@ function CollapsibleNavItem({
348
480
  ]
349
481
  }
350
482
  ),
351
- open && item.subItems && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "ml-9 border-l border-white/15 pl-3", children: item.subItems.map((sub) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
352
- "button",
483
+ open && item.subItems && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "ml-9 border-l border-white/15 pl-3", children: item.subItems.map((sub) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
484
+ Button,
353
485
  {
354
486
  type: "button",
487
+ variant: "ghost",
355
488
  onClick: () => onNavigate == null ? void 0 : onNavigate(sub.href),
356
489
  className: cn(
357
- "flex w-full items-center gap-2 py-1.5 pl-1 text-sm transition-colors",
490
+ "h-auto w-full justify-start gap-2 py-1.5 pl-1 text-sm transition-colors",
358
491
  "text-brand-secondary-foreground/50 hover:text-brand-secondary-foreground",
359
492
  sub.isActive && "text-primary font-medium"
360
493
  ),
361
494
  children: [
362
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
363
- import_lucide_react.ChevronRight,
495
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
496
+ import_lucide_react2.ChevronRight,
364
497
  {
365
498
  size: 11,
366
499
  strokeWidth: 2,
@@ -370,7 +503,7 @@ function CollapsibleNavItem({
370
503
  )
371
504
  }
372
505
  ),
373
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "truncate", children: sub.title })
506
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "truncate", children: sub.title })
374
507
  ]
375
508
  },
376
509
  sub.href
@@ -389,20 +522,23 @@ function SidebarNav({
389
522
  onCollapsedChange,
390
523
  className
391
524
  }) {
392
- const [userMenuOpen, setUserMenuOpen] = React2.useState(false);
393
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
525
+ const [userMenuOpen, setUserMenuOpen] = React3.useState(false);
526
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
394
527
  "nav",
395
528
  {
396
529
  "data-slot": "sidebar-nav",
397
530
  "data-collapsed": collapsed,
398
531
  className: cn(
399
- "flex h-full flex-col bg-brand-secondary text-brand-secondary-foreground",
532
+ // Force dark-mode CSS variable resolution — sidebar is always dark-backgrounded
533
+ // regardless of system theme, so semantic tokens (destructive, success, etc.)
534
+ // must use their dark-mode values to maintain WCAG contrast.
535
+ "dark flex h-full flex-col bg-brand-secondary text-brand-secondary-foreground",
400
536
  "transition-all duration-200 ease-in-out",
401
537
  collapsed ? "w-14" : "w-[279px]",
402
538
  className
403
539
  ),
404
540
  children: [
405
- !collapsed && logo && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex items-center border-b border-white/15 px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
541
+ !collapsed && logo && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex items-center border-b border-white/15 px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
406
542
  "img",
407
543
  {
408
544
  src: logo,
@@ -411,7 +547,7 @@ function SidebarNav({
411
547
  style: { filter: "brightness(0) invert(1)" }
412
548
  }
413
549
  ) }),
414
- collapsed && logoCollapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex items-center justify-center border-b border-white/15 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
550
+ collapsed && logoCollapsed && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex items-center justify-center border-b border-white/15 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
415
551
  "img",
416
552
  {
417
553
  src: logoCollapsed,
@@ -420,23 +556,24 @@ function SidebarNav({
420
556
  style: { filter: "brightness(0) invert(1)" }
421
557
  }
422
558
  ) }),
423
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "border-b border-white/15", children: [
424
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(NavTooltip, { label: userName, collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
425
- "button",
559
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "border-b border-white/15", children: [
560
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(NavTooltip, { label: userName, collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
561
+ Button,
426
562
  {
427
563
  type: "button",
564
+ variant: "ghost",
428
565
  onClick: () => !collapsed && setUserMenuOpen((prev) => !prev),
429
566
  className: cn(
430
- "group flex w-full items-center gap-3 px-5 py-5 text-base transition-colors",
567
+ "group h-auto w-full justify-start gap-3 px-5 py-5 text-base transition-colors",
431
568
  "text-brand-secondary-foreground hover:bg-white/10",
432
569
  collapsed && "justify-center px-2 py-4"
433
570
  ),
434
571
  children: [
435
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center font-semibold text-xs bg-primary text-primary-foreground", children: getInitials(userName) }),
436
- !collapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
437
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "flex-1 truncate text-left font-medium text-brand-secondary-foreground", children: userName }),
438
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
439
- import_lucide_react.ChevronDown,
572
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center font-semibold text-xs bg-primary text-primary-foreground", children: getInitials(userName) }),
573
+ !collapsed && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
574
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "flex-1 truncate text-left font-medium text-brand-secondary-foreground", children: userName }),
575
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
576
+ import_lucide_react2.ChevronDown,
440
577
  {
441
578
  className: cn(
442
579
  "shrink-0 text-brand-secondary-foreground/50 transition-transform duration-200",
@@ -450,32 +587,33 @@ function SidebarNav({
450
587
  ]
451
588
  }
452
589
  ) }),
453
- !collapsed && userMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "border-t border-white/15 bg-black/20", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
454
- "button",
590
+ !collapsed && userMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "border-t border-white/15 bg-black/20", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
591
+ Button,
455
592
  {
456
593
  type: "button",
594
+ variant: "ghost",
457
595
  onClick: onLogout,
458
596
  className: cn(
459
- "flex w-full items-center gap-3 px-5 py-3 text-base",
597
+ "h-auto w-full justify-start gap-3 px-5 py-3 text-base",
460
598
  "text-brand-secondary-foreground/70 hover:bg-white/10 hover:text-brand-secondary-foreground transition-colors"
461
599
  ),
462
600
  children: [
463
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
464
- import_lucide_react.LogOut,
601
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
602
+ import_lucide_react2.LogOut,
465
603
  {
466
604
  size: 16,
467
605
  strokeWidth: 1.75,
468
606
  className: "shrink-0 text-destructive"
469
607
  }
470
608
  ),
471
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: "Logout" })
609
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: "Logout" })
472
610
  ]
473
611
  }
474
612
  ) })
475
613
  ] }),
476
- !collapsed && !!(metricsGroups == null ? void 0 : metricsGroups.length) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { children: metricsGroups.map((group, i) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(MetricsGroup, { group }, i)) }),
477
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex flex-col overflow-y-auto py-3", children: items.map(
478
- (item) => item.isCollapsible ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
614
+ !collapsed && !!(metricsGroups == null ? void 0 : metricsGroups.length) && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { children: metricsGroups.map((group, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MetricsGroup, { group }, i)) }),
615
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex flex-col overflow-y-auto py-3", children: items.map(
616
+ (item) => item.isCollapsible ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
479
617
  CollapsibleNavItem,
480
618
  {
481
619
  item,
@@ -483,7 +621,7 @@ function SidebarNav({
483
621
  onNavigate
484
622
  },
485
623
  item.href
486
- ) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
624
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
487
625
  SidebarNavItemView,
488
626
  {
489
627
  item,
@@ -493,38 +631,39 @@ function SidebarNav({
493
631
  item.href
494
632
  )
495
633
  ) }),
496
- onCollapsedChange && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mt-auto border-t border-white/15 bg-white/8", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
634
+ onCollapsedChange && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mt-auto border-t border-white/15 bg-white/8", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
497
635
  NavTooltip,
498
636
  {
499
637
  label: collapsed ? "Expand" : "Collapse",
500
638
  collapsed,
501
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
502
- "button",
639
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
640
+ Button,
503
641
  {
504
642
  type: "button",
643
+ variant: "ghost",
505
644
  onClick: () => onCollapsedChange(!collapsed),
506
645
  className: cn(
507
- "flex w-full items-center gap-3 px-3 py-3 transition-colors",
646
+ "h-auto w-full justify-start gap-3 px-3 py-3 transition-colors",
508
647
  "text-brand-secondary-foreground/80 hover:bg-white/10 hover:text-brand-secondary-foreground",
509
648
  collapsed && "justify-center px-2"
510
649
  ),
511
650
  children: [
512
- collapsed ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
513
- import_lucide_react.PanelLeftOpen,
651
+ collapsed ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
652
+ import_lucide_react2.PanelLeftOpen,
514
653
  {
515
654
  size: 18,
516
655
  strokeWidth: 1.75,
517
656
  className: "shrink-0"
518
657
  }
519
- ) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
520
- import_lucide_react.PanelLeftClose,
658
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
659
+ import_lucide_react2.PanelLeftClose,
521
660
  {
522
661
  size: 18,
523
662
  strokeWidth: 1.75,
524
663
  className: "shrink-0"
525
664
  }
526
665
  ),
527
- !collapsed && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-sm", children: "Collapse" })
666
+ !collapsed && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-sm", children: "Collapse" })
528
667
  ]
529
668
  }
530
669
  )
@@ -1,7 +1,10 @@
1
1
  import {
2
2
  SidebarNav
3
- } from "../../chunk-ZRSDX6OW.mjs";
3
+ } from "../../chunk-ZC45IGZO.mjs";
4
4
  import "../../chunk-6JQFUE5I.mjs";
5
+ import "../../chunk-MN5NYQCL.mjs";
6
+ import "../../chunk-XREGSKX3.mjs";
7
+ import "../../chunk-DBHJ5KC3.mjs";
5
8
  import "../../chunk-FEZKMUCF.mjs";
6
9
  import "../../chunk-QOJ2DQD6.mjs";
7
10
  import "../../chunk-VLQZANBF.mjs";
@@ -267,12 +267,12 @@ var badgeVariants = (0, import_class_variance_authority.cva)(
267
267
  {
268
268
  variants: {
269
269
  variant: {
270
- default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
271
- secondary: "bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
272
- 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",
273
- success: "bg-success text-success-foreground [a&]:hover:bg-success/90",
274
- warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90",
275
- info: "bg-info text-info-foreground [a&]:hover:bg-info/90",
270
+ default: "border-primary/40 bg-primary/10 text-foreground [a&]:hover:bg-primary/15",
271
+ secondary: "border-border bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
272
+ 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",
273
+ success: "border-success/40 bg-success/10 text-success-text [a&]:hover:bg-success/15",
274
+ warning: "border-warning/40 bg-warning/10 text-warning-text [a&]:hover:bg-warning/15",
275
+ info: "border-info/40 bg-info/10 text-info-text [a&]:hover:bg-info/15",
276
276
  outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
277
277
  ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
278
278
  link: "text-primary underline-offset-4 [a&]:hover:underline"
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  StageTimeline
3
- } from "../../chunk-WG6JGJXB.mjs";
3
+ } from "../../chunk-T4BJLT57.mjs";
4
4
  import "../../chunk-J5UICVJS.mjs";
5
- import "../../chunk-FMAXJ2SI.mjs";
6
- import "../../chunk-WAZD7NFU.mjs";
5
+ import "../../chunk-MBON7YRJ.mjs";
6
+ import "../../chunk-BKNFWEH2.mjs";
7
7
  import "../../chunk-MARPPFOJ.mjs";
8
8
  import "../../chunk-RGVKLTLH.mjs";
9
9
  import "../../chunk-7YAU5CY6.mjs";