@wealthx/shadcn 1.2.2 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/.turbo/turbo-build.log +193 -149
  2. package/CHANGELOG.md +28 -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-A6AAWBPF.mjs → chunk-GHC7LLUX.mjs} +13 -4
  29. package/dist/chunk-HBZLGDIN.mjs +507 -0
  30. package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
  31. package/dist/{chunk-CGH4DRNG.mjs → chunk-HVY6KCCF.mjs} +10 -7
  32. package/dist/chunk-I3RZS7V2.mjs +136 -0
  33. package/dist/chunk-IAE3F7DR.mjs +1962 -0
  34. package/dist/{chunk-UT4KJR7V.mjs → chunk-IHMFS7NZ.mjs} +35 -74
  35. package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
  36. package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
  37. package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
  38. package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
  39. package/dist/chunk-LV35NGVG.mjs +272 -0
  40. package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
  41. package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
  42. package/dist/chunk-MIZQHHUO.mjs +441 -0
  43. package/dist/chunk-MLNEWRWV.mjs +449 -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-Q2BGOAMG.mjs +202 -0
  51. package/dist/chunk-QMY3AZJH.mjs +80 -0
  52. package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
  53. package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
  54. package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
  55. package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
  56. package/dist/chunk-UMTOX62O.mjs +415 -0
  57. package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
  58. package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
  59. package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
  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 +530 -0
  65. package/dist/components/ui/advisor-card.mjs +15 -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 +426 -191
  160. package/dist/components/ui/sidebar-nav.mjs +5 -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 +12258 -8611
  170. package/dist/index.mjs +258 -190
  171. package/dist/styles.css +1 -1
  172. package/package.json +71 -1
  173. package/src/components/index.tsx +115 -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 +284 -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 +213 -157
  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-ZRSDX6OW.mjs +0 -385
  230. package/dist/{chunk-LLVQKSU3.mjs → chunk-GD4BJDJR.mjs} +3 -3
@@ -180,10 +180,10 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
180
180
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
181
181
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
182
182
  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",
183
- outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
183
+ 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",
184
184
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
185
185
  "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
186
- ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs dark:hover:bg-accent/50",
186
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
187
187
  link: "text-primary underline-offset-4 hover:underline"
188
188
  },
189
189
  size: {
@@ -272,38 +272,65 @@ function DialogOverlay(_a) {
272
272
  }, props)
273
273
  );
274
274
  }
275
+ var DIALOG_MAX_WIDTHS = {
276
+ sm: "24rem",
277
+ md: "28rem",
278
+ lg: "32rem",
279
+ xl: "36rem",
280
+ "2xl": "42rem",
281
+ "3xl": "48rem",
282
+ "4xl": "56rem",
283
+ full: "100%"
284
+ };
285
+ var DIALOG_AUTO_MIN_WIDTH = "20rem";
275
286
  function DialogContent(_a) {
276
287
  var _b = _a, {
277
288
  className,
278
289
  children,
279
290
  showCloseButton = true,
280
- style
291
+ style,
292
+ container,
293
+ align = "center",
294
+ size = "lg",
295
+ minWidth
281
296
  } = _b, props = __objRest(_b, [
282
297
  "className",
283
298
  "children",
284
299
  "showCloseButton",
285
- "style"
300
+ "style",
301
+ "container",
302
+ "align",
303
+ "size",
304
+ "minWidth"
286
305
  ]);
287
306
  const themeVars = useThemeVars();
288
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(DialogPortal, { children: [
307
+ const isAuto = size === "auto";
308
+ const sizeStyle = isAuto ? { minWidth: minWidth != null ? minWidth : DIALOG_AUTO_MIN_WIDTH } : { maxWidth: DIALOG_MAX_WIDTHS[size] };
309
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(DialogPortal, { container: container != null ? container : void 0, children: [
289
310
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogOverlay, { style: themeVars }),
290
311
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
291
312
  import_dialog.Dialog.Popup,
292
313
  __spreadProps(__spreadValues({
293
314
  className: cn(
294
- // WealthX: removed rounded-lg (sharp corners), shadow-lg (flat panels), foreground/50 scrim via DialogOverlay
295
- "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",
315
+ // WealthX: removed rounded-lg (sharp corners), shadow-lg (flat panels)
316
+ // max-w-[calc(100%-2rem)] acts as a viewport-edge guard on all sizes.
317
+ // Fixed max-width is applied via inline style (sizeStyle) to avoid
318
+ // Tailwind v4 class-scanning gaps with dynamic class lookups.
319
+ "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",
320
+ // "auto" → hug content (with min-width floor); fixed sizes → fill to max-width
321
+ isAuto ? "w-auto" : "w-full",
322
+ align === "center" ? "top-[50%] translate-y-[-50%]" : "top-4 translate-y-0",
296
323
  className
297
324
  ),
298
325
  "data-slot": "dialog-content",
299
- style: __spreadValues(__spreadValues({}, themeVars), style)
326
+ style: __spreadValues(__spreadValues(__spreadValues({}, themeVars), sizeStyle), style)
300
327
  }, props), {
301
328
  children: [
302
329
  children,
303
330
  showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
304
331
  import_dialog.Dialog.Close,
305
332
  {
306
- 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",
333
+ 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",
307
334
  "data-slot": "dialog-close",
308
335
  children: [
309
336
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.XIcon, {}),
@@ -356,6 +383,7 @@ function DialogFooter(_a) {
356
383
  import_dialog.Dialog.Close,
357
384
  {
358
385
  className: cn(buttonVariants({ variant: "outline" })),
386
+ type: "button",
359
387
  children: "Close"
360
388
  }
361
389
  ) : null
@@ -644,11 +672,30 @@ var React5 = __toESM(require("react"));
644
672
  var import_date_fns = require("date-fns");
645
673
  var import_lucide_react5 = require("lucide-react");
646
674
 
675
+ // src/components/ui/input.tsx
676
+ var import_jsx_runtime7 = require("react/jsx-runtime");
677
+ function Input(_a) {
678
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
679
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
680
+ "input",
681
+ __spreadValues({
682
+ className: cn(
683
+ "h-9 w-full min-w-0 border border-input bg-transparent px-3 py-1 text-body-medium font-sans shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-label-medium file:text-foreground placeholder:font-normal placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 dark:bg-input/30",
684
+ "focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20",
685
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
686
+ className
687
+ ),
688
+ "data-slot": "input",
689
+ type
690
+ }, props)
691
+ );
692
+ }
693
+
647
694
  // src/components/ui/calendar.tsx
648
695
  var React4 = __toESM(require("react"));
649
696
  var import_lucide_react4 = require("lucide-react");
650
697
  var import_react_day_picker = require("react-day-picker");
651
- var import_jsx_runtime7 = require("react/jsx-runtime");
698
+ var import_jsx_runtime8 = require("react/jsx-runtime");
652
699
  function CalendarRoot(_a) {
653
700
  var _b = _a, {
654
701
  className,
@@ -657,7 +704,7 @@ function CalendarRoot(_a) {
657
704
  "className",
658
705
  "rootRef"
659
706
  ]);
660
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
707
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
661
708
  "div",
662
709
  __spreadValues({
663
710
  className: cn(className),
@@ -675,12 +722,12 @@ function CalendarChevron(_a) {
675
722
  "orientation"
676
723
  ]);
677
724
  if (orientation === "left") {
678
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react4.ChevronLeftIcon, __spreadValues({ className: cn("size-4", className) }, props));
725
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react4.ChevronLeftIcon, __spreadValues({ className: cn("size-4", className) }, props));
679
726
  }
680
727
  if (orientation === "right") {
681
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react4.ChevronRightIcon, __spreadValues({ className: cn("size-4", className) }, props));
728
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react4.ChevronRightIcon, __spreadValues({ className: cn("size-4", className) }, props));
682
729
  }
683
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react4.ChevronDownIcon, __spreadValues({ className: cn("size-4", className) }, props));
730
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react4.ChevronDownIcon, __spreadValues({ className: cn("size-4", className) }, props));
684
731
  }
685
732
  function CalendarWeekNumber(_a) {
686
733
  var _b = _a, {
@@ -688,7 +735,7 @@ function CalendarWeekNumber(_a) {
688
735
  } = _b, props = __objRest(_b, [
689
736
  "children"
690
737
  ]);
691
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
738
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("td", __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
692
739
  }
693
740
  function Calendar(_a) {
694
741
  var _b = _a, {
@@ -709,7 +756,7 @@ function Calendar(_a) {
709
756
  "components"
710
757
  ]);
711
758
  const defaultClassNames = (0, import_react_day_picker.getDefaultClassNames)();
712
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
759
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
713
760
  import_react_day_picker.DayPicker,
714
761
  __spreadValues({
715
762
  captionLayout,
@@ -824,7 +871,7 @@ function CalendarDayButton(_a) {
824
871
  if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
825
872
  }, [modifiers.focused]);
826
873
  const selectedSingle = modifiers.selected && !modifiers.range_start && !modifiers.range_end ? !modifiers.range_middle : null;
827
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
874
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
828
875
  Button,
829
876
  __spreadValues({
830
877
  className: cn(
@@ -846,14 +893,14 @@ function CalendarDayButton(_a) {
846
893
 
847
894
  // src/components/ui/popover.tsx
848
895
  var import_popover = require("@base-ui/react/popover");
849
- var import_jsx_runtime8 = require("react/jsx-runtime");
896
+ var import_jsx_runtime9 = require("react/jsx-runtime");
850
897
  function Popover(_a) {
851
898
  var props = __objRest(_a, []);
852
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
899
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
853
900
  }
854
901
  function PopoverTrigger(_a) {
855
902
  var props = __objRest(_a, []);
856
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
903
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
857
904
  }
858
905
  function PopoverContent(_a) {
859
906
  var _b = _a, {
@@ -868,13 +915,13 @@ function PopoverContent(_a) {
868
915
  "style"
869
916
  ]);
870
917
  const themeVars = useThemeVars();
871
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
918
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
872
919
  import_popover.Popover.Positioner,
873
920
  {
874
921
  className: "z-[200]",
875
922
  align,
876
923
  sideOffset,
877
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
924
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
878
925
  import_popover.Popover.Popup,
879
926
  __spreadValues({
880
927
  className: cn(
@@ -890,7 +937,7 @@ function PopoverContent(_a) {
890
937
  }
891
938
 
892
939
  // src/components/ui/date-picker.tsx
893
- var import_jsx_runtime9 = require("react/jsx-runtime");
940
+ var import_jsx_runtime10 = require("react/jsx-runtime");
894
941
  function DatePicker({
895
942
  value,
896
943
  onChange,
@@ -925,15 +972,17 @@ function DatePicker({
925
972
  } else if (value) {
926
973
  displayValue = (0, import_date_fns.format)(value, "dd/MM/yyyy");
927
974
  }
928
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Popover, { onOpenChange: disabled ? void 0 : setOpen, open, children: [
929
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
975
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Popover, { onOpenChange: disabled ? void 0 : setOpen, open, children: [
976
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
930
977
  PopoverTrigger,
931
978
  {
932
- render: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
979
+ render: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
933
980
  Button,
934
981
  {
935
982
  className: cn(
936
983
  "w-full justify-start rounded-none font-normal data-[empty=true]:text-muted-foreground",
984
+ // Show open/focus state when the popover is expanded
985
+ "aria-expanded:border-ring aria-expanded:ring-2 aria-expanded:ring-ring/20",
937
986
  className
938
987
  ),
939
988
  "data-empty": !value,
@@ -943,18 +992,18 @@ function DatePicker({
943
992
  }
944
993
  ),
945
994
  children: [
946
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react5.CalendarIcon, {}),
995
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react5.CalendarIcon, {}),
947
996
  value ? displayValue : placeholder
948
997
  ]
949
998
  }
950
999
  ),
951
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1000
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
952
1001
  PopoverContent,
953
1002
  {
954
1003
  align: "start",
955
1004
  className: "w-auto rounded-none p-0 shadow-sm",
956
1005
  children: [
957
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1006
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
958
1007
  Calendar,
959
1008
  __spreadProps(__spreadValues({
960
1009
  captionLayout: "dropdown",
@@ -968,12 +1017,12 @@ function DatePicker({
968
1017
  )
969
1018
  })
970
1019
  ),
971
- showTimePicker ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "border-t border-border px-3 pb-3 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", { className: "mb-1.5 block text-xs font-medium text-muted-foreground", children: [
1020
+ showTimePicker ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "border-t border-border px-3 pb-3 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("label", { className: "mb-1.5 block text-xs font-medium text-muted-foreground", children: [
972
1021
  "Time",
973
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
974
- "input",
1022
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1023
+ Input,
975
1024
  {
976
- className: "mt-1.5 h-8 w-full rounded-none border border-input bg-transparent px-2 text-sm font-sans outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
1025
+ className: "mt-1.5 h-8",
977
1026
  onChange: handleTimeChange,
978
1027
  type: "time",
979
1028
  value: timeValue
@@ -987,7 +1036,7 @@ function DatePicker({
987
1036
  }
988
1037
 
989
1038
  // src/components/ui/pipeline-dialogs.tsx
990
- var import_jsx_runtime10 = require("react/jsx-runtime");
1039
+ var import_jsx_runtime11 = require("react/jsx-runtime");
991
1040
  function DeleteOpportunityDialog({
992
1041
  open,
993
1042
  loading = false,
@@ -995,18 +1044,18 @@ function DeleteOpportunityDialog({
995
1044
  onConfirm,
996
1045
  className
997
1046
  }) {
998
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog, { open, onOpenChange: loading ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1047
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Dialog, { open, onOpenChange: loading ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
999
1048
  DialogContent,
1000
1049
  {
1001
1050
  showCloseButton: !loading,
1002
1051
  className: cn("max-w-sm", className),
1003
1052
  children: [
1004
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogHeader, { children: [
1005
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogTitle, { children: "Want to delete this card?" }),
1006
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogDescription, { children: "Doing so will also remove all associated loan applications and tasks. This action cannot be undone." })
1053
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogHeader, { children: [
1054
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogTitle, { children: "Want to delete this card?" }),
1055
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogDescription, { children: "Doing so will also remove all associated loan applications and tasks. This action cannot be undone." })
1007
1056
  ] }),
1008
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogFooter, { children: [
1009
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1057
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogFooter, { children: [
1058
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1010
1059
  Button,
1011
1060
  {
1012
1061
  variant: "outline",
@@ -1015,7 +1064,7 @@ function DeleteOpportunityDialog({
1015
1064
  children: "Cancel"
1016
1065
  }
1017
1066
  ),
1018
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "destructive", onClick: onConfirm, disabled: loading, children: loading ? "Deleting\u2026" : "Delete" })
1067
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Button, { variant: "destructive", onClick: onConfirm, disabled: loading, children: loading ? "Deleting\u2026" : "Delete" })
1019
1068
  ] })
1020
1069
  ]
1021
1070
  }
@@ -1036,18 +1085,18 @@ function ChangePriorityDialog({
1036
1085
  onSelectionChange,
1037
1086
  className
1038
1087
  }) {
1039
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog, { open, onOpenChange: loading ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogContent, { className: cn("max-w-sm", className), children: [
1040
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogTitle, { children: "Change priority" }) }),
1041
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1088
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Dialog, { open, onOpenChange: loading ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogContent, { className: cn("max-w-sm", className), children: [
1089
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogTitle, { children: "Change priority" }) }),
1090
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1042
1091
  Select,
1043
1092
  {
1044
1093
  value,
1045
1094
  onValueChange: (v) => onSelectionChange(v),
1046
1095
  children: [
1047
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SelectTrigger, { className: "w-full", children: (() => {
1096
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectTrigger, { className: "w-full", children: (() => {
1048
1097
  const opt = PRIORITY_OPTIONS.find((o) => o.value === value);
1049
- return opt ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-2", children: [
1050
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1098
+ return opt ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "flex items-center gap-2", children: [
1099
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1051
1100
  "span",
1052
1101
  {
1053
1102
  className: "inline-block size-2 shrink-0 rounded-full",
@@ -1058,8 +1107,8 @@ function ChangePriorityDialog({
1058
1107
  opt.label
1059
1108
  ] }) : null;
1060
1109
  })() }),
1061
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SelectContent, { children: PRIORITY_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SelectItem, { value: opt.value, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "flex items-center gap-2", children: [
1062
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1110
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectContent, { children: PRIORITY_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectItem, { value: opt.value, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "flex items-center gap-2", children: [
1111
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1063
1112
  "span",
1064
1113
  {
1065
1114
  className: "inline-block size-2 shrink-0 rounded-full",
@@ -1072,8 +1121,8 @@ function ChangePriorityDialog({
1072
1121
  ]
1073
1122
  }
1074
1123
  ),
1075
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogFooter, { children: [
1076
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1124
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogFooter, { children: [
1125
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1077
1126
  Button,
1078
1127
  {
1079
1128
  variant: "outline",
@@ -1082,7 +1131,7 @@ function ChangePriorityDialog({
1082
1131
  children: "Cancel"
1083
1132
  }
1084
1133
  ),
1085
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { onClick: onSave, disabled: loading, children: loading ? "Saving\u2026" : "Save" })
1134
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Button, { onClick: onSave, disabled: loading, children: loading ? "Saving\u2026" : "Save" })
1086
1135
  ] })
1087
1136
  ] }) });
1088
1137
  }
@@ -1117,10 +1166,10 @@ function PutOnHoldDialog({
1117
1166
  setCustomDate(void 0);
1118
1167
  }
1119
1168
  }, [open]);
1120
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Dialog, { open, onOpenChange: loading ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogContent, { className: cn("max-w-sm", className), children: [
1121
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogTitle, { children: "Hold and Hide Until Later Date" }) }),
1122
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-4", children: [
1123
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1169
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Dialog, { open, onOpenChange: loading ? void 0 : onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogContent, { className: cn("max-w-sm", className), children: [
1170
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogTitle, { children: "Hold and Hide Until Later Date" }) }),
1171
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-col gap-4", children: [
1172
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1124
1173
  ToggleGroup,
1125
1174
  {
1126
1175
  type: "single",
@@ -1131,7 +1180,7 @@ function PutOnHoldDialog({
1131
1180
  if (v.length) setDuration(v[0]);
1132
1181
  },
1133
1182
  className: "w-full",
1134
- children: HOLD_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1183
+ children: HOLD_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1135
1184
  ToggleGroupItem,
1136
1185
  {
1137
1186
  value: opt.value,
@@ -1142,7 +1191,7 @@ function PutOnHoldDialog({
1142
1191
  ))
1143
1192
  }
1144
1193
  ),
1145
- duration === "custom" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1194
+ duration === "custom" ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1146
1195
  DatePicker,
1147
1196
  {
1148
1197
  value: customDate,
@@ -1150,19 +1199,19 @@ function PutOnHoldDialog({
1150
1199
  placeholder: "Pick a date",
1151
1200
  calendarProps: { disabled: { before: today } }
1152
1201
  }
1153
- ) : resolvedDate && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex h-9 items-center border border-input bg-muted/30 px-3 text-sm text-muted-foreground", children: [
1202
+ ) : resolvedDate && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex h-9 items-center border border-input bg-muted/30 px-3 text-sm text-muted-foreground", children: [
1154
1203
  "Hold until:",
1155
1204
  " ",
1156
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ml-1 font-medium text-foreground", children: (0, import_date_fns2.format)(resolvedDate, "dd MMM yyyy") })
1205
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-1 font-medium text-foreground", children: (0, import_date_fns2.format)(resolvedDate, "dd MMM yyyy") })
1157
1206
  ] }),
1158
- duration === "custom" && customDate && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
1207
+ duration === "custom" && customDate && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
1159
1208
  "Hold until:",
1160
1209
  " ",
1161
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "font-medium text-foreground", children: (0, import_date_fns2.format)(customDate, "dd MMM yyyy") })
1210
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium text-foreground", children: (0, import_date_fns2.format)(customDate, "dd MMM yyyy") })
1162
1211
  ] })
1163
1212
  ] }),
1164
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogFooter, { children: [
1165
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1213
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogFooter, { children: [
1214
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1166
1215
  Button,
1167
1216
  {
1168
1217
  variant: "outline",
@@ -1171,7 +1220,7 @@ function PutOnHoldDialog({
1171
1220
  children: "Cancel"
1172
1221
  }
1173
1222
  ),
1174
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { onClick: handleSave, disabled: loading || !isValid, children: loading ? "Saving\u2026" : "Save" })
1223
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Button, { onClick: handleSave, disabled: loading || !isValid, children: loading ? "Saving\u2026" : "Save" })
1175
1224
  ] })
1176
1225
  ] }) });
1177
1226
  }
@@ -2,15 +2,16 @@ import {
2
2
  ChangePriorityDialog,
3
3
  DeleteOpportunityDialog,
4
4
  PutOnHoldDialog
5
- } from "../../chunk-VGSESELX.mjs";
5
+ } from "../../chunk-5FQIKDKP.mjs";
6
+ import "../../chunk-DUJTAXMH.mjs";
7
+ import "../../chunk-3GF7OVTP.mjs";
6
8
  import "../../chunk-EI5F6FMT.mjs";
7
9
  import "../../chunk-BDYZCBRT.mjs";
8
- import "../../chunk-5MEWU56Z.mjs";
9
- import "../../chunk-P6AM5V7O.mjs";
10
- import "../../chunk-3GF7OVTP.mjs";
10
+ import "../../chunk-OODBHKG7.mjs";
11
11
  import "../../chunk-7PYJD5JI.mjs";
12
- import "../../chunk-XIRTEFKH.mjs";
13
- import "../../chunk-2I5S2AMY.mjs";
12
+ import "../../chunk-GYMYRIZP.mjs";
13
+ import "../../chunk-6DZEXFNB.mjs";
14
+ import "../../chunk-XREGSKX3.mjs";
14
15
  import "../../chunk-DBHJ5KC3.mjs";
15
16
  import "../../chunk-FEZKMUCF.mjs";
16
17
  import "../../chunk-QOJ2DQD6.mjs";
@@ -159,12 +159,12 @@ var badgeVariants = (0, import_class_variance_authority.cva)(
159
159
  {
160
160
  variants: {
161
161
  variant: {
162
- default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
163
- secondary: "bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
164
- 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",
165
- success: "bg-success text-success-foreground [a&]:hover:bg-success/90",
166
- warning: "bg-warning text-warning-foreground [a&]:hover:bg-warning/90",
167
- info: "bg-info text-info-foreground [a&]:hover:bg-info/90",
162
+ default: "border-primary/40 bg-primary/10 text-foreground [a&]:hover:bg-primary/15",
163
+ secondary: "border-border bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
164
+ 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",
165
+ success: "border-success/40 bg-success/10 text-success-text [a&]:hover:bg-success/15",
166
+ warning: "border-warning/40 bg-warning/10 text-warning-text [a&]:hover:bg-warning/15",
167
+ info: "border-info/40 bg-info/10 text-info-text [a&]:hover:bg-info/15",
168
168
  outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
169
169
  ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
170
170
  link: "text-primary underline-offset-4 [a&]:hover:underline"
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TaskCheckItem
3
- } from "../../chunk-FMAXJ2SI.mjs";
4
- import "../../chunk-WAZD7NFU.mjs";
3
+ } from "../../chunk-MBON7YRJ.mjs";
4
+ import "../../chunk-BKNFWEH2.mjs";
5
5
  import "../../chunk-RGVKLTLH.mjs";
6
6
  import "../../chunk-DBHJ5KC3.mjs";
7
7
  import "../../chunk-VLQZANBF.mjs";
@@ -134,7 +134,7 @@ function CardHeader(_a) {
134
134
  "div",
135
135
  __spreadValues({
136
136
  className: cn(
137
- "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
137
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-center gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
138
138
  className
139
139
  ),
140
140
  "data-slot": "card-header"
@@ -285,10 +285,10 @@ var buttonVariants = (0, import_class_variance_authority2.cva)(
285
285
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
286
286
  secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
287
287
  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",
288
- outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
288
+ 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",
289
289
  "outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
290
290
  "outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
291
- ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs dark:hover:bg-accent/50",
291
+ ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
292
292
  link: "text-primary underline-offset-4 hover:underline"
293
293
  },
294
294
  size: {
@@ -349,11 +349,8 @@ var Button = (0, import_react2.forwardRef)(function Button2(_a, ref) {
349
349
  );
350
350
  });
351
351
 
352
- // src/components/ui/chart-shared.tsx
353
- var import_jsx_runtime6 = require("react/jsx-runtime");
354
- var FALLBACK_PRIMARY = "#33FF99";
355
- var FALLBACK_SECONDARY = "#162029";
356
- function formatAbbrev(value) {
352
+ // src/lib/format-currency.ts
353
+ function formatCurrencyAbbrev(value) {
357
354
  const abs = Math.abs(value);
358
355
  const sign = value < 0 ? "-" : "";
359
356
  if (abs >= 1e9)
@@ -362,6 +359,11 @@ function formatAbbrev(value) {
362
359
  if (abs >= 1e3) return `${sign}$${(abs / 1e3).toFixed(0)}K`;
363
360
  return `${sign}$${abs.toFixed(0)}`;
364
361
  }
362
+
363
+ // src/components/ui/chart-shared.tsx
364
+ var import_jsx_runtime6 = require("react/jsx-runtime");
365
+ var FALLBACK_PRIMARY = "#33FF99";
366
+ var FALLBACK_SECONDARY = "#162029";
365
367
  function DoughnutLegendRow({
366
368
  label,
367
369
  color,
@@ -385,7 +387,7 @@ function DoughnutLegendRow({
385
387
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none truncate", children: label })
386
388
  ] }),
387
389
  /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex items-center gap-2 shrink-0", children: [
388
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] font-medium leading-none", children: formatAbbrev(value) }),
390
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] font-medium leading-none", children: formatCurrencyAbbrev(value) }),
389
391
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-[11px] text-muted-foreground leading-none w-10 text-right", children: percent })
390
392
  ] })
391
393
  ] });
@@ -444,7 +446,7 @@ function PropertyCashflowDoughnutChart({
444
446
  label: (ctx) => {
445
447
  const val = ctx.raw;
446
448
  const pct = total > 0 ? `${(val / total * 100).toFixed(1)}%` : "0%";
447
- return ` ${ctx.label}: ${formatAbbrev(val)} (${pct})`;
449
+ return ` ${ctx.label}: ${formatCurrencyAbbrev(val)} (${pct})`;
448
450
  }
449
451
  }
450
452
  }
@@ -461,7 +463,7 @@ function PropertyCashflowDoughnutChart({
461
463
  className: cn("w-full py-4 sm:py-6 gap-2", className),
462
464
  style: { maxWidth: width, fontFamily },
463
465
  children: [
464
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardHeader, { className: "px-3 sm:px-6", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardTitle, { className: "text-sm sm:text-base", children: title }) }),
466
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardHeader, { className: "px-3 sm:px-6", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardTitle, { className: "text-xs font-semibold uppercase tracking-wide", children: title }) }),
465
467
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardContent, { className: "px-3 sm:px-6", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Skeleton, { style: { height, width: "100%" } }) : !hasData ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Empty, { className: "flex-none p-4", style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(EmptyDescription, { children: "No data available" }) }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-4", children: [
466
468
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: { height, width: "100%", position: "relative" }, children: [
467
469
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -486,7 +488,7 @@ function PropertyCashflowDoughnutChart({
486
488
  pointerEvents: "none"
487
489
  },
488
490
  children: [
489
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "text-base font-semibold leading-tight", children: formatAbbrev(Math.abs(netCashflow)) }),
491
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "text-base font-semibold leading-tight", children: formatCurrencyAbbrev(Math.abs(netCashflow)) }),
490
492
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "text-[11px] text-muted-foreground leading-none mt-1", children: netLabel })
491
493
  ]
492
494
  }
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  PropertyCashflowDoughnutChart
3
- } from "../../chunk-VPBN3WOO.mjs";
3
+ } from "../../chunk-DGHAXJBN.mjs";
4
4
  import "../../chunk-D6ID6M4V.mjs";
5
- import "../../chunk-FZIXGLMV.mjs";
5
+ import "../../chunk-M3FV7LOK.mjs";
6
+ import "../../chunk-MN5NYQCL.mjs";
6
7
  import "../../chunk-NQPOYKAQ.mjs";
7
- import "../../chunk-CLIN5525.mjs";
8
- import "../../chunk-2I5S2AMY.mjs";
8
+ import "../../chunk-C7CQJNMR.mjs";
9
+ import "../../chunk-XREGSKX3.mjs";
9
10
  import "../../chunk-DBHJ5KC3.mjs";
10
11
  import "../../chunk-FEZKMUCF.mjs";
11
12
  import "../../chunk-QOJ2DQD6.mjs";