@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.
- package/.turbo/turbo-build.log +193 -149
- package/CHANGELOG.md +28 -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-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-MLNEWRWV.mjs +449 -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-Q2BGOAMG.mjs +202 -0
- 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/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 +530 -0
- package/dist/components/ui/advisor-card.mjs +15 -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 +426 -191
- package/dist/components/ui/sidebar-nav.mjs +5 -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 +12258 -8611
- package/dist/index.mjs +258 -190
- package/dist/styles.css +1 -1
- package/package.json +71 -1
- package/src/components/index.tsx +115 -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 +284 -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 +213 -157
- 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-ZRSDX6OW.mjs +0 -385
- package/dist/{chunk-LLVQKSU3.mjs → chunk-GD4BJDJR.mjs} +3 -3
|
@@ -4,11 +4,16 @@ import {
|
|
|
4
4
|
PaginationEllipsis,
|
|
5
5
|
PaginationItem,
|
|
6
6
|
PaginationLink,
|
|
7
|
+
PaginationNavButtons,
|
|
7
8
|
PaginationNext,
|
|
8
|
-
PaginationPrevious
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
PaginationPrevious,
|
|
10
|
+
TablePagination
|
|
11
|
+
} from "../../chunk-PBL4OQV2.mjs";
|
|
12
|
+
import "../../chunk-7PYJD5JI.mjs";
|
|
13
|
+
import "../../chunk-XREGSKX3.mjs";
|
|
11
14
|
import "../../chunk-DBHJ5KC3.mjs";
|
|
15
|
+
import "../../chunk-FEZKMUCF.mjs";
|
|
16
|
+
import "../../chunk-QOJ2DQD6.mjs";
|
|
12
17
|
import "../../chunk-VLQZANBF.mjs";
|
|
13
18
|
import "../../chunk-FWCSY2DS.mjs";
|
|
14
19
|
export {
|
|
@@ -17,6 +22,8 @@ export {
|
|
|
17
22
|
PaginationEllipsis,
|
|
18
23
|
PaginationItem,
|
|
19
24
|
PaginationLink,
|
|
25
|
+
PaginationNavButtons,
|
|
20
26
|
PaginationNext,
|
|
21
|
-
PaginationPrevious
|
|
27
|
+
PaginationPrevious,
|
|
28
|
+
TablePagination
|
|
22
29
|
};
|
|
@@ -64,6 +64,11 @@ __export(pipeline_board_exports, {
|
|
|
64
64
|
module.exports = __toCommonJS(pipeline_board_exports);
|
|
65
65
|
var import_lucide_react8 = require("lucide-react");
|
|
66
66
|
|
|
67
|
+
// src/components/ui/button.tsx
|
|
68
|
+
var import_react = require("react");
|
|
69
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
70
|
+
var import_lucide_react = require("lucide-react");
|
|
71
|
+
|
|
67
72
|
// src/lib/utils.ts
|
|
68
73
|
var import_clsx = require("clsx");
|
|
69
74
|
var import_tailwind_merge = require("tailwind-merge");
|
|
@@ -103,11 +108,132 @@ function cn(...inputs) {
|
|
|
103
108
|
return twMerge((0, import_clsx.clsx)(inputs));
|
|
104
109
|
}
|
|
105
110
|
|
|
106
|
-
// src/
|
|
111
|
+
// src/lib/slot.tsx
|
|
112
|
+
var React = __toESM(require("react"));
|
|
113
|
+
function mergeRefs(...refs) {
|
|
114
|
+
return (value) => {
|
|
115
|
+
for (const ref of refs) {
|
|
116
|
+
if (typeof ref === "function") ref(value);
|
|
117
|
+
else if (ref !== null)
|
|
118
|
+
ref.current = value;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
var Slot = React.forwardRef(
|
|
123
|
+
(_a, forwardedRef) => {
|
|
124
|
+
var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
|
|
125
|
+
const child = React.Children.only(children);
|
|
126
|
+
if (!React.isValidElement(child)) return null;
|
|
127
|
+
const childProps = child.props;
|
|
128
|
+
const merged = __spreadValues({}, props);
|
|
129
|
+
for (const key of Object.keys(childProps)) {
|
|
130
|
+
if (key === "className") {
|
|
131
|
+
merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
|
|
132
|
+
} else if (key === "style") {
|
|
133
|
+
merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
|
|
134
|
+
} else if (key.startsWith("on") && typeof childProps[key] === "function") {
|
|
135
|
+
const parentHandler = props[key];
|
|
136
|
+
if (typeof parentHandler === "function") {
|
|
137
|
+
merged[key] = (...args) => {
|
|
138
|
+
childProps[key](...args);
|
|
139
|
+
parentHandler(...args);
|
|
140
|
+
};
|
|
141
|
+
} else {
|
|
142
|
+
merged[key] = childProps[key];
|
|
143
|
+
}
|
|
144
|
+
} else {
|
|
145
|
+
merged[key] = childProps[key];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const childRef = child.ref;
|
|
149
|
+
merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
|
|
150
|
+
return React.cloneElement(
|
|
151
|
+
child,
|
|
152
|
+
merged
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
Slot.displayName = "Slot";
|
|
157
|
+
|
|
158
|
+
// src/components/ui/button.tsx
|
|
107
159
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
160
|
+
var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
161
|
+
"inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-button whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
162
|
+
{
|
|
163
|
+
variants: {
|
|
164
|
+
variant: {
|
|
165
|
+
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
166
|
+
secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
|
|
167
|
+
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",
|
|
168
|
+
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",
|
|
169
|
+
"outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
|
|
170
|
+
"outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
|
|
171
|
+
ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
|
|
172
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
173
|
+
},
|
|
174
|
+
size: {
|
|
175
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
176
|
+
xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
177
|
+
sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
|
|
178
|
+
lg: "h-10 px-6 has-[>svg]:px-4",
|
|
179
|
+
icon: "size-9",
|
|
180
|
+
"icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
|
|
181
|
+
"icon-sm": "size-8",
|
|
182
|
+
"icon-lg": "size-10"
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
defaultVariants: {
|
|
186
|
+
variant: "default",
|
|
187
|
+
size: "default"
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
|
|
192
|
+
var _b = _a, {
|
|
193
|
+
className,
|
|
194
|
+
variant,
|
|
195
|
+
size,
|
|
196
|
+
asChild = false,
|
|
197
|
+
loading = false,
|
|
198
|
+
disabled,
|
|
199
|
+
type = "button",
|
|
200
|
+
children
|
|
201
|
+
} = _b, props = __objRest(_b, [
|
|
202
|
+
"className",
|
|
203
|
+
"variant",
|
|
204
|
+
"size",
|
|
205
|
+
"asChild",
|
|
206
|
+
"loading",
|
|
207
|
+
"disabled",
|
|
208
|
+
"type",
|
|
209
|
+
"children"
|
|
210
|
+
]);
|
|
211
|
+
const Comp = asChild ? Slot : "button";
|
|
212
|
+
const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
|
|
213
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
214
|
+
Comp,
|
|
215
|
+
__spreadProps(__spreadValues({
|
|
216
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
217
|
+
"data-size": size,
|
|
218
|
+
"data-slot": "button",
|
|
219
|
+
"data-variant": variant,
|
|
220
|
+
disabled: loading || disabled,
|
|
221
|
+
ref,
|
|
222
|
+
type
|
|
223
|
+
}, props), {
|
|
224
|
+
children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
225
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
|
|
226
|
+
!isIconOnly && children
|
|
227
|
+
] }) : children
|
|
228
|
+
})
|
|
229
|
+
);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// src/components/ui/input.tsx
|
|
233
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
108
234
|
function Input(_a) {
|
|
109
235
|
var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
|
|
110
|
-
return /* @__PURE__ */ (0,
|
|
236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
111
237
|
"input",
|
|
112
238
|
__spreadValues({
|
|
113
239
|
className: cn(
|
|
@@ -123,15 +249,15 @@ function Input(_a) {
|
|
|
123
249
|
}
|
|
124
250
|
|
|
125
251
|
// src/components/ui/toggle-group.tsx
|
|
126
|
-
var
|
|
252
|
+
var React2 = __toESM(require("react"));
|
|
127
253
|
var import_toggle_group = require("@base-ui/react/toggle-group");
|
|
128
254
|
var import_toggle2 = require("@base-ui/react/toggle");
|
|
129
255
|
|
|
130
256
|
// src/components/ui/toggle.tsx
|
|
131
|
-
var
|
|
257
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
132
258
|
var import_toggle = require("@base-ui/react/toggle");
|
|
133
|
-
var
|
|
134
|
-
var toggleVariants = (0,
|
|
259
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
260
|
+
var toggleVariants = (0, import_class_variance_authority2.cva)(
|
|
135
261
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-pressed:bg-primary/10 data-pressed:inset-ring data-pressed:inset-ring-primary data-pressed:text-foreground data-pressed:hover:bg-primary/10 data-pressed:hover:text-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
136
262
|
{
|
|
137
263
|
variants: {
|
|
@@ -153,8 +279,8 @@ var toggleVariants = (0, import_class_variance_authority.cva)(
|
|
|
153
279
|
);
|
|
154
280
|
|
|
155
281
|
// src/components/ui/toggle-group.tsx
|
|
156
|
-
var
|
|
157
|
-
var ToggleGroupContext =
|
|
282
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
283
|
+
var ToggleGroupContext = React2.createContext({
|
|
158
284
|
size: "default",
|
|
159
285
|
variant: "default",
|
|
160
286
|
spacing: 0
|
|
@@ -175,7 +301,7 @@ function ToggleGroup(_a) {
|
|
|
175
301
|
"type",
|
|
176
302
|
"children"
|
|
177
303
|
]);
|
|
178
|
-
return /* @__PURE__ */ (0,
|
|
304
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
179
305
|
import_toggle_group.ToggleGroup,
|
|
180
306
|
__spreadProps(__spreadValues({
|
|
181
307
|
className: cn(
|
|
@@ -190,7 +316,7 @@ function ToggleGroup(_a) {
|
|
|
190
316
|
multiple: type === "multiple",
|
|
191
317
|
style: { "--gap": spacing }
|
|
192
318
|
}, props), {
|
|
193
|
-
children: /* @__PURE__ */ (0,
|
|
319
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children })
|
|
194
320
|
})
|
|
195
321
|
);
|
|
196
322
|
}
|
|
@@ -206,8 +332,8 @@ function ToggleGroupItem(_a) {
|
|
|
206
332
|
"variant",
|
|
207
333
|
"size"
|
|
208
334
|
]);
|
|
209
|
-
const context =
|
|
210
|
-
return /* @__PURE__ */ (0,
|
|
335
|
+
const context = React2.useContext(ToggleGroupContext);
|
|
336
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
211
337
|
import_toggle2.Toggle,
|
|
212
338
|
__spreadProps(__spreadValues({
|
|
213
339
|
className: cn(
|
|
@@ -234,76 +360,27 @@ function ToggleGroupItem(_a) {
|
|
|
234
360
|
var import_lucide_react7 = require("lucide-react");
|
|
235
361
|
|
|
236
362
|
// src/lib/theme-provider.tsx
|
|
237
|
-
var
|
|
238
|
-
var
|
|
239
|
-
var ThemeVarsContext = (0,
|
|
363
|
+
var import_react2 = require("react");
|
|
364
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
365
|
+
var ThemeVarsContext = (0, import_react2.createContext)({});
|
|
240
366
|
function useThemeVars() {
|
|
241
|
-
return (0,
|
|
367
|
+
return (0, import_react2.useContext)(ThemeVarsContext);
|
|
242
368
|
}
|
|
243
369
|
|
|
244
370
|
// src/components/ui/badge.tsx
|
|
245
|
-
var
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
var React3 = __toESM(require("react"));
|
|
249
|
-
function mergeRefs(...refs) {
|
|
250
|
-
return (value) => {
|
|
251
|
-
for (const ref of refs) {
|
|
252
|
-
if (typeof ref === "function") ref(value);
|
|
253
|
-
else if (ref !== null)
|
|
254
|
-
ref.current = value;
|
|
255
|
-
}
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
var Slot = React3.forwardRef(
|
|
259
|
-
(_a, forwardedRef) => {
|
|
260
|
-
var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
|
|
261
|
-
const child = React3.Children.only(children);
|
|
262
|
-
if (!React3.isValidElement(child)) return null;
|
|
263
|
-
const childProps = child.props;
|
|
264
|
-
const merged = __spreadValues({}, props);
|
|
265
|
-
for (const key of Object.keys(childProps)) {
|
|
266
|
-
if (key === "className") {
|
|
267
|
-
merged.className = [props.className, childProps.className].filter(Boolean).join(" ");
|
|
268
|
-
} else if (key === "style") {
|
|
269
|
-
merged.style = __spreadValues(__spreadValues({}, props.style), childProps.style);
|
|
270
|
-
} else if (key.startsWith("on") && typeof childProps[key] === "function") {
|
|
271
|
-
const parentHandler = props[key];
|
|
272
|
-
if (typeof parentHandler === "function") {
|
|
273
|
-
merged[key] = (...args) => {
|
|
274
|
-
childProps[key](...args);
|
|
275
|
-
parentHandler(...args);
|
|
276
|
-
};
|
|
277
|
-
} else {
|
|
278
|
-
merged[key] = childProps[key];
|
|
279
|
-
}
|
|
280
|
-
} else {
|
|
281
|
-
merged[key] = childProps[key];
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
const childRef = child.ref;
|
|
285
|
-
merged.ref = forwardedRef ? mergeRefs(forwardedRef, childRef) : childRef;
|
|
286
|
-
return React3.cloneElement(
|
|
287
|
-
child,
|
|
288
|
-
merged
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
);
|
|
292
|
-
Slot.displayName = "Slot";
|
|
293
|
-
|
|
294
|
-
// src/components/ui/badge.tsx
|
|
295
|
-
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
296
|
-
var badgeVariants = (0, import_class_variance_authority2.cva)(
|
|
371
|
+
var import_class_variance_authority3 = require("class-variance-authority");
|
|
372
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
373
|
+
var badgeVariants = (0, import_class_variance_authority3.cva)(
|
|
297
374
|
"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
|
|
298
375
|
{
|
|
299
376
|
variants: {
|
|
300
377
|
variant: {
|
|
301
|
-
default: "bg-primary text-
|
|
302
|
-
secondary: "bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
|
|
303
|
-
destructive: "bg-destructive text-destructive-
|
|
304
|
-
success: "bg-success text-success-
|
|
305
|
-
warning: "bg-warning text-warning-
|
|
306
|
-
info: "bg-info text-info-
|
|
378
|
+
default: "border-primary/40 bg-primary/10 text-foreground [a&]:hover:bg-primary/15",
|
|
379
|
+
secondary: "border-border bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
|
|
380
|
+
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",
|
|
381
|
+
success: "border-success/40 bg-success/10 text-success-text [a&]:hover:bg-success/15",
|
|
382
|
+
warning: "border-warning/40 bg-warning/10 text-warning-text [a&]:hover:bg-warning/15",
|
|
383
|
+
info: "border-info/40 bg-info/10 text-info-text [a&]:hover:bg-info/15",
|
|
307
384
|
outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
308
385
|
ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
309
386
|
link: "text-primary underline-offset-4 [a&]:hover:underline"
|
|
@@ -325,7 +402,7 @@ function Badge(_a) {
|
|
|
325
402
|
"asChild"
|
|
326
403
|
]);
|
|
327
404
|
const Comp = asChild ? Slot : "span";
|
|
328
|
-
return /* @__PURE__ */ (0,
|
|
405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
329
406
|
Comp,
|
|
330
407
|
__spreadValues({
|
|
331
408
|
className: cn(badgeVariants({ variant }), className),
|
|
@@ -335,83 +412,6 @@ function Badge(_a) {
|
|
|
335
412
|
);
|
|
336
413
|
}
|
|
337
414
|
|
|
338
|
-
// src/components/ui/button.tsx
|
|
339
|
-
var import_react2 = require("react");
|
|
340
|
-
var import_class_variance_authority3 = require("class-variance-authority");
|
|
341
|
-
var import_lucide_react = require("lucide-react");
|
|
342
|
-
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
343
|
-
var buttonVariants = (0, import_class_variance_authority3.cva)(
|
|
344
|
-
"inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 font-sans text-button whitespace-nowrap transition-all active:scale-[0.98] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
345
|
-
{
|
|
346
|
-
variants: {
|
|
347
|
-
variant: {
|
|
348
|
-
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
349
|
-
secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
|
|
350
|
-
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",
|
|
351
|
-
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",
|
|
352
|
-
"outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
|
|
353
|
-
"outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
|
|
354
|
-
ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs dark:hover:bg-accent/50",
|
|
355
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
356
|
-
},
|
|
357
|
-
size: {
|
|
358
|
-
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
359
|
-
xs: "h-6 gap-1 px-2 text-button-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
360
|
-
sm: "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
|
|
361
|
-
lg: "h-10 px-6 has-[>svg]:px-4",
|
|
362
|
-
icon: "size-9",
|
|
363
|
-
"icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3",
|
|
364
|
-
"icon-sm": "size-8",
|
|
365
|
-
"icon-lg": "size-10"
|
|
366
|
-
}
|
|
367
|
-
},
|
|
368
|
-
defaultVariants: {
|
|
369
|
-
variant: "default",
|
|
370
|
-
size: "default"
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
);
|
|
374
|
-
var Button = (0, import_react2.forwardRef)(function Button2(_a, ref) {
|
|
375
|
-
var _b = _a, {
|
|
376
|
-
className,
|
|
377
|
-
variant,
|
|
378
|
-
size,
|
|
379
|
-
asChild = false,
|
|
380
|
-
loading = false,
|
|
381
|
-
disabled,
|
|
382
|
-
type = "button",
|
|
383
|
-
children
|
|
384
|
-
} = _b, props = __objRest(_b, [
|
|
385
|
-
"className",
|
|
386
|
-
"variant",
|
|
387
|
-
"size",
|
|
388
|
-
"asChild",
|
|
389
|
-
"loading",
|
|
390
|
-
"disabled",
|
|
391
|
-
"type",
|
|
392
|
-
"children"
|
|
393
|
-
]);
|
|
394
|
-
const Comp = asChild ? Slot : "button";
|
|
395
|
-
const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
|
|
396
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
397
|
-
Comp,
|
|
398
|
-
__spreadProps(__spreadValues({
|
|
399
|
-
className: cn(buttonVariants({ variant, size, className })),
|
|
400
|
-
"data-size": size,
|
|
401
|
-
"data-slot": "button",
|
|
402
|
-
"data-variant": variant,
|
|
403
|
-
disabled: loading || disabled,
|
|
404
|
-
ref,
|
|
405
|
-
type
|
|
406
|
-
}, props), {
|
|
407
|
-
children: loading ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
408
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
|
|
409
|
-
!isIconOnly && children
|
|
410
|
-
] }) : children
|
|
411
|
-
})
|
|
412
|
-
);
|
|
413
|
-
});
|
|
414
|
-
|
|
415
415
|
// src/components/ui/spinner.tsx
|
|
416
416
|
var import_class_variance_authority4 = require("class-variance-authority");
|
|
417
417
|
var import_lucide_react2 = require("lucide-react");
|
|
@@ -517,6 +517,43 @@ function DropdownMenuSeparator(_a) {
|
|
|
517
517
|
// src/components/ui/opportunity-card.tsx
|
|
518
518
|
var import_lucide_react6 = require("lucide-react");
|
|
519
519
|
|
|
520
|
+
// src/lib/format-currency.ts
|
|
521
|
+
function formatCurrency(value, options) {
|
|
522
|
+
const { decimals = 0, showSign = false } = options != null ? options : {};
|
|
523
|
+
const abs = Math.abs(value);
|
|
524
|
+
const formatted = new Intl.NumberFormat("en-AU", {
|
|
525
|
+
style: "currency",
|
|
526
|
+
currency: "AUD",
|
|
527
|
+
minimumFractionDigits: decimals,
|
|
528
|
+
maximumFractionDigits: decimals
|
|
529
|
+
}).format(abs);
|
|
530
|
+
if (!showSign) return value < 0 ? `-${formatted}` : formatted;
|
|
531
|
+
if (value > 0) return `+${formatted}`;
|
|
532
|
+
if (value < 0) return `-${formatted}`;
|
|
533
|
+
return formatted;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// src/lib/format-date.ts
|
|
537
|
+
var import_date_fns = require("date-fns");
|
|
538
|
+
function safeParse(iso) {
|
|
539
|
+
return (0, import_date_fns.parseISO)(iso);
|
|
540
|
+
}
|
|
541
|
+
function formatDateShort(iso) {
|
|
542
|
+
if (!iso) return "\u2014";
|
|
543
|
+
try {
|
|
544
|
+
return (0, import_date_fns.format)(safeParse(iso), "dd MMM yyyy");
|
|
545
|
+
} catch (e) {
|
|
546
|
+
return iso;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
function formatDateDayMonth(iso) {
|
|
550
|
+
try {
|
|
551
|
+
return (0, import_date_fns.format)(safeParse(iso), "dd MMM");
|
|
552
|
+
} catch (e) {
|
|
553
|
+
return iso;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
520
557
|
// src/components/ui/separator.tsx
|
|
521
558
|
var import_separator = require("@base-ui/react/separator");
|
|
522
559
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
@@ -736,34 +773,6 @@ function resolvePriority(days, warningDays, priorityDays, priority) {
|
|
|
736
773
|
if (warningDays !== void 0 || priorityDays !== void 0) return "LOW";
|
|
737
774
|
return priority;
|
|
738
775
|
}
|
|
739
|
-
function formatAmount(amount) {
|
|
740
|
-
return new Intl.NumberFormat("en-AU", {
|
|
741
|
-
style: "currency",
|
|
742
|
-
currency: "AUD",
|
|
743
|
-
maximumFractionDigits: 0
|
|
744
|
-
}).format(amount);
|
|
745
|
-
}
|
|
746
|
-
function formatDate(iso) {
|
|
747
|
-
try {
|
|
748
|
-
return new Date(iso).toLocaleDateString("en-AU", {
|
|
749
|
-
day: "2-digit",
|
|
750
|
-
month: "short",
|
|
751
|
-
year: "numeric"
|
|
752
|
-
});
|
|
753
|
-
} catch (e) {
|
|
754
|
-
return iso;
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
function formatHoldDate(iso) {
|
|
758
|
-
try {
|
|
759
|
-
return new Date(iso).toLocaleDateString("en-AU", {
|
|
760
|
-
day: "2-digit",
|
|
761
|
-
month: "short"
|
|
762
|
-
});
|
|
763
|
-
} catch (e) {
|
|
764
|
-
return iso;
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
776
|
function formatLoanType(type) {
|
|
768
777
|
return type.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
769
778
|
}
|
|
@@ -825,7 +834,7 @@ function OpportunityCard({
|
|
|
825
834
|
children: [
|
|
826
835
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Clock, { className: "size-3 shrink-0" }),
|
|
827
836
|
"On hold until ",
|
|
828
|
-
|
|
837
|
+
formatDateDayMonth(onHoldTo)
|
|
829
838
|
]
|
|
830
839
|
}
|
|
831
840
|
),
|
|
@@ -840,17 +849,16 @@ function OpportunityCard({
|
|
|
840
849
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
|
|
841
850
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
|
|
842
851
|
(loanPurposeLabel || loanType) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Badge, { variant: "outline", className: "self-start", children: loanPurposeLabel != null ? loanPurposeLabel : formatLoanType(loanType) }),
|
|
843
|
-
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children:
|
|
852
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-base font-bold tabular-nums text-foreground", children: formatCurrency(amount) })
|
|
844
853
|
] }),
|
|
845
854
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-1 -mr-1 -mt-1", children: [
|
|
846
855
|
onLaunchAssistant && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
847
|
-
|
|
856
|
+
Button,
|
|
848
857
|
{
|
|
849
858
|
type: "button",
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
),
|
|
859
|
+
variant: "ghost",
|
|
860
|
+
size: "icon",
|
|
861
|
+
className: "size-7 shrink-0",
|
|
854
862
|
onClick: onLaunchAssistant,
|
|
855
863
|
"aria-label": "Launch AI Assistant",
|
|
856
864
|
title: "Launch AI Assistant",
|
|
@@ -906,7 +914,7 @@ function OpportunityCard({
|
|
|
906
914
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
907
915
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
908
916
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react6.Calendar, { className: "size-3 shrink-0", "aria-hidden": "true" }),
|
|
909
|
-
|
|
917
|
+
formatDateShort(date)
|
|
910
918
|
] }),
|
|
911
919
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5", children: [
|
|
912
920
|
daysSinceColumnChanged !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
@@ -1291,10 +1299,13 @@ function Toolbar({
|
|
|
1291
1299
|
}
|
|
1292
1300
|
),
|
|
1293
1301
|
searchValue && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1294
|
-
|
|
1302
|
+
Button,
|
|
1295
1303
|
{
|
|
1304
|
+
type: "button",
|
|
1305
|
+
variant: "ghost",
|
|
1306
|
+
size: "icon",
|
|
1296
1307
|
onClick: () => onSearchChange(""),
|
|
1297
|
-
className: "absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",
|
|
1308
|
+
className: "absolute right-2 top-1/2 size-6 -translate-y-1/2 text-muted-foreground hover:text-foreground",
|
|
1298
1309
|
"aria-label": "Clear search",
|
|
1299
1310
|
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react8.X, { className: "size-3.5" })
|
|
1300
1311
|
}
|
|
@@ -1317,8 +1328,11 @@ function Toolbar({
|
|
|
1317
1328
|
}
|
|
1318
1329
|
),
|
|
1319
1330
|
onRefresh && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1320
|
-
|
|
1331
|
+
Button,
|
|
1321
1332
|
{
|
|
1333
|
+
type: "button",
|
|
1334
|
+
variant: "ghost",
|
|
1335
|
+
size: "icon",
|
|
1322
1336
|
onClick: onRefresh,
|
|
1323
1337
|
className: "ml-auto text-muted-foreground hover:text-foreground",
|
|
1324
1338
|
"aria-label": "Refresh board",
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PipelineBoard
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GHC7LLUX.mjs";
|
|
4
|
+
import "../../chunk-R3VSPKNP.mjs";
|
|
5
|
+
import "../../chunk-K5A5L6T2.mjs";
|
|
6
|
+
import "../../chunk-MBON7YRJ.mjs";
|
|
7
|
+
import "../../chunk-EFRENWEJ.mjs";
|
|
8
|
+
import "../../chunk-MN5NYQCL.mjs";
|
|
9
|
+
import "../../chunk-7PV3IWCN.mjs";
|
|
7
10
|
import "../../chunk-EI5F6FMT.mjs";
|
|
8
11
|
import "../../chunk-BDYZCBRT.mjs";
|
|
9
|
-
import "../../chunk-
|
|
10
|
-
import "../../chunk-WAZD7NFU.mjs";
|
|
12
|
+
import "../../chunk-BKNFWEH2.mjs";
|
|
11
13
|
import "../../chunk-MARPPFOJ.mjs";
|
|
12
14
|
import "../../chunk-FH6QVUVZ.mjs";
|
|
13
15
|
import "../../chunk-RGVKLTLH.mjs";
|
|
14
16
|
import "../../chunk-7YAU5CY6.mjs";
|
|
15
17
|
import "../../chunk-GYMYRIZP.mjs";
|
|
16
|
-
import "../../chunk-
|
|
18
|
+
import "../../chunk-XREGSKX3.mjs";
|
|
17
19
|
import "../../chunk-DBHJ5KC3.mjs";
|
|
18
20
|
import "../../chunk-FEZKMUCF.mjs";
|
|
19
21
|
import "../../chunk-QOJ2DQD6.mjs";
|