@wealthx/shadcn 1.1.0 → 1.2.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 +235 -154
- package/CHANGELOG.md +6 -0
- package/dist/{chunk-6OJF6XRN.mjs → chunk-24FUO7TD.mjs} +4 -8
- package/dist/{chunk-4AJ5HWHD.mjs → chunk-2I5S2AMY.mjs} +3 -3
- package/dist/chunk-2SF672SZ.mjs +161 -0
- package/dist/{chunk-GPRJQ24C.mjs → chunk-34NWQURD.mjs} +2 -2
- package/dist/{chunk-MQ72DIBH.mjs → chunk-3GF7OVTP.mjs} +14 -5
- package/dist/chunk-3WMX6KWS.mjs +245 -0
- package/dist/{chunk-PMKODV6M.mjs → chunk-462HMNO4.mjs} +6 -10
- package/dist/chunk-4CX4SBRO.mjs +153 -0
- package/dist/chunk-4MN6UQHG.mjs +443 -0
- package/dist/{chunk-GLW2UO6O.mjs → chunk-5QQVZTVZ.mjs} +82 -61
- package/dist/{chunk-BGP2N52Z.mjs → chunk-66MI7Q4B.mjs} +5 -5
- package/dist/chunk-6FCGKSZX.mjs +268 -0
- package/dist/{chunk-CGOKTPXU.mjs → chunk-6JQFUE5I.mjs} +20 -23
- package/dist/{chunk-Z3MK2KKZ.mjs → chunk-7DHU4VGG.mjs} +7 -3
- package/dist/{chunk-VZ2NR7L3.mjs → chunk-7PYJD5JI.mjs} +35 -27
- package/dist/{chunk-JU2RUWHF.mjs → chunk-7XJHLGUV.mjs} +1 -1
- package/dist/{chunk-BMFN37JH.mjs → chunk-7YAU5CY6.mjs} +1 -1
- package/dist/chunk-A56YQQHG.mjs +402 -0
- package/dist/chunk-AH52LG6N.mjs +315 -0
- package/dist/{chunk-SLWCCURD.mjs → chunk-CLIN5525.mjs} +8 -4
- package/dist/{chunk-3VQNJ235.mjs → chunk-CSDO6VBW.mjs} +7 -0
- package/dist/chunk-D4ILTPOG.mjs +293 -0
- package/dist/{chunk-HS7TFG7V.mjs → chunk-D6ID6M4V.mjs} +1 -1
- package/dist/chunk-DOH3EHX7.mjs +378 -0
- package/dist/{chunk-MJIEMGRD.mjs → chunk-EFRENWEJ.mjs} +9 -17
- package/dist/{chunk-YBXCIF5Q.mjs → chunk-ERGGHC2V.mjs} +36 -49
- package/dist/{chunk-OXQQNQZI.mjs → chunk-FEZKMUCF.mjs} +10 -1
- package/dist/{chunk-55CEW76V.mjs → chunk-FH6QVUVZ.mjs} +1 -1
- package/dist/chunk-FMAXJ2SI.mjs +71 -0
- package/dist/chunk-FZIXGLMV.mjs +173 -0
- package/dist/{chunk-DS2AMHN2.mjs → chunk-GYMYRIZP.mjs} +2 -2
- package/dist/{chunk-KQDD5MU3.mjs → chunk-H45TKD34.mjs} +5 -5
- package/dist/{chunk-BBJBJSXQ.mjs → chunk-J5UICVJS.mjs} +1 -1
- package/dist/{chunk-RL772EH7.mjs → chunk-JHJHG4GO.mjs} +4 -12
- package/dist/{chunk-RN67642N.mjs → chunk-KMCGSZTX.mjs} +47 -41
- package/dist/{chunk-FHNT55I5.mjs → chunk-KUDCQ4FI.mjs} +4 -4
- package/dist/chunk-LE6YFY6D.mjs +209 -0
- package/dist/{chunk-NLLKTU4B.mjs → chunk-LLVQKSU3.mjs} +21 -17
- package/dist/{chunk-KKHTJNMM.mjs → chunk-MARPPFOJ.mjs} +8 -4
- package/dist/{chunk-6AFMNC42.mjs → chunk-N2PT566P.mjs} +15 -11
- package/dist/chunk-NLCKVHWB.mjs +161 -0
- package/dist/{chunk-YN5SYTOO.mjs → chunk-NQPOYKAQ.mjs} +9 -5
- package/dist/{chunk-ZZV5JVNW.mjs → chunk-NSLMILBT.mjs} +3 -7
- package/dist/chunk-NXA3CZ7A.mjs +248 -0
- package/dist/chunk-OGOYQ7BG.mjs +150 -0
- package/dist/{chunk-3NQGYJEZ.mjs → chunk-P6AM5V7O.mjs} +10 -18
- package/dist/{chunk-CZ3BW5GL.mjs → chunk-P76HMUI6.mjs} +5 -11
- package/dist/chunk-PCPLO5HT.mjs +671 -0
- package/dist/chunk-PG6K5XEC.mjs +475 -0
- package/dist/{chunk-5JGQAAQV.mjs → chunk-PJHPSRYD.mjs} +84 -62
- package/dist/{chunk-DDPA2XXS.mjs → chunk-PMB3A7V3.mjs} +2 -2
- package/dist/chunk-PR6V5XKM.mjs +209 -0
- package/dist/{chunk-46OFHMQA.mjs → chunk-Q76O3RIQ.mjs} +10 -6
- package/dist/chunk-QVKWW6KE.mjs +272 -0
- package/dist/chunk-RGU7HOEC.mjs +140 -0
- package/dist/{chunk-JF4PHPD5.mjs → chunk-RGVKLTLH.mjs} +4 -4
- package/dist/{chunk-VG6UF6UT.mjs → chunk-RP3SQYA3.mjs} +2 -2
- package/dist/chunk-RRBS6D63.mjs +163 -0
- package/dist/{chunk-UEL4RD5P.mjs → chunk-SMQ3DG25.mjs} +80 -67
- package/dist/chunk-SPJ5KXW7.mjs +199 -0
- package/dist/chunk-SYOD63OZ.mjs +225 -0
- package/dist/chunk-UFYSFDER.mjs +42 -0
- package/dist/chunk-VACKZOMY.mjs +190 -0
- package/dist/chunk-VLQZANBF.mjs +42 -0
- package/dist/chunk-WA6O6EUR.mjs +1885 -0
- package/dist/{chunk-E3K6O4FZ.mjs → chunk-WAZD7NFU.mjs} +5 -2
- package/dist/chunk-WG6JGJXB.mjs +165 -0
- package/dist/{chunk-I64K754C.mjs → chunk-WNGWBVLV.mjs} +2 -2
- package/dist/{chunk-3U7SD3MS.mjs → chunk-WOEHFRGB.mjs} +3 -3
- package/dist/{chunk-DKZRJOMF.mjs → chunk-XIRTEFKH.mjs} +12 -12
- package/dist/chunk-Y6DWJSKZ.mjs +79 -0
- package/dist/chunk-YKPROFLB.mjs +161 -0
- package/dist/{chunk-CJ46PDXE.mjs → chunk-ZRO5JO3H.mjs} +106 -66
- package/dist/{chunk-VYMHBV6D.mjs → chunk-ZU4NV6RG.mjs} +5 -3
- package/dist/components/ui/accordion.js +40 -4
- package/dist/components/ui/accordion.mjs +2 -2
- package/dist/components/ui/add-column-modal.js +789 -0
- package/dist/components/ui/add-column-modal.mjs +17 -0
- package/dist/components/ui/add-lead-modal.js +647 -0
- package/dist/components/ui/add-lead-modal.mjs +16 -0
- package/dist/components/ui/ai-assistant-drawer.js +686 -0
- package/dist/components/ui/ai-assistant-drawer.mjs +16 -0
- package/dist/components/ui/alert-dialog.js +37 -5
- package/dist/components/ui/alert-dialog.mjs +4 -4
- package/dist/components/ui/alert.js +37 -11
- package/dist/components/ui/alert.mjs +2 -2
- package/dist/components/ui/avatar.js +36 -8
- package/dist/components/ui/avatar.mjs +2 -2
- package/dist/components/ui/backoffice-alert-history-chart.js +624 -0
- package/dist/components/ui/backoffice-alert-history-chart.mjs +16 -0
- package/dist/components/ui/backoffice-contact-history-chart.js +687 -0
- package/dist/components/ui/backoffice-contact-history-chart.mjs +16 -0
- package/dist/components/ui/badge.js +37 -2
- package/dist/components/ui/badge.mjs +2 -2
- package/dist/components/ui/borrowing-capacity-line-chart.js +639 -0
- package/dist/components/ui/borrowing-capacity-line-chart.mjs +16 -0
- package/dist/components/ui/button.js +35 -3
- package/dist/components/ui/button.mjs +2 -2
- package/dist/components/ui/calendar.js +43 -19
- package/dist/components/ui/calendar.mjs +3 -3
- package/dist/components/ui/card.js +40 -4
- package/dist/components/ui/card.mjs +2 -2
- package/dist/components/ui/cash-balance-line-chart.js +627 -0
- package/dist/components/ui/cash-balance-line-chart.mjs +16 -0
- package/dist/components/ui/cashflow-bar-chart.js +123 -69
- package/dist/components/ui/cashflow-bar-chart.mjs +8 -8
- package/dist/components/ui/checkbox.js +36 -5
- package/dist/components/ui/checkbox.mjs +2 -3
- package/dist/components/ui/chip.js +37 -2
- package/dist/components/ui/chip.mjs +3 -3
- package/dist/components/ui/combobox.js +68 -49
- package/dist/components/ui/combobox.mjs +2 -2
- package/dist/components/ui/data-table.js +160 -88
- package/dist/components/ui/data-table.mjs +10 -11
- package/dist/components/ui/date-picker.js +44 -20
- package/dist/components/ui/date-picker.mjs +6 -7
- package/dist/components/ui/dialog.js +44 -12
- package/dist/components/ui/dialog.mjs +4 -4
- package/dist/components/ui/drawer.js +46 -10
- package/dist/components/ui/drawer.mjs +3 -3
- package/dist/components/ui/dropdown-menu.js +40 -16
- package/dist/components/ui/dropdown-menu.mjs +3 -3
- package/dist/components/ui/empty.js +41 -5
- package/dist/components/ui/empty.mjs +2 -2
- package/dist/components/ui/expense-bar-chart.js +165 -66
- package/dist/components/ui/expense-bar-chart.mjs +8 -8
- package/dist/components/ui/field.js +53 -21
- package/dist/components/ui/field.mjs +4 -4
- package/dist/components/ui/financial-cards.js +1002 -0
- package/dist/components/ui/financial-cards.mjs +24 -0
- package/dist/components/ui/financial-drawers.js +637 -0
- package/dist/components/ui/financial-drawers.mjs +17 -0
- package/dist/components/ui/financial-primitives.js +218 -0
- package/dist/components/ui/financial-primitives.mjs +22 -0
- package/dist/components/ui/financial-sections.js +1422 -0
- package/dist/components/ui/financial-sections.mjs +30 -0
- package/dist/components/ui/form-primitives.js +682 -0
- package/dist/components/ui/form-primitives.mjs +19 -0
- package/dist/components/ui/income-bar-chart.js +163 -65
- package/dist/components/ui/income-bar-chart.mjs +8 -8
- package/dist/components/ui/input-group.js +43 -7
- package/dist/components/ui/input-group.mjs +5 -5
- package/dist/components/ui/input-otp.js +39 -3
- package/dist/components/ui/input-otp.mjs +2 -2
- package/dist/components/ui/input.js +34 -2
- package/dist/components/ui/input.mjs +2 -2
- package/dist/components/ui/kanban-column.js +1143 -0
- package/dist/components/ui/kanban-column.mjs +20 -0
- package/dist/components/ui/label.js +35 -7
- package/dist/components/ui/label.mjs +2 -2
- package/dist/components/ui/opportunity-card.js +960 -0
- package/dist/components/ui/opportunity-card.mjs +20 -0
- package/dist/components/ui/opportunity-edit-modals.js +3360 -0
- package/dist/components/ui/opportunity-edit-modals.mjs +37 -0
- package/dist/components/ui/opportunity-summary-tab.js +4365 -0
- package/dist/components/ui/opportunity-summary-tab.mjs +34 -0
- package/dist/components/ui/pagination.js +35 -3
- package/dist/components/ui/pagination.mjs +3 -3
- package/dist/components/ui/pipeline-alerts.js +103 -0
- package/dist/components/ui/pipeline-alerts.mjs +8 -0
- package/dist/components/ui/pipeline-board.js +1408 -0
- package/dist/components/ui/pipeline-board.mjs +24 -0
- package/dist/components/ui/pipeline-chart.js +216 -0
- package/dist/components/ui/pipeline-chart.mjs +10 -0
- package/dist/components/ui/pipeline-dialogs.js +1183 -0
- package/dist/components/ui/pipeline-dialogs.mjs +23 -0
- package/dist/components/ui/pipeline-primitives.js +300 -0
- package/dist/components/ui/pipeline-primitives.mjs +11 -0
- package/dist/components/ui/popover.js +45 -4
- package/dist/components/ui/popover.mjs +3 -3
- package/dist/components/ui/progress.js +33 -1
- package/dist/components/ui/progress.mjs +2 -2
- package/dist/components/ui/property-cashflow-doughnut-chart.js +523 -0
- package/dist/components/ui/property-cashflow-doughnut-chart.mjs +16 -0
- package/dist/components/ui/property-debt-equity-doughnut-chart.js +521 -0
- package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +16 -0
- package/dist/components/ui/property-mobile-estimate-line-chart.js +682 -0
- package/dist/components/ui/property-mobile-estimate-line-chart.mjs +16 -0
- package/dist/components/ui/radio-group.js +33 -1
- package/dist/components/ui/radio-group.mjs +2 -2
- package/dist/components/ui/select.js +66 -26
- package/dist/components/ui/select.mjs +3 -3
- package/dist/components/ui/separator.js +33 -1
- package/dist/components/ui/separator.mjs +2 -2
- package/dist/components/ui/sheet.js +37 -9
- package/dist/components/ui/sheet.mjs +3 -3
- package/dist/components/ui/skeleton.js +33 -1
- package/dist/components/ui/skeleton.mjs +2 -2
- package/dist/components/ui/slider.js +86 -102
- package/dist/components/ui/slider.mjs +2 -2
- package/dist/components/ui/spinner.js +33 -1
- package/dist/components/ui/spinner.mjs +2 -2
- package/dist/components/ui/stage-timeline.js +579 -0
- package/dist/components/ui/stage-timeline.mjs +15 -0
- package/dist/components/ui/switch.js +37 -4
- package/dist/components/ui/switch.mjs +2 -3
- package/dist/components/ui/table.js +37 -5
- package/dist/components/ui/table.mjs +2 -2
- package/dist/components/ui/tabs.js +36 -12
- package/dist/components/ui/tabs.mjs +2 -2
- package/dist/components/ui/textarea.js +34 -2
- package/dist/components/ui/textarea.mjs +2 -2
- package/dist/components/ui/toggle-group.js +35 -4
- package/dist/components/ui/toggle-group.mjs +3 -4
- package/dist/components/ui/toggle.js +35 -4
- package/dist/components/ui/toggle.mjs +2 -3
- package/dist/components/ui/tooltip.js +51 -22
- package/dist/components/ui/tooltip.mjs +3 -3
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +528 -0
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +16 -0
- package/dist/components/ui/transactions-income-expense-bar-chart.js +76 -38
- package/dist/components/ui/transactions-income-expense-bar-chart.mjs +8 -8
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +528 -0
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +16 -0
- package/dist/index.js +11616 -3831
- package/dist/index.mjs +333 -161
- package/dist/lib/theme-provider.js +10 -1
- package/dist/lib/theme-provider.mjs +1 -1
- package/dist/lib/typography.js +8 -0
- package/dist/lib/typography.mjs +3 -1
- package/dist/lib/utils.js +33 -1
- package/dist/lib/utils.mjs +1 -1
- package/dist/styles.css +1 -1
- package/package.json +140 -5
- package/src/components/index.tsx +296 -42
- package/src/components/ui/accordion.tsx +6 -3
- package/src/components/ui/add-column-modal.tsx +339 -0
- package/src/components/ui/add-lead-modal.tsx +290 -0
- package/src/components/ui/ai-assistant-drawer.tsx +408 -0
- package/src/components/ui/alert-dialog.tsx +80 -54
- package/src/components/ui/alert.tsx +28 -28
- package/src/components/ui/avatar.tsx +30 -29
- package/src/components/ui/backoffice-alert-history-chart.tsx +260 -0
- package/src/components/ui/backoffice-contact-history-chart.tsx +325 -0
- package/src/components/ui/badge.tsx +17 -15
- package/src/components/ui/borrowing-capacity-line-chart.tsx +357 -0
- package/src/components/ui/button.tsx +30 -27
- package/src/components/ui/calendar.tsx +53 -67
- package/src/components/ui/card.tsx +27 -24
- package/src/components/ui/cash-balance-line-chart.tsx +302 -0
- package/src/components/ui/cashflow-bar-chart.tsx +104 -77
- package/src/components/ui/chart-shared.tsx +176 -15
- package/src/components/ui/checkbox.tsx +30 -26
- package/src/components/ui/combobox.tsx +78 -72
- package/src/components/ui/data-table.tsx +160 -99
- package/src/components/ui/date-picker.tsx +0 -2
- package/src/components/ui/dialog.tsx +70 -60
- package/src/components/ui/drawer.tsx +57 -48
- package/src/components/ui/dropdown-menu.tsx +90 -82
- package/src/components/ui/empty.tsx +31 -27
- package/src/components/ui/expense-bar-chart.tsx +83 -65
- package/src/components/ui/field.tsx +70 -62
- package/src/components/ui/financial-cards.tsx +830 -0
- package/src/components/ui/financial-drawers.tsx +339 -0
- package/src/components/ui/financial-primitives.tsx +331 -0
- package/src/components/ui/financial-sections.tsx +672 -0
- package/src/components/ui/form-primitives.tsx +536 -0
- package/src/components/ui/income-bar-chart.tsx +79 -60
- package/src/components/ui/input-group.tsx +41 -34
- package/src/components/ui/input-otp.tsx +29 -24
- package/src/components/ui/input.tsx +8 -8
- package/src/components/ui/kanban-column.tsx +333 -0
- package/src/components/ui/label.tsx +9 -12
- package/src/components/ui/opportunity-card.tsx +616 -0
- package/src/components/ui/opportunity-edit-modals.tsx +2528 -0
- package/src/components/ui/opportunity-summary-tab.tsx +579 -0
- package/src/components/ui/pipeline-alerts.tsx +74 -0
- package/src/components/ui/pipeline-board.tsx +268 -0
- package/src/components/ui/pipeline-chart.tsx +173 -0
- package/src/components/ui/pipeline-dialogs.tsx +303 -0
- package/src/components/ui/pipeline-primitives.tsx +108 -0
- package/src/components/ui/popover.tsx +41 -36
- package/src/components/ui/property-cashflow-doughnut-chart.tsx +188 -0
- package/src/components/ui/property-debt-equity-doughnut-chart.tsx +185 -0
- package/src/components/ui/property-mobile-estimate-line-chart.tsx +393 -0
- package/src/components/ui/select.tsx +65 -52
- package/src/components/ui/sheet.tsx +55 -52
- package/src/components/ui/slider.tsx +54 -77
- package/src/components/ui/stage-timeline.tsx +205 -0
- package/src/components/ui/switch.tsx +42 -29
- package/src/components/ui/table.tsx +28 -28
- package/src/components/ui/tabs.tsx +22 -28
- package/src/components/ui/textarea.tsx +8 -8
- package/src/components/ui/toggle-group.tsx +0 -2
- package/src/components/ui/toggle.tsx +13 -15
- package/src/components/ui/tooltip.tsx +30 -28
- package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +191 -0
- package/src/components/ui/transactions-income-expense-bar-chart.tsx +45 -38
- package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +191 -0
- package/src/lib/theme-provider.tsx +10 -0
- package/src/lib/typography.ts +9 -0
- package/src/lib/utils.ts +41 -3
- package/src/styles/globals.css +371 -124
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +27 -0
- package/dist/chunk-3EQP72AW.mjs +0 -58
- package/dist/chunk-K74JRTJR.mjs +0 -105
- package/dist/chunk-V7CNWJT3.mjs +0 -10
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Slider
|
|
3
|
+
} from "./chunk-Y6DWJSKZ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
ToggleGroup,
|
|
6
|
+
ToggleGroupItem
|
|
7
|
+
} from "./chunk-PMB3A7V3.mjs";
|
|
8
|
+
import {
|
|
9
|
+
Label
|
|
10
|
+
} from "./chunk-NSLMILBT.mjs";
|
|
11
|
+
import {
|
|
12
|
+
Input
|
|
13
|
+
} from "./chunk-GYMYRIZP.mjs";
|
|
14
|
+
import {
|
|
15
|
+
cn
|
|
16
|
+
} from "./chunk-VLQZANBF.mjs";
|
|
17
|
+
import {
|
|
18
|
+
__spreadProps,
|
|
19
|
+
__spreadValues
|
|
20
|
+
} from "./chunk-FWCSY2DS.mjs";
|
|
21
|
+
|
|
22
|
+
// src/components/ui/form-primitives.tsx
|
|
23
|
+
import * as React from "react";
|
|
24
|
+
import { Check, Search } from "lucide-react";
|
|
25
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
26
|
+
function parseCurrencyToNumber(raw) {
|
|
27
|
+
const cleaned = raw.replace(/[^0-9.]/g, "");
|
|
28
|
+
const n = parseFloat(cleaned);
|
|
29
|
+
return isNaN(n) ? 0 : n;
|
|
30
|
+
}
|
|
31
|
+
function formatNumberToCurrency(n) {
|
|
32
|
+
return "$" + Math.round(n).toLocaleString("en-AU");
|
|
33
|
+
}
|
|
34
|
+
function CurrencyInputWithSlider({
|
|
35
|
+
value: controlledValue,
|
|
36
|
+
defaultValue = 0,
|
|
37
|
+
min = 0,
|
|
38
|
+
max = 5e6,
|
|
39
|
+
step = 1e4,
|
|
40
|
+
disabled = false,
|
|
41
|
+
onValueChange,
|
|
42
|
+
className
|
|
43
|
+
}) {
|
|
44
|
+
const [internalValue, setInternalValue] = React.useState(defaultValue);
|
|
45
|
+
const numericValue = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
46
|
+
const [inputText, setInputText] = React.useState(
|
|
47
|
+
formatNumberToCurrency(numericValue)
|
|
48
|
+
);
|
|
49
|
+
const [isFocused, setIsFocused] = React.useState(false);
|
|
50
|
+
React.useEffect(() => {
|
|
51
|
+
if (!isFocused) {
|
|
52
|
+
setInputText(formatNumberToCurrency(numericValue));
|
|
53
|
+
}
|
|
54
|
+
}, [numericValue, isFocused]);
|
|
55
|
+
const commitValue = (n) => {
|
|
56
|
+
const clamped = Math.max(min, Math.min(max, n));
|
|
57
|
+
if (controlledValue === void 0) setInternalValue(clamped);
|
|
58
|
+
onValueChange == null ? void 0 : onValueChange(clamped);
|
|
59
|
+
setInputText(formatNumberToCurrency(clamped));
|
|
60
|
+
};
|
|
61
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-3", className), children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
Input,
|
|
64
|
+
{
|
|
65
|
+
type: "text",
|
|
66
|
+
value: isFocused ? inputText : formatNumberToCurrency(numericValue),
|
|
67
|
+
disabled,
|
|
68
|
+
onFocus: () => {
|
|
69
|
+
setIsFocused(true);
|
|
70
|
+
setInputText(formatNumberToCurrency(numericValue));
|
|
71
|
+
},
|
|
72
|
+
onChange: (e) => setInputText(e.target.value),
|
|
73
|
+
onBlur: () => {
|
|
74
|
+
setIsFocused(false);
|
|
75
|
+
commitValue(parseCurrencyToNumber(inputText));
|
|
76
|
+
},
|
|
77
|
+
onKeyDown: (e) => {
|
|
78
|
+
if (e.key === "Enter") {
|
|
79
|
+
e.target.blur();
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
className: "tabular-nums",
|
|
83
|
+
"aria-label": "Currency amount"
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
/* @__PURE__ */ jsx(
|
|
87
|
+
Slider,
|
|
88
|
+
{
|
|
89
|
+
value: numericValue,
|
|
90
|
+
min,
|
|
91
|
+
max,
|
|
92
|
+
step,
|
|
93
|
+
disabled,
|
|
94
|
+
onValueChange: (n) => {
|
|
95
|
+
if (controlledValue === void 0) setInternalValue(n);
|
|
96
|
+
onValueChange == null ? void 0 : onValueChange(n);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
] });
|
|
101
|
+
}
|
|
102
|
+
var CONCERN_LABELS = {
|
|
103
|
+
1: "Not important",
|
|
104
|
+
2: "Slightly important",
|
|
105
|
+
3: "Moderately important",
|
|
106
|
+
4: "Very important",
|
|
107
|
+
5: "Critical"
|
|
108
|
+
};
|
|
109
|
+
function ConcernScale({
|
|
110
|
+
value: controlledValue,
|
|
111
|
+
defaultValue = 0,
|
|
112
|
+
disabled = false,
|
|
113
|
+
steps = 5,
|
|
114
|
+
lowLabel = "Not important",
|
|
115
|
+
highLabel = "Critical",
|
|
116
|
+
onValueChange,
|
|
117
|
+
className
|
|
118
|
+
}) {
|
|
119
|
+
var _a;
|
|
120
|
+
const [internalValue, setInternalValue] = React.useState(defaultValue);
|
|
121
|
+
const selected = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
122
|
+
const handleValueChange = (val) => {
|
|
123
|
+
const n = val ? Number(val) : 0;
|
|
124
|
+
if (controlledValue === void 0) setInternalValue(n);
|
|
125
|
+
onValueChange == null ? void 0 : onValueChange(n);
|
|
126
|
+
};
|
|
127
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
|
|
128
|
+
/* @__PURE__ */ jsx(
|
|
129
|
+
ToggleGroup,
|
|
130
|
+
{
|
|
131
|
+
type: "single",
|
|
132
|
+
value: selected > 0 ? String(selected) : "",
|
|
133
|
+
onValueChange: handleValueChange,
|
|
134
|
+
variant: "outline",
|
|
135
|
+
size: "sm",
|
|
136
|
+
disabled,
|
|
137
|
+
className: "w-full",
|
|
138
|
+
children: Array.from({ length: steps }, (_, i) => i + 1).map((n) => {
|
|
139
|
+
var _a2;
|
|
140
|
+
return /* @__PURE__ */ jsx(
|
|
141
|
+
ToggleGroupItem,
|
|
142
|
+
{
|
|
143
|
+
value: String(n),
|
|
144
|
+
"aria-label": (_a2 = CONCERN_LABELS[n]) != null ? _a2 : String(n),
|
|
145
|
+
className: "flex-1",
|
|
146
|
+
children: n
|
|
147
|
+
},
|
|
148
|
+
n
|
|
149
|
+
);
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between text-[10px] text-muted-foreground", children: [
|
|
154
|
+
/* @__PURE__ */ jsx("span", { children: lowLabel }),
|
|
155
|
+
/* @__PURE__ */ jsx("span", { children: highLabel })
|
|
156
|
+
] }),
|
|
157
|
+
selected > 0 && /* @__PURE__ */ jsx("p", { className: "text-xs text-foreground", children: (_a = CONCERN_LABELS[selected]) != null ? _a : `Level ${selected}` })
|
|
158
|
+
] });
|
|
159
|
+
}
|
|
160
|
+
var DEFAULT_SUGGESTIONS = [
|
|
161
|
+
{
|
|
162
|
+
id: "1",
|
|
163
|
+
label: "12 Harbour View Terrace, Mosman NSW 2088",
|
|
164
|
+
suburb: "Mosman",
|
|
165
|
+
state: "NSW",
|
|
166
|
+
postcode: "2088"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: "2",
|
|
170
|
+
label: "5 Coastal Road, Manly NSW 2095",
|
|
171
|
+
suburb: "Manly",
|
|
172
|
+
state: "NSW",
|
|
173
|
+
postcode: "2095"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
id: "3",
|
|
177
|
+
label: "24 Collins Street, Melbourne VIC 3000",
|
|
178
|
+
suburb: "Melbourne",
|
|
179
|
+
state: "VIC",
|
|
180
|
+
postcode: "3000"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: "4",
|
|
184
|
+
label: "88 Pacific Highway, St Leonards NSW 2065",
|
|
185
|
+
suburb: "St Leonards",
|
|
186
|
+
state: "NSW",
|
|
187
|
+
postcode: "2065"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
id: "5",
|
|
191
|
+
label: "1 Queen Street, Brisbane QLD 4000",
|
|
192
|
+
suburb: "Brisbane",
|
|
193
|
+
state: "QLD",
|
|
194
|
+
postcode: "4000"
|
|
195
|
+
}
|
|
196
|
+
];
|
|
197
|
+
function AddressAutocomplete({
|
|
198
|
+
value: controlledValue,
|
|
199
|
+
placeholder = "Start typing an address\u2026",
|
|
200
|
+
suggestions = DEFAULT_SUGGESTIONS,
|
|
201
|
+
disabled = false,
|
|
202
|
+
onValueChange,
|
|
203
|
+
onSelect,
|
|
204
|
+
className
|
|
205
|
+
}) {
|
|
206
|
+
const [internalValue, setInternalValue] = React.useState("");
|
|
207
|
+
const inputValue = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
208
|
+
const [open, setOpen] = React.useState(false);
|
|
209
|
+
const [activeIndex, setActiveIndex] = React.useState(-1);
|
|
210
|
+
const containerRef = React.useRef(null);
|
|
211
|
+
const listRef = React.useRef(null);
|
|
212
|
+
const filtered = React.useMemo(() => {
|
|
213
|
+
if (!inputValue.trim()) return suggestions.slice(0, 5);
|
|
214
|
+
const q = inputValue.toLowerCase();
|
|
215
|
+
return suggestions.filter((s) => s.label.toLowerCase().includes(q)).slice(0, 5);
|
|
216
|
+
}, [inputValue, suggestions]);
|
|
217
|
+
const setValue = (v) => {
|
|
218
|
+
if (controlledValue === void 0) setInternalValue(v);
|
|
219
|
+
onValueChange == null ? void 0 : onValueChange(v);
|
|
220
|
+
};
|
|
221
|
+
const handleSelect = (opt) => {
|
|
222
|
+
setValue(opt.label);
|
|
223
|
+
onSelect == null ? void 0 : onSelect(opt);
|
|
224
|
+
setOpen(false);
|
|
225
|
+
setActiveIndex(-1);
|
|
226
|
+
};
|
|
227
|
+
const handleKeyDown = (e) => {
|
|
228
|
+
if (!open) return;
|
|
229
|
+
if (e.key === "ArrowDown") {
|
|
230
|
+
e.preventDefault();
|
|
231
|
+
setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));
|
|
232
|
+
} else if (e.key === "ArrowUp") {
|
|
233
|
+
e.preventDefault();
|
|
234
|
+
setActiveIndex((i) => Math.max(i - 1, -1));
|
|
235
|
+
} else if (e.key === "Enter" && activeIndex >= 0) {
|
|
236
|
+
e.preventDefault();
|
|
237
|
+
handleSelect(filtered[activeIndex]);
|
|
238
|
+
} else if (e.key === "Escape") {
|
|
239
|
+
setOpen(false);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
React.useEffect(() => {
|
|
243
|
+
const handler = (e) => {
|
|
244
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
245
|
+
setOpen(false);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
document.addEventListener("mousedown", handler);
|
|
249
|
+
return () => document.removeEventListener("mousedown", handler);
|
|
250
|
+
}, []);
|
|
251
|
+
return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: cn("relative", className), children: [
|
|
252
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
253
|
+
/* @__PURE__ */ jsx(Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground pointer-events-none" }),
|
|
254
|
+
/* @__PURE__ */ jsx(
|
|
255
|
+
Input,
|
|
256
|
+
{
|
|
257
|
+
type: "text",
|
|
258
|
+
value: inputValue,
|
|
259
|
+
placeholder,
|
|
260
|
+
disabled,
|
|
261
|
+
className: "pl-8",
|
|
262
|
+
onChange: (e) => {
|
|
263
|
+
setValue(e.target.value);
|
|
264
|
+
setOpen(true);
|
|
265
|
+
setActiveIndex(-1);
|
|
266
|
+
},
|
|
267
|
+
onFocus: () => setOpen(true),
|
|
268
|
+
onKeyDown: handleKeyDown,
|
|
269
|
+
"aria-autocomplete": "list",
|
|
270
|
+
"aria-expanded": open
|
|
271
|
+
}
|
|
272
|
+
)
|
|
273
|
+
] }),
|
|
274
|
+
open && filtered.length > 0 && /* @__PURE__ */ jsx(
|
|
275
|
+
"ul",
|
|
276
|
+
{
|
|
277
|
+
ref: listRef,
|
|
278
|
+
role: "listbox",
|
|
279
|
+
className: cn(
|
|
280
|
+
"absolute z-50 top-full left-0 right-0 mt-1",
|
|
281
|
+
"border border-border bg-popover shadow-md",
|
|
282
|
+
"max-h-48 overflow-y-auto py-1"
|
|
283
|
+
),
|
|
284
|
+
children: filtered.map((opt, idx) => /* @__PURE__ */ jsxs(
|
|
285
|
+
"li",
|
|
286
|
+
{
|
|
287
|
+
role: "option",
|
|
288
|
+
"aria-selected": idx === activeIndex,
|
|
289
|
+
onMouseEnter: () => setActiveIndex(idx),
|
|
290
|
+
onMouseDown: (e) => {
|
|
291
|
+
e.preventDefault();
|
|
292
|
+
handleSelect(opt);
|
|
293
|
+
},
|
|
294
|
+
className: cn(
|
|
295
|
+
"flex items-center gap-2 px-3 py-2 text-sm cursor-pointer",
|
|
296
|
+
idx === activeIndex ? "bg-accent text-accent-foreground" : "hover:bg-accent/50"
|
|
297
|
+
),
|
|
298
|
+
children: [
|
|
299
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: opt.label }),
|
|
300
|
+
idx === activeIndex && /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0 text-primary" })
|
|
301
|
+
]
|
|
302
|
+
},
|
|
303
|
+
opt.id
|
|
304
|
+
))
|
|
305
|
+
}
|
|
306
|
+
)
|
|
307
|
+
] });
|
|
308
|
+
}
|
|
309
|
+
var DEFAULT_OWNERS = [
|
|
310
|
+
{ id: "main", name: "Main Applicant", share: 50 },
|
|
311
|
+
{ id: "co", name: "Co-Applicant", share: 50 }
|
|
312
|
+
];
|
|
313
|
+
function OwnershipSplit({
|
|
314
|
+
owners: controlledOwners,
|
|
315
|
+
disabled = false,
|
|
316
|
+
onOwnersChange,
|
|
317
|
+
className
|
|
318
|
+
}) {
|
|
319
|
+
const [internalOwners, setInternalOwners] = React.useState(DEFAULT_OWNERS);
|
|
320
|
+
const owners = controlledOwners !== void 0 ? controlledOwners : internalOwners;
|
|
321
|
+
const setOwners = (updated) => {
|
|
322
|
+
if (controlledOwners === void 0) setInternalOwners(updated);
|
|
323
|
+
onOwnersChange == null ? void 0 : onOwnersChange(updated);
|
|
324
|
+
};
|
|
325
|
+
const handleSliderChange = (id, newShare) => {
|
|
326
|
+
if (owners.length !== 2) return;
|
|
327
|
+
const clamped = Math.max(0, Math.min(100, Math.round(newShare)));
|
|
328
|
+
const other = owners.find((o) => o.id !== id);
|
|
329
|
+
if (!other) return;
|
|
330
|
+
setOwners(
|
|
331
|
+
owners.map(
|
|
332
|
+
(o) => o.id === id ? __spreadProps(__spreadValues({}, o), { share: clamped }) : __spreadProps(__spreadValues({}, o), { share: 100 - clamped })
|
|
333
|
+
)
|
|
334
|
+
);
|
|
335
|
+
};
|
|
336
|
+
const handleInputChange = (id, raw) => {
|
|
337
|
+
const n = parseInt(raw.replace(/[^0-9]/g, ""), 10);
|
|
338
|
+
if (isNaN(n)) return;
|
|
339
|
+
handleSliderChange(id, n);
|
|
340
|
+
};
|
|
341
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex gap-4", className), children: owners.map((owner) => {
|
|
342
|
+
const pct = Math.max(0, Math.min(100, owner.share));
|
|
343
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 flex-1", children: [
|
|
344
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
345
|
+
/* @__PURE__ */ jsx(Label, { className: "text-xs font-medium", children: owner.name }),
|
|
346
|
+
/* @__PURE__ */ jsx(
|
|
347
|
+
Input,
|
|
348
|
+
{
|
|
349
|
+
type: "text",
|
|
350
|
+
value: `${pct}%`,
|
|
351
|
+
disabled,
|
|
352
|
+
className: "w-14 h-7 text-xs text-right tabular-nums px-2",
|
|
353
|
+
onChange: (e) => handleInputChange(owner.id, e.target.value),
|
|
354
|
+
onBlur: (e) => handleInputChange(owner.id, e.target.value)
|
|
355
|
+
}
|
|
356
|
+
)
|
|
357
|
+
] }),
|
|
358
|
+
/* @__PURE__ */ jsx(
|
|
359
|
+
Slider,
|
|
360
|
+
{
|
|
361
|
+
value: pct,
|
|
362
|
+
min: 0,
|
|
363
|
+
max: 100,
|
|
364
|
+
step: 1,
|
|
365
|
+
disabled,
|
|
366
|
+
onValueChange: (n) => handleSliderChange(owner.id, n)
|
|
367
|
+
}
|
|
368
|
+
)
|
|
369
|
+
] }, owner.id);
|
|
370
|
+
}) });
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export {
|
|
374
|
+
CurrencyInputWithSlider,
|
|
375
|
+
ConcernScale,
|
|
376
|
+
AddressAutocomplete,
|
|
377
|
+
OwnershipSplit
|
|
378
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useThemeVars
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FEZKMUCF.mjs";
|
|
4
4
|
import {
|
|
5
5
|
cn
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VLQZANBF.mjs";
|
|
7
7
|
import {
|
|
8
8
|
__objRest,
|
|
9
9
|
__spreadProps,
|
|
@@ -24,12 +24,7 @@ function DropdownMenuPortal(_a) {
|
|
|
24
24
|
}
|
|
25
25
|
function DropdownMenuTrigger(_a) {
|
|
26
26
|
var props = __objRest(_a, []);
|
|
27
|
-
return /* @__PURE__ */ jsx(
|
|
28
|
-
MenuPrimitive.Trigger,
|
|
29
|
-
__spreadValues({
|
|
30
|
-
"data-slot": "dropdown-menu-trigger"
|
|
31
|
-
}, props)
|
|
32
|
-
);
|
|
27
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Trigger, __spreadValues({ "data-slot": "dropdown-menu-trigger" }, props));
|
|
33
28
|
}
|
|
34
29
|
function DropdownMenuContent(_a) {
|
|
35
30
|
var _b = _a, {
|
|
@@ -72,7 +67,7 @@ function DropdownMenuItem(_a) {
|
|
|
72
67
|
MenuPrimitive.Item,
|
|
73
68
|
__spreadValues({
|
|
74
69
|
className: cn(
|
|
75
|
-
"relative flex cursor-default items-center gap-2 rounded-none px-2 py-1.5 text-
|
|
70
|
+
"relative flex cursor-default items-center gap-2 rounded-none px-2 py-1.5 text-body-small outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!",
|
|
76
71
|
className
|
|
77
72
|
),
|
|
78
73
|
"data-inset": inset,
|
|
@@ -96,7 +91,7 @@ function DropdownMenuCheckboxItem(_a) {
|
|
|
96
91
|
__spreadProps(__spreadValues({
|
|
97
92
|
checked,
|
|
98
93
|
className: cn(
|
|
99
|
-
"relative flex cursor-default items-center gap-2 rounded-none py-1.5 pr-2 pl-8 text-
|
|
94
|
+
"relative flex cursor-default items-center gap-2 rounded-none py-1.5 pr-2 pl-8 text-body-small outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 data-checked:bg-primary/10 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
100
95
|
className
|
|
101
96
|
),
|
|
102
97
|
"data-slot": "dropdown-menu-checkbox-item"
|
|
@@ -129,7 +124,7 @@ function DropdownMenuRadioItem(_a) {
|
|
|
129
124
|
MenuPrimitive.RadioItem,
|
|
130
125
|
__spreadProps(__spreadValues({
|
|
131
126
|
className: cn(
|
|
132
|
-
"relative flex cursor-default items-center gap-2 rounded-none py-1.5 pr-2 pl-8 text-
|
|
127
|
+
"relative flex cursor-default items-center gap-2 rounded-none py-1.5 pr-2 pl-8 text-body-small outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 data-checked:bg-primary/10 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
133
128
|
className
|
|
134
129
|
),
|
|
135
130
|
"data-slot": "dropdown-menu-radio-item"
|
|
@@ -152,10 +147,7 @@ function DropdownMenuLabel(_a) {
|
|
|
152
147
|
return /* @__PURE__ */ jsx(
|
|
153
148
|
MenuPrimitive.GroupLabel,
|
|
154
149
|
__spreadValues({
|
|
155
|
-
className: cn(
|
|
156
|
-
"px-2 py-1.5 text-sm font-medium data-inset:pl-8",
|
|
157
|
-
className
|
|
158
|
-
),
|
|
150
|
+
className: cn("px-2 py-1.5 text-label-medium data-inset:pl-8", className),
|
|
159
151
|
"data-inset": inset,
|
|
160
152
|
"data-slot": "dropdown-menu-label"
|
|
161
153
|
}, props)
|
|
@@ -185,7 +177,7 @@ function DropdownMenuShortcut(_a) {
|
|
|
185
177
|
"span",
|
|
186
178
|
__spreadValues({
|
|
187
179
|
className: cn(
|
|
188
|
-
"ml-auto text-
|
|
180
|
+
"ml-auto text-caption tracking-widest text-muted-foreground",
|
|
189
181
|
className
|
|
190
182
|
),
|
|
191
183
|
"data-slot": "dropdown-menu-shortcut"
|
|
@@ -210,7 +202,7 @@ function DropdownMenuSubTrigger(_a) {
|
|
|
210
202
|
MenuPrimitive.SubmenuTrigger,
|
|
211
203
|
__spreadProps(__spreadValues({
|
|
212
204
|
className: cn(
|
|
213
|
-
"flex cursor-default items-center gap-2 rounded-none px-2 py-1.5 text-
|
|
205
|
+
"flex cursor-default items-center gap-2 rounded-none px-2 py-1.5 text-body-small outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
214
206
|
className
|
|
215
207
|
),
|
|
216
208
|
"data-inset": inset,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cn
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VLQZANBF.mjs";
|
|
4
4
|
import {
|
|
5
5
|
__objRest,
|
|
6
6
|
__spreadProps,
|
|
@@ -31,7 +31,7 @@ function ComboboxTrigger(_a) {
|
|
|
31
31
|
"data-slot": "combobox-trigger",
|
|
32
32
|
"data-size": size,
|
|
33
33
|
className: cn(
|
|
34
|
-
"flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-small whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 data-[popup-open]:border-primary data-[popup-open]:ring-[3px] data-[popup-open]:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=combobox-value]:line-clamp-1 *:data-[slot=combobox-value]:flex *:data-[slot=combobox-value]:items-center *:data-[slot=combobox-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
34
|
+
"flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-small whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 data-[popup-open]:border-primary data-[popup-open]:ring-[3px] data-[popup-open]:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:font-normal data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=combobox-value]:line-clamp-1 *:data-[slot=combobox-value]:flex *:data-[slot=combobox-value]:items-center *:data-[slot=combobox-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
35
35
|
className
|
|
36
36
|
)
|
|
37
37
|
}, props), {
|
|
@@ -47,24 +47,27 @@ function ComboboxValue(_a) {
|
|
|
47
47
|
return /* @__PURE__ */ jsx(ComboboxPrimitive.Value, __spreadValues({ "data-slot": "combobox-value" }, props));
|
|
48
48
|
}
|
|
49
49
|
function ComboboxInput(_a) {
|
|
50
|
-
var _b = _a, {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
51
|
+
return /* @__PURE__ */ jsxs(
|
|
52
|
+
"div",
|
|
53
|
+
{
|
|
54
|
+
"data-slot": "combobox-input-wrapper",
|
|
55
|
+
className: "flex items-center gap-2 border-b border-border px-3",
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
ComboboxPrimitive.Input,
|
|
60
|
+
__spreadValues({
|
|
61
|
+
"data-slot": "combobox-input",
|
|
62
|
+
className: cn(
|
|
63
|
+
"h-9 w-full min-w-0 bg-transparent py-1 text-body-small outline-none placeholder:font-normal placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
64
|
+
className
|
|
65
|
+
)
|
|
66
|
+
}, props)
|
|
64
67
|
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
);
|
|
68
71
|
}
|
|
69
72
|
function ComboboxContent(_a) {
|
|
70
73
|
var _b = _a, {
|
|
@@ -88,11 +91,7 @@ function ComboboxContent(_a) {
|
|
|
88
91
|
) }) });
|
|
89
92
|
}
|
|
90
93
|
function ComboboxList(_a) {
|
|
91
|
-
var _b = _a, {
|
|
92
|
-
className
|
|
93
|
-
} = _b, props = __objRest(_b, [
|
|
94
|
-
"className"
|
|
95
|
-
]);
|
|
94
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
96
95
|
return /* @__PURE__ */ jsx(
|
|
97
96
|
ComboboxPrimitive.List,
|
|
98
97
|
__spreadValues({
|
|
@@ -105,19 +104,13 @@ function ComboboxList(_a) {
|
|
|
105
104
|
);
|
|
106
105
|
}
|
|
107
106
|
function ComboboxItem(_a) {
|
|
108
|
-
var _b = _a, {
|
|
109
|
-
className,
|
|
110
|
-
children
|
|
111
|
-
} = _b, props = __objRest(_b, [
|
|
112
|
-
"className",
|
|
113
|
-
"children"
|
|
114
|
-
]);
|
|
107
|
+
var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
|
|
115
108
|
return /* @__PURE__ */ jsxs(
|
|
116
109
|
ComboboxPrimitive.Item,
|
|
117
110
|
__spreadProps(__spreadValues({
|
|
118
111
|
"data-slot": "combobox-item",
|
|
119
112
|
className: cn(
|
|
120
|
-
"relative flex w-full cursor-default items-center gap-2
|
|
113
|
+
"relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-body-small outline-hidden select-none data-highlighted:bg-primary/5 data-highlighted:text-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
121
114
|
className
|
|
122
115
|
)
|
|
123
116
|
}, props), {
|
|
@@ -136,16 +129,15 @@ function ComboboxItem(_a) {
|
|
|
136
129
|
);
|
|
137
130
|
}
|
|
138
131
|
function ComboboxEmpty(_a) {
|
|
139
|
-
var _b = _a, {
|
|
140
|
-
className
|
|
141
|
-
} = _b, props = __objRest(_b, [
|
|
142
|
-
"className"
|
|
143
|
-
]);
|
|
132
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
144
133
|
return /* @__PURE__ */ jsx(
|
|
145
134
|
ComboboxPrimitive.Empty,
|
|
146
135
|
__spreadValues({
|
|
147
136
|
"data-slot": "combobox-empty",
|
|
148
|
-
className:
|
|
137
|
+
className: cn(
|
|
138
|
+
"text-body-small py-6 text-center text-muted-foreground empty:hidden",
|
|
139
|
+
className
|
|
140
|
+
)
|
|
149
141
|
}, props)
|
|
150
142
|
);
|
|
151
143
|
}
|
|
@@ -154,25 +146,20 @@ function ComboboxGroup(_a) {
|
|
|
154
146
|
return /* @__PURE__ */ jsx(ComboboxPrimitive.Group, __spreadValues({ "data-slot": "combobox-group" }, props));
|
|
155
147
|
}
|
|
156
148
|
function ComboboxGroupLabel(_a) {
|
|
157
|
-
var _b = _a, {
|
|
158
|
-
className
|
|
159
|
-
} = _b, props = __objRest(_b, [
|
|
160
|
-
"className"
|
|
161
|
-
]);
|
|
149
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
162
150
|
return /* @__PURE__ */ jsx(
|
|
163
151
|
ComboboxPrimitive.GroupLabel,
|
|
164
152
|
__spreadValues({
|
|
165
153
|
"data-slot": "combobox-group-label",
|
|
166
|
-
className:
|
|
154
|
+
className: cn(
|
|
155
|
+
"text-label-small px-2 py-1.5 uppercase text-muted-foreground",
|
|
156
|
+
className
|
|
157
|
+
)
|
|
167
158
|
}, props)
|
|
168
159
|
);
|
|
169
160
|
}
|
|
170
161
|
function ComboboxSeparator(_a) {
|
|
171
|
-
var _b = _a, {
|
|
172
|
-
className
|
|
173
|
-
} = _b, props = __objRest(_b, [
|
|
174
|
-
"className"
|
|
175
|
-
]);
|
|
162
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
176
163
|
return /* @__PURE__ */ jsx(
|
|
177
164
|
"div",
|
|
178
165
|
__spreadValues({
|
|
@@ -43,7 +43,16 @@ function ThemeProvider({
|
|
|
43
43
|
"--font-family-sans": fontFamily,
|
|
44
44
|
// Legacy compat (used by existing WealthX apps)
|
|
45
45
|
"--theme-primary": primary,
|
|
46
|
-
"--theme-secondary": secondary
|
|
46
|
+
"--theme-secondary": secondary,
|
|
47
|
+
// Pipeline stage palette — 5 opacity levels of primary, tenant-adaptive.
|
|
48
|
+
// Defined here (not :root) so they react to tenant theme switches.
|
|
49
|
+
"--color-stage-1": primaryOklch,
|
|
50
|
+
"--color-stage-2": `color-mix(in oklch, ${primaryOklch} 80%, transparent)`,
|
|
51
|
+
"--color-stage-3": `color-mix(in oklch, ${primaryOklch} 60%, transparent)`,
|
|
52
|
+
"--color-stage-4": `color-mix(in oklch, ${primaryOklch} 40%, transparent)`,
|
|
53
|
+
"--color-stage-5": `color-mix(in oklch, ${primaryOklch} 20%, transparent)`,
|
|
54
|
+
// WCAG-computed contrast text for any primary-shaded background
|
|
55
|
+
"--color-stage-fg": primaryFgOklch
|
|
47
56
|
};
|
|
48
57
|
}, [primary, secondary, fontFamily, injectCssVariables]);
|
|
49
58
|
return /* @__PURE__ */ jsx(ThemeVarsContext.Provider, { value: vars, children: /* @__PURE__ */ jsx("div", { "data-wealthx-theme": true, style: vars, children }) });
|