@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.
- package/.turbo/turbo-build.log +200 -156
- package/CHANGELOG.md +22 -0
- package/dist/{chunk-4Y6R4WEC.mjs → chunk-2A5RRQGG.mjs} +9 -22
- package/dist/{chunk-TS2ZX2VS.mjs → chunk-2UM72RJ7.mjs} +11 -15
- package/dist/{chunk-A56YQQHG.mjs → chunk-3NCUZIFP.mjs} +2 -2
- package/dist/chunk-3OYFOX3X.mjs +79 -0
- package/dist/{chunk-RP3SQYA3.mjs → chunk-3TTACBDP.mjs} +9 -4
- package/dist/chunk-4GAWMKMI.mjs +710 -0
- package/dist/{chunk-VGSESELX.mjs → chunk-5FQIKDKP.mjs} +5 -5
- package/dist/{chunk-K3JYD4IU.mjs → chunk-5IS7G74I.mjs} +11 -4
- package/dist/chunk-6AW4KJHE.mjs +235 -0
- package/dist/chunk-6CR5N2JW.mjs +302 -0
- package/dist/{chunk-XIRTEFKH.mjs → chunk-6DZEXFNB.mjs} +36 -8
- package/dist/chunk-6O6KD7CE.mjs +271 -0
- package/dist/chunk-7PV3IWCN.mjs +33 -0
- package/dist/{chunk-SPJ5KXW7.mjs → chunk-7S5AESZO.mjs} +5 -5
- package/dist/{chunk-RYCLWMZ7.mjs → chunk-ABFDMHOR.mjs} +9 -7
- package/dist/{chunk-SWGT756Z.mjs → chunk-AMQZRHEZ.mjs} +10 -4
- package/dist/{chunk-WAZD7NFU.mjs → chunk-BKNFWEH2.mjs} +6 -6
- package/dist/{chunk-CLIN5525.mjs → chunk-C7CQJNMR.mjs} +1 -1
- package/dist/{chunk-D4ILTPOG.mjs → chunk-CFMQP5QS.mjs} +5 -4
- package/dist/{chunk-VPBN3WOO.mjs → chunk-DGHAXJBN.mjs} +9 -7
- package/dist/chunk-DOEO3CDL.mjs +27 -0
- package/dist/{chunk-5MEWU56Z.mjs → chunk-DUJTAXMH.mjs} +11 -6
- package/dist/{chunk-GGM2UYGG.mjs → chunk-EBXQWIYG.mjs} +10 -4
- package/dist/chunk-EWRB4PAD.mjs +468 -0
- package/dist/{chunk-ZSHYDDRB.mjs → chunk-FAKPBKLT.mjs} +6 -2
- package/dist/chunk-FNQXOAYJ.mjs +169 -0
- package/dist/{chunk-A6AAWBPF.mjs → chunk-GHC7LLUX.mjs} +13 -4
- package/dist/chunk-HBZLGDIN.mjs +507 -0
- package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
- package/dist/{chunk-CGH4DRNG.mjs → chunk-HVY6KCCF.mjs} +10 -7
- package/dist/chunk-I3RZS7V2.mjs +136 -0
- package/dist/chunk-IAE3F7DR.mjs +1962 -0
- package/dist/{chunk-UT4KJR7V.mjs → chunk-IHMFS7NZ.mjs} +35 -74
- package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
- package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
- package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
- package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
- package/dist/chunk-LV35NGVG.mjs +272 -0
- package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
- package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
- package/dist/chunk-MIZQHHUO.mjs +441 -0
- package/dist/chunk-MN5NYQCL.mjs +29 -0
- package/dist/chunk-NL3ZO62D.mjs +31 -0
- package/dist/{chunk-Q76O3RIQ.mjs → chunk-NMOI6CQD.mjs} +1 -1
- package/dist/{chunk-P6AM5V7O.mjs → chunk-OODBHKG7.mjs} +1 -1
- package/dist/chunk-PBL4OQV2.mjs +283 -0
- package/dist/{chunk-Y4QFWRNR.mjs → chunk-PU4YZQXV.mjs} +17 -18
- package/dist/chunk-QMY3AZJH.mjs +80 -0
- package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
- package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
- package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
- package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
- package/dist/chunk-UMTOX62O.mjs +415 -0
- package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
- package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
- package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
- package/dist/{chunk-ZRSDX6OW.mjs → chunk-ZC45IGZO.mjs} +33 -30
- package/dist/components/ui/add-column-modal.js +42 -14
- package/dist/components/ui/add-column-modal.mjs +5 -5
- package/dist/components/ui/add-lead-modal.js +42 -11
- package/dist/components/ui/add-lead-modal.mjs +3 -3
- package/dist/components/ui/advisor-card.js +497 -0
- package/dist/components/ui/advisor-card.mjs +13 -0
- package/dist/components/ui/ai-assistant-drawer.js +11 -10
- package/dist/components/ui/ai-assistant-drawer.mjs +3 -3
- package/dist/components/ui/alert-dialog.js +2 -2
- package/dist/components/ui/alert-dialog.mjs +2 -2
- package/dist/components/ui/appointment-action-dialogs.js +1160 -0
- package/dist/components/ui/appointment-action-dialogs.mjs +23 -0
- package/dist/components/ui/appointment-availability-settings.js +1590 -0
- package/dist/components/ui/appointment-availability-settings.mjs +23 -0
- package/dist/components/ui/appointment-book-dialog.js +1744 -0
- package/dist/components/ui/appointment-book-dialog.mjs +27 -0
- package/dist/components/ui/appointment-calendar-view.js +833 -0
- package/dist/components/ui/appointment-calendar-view.mjs +14 -0
- package/dist/components/ui/appointment-detail-sheet.js +1517 -0
- package/dist/components/ui/appointment-detail-sheet.mjs +24 -0
- package/dist/components/ui/appointment-gmail-connect.js +467 -0
- package/dist/components/ui/appointment-gmail-connect.mjs +14 -0
- package/dist/components/ui/appointment-mini-card.js +345 -0
- package/dist/components/ui/appointment-mini-card.mjs +11 -0
- package/dist/components/ui/appointment-time-slot-picker.js +311 -0
- package/dist/components/ui/appointment-time-slot-picker.mjs +13 -0
- package/dist/components/ui/appointment-upcoming-card.js +1268 -0
- package/dist/components/ui/appointment-upcoming-card.mjs +21 -0
- package/dist/components/ui/backoffice-alert-history-chart.js +11 -5
- package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -4
- package/dist/components/ui/backoffice-alerts-chart.js +786 -0
- package/dist/components/ui/backoffice-alerts-chart.mjs +19 -0
- package/dist/components/ui/backoffice-connections-chart.js +817 -0
- package/dist/components/ui/backoffice-connections-chart.mjs +19 -0
- package/dist/components/ui/backoffice-contact-history-chart.js +11 -5
- package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -4
- package/dist/components/ui/badge.js +6 -6
- package/dist/components/ui/badge.mjs +1 -1
- package/dist/components/ui/borrowing-capacity-line-chart.js +30 -21
- package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -4
- package/dist/components/ui/button.js +2 -2
- package/dist/components/ui/button.mjs +1 -1
- package/dist/components/ui/calendar.js +2 -2
- package/dist/components/ui/calendar.mjs +2 -2
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/card.mjs +1 -1
- package/dist/components/ui/cash-balance-line-chart.js +31 -23
- package/dist/components/ui/cash-balance-line-chart.mjs +5 -4
- package/dist/components/ui/cashflow-bar-chart.js +12 -5
- package/dist/components/ui/cashflow-bar-chart.mjs +5 -4
- package/dist/components/ui/chip.js +97 -18
- package/dist/components/ui/chip.mjs +3 -2
- package/dist/components/ui/color-picker.js +158 -28
- package/dist/components/ui/color-picker.mjs +3 -1
- package/dist/components/ui/data-table.js +140 -119
- package/dist/components/ui/data-table.mjs +3 -2
- package/dist/components/ui/date-picker.js +48 -27
- package/dist/components/ui/date-picker.mjs +4 -3
- package/dist/components/ui/dialog.js +37 -9
- package/dist/components/ui/dialog.mjs +2 -2
- package/dist/components/ui/expense-bar-chart.js +12 -5
- package/dist/components/ui/expense-bar-chart.mjs +5 -4
- package/dist/components/ui/field.mjs +2 -2
- package/dist/components/ui/financial-cards.js +322 -155
- package/dist/components/ui/financial-cards.mjs +5 -3
- package/dist/components/ui/financial-drawers.js +2 -2
- package/dist/components/ui/financial-drawers.mjs +3 -3
- package/dist/components/ui/financial-sections.js +14 -10
- package/dist/components/ui/financial-sections.mjs +6 -5
- package/dist/components/ui/income-bar-chart.js +12 -5
- package/dist/components/ui/income-bar-chart.mjs +5 -4
- package/dist/components/ui/input-group.js +2 -2
- package/dist/components/ui/input-group.mjs +2 -2
- package/dist/components/ui/kanban-column.js +52 -44
- package/dist/components/ui/kanban-column.mjs +7 -5
- package/dist/components/ui/opportunity-card.js +52 -44
- package/dist/components/ui/opportunity-card.mjs +6 -4
- package/dist/components/ui/opportunity-edit-modals.js +1367 -1263
- package/dist/components/ui/opportunity-edit-modals.mjs +8 -8
- package/dist/components/ui/opportunity-summary-tab.js +2744 -2157
- package/dist/components/ui/opportunity-summary-tab.mjs +14 -14
- package/dist/components/ui/page-header.js +92 -0
- package/dist/components/ui/page-header.mjs +8 -0
- package/dist/components/ui/page-top-bar.js +88 -0
- package/dist/components/ui/page-top-bar.mjs +8 -0
- package/dist/components/ui/pagination.js +303 -19
- package/dist/components/ui/pagination.mjs +11 -4
- package/dist/components/ui/pipeline-board.js +205 -191
- package/dist/components/ui/pipeline-board.mjs +9 -7
- package/dist/components/ui/pipeline-dialogs.js +114 -65
- package/dist/components/ui/pipeline-dialogs.mjs +7 -6
- package/dist/components/ui/pipeline-primitives.js +6 -6
- package/dist/components/ui/pipeline-primitives.mjs +2 -2
- package/dist/components/ui/property-cashflow-doughnut-chart.js +14 -12
- package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -4
- package/dist/components/ui/property-debt-equity-doughnut-chart.js +14 -12
- package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -4
- package/dist/components/ui/property-mobile-estimate-line-chart.js +16 -14
- package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -4
- package/dist/components/ui/sidebar-nav.js +234 -95
- package/dist/components/ui/sidebar-nav.mjs +4 -1
- package/dist/components/ui/stage-timeline.js +6 -6
- package/dist/components/ui/stage-timeline.mjs +3 -3
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +18 -16
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -4
- package/dist/components/ui/transactions-income-expense-bar-chart.js +28 -12
- package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -4
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +18 -16
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -4
- package/dist/index.js +12899 -9343
- package/dist/index.mjs +256 -190
- package/dist/styles.css +1 -1
- package/package.json +71 -1
- package/src/components/index.tsx +114 -9
- package/src/components/ui/add-column-modal.tsx +7 -7
- package/src/components/ui/add-lead-modal.tsx +6 -3
- package/src/components/ui/advisor-card.tsx +227 -0
- package/src/components/ui/ai-assistant-drawer.tsx +4 -3
- package/src/components/ui/appointment-action-dialogs.tsx +297 -0
- package/src/components/ui/appointment-availability-settings.tsx +645 -0
- package/src/components/ui/appointment-book-dialog.tsx +618 -0
- package/src/components/ui/appointment-calendar-view.tsx +510 -0
- package/src/components/ui/appointment-detail-sheet.tsx +415 -0
- package/src/components/ui/appointment-gmail-connect.tsx +188 -0
- package/src/components/ui/appointment-mini-card.tsx +104 -0
- package/src/components/ui/appointment-time-slot-picker.tsx +123 -0
- package/src/components/ui/appointment-upcoming-card.tsx +635 -0
- package/src/components/ui/backoffice-alert-history-chart.tsx +10 -2
- package/src/components/ui/backoffice-alerts-chart.tsx +312 -0
- package/src/components/ui/backoffice-connections-chart.tsx +339 -0
- package/src/components/ui/backoffice-contact-history-chart.tsx +10 -2
- package/src/components/ui/badge.tsx +12 -6
- package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -11
- package/src/components/ui/button.tsx +2 -2
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/cash-balance-line-chart.tsx +4 -23
- package/src/components/ui/cashflow-bar-chart.tsx +9 -2
- package/src/components/ui/chart-shared.tsx +4 -11
- package/src/components/ui/chip.tsx +23 -19
- package/src/components/ui/color-picker.tsx +4 -2
- package/src/components/ui/data-table.tsx +28 -74
- package/src/components/ui/date-picker.tsx +42 -37
- package/src/components/ui/dialog.tsx +72 -6
- package/src/components/ui/expense-bar-chart.tsx +11 -2
- package/src/components/ui/financial-cards.tsx +99 -10
- package/src/components/ui/income-bar-chart.tsx +11 -2
- package/src/components/ui/opportunity-card.tsx +10 -39
- package/src/components/ui/opportunity-edit-modals.tsx +98 -36
- package/src/components/ui/opportunity-summary-tab.tsx +548 -232
- package/src/components/ui/page-header.tsx +57 -0
- package/src/components/ui/page-top-bar.tsx +48 -0
- package/src/components/ui/pagination.tsx +171 -22
- package/src/components/ui/pipeline-board.tsx +12 -5
- package/src/components/ui/property-cashflow-doughnut-chart.tsx +3 -1
- package/src/components/ui/property-debt-equity-doughnut-chart.tsx +3 -1
- package/src/components/ui/property-mobile-estimate-line-chart.tsx +3 -1
- package/src/components/ui/sidebar-nav.tsx +36 -37
- package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +3 -1
- package/src/components/ui/transactions-income-expense-bar-chart.tsx +12 -9
- package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +3 -1
- package/src/lib/format-currency.ts +44 -0
- package/src/lib/format-date.ts +50 -0
- package/src/lib/opportunity-constants.ts +12 -0
- package/src/styles/globals.css +17 -15
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +14 -0
- package/dist/chunk-S4QRUQNW.mjs +0 -475
- package/dist/chunk-URGMJAE3.mjs +0 -1885
- package/dist/chunk-WNGWBVLV.mjs +0 -148
- 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
|
-
|
|
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)
|
|
295
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
896
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
850
897
|
function Popover(_a) {
|
|
851
898
|
var props = __objRest(_a, []);
|
|
852
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
929
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
974
|
-
|
|
1022
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1023
|
+
Input,
|
|
975
1024
|
{
|
|
976
|
-
className: "mt-1.5 h-8
|
|
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
|
|
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,
|
|
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,
|
|
1005
|
-
/* @__PURE__ */ (0,
|
|
1006
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1009
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1040
|
-
/* @__PURE__ */ (0,
|
|
1041
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1050
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1062
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1076
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1121
|
-
/* @__PURE__ */ (0,
|
|
1122
|
-
/* @__PURE__ */ (0,
|
|
1123
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1165
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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-
|
|
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-
|
|
9
|
-
import "../../chunk-P6AM5V7O.mjs";
|
|
10
|
-
import "../../chunk-3GF7OVTP.mjs";
|
|
10
|
+
import "../../chunk-OODBHKG7.mjs";
|
|
11
11
|
import "../../chunk-7PYJD5JI.mjs";
|
|
12
|
-
import "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
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-
|
|
163
|
-
secondary: "bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
|
|
164
|
-
destructive: "bg-destructive text-destructive-
|
|
165
|
-
success: "bg-success text-success-
|
|
166
|
-
warning: "bg-warning text-warning-
|
|
167
|
-
info: "bg-info text-info-
|
|
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-
|
|
4
|
-
import "../../chunk-
|
|
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-
|
|
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/
|
|
353
|
-
|
|
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:
|
|
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}: ${
|
|
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-
|
|
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:
|
|
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-
|
|
3
|
+
} from "../../chunk-DGHAXJBN.mjs";
|
|
4
4
|
import "../../chunk-D6ID6M4V.mjs";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-M3FV7LOK.mjs";
|
|
6
|
+
import "../../chunk-MN5NYQCL.mjs";
|
|
6
7
|
import "../../chunk-NQPOYKAQ.mjs";
|
|
7
|
-
import "../../chunk-
|
|
8
|
-
import "../../chunk-
|
|
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";
|