@wealthx/shadcn 1.3.1 → 1.3.3
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 +259 -223
- package/CHANGELOG.md +12 -0
- package/dist/{chunk-2UM72RJ7.mjs → chunk-2D3HQPFN.mjs} +12 -10
- package/dist/chunk-2EM2FRU6.mjs +613 -0
- package/dist/{chunk-FH6QVUVZ.mjs → chunk-2GIYVERS.mjs} +2 -2
- package/dist/chunk-2P7HP7LR.mjs +68 -0
- package/dist/{chunk-HISNT2MG.mjs → chunk-37AE3OM5.mjs} +5 -5
- package/dist/{chunk-HBZLGDIN.mjs → chunk-3ERBUVHC.mjs} +169 -110
- package/dist/{chunk-C7CQJNMR.mjs → chunk-3VDET466.mjs} +2 -2
- package/dist/{chunk-462HMNO4.mjs → chunk-4MM7LHM5.mjs} +2 -2
- package/dist/{chunk-QMY3AZJH.mjs → chunk-4Z66LMIQ.mjs} +2 -2
- package/dist/{chunk-U5X52X37.mjs → chunk-57ZXILTS.mjs} +6 -6
- package/dist/{chunk-3OYFOX3X.mjs → chunk-5VOTTIXF.mjs} +2 -2
- package/dist/{chunk-LBMRIB3G.mjs → chunk-6AJUS7VX.mjs} +1 -1
- package/dist/{chunk-OODBHKG7.mjs → chunk-6HIOM2HL.mjs} +7 -4
- package/dist/{chunk-BDYZCBRT.mjs → chunk-6QAFGZC2.mjs} +2 -2
- package/dist/{chunk-U4NDAF2P.mjs → chunk-6TX73WG7.mjs} +1 -1
- package/dist/{chunk-GD4BJDJR.mjs → chunk-7BTFGCFC.mjs} +4 -4
- package/dist/{chunk-FAKPBKLT.mjs → chunk-7GWRPXHD.mjs} +4 -4
- package/dist/{chunk-NMOI6CQD.mjs → chunk-7YI3HEBH.mjs} +5 -5
- package/dist/{chunk-T4BJLT57.mjs → chunk-AE7MASLF.mjs} +5 -5
- package/dist/{chunk-VLQZANBF.mjs → chunk-AFML43VJ.mjs} +6 -1
- package/dist/chunk-BBXSNDS3.mjs +260 -0
- package/dist/chunk-BOW7U26Y.mjs +203 -0
- package/dist/{chunk-34NWQURD.mjs → chunk-BS75ICOO.mjs} +2 -2
- package/dist/chunk-D2NSIIXG.mjs +394 -0
- package/dist/{chunk-3GF7OVTP.mjs → chunk-DGNHGNYH.mjs} +2 -2
- package/dist/{chunk-VLARHE5V.mjs → chunk-DMXYRCHM.mjs} +6 -6
- package/dist/{chunk-OGOYQ7BG.mjs → chunk-DQB4EPIS.mjs} +1 -1
- package/dist/{chunk-MIZQHHUO.mjs → chunk-FL6DZFJK.mjs} +106 -38
- package/dist/{chunk-I3RZS7V2.mjs → chunk-FLL633WS.mjs} +19 -33
- package/dist/{chunk-PBL4OQV2.mjs → chunk-FTPBQVQ6.mjs} +4 -4
- package/dist/chunk-FYPSTTEJ.mjs +169 -0
- package/dist/{chunk-6O6KD7CE.mjs → chunk-G27TSQLQ.mjs} +6 -6
- package/dist/{chunk-66MI7Q4B.mjs → chunk-GT3RU6GA.mjs} +2 -2
- package/dist/{chunk-D6ID6M4V.mjs → chunk-GTAVSBDO.mjs} +2 -2
- package/dist/{chunk-24FUO7TD.mjs → chunk-H6NQTIF4.mjs} +2 -2
- package/dist/{chunk-7DHU4VGG.mjs → chunk-HK4HUQTV.mjs} +2 -2
- package/dist/chunk-I4KVSZCH.mjs +101 -0
- package/dist/{chunk-RGVKLTLH.mjs → chunk-IKXYTCSB.mjs} +2 -2
- package/dist/{chunk-Y6DWJSKZ.mjs → chunk-ISUA7DSB.mjs} +1 -1
- package/dist/{chunk-2A5RRQGG.mjs → chunk-JD3YWRNP.mjs} +10 -14
- package/dist/{chunk-J5UICVJS.mjs → chunk-JPGL36WQ.mjs} +2 -2
- package/dist/{chunk-7XJHLGUV.mjs → chunk-JTK6VJXY.mjs} +2 -2
- package/dist/{chunk-7YAU5CY6.mjs → chunk-JVMXMFBB.mjs} +2 -2
- package/dist/{chunk-IAE3F7DR.mjs → chunk-JZY6TNIS.mjs} +21 -21
- package/dist/{chunk-K5A5L6T2.mjs → chunk-K4KOD3KR.mjs} +12 -12
- package/dist/{chunk-MBON7YRJ.mjs → chunk-K5QV4TT6.mjs} +3 -3
- package/dist/{chunk-IHMFS7NZ.mjs → chunk-K5VHK7CM.mjs} +21 -21
- package/dist/{chunk-RJI6GKVF.mjs → chunk-KCWNDYPZ.mjs} +5 -5
- package/dist/{chunk-UFYSFDER.mjs → chunk-KFH36NKF.mjs} +1 -1
- package/dist/{chunk-EBXQWIYG.mjs → chunk-KLTACJ2G.mjs} +5 -5
- package/dist/{chunk-3TTACBDP.mjs → chunk-KWD6GANL.mjs} +4 -4
- package/dist/{chunk-IOJRDS6V.mjs → chunk-L4NSRQ3T.mjs} +218 -147
- package/dist/{chunk-GYMYRIZP.mjs → chunk-LBTHZSBT.mjs} +2 -2
- package/dist/{chunk-AMQZRHEZ.mjs → chunk-LQULK2E3.mjs} +5 -5
- package/dist/{chunk-YJG55G2H.mjs → chunk-LR6LHDP3.mjs} +5 -5
- package/dist/{chunk-7PV3IWCN.mjs → chunk-M4VYX2PV.mjs} +19 -1
- package/dist/{chunk-P76HMUI6.mjs → chunk-MDUKXXIL.mjs} +2 -2
- package/dist/{chunk-LV35NGVG.mjs → chunk-N6Q5IPKT.mjs} +9 -9
- package/dist/{chunk-DOEO3CDL.mjs → chunk-NB3ZL36B.mjs} +1 -1
- package/dist/{chunk-XREGSKX3.mjs → chunk-NOOEKOWY.mjs} +5 -5
- package/dist/{chunk-NL3ZO62D.mjs → chunk-NT4FX27K.mjs} +1 -1
- package/dist/{chunk-QZ4RE6NA.mjs → chunk-NTYQWVLI.mjs} +6 -6
- package/dist/{chunk-ERGGHC2V.mjs → chunk-OEOOYMC2.mjs} +2 -2
- package/dist/{chunk-4GAWMKMI.mjs → chunk-OIKBW2QD.mjs} +291 -54
- package/dist/{chunk-DUJTAXMH.mjs → chunk-OKTJFDPN.mjs} +6 -6
- package/dist/chunk-OLKMCXAR.mjs +1219 -0
- package/dist/{chunk-EI5F6FMT.mjs → chunk-OWFQSXVD.mjs} +3 -3
- package/dist/{chunk-6DZEXFNB.mjs → chunk-P2N2PEFY.mjs} +3 -3
- package/dist/{chunk-NSLMILBT.mjs → chunk-P7CEBZM6.mjs} +2 -2
- package/dist/{chunk-7S5AESZO.mjs → chunk-PNRUH7JY.mjs} +6 -6
- package/dist/{chunk-ZU4NV6RG.mjs → chunk-PNSYFE3K.mjs} +2 -2
- package/dist/{chunk-JKGDCQTZ.mjs → chunk-QTRSCVQ3.mjs} +5 -5
- package/dist/{chunk-ABFDMHOR.mjs → chunk-QX7IFQSF.mjs} +5 -5
- package/dist/{chunk-CFMQP5QS.mjs → chunk-QXKGOMUX.mjs} +6 -6
- package/dist/{chunk-NQPOYKAQ.mjs → chunk-R2ON6CAN.mjs} +2 -2
- package/dist/{chunk-DBHJ5KC3.mjs → chunk-R4HCRDU5.mjs} +1 -1
- package/dist/{chunk-EWRB4PAD.mjs → chunk-RCAOCHWA.mjs} +14 -14
- package/dist/{chunk-EFRENWEJ.mjs → chunk-RSUIPKGX.mjs} +2 -2
- package/dist/{chunk-DGHAXJBN.mjs → chunk-S2FKV4M5.mjs} +5 -5
- package/dist/{chunk-RGU7HOEC.mjs → chunk-SET2ANTY.mjs} +5 -7
- package/dist/chunk-SFH2NJEJ.mjs +47 -0
- package/dist/{chunk-6AW4KJHE.mjs → chunk-SIVYAI3M.mjs} +12 -12
- package/dist/{chunk-5FQIKDKP.mjs → chunk-THVO2N47.mjs} +8 -8
- package/dist/{chunk-JMHR3YGZ.mjs → chunk-TLAWKTSA.mjs} +3 -3
- package/dist/{chunk-HVY6KCCF.mjs → chunk-TOWTPLRC.mjs} +68 -72
- package/dist/{chunk-6JQFUE5I.mjs → chunk-UALR6JGV.mjs} +2 -2
- package/dist/{chunk-MLNEWRWV.mjs → chunk-UJZ4UHWI.mjs} +10 -15
- package/dist/{chunk-MARPPFOJ.mjs → chunk-UNACI2YK.mjs} +2 -2
- package/dist/{chunk-3NCUZIFP.mjs → chunk-V6XGXYCJ.mjs} +7 -7
- package/dist/chunk-VB5M6OZQ.mjs +57 -0
- package/dist/{chunk-5IS7G74I.mjs → chunk-VY5NEUP7.mjs} +6 -6
- package/dist/{chunk-JHJHG4GO.mjs → chunk-WE4YKBDE.mjs} +2 -2
- package/dist/{chunk-BKNFWEH2.mjs → chunk-WL6WVV47.mjs} +3 -3
- package/dist/{chunk-FWCSY2DS.mjs → chunk-WNQUEZJF.mjs} +22 -1
- package/dist/{chunk-2Y7YJKPE.mjs → chunk-WZ6UJCBL.mjs} +1 -1
- package/dist/{chunk-UMTOX62O.mjs → chunk-XYPW2XA5.mjs} +13 -10
- package/dist/chunk-Y2MTAVAK.mjs +34 -0
- package/dist/{chunk-6CR5N2JW.mjs → chunk-YCWLFG27.mjs} +6 -6
- package/dist/{chunk-PU4YZQXV.mjs → chunk-YE67AALL.mjs} +12 -12
- package/dist/{chunk-M3FV7LOK.mjs → chunk-YEWNFK5S.mjs} +6 -1
- package/dist/{chunk-R3VSPKNP.mjs → chunk-YIZHS72Z.mjs} +11 -12
- package/dist/{chunk-7PYJD5JI.mjs → chunk-ZEDMKQK2.mjs} +2 -2
- package/dist/{chunk-N2PT566P.mjs → chunk-ZFCDYW6N.mjs} +4 -4
- package/dist/chunk-ZGQIVGIN.mjs +57 -0
- package/dist/{chunk-Q2BGOAMG.mjs → chunk-ZKWXDQDG.mjs} +4 -4
- package/dist/{chunk-GHC7LLUX.mjs → chunk-ZOWL2L5J.mjs} +5 -5
- package/dist/components/ui/accordion.mjs +3 -3
- package/dist/components/ui/add-column-modal.js +2 -2
- package/dist/components/ui/add-column-modal.mjs +10 -10
- package/dist/components/ui/add-lead-modal.js +424 -82
- package/dist/components/ui/add-lead-modal.mjs +12 -9
- package/dist/components/ui/advisor-card.js +2 -2
- package/dist/components/ui/advisor-card.mjs +8 -8
- package/dist/components/ui/ai-assistant-drawer.js +2 -2
- package/dist/components/ui/ai-assistant-drawer.mjs +9 -9
- package/dist/components/ui/ai-builder.js +958 -0
- package/dist/components/ui/ai-builder.mjs +25 -0
- package/dist/components/ui/ai-conversations.js +2045 -0
- package/dist/components/ui/ai-conversations.mjs +41 -0
- package/dist/components/ui/alert-dialog.js +2 -2
- package/dist/components/ui/alert-dialog.mjs +5 -5
- package/dist/components/ui/alert.mjs +3 -3
- package/dist/components/ui/appointment-action-dialogs.js +19 -3
- package/dist/components/ui/appointment-action-dialogs.mjs +15 -14
- package/dist/components/ui/appointment-availability-settings.js +181 -111
- package/dist/components/ui/appointment-availability-settings.mjs +20 -18
- package/dist/components/ui/appointment-book-dialog.js +113 -24
- package/dist/components/ui/appointment-book-dialog.mjs +21 -20
- package/dist/components/ui/appointment-calendar-view.js +19 -3
- package/dist/components/ui/appointment-calendar-view.mjs +10 -9
- package/dist/components/ui/appointment-detail-sheet.js +19 -3
- package/dist/components/ui/appointment-detail-sheet.mjs +18 -17
- package/dist/components/ui/appointment-gmail-connect.js +49 -89
- package/dist/components/ui/appointment-gmail-connect.mjs +8 -9
- package/dist/components/ui/appointment-mini-card.js +2 -2
- package/dist/components/ui/appointment-mini-card.mjs +6 -6
- package/dist/components/ui/appointment-time-slot-picker.mjs +6 -6
- package/dist/components/ui/appointment-upcoming-card.js +19 -3
- package/dist/components/ui/appointment-upcoming-card.mjs +15 -14
- package/dist/components/ui/auth-logo.js +95 -0
- package/dist/components/ui/auth-logo.mjs +8 -0
- package/dist/components/ui/auth-page-layout.js +108 -0
- package/dist/components/ui/auth-page-layout.mjs +8 -0
- package/dist/components/ui/avatar.mjs +3 -3
- package/dist/components/ui/backoffice-alert-history-chart.js +2 -2
- package/dist/components/ui/backoffice-alert-history-chart.mjs +9 -9
- package/dist/components/ui/backoffice-alerts-chart.js +2 -2
- package/dist/components/ui/backoffice-alerts-chart.mjs +11 -11
- package/dist/components/ui/backoffice-connections-chart.js +2 -2
- package/dist/components/ui/backoffice-connections-chart.mjs +11 -11
- package/dist/components/ui/backoffice-contact-history-chart.js +2 -2
- package/dist/components/ui/backoffice-contact-history-chart.mjs +9 -9
- package/dist/components/ui/badge.mjs +4 -4
- package/dist/components/ui/borrowing-capacity-line-chart.js +145 -132
- package/dist/components/ui/borrowing-capacity-line-chart.mjs +9 -9
- package/dist/components/ui/button.js +2 -2
- package/dist/components/ui/button.mjs +4 -4
- package/dist/components/ui/calendar.js +17 -3
- package/dist/components/ui/calendar.mjs +6 -5
- package/dist/components/ui/card.mjs +3 -3
- package/dist/components/ui/cash-balance-line-chart.js +157 -152
- package/dist/components/ui/cash-balance-line-chart.mjs +9 -9
- package/dist/components/ui/cashflow-bar-chart.js +2 -2
- package/dist/components/ui/cashflow-bar-chart.mjs +9 -9
- package/dist/components/ui/chat-widget-primitives.js +573 -0
- package/dist/components/ui/chat-widget-primitives.mjs +21 -0
- package/dist/components/ui/chat-widget.js +1268 -0
- package/dist/components/ui/chat-widget.mjs +29 -0
- package/dist/components/ui/checkbox.mjs +3 -3
- package/dist/components/ui/chip.js +2 -2
- package/dist/components/ui/chip.mjs +6 -6
- package/dist/components/ui/color-picker.js +2 -2
- package/dist/components/ui/color-picker.mjs +7 -7
- package/dist/components/ui/combobox.mjs +3 -3
- package/dist/components/ui/data-table.js +2 -2
- package/dist/components/ui/data-table.mjs +12 -12
- package/dist/components/ui/date-picker.js +22 -6
- package/dist/components/ui/date-picker.mjs +9 -8
- package/dist/components/ui/dialog.js +2 -2
- package/dist/components/ui/dialog.mjs +5 -5
- package/dist/components/ui/document-checklist-template.js +630 -0
- package/dist/components/ui/document-checklist-template.mjs +15 -0
- package/dist/components/ui/drawer.js +2 -2
- package/dist/components/ui/drawer.mjs +3 -3
- package/dist/components/ui/dropdown-menu.mjs +3 -3
- package/dist/components/ui/empty.mjs +3 -3
- package/dist/components/ui/expense-bar-chart.js +2 -2
- package/dist/components/ui/expense-bar-chart.mjs +9 -9
- package/dist/components/ui/field.mjs +5 -5
- package/dist/components/ui/financial-cards.js +431 -291
- package/dist/components/ui/financial-cards.mjs +10 -9
- package/dist/components/ui/financial-drawers.js +4 -4
- package/dist/components/ui/financial-drawers.mjs +8 -8
- package/dist/components/ui/financial-primitives.mjs +3 -3
- package/dist/components/ui/financial-sections.js +8 -9
- package/dist/components/ui/financial-sections.mjs +12 -12
- package/dist/components/ui/form-primitives.mjs +8 -8
- package/dist/components/ui/income-bar-chart.js +2 -2
- package/dist/components/ui/income-bar-chart.mjs +9 -9
- package/dist/components/ui/input-group.js +2 -2
- package/dist/components/ui/input-group.mjs +7 -7
- package/dist/components/ui/input-otp.mjs +3 -3
- package/dist/components/ui/input.mjs +3 -3
- package/dist/components/ui/kanban-column.js +19 -23
- package/dist/components/ui/kanban-column.mjs +14 -14
- package/dist/components/ui/label.mjs +3 -3
- package/dist/components/ui/onboarding-layout.js +476 -0
- package/dist/components/ui/onboarding-layout.mjs +11 -0
- package/dist/components/ui/opportunity-card.js +2 -2
- package/dist/components/ui/opportunity-card.mjs +12 -12
- package/dist/components/ui/opportunity-edit-modals.js +22 -6
- package/dist/components/ui/opportunity-edit-modals.mjs +21 -20
- package/dist/components/ui/opportunity-summary-tab.js +991 -674
- package/dist/components/ui/opportunity-summary-tab.mjs +26 -26
- package/dist/components/ui/page-header.mjs +3 -3
- package/dist/components/ui/page-top-bar.mjs +3 -3
- package/dist/components/ui/pagination.js +2 -2
- package/dist/components/ui/pagination.mjs +6 -6
- package/dist/components/ui/password-strength-tooltip.js +197 -0
- package/dist/components/ui/password-strength-tooltip.mjs +11 -0
- package/dist/components/ui/pipeline-alerts.mjs +3 -3
- package/dist/components/ui/pipeline-board.js +19 -23
- package/dist/components/ui/pipeline-board.mjs +18 -18
- package/dist/components/ui/pipeline-chart.js +12 -6
- package/dist/components/ui/pipeline-chart.mjs +4 -3
- package/dist/components/ui/pipeline-dialogs.js +28 -12
- package/dist/components/ui/pipeline-dialogs.mjs +14 -13
- package/dist/components/ui/pipeline-primitives.mjs +6 -6
- package/dist/components/ui/popover.mjs +3 -3
- package/dist/components/ui/progress.mjs +3 -3
- package/dist/components/ui/property-cashflow-doughnut-chart.js +2 -2
- package/dist/components/ui/property-cashflow-doughnut-chart.mjs +9 -9
- package/dist/components/ui/property-debt-equity-doughnut-chart.js +2 -2
- package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +9 -9
- package/dist/components/ui/property-mobile-estimate-line-chart.js +2 -2
- package/dist/components/ui/property-mobile-estimate-line-chart.mjs +9 -9
- package/dist/components/ui/radio-group.mjs +3 -3
- package/dist/components/ui/select.mjs +3 -3
- package/dist/components/ui/separator.mjs +3 -3
- package/dist/components/ui/sheet.mjs +3 -3
- package/dist/components/ui/sidebar-nav.js +7 -9
- package/dist/components/ui/sidebar-nav.mjs +7 -7
- package/dist/components/ui/skeleton.mjs +3 -3
- package/dist/components/ui/slider.mjs +3 -3
- package/dist/components/ui/sonner.mjs +2 -2
- package/dist/components/ui/spinner.mjs +3 -3
- package/dist/components/ui/stage-timeline.mjs +10 -10
- package/dist/components/ui/stepper.mjs +3 -3
- package/dist/components/ui/switch.mjs +3 -3
- package/dist/components/ui/table.mjs +3 -3
- package/dist/components/ui/tabs.mjs +3 -3
- package/dist/components/ui/textarea.mjs +3 -3
- package/dist/components/ui/toggle-group.mjs +4 -4
- package/dist/components/ui/toggle.mjs +3 -3
- package/dist/components/ui/tooltip.mjs +3 -3
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +2 -2
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +9 -9
- package/dist/components/ui/transactions-income-expense-bar-chart.js +2 -2
- package/dist/components/ui/transactions-income-expense-bar-chart.mjs +9 -9
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +2 -2
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +9 -9
- package/dist/components/ui/two-fa-setup-form.js +612 -0
- package/dist/components/ui/two-fa-setup-form.mjs +16 -0
- package/dist/components/ui/upload-card.js +187 -0
- package/dist/components/ui/upload-card.mjs +10 -0
- package/dist/components/ui/video-background.js +118 -0
- package/dist/components/ui/video-background.mjs +8 -0
- package/dist/index.js +12765 -9400
- package/dist/index.mjs +341 -245
- package/dist/lib/colors.mjs +1 -1
- package/dist/lib/theme-provider.mjs +1 -1
- package/dist/lib/typography.mjs +2 -2
- package/dist/lib/utils.js +8 -2
- package/dist/lib/utils.mjs +6 -4
- package/dist/styles.css +1 -1
- package/package.json +61 -1
- package/src/components/index.tsx +126 -1
- package/src/components/ui/add-lead-modal.tsx +101 -142
- package/src/components/ui/ai-builder.tsx +560 -0
- package/src/components/ui/ai-conversations.tsx +1690 -0
- package/src/components/ui/appointment-availability-settings.tsx +152 -101
- package/src/components/ui/appointment-book-dialog.tsx +138 -24
- package/src/components/ui/appointment-calendar-view.tsx +2 -3
- package/src/components/ui/appointment-gmail-connect.tsx +23 -42
- package/src/components/ui/auth-logo.tsx +50 -0
- package/src/components/ui/auth-page-layout.tsx +59 -0
- package/src/components/ui/borrowing-capacity-line-chart.tsx +10 -8
- package/src/components/ui/button.tsx +2 -2
- package/src/components/ui/calendar.tsx +2 -1
- package/src/components/ui/cash-balance-line-chart.tsx +10 -14
- package/src/components/ui/chart-shared.tsx +10 -0
- package/src/components/ui/chat-widget-primitives.tsx +336 -0
- package/src/components/ui/chat-widget.tsx +822 -0
- package/src/components/ui/document-checklist-template.tsx +264 -0
- package/src/components/ui/drawer.tsx +2 -2
- package/src/components/ui/financial-cards.tsx +176 -78
- package/src/components/ui/financial-drawers.tsx +2 -2
- package/src/components/ui/financial-sections.tsx +1 -1
- package/src/components/ui/kanban-column.tsx +2 -5
- package/src/components/ui/onboarding-layout.tsx +109 -0
- package/src/components/ui/opportunity-summary-tab.tsx +469 -142
- package/src/components/ui/password-strength-tooltip.tsx +70 -0
- package/src/components/ui/pipeline-chart.tsx +2 -6
- package/src/components/ui/sidebar-nav.tsx +2 -15
- package/src/components/ui/two-fa-setup-form.tsx +229 -0
- package/src/components/ui/upload-card.tsx +98 -0
- package/src/components/ui/video-background.tsx +55 -0
- package/src/lib/format-date.ts +26 -0
- package/src/lib/utils.ts +11 -0
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +13 -0
|
@@ -62,13 +62,12 @@ __export(opportunity_summary_tab_exports, {
|
|
|
62
62
|
OpportunitySummaryTab: () => OpportunitySummaryTab
|
|
63
63
|
});
|
|
64
64
|
module.exports = __toCommonJS(opportunity_summary_tab_exports);
|
|
65
|
+
var React10 = __toESM(require("react"));
|
|
65
66
|
var import_react4 = require("react");
|
|
66
67
|
var import_lucide_react12 = require("lucide-react");
|
|
67
68
|
|
|
68
|
-
// src/components/ui/
|
|
69
|
-
var import_react = require("react");
|
|
69
|
+
// src/components/ui/badge.tsx
|
|
70
70
|
var import_class_variance_authority = require("class-variance-authority");
|
|
71
|
-
var import_lucide_react = require("lucide-react");
|
|
72
71
|
|
|
73
72
|
// src/lib/utils.ts
|
|
74
73
|
var import_clsx = require("clsx");
|
|
@@ -156,9 +155,213 @@ var Slot = React.forwardRef(
|
|
|
156
155
|
);
|
|
157
156
|
Slot.displayName = "Slot";
|
|
158
157
|
|
|
159
|
-
// src/components/ui/
|
|
158
|
+
// src/components/ui/badge.tsx
|
|
160
159
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
161
|
-
var
|
|
160
|
+
var badgeVariants = (0, import_class_variance_authority.cva)(
|
|
161
|
+
"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",
|
|
162
|
+
{
|
|
163
|
+
variants: {
|
|
164
|
+
variant: {
|
|
165
|
+
default: "border-primary/40 bg-primary/10 text-foreground [a&]:hover:bg-primary/15",
|
|
166
|
+
secondary: "border-border bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
|
|
167
|
+
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",
|
|
168
|
+
success: "border-success/40 bg-success/10 text-success-text [a&]:hover:bg-success/15",
|
|
169
|
+
warning: "border-warning/40 bg-warning/10 text-warning-text [a&]:hover:bg-warning/15",
|
|
170
|
+
info: "border-info/40 bg-info/10 text-info-text [a&]:hover:bg-info/15",
|
|
171
|
+
outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
172
|
+
ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
173
|
+
link: "text-primary underline-offset-4 [a&]:hover:underline"
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
defaultVariants: {
|
|
177
|
+
variant: "default"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
function Badge(_a) {
|
|
182
|
+
var _b = _a, {
|
|
183
|
+
className,
|
|
184
|
+
variant = "default",
|
|
185
|
+
asChild = false
|
|
186
|
+
} = _b, props = __objRest(_b, [
|
|
187
|
+
"className",
|
|
188
|
+
"variant",
|
|
189
|
+
"asChild"
|
|
190
|
+
]);
|
|
191
|
+
const Comp = asChild ? Slot : "span";
|
|
192
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
193
|
+
Comp,
|
|
194
|
+
__spreadValues({
|
|
195
|
+
className: cn(badgeVariants({ variant }), className),
|
|
196
|
+
"data-slot": "badge",
|
|
197
|
+
"data-variant": variant
|
|
198
|
+
}, props)
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// src/components/ui/select.tsx
|
|
203
|
+
var import_lucide_react = require("lucide-react");
|
|
204
|
+
var import_select = require("@base-ui/react/select");
|
|
205
|
+
|
|
206
|
+
// src/lib/theme-provider.tsx
|
|
207
|
+
var import_react = require("react");
|
|
208
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
209
|
+
var ThemeVarsContext = (0, import_react.createContext)({});
|
|
210
|
+
function useThemeVars() {
|
|
211
|
+
return (0, import_react.useContext)(ThemeVarsContext);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// src/components/ui/select.tsx
|
|
215
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
216
|
+
function Select(_a) {
|
|
217
|
+
var props = __objRest(_a, []);
|
|
218
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
|
|
219
|
+
}
|
|
220
|
+
function SelectValue(_a) {
|
|
221
|
+
var props = __objRest(_a, []);
|
|
222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select.Select.Value, __spreadValues({ "data-slot": "select-value" }, props));
|
|
223
|
+
}
|
|
224
|
+
function SelectTrigger(_a) {
|
|
225
|
+
var _b = _a, {
|
|
226
|
+
className,
|
|
227
|
+
size = "default",
|
|
228
|
+
children
|
|
229
|
+
} = _b, props = __objRest(_b, [
|
|
230
|
+
"className",
|
|
231
|
+
"size",
|
|
232
|
+
"children"
|
|
233
|
+
]);
|
|
234
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
235
|
+
import_select.Select.Trigger,
|
|
236
|
+
__spreadProps(__spreadValues({
|
|
237
|
+
className: cn(
|
|
238
|
+
"flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-medium 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=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
239
|
+
className
|
|
240
|
+
),
|
|
241
|
+
"data-size": size,
|
|
242
|
+
"data-slot": "select-trigger"
|
|
243
|
+
}, props), {
|
|
244
|
+
children: [
|
|
245
|
+
children,
|
|
246
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select.Select.Icon, { className: "transition-transform duration-200 data-popup-open:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.ChevronDownIcon, { className: "size-4 opacity-50" }) })
|
|
247
|
+
]
|
|
248
|
+
})
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
function SelectContent(_a) {
|
|
252
|
+
var _b = _a, {
|
|
253
|
+
className,
|
|
254
|
+
children,
|
|
255
|
+
style
|
|
256
|
+
} = _b, props = __objRest(_b, [
|
|
257
|
+
"className",
|
|
258
|
+
"children",
|
|
259
|
+
"style"
|
|
260
|
+
]);
|
|
261
|
+
const themeVars = useThemeVars();
|
|
262
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
263
|
+
import_select.Select.Positioner,
|
|
264
|
+
{
|
|
265
|
+
className: "z-[200]",
|
|
266
|
+
align: "start",
|
|
267
|
+
alignItemWithTrigger: false,
|
|
268
|
+
sideOffset: 4,
|
|
269
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
270
|
+
import_select.Select.Popup,
|
|
271
|
+
__spreadProps(__spreadValues({
|
|
272
|
+
className: cn(
|
|
273
|
+
"relative max-h-[var(--available-height)] min-w-[var(--anchor-width,8rem)] overflow-x-hidden overflow-y-auto border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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",
|
|
274
|
+
className
|
|
275
|
+
),
|
|
276
|
+
"data-slot": "select-content",
|
|
277
|
+
style: __spreadValues(__spreadValues({}, themeVars), style)
|
|
278
|
+
}, props), {
|
|
279
|
+
children: [
|
|
280
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectScrollUpButton, {}),
|
|
281
|
+
children,
|
|
282
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectScrollDownButton, {})
|
|
283
|
+
]
|
|
284
|
+
})
|
|
285
|
+
)
|
|
286
|
+
}
|
|
287
|
+
) });
|
|
288
|
+
}
|
|
289
|
+
function SelectItem(_a) {
|
|
290
|
+
var _b = _a, {
|
|
291
|
+
className,
|
|
292
|
+
children
|
|
293
|
+
} = _b, props = __objRest(_b, [
|
|
294
|
+
"className",
|
|
295
|
+
"children"
|
|
296
|
+
]);
|
|
297
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
298
|
+
import_select.Select.Item,
|
|
299
|
+
__spreadProps(__spreadValues({
|
|
300
|
+
className: cn(
|
|
301
|
+
"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 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
|
|
302
|
+
className
|
|
303
|
+
),
|
|
304
|
+
"data-slot": "select-item"
|
|
305
|
+
}, props), {
|
|
306
|
+
children: [
|
|
307
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
308
|
+
"span",
|
|
309
|
+
{
|
|
310
|
+
className: "absolute right-2 flex size-3.5 items-center justify-center",
|
|
311
|
+
"data-slot": "select-item-indicator",
|
|
312
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.CheckIcon, { className: "size-4" }) })
|
|
313
|
+
}
|
|
314
|
+
),
|
|
315
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_select.Select.ItemText, { children })
|
|
316
|
+
]
|
|
317
|
+
})
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
function SelectScrollUpButton(_a) {
|
|
321
|
+
var _b = _a, {
|
|
322
|
+
className
|
|
323
|
+
} = _b, props = __objRest(_b, [
|
|
324
|
+
"className"
|
|
325
|
+
]);
|
|
326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
327
|
+
import_select.Select.ScrollUpArrow,
|
|
328
|
+
__spreadProps(__spreadValues({
|
|
329
|
+
className: cn(
|
|
330
|
+
"flex cursor-default items-center justify-center py-1",
|
|
331
|
+
className
|
|
332
|
+
),
|
|
333
|
+
"data-slot": "select-scroll-up-button"
|
|
334
|
+
}, props), {
|
|
335
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.ChevronUpIcon, { className: "size-4" })
|
|
336
|
+
})
|
|
337
|
+
);
|
|
338
|
+
}
|
|
339
|
+
function SelectScrollDownButton(_a) {
|
|
340
|
+
var _b = _a, {
|
|
341
|
+
className
|
|
342
|
+
} = _b, props = __objRest(_b, [
|
|
343
|
+
"className"
|
|
344
|
+
]);
|
|
345
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
346
|
+
import_select.Select.ScrollDownArrow,
|
|
347
|
+
__spreadProps(__spreadValues({
|
|
348
|
+
className: cn(
|
|
349
|
+
"flex cursor-default items-center justify-center py-1",
|
|
350
|
+
className
|
|
351
|
+
),
|
|
352
|
+
"data-slot": "select-scroll-down-button"
|
|
353
|
+
}, props), {
|
|
354
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.ChevronDownIcon, { className: "size-4" })
|
|
355
|
+
})
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// src/components/ui/button.tsx
|
|
360
|
+
var import_react2 = require("react");
|
|
361
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
362
|
+
var import_lucide_react2 = require("lucide-react");
|
|
363
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
364
|
+
var buttonVariants = (0, import_class_variance_authority2.cva)(
|
|
162
365
|
"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",
|
|
163
366
|
{
|
|
164
367
|
variants: {
|
|
@@ -166,9 +369,9 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
|
166
369
|
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
167
370
|
secondary: "bg-brand-secondary text-brand-secondary-foreground shadow-xs hover:bg-brand-secondary/80 focus-visible:ring-brand-secondary/30",
|
|
168
371
|
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",
|
|
169
|
-
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",
|
|
372
|
+
outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:border-border focus-visible:ring-border/50 dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
|
|
170
373
|
"outline-primary": "border border-primary text-foreground bg-transparent shadow-xs hover:bg-primary/5 focus-visible:ring-primary/50",
|
|
171
|
-
"outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:ring-brand-secondary/30",
|
|
374
|
+
"outline-secondary": "border border-brand-secondary text-brand-secondary bg-transparent shadow-xs hover:bg-brand-secondary/10 focus-visible:border-brand-secondary focus-visible:ring-brand-secondary/30",
|
|
172
375
|
ghost: "hover:bg-accent hover:text-accent-foreground hover:shadow-xs focus-visible:ring-border/50 dark:hover:bg-accent/50",
|
|
173
376
|
link: "text-primary underline-offset-4 hover:underline"
|
|
174
377
|
},
|
|
@@ -189,7 +392,7 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
|
189
392
|
}
|
|
190
393
|
}
|
|
191
394
|
);
|
|
192
|
-
var Button = (0,
|
|
395
|
+
var Button = (0, import_react2.forwardRef)(function Button2(_a, ref) {
|
|
193
396
|
var _b = _a, {
|
|
194
397
|
className,
|
|
195
398
|
variant,
|
|
@@ -211,7 +414,7 @@ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
|
|
|
211
414
|
]);
|
|
212
415
|
const Comp = asChild ? Slot : "button";
|
|
213
416
|
const isIconOnly = size === "icon" || size === "icon-xs" || size === "icon-sm" || size === "icon-lg";
|
|
214
|
-
return /* @__PURE__ */ (0,
|
|
417
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
215
418
|
Comp,
|
|
216
419
|
__spreadProps(__spreadValues({
|
|
217
420
|
className: cn(buttonVariants({ variant, size, className })),
|
|
@@ -222,14 +425,55 @@ var Button = (0, import_react.forwardRef)(function Button2(_a, ref) {
|
|
|
222
425
|
ref,
|
|
223
426
|
type
|
|
224
427
|
}, props), {
|
|
225
|
-
children: loading ? /* @__PURE__ */ (0,
|
|
226
|
-
/* @__PURE__ */ (0,
|
|
428
|
+
children: loading ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
429
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_lucide_react2.Loader2, { "aria-hidden": "true", className: "animate-spin" }),
|
|
227
430
|
!isIconOnly && children
|
|
228
431
|
] }) : children
|
|
229
432
|
})
|
|
230
433
|
);
|
|
231
434
|
});
|
|
232
435
|
|
|
436
|
+
// src/components/ui/checkbox.tsx
|
|
437
|
+
var import_react3 = require("react");
|
|
438
|
+
var import_lucide_react3 = require("lucide-react");
|
|
439
|
+
var import_checkbox = require("@base-ui/react/checkbox");
|
|
440
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
441
|
+
function Checkbox(_a) {
|
|
442
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
444
|
+
import_checkbox.Checkbox.Root,
|
|
445
|
+
__spreadProps(__spreadValues({
|
|
446
|
+
className: cn(
|
|
447
|
+
"peer group inline-flex size-4 shrink-0 border border-input shadow-xs transition-all outline-none",
|
|
448
|
+
"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
449
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
450
|
+
"aria-invalid:border-destructive aria-invalid:ring-destructive/20",
|
|
451
|
+
"data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground",
|
|
452
|
+
"data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground",
|
|
453
|
+
// Dark mode (upstream shadcn)
|
|
454
|
+
"dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-checked:bg-primary",
|
|
455
|
+
// Stacked (2 attr selectors) → wins over single-attr rules above
|
|
456
|
+
"aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-checked:text-destructive-foreground",
|
|
457
|
+
"aria-invalid:data-indeterminate:border-destructive aria-invalid:data-indeterminate:bg-destructive aria-invalid:data-indeterminate:text-destructive-foreground",
|
|
458
|
+
className
|
|
459
|
+
),
|
|
460
|
+
"data-slot": "checkbox"
|
|
461
|
+
}, props), {
|
|
462
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
463
|
+
import_checkbox.Checkbox.Indicator,
|
|
464
|
+
{
|
|
465
|
+
className: "grid place-content-center text-current transition-none",
|
|
466
|
+
"data-slot": "checkbox-indicator",
|
|
467
|
+
children: [
|
|
468
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.CheckIcon, { className: "size-3.5 group-data-indeterminate:hidden" }),
|
|
469
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.MinusIcon, { className: "size-3.5 hidden group-data-indeterminate:block" })
|
|
470
|
+
]
|
|
471
|
+
}
|
|
472
|
+
)
|
|
473
|
+
})
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
|
|
233
477
|
// src/lib/format-currency.ts
|
|
234
478
|
function formatCurrency(value, options) {
|
|
235
479
|
const { decimals = 0, showSign = false } = options != null ? options : {};
|
|
@@ -256,9 +500,9 @@ var PROPERTY_ASSET_TYPES = /* @__PURE__ */ new Set([
|
|
|
256
500
|
]);
|
|
257
501
|
|
|
258
502
|
// src/components/ui/tabs.tsx
|
|
259
|
-
var
|
|
503
|
+
var import_class_variance_authority3 = require("class-variance-authority");
|
|
260
504
|
var import_tabs = require("@base-ui/react/tabs");
|
|
261
|
-
var
|
|
505
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
262
506
|
function Tabs(_a) {
|
|
263
507
|
var _b = _a, {
|
|
264
508
|
className,
|
|
@@ -267,7 +511,7 @@ function Tabs(_a) {
|
|
|
267
511
|
"className",
|
|
268
512
|
"orientation"
|
|
269
513
|
]);
|
|
270
|
-
return /* @__PURE__ */ (0,
|
|
514
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
271
515
|
import_tabs.Tabs.Root,
|
|
272
516
|
__spreadValues({
|
|
273
517
|
className: cn(
|
|
@@ -279,7 +523,7 @@ function Tabs(_a) {
|
|
|
279
523
|
}, props)
|
|
280
524
|
);
|
|
281
525
|
}
|
|
282
|
-
var tabsListVariants = (0,
|
|
526
|
+
var tabsListVariants = (0, import_class_variance_authority3.cva)(
|
|
283
527
|
"group/tabs-list inline-flex w-fit items-center justify-center gap-1 rounded-none p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col",
|
|
284
528
|
{
|
|
285
529
|
variants: {
|
|
@@ -301,7 +545,7 @@ function TabsList(_a) {
|
|
|
301
545
|
"className",
|
|
302
546
|
"variant"
|
|
303
547
|
]);
|
|
304
|
-
return /* @__PURE__ */ (0,
|
|
548
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
305
549
|
import_tabs.Tabs.List,
|
|
306
550
|
__spreadValues({
|
|
307
551
|
className: cn(tabsListVariants({ variant }), className),
|
|
@@ -312,7 +556,7 @@ function TabsList(_a) {
|
|
|
312
556
|
}
|
|
313
557
|
function TabsTrigger(_a) {
|
|
314
558
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
315
|
-
return /* @__PURE__ */ (0,
|
|
559
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
316
560
|
import_tabs.Tabs.Tab,
|
|
317
561
|
__spreadValues({
|
|
318
562
|
className: cn(
|
|
@@ -349,7 +593,7 @@ function TabsTrigger(_a) {
|
|
|
349
593
|
}
|
|
350
594
|
function TabsContent(_a) {
|
|
351
595
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
352
|
-
return /* @__PURE__ */ (0,
|
|
596
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
353
597
|
import_tabs.Tabs.Panel,
|
|
354
598
|
__spreadValues({
|
|
355
599
|
className: cn("flex-1 outline-none", className),
|
|
@@ -359,17 +603,17 @@ function TabsContent(_a) {
|
|
|
359
603
|
}
|
|
360
604
|
|
|
361
605
|
// src/components/ui/financial-primitives.tsx
|
|
362
|
-
var
|
|
606
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
363
607
|
var NO_DATA = "\u2014";
|
|
364
608
|
function FinancialSectionLabel({
|
|
365
609
|
children
|
|
366
610
|
}) {
|
|
367
|
-
return /* @__PURE__ */ (0,
|
|
611
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-label-small uppercase text-muted-foreground", children });
|
|
368
612
|
}
|
|
369
613
|
function FinancialSubsectionTitle({
|
|
370
614
|
children
|
|
371
615
|
}) {
|
|
372
|
-
return /* @__PURE__ */ (0,
|
|
616
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-label-medium uppercase text-foreground", children });
|
|
373
617
|
}
|
|
374
618
|
function FinancialDetailField({
|
|
375
619
|
label,
|
|
@@ -377,13 +621,13 @@ function FinancialDetailField({
|
|
|
377
621
|
variant = "caption"
|
|
378
622
|
}) {
|
|
379
623
|
if (variant === "footer") {
|
|
380
|
-
return /* @__PURE__ */ (0,
|
|
381
|
-
/* @__PURE__ */ (0,
|
|
382
|
-
/* @__PURE__ */ (0,
|
|
624
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col justify-between min-w-0", children: [
|
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-overline text-muted-foreground", children: label }),
|
|
626
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-label-medium text-foreground mt-1 break-words", children: value != null ? value : NO_DATA })
|
|
383
627
|
] });
|
|
384
628
|
}
|
|
385
629
|
const labelClass = variant === "caption" ? "block min-h-[2rem] text-caption text-muted-foreground" : "min-h-[1.75rem] text-overline text-muted-foreground";
|
|
386
|
-
return /* @__PURE__ */ (0,
|
|
630
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
387
631
|
"div",
|
|
388
632
|
{
|
|
389
633
|
className: cn(
|
|
@@ -391,8 +635,8 @@ function FinancialDetailField({
|
|
|
391
635
|
variant === "overline" && "flex flex-col gap-0.5"
|
|
392
636
|
),
|
|
393
637
|
children: [
|
|
394
|
-
/* @__PURE__ */ (0,
|
|
395
|
-
/* @__PURE__ */ (0,
|
|
638
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: labelClass, children: label }),
|
|
639
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-label-medium text-foreground break-words", children: value != null ? value : NO_DATA })
|
|
396
640
|
]
|
|
397
641
|
}
|
|
398
642
|
);
|
|
@@ -402,9 +646,9 @@ function FinancialLineItem({
|
|
|
402
646
|
value,
|
|
403
647
|
destructive
|
|
404
648
|
}) {
|
|
405
|
-
return /* @__PURE__ */ (0,
|
|
406
|
-
/* @__PURE__ */ (0,
|
|
407
|
-
/* @__PURE__ */ (0,
|
|
649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-center justify-between gap-4 py-0.5", children: [
|
|
650
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-body-small text-foreground", children: label }),
|
|
651
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
408
652
|
"span",
|
|
409
653
|
{
|
|
410
654
|
className: cn(
|
|
@@ -436,12 +680,12 @@ function FinancialLvrBar({
|
|
|
436
680
|
warning: "bg-warning",
|
|
437
681
|
destructive: "bg-destructive"
|
|
438
682
|
}[color];
|
|
439
|
-
return /* @__PURE__ */ (0,
|
|
440
|
-
/* @__PURE__ */ (0,
|
|
441
|
-
/* @__PURE__ */ (0,
|
|
442
|
-
/* @__PURE__ */ (0,
|
|
683
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
684
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
685
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-body-small text-muted-foreground", children: "LVR" }),
|
|
686
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: cn("text-label-medium", textClass), children: label })
|
|
443
687
|
] }),
|
|
444
|
-
/* @__PURE__ */ (0,
|
|
688
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: cn("h-2.5 w-full overflow-hidden", trackClass), children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
445
689
|
"div",
|
|
446
690
|
{
|
|
447
691
|
className: cn("h-full", fillClass),
|
|
@@ -453,7 +697,7 @@ function FinancialLvrBar({
|
|
|
453
697
|
function FinancialSubtotalFrame({
|
|
454
698
|
children
|
|
455
699
|
}) {
|
|
456
|
-
return /* @__PURE__ */ (0,
|
|
700
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "mt-auto border-t border-primary/20 bg-primary/10 px-4 py-3", children });
|
|
457
701
|
}
|
|
458
702
|
function FinancialSubtotalBlock({
|
|
459
703
|
monthlyAverage,
|
|
@@ -461,7 +705,7 @@ function FinancialSubtotalBlock({
|
|
|
461
705
|
label
|
|
462
706
|
}) {
|
|
463
707
|
const isSingle = monthlyAverage && !totalLast12Months;
|
|
464
|
-
return /* @__PURE__ */ (0,
|
|
708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
465
709
|
"div",
|
|
466
710
|
{
|
|
467
711
|
className: cn(
|
|
@@ -469,7 +713,7 @@ function FinancialSubtotalBlock({
|
|
|
469
713
|
isSingle ? "justify-end" : "justify-between"
|
|
470
714
|
),
|
|
471
715
|
children: [
|
|
472
|
-
/* @__PURE__ */ (0,
|
|
716
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
473
717
|
"div",
|
|
474
718
|
{
|
|
475
719
|
className: cn(
|
|
@@ -477,14 +721,14 @@ function FinancialSubtotalBlock({
|
|
|
477
721
|
isSingle ? "text-right" : "text-left"
|
|
478
722
|
),
|
|
479
723
|
children: [
|
|
480
|
-
/* @__PURE__ */ (0,
|
|
481
|
-
/* @__PURE__ */ (0,
|
|
724
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "min-h-[1.75rem] text-overline text-muted-foreground", children: label != null ? label : "Monthly Average" }),
|
|
725
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-label-medium text-foreground", children: monthlyAverage != null ? monthlyAverage : NO_DATA })
|
|
482
726
|
]
|
|
483
727
|
}
|
|
484
728
|
),
|
|
485
|
-
!isSingle && /* @__PURE__ */ (0,
|
|
486
|
-
/* @__PURE__ */ (0,
|
|
487
|
-
/* @__PURE__ */ (0,
|
|
729
|
+
!isSingle && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-col gap-0.5 text-right", children: [
|
|
730
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "min-h-[1.75rem] text-overline text-muted-foreground", children: "Total Last 12 Months" }),
|
|
731
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-label-medium text-foreground", children: totalLast12Months != null ? totalLast12Months : NO_DATA })
|
|
488
732
|
] })
|
|
489
733
|
]
|
|
490
734
|
}
|
|
@@ -492,8 +736,8 @@ function FinancialSubtotalBlock({
|
|
|
492
736
|
}
|
|
493
737
|
|
|
494
738
|
// src/components/ui/financial-cards.tsx
|
|
495
|
-
var
|
|
496
|
-
var
|
|
739
|
+
var React3 = __toESM(require("react"));
|
|
740
|
+
var import_lucide_react6 = require("lucide-react");
|
|
497
741
|
|
|
498
742
|
// src/lib/format-date.ts
|
|
499
743
|
var import_date_fns = require("date-fns");
|
|
@@ -509,56 +753,86 @@ function formatDateShort(iso) {
|
|
|
509
753
|
}
|
|
510
754
|
}
|
|
511
755
|
|
|
512
|
-
// src/components/ui/
|
|
513
|
-
var
|
|
514
|
-
var
|
|
515
|
-
var
|
|
516
|
-
|
|
517
|
-
{
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
default: "border-primary/40 bg-primary/10 text-foreground [a&]:hover:bg-primary/15",
|
|
521
|
-
secondary: "border-border bg-muted text-muted-foreground [a&]:hover:bg-muted/80",
|
|
522
|
-
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",
|
|
523
|
-
success: "border-success/40 bg-success/10 text-success-text [a&]:hover:bg-success/15",
|
|
524
|
-
warning: "border-warning/40 bg-warning/10 text-warning-text [a&]:hover:bg-warning/15",
|
|
525
|
-
info: "border-info/40 bg-info/10 text-info-text [a&]:hover:bg-info/15",
|
|
526
|
-
outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
527
|
-
ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
528
|
-
link: "text-primary underline-offset-4 [a&]:hover:underline"
|
|
529
|
-
}
|
|
530
|
-
},
|
|
531
|
-
defaultVariants: {
|
|
532
|
-
variant: "default"
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
);
|
|
536
|
-
function Badge(_a) {
|
|
756
|
+
// src/components/ui/accordion.tsx
|
|
757
|
+
var import_lucide_react4 = require("lucide-react");
|
|
758
|
+
var import_accordion = require("@base-ui/react/accordion");
|
|
759
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
760
|
+
function Accordion(props) {
|
|
761
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_accordion.Accordion.Root, __spreadValues({ "data-slot": "accordion" }, props));
|
|
762
|
+
}
|
|
763
|
+
function AccordionItem(_a) {
|
|
537
764
|
var _b = _a, {
|
|
538
|
-
className
|
|
539
|
-
variant = "default",
|
|
540
|
-
asChild = false
|
|
765
|
+
className
|
|
541
766
|
} = _b, props = __objRest(_b, [
|
|
542
|
-
"className"
|
|
543
|
-
"variant",
|
|
544
|
-
"asChild"
|
|
767
|
+
"className"
|
|
545
768
|
]);
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
Comp,
|
|
769
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
770
|
+
import_accordion.Accordion.Item,
|
|
549
771
|
__spreadValues({
|
|
550
|
-
className: cn(
|
|
551
|
-
"data-slot": "
|
|
552
|
-
"data-variant": variant
|
|
772
|
+
className: cn("border-b", className),
|
|
773
|
+
"data-slot": "accordion-item"
|
|
553
774
|
}, props)
|
|
554
775
|
);
|
|
555
776
|
}
|
|
777
|
+
function AccordionTrigger(_a) {
|
|
778
|
+
var _b = _a, {
|
|
779
|
+
className,
|
|
780
|
+
children
|
|
781
|
+
} = _b, props = __objRest(_b, [
|
|
782
|
+
"className",
|
|
783
|
+
"children"
|
|
784
|
+
]);
|
|
785
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
786
|
+
import_accordion.Accordion.Trigger,
|
|
787
|
+
__spreadProps(__spreadValues({
|
|
788
|
+
className: cn(
|
|
789
|
+
// layout
|
|
790
|
+
"flex flex-1 items-center justify-between gap-4 py-4 text-left",
|
|
791
|
+
// typography
|
|
792
|
+
"text-label-medium",
|
|
793
|
+
// base
|
|
794
|
+
"rounded-none outline-none transition-[color,opacity]",
|
|
795
|
+
// interactive states
|
|
796
|
+
"hover:underline",
|
|
797
|
+
"focus-visible:ring-2 focus-visible:ring-foreground/30",
|
|
798
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
799
|
+
// chevron rotation when open
|
|
800
|
+
"[&[data-panel-open]>svg]:rotate-180",
|
|
801
|
+
className
|
|
802
|
+
),
|
|
803
|
+
"data-slot": "accordion-trigger"
|
|
804
|
+
}, props), {
|
|
805
|
+
children: [
|
|
806
|
+
children,
|
|
807
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react4.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
|
|
808
|
+
]
|
|
809
|
+
})
|
|
810
|
+
) });
|
|
811
|
+
}
|
|
812
|
+
function AccordionContent(_a) {
|
|
813
|
+
var _b = _a, {
|
|
814
|
+
className,
|
|
815
|
+
children
|
|
816
|
+
} = _b, props = __objRest(_b, [
|
|
817
|
+
"className",
|
|
818
|
+
"children"
|
|
819
|
+
]);
|
|
820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
821
|
+
import_accordion.Accordion.Panel,
|
|
822
|
+
__spreadProps(__spreadValues({
|
|
823
|
+
className: "overflow-hidden text-body-small h-(--accordion-panel-height) transition-[height] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0",
|
|
824
|
+
"data-slot": "accordion-content"
|
|
825
|
+
}, props), {
|
|
826
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: cn("pb-4 text-muted-foreground", className), children })
|
|
827
|
+
})
|
|
828
|
+
);
|
|
829
|
+
}
|
|
556
830
|
|
|
557
831
|
// src/components/ui/radio-group.tsx
|
|
558
|
-
var
|
|
832
|
+
var import_lucide_react5 = require("lucide-react");
|
|
559
833
|
var import_radio_group = require("@base-ui/react/radio-group");
|
|
560
834
|
var import_radio = require("@base-ui/react/radio");
|
|
561
|
-
var
|
|
835
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
562
836
|
var CIRCLE_BASE = "inline-flex items-center justify-center aspect-square size-4 shrink-0 rounded-full border border-primary bg-background";
|
|
563
837
|
var INDICATOR_DOT = "size-2 fill-background text-background";
|
|
564
838
|
function RadioGroup(_a) {
|
|
@@ -567,7 +841,7 @@ function RadioGroup(_a) {
|
|
|
567
841
|
} = _b, props = __objRest(_b, [
|
|
568
842
|
"className"
|
|
569
843
|
]);
|
|
570
|
-
return /* @__PURE__ */ (0,
|
|
844
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
571
845
|
import_radio_group.RadioGroup,
|
|
572
846
|
__spreadValues({
|
|
573
847
|
className: cn("grid gap-3", className),
|
|
@@ -581,7 +855,7 @@ function RadioGroupItem(_a) {
|
|
|
581
855
|
} = _b, props = __objRest(_b, [
|
|
582
856
|
"className"
|
|
583
857
|
]);
|
|
584
|
-
return /* @__PURE__ */ (0,
|
|
858
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
585
859
|
import_radio.Radio.Root,
|
|
586
860
|
__spreadProps(__spreadValues({
|
|
587
861
|
className: cn(
|
|
@@ -597,11 +871,11 @@ function RadioGroupItem(_a) {
|
|
|
597
871
|
),
|
|
598
872
|
"data-slot": "radio-group-item"
|
|
599
873
|
}, props), {
|
|
600
|
-
children: /* @__PURE__ */ (0,
|
|
874
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
601
875
|
import_radio.Radio.Indicator,
|
|
602
876
|
{
|
|
603
877
|
"data-slot": "radio-group-indicator",
|
|
604
|
-
children: /* @__PURE__ */ (0,
|
|
878
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react5.CircleIcon, { className: INDICATOR_DOT })
|
|
605
879
|
}
|
|
606
880
|
)
|
|
607
881
|
})
|
|
@@ -609,7 +883,7 @@ function RadioGroupItem(_a) {
|
|
|
609
883
|
}
|
|
610
884
|
|
|
611
885
|
// src/components/ui/financial-cards.tsx
|
|
612
|
-
var
|
|
886
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
613
887
|
function PropertyCard({
|
|
614
888
|
address,
|
|
615
889
|
type,
|
|
@@ -632,8 +906,8 @@ function PropertyCard({
|
|
|
632
906
|
interestCharged,
|
|
633
907
|
principlePaidOff
|
|
634
908
|
}) {
|
|
635
|
-
const [expanded, setExpanded] =
|
|
636
|
-
return /* @__PURE__ */ (0,
|
|
909
|
+
const [expanded, setExpanded] = React3.useState(false);
|
|
910
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
637
911
|
"div",
|
|
638
912
|
{
|
|
639
913
|
className: cn(
|
|
@@ -641,20 +915,19 @@ function PropertyCard({
|
|
|
641
915
|
!borderless && "border border-border"
|
|
642
916
|
),
|
|
643
917
|
children: [
|
|
644
|
-
isLinkedToBank ? /* @__PURE__ */ (0,
|
|
918
|
+
isLinkedToBank ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
645
919
|
Button,
|
|
646
920
|
{
|
|
647
921
|
type: "button",
|
|
648
922
|
variant: "ghost",
|
|
649
923
|
"aria-expanded": expanded,
|
|
650
924
|
onClick: () => setExpanded((prev) => !prev),
|
|
651
|
-
className: "h-auto w-full justify-start gap-1.5 px-5 py-3 text-left",
|
|
925
|
+
className: "h-auto w-full justify-start gap-1.5 px-5 py-3 text-left has-[>svg]:px-5",
|
|
652
926
|
children: [
|
|
653
|
-
/* @__PURE__ */ (0,
|
|
654
|
-
type && /* @__PURE__ */ (0,
|
|
655
|
-
/* @__PURE__ */ (0,
|
|
656
|
-
|
|
657
|
-
import_lucide_react3.ChevronDown,
|
|
927
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex-1 min-w-0 truncate text-label-medium text-foreground", children: address }),
|
|
928
|
+
type && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Badge, { className: "shrink-0", variant: "outline", children: type }),
|
|
929
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
930
|
+
import_lucide_react6.ChevronDown,
|
|
658
931
|
{
|
|
659
932
|
className: cn(
|
|
660
933
|
"h-5 w-5 shrink-0 text-muted-foreground transition-transform duration-200",
|
|
@@ -664,67 +937,67 @@ function PropertyCard({
|
|
|
664
937
|
)
|
|
665
938
|
]
|
|
666
939
|
}
|
|
667
|
-
) : /* @__PURE__ */ (0,
|
|
668
|
-
/* @__PURE__ */ (0,
|
|
669
|
-
type && /* @__PURE__ */ (0,
|
|
940
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-1.5 px-5 py-3", children: [
|
|
941
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-label-medium text-foreground", children: address }),
|
|
942
|
+
type && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Badge, { variant: "outline", children: type })
|
|
670
943
|
] }),
|
|
671
|
-
!isLinkedToBank && /* @__PURE__ */ (0,
|
|
672
|
-
/* @__PURE__ */ (0,
|
|
944
|
+
!isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "px-5 pb-2 text-xs italic text-muted-foreground", children: "No mortgage account linked to this property" }),
|
|
945
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
673
946
|
"div",
|
|
674
947
|
{
|
|
675
948
|
className: cn(
|
|
676
949
|
"grid gap-5 px-5 py-[15px]",
|
|
677
|
-
isLinkedToBank ? "grid-cols-
|
|
950
|
+
isLinkedToBank ? "grid-cols-2" : "grid-cols-1"
|
|
678
951
|
),
|
|
679
952
|
children: [
|
|
680
|
-
/* @__PURE__ */ (0,
|
|
681
|
-
isLinkedToBank && /* @__PURE__ */ (0,
|
|
682
|
-
/* @__PURE__ */ (0,
|
|
683
|
-
/* @__PURE__ */ (0,
|
|
953
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Estimated Value", value: estimated }),
|
|
954
|
+
isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
955
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Loan Amount", value: loanAmount }),
|
|
956
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "col-span-2", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Equity", value: equity }) })
|
|
684
957
|
] })
|
|
685
958
|
]
|
|
686
959
|
}
|
|
687
960
|
),
|
|
688
|
-
isLinkedToBank && /* @__PURE__ */ (0,
|
|
961
|
+
isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "px-5 pb-[15px]", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
689
962
|
FinancialLvrBar,
|
|
690
963
|
{
|
|
691
964
|
percent: lvrPercent,
|
|
692
965
|
label: lvr != null ? lvr : `${lvrPercent}%`
|
|
693
966
|
}
|
|
694
967
|
) }),
|
|
695
|
-
isLinkedToBank && /* @__PURE__ */ (0,
|
|
968
|
+
isLinkedToBank && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
696
969
|
"div",
|
|
697
970
|
{
|
|
698
971
|
className: cn(
|
|
699
972
|
"grid transition-[grid-template-rows] duration-200 ease-in-out",
|
|
700
973
|
expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
|
|
701
974
|
),
|
|
702
|
-
children: /* @__PURE__ */ (0,
|
|
703
|
-
/* @__PURE__ */ (0,
|
|
704
|
-
/* @__PURE__ */ (0,
|
|
705
|
-
/* @__PURE__ */ (0,
|
|
706
|
-
/* @__PURE__ */ (0,
|
|
975
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "overflow-hidden", children: [
|
|
976
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col gap-5 border-t border-border px-5 py-[15px]", children: [
|
|
977
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialSubsectionTitle, { children: "Loan" }),
|
|
978
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-4 gap-y-4", children: [
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
707
980
|
FinancialDetailField,
|
|
708
981
|
{
|
|
709
982
|
label: "Name of Lender",
|
|
710
983
|
value: lenderName
|
|
711
984
|
}
|
|
712
985
|
),
|
|
713
|
-
/* @__PURE__ */ (0,
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
714
987
|
FinancialDetailField,
|
|
715
988
|
{
|
|
716
989
|
label: "Current Loan Amount",
|
|
717
990
|
value: loanAmount
|
|
718
991
|
}
|
|
719
992
|
),
|
|
720
|
-
/* @__PURE__ */ (0,
|
|
993
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
721
994
|
FinancialDetailField,
|
|
722
995
|
{
|
|
723
996
|
label: "Interest Rate",
|
|
724
997
|
value: interestRate
|
|
725
998
|
}
|
|
726
999
|
),
|
|
727
|
-
/* @__PURE__ */ (0,
|
|
1000
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
728
1001
|
FinancialDetailField,
|
|
729
1002
|
{
|
|
730
1003
|
label: "Years Remaining",
|
|
@@ -732,29 +1005,29 @@ function PropertyCard({
|
|
|
732
1005
|
}
|
|
733
1006
|
)
|
|
734
1007
|
] }),
|
|
735
|
-
/* @__PURE__ */ (0,
|
|
736
|
-
/* @__PURE__ */ (0,
|
|
1008
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-4 gap-y-4", children: [
|
|
1009
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
737
1010
|
FinancialDetailField,
|
|
738
1011
|
{
|
|
739
1012
|
label: "Min Repayments",
|
|
740
1013
|
value: minRepayments
|
|
741
1014
|
}
|
|
742
1015
|
),
|
|
743
|
-
/* @__PURE__ */ (0,
|
|
1016
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
744
1017
|
FinancialDetailField,
|
|
745
1018
|
{
|
|
746
1019
|
label: "Average Repayments",
|
|
747
1020
|
value: averageRepayments
|
|
748
1021
|
}
|
|
749
1022
|
),
|
|
750
|
-
/* @__PURE__ */ (0,
|
|
1023
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
751
1024
|
FinancialDetailField,
|
|
752
1025
|
{
|
|
753
1026
|
label: "Redraw Amount",
|
|
754
1027
|
value: redrawAmount
|
|
755
1028
|
}
|
|
756
1029
|
),
|
|
757
|
-
/* @__PURE__ */ (0,
|
|
1030
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
758
1031
|
FinancialDetailField,
|
|
759
1032
|
{
|
|
760
1033
|
label: "Offset Account",
|
|
@@ -763,8 +1036,8 @@ function PropertyCard({
|
|
|
763
1036
|
)
|
|
764
1037
|
] })
|
|
765
1038
|
] }),
|
|
766
|
-
/* @__PURE__ */ (0,
|
|
767
|
-
/* @__PURE__ */ (0,
|
|
1039
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-4 gap-y-1", children: [
|
|
1040
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
768
1041
|
FinancialDetailField,
|
|
769
1042
|
{
|
|
770
1043
|
variant: "footer",
|
|
@@ -772,7 +1045,7 @@ function PropertyCard({
|
|
|
772
1045
|
value: totalMinRepayments
|
|
773
1046
|
}
|
|
774
1047
|
),
|
|
775
|
-
/* @__PURE__ */ (0,
|
|
1048
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
776
1049
|
FinancialDetailField,
|
|
777
1050
|
{
|
|
778
1051
|
variant: "footer",
|
|
@@ -780,7 +1053,7 @@ function PropertyCard({
|
|
|
780
1053
|
value: totalExtraRepayments
|
|
781
1054
|
}
|
|
782
1055
|
),
|
|
783
|
-
/* @__PURE__ */ (0,
|
|
1056
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
784
1057
|
FinancialDetailField,
|
|
785
1058
|
{
|
|
786
1059
|
variant: "footer",
|
|
@@ -788,7 +1061,7 @@ function PropertyCard({
|
|
|
788
1061
|
value: interestCharged
|
|
789
1062
|
}
|
|
790
1063
|
),
|
|
791
|
-
/* @__PURE__ */ (0,
|
|
1064
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
792
1065
|
FinancialDetailField,
|
|
793
1066
|
{
|
|
794
1067
|
variant: "footer",
|
|
@@ -818,17 +1091,17 @@ function DebtCard({
|
|
|
818
1091
|
totalInterestPaid,
|
|
819
1092
|
yearsRemaining
|
|
820
1093
|
}) {
|
|
821
|
-
return /* @__PURE__ */ (0,
|
|
822
|
-
/* @__PURE__ */ (0,
|
|
823
|
-
/* @__PURE__ */ (0,
|
|
824
|
-
/* @__PURE__ */ (0,
|
|
1094
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "border border-border overflow-hidden flex flex-col h-full", children: [
|
|
1095
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-3 gap-5 px-5 py-[15px] border-b border-border min-h-[7rem] items-start", children: [
|
|
1096
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Name of Lender", value: lenderName }),
|
|
1097
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
825
1098
|
FinancialDetailField,
|
|
826
1099
|
{
|
|
827
1100
|
label: "Current Loan Amount",
|
|
828
1101
|
value: currentLoanAmount
|
|
829
1102
|
}
|
|
830
1103
|
),
|
|
831
|
-
/* @__PURE__ */ (0,
|
|
1104
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
832
1105
|
FinancialDetailField,
|
|
833
1106
|
{
|
|
834
1107
|
label: "Current Interest Rate",
|
|
@@ -836,24 +1109,24 @@ function DebtCard({
|
|
|
836
1109
|
}
|
|
837
1110
|
)
|
|
838
1111
|
] }),
|
|
839
|
-
/* @__PURE__ */ (0,
|
|
840
|
-
/* @__PURE__ */ (0,
|
|
841
|
-
/* @__PURE__ */ (0,
|
|
842
|
-
/* @__PURE__ */ (0,
|
|
1112
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "px-5 py-[15px] flex flex-col gap-5 flex-1", children: [
|
|
1113
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialSubsectionTitle, { children: "Loan Stats" }),
|
|
1114
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-3 gap-5", children: [
|
|
1115
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
843
1116
|
FinancialDetailField,
|
|
844
1117
|
{
|
|
845
1118
|
label: "Original Loan Amount",
|
|
846
1119
|
value: originalLoanAmount
|
|
847
1120
|
}
|
|
848
1121
|
),
|
|
849
|
-
/* @__PURE__ */ (0,
|
|
1122
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
850
1123
|
FinancialDetailField,
|
|
851
1124
|
{
|
|
852
1125
|
label: "Original Loan Term",
|
|
853
1126
|
value: originalLoanTerm
|
|
854
1127
|
}
|
|
855
1128
|
),
|
|
856
|
-
/* @__PURE__ */ (0,
|
|
1129
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
857
1130
|
FinancialDetailField,
|
|
858
1131
|
{
|
|
859
1132
|
label: "Monthly Repayments",
|
|
@@ -861,10 +1134,10 @@ function DebtCard({
|
|
|
861
1134
|
}
|
|
862
1135
|
)
|
|
863
1136
|
] }),
|
|
864
|
-
/* @__PURE__ */ (0,
|
|
865
|
-
/* @__PURE__ */ (0,
|
|
866
|
-
/* @__PURE__ */ (0,
|
|
867
|
-
/* @__PURE__ */ (0,
|
|
1137
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-3 gap-5", children: [
|
|
1138
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Redraw Amount", value: redrawAmount }),
|
|
1139
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Offset Account", value: offsetAmount }),
|
|
1140
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
868
1141
|
FinancialDetailField,
|
|
869
1142
|
{
|
|
870
1143
|
label: "Extra Loan Repayments",
|
|
@@ -873,8 +1146,8 @@ function DebtCard({
|
|
|
873
1146
|
)
|
|
874
1147
|
] })
|
|
875
1148
|
] }),
|
|
876
|
-
/* @__PURE__ */ (0,
|
|
877
|
-
/* @__PURE__ */ (0,
|
|
1149
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-3 gap-x-4 gap-y-1", children: [
|
|
1150
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
878
1151
|
FinancialDetailField,
|
|
879
1152
|
{
|
|
880
1153
|
variant: "footer",
|
|
@@ -882,7 +1155,7 @@ function DebtCard({
|
|
|
882
1155
|
value: totalRepaymentsMade
|
|
883
1156
|
}
|
|
884
1157
|
),
|
|
885
|
-
/* @__PURE__ */ (0,
|
|
1158
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
886
1159
|
FinancialDetailField,
|
|
887
1160
|
{
|
|
888
1161
|
variant: "footer",
|
|
@@ -890,7 +1163,7 @@ function DebtCard({
|
|
|
890
1163
|
value: totalInterestPaid
|
|
891
1164
|
}
|
|
892
1165
|
),
|
|
893
|
-
/* @__PURE__ */ (0,
|
|
1166
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
894
1167
|
FinancialDetailField,
|
|
895
1168
|
{
|
|
896
1169
|
variant: "footer",
|
|
@@ -901,6 +1174,16 @@ function DebtCard({
|
|
|
901
1174
|
] }) })
|
|
902
1175
|
] });
|
|
903
1176
|
}
|
|
1177
|
+
function ageFromDob(dobStr) {
|
|
1178
|
+
if (!dobStr) return null;
|
|
1179
|
+
const dob = new Date(dobStr);
|
|
1180
|
+
if (isNaN(dob.getTime())) return null;
|
|
1181
|
+
const today = /* @__PURE__ */ new Date();
|
|
1182
|
+
let age = today.getFullYear() - dob.getFullYear();
|
|
1183
|
+
const m = today.getMonth() - dob.getMonth();
|
|
1184
|
+
if (m < 0 || m === 0 && today.getDate() < dob.getDate()) age--;
|
|
1185
|
+
return age >= 0 ? age : null;
|
|
1186
|
+
}
|
|
904
1187
|
function AboutCard({
|
|
905
1188
|
title,
|
|
906
1189
|
firstName,
|
|
@@ -911,6 +1194,7 @@ function AboutCard({
|
|
|
911
1194
|
gender,
|
|
912
1195
|
maritalStatus,
|
|
913
1196
|
numDependants,
|
|
1197
|
+
dependants,
|
|
914
1198
|
citizenStatus,
|
|
915
1199
|
residentialAddress,
|
|
916
1200
|
residentialStatus,
|
|
@@ -919,210 +1203,265 @@ function AboutCard({
|
|
|
919
1203
|
driversLicence,
|
|
920
1204
|
passport,
|
|
921
1205
|
propertyInTrust,
|
|
922
|
-
companyOwnership
|
|
1206
|
+
companyOwnership,
|
|
1207
|
+
borderless = false
|
|
923
1208
|
}) {
|
|
924
1209
|
const fullName = [title, firstName, lastName].filter(Boolean).join(" ") || "\u2014";
|
|
925
1210
|
const timeAtAddress = timeAtAddressYears || timeAtAddressMonths ? [
|
|
926
1211
|
timeAtAddressYears && `${timeAtAddressYears}yr`,
|
|
927
1212
|
timeAtAddressMonths && `${timeAtAddressMonths}mo`
|
|
928
1213
|
].filter(Boolean).join(" ") : void 0;
|
|
929
|
-
return /* @__PURE__ */ (0,
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
1214
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1215
|
+
"div",
|
|
1216
|
+
{
|
|
1217
|
+
className: cn(
|
|
1218
|
+
"overflow-hidden divide-y divide-border",
|
|
1219
|
+
!borderless && "border border-border"
|
|
1220
|
+
),
|
|
1221
|
+
children: [
|
|
1222
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 px-5 py-4", children: [
|
|
1223
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Full Name", value: fullName }),
|
|
1224
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Date of Birth", value: dob || "\u2014" }),
|
|
1225
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Gender", value: gender || "\u2014" }),
|
|
1226
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1227
|
+
FinancialDetailField,
|
|
1228
|
+
{
|
|
1229
|
+
label: "Citizenship",
|
|
1230
|
+
value: citizenStatus || "\u2014"
|
|
1231
|
+
}
|
|
1232
|
+
),
|
|
1233
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1234
|
+
FinancialDetailField,
|
|
1235
|
+
{
|
|
1236
|
+
label: "Driver's Licence",
|
|
1237
|
+
value: driversLicence || "\u2014"
|
|
1238
|
+
}
|
|
1239
|
+
),
|
|
1240
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Passport", value: passport || "\u2014" })
|
|
1241
|
+
] }),
|
|
1242
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 px-5 py-4", children: [
|
|
1243
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Phone", value: phone || "\u2014" }),
|
|
1244
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Email", value: email || "\u2014" })
|
|
1245
|
+
] }),
|
|
1246
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 px-5 py-4", children: [
|
|
1247
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1248
|
+
FinancialDetailField,
|
|
1249
|
+
{
|
|
1250
|
+
label: "Marital Status",
|
|
1251
|
+
value: maritalStatus || "\u2014"
|
|
1252
|
+
}
|
|
1253
|
+
),
|
|
1254
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1255
|
+
FinancialDetailField,
|
|
1256
|
+
{
|
|
1257
|
+
label: "No. of Dependants",
|
|
1258
|
+
value: numDependants != null ? numDependants : "\u2014"
|
|
1259
|
+
}
|
|
1260
|
+
),
|
|
1261
|
+
dependants && dependants.map((dep, i) => {
|
|
1262
|
+
const age = ageFromDob(dep.dob);
|
|
1263
|
+
const dobFormatted = formatDateShort(dep.dob) || "\u2014";
|
|
1264
|
+
const value = age !== null ? `${dobFormatted} \xB7 age ${age}` : dobFormatted;
|
|
1265
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1266
|
+
FinancialDetailField,
|
|
1267
|
+
{
|
|
1268
|
+
label: `Dependant ${i + 1}`,
|
|
1269
|
+
value
|
|
1270
|
+
},
|
|
1271
|
+
i
|
|
1272
|
+
);
|
|
1273
|
+
})
|
|
1274
|
+
] }),
|
|
1275
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 px-5 py-4", children: [
|
|
1276
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "col-span-2", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1277
|
+
FinancialDetailField,
|
|
1278
|
+
{
|
|
1279
|
+
label: "Residential Address",
|
|
1280
|
+
value: residentialAddress || "\u2014"
|
|
1281
|
+
}
|
|
1282
|
+
) }),
|
|
1283
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1284
|
+
FinancialDetailField,
|
|
1285
|
+
{
|
|
1286
|
+
label: "Residential Status",
|
|
1287
|
+
value: residentialStatus || "\u2014"
|
|
1288
|
+
}
|
|
1289
|
+
),
|
|
1290
|
+
timeAtAddress && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialDetailField, { label: "Time at Address", value: timeAtAddress })
|
|
1291
|
+
] }),
|
|
1292
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 px-5 py-4", children: [
|
|
1293
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1294
|
+
FinancialDetailField,
|
|
1295
|
+
{
|
|
1296
|
+
label: "Property in Trust",
|
|
1297
|
+
value: propertyInTrust || "\u2014"
|
|
1298
|
+
}
|
|
1299
|
+
),
|
|
1300
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1301
|
+
FinancialDetailField,
|
|
1302
|
+
{
|
|
1303
|
+
label: "Company Ownership",
|
|
1304
|
+
value: companyOwnership || "\u2014"
|
|
1305
|
+
}
|
|
1306
|
+
)
|
|
1307
|
+
] })
|
|
1308
|
+
]
|
|
1309
|
+
}
|
|
1310
|
+
);
|
|
994
1311
|
}
|
|
995
|
-
function IncomeCard({
|
|
1312
|
+
function IncomeCard({
|
|
1313
|
+
items,
|
|
1314
|
+
totalMonthly,
|
|
1315
|
+
borderless = false
|
|
1316
|
+
}) {
|
|
996
1317
|
if (items.length === 0) {
|
|
997
|
-
return /* @__PURE__ */ (0,
|
|
1318
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn("px-5 py-4", !borderless && "border border-border"), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm text-muted-foreground", children: "No income recorded." }) });
|
|
998
1319
|
}
|
|
999
|
-
return /* @__PURE__ */ (0,
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
children: [
|
|
1008
|
-
/* @__PURE__ */ (0,
|
|
1009
|
-
/* @__PURE__ */ (0,
|
|
1010
|
-
|
|
1320
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1321
|
+
"div",
|
|
1322
|
+
{
|
|
1323
|
+
className: cn(
|
|
1324
|
+
"overflow-hidden flex flex-col",
|
|
1325
|
+
!borderless && "border border-border"
|
|
1326
|
+
),
|
|
1327
|
+
children: [
|
|
1328
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Accordion, { openMultiple: true, children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(AccordionItem, { value: String(i), children: [
|
|
1329
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AccordionTrigger, { className: "px-5", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-1 items-center justify-between pr-2", children: [
|
|
1330
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
1331
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-label-medium text-foreground", children: item.incomeType }),
|
|
1332
|
+
item.jobTitle && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "text-body-small text-muted-foreground", children: [
|
|
1333
|
+
"\xB7 ",
|
|
1334
|
+
item.jobTitle
|
|
1335
|
+
] })
|
|
1336
|
+
] }),
|
|
1337
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-label-medium text-foreground", children: item.amountLabel })
|
|
1338
|
+
] }) }),
|
|
1339
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AccordionContent, { className: "px-5", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid grid-cols-3 gap-x-6 gap-y-4 pb-2 pt-1", children: [
|
|
1340
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1011
1341
|
FinancialDetailField,
|
|
1012
1342
|
{
|
|
1013
1343
|
label: "Job Title",
|
|
1014
1344
|
value: item.jobTitle || "\u2014"
|
|
1015
1345
|
}
|
|
1016
1346
|
),
|
|
1017
|
-
/* @__PURE__ */ (0,
|
|
1018
|
-
] }),
|
|
1019
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "grid grid-cols-3 gap-x-6", children: [
|
|
1020
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1347
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1021
1348
|
FinancialDetailField,
|
|
1022
1349
|
{
|
|
1023
1350
|
label: "Company",
|
|
1024
1351
|
value: item.companyName || "\u2014"
|
|
1025
1352
|
}
|
|
1026
1353
|
),
|
|
1027
|
-
/* @__PURE__ */ (0,
|
|
1354
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1028
1355
|
FinancialDetailField,
|
|
1029
1356
|
{
|
|
1030
1357
|
label: "Start Date",
|
|
1031
1358
|
value: formatDateShort(item.startDate)
|
|
1032
1359
|
}
|
|
1033
1360
|
),
|
|
1034
|
-
/* @__PURE__ */ (0,
|
|
1361
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1035
1362
|
FinancialDetailField,
|
|
1036
1363
|
{
|
|
1037
1364
|
label: "Status",
|
|
1038
1365
|
value: item.stillInPosition === void 0 ? "\u2014" : item.stillInPosition ? "Still in position" : item.endDate ? `Ended ${formatDateShort(item.endDate)}` : "No longer in position"
|
|
1039
1366
|
}
|
|
1367
|
+
),
|
|
1368
|
+
item.companyAddress && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1369
|
+
FinancialDetailField,
|
|
1370
|
+
{
|
|
1371
|
+
label: "Company Address",
|
|
1372
|
+
value: item.companyAddress
|
|
1373
|
+
}
|
|
1040
1374
|
)
|
|
1041
|
-
] })
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
totalMonthly && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1054
|
-
FinancialSubtotalBlock,
|
|
1055
|
-
{
|
|
1056
|
-
monthlyAverage: totalMonthly,
|
|
1057
|
-
label: "Total Monthly Income"
|
|
1058
|
-
}
|
|
1059
|
-
) })
|
|
1060
|
-
] });
|
|
1375
|
+
] }) })
|
|
1376
|
+
] }, i)) }),
|
|
1377
|
+
totalMonthly && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1378
|
+
FinancialSubtotalBlock,
|
|
1379
|
+
{
|
|
1380
|
+
monthlyAverage: totalMonthly,
|
|
1381
|
+
label: "Total Monthly Income"
|
|
1382
|
+
}
|
|
1383
|
+
) })
|
|
1384
|
+
]
|
|
1385
|
+
}
|
|
1386
|
+
);
|
|
1061
1387
|
}
|
|
1062
1388
|
var EXPENSE_ICON_MAP = {
|
|
1063
|
-
groceries:
|
|
1064
|
-
"dining out":
|
|
1065
|
-
dining:
|
|
1066
|
-
restaurants:
|
|
1067
|
-
transport:
|
|
1068
|
-
transportation:
|
|
1069
|
-
vehicle:
|
|
1070
|
-
utilities:
|
|
1071
|
-
electricity:
|
|
1072
|
-
insurance:
|
|
1073
|
-
"council rates":
|
|
1074
|
-
council:
|
|
1075
|
-
rates:
|
|
1076
|
-
medical:
|
|
1077
|
-
health:
|
|
1078
|
-
subscriptions:
|
|
1079
|
-
subscription:
|
|
1080
|
-
"credit card":
|
|
1081
|
-
education:
|
|
1082
|
-
childcare:
|
|
1083
|
-
entertainment:
|
|
1084
|
-
gym:
|
|
1085
|
-
fitness:
|
|
1086
|
-
clothing:
|
|
1087
|
-
rent:
|
|
1389
|
+
groceries: import_lucide_react6.ShoppingCart,
|
|
1390
|
+
"dining out": import_lucide_react6.UtensilsCrossed,
|
|
1391
|
+
dining: import_lucide_react6.UtensilsCrossed,
|
|
1392
|
+
restaurants: import_lucide_react6.UtensilsCrossed,
|
|
1393
|
+
transport: import_lucide_react6.Car,
|
|
1394
|
+
transportation: import_lucide_react6.Car,
|
|
1395
|
+
vehicle: import_lucide_react6.Car,
|
|
1396
|
+
utilities: import_lucide_react6.Zap,
|
|
1397
|
+
electricity: import_lucide_react6.Zap,
|
|
1398
|
+
insurance: import_lucide_react6.Shield,
|
|
1399
|
+
"council rates": import_lucide_react6.Landmark,
|
|
1400
|
+
council: import_lucide_react6.Landmark,
|
|
1401
|
+
rates: import_lucide_react6.Landmark,
|
|
1402
|
+
medical: import_lucide_react6.HeartPulse,
|
|
1403
|
+
health: import_lucide_react6.HeartPulse,
|
|
1404
|
+
subscriptions: import_lucide_react6.RefreshCw,
|
|
1405
|
+
subscription: import_lucide_react6.RefreshCw,
|
|
1406
|
+
"credit card": import_lucide_react6.CreditCard,
|
|
1407
|
+
education: import_lucide_react6.GraduationCap,
|
|
1408
|
+
childcare: import_lucide_react6.Baby,
|
|
1409
|
+
entertainment: import_lucide_react6.Tv,
|
|
1410
|
+
gym: import_lucide_react6.Dumbbell,
|
|
1411
|
+
fitness: import_lucide_react6.Dumbbell,
|
|
1412
|
+
clothing: import_lucide_react6.Shirt,
|
|
1413
|
+
rent: import_lucide_react6.Building2
|
|
1088
1414
|
};
|
|
1089
1415
|
function getExpenseIcon(expenseType) {
|
|
1090
1416
|
var _a;
|
|
1091
|
-
return (_a = EXPENSE_ICON_MAP[expenseType.toLowerCase()]) != null ? _a :
|
|
1417
|
+
return (_a = EXPENSE_ICON_MAP[expenseType.toLowerCase()]) != null ? _a : import_lucide_react6.Receipt;
|
|
1092
1418
|
}
|
|
1093
|
-
function ExpensesCard({
|
|
1419
|
+
function ExpensesCard({
|
|
1420
|
+
items,
|
|
1421
|
+
totalMonthly,
|
|
1422
|
+
borderless = false
|
|
1423
|
+
}) {
|
|
1094
1424
|
if (items.length === 0) {
|
|
1095
|
-
return /* @__PURE__ */ (0,
|
|
1425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn("px-5 py-4", !borderless && "border border-border"), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm text-muted-foreground", children: "No expenses recorded." }) });
|
|
1096
1426
|
}
|
|
1097
|
-
return /* @__PURE__ */ (0,
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
"
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
)
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1427
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1428
|
+
"div",
|
|
1429
|
+
{
|
|
1430
|
+
className: cn(
|
|
1431
|
+
"overflow-hidden flex flex-col",
|
|
1432
|
+
!borderless && "border border-border"
|
|
1433
|
+
),
|
|
1434
|
+
children: [
|
|
1435
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col", children: items.map((item, i) => {
|
|
1436
|
+
const Icon = getExpenseIcon(item.expenseType);
|
|
1437
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1438
|
+
"div",
|
|
1439
|
+
{
|
|
1440
|
+
className: cn(
|
|
1441
|
+
"flex items-center justify-between gap-4 px-5 py-2.5",
|
|
1442
|
+
i < items.length - 1 && "border-b border-border"
|
|
1443
|
+
),
|
|
1444
|
+
children: [
|
|
1445
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
1446
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Icon, { className: "size-3.5 shrink-0 text-muted-foreground" }),
|
|
1447
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-body-small text-foreground", children: item.expenseType })
|
|
1448
|
+
] }),
|
|
1449
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-label-medium whitespace-nowrap text-destructive", children: item.amountLabel })
|
|
1450
|
+
]
|
|
1451
|
+
},
|
|
1452
|
+
item.expenseType
|
|
1453
|
+
);
|
|
1454
|
+
}) }),
|
|
1455
|
+
totalMonthly && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FinancialSubtotalFrame, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1456
|
+
FinancialSubtotalBlock,
|
|
1457
|
+
{
|
|
1458
|
+
monthlyAverage: totalMonthly,
|
|
1459
|
+
label: "Total Monthly Expenses"
|
|
1460
|
+
}
|
|
1461
|
+
) })
|
|
1462
|
+
]
|
|
1463
|
+
}
|
|
1464
|
+
);
|
|
1126
1465
|
}
|
|
1127
1466
|
|
|
1128
1467
|
// src/components/ui/opportunity-edit-modals.tsx
|
|
@@ -1130,26 +1469,16 @@ var React9 = __toESM(require("react"));
|
|
|
1130
1469
|
var import_lucide_react11 = require("lucide-react");
|
|
1131
1470
|
|
|
1132
1471
|
// src/components/ui/dialog.tsx
|
|
1133
|
-
var
|
|
1472
|
+
var import_lucide_react7 = require("lucide-react");
|
|
1134
1473
|
var import_dialog = require("@base-ui/react/dialog");
|
|
1135
|
-
|
|
1136
|
-
// src/lib/theme-provider.tsx
|
|
1137
|
-
var import_react2 = require("react");
|
|
1138
|
-
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
1139
|
-
var ThemeVarsContext = (0, import_react2.createContext)({});
|
|
1140
|
-
function useThemeVars() {
|
|
1141
|
-
return (0, import_react2.useContext)(ThemeVarsContext);
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
// src/components/ui/dialog.tsx
|
|
1145
|
-
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1474
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1146
1475
|
function Dialog(_a) {
|
|
1147
1476
|
var props = __objRest(_a, []);
|
|
1148
|
-
return /* @__PURE__ */ (0,
|
|
1477
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_dialog.Dialog.Root, __spreadValues({ "data-slot": "dialog" }, props));
|
|
1149
1478
|
}
|
|
1150
1479
|
function DialogPortal(_a) {
|
|
1151
1480
|
var props = __objRest(_a, []);
|
|
1152
|
-
return /* @__PURE__ */ (0,
|
|
1481
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_dialog.Dialog.Portal, __spreadValues({ "data-slot": "dialog-portal" }, props));
|
|
1153
1482
|
}
|
|
1154
1483
|
function DialogOverlay(_a) {
|
|
1155
1484
|
var _b = _a, {
|
|
@@ -1157,7 +1486,7 @@ function DialogOverlay(_a) {
|
|
|
1157
1486
|
} = _b, props = __objRest(_b, [
|
|
1158
1487
|
"className"
|
|
1159
1488
|
]);
|
|
1160
|
-
return /* @__PURE__ */ (0,
|
|
1489
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1161
1490
|
import_dialog.Dialog.Backdrop,
|
|
1162
1491
|
__spreadValues({
|
|
1163
1492
|
className: cn(
|
|
@@ -1203,9 +1532,9 @@ function DialogContent(_a) {
|
|
|
1203
1532
|
const themeVars = useThemeVars();
|
|
1204
1533
|
const isAuto = size === "auto";
|
|
1205
1534
|
const sizeStyle = isAuto ? { minWidth: minWidth != null ? minWidth : DIALOG_AUTO_MIN_WIDTH } : { maxWidth: DIALOG_MAX_WIDTHS[size] };
|
|
1206
|
-
return /* @__PURE__ */ (0,
|
|
1207
|
-
/* @__PURE__ */ (0,
|
|
1208
|
-
/* @__PURE__ */ (0,
|
|
1535
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(DialogPortal, { container: container != null ? container : void 0, children: [
|
|
1536
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DialogOverlay, { style: themeVars }),
|
|
1537
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1209
1538
|
import_dialog.Dialog.Popup,
|
|
1210
1539
|
__spreadProps(__spreadValues({
|
|
1211
1540
|
className: cn(
|
|
@@ -1224,14 +1553,14 @@ function DialogContent(_a) {
|
|
|
1224
1553
|
}, props), {
|
|
1225
1554
|
children: [
|
|
1226
1555
|
children,
|
|
1227
|
-
showCloseButton ? /* @__PURE__ */ (0,
|
|
1556
|
+
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1228
1557
|
import_dialog.Dialog.Close,
|
|
1229
1558
|
{
|
|
1230
1559
|
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",
|
|
1231
1560
|
"data-slot": "dialog-close",
|
|
1232
1561
|
children: [
|
|
1233
|
-
/* @__PURE__ */ (0,
|
|
1234
|
-
/* @__PURE__ */ (0,
|
|
1562
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react7.XIcon, {}),
|
|
1563
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "sr-only", children: "Close" })
|
|
1235
1564
|
]
|
|
1236
1565
|
}
|
|
1237
1566
|
) : null
|
|
@@ -1244,341 +1573,113 @@ function DialogHeader(_a) {
|
|
|
1244
1573
|
var _b = _a, {
|
|
1245
1574
|
className
|
|
1246
1575
|
} = _b, props = __objRest(_b, [
|
|
1247
|
-
"className"
|
|
1248
|
-
]);
|
|
1249
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1250
|
-
"div",
|
|
1251
|
-
__spreadValues({
|
|
1252
|
-
className: cn("flex flex-col gap-1.5", className),
|
|
1253
|
-
"data-slot": "dialog-header"
|
|
1254
|
-
}, props)
|
|
1255
|
-
);
|
|
1256
|
-
}
|
|
1257
|
-
function DialogFooter(_a) {
|
|
1258
|
-
var _b = _a, {
|
|
1259
|
-
className,
|
|
1260
|
-
showCloseButton = false,
|
|
1261
|
-
children
|
|
1262
|
-
} = _b, props = __objRest(_b, [
|
|
1263
|
-
"className",
|
|
1264
|
-
"showCloseButton",
|
|
1265
|
-
"children"
|
|
1266
|
-
]);
|
|
1267
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
1268
|
-
"div",
|
|
1269
|
-
__spreadProps(__spreadValues({
|
|
1270
|
-
className: cn(
|
|
1271
|
-
// WealthX: always row layout, right-aligned, separator above footer
|
|
1272
|
-
"flex flex-row justify-end gap-2 border-t border-border pt-4",
|
|
1273
|
-
className
|
|
1274
|
-
),
|
|
1275
|
-
"data-slot": "dialog-footer"
|
|
1276
|
-
}, props), {
|
|
1277
|
-
children: [
|
|
1278
|
-
children,
|
|
1279
|
-
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1280
|
-
import_dialog.Dialog.Close,
|
|
1281
|
-
{
|
|
1282
|
-
className: cn(buttonVariants({ variant: "outline" })),
|
|
1283
|
-
type: "button",
|
|
1284
|
-
children: "Close"
|
|
1285
|
-
}
|
|
1286
|
-
) : null
|
|
1287
|
-
]
|
|
1288
|
-
})
|
|
1289
|
-
);
|
|
1290
|
-
}
|
|
1291
|
-
function DialogTitle(_a) {
|
|
1292
|
-
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1293
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1294
|
-
import_dialog.Dialog.Title,
|
|
1295
|
-
__spreadValues({
|
|
1296
|
-
className: cn("text-h5 leading-none", className),
|
|
1297
|
-
"data-slot": "dialog-title"
|
|
1298
|
-
}, props)
|
|
1299
|
-
);
|
|
1300
|
-
}
|
|
1301
|
-
|
|
1302
|
-
// src/components/ui/input.tsx
|
|
1303
|
-
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
1304
|
-
function Input(_a) {
|
|
1305
|
-
var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
|
|
1306
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1307
|
-
"input",
|
|
1308
|
-
__spreadValues({
|
|
1309
|
-
className: cn(
|
|
1310
|
-
"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",
|
|
1311
|
-
"focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20",
|
|
1312
|
-
"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
|
1313
|
-
className
|
|
1314
|
-
),
|
|
1315
|
-
"data-slot": "input",
|
|
1316
|
-
type
|
|
1317
|
-
}, props)
|
|
1318
|
-
);
|
|
1319
|
-
}
|
|
1320
|
-
|
|
1321
|
-
// src/components/ui/label.tsx
|
|
1322
|
-
var import_jsx_runtime10 = (
|
|
1323
|
-
// eslint-disable-next-line jsx-a11y/label-has-associated-control -- htmlFor is passed by the consumer
|
|
1324
|
-
require("react/jsx-runtime")
|
|
1325
|
-
);
|
|
1326
|
-
function Label(_a) {
|
|
1327
|
-
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1328
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1329
|
-
"label",
|
|
1330
|
-
__spreadValues({
|
|
1331
|
-
className: cn(
|
|
1332
|
-
"flex items-center gap-2 text-label-medium leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
1333
|
-
className
|
|
1334
|
-
),
|
|
1335
|
-
"data-slot": "label"
|
|
1336
|
-
}, props)
|
|
1337
|
-
);
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
// src/components/ui/textarea.tsx
|
|
1341
|
-
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1342
|
-
function Textarea(_a) {
|
|
1343
|
-
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1344
|
-
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1345
|
-
"textarea",
|
|
1346
|
-
__spreadValues({
|
|
1347
|
-
className: cn(
|
|
1348
|
-
// WealthX: removed shadow-xs (flat panels), added font-sans
|
|
1349
|
-
"flex field-sizing-content min-h-16 w-full border border-input bg-transparent px-3 py-2 text-body-medium font-sans transition-[color,box-shadow] outline-none placeholder:font-normal placeholder:text-muted-foreground focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
|
|
1350
|
-
className
|
|
1351
|
-
),
|
|
1352
|
-
"data-slot": "textarea"
|
|
1353
|
-
}, props)
|
|
1354
|
-
);
|
|
1355
|
-
}
|
|
1356
|
-
|
|
1357
|
-
// src/components/ui/select.tsx
|
|
1358
|
-
var import_lucide_react5 = require("lucide-react");
|
|
1359
|
-
var import_select = require("@base-ui/react/select");
|
|
1360
|
-
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1361
|
-
function Select(_a) {
|
|
1362
|
-
var props = __objRest(_a, []);
|
|
1363
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_select.Select.Root, __spreadValues({ "data-slot": "select" }, props));
|
|
1364
|
-
}
|
|
1365
|
-
function SelectValue(_a) {
|
|
1366
|
-
var props = __objRest(_a, []);
|
|
1367
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_select.Select.Value, __spreadValues({ "data-slot": "select-value" }, props));
|
|
1368
|
-
}
|
|
1369
|
-
function SelectTrigger(_a) {
|
|
1370
|
-
var _b = _a, {
|
|
1371
|
-
className,
|
|
1372
|
-
size = "default",
|
|
1373
|
-
children
|
|
1374
|
-
} = _b, props = __objRest(_b, [
|
|
1375
|
-
"className",
|
|
1376
|
-
"size",
|
|
1377
|
-
"children"
|
|
1378
|
-
]);
|
|
1379
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1380
|
-
import_select.Select.Trigger,
|
|
1381
|
-
__spreadProps(__spreadValues({
|
|
1382
|
-
className: cn(
|
|
1383
|
-
"flex w-fit items-center justify-between gap-2 border border-input bg-transparent px-3 py-2 text-body-medium 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=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
1384
|
-
className
|
|
1385
|
-
),
|
|
1386
|
-
"data-size": size,
|
|
1387
|
-
"data-slot": "select-trigger"
|
|
1388
|
-
}, props), {
|
|
1389
|
-
children: [
|
|
1390
|
-
children,
|
|
1391
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_select.Select.Icon, { className: "transition-transform duration-200 data-popup-open:rotate-180", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.ChevronDownIcon, { className: "size-4 opacity-50" }) })
|
|
1392
|
-
]
|
|
1393
|
-
})
|
|
1394
|
-
);
|
|
1395
|
-
}
|
|
1396
|
-
function SelectContent(_a) {
|
|
1397
|
-
var _b = _a, {
|
|
1398
|
-
className,
|
|
1399
|
-
children,
|
|
1400
|
-
style
|
|
1401
|
-
} = _b, props = __objRest(_b, [
|
|
1402
|
-
"className",
|
|
1403
|
-
"children",
|
|
1404
|
-
"style"
|
|
1576
|
+
"className"
|
|
1405
1577
|
]);
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
sideOffset: 4,
|
|
1414
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1415
|
-
import_select.Select.Popup,
|
|
1416
|
-
__spreadProps(__spreadValues({
|
|
1417
|
-
className: cn(
|
|
1418
|
-
"relative max-h-[var(--available-height)] min-w-[var(--anchor-width,8rem)] overflow-x-hidden overflow-y-auto border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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",
|
|
1419
|
-
className
|
|
1420
|
-
),
|
|
1421
|
-
"data-slot": "select-content",
|
|
1422
|
-
style: __spreadValues(__spreadValues({}, themeVars), style)
|
|
1423
|
-
}, props), {
|
|
1424
|
-
children: [
|
|
1425
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectScrollUpButton, {}),
|
|
1426
|
-
children,
|
|
1427
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SelectScrollDownButton, {})
|
|
1428
|
-
]
|
|
1429
|
-
})
|
|
1430
|
-
)
|
|
1431
|
-
}
|
|
1432
|
-
) });
|
|
1578
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1579
|
+
"div",
|
|
1580
|
+
__spreadValues({
|
|
1581
|
+
className: cn("flex flex-col gap-1.5", className),
|
|
1582
|
+
"data-slot": "dialog-header"
|
|
1583
|
+
}, props)
|
|
1584
|
+
);
|
|
1433
1585
|
}
|
|
1434
|
-
function
|
|
1586
|
+
function DialogFooter(_a) {
|
|
1435
1587
|
var _b = _a, {
|
|
1436
1588
|
className,
|
|
1589
|
+
showCloseButton = false,
|
|
1437
1590
|
children
|
|
1438
1591
|
} = _b, props = __objRest(_b, [
|
|
1439
1592
|
"className",
|
|
1593
|
+
"showCloseButton",
|
|
1440
1594
|
"children"
|
|
1441
1595
|
]);
|
|
1442
|
-
return /* @__PURE__ */ (0,
|
|
1443
|
-
|
|
1596
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1597
|
+
"div",
|
|
1444
1598
|
__spreadProps(__spreadValues({
|
|
1445
1599
|
className: cn(
|
|
1446
|
-
|
|
1600
|
+
// WealthX: always row layout, right-aligned, separator above footer
|
|
1601
|
+
"flex flex-row justify-end gap-2 border-t border-border pt-4",
|
|
1447
1602
|
className
|
|
1448
1603
|
),
|
|
1449
|
-
"data-slot": "
|
|
1604
|
+
"data-slot": "dialog-footer"
|
|
1450
1605
|
}, props), {
|
|
1451
1606
|
children: [
|
|
1452
|
-
|
|
1453
|
-
|
|
1607
|
+
children,
|
|
1608
|
+
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1609
|
+
import_dialog.Dialog.Close,
|
|
1454
1610
|
{
|
|
1455
|
-
className:
|
|
1456
|
-
|
|
1457
|
-
children:
|
|
1611
|
+
className: cn(buttonVariants({ variant: "outline" })),
|
|
1612
|
+
type: "button",
|
|
1613
|
+
children: "Close"
|
|
1458
1614
|
}
|
|
1459
|
-
)
|
|
1460
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_select.Select.ItemText, { children })
|
|
1615
|
+
) : null
|
|
1461
1616
|
]
|
|
1462
1617
|
})
|
|
1463
1618
|
);
|
|
1464
1619
|
}
|
|
1465
|
-
function
|
|
1466
|
-
var _b = _a, {
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
__spreadProps(__spreadValues({
|
|
1474
|
-
className: cn(
|
|
1475
|
-
"flex cursor-default items-center justify-center py-1",
|
|
1476
|
-
className
|
|
1477
|
-
),
|
|
1478
|
-
"data-slot": "select-scroll-up-button"
|
|
1479
|
-
}, props), {
|
|
1480
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react5.ChevronUpIcon, { className: "size-4" })
|
|
1481
|
-
})
|
|
1620
|
+
function DialogTitle(_a) {
|
|
1621
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1622
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1623
|
+
import_dialog.Dialog.Title,
|
|
1624
|
+
__spreadValues({
|
|
1625
|
+
className: cn("text-h5 leading-none", className),
|
|
1626
|
+
"data-slot": "dialog-title"
|
|
1627
|
+
}, props)
|
|
1482
1628
|
);
|
|
1483
1629
|
}
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
]);
|
|
1630
|
+
|
|
1631
|
+
// src/components/ui/input.tsx
|
|
1632
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1633
|
+
function Input(_a) {
|
|
1634
|
+
var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
|
|
1490
1635
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1491
|
-
|
|
1492
|
-
|
|
1636
|
+
"input",
|
|
1637
|
+
__spreadValues({
|
|
1493
1638
|
className: cn(
|
|
1494
|
-
"
|
|
1639
|
+
"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",
|
|
1640
|
+
"focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20",
|
|
1641
|
+
"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
|
1495
1642
|
className
|
|
1496
1643
|
),
|
|
1497
|
-
"data-slot": "
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
})
|
|
1644
|
+
"data-slot": "input",
|
|
1645
|
+
type
|
|
1646
|
+
}, props)
|
|
1501
1647
|
);
|
|
1502
1648
|
}
|
|
1503
1649
|
|
|
1504
|
-
// src/components/ui/
|
|
1505
|
-
var
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
}
|
|
1511
|
-
function AccordionItem(_a) {
|
|
1512
|
-
var _b = _a, {
|
|
1513
|
-
className
|
|
1514
|
-
} = _b, props = __objRest(_b, [
|
|
1515
|
-
"className"
|
|
1516
|
-
]);
|
|
1650
|
+
// src/components/ui/label.tsx
|
|
1651
|
+
var import_jsx_runtime13 = (
|
|
1652
|
+
// eslint-disable-next-line jsx-a11y/label-has-associated-control -- htmlFor is passed by the consumer
|
|
1653
|
+
require("react/jsx-runtime")
|
|
1654
|
+
);
|
|
1655
|
+
function Label(_a) {
|
|
1656
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1517
1657
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1518
|
-
|
|
1658
|
+
"label",
|
|
1519
1659
|
__spreadValues({
|
|
1520
|
-
className: cn(
|
|
1521
|
-
|
|
1660
|
+
className: cn(
|
|
1661
|
+
"flex items-center gap-2 text-label-medium leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
1662
|
+
className
|
|
1663
|
+
),
|
|
1664
|
+
"data-slot": "label"
|
|
1522
1665
|
}, props)
|
|
1523
1666
|
);
|
|
1524
1667
|
}
|
|
1525
|
-
function AccordionContent(_a) {
|
|
1526
|
-
var _b = _a, {
|
|
1527
|
-
className,
|
|
1528
|
-
children
|
|
1529
|
-
} = _b, props = __objRest(_b, [
|
|
1530
|
-
"className",
|
|
1531
|
-
"children"
|
|
1532
|
-
]);
|
|
1533
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1534
|
-
import_accordion.Accordion.Panel,
|
|
1535
|
-
__spreadProps(__spreadValues({
|
|
1536
|
-
className: "overflow-hidden text-body-small h-(--accordion-panel-height) transition-[height] duration-200 ease-out data-starting-style:h-0 data-ending-style:h-0",
|
|
1537
|
-
"data-slot": "accordion-content"
|
|
1538
|
-
}, props), {
|
|
1539
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: cn("pb-4 text-muted-foreground", className), children })
|
|
1540
|
-
})
|
|
1541
|
-
);
|
|
1542
|
-
}
|
|
1543
1668
|
|
|
1544
|
-
// src/components/ui/
|
|
1545
|
-
var import_react3 = require("react");
|
|
1546
|
-
var import_lucide_react7 = require("lucide-react");
|
|
1547
|
-
var import_checkbox = require("@base-ui/react/checkbox");
|
|
1669
|
+
// src/components/ui/textarea.tsx
|
|
1548
1670
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1549
|
-
function
|
|
1671
|
+
function Textarea(_a) {
|
|
1550
1672
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
1551
1673
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1552
|
-
|
|
1553
|
-
|
|
1674
|
+
"textarea",
|
|
1675
|
+
__spreadValues({
|
|
1554
1676
|
className: cn(
|
|
1555
|
-
|
|
1556
|
-
"focus-visible:border-
|
|
1557
|
-
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
1558
|
-
"aria-invalid:border-destructive aria-invalid:ring-destructive/20",
|
|
1559
|
-
"data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground",
|
|
1560
|
-
"data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground",
|
|
1561
|
-
// Dark mode (upstream shadcn)
|
|
1562
|
-
"dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-checked:bg-primary",
|
|
1563
|
-
// Stacked (2 attr selectors) → wins over single-attr rules above
|
|
1564
|
-
"aria-invalid:data-checked:border-destructive aria-invalid:data-checked:bg-destructive aria-invalid:data-checked:text-destructive-foreground",
|
|
1565
|
-
"aria-invalid:data-indeterminate:border-destructive aria-invalid:data-indeterminate:bg-destructive aria-invalid:data-indeterminate:text-destructive-foreground",
|
|
1677
|
+
// WealthX: removed shadow-xs (flat panels), added font-sans
|
|
1678
|
+
"flex field-sizing-content min-h-16 w-full border border-input bg-transparent px-3 py-2 text-body-medium font-sans transition-[color,box-shadow] outline-none placeholder:font-normal placeholder:text-muted-foreground focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40",
|
|
1566
1679
|
className
|
|
1567
1680
|
),
|
|
1568
|
-
"data-slot": "
|
|
1569
|
-
}, props)
|
|
1570
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1571
|
-
import_checkbox.Checkbox.Indicator,
|
|
1572
|
-
{
|
|
1573
|
-
className: "grid place-content-center text-current transition-none",
|
|
1574
|
-
"data-slot": "checkbox-indicator",
|
|
1575
|
-
children: [
|
|
1576
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.CheckIcon, { className: "size-3.5 group-data-indeterminate:hidden" }),
|
|
1577
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react7.MinusIcon, { className: "size-3.5 hidden group-data-indeterminate:block" })
|
|
1578
|
-
]
|
|
1579
|
-
}
|
|
1580
|
-
)
|
|
1581
|
-
})
|
|
1681
|
+
"data-slot": "textarea"
|
|
1682
|
+
}, props)
|
|
1582
1683
|
);
|
|
1583
1684
|
}
|
|
1584
1685
|
|
|
@@ -1775,7 +1876,7 @@ function CalendarDayButton(_a) {
|
|
|
1775
1876
|
defaultClassNames.day,
|
|
1776
1877
|
className
|
|
1777
1878
|
),
|
|
1778
|
-
"data-day": day.date.
|
|
1879
|
+
"data-day": formatDateShort(day.date.toISOString()),
|
|
1779
1880
|
"data-range-end": modifiers.range_end,
|
|
1780
1881
|
"data-range-middle": modifiers.range_middle,
|
|
1781
1882
|
"data-range-start": modifiers.range_start,
|
|
@@ -2407,7 +2508,7 @@ function OwnershipSplit({
|
|
|
2407
2508
|
}
|
|
2408
2509
|
|
|
2409
2510
|
// src/components/ui/opportunity-edit-modals.tsx
|
|
2410
|
-
var
|
|
2511
|
+
var import_accordion4 = require("@base-ui/react/accordion");
|
|
2411
2512
|
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2412
2513
|
var LOAN_PURPOSES = [
|
|
2413
2514
|
"Purchase a home",
|
|
@@ -2629,9 +2730,9 @@ function AccordionItemHeader({
|
|
|
2629
2730
|
onRemove,
|
|
2630
2731
|
removeLabel = "Remove item"
|
|
2631
2732
|
}) {
|
|
2632
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
2733
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_accordion4.Accordion.Header, { className: "flex items-center", children: [
|
|
2633
2734
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
2634
|
-
|
|
2735
|
+
import_accordion4.Accordion.Trigger,
|
|
2635
2736
|
{
|
|
2636
2737
|
className: cn(
|
|
2637
2738
|
"flex flex-1 items-center justify-between gap-4 py-4 text-left",
|
|
@@ -4315,19 +4416,9 @@ function lvrColorClass(pct) {
|
|
|
4315
4416
|
}
|
|
4316
4417
|
function serviceabilityInfo(surplus) {
|
|
4317
4418
|
if (surplus > 1500)
|
|
4318
|
-
return {
|
|
4319
|
-
|
|
4320
|
-
|
|
4321
|
-
};
|
|
4322
|
-
if (surplus > 0)
|
|
4323
|
-
return {
|
|
4324
|
-
label: "Borderline",
|
|
4325
|
-
badgeClass: "bg-amber-50 text-amber-700 border border-amber-200"
|
|
4326
|
-
};
|
|
4327
|
-
return {
|
|
4328
|
-
label: "At Risk",
|
|
4329
|
-
badgeClass: "bg-red-50 text-destructive border border-red-200"
|
|
4330
|
-
};
|
|
4419
|
+
return { label: "Likely Serviceable", variant: "success" };
|
|
4420
|
+
if (surplus > 0) return { label: "Borderline", variant: "warning" };
|
|
4421
|
+
return { label: "At Risk", variant: "destructive" };
|
|
4331
4422
|
}
|
|
4332
4423
|
function SectionEditButton({
|
|
4333
4424
|
onClick,
|
|
@@ -4428,7 +4519,7 @@ function HeroBand({
|
|
|
4428
4519
|
}
|
|
4429
4520
|
)
|
|
4430
4521
|
] }),
|
|
4431
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4522
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Badge, { variant: svc.variant, children: svc.label })
|
|
4432
4523
|
] })
|
|
4433
4524
|
] });
|
|
4434
4525
|
}
|
|
@@ -4453,14 +4544,15 @@ function ApplicantCardTab({
|
|
|
4453
4544
|
)
|
|
4454
4545
|
);
|
|
4455
4546
|
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex flex-col gap-4 py-4", children: [
|
|
4456
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "
|
|
4457
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
4547
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "border border-border", children: [
|
|
4548
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
|
|
4458
4549
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialSectionLabel, { children: "About" }),
|
|
4459
4550
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SectionEditButton, { onClick: onEditAbout, title: "Edit About" })
|
|
4460
4551
|
] }),
|
|
4461
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4552
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4462
4553
|
AboutCard,
|
|
4463
4554
|
{
|
|
4555
|
+
borderless: true,
|
|
4464
4556
|
title: about.title,
|
|
4465
4557
|
firstName: about.firstName,
|
|
4466
4558
|
lastName: about.lastName,
|
|
@@ -4470,6 +4562,7 @@ function ApplicantCardTab({
|
|
|
4470
4562
|
gender: about.gender,
|
|
4471
4563
|
maritalStatus: about.maritalStatus,
|
|
4472
4564
|
numDependants: about.numDependants,
|
|
4565
|
+
dependants: about.dependants,
|
|
4473
4566
|
citizenStatus: about.citizenStatus,
|
|
4474
4567
|
residentialAddress: about.residentialAddress,
|
|
4475
4568
|
residentialStatus: about.residentialStatus,
|
|
@@ -4480,16 +4573,17 @@ function ApplicantCardTab({
|
|
|
4480
4573
|
propertyInTrust: about.propertyInTrust,
|
|
4481
4574
|
companyOwnership: about.companyOwnership
|
|
4482
4575
|
}
|
|
4483
|
-
)
|
|
4576
|
+
) })
|
|
4484
4577
|
] }),
|
|
4485
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "
|
|
4486
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
4578
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "border border-border", children: [
|
|
4579
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
|
|
4487
4580
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialSectionLabel, { children: "Income" }),
|
|
4488
4581
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SectionEditButton, { onClick: onEditIncome, title: "Edit Income" })
|
|
4489
4582
|
] }),
|
|
4490
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4583
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4491
4584
|
IncomeCard,
|
|
4492
4585
|
{
|
|
4586
|
+
borderless: true,
|
|
4493
4587
|
items: income.items.map((i) => ({
|
|
4494
4588
|
incomeType: i.incomeType,
|
|
4495
4589
|
jobTitle: i.jobTitle,
|
|
@@ -4503,26 +4597,133 @@ function ApplicantCardTab({
|
|
|
4503
4597
|
})),
|
|
4504
4598
|
totalMonthly: totalMonthlyIncome
|
|
4505
4599
|
}
|
|
4506
|
-
)
|
|
4600
|
+
) })
|
|
4507
4601
|
] }),
|
|
4508
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "
|
|
4509
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
4602
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "border border-border", children: [
|
|
4603
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
|
|
4510
4604
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialSectionLabel, { children: "Expenses" }),
|
|
4511
4605
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SectionEditButton, { onClick: onEditExpenses, title: "Edit Expenses" })
|
|
4512
4606
|
] }),
|
|
4513
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4607
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4514
4608
|
ExpensesCard,
|
|
4515
4609
|
{
|
|
4610
|
+
borderless: true,
|
|
4516
4611
|
items: expenses.items.map((e) => ({
|
|
4517
4612
|
expenseType: e.expenseType,
|
|
4518
4613
|
amountLabel: `${formatCurrency(e.amount)} / ${e.frequency}`
|
|
4519
4614
|
})),
|
|
4520
4615
|
totalMonthly: totalMonthlyExpenses
|
|
4521
4616
|
}
|
|
4522
|
-
)
|
|
4617
|
+
) })
|
|
4523
4618
|
] })
|
|
4524
4619
|
] });
|
|
4525
4620
|
}
|
|
4621
|
+
var STATUS_OPTIONS = ["verified", "pending", "rejected"];
|
|
4622
|
+
var STATUS_CONFIG = {
|
|
4623
|
+
verified: {
|
|
4624
|
+
Icon: import_lucide_react12.CheckCircle2,
|
|
4625
|
+
label: "Verified",
|
|
4626
|
+
iconCls: "text-success",
|
|
4627
|
+
triggerCls: "border-success text-success"
|
|
4628
|
+
},
|
|
4629
|
+
pending: {
|
|
4630
|
+
Icon: import_lucide_react12.AlertCircle,
|
|
4631
|
+
label: "Pending",
|
|
4632
|
+
iconCls: "text-warning",
|
|
4633
|
+
triggerCls: "border-warning text-warning"
|
|
4634
|
+
},
|
|
4635
|
+
rejected: {
|
|
4636
|
+
Icon: import_lucide_react12.AlertCircle,
|
|
4637
|
+
label: "Rejected",
|
|
4638
|
+
iconCls: "text-destructive",
|
|
4639
|
+
triggerCls: "border-destructive text-destructive"
|
|
4640
|
+
}
|
|
4641
|
+
};
|
|
4642
|
+
function DocRow({
|
|
4643
|
+
doc,
|
|
4644
|
+
status,
|
|
4645
|
+
isSelected,
|
|
4646
|
+
uploaderName,
|
|
4647
|
+
onRowClick,
|
|
4648
|
+
onStatusChange
|
|
4649
|
+
}) {
|
|
4650
|
+
const {
|
|
4651
|
+
Icon: StatusIcon,
|
|
4652
|
+
label: statusLabel,
|
|
4653
|
+
iconCls,
|
|
4654
|
+
triggerCls
|
|
4655
|
+
} = STATUS_CONFIG[status];
|
|
4656
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
4657
|
+
"div",
|
|
4658
|
+
{
|
|
4659
|
+
onClick: onRowClick,
|
|
4660
|
+
className: cn(
|
|
4661
|
+
"flex min-h-[44px] cursor-pointer items-center gap-3 px-4 transition-colors",
|
|
4662
|
+
isSelected ? "bg-primary/5" : "hover:bg-muted/40"
|
|
4663
|
+
),
|
|
4664
|
+
children: [
|
|
4665
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Checkbox, { checked: isSelected, onCheckedChange: () => onRowClick() }) }),
|
|
4666
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.FileText, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
4667
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
4668
|
+
doc.url ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4669
|
+
"a",
|
|
4670
|
+
{
|
|
4671
|
+
href: doc.url,
|
|
4672
|
+
target: "_blank",
|
|
4673
|
+
rel: "noreferrer",
|
|
4674
|
+
onClick: (e) => e.stopPropagation(),
|
|
4675
|
+
className: "w-fit text-label-medium text-foreground underline-offset-2 hover:underline",
|
|
4676
|
+
children: doc.name
|
|
4677
|
+
}
|
|
4678
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-label-medium text-foreground", children: doc.name }),
|
|
4679
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
|
|
4680
|
+
doc.documentType,
|
|
4681
|
+
doc.checklistItem ? ` \xB7 ${doc.checklistItem}` : ""
|
|
4682
|
+
] })
|
|
4683
|
+
] }),
|
|
4684
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Badge, { variant: "secondary", className: "shrink-0", children: uploaderName }),
|
|
4685
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "shrink-0", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
4686
|
+
Select,
|
|
4687
|
+
{
|
|
4688
|
+
value: status,
|
|
4689
|
+
onValueChange: (v) => onStatusChange(v),
|
|
4690
|
+
children: [
|
|
4691
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
4692
|
+
SelectTrigger,
|
|
4693
|
+
{
|
|
4694
|
+
size: "sm",
|
|
4695
|
+
className: cn("h-7 w-[116px] gap-1.5 text-xs", triggerCls),
|
|
4696
|
+
children: [
|
|
4697
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusIcon, { className: cn("size-3.5", iconCls) }),
|
|
4698
|
+
statusLabel
|
|
4699
|
+
]
|
|
4700
|
+
}
|
|
4701
|
+
),
|
|
4702
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SelectContent, { children: STATUS_OPTIONS.map((v) => {
|
|
4703
|
+
const { Icon, label, iconCls: iconCls2 } = STATUS_CONFIG[v];
|
|
4704
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SelectItem, { value: v, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "flex items-center gap-1.5", children: [
|
|
4705
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { className: cn("size-3.5", iconCls2) }),
|
|
4706
|
+
label
|
|
4707
|
+
] }) }, v);
|
|
4708
|
+
}) })
|
|
4709
|
+
]
|
|
4710
|
+
}
|
|
4711
|
+
) }),
|
|
4712
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "shrink-0 text-xs text-muted-foreground", children: doc.uploadedAt }),
|
|
4713
|
+
doc.url && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4714
|
+
"a",
|
|
4715
|
+
{
|
|
4716
|
+
href: doc.url,
|
|
4717
|
+
download: true,
|
|
4718
|
+
onClick: (e) => e.stopPropagation(),
|
|
4719
|
+
className: "shrink-0 text-muted-foreground transition-colors hover:text-foreground",
|
|
4720
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.Download, { className: "size-4" })
|
|
4721
|
+
}
|
|
4722
|
+
)
|
|
4723
|
+
]
|
|
4724
|
+
}
|
|
4725
|
+
);
|
|
4726
|
+
}
|
|
4526
4727
|
function OpportunitySummaryTab({
|
|
4527
4728
|
isJoint = false,
|
|
4528
4729
|
loanScenario,
|
|
@@ -4542,14 +4743,64 @@ function OpportunitySummaryTab({
|
|
|
4542
4743
|
coIncome,
|
|
4543
4744
|
onCoIncomeChange,
|
|
4544
4745
|
coExpenses,
|
|
4545
|
-
onCoExpensesChange
|
|
4746
|
+
onCoExpensesChange,
|
|
4747
|
+
documents = [],
|
|
4748
|
+
onDocumentsDownload,
|
|
4749
|
+
onDocumentStatusChange
|
|
4546
4750
|
}) {
|
|
4547
4751
|
var _a, _b;
|
|
4548
4752
|
const [portalEl, setPortalEl] = (0, import_react4.useState)(null);
|
|
4549
4753
|
const [summarySubTab, setSummarySubTab] = (0, import_react4.useState)(
|
|
4550
4754
|
"joint"
|
|
4551
4755
|
);
|
|
4552
|
-
const [
|
|
4756
|
+
const [selectedDocIds, setSelectedDocIds] = (0, import_react4.useState)(/* @__PURE__ */ new Set());
|
|
4757
|
+
function toggleDocSelection(id) {
|
|
4758
|
+
setSelectedDocIds((prev) => {
|
|
4759
|
+
const next = new Set(prev);
|
|
4760
|
+
if (next.has(id)) next.delete(id);
|
|
4761
|
+
else next.add(id);
|
|
4762
|
+
return next;
|
|
4763
|
+
});
|
|
4764
|
+
}
|
|
4765
|
+
const [docStatusOverrides, setDocStatusOverrides] = (0, import_react4.useState)({});
|
|
4766
|
+
function handleDocStatusChange(docId, status) {
|
|
4767
|
+
setDocStatusOverrides((prev) => __spreadProps(__spreadValues({}, prev), { [docId]: status }));
|
|
4768
|
+
onDocumentStatusChange == null ? void 0 : onDocumentStatusChange(docId, status);
|
|
4769
|
+
}
|
|
4770
|
+
function effectiveStatus(doc) {
|
|
4771
|
+
var _a2;
|
|
4772
|
+
return (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
|
|
4773
|
+
}
|
|
4774
|
+
const checklistProgress = React10.useMemo(() => {
|
|
4775
|
+
var _a2, _b2;
|
|
4776
|
+
const map = /* @__PURE__ */ new Map();
|
|
4777
|
+
for (const doc of documents) {
|
|
4778
|
+
if (!doc.checklistItem) continue;
|
|
4779
|
+
const st = (_a2 = docStatusOverrides[doc.id]) != null ? _a2 : doc.status;
|
|
4780
|
+
const entry = (_b2 = map.get(doc.checklistItem)) != null ? _b2 : {
|
|
4781
|
+
count: 0,
|
|
4782
|
+
hasVerified: false,
|
|
4783
|
+
hasPending: false
|
|
4784
|
+
};
|
|
4785
|
+
entry.count += 1;
|
|
4786
|
+
if (st === "verified") entry.hasVerified = true;
|
|
4787
|
+
if (st === "pending") entry.hasPending = true;
|
|
4788
|
+
map.set(doc.checklistItem, entry);
|
|
4789
|
+
}
|
|
4790
|
+
return Array.from(map.entries()).map(([name, data]) => __spreadValues({ name }, data));
|
|
4791
|
+
}, [documents, docStatusOverrides]);
|
|
4792
|
+
const groupedDocs = React10.useMemo(() => {
|
|
4793
|
+
var _a2;
|
|
4794
|
+
if (documents.length <= 5 || !documents.some((d) => d.checklistItem))
|
|
4795
|
+
return null;
|
|
4796
|
+
const groups = {};
|
|
4797
|
+
for (const doc of documents) {
|
|
4798
|
+
const key = (_a2 = doc.checklistItem) != null ? _a2 : "Other";
|
|
4799
|
+
if (!groups[key]) groups[key] = [];
|
|
4800
|
+
groups[key].push(doc);
|
|
4801
|
+
}
|
|
4802
|
+
return groups;
|
|
4803
|
+
}, [documents]);
|
|
4553
4804
|
const [editLoanOpen, setEditLoanOpen] = (0, import_react4.useState)(false);
|
|
4554
4805
|
const [editAssetsOpen, setEditAssetsOpen] = (0, import_react4.useState)(false);
|
|
4555
4806
|
const [editDebtsOpen, setEditDebtsOpen] = (0, import_react4.useState)(false);
|
|
@@ -4593,20 +4844,7 @@ function OpportunitySummaryTab({
|
|
|
4593
4844
|
),
|
|
4594
4845
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "mb-4 border border-border", children: [
|
|
4595
4846
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
|
|
4596
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.
|
|
4597
|
-
Button,
|
|
4598
|
-
{
|
|
4599
|
-
type: "button",
|
|
4600
|
-
variant: "ghost",
|
|
4601
|
-
className: "h-auto flex-1 justify-start gap-2 px-0 text-left",
|
|
4602
|
-
onClick: () => setLoanScenarioExpanded((v) => !v),
|
|
4603
|
-
"aria-expanded": loanScenarioExpanded,
|
|
4604
|
-
children: [
|
|
4605
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialSectionLabel, { children: "Loan Scenario" }),
|
|
4606
|
-
loanScenarioExpanded ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.ChevronUp, { className: "size-3.5 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.ChevronDown, { className: "size-3.5 text-muted-foreground" })
|
|
4607
|
-
]
|
|
4608
|
-
}
|
|
4609
|
-
),
|
|
4847
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialSectionLabel, { children: "Loan Scenario" }),
|
|
4610
4848
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4611
4849
|
SectionEditButton,
|
|
4612
4850
|
{
|
|
@@ -4615,7 +4853,7 @@ function OpportunitySummaryTab({
|
|
|
4615
4853
|
}
|
|
4616
4854
|
)
|
|
4617
4855
|
] }),
|
|
4618
|
-
|
|
4856
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "grid grid-cols-4 gap-x-6 gap-y-4 border-t border-border p-4", children: [
|
|
4619
4857
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialDetailField, { label: "Lending Type", value: "Home Loan" }),
|
|
4620
4858
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
4621
4859
|
FinancialDetailField,
|
|
@@ -4749,8 +4987,87 @@ function OpportunitySummaryTab({
|
|
|
4749
4987
|
] })
|
|
4750
4988
|
] }),
|
|
4751
4989
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "border border-border", children: [
|
|
4752
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.
|
|
4753
|
-
|
|
4990
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex min-h-[40px] items-center justify-between px-4", children: [
|
|
4991
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FinancialSectionLabel, { children: "Documents" }),
|
|
4992
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
4993
|
+
selectedDocIds.size > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
4994
|
+
Button,
|
|
4995
|
+
{
|
|
4996
|
+
size: "sm",
|
|
4997
|
+
variant: "outline-secondary",
|
|
4998
|
+
className: "h-7 gap-1.5 text-xs",
|
|
4999
|
+
onClick: () => {
|
|
5000
|
+
const selected = documents.filter(
|
|
5001
|
+
(d) => selectedDocIds.has(d.id)
|
|
5002
|
+
);
|
|
5003
|
+
onDocumentsDownload == null ? void 0 : onDocumentsDownload(selected);
|
|
5004
|
+
},
|
|
5005
|
+
children: [
|
|
5006
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.Download, { className: "size-3.5" }),
|
|
5007
|
+
"Download (",
|
|
5008
|
+
selectedDocIds.size,
|
|
5009
|
+
")"
|
|
5010
|
+
]
|
|
5011
|
+
}
|
|
5012
|
+
),
|
|
5013
|
+
documents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
|
|
5014
|
+
documents.length,
|
|
5015
|
+
" file",
|
|
5016
|
+
documents.length !== 1 ? "s" : ""
|
|
5017
|
+
] })
|
|
5018
|
+
] })
|
|
5019
|
+
] }),
|
|
5020
|
+
checklistProgress.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-wrap gap-x-4 gap-y-1.5 border-t border-border px-4 py-3", children: checklistProgress.map((cat) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
5021
|
+
"span",
|
|
5022
|
+
{
|
|
5023
|
+
className: cn(
|
|
5024
|
+
"flex items-center gap-1 text-xs",
|
|
5025
|
+
cat.hasVerified ? "text-success" : "text-warning"
|
|
5026
|
+
),
|
|
5027
|
+
children: [
|
|
5028
|
+
cat.hasVerified ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.CheckCircle2, { className: "size-3.5 shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react12.AlertCircle, { className: "size-3.5 shrink-0" }),
|
|
5029
|
+
cat.name,
|
|
5030
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "text-muted-foreground", children: [
|
|
5031
|
+
"(",
|
|
5032
|
+
cat.count,
|
|
5033
|
+
")"
|
|
5034
|
+
] })
|
|
5035
|
+
]
|
|
5036
|
+
},
|
|
5037
|
+
cat.name
|
|
5038
|
+
)) }),
|
|
5039
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "border-t border-border", children: documents.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "px-4 py-4 text-body-small text-muted-foreground", children: "No documents uploaded yet." }) : groupedDocs ? (
|
|
5040
|
+
// Grouped by checklistItem
|
|
5041
|
+
Object.entries(groupedDocs).map(([category, docs]) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
|
|
5042
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "bg-muted/30 px-4 py-1.5 text-xs font-medium text-muted-foreground", children: category }),
|
|
5043
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-col divide-y divide-border", children: docs.map((doc) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
5044
|
+
DocRow,
|
|
5045
|
+
{
|
|
5046
|
+
doc,
|
|
5047
|
+
status: effectiveStatus(doc),
|
|
5048
|
+
isSelected: selectedDocIds.has(doc.id),
|
|
5049
|
+
uploaderName: doc.uploadedBy === "main" ? mainAbout.firstName || "Main" : (coAbout == null ? void 0 : coAbout.firstName) || "Co",
|
|
5050
|
+
onRowClick: () => toggleDocSelection(doc.id),
|
|
5051
|
+
onStatusChange: (s) => handleDocStatusChange(doc.id, s)
|
|
5052
|
+
},
|
|
5053
|
+
doc.id
|
|
5054
|
+
)) })
|
|
5055
|
+
] }, category))
|
|
5056
|
+
) : (
|
|
5057
|
+
// Flat list
|
|
5058
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-col divide-y divide-border", children: documents.map((doc) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
5059
|
+
DocRow,
|
|
5060
|
+
{
|
|
5061
|
+
doc,
|
|
5062
|
+
status: effectiveStatus(doc),
|
|
5063
|
+
isSelected: selectedDocIds.has(doc.id),
|
|
5064
|
+
uploaderName: doc.uploadedBy === "main" ? mainAbout.firstName || "Main" : (coAbout == null ? void 0 : coAbout.firstName) || "Co",
|
|
5065
|
+
onRowClick: () => toggleDocSelection(doc.id),
|
|
5066
|
+
onStatusChange: (s) => handleDocStatusChange(doc.id, s)
|
|
5067
|
+
},
|
|
5068
|
+
doc.id
|
|
5069
|
+
)) })
|
|
5070
|
+
) })
|
|
4754
5071
|
] }),
|
|
4755
5072
|
propertyCards.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "border border-border", children: [
|
|
4756
5073
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between px-4 py-2.5", children: [
|
|
@@ -4785,7 +5102,7 @@ function OpportunitySummaryTab({
|
|
|
4785
5102
|
}
|
|
4786
5103
|
)
|
|
4787
5104
|
] }),
|
|
4788
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "grid grid-cols-2 gap-3 p-4", children: debts.map((debt) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DebtCard, __spreadValues({}, debtToCard(debt)), debt.id)) })
|
|
5105
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "grid grid-cols-2 gap-3 border-t border-border p-4", children: debts.map((debt) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DebtCard, __spreadValues({}, debtToCard(debt)), debt.id)) })
|
|
4789
5106
|
] })
|
|
4790
5107
|
] }),
|
|
4791
5108
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TabsContent, { value: "main", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|