@wealthx/shadcn 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +193 -149
- package/CHANGELOG.md +28 -0
- package/dist/{chunk-4Y6R4WEC.mjs → chunk-2A5RRQGG.mjs} +9 -22
- package/dist/{chunk-TS2ZX2VS.mjs → chunk-2UM72RJ7.mjs} +11 -15
- package/dist/{chunk-A56YQQHG.mjs → chunk-3NCUZIFP.mjs} +2 -2
- package/dist/chunk-3OYFOX3X.mjs +79 -0
- package/dist/{chunk-RP3SQYA3.mjs → chunk-3TTACBDP.mjs} +9 -4
- package/dist/chunk-4GAWMKMI.mjs +710 -0
- package/dist/{chunk-VGSESELX.mjs → chunk-5FQIKDKP.mjs} +5 -5
- package/dist/{chunk-K3JYD4IU.mjs → chunk-5IS7G74I.mjs} +11 -4
- package/dist/chunk-6AW4KJHE.mjs +235 -0
- package/dist/chunk-6CR5N2JW.mjs +302 -0
- package/dist/{chunk-XIRTEFKH.mjs → chunk-6DZEXFNB.mjs} +36 -8
- package/dist/chunk-6O6KD7CE.mjs +271 -0
- package/dist/chunk-7PV3IWCN.mjs +33 -0
- package/dist/{chunk-SPJ5KXW7.mjs → chunk-7S5AESZO.mjs} +5 -5
- package/dist/{chunk-RYCLWMZ7.mjs → chunk-ABFDMHOR.mjs} +9 -7
- package/dist/{chunk-SWGT756Z.mjs → chunk-AMQZRHEZ.mjs} +10 -4
- package/dist/{chunk-WAZD7NFU.mjs → chunk-BKNFWEH2.mjs} +6 -6
- package/dist/{chunk-CLIN5525.mjs → chunk-C7CQJNMR.mjs} +1 -1
- package/dist/{chunk-D4ILTPOG.mjs → chunk-CFMQP5QS.mjs} +5 -4
- package/dist/{chunk-VPBN3WOO.mjs → chunk-DGHAXJBN.mjs} +9 -7
- package/dist/chunk-DOEO3CDL.mjs +27 -0
- package/dist/{chunk-5MEWU56Z.mjs → chunk-DUJTAXMH.mjs} +11 -6
- package/dist/{chunk-GGM2UYGG.mjs → chunk-EBXQWIYG.mjs} +10 -4
- package/dist/chunk-EWRB4PAD.mjs +468 -0
- package/dist/{chunk-ZSHYDDRB.mjs → chunk-FAKPBKLT.mjs} +6 -2
- package/dist/{chunk-A6AAWBPF.mjs → chunk-GHC7LLUX.mjs} +13 -4
- package/dist/chunk-HBZLGDIN.mjs +507 -0
- package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
- package/dist/{chunk-CGH4DRNG.mjs → chunk-HVY6KCCF.mjs} +10 -7
- package/dist/chunk-I3RZS7V2.mjs +136 -0
- package/dist/chunk-IAE3F7DR.mjs +1962 -0
- package/dist/{chunk-UT4KJR7V.mjs → chunk-IHMFS7NZ.mjs} +35 -74
- package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
- package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
- package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
- package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
- package/dist/chunk-LV35NGVG.mjs +272 -0
- package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
- package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
- package/dist/chunk-MIZQHHUO.mjs +441 -0
- package/dist/chunk-MLNEWRWV.mjs +449 -0
- package/dist/chunk-MN5NYQCL.mjs +29 -0
- package/dist/chunk-NL3ZO62D.mjs +31 -0
- package/dist/{chunk-Q76O3RIQ.mjs → chunk-NMOI6CQD.mjs} +1 -1
- package/dist/{chunk-P6AM5V7O.mjs → chunk-OODBHKG7.mjs} +1 -1
- package/dist/chunk-PBL4OQV2.mjs +283 -0
- package/dist/{chunk-Y4QFWRNR.mjs → chunk-PU4YZQXV.mjs} +17 -18
- package/dist/chunk-Q2BGOAMG.mjs +202 -0
- package/dist/chunk-QMY3AZJH.mjs +80 -0
- package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
- package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
- package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
- package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
- package/dist/chunk-UMTOX62O.mjs +415 -0
- package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
- package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
- package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
- package/dist/components/ui/add-column-modal.js +42 -14
- package/dist/components/ui/add-column-modal.mjs +5 -5
- package/dist/components/ui/add-lead-modal.js +42 -11
- package/dist/components/ui/add-lead-modal.mjs +3 -3
- package/dist/components/ui/advisor-card.js +530 -0
- package/dist/components/ui/advisor-card.mjs +15 -0
- package/dist/components/ui/ai-assistant-drawer.js +11 -10
- package/dist/components/ui/ai-assistant-drawer.mjs +3 -3
- package/dist/components/ui/alert-dialog.js +2 -2
- package/dist/components/ui/alert-dialog.mjs +2 -2
- package/dist/components/ui/appointment-action-dialogs.js +1160 -0
- package/dist/components/ui/appointment-action-dialogs.mjs +23 -0
- package/dist/components/ui/appointment-availability-settings.js +1590 -0
- package/dist/components/ui/appointment-availability-settings.mjs +23 -0
- package/dist/components/ui/appointment-book-dialog.js +1744 -0
- package/dist/components/ui/appointment-book-dialog.mjs +27 -0
- package/dist/components/ui/appointment-calendar-view.js +833 -0
- package/dist/components/ui/appointment-calendar-view.mjs +14 -0
- package/dist/components/ui/appointment-detail-sheet.js +1517 -0
- package/dist/components/ui/appointment-detail-sheet.mjs +24 -0
- package/dist/components/ui/appointment-gmail-connect.js +467 -0
- package/dist/components/ui/appointment-gmail-connect.mjs +14 -0
- package/dist/components/ui/appointment-mini-card.js +345 -0
- package/dist/components/ui/appointment-mini-card.mjs +11 -0
- package/dist/components/ui/appointment-time-slot-picker.js +311 -0
- package/dist/components/ui/appointment-time-slot-picker.mjs +13 -0
- package/dist/components/ui/appointment-upcoming-card.js +1268 -0
- package/dist/components/ui/appointment-upcoming-card.mjs +21 -0
- package/dist/components/ui/backoffice-alert-history-chart.js +11 -5
- package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -4
- package/dist/components/ui/backoffice-alerts-chart.js +786 -0
- package/dist/components/ui/backoffice-alerts-chart.mjs +19 -0
- package/dist/components/ui/backoffice-connections-chart.js +817 -0
- package/dist/components/ui/backoffice-connections-chart.mjs +19 -0
- package/dist/components/ui/backoffice-contact-history-chart.js +11 -5
- package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -4
- package/dist/components/ui/badge.js +6 -6
- package/dist/components/ui/badge.mjs +1 -1
- package/dist/components/ui/borrowing-capacity-line-chart.js +30 -21
- package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -4
- package/dist/components/ui/button.js +2 -2
- package/dist/components/ui/button.mjs +1 -1
- package/dist/components/ui/calendar.js +2 -2
- package/dist/components/ui/calendar.mjs +2 -2
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/card.mjs +1 -1
- package/dist/components/ui/cash-balance-line-chart.js +31 -23
- package/dist/components/ui/cash-balance-line-chart.mjs +5 -4
- package/dist/components/ui/cashflow-bar-chart.js +12 -5
- package/dist/components/ui/cashflow-bar-chart.mjs +5 -4
- package/dist/components/ui/chip.js +97 -18
- package/dist/components/ui/chip.mjs +3 -2
- package/dist/components/ui/color-picker.js +158 -28
- package/dist/components/ui/color-picker.mjs +3 -1
- package/dist/components/ui/data-table.js +140 -119
- package/dist/components/ui/data-table.mjs +3 -2
- package/dist/components/ui/date-picker.js +48 -27
- package/dist/components/ui/date-picker.mjs +4 -3
- package/dist/components/ui/dialog.js +37 -9
- package/dist/components/ui/dialog.mjs +2 -2
- package/dist/components/ui/expense-bar-chart.js +12 -5
- package/dist/components/ui/expense-bar-chart.mjs +5 -4
- package/dist/components/ui/field.mjs +2 -2
- package/dist/components/ui/financial-cards.js +322 -155
- package/dist/components/ui/financial-cards.mjs +5 -3
- package/dist/components/ui/financial-drawers.js +2 -2
- package/dist/components/ui/financial-drawers.mjs +3 -3
- package/dist/components/ui/financial-sections.js +14 -10
- package/dist/components/ui/financial-sections.mjs +6 -5
- package/dist/components/ui/income-bar-chart.js +12 -5
- package/dist/components/ui/income-bar-chart.mjs +5 -4
- package/dist/components/ui/input-group.js +2 -2
- package/dist/components/ui/input-group.mjs +2 -2
- package/dist/components/ui/kanban-column.js +52 -44
- package/dist/components/ui/kanban-column.mjs +7 -5
- package/dist/components/ui/opportunity-card.js +52 -44
- package/dist/components/ui/opportunity-card.mjs +6 -4
- package/dist/components/ui/opportunity-edit-modals.js +1367 -1263
- package/dist/components/ui/opportunity-edit-modals.mjs +8 -8
- package/dist/components/ui/opportunity-summary-tab.js +2744 -2157
- package/dist/components/ui/opportunity-summary-tab.mjs +14 -14
- package/dist/components/ui/page-header.js +92 -0
- package/dist/components/ui/page-header.mjs +8 -0
- package/dist/components/ui/page-top-bar.js +88 -0
- package/dist/components/ui/page-top-bar.mjs +8 -0
- package/dist/components/ui/pagination.js +303 -19
- package/dist/components/ui/pagination.mjs +11 -4
- package/dist/components/ui/pipeline-board.js +205 -191
- package/dist/components/ui/pipeline-board.mjs +9 -7
- package/dist/components/ui/pipeline-dialogs.js +114 -65
- package/dist/components/ui/pipeline-dialogs.mjs +7 -6
- package/dist/components/ui/pipeline-primitives.js +6 -6
- package/dist/components/ui/pipeline-primitives.mjs +2 -2
- package/dist/components/ui/property-cashflow-doughnut-chart.js +14 -12
- package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -4
- package/dist/components/ui/property-debt-equity-doughnut-chart.js +14 -12
- package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -4
- package/dist/components/ui/property-mobile-estimate-line-chart.js +16 -14
- package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -4
- package/dist/components/ui/sidebar-nav.js +426 -191
- package/dist/components/ui/sidebar-nav.mjs +5 -1
- package/dist/components/ui/stage-timeline.js +6 -6
- package/dist/components/ui/stage-timeline.mjs +3 -3
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +18 -16
- package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -4
- package/dist/components/ui/transactions-income-expense-bar-chart.js +28 -12
- package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -4
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +18 -16
- package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -4
- package/dist/index.js +12258 -8611
- package/dist/index.mjs +258 -190
- package/dist/styles.css +1 -1
- package/package.json +71 -1
- package/src/components/index.tsx +115 -9
- package/src/components/ui/add-column-modal.tsx +7 -7
- package/src/components/ui/add-lead-modal.tsx +6 -3
- package/src/components/ui/advisor-card.tsx +284 -0
- package/src/components/ui/ai-assistant-drawer.tsx +4 -3
- package/src/components/ui/appointment-action-dialogs.tsx +297 -0
- package/src/components/ui/appointment-availability-settings.tsx +645 -0
- package/src/components/ui/appointment-book-dialog.tsx +618 -0
- package/src/components/ui/appointment-calendar-view.tsx +510 -0
- package/src/components/ui/appointment-detail-sheet.tsx +415 -0
- package/src/components/ui/appointment-gmail-connect.tsx +188 -0
- package/src/components/ui/appointment-mini-card.tsx +104 -0
- package/src/components/ui/appointment-time-slot-picker.tsx +123 -0
- package/src/components/ui/appointment-upcoming-card.tsx +635 -0
- package/src/components/ui/backoffice-alert-history-chart.tsx +10 -2
- package/src/components/ui/backoffice-alerts-chart.tsx +312 -0
- package/src/components/ui/backoffice-connections-chart.tsx +339 -0
- package/src/components/ui/backoffice-contact-history-chart.tsx +10 -2
- package/src/components/ui/badge.tsx +12 -6
- package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -11
- package/src/components/ui/button.tsx +2 -2
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/cash-balance-line-chart.tsx +4 -23
- package/src/components/ui/cashflow-bar-chart.tsx +9 -2
- package/src/components/ui/chart-shared.tsx +4 -11
- package/src/components/ui/chip.tsx +23 -19
- package/src/components/ui/color-picker.tsx +4 -2
- package/src/components/ui/data-table.tsx +28 -74
- package/src/components/ui/date-picker.tsx +42 -37
- package/src/components/ui/dialog.tsx +72 -6
- package/src/components/ui/expense-bar-chart.tsx +11 -2
- package/src/components/ui/financial-cards.tsx +99 -10
- package/src/components/ui/income-bar-chart.tsx +11 -2
- package/src/components/ui/opportunity-card.tsx +10 -39
- package/src/components/ui/opportunity-edit-modals.tsx +98 -36
- package/src/components/ui/opportunity-summary-tab.tsx +548 -232
- package/src/components/ui/page-header.tsx +57 -0
- package/src/components/ui/page-top-bar.tsx +48 -0
- package/src/components/ui/pagination.tsx +171 -22
- package/src/components/ui/pipeline-board.tsx +12 -5
- package/src/components/ui/property-cashflow-doughnut-chart.tsx +3 -1
- package/src/components/ui/property-debt-equity-doughnut-chart.tsx +3 -1
- package/src/components/ui/property-mobile-estimate-line-chart.tsx +3 -1
- package/src/components/ui/sidebar-nav.tsx +213 -157
- package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +3 -1
- package/src/components/ui/transactions-income-expense-bar-chart.tsx +12 -9
- package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +3 -1
- package/src/lib/format-currency.ts +44 -0
- package/src/lib/format-date.ts +50 -0
- package/src/lib/opportunity-constants.ts +12 -0
- package/src/styles/globals.css +17 -15
- package/src/styles/styles-css.ts +1 -1
- package/tsup.config.ts +14 -0
- package/dist/chunk-S4QRUQNW.mjs +0 -475
- package/dist/chunk-URGMJAE3.mjs +0 -1885
- package/dist/chunk-WNGWBVLV.mjs +0 -148
- package/dist/chunk-ZRSDX6OW.mjs +0 -385
- package/dist/{chunk-LLVQKSU3.mjs → chunk-GD4BJDJR.mjs} +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wealthx/shadcn",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -173,6 +173,16 @@
|
|
|
173
173
|
"import": "./dist/components/ui/alert.mjs",
|
|
174
174
|
"require": "./dist/components/ui/alert.js"
|
|
175
175
|
},
|
|
176
|
+
"./page-header": {
|
|
177
|
+
"types": "./src/components/ui/page-header.tsx",
|
|
178
|
+
"import": "./dist/components/ui/page-header.mjs",
|
|
179
|
+
"require": "./dist/components/ui/page-header.js"
|
|
180
|
+
},
|
|
181
|
+
"./page-top-bar": {
|
|
182
|
+
"types": "./src/components/ui/page-top-bar.tsx",
|
|
183
|
+
"import": "./dist/components/ui/page-top-bar.mjs",
|
|
184
|
+
"require": "./dist/components/ui/page-top-bar.js"
|
|
185
|
+
},
|
|
176
186
|
"./pagination": {
|
|
177
187
|
"types": "./src/components/ui/pagination.tsx",
|
|
178
188
|
"import": "./dist/components/ui/pagination.mjs",
|
|
@@ -368,6 +378,16 @@
|
|
|
368
378
|
"import": "./dist/components/ui/backoffice-alert-history-chart.mjs",
|
|
369
379
|
"require": "./dist/components/ui/backoffice-alert-history-chart.js"
|
|
370
380
|
},
|
|
381
|
+
"./backoffice-alerts-chart": {
|
|
382
|
+
"types": "./src/components/ui/backoffice-alerts-chart.tsx",
|
|
383
|
+
"import": "./dist/components/ui/backoffice-alerts-chart.mjs",
|
|
384
|
+
"require": "./dist/components/ui/backoffice-alerts-chart.js"
|
|
385
|
+
},
|
|
386
|
+
"./backoffice-connections-chart": {
|
|
387
|
+
"types": "./src/components/ui/backoffice-connections-chart.tsx",
|
|
388
|
+
"import": "./dist/components/ui/backoffice-connections-chart.mjs",
|
|
389
|
+
"require": "./dist/components/ui/backoffice-connections-chart.js"
|
|
390
|
+
},
|
|
371
391
|
"./pipeline-primitives": {
|
|
372
392
|
"types": "./src/components/ui/pipeline-primitives.tsx",
|
|
373
393
|
"import": "./dist/components/ui/pipeline-primitives.mjs",
|
|
@@ -447,6 +467,56 @@
|
|
|
447
467
|
"types": "./src/components/ui/sidebar-nav.tsx",
|
|
448
468
|
"import": "./dist/components/ui/sidebar-nav.mjs",
|
|
449
469
|
"require": "./dist/components/ui/sidebar-nav.js"
|
|
470
|
+
},
|
|
471
|
+
"./appointment-time-slot-picker": {
|
|
472
|
+
"types": "./src/components/ui/appointment-time-slot-picker.tsx",
|
|
473
|
+
"import": "./dist/components/ui/appointment-time-slot-picker.mjs",
|
|
474
|
+
"require": "./dist/components/ui/appointment-time-slot-picker.js"
|
|
475
|
+
},
|
|
476
|
+
"./advisor-card": {
|
|
477
|
+
"types": "./src/components/ui/advisor-card.tsx",
|
|
478
|
+
"import": "./dist/components/ui/advisor-card.mjs",
|
|
479
|
+
"require": "./dist/components/ui/advisor-card.js"
|
|
480
|
+
},
|
|
481
|
+
"./appointment-upcoming-card": {
|
|
482
|
+
"types": "./src/components/ui/appointment-upcoming-card.tsx",
|
|
483
|
+
"import": "./dist/components/ui/appointment-upcoming-card.mjs",
|
|
484
|
+
"require": "./dist/components/ui/appointment-upcoming-card.js"
|
|
485
|
+
},
|
|
486
|
+
"./appointment-mini-card": {
|
|
487
|
+
"types": "./src/components/ui/appointment-mini-card.tsx",
|
|
488
|
+
"import": "./dist/components/ui/appointment-mini-card.mjs",
|
|
489
|
+
"require": "./dist/components/ui/appointment-mini-card.js"
|
|
490
|
+
},
|
|
491
|
+
"./appointment-gmail-connect": {
|
|
492
|
+
"types": "./src/components/ui/appointment-gmail-connect.tsx",
|
|
493
|
+
"import": "./dist/components/ui/appointment-gmail-connect.mjs",
|
|
494
|
+
"require": "./dist/components/ui/appointment-gmail-connect.js"
|
|
495
|
+
},
|
|
496
|
+
"./appointment-calendar-view": {
|
|
497
|
+
"types": "./src/components/ui/appointment-calendar-view.tsx",
|
|
498
|
+
"import": "./dist/components/ui/appointment-calendar-view.mjs",
|
|
499
|
+
"require": "./dist/components/ui/appointment-calendar-view.js"
|
|
500
|
+
},
|
|
501
|
+
"./appointment-action-dialogs": {
|
|
502
|
+
"types": "./src/components/ui/appointment-action-dialogs.tsx",
|
|
503
|
+
"import": "./dist/components/ui/appointment-action-dialogs.mjs",
|
|
504
|
+
"require": "./dist/components/ui/appointment-action-dialogs.js"
|
|
505
|
+
},
|
|
506
|
+
"./appointment-book-dialog": {
|
|
507
|
+
"types": "./src/components/ui/appointment-book-dialog.tsx",
|
|
508
|
+
"import": "./dist/components/ui/appointment-book-dialog.mjs",
|
|
509
|
+
"require": "./dist/components/ui/appointment-book-dialog.js"
|
|
510
|
+
},
|
|
511
|
+
"./appointment-detail-sheet": {
|
|
512
|
+
"types": "./src/components/ui/appointment-detail-sheet.tsx",
|
|
513
|
+
"import": "./dist/components/ui/appointment-detail-sheet.mjs",
|
|
514
|
+
"require": "./dist/components/ui/appointment-detail-sheet.js"
|
|
515
|
+
},
|
|
516
|
+
"./appointment-availability-settings": {
|
|
517
|
+
"types": "./src/components/ui/appointment-availability-settings.tsx",
|
|
518
|
+
"import": "./dist/components/ui/appointment-availability-settings.mjs",
|
|
519
|
+
"require": "./dist/components/ui/appointment-availability-settings.js"
|
|
450
520
|
}
|
|
451
521
|
}
|
|
452
522
|
}
|
package/src/components/index.tsx
CHANGED
|
@@ -11,6 +11,22 @@ export type {
|
|
|
11
11
|
AccordionContentProps,
|
|
12
12
|
} from "./ui/accordion";
|
|
13
13
|
|
|
14
|
+
export { AdvisorCard, AdvisorInviteCard } from "./ui/advisor-card";
|
|
15
|
+
export type {
|
|
16
|
+
AdvisorCardProps,
|
|
17
|
+
AdvisorInviteCardProps,
|
|
18
|
+
AdvisorAppointmentStrip,
|
|
19
|
+
} from "./ui/advisor-card";
|
|
20
|
+
|
|
21
|
+
export { AppointmentUpcomingCard } from "./ui/appointment-upcoming-card";
|
|
22
|
+
export type {
|
|
23
|
+
AppointmentUpcomingCardProps,
|
|
24
|
+
AppointmentUpcomingData,
|
|
25
|
+
AppointmentUpcomingAdvisor,
|
|
26
|
+
AppointmentUpcomingStatus,
|
|
27
|
+
AppointmentUpcomingSlot,
|
|
28
|
+
} from "./ui/appointment-upcoming-card";
|
|
29
|
+
|
|
14
30
|
export { AddColumnModal } from "./ui/add-column-modal";
|
|
15
31
|
export type {
|
|
16
32
|
AddColumnModalProps,
|
|
@@ -65,6 +81,72 @@ export type {
|
|
|
65
81
|
AlertDialogTriggerProps,
|
|
66
82
|
} from "./ui/alert-dialog";
|
|
67
83
|
|
|
84
|
+
export { AppointmentAvailabilitySettings } from "./ui/appointment-availability-settings";
|
|
85
|
+
export type {
|
|
86
|
+
AppointmentAvailabilitySettingsProps,
|
|
87
|
+
AppointmentAvailabilityPrefs,
|
|
88
|
+
AppointmentBlockedDate,
|
|
89
|
+
AppointmentDaySchedule,
|
|
90
|
+
} from "./ui/appointment-availability-settings";
|
|
91
|
+
|
|
92
|
+
export {
|
|
93
|
+
AppointmentConfirmDialog,
|
|
94
|
+
AppointmentRescheduleDialog,
|
|
95
|
+
} from "./ui/appointment-action-dialogs";
|
|
96
|
+
export type {
|
|
97
|
+
AppointmentConfirmAction,
|
|
98
|
+
AppointmentConfirmDialogProps,
|
|
99
|
+
AppointmentRescheduleDialogProps,
|
|
100
|
+
} from "./ui/appointment-action-dialogs";
|
|
101
|
+
|
|
102
|
+
export { AppointmentBookDialog } from "./ui/appointment-book-dialog";
|
|
103
|
+
export type {
|
|
104
|
+
AppointmentBookDialogProps,
|
|
105
|
+
AppointmentBookingSlot,
|
|
106
|
+
AppointmentClient,
|
|
107
|
+
AppointmentOfflineLocation,
|
|
108
|
+
} from "./ui/appointment-book-dialog";
|
|
109
|
+
|
|
110
|
+
export { AppointmentCalendarView } from "./ui/appointment-calendar-view";
|
|
111
|
+
export type {
|
|
112
|
+
AppointmentCalendarViewProps,
|
|
113
|
+
AppointmentCalendarItem,
|
|
114
|
+
AppointmentWeekDay,
|
|
115
|
+
} from "./ui/appointment-calendar-view";
|
|
116
|
+
|
|
117
|
+
export { AppointmentDetailSheet } from "./ui/appointment-detail-sheet";
|
|
118
|
+
export type {
|
|
119
|
+
AppointmentDetailSheetProps,
|
|
120
|
+
AppointmentDetailItem,
|
|
121
|
+
AppointmentClientProfile,
|
|
122
|
+
LoanApplicationStatus,
|
|
123
|
+
} from "./ui/appointment-detail-sheet";
|
|
124
|
+
|
|
125
|
+
export { AppointmentGmailConnect } from "./ui/appointment-gmail-connect";
|
|
126
|
+
export type {
|
|
127
|
+
AppointmentGmailConnectProps,
|
|
128
|
+
GmailConnection,
|
|
129
|
+
GmailConnectionState,
|
|
130
|
+
} from "./ui/appointment-gmail-connect";
|
|
131
|
+
|
|
132
|
+
export { AppointmentMiniCard } from "./ui/appointment-mini-card";
|
|
133
|
+
export type {
|
|
134
|
+
AppointmentMiniCardProps,
|
|
135
|
+
AppointmentMiniCardItem,
|
|
136
|
+
} from "./ui/appointment-mini-card";
|
|
137
|
+
|
|
138
|
+
export {
|
|
139
|
+
AppointmentTimeSlotPicker,
|
|
140
|
+
AppointmentSlotSection,
|
|
141
|
+
} from "./ui/appointment-time-slot-picker";
|
|
142
|
+
export type {
|
|
143
|
+
AppointmentTimeSlotPickerProps,
|
|
144
|
+
AppointmentSlotSectionProps,
|
|
145
|
+
AppointmentTimeSlot,
|
|
146
|
+
AppointmentStatus,
|
|
147
|
+
AppointmentMeetingFormat,
|
|
148
|
+
} from "./ui/appointment-time-slot-picker";
|
|
149
|
+
|
|
68
150
|
export {
|
|
69
151
|
Avatar,
|
|
70
152
|
AvatarImage,
|
|
@@ -89,6 +171,20 @@ export type {
|
|
|
89
171
|
AlertHistoryPeriod,
|
|
90
172
|
} from "./ui/backoffice-alert-history-chart";
|
|
91
173
|
|
|
174
|
+
export { BackofficeAlertsChart } from "./ui/backoffice-alerts-chart";
|
|
175
|
+
export type {
|
|
176
|
+
BackofficeAlertsChartProps,
|
|
177
|
+
AlertSummaryDataPoint,
|
|
178
|
+
AlertSummaryPeriod,
|
|
179
|
+
} from "./ui/backoffice-alerts-chart";
|
|
180
|
+
|
|
181
|
+
export { BackofficeConnectionsChart } from "./ui/backoffice-connections-chart";
|
|
182
|
+
export type {
|
|
183
|
+
BackofficeConnectionsChartProps,
|
|
184
|
+
ConnectionSummaryDataPoint,
|
|
185
|
+
ConnectionSummaryPeriod,
|
|
186
|
+
} from "./ui/backoffice-connections-chart";
|
|
187
|
+
|
|
92
188
|
export { BackofficeContactHistoryChart } from "./ui/backoffice-contact-history-chart";
|
|
93
189
|
export type {
|
|
94
190
|
BackofficeContactHistoryChartProps,
|
|
@@ -531,6 +627,15 @@ export type {
|
|
|
531
627
|
export { OpportunitySummaryTab } from "./ui/opportunity-summary-tab";
|
|
532
628
|
export type { OpportunitySummaryTabProps } from "./ui/opportunity-summary-tab";
|
|
533
629
|
|
|
630
|
+
export { SidebarNav } from "./ui/sidebar-nav";
|
|
631
|
+
export type {
|
|
632
|
+
SidebarNavProps,
|
|
633
|
+
SidebarNavItem,
|
|
634
|
+
SidebarNavSubItem,
|
|
635
|
+
SidebarNavMetricItem,
|
|
636
|
+
SidebarNavMetricsGroup,
|
|
637
|
+
} from "./ui/sidebar-nav";
|
|
638
|
+
|
|
534
639
|
export {
|
|
535
640
|
Pagination,
|
|
536
641
|
PaginationContent,
|
|
@@ -539,6 +644,8 @@ export {
|
|
|
539
644
|
PaginationPrevious,
|
|
540
645
|
PaginationNext,
|
|
541
646
|
PaginationEllipsis,
|
|
647
|
+
PaginationNavButtons,
|
|
648
|
+
TablePagination,
|
|
542
649
|
} from "./ui/pagination";
|
|
543
650
|
export type {
|
|
544
651
|
PaginationProps,
|
|
@@ -548,6 +655,8 @@ export type {
|
|
|
548
655
|
PaginationPreviousProps,
|
|
549
656
|
PaginationNextProps,
|
|
550
657
|
PaginationEllipsisProps,
|
|
658
|
+
PaginationNavButtonsProps,
|
|
659
|
+
TablePaginationProps,
|
|
551
660
|
} from "./ui/pagination";
|
|
552
661
|
|
|
553
662
|
export { PipelineAlerts } from "./ui/pipeline-alerts";
|
|
@@ -603,6 +712,12 @@ export type {
|
|
|
603
712
|
PopoverDescriptionProps,
|
|
604
713
|
} from "./ui/popover";
|
|
605
714
|
|
|
715
|
+
export { PageHeader } from "./ui/page-header";
|
|
716
|
+
export type { PageHeaderProps } from "./ui/page-header";
|
|
717
|
+
|
|
718
|
+
export { PageTopBar } from "./ui/page-top-bar";
|
|
719
|
+
export type { PageTopBarProps } from "./ui/page-top-bar";
|
|
720
|
+
|
|
606
721
|
export { Progress } from "./ui/progress";
|
|
607
722
|
export type { ProgressProps } from "./ui/progress";
|
|
608
723
|
|
|
@@ -654,15 +769,6 @@ export type {
|
|
|
654
769
|
export { Separator } from "./ui/separator";
|
|
655
770
|
export type { SeparatorProps } from "./ui/separator";
|
|
656
771
|
|
|
657
|
-
export { SidebarNav } from "./ui/sidebar-nav";
|
|
658
|
-
export type {
|
|
659
|
-
SidebarNavProps,
|
|
660
|
-
SidebarNavSubItem,
|
|
661
|
-
SidebarNavItem,
|
|
662
|
-
SidebarNavMetricItem,
|
|
663
|
-
SidebarNavMetricsGroup,
|
|
664
|
-
} from "./ui/sidebar-nav";
|
|
665
|
-
|
|
666
772
|
export {
|
|
667
773
|
Sheet,
|
|
668
774
|
SheetClose,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
DialogTitle,
|
|
9
9
|
DialogFooter,
|
|
10
10
|
} from "@/components/ui/dialog";
|
|
11
|
-
import { Button
|
|
11
|
+
import { Button } from "@/components/ui/button";
|
|
12
12
|
import { Input } from "@/components/ui/input";
|
|
13
13
|
import { Label } from "@/components/ui/label";
|
|
14
14
|
import { Separator } from "@/components/ui/separator";
|
|
@@ -262,17 +262,17 @@ export function AddColumnModal({
|
|
|
262
262
|
className="flex-1"
|
|
263
263
|
disabled={loading}
|
|
264
264
|
/>
|
|
265
|
-
<
|
|
265
|
+
<Button
|
|
266
|
+
type="button"
|
|
267
|
+
variant="ghost"
|
|
268
|
+
size="icon"
|
|
266
269
|
onClick={() => removeTask(task.id)}
|
|
267
270
|
disabled={loading}
|
|
268
|
-
className=
|
|
269
|
-
buttonVariants({ variant: "ghost", size: "icon" }),
|
|
270
|
-
"size-9 shrink-0 text-muted-foreground hover:text-destructive",
|
|
271
|
-
)}
|
|
271
|
+
className="size-9 shrink-0 text-muted-foreground hover:text-destructive"
|
|
272
272
|
aria-label="Remove task"
|
|
273
273
|
>
|
|
274
274
|
<Trash2 className="size-4" />
|
|
275
|
-
</
|
|
275
|
+
</Button>
|
|
276
276
|
</div>
|
|
277
277
|
|
|
278
278
|
{aiAgents.length > 0 && (
|
|
@@ -126,13 +126,16 @@ export function AddLeadModal({
|
|
|
126
126
|
disabled={isSubmitting}
|
|
127
127
|
/>
|
|
128
128
|
{searchValue && (
|
|
129
|
-
<
|
|
129
|
+
<Button
|
|
130
|
+
type="button"
|
|
131
|
+
variant="ghost"
|
|
132
|
+
size="icon"
|
|
130
133
|
onClick={() => onSearchChange?.("")}
|
|
131
|
-
className="absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground"
|
|
134
|
+
className="absolute right-2.5 top-1/2 size-6 -translate-y-1/2 text-muted-foreground hover:text-foreground"
|
|
132
135
|
aria-label="Clear search"
|
|
133
136
|
>
|
|
134
137
|
<X className="size-3.5" />
|
|
135
|
-
</
|
|
138
|
+
</Button>
|
|
136
139
|
)}
|
|
137
140
|
</div>
|
|
138
141
|
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Badge } from "./badge";
|
|
3
|
+
import { Button } from "./button";
|
|
4
|
+
import { Avatar, AvatarFallback, AvatarImage } from "./avatar";
|
|
5
|
+
import { Separator } from "./separator";
|
|
6
|
+
import {
|
|
7
|
+
Calendar,
|
|
8
|
+
CalendarCheck,
|
|
9
|
+
ChevronRight,
|
|
10
|
+
Mail,
|
|
11
|
+
MoreVertical,
|
|
12
|
+
Phone,
|
|
13
|
+
Plus,
|
|
14
|
+
} from "lucide-react";
|
|
15
|
+
import type { AppointmentStatus } from "./appointment-time-slot-picker";
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Types
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
/** Appointment data shown in the strip inside the advisor card */
|
|
22
|
+
export interface AdvisorAppointmentStrip {
|
|
23
|
+
status: AppointmentStatus;
|
|
24
|
+
/** Human-readable appointment type — e.g. "Financial Review" */
|
|
25
|
+
appointmentType?: string;
|
|
26
|
+
/** Display date string — e.g. "Wed, 23 Apr 2026" */
|
|
27
|
+
date: string;
|
|
28
|
+
/** Display start time — e.g. "2:00 PM" */
|
|
29
|
+
timeStart: string;
|
|
30
|
+
/** Display end time — e.g. "2:30 PM" */
|
|
31
|
+
timeEnd: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface AdvisorCardProps {
|
|
35
|
+
/** Advisor full name */
|
|
36
|
+
name: string;
|
|
37
|
+
/** Job title / role label */
|
|
38
|
+
role: string;
|
|
39
|
+
/** Phone number string */
|
|
40
|
+
phone: string;
|
|
41
|
+
/** Email address */
|
|
42
|
+
email: string;
|
|
43
|
+
/** Broker company name — shown as text fallback when no logo is provided */
|
|
44
|
+
companyName?: string;
|
|
45
|
+
/** URL of the broker company logo — renders as avatar image */
|
|
46
|
+
companyLogoUrl?: string;
|
|
47
|
+
/** Explicit initials for the avatar fallback; derived from companyName if omitted */
|
|
48
|
+
avatarInitials?: string;
|
|
49
|
+
/** Whether this is the client's primary assigned advisor */
|
|
50
|
+
isPrimary?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Upcoming appointments shown as stacked strips.
|
|
53
|
+
* - `undefined` — strip section hidden
|
|
54
|
+
* - `null` or `[]` — empty state: "No upcoming appointments"
|
|
55
|
+
* - array of items — one coloured strip per appointment
|
|
56
|
+
*/
|
|
57
|
+
appointments?: AdvisorAppointmentStrip[] | null;
|
|
58
|
+
/** Called when "Refer [name] to Others" is clicked */
|
|
59
|
+
onRefer?: () => void;
|
|
60
|
+
/** Called when the ⋮ overflow menu is clicked */
|
|
61
|
+
onMoreOptions?: () => void;
|
|
62
|
+
/** Called when "Book Appointment" is clicked */
|
|
63
|
+
onBookAppointment?: () => void;
|
|
64
|
+
/** Called when "View →" in an appointment strip is clicked; receives the appointment index */
|
|
65
|
+
onViewAppointment?: (index: number) => void;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface AdvisorInviteCardProps {
|
|
69
|
+
/** Called when the "Add Advisor" CTA is clicked */
|
|
70
|
+
onInvite?: () => void;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Status config
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
|
|
77
|
+
const STATUS_VARIANT: Record<
|
|
78
|
+
AppointmentStatus,
|
|
79
|
+
"warning" | "success" | "destructive" | "info"
|
|
80
|
+
> = {
|
|
81
|
+
pending: "warning",
|
|
82
|
+
confirmed: "success",
|
|
83
|
+
cancelled: "destructive",
|
|
84
|
+
rescheduled: "info",
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const STATUS_LABEL: Record<AppointmentStatus, string> = {
|
|
88
|
+
pending: "Pending",
|
|
89
|
+
confirmed: "Confirmed",
|
|
90
|
+
cancelled: "Cancelled",
|
|
91
|
+
rescheduled: "Rescheduled",
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const STRIP_BG: Record<AppointmentStatus, string> = {
|
|
95
|
+
pending: "bg-warning/5",
|
|
96
|
+
confirmed: "bg-success/5",
|
|
97
|
+
cancelled: "bg-destructive/5",
|
|
98
|
+
rescheduled: "bg-info/5",
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Component
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
|
|
105
|
+
export function AdvisorCard({
|
|
106
|
+
name,
|
|
107
|
+
role,
|
|
108
|
+
phone,
|
|
109
|
+
email,
|
|
110
|
+
companyName,
|
|
111
|
+
companyLogoUrl,
|
|
112
|
+
avatarInitials,
|
|
113
|
+
isPrimary = false,
|
|
114
|
+
appointments,
|
|
115
|
+
onRefer,
|
|
116
|
+
onMoreOptions,
|
|
117
|
+
onBookAppointment,
|
|
118
|
+
onViewAppointment,
|
|
119
|
+
}: AdvisorCardProps) {
|
|
120
|
+
const hasAppointments = appointments !== undefined;
|
|
121
|
+
const appointmentList =
|
|
122
|
+
appointments === null ||
|
|
123
|
+
(Array.isArray(appointments) && appointments.length === 0)
|
|
124
|
+
? null
|
|
125
|
+
: appointments;
|
|
126
|
+
|
|
127
|
+
return (
|
|
128
|
+
<div className="flex flex-col border border-border bg-card">
|
|
129
|
+
{/* ── Advisor info ── */}
|
|
130
|
+
<div className="flex items-start gap-4 p-4">
|
|
131
|
+
<Avatar className="h-10 w-10 shrink-0">
|
|
132
|
+
{companyLogoUrl && (
|
|
133
|
+
<AvatarImage src={companyLogoUrl} alt={`${name} company logo`} />
|
|
134
|
+
)}
|
|
135
|
+
<AvatarFallback className="text-sm">
|
|
136
|
+
{avatarInitials ??
|
|
137
|
+
(companyName
|
|
138
|
+
? companyName
|
|
139
|
+
.split(" ")
|
|
140
|
+
.map((w) => w[0])
|
|
141
|
+
.join("")
|
|
142
|
+
.slice(0, 2)
|
|
143
|
+
.toUpperCase()
|
|
144
|
+
: name.slice(0, 2).toUpperCase())}
|
|
145
|
+
</AvatarFallback>
|
|
146
|
+
</Avatar>
|
|
147
|
+
|
|
148
|
+
<div className="flex min-w-0 flex-1 flex-col gap-0.5">
|
|
149
|
+
<p className="text-sm font-semibold leading-tight">{name}</p>
|
|
150
|
+
<p className="text-sm text-muted-foreground">{role}</p>
|
|
151
|
+
<div className="mt-2 flex flex-col gap-1">
|
|
152
|
+
<div className="flex items-center gap-1.5 text-sm text-muted-foreground">
|
|
153
|
+
<Phone className="h-4 w-4 shrink-0" />
|
|
154
|
+
<span>{phone}</span>
|
|
155
|
+
</div>
|
|
156
|
+
<div className="flex items-center gap-1.5 text-sm text-muted-foreground">
|
|
157
|
+
<Mail className="h-4 w-4 shrink-0" />
|
|
158
|
+
<span>{email}</span>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
{/* Badge + overflow menu */}
|
|
164
|
+
<div className="flex shrink-0 items-center gap-1.5">
|
|
165
|
+
{isPrimary && <Badge variant="success">Primary</Badge>}
|
|
166
|
+
<Button
|
|
167
|
+
variant="ghost"
|
|
168
|
+
size="icon"
|
|
169
|
+
className="h-7 w-7"
|
|
170
|
+
onClick={onMoreOptions}
|
|
171
|
+
aria-label="More options"
|
|
172
|
+
>
|
|
173
|
+
<MoreVertical className="h-4 w-4" />
|
|
174
|
+
</Button>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
|
|
178
|
+
{/* ── Appointment strips ── */}
|
|
179
|
+
{hasAppointments && (
|
|
180
|
+
<>
|
|
181
|
+
<Separator />
|
|
182
|
+
{appointmentList ? (
|
|
183
|
+
appointmentList.map((appt, i) => (
|
|
184
|
+
<React.Fragment key={i}>
|
|
185
|
+
{i > 0 && <Separator />}
|
|
186
|
+
<div
|
|
187
|
+
className={`flex items-center gap-3 px-4 py-3 ${STRIP_BG[appt.status]}`}
|
|
188
|
+
>
|
|
189
|
+
<CalendarCheck className="h-4 w-4 shrink-0 text-muted-foreground" />
|
|
190
|
+
<div className="flex min-w-0 flex-1 flex-col gap-0.5">
|
|
191
|
+
<div className="flex items-center gap-2">
|
|
192
|
+
<Badge
|
|
193
|
+
variant={STATUS_VARIANT[appt.status]}
|
|
194
|
+
className="text-[10px]"
|
|
195
|
+
>
|
|
196
|
+
{STATUS_LABEL[appt.status]}
|
|
197
|
+
</Badge>
|
|
198
|
+
{appt.appointmentType && (
|
|
199
|
+
<span className="truncate text-sm font-semibold">
|
|
200
|
+
{appt.appointmentType}
|
|
201
|
+
</span>
|
|
202
|
+
)}
|
|
203
|
+
</div>
|
|
204
|
+
<p className="whitespace-nowrap text-sm text-muted-foreground">
|
|
205
|
+
{appt.date} · {appt.timeStart}–{appt.timeEnd}
|
|
206
|
+
</p>
|
|
207
|
+
</div>
|
|
208
|
+
{onViewAppointment && (
|
|
209
|
+
<Button
|
|
210
|
+
variant="ghost"
|
|
211
|
+
size="sm"
|
|
212
|
+
className="h-7 shrink-0 gap-1 px-2 text-xs"
|
|
213
|
+
onClick={() => onViewAppointment(i)}
|
|
214
|
+
>
|
|
215
|
+
View
|
|
216
|
+
<ChevronRight className="h-3 w-3" />
|
|
217
|
+
</Button>
|
|
218
|
+
)}
|
|
219
|
+
</div>
|
|
220
|
+
</React.Fragment>
|
|
221
|
+
))
|
|
222
|
+
) : (
|
|
223
|
+
/* Empty state */
|
|
224
|
+
<div className="flex items-center gap-3 px-4 py-3">
|
|
225
|
+
<Calendar className="h-4 w-4 shrink-0 text-muted-foreground" />
|
|
226
|
+
<p className="flex-1 text-xs text-muted-foreground">
|
|
227
|
+
No upcoming appointments
|
|
228
|
+
</p>
|
|
229
|
+
</div>
|
|
230
|
+
)}
|
|
231
|
+
</>
|
|
232
|
+
)}
|
|
233
|
+
|
|
234
|
+
{/* ── Footer actions ── */}
|
|
235
|
+
<Separator />
|
|
236
|
+
<div className="flex flex-col gap-2 px-4 py-3">
|
|
237
|
+
{onBookAppointment && (
|
|
238
|
+
<Button
|
|
239
|
+
variant="outline-primary"
|
|
240
|
+
size="sm"
|
|
241
|
+
className="w-full"
|
|
242
|
+
onClick={onBookAppointment}
|
|
243
|
+
>
|
|
244
|
+
Book Appointment
|
|
245
|
+
</Button>
|
|
246
|
+
)}
|
|
247
|
+
{onRefer && (
|
|
248
|
+
<Button
|
|
249
|
+
variant="outline"
|
|
250
|
+
size="sm"
|
|
251
|
+
className="w-full"
|
|
252
|
+
onClick={onRefer}
|
|
253
|
+
>
|
|
254
|
+
Refer {name} to Others
|
|
255
|
+
</Button>
|
|
256
|
+
)}
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// ---------------------------------------------------------------------------
|
|
263
|
+
// AdvisorInviteCard
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
|
|
266
|
+
export function AdvisorInviteCard({ onInvite }: AdvisorInviteCardProps) {
|
|
267
|
+
return (
|
|
268
|
+
<Button
|
|
269
|
+
variant="ghost"
|
|
270
|
+
onClick={onInvite}
|
|
271
|
+
className="flex h-auto w-full flex-col items-center justify-center gap-3 border border-dashed border-border bg-card p-8 text-center transition-colors hover:bg-muted/40"
|
|
272
|
+
>
|
|
273
|
+
<div className="flex h-10 w-10 items-center justify-center border border-dashed border-muted-foreground/40">
|
|
274
|
+
<Plus className="h-5 w-5 text-muted-foreground" />
|
|
275
|
+
</div>
|
|
276
|
+
<div className="flex flex-col gap-1">
|
|
277
|
+
<p className="text-sm font-medium">Add Another Advisor</p>
|
|
278
|
+
<p className="text-xs text-muted-foreground">
|
|
279
|
+
Connect more advisors to your account
|
|
280
|
+
</p>
|
|
281
|
+
</div>
|
|
282
|
+
</Button>
|
|
283
|
+
);
|
|
284
|
+
}
|
|
@@ -141,10 +141,11 @@ function AiTaskCard({
|
|
|
141
141
|
onSelect: (text: string) => void;
|
|
142
142
|
}) {
|
|
143
143
|
return (
|
|
144
|
-
<
|
|
144
|
+
<Button
|
|
145
145
|
type="button"
|
|
146
|
+
variant="ghost"
|
|
146
147
|
onClick={() => onSelect(suggestion.title)}
|
|
147
|
-
className="
|
|
148
|
+
className="h-auto w-full flex-col items-start gap-1 border border-border bg-background p-3 text-left hover:bg-muted/50"
|
|
148
149
|
>
|
|
149
150
|
<span className="text-sm font-medium text-foreground">
|
|
150
151
|
{suggestion.title}
|
|
@@ -152,7 +153,7 @@ function AiTaskCard({
|
|
|
152
153
|
<span className="text-xs text-muted-foreground">
|
|
153
154
|
{suggestion.description}
|
|
154
155
|
</span>
|
|
155
|
-
</
|
|
156
|
+
</Button>
|
|
156
157
|
);
|
|
157
158
|
}
|
|
158
159
|
|