@wealthx/shadcn 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/.turbo/turbo-build.log +200 -156
  2. package/CHANGELOG.md +22 -0
  3. package/dist/{chunk-4Y6R4WEC.mjs → chunk-2A5RRQGG.mjs} +9 -22
  4. package/dist/{chunk-TS2ZX2VS.mjs → chunk-2UM72RJ7.mjs} +11 -15
  5. package/dist/{chunk-A56YQQHG.mjs → chunk-3NCUZIFP.mjs} +2 -2
  6. package/dist/chunk-3OYFOX3X.mjs +79 -0
  7. package/dist/{chunk-RP3SQYA3.mjs → chunk-3TTACBDP.mjs} +9 -4
  8. package/dist/chunk-4GAWMKMI.mjs +710 -0
  9. package/dist/{chunk-VGSESELX.mjs → chunk-5FQIKDKP.mjs} +5 -5
  10. package/dist/{chunk-K3JYD4IU.mjs → chunk-5IS7G74I.mjs} +11 -4
  11. package/dist/chunk-6AW4KJHE.mjs +235 -0
  12. package/dist/chunk-6CR5N2JW.mjs +302 -0
  13. package/dist/{chunk-XIRTEFKH.mjs → chunk-6DZEXFNB.mjs} +36 -8
  14. package/dist/chunk-6O6KD7CE.mjs +271 -0
  15. package/dist/chunk-7PV3IWCN.mjs +33 -0
  16. package/dist/{chunk-SPJ5KXW7.mjs → chunk-7S5AESZO.mjs} +5 -5
  17. package/dist/{chunk-RYCLWMZ7.mjs → chunk-ABFDMHOR.mjs} +9 -7
  18. package/dist/{chunk-SWGT756Z.mjs → chunk-AMQZRHEZ.mjs} +10 -4
  19. package/dist/{chunk-WAZD7NFU.mjs → chunk-BKNFWEH2.mjs} +6 -6
  20. package/dist/{chunk-CLIN5525.mjs → chunk-C7CQJNMR.mjs} +1 -1
  21. package/dist/{chunk-D4ILTPOG.mjs → chunk-CFMQP5QS.mjs} +5 -4
  22. package/dist/{chunk-VPBN3WOO.mjs → chunk-DGHAXJBN.mjs} +9 -7
  23. package/dist/chunk-DOEO3CDL.mjs +27 -0
  24. package/dist/{chunk-5MEWU56Z.mjs → chunk-DUJTAXMH.mjs} +11 -6
  25. package/dist/{chunk-GGM2UYGG.mjs → chunk-EBXQWIYG.mjs} +10 -4
  26. package/dist/chunk-EWRB4PAD.mjs +468 -0
  27. package/dist/{chunk-ZSHYDDRB.mjs → chunk-FAKPBKLT.mjs} +6 -2
  28. package/dist/chunk-FNQXOAYJ.mjs +169 -0
  29. package/dist/{chunk-A6AAWBPF.mjs → chunk-GHC7LLUX.mjs} +13 -4
  30. package/dist/chunk-HBZLGDIN.mjs +507 -0
  31. package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
  32. package/dist/{chunk-CGH4DRNG.mjs → chunk-HVY6KCCF.mjs} +10 -7
  33. package/dist/chunk-I3RZS7V2.mjs +136 -0
  34. package/dist/chunk-IAE3F7DR.mjs +1962 -0
  35. package/dist/{chunk-UT4KJR7V.mjs → chunk-IHMFS7NZ.mjs} +35 -74
  36. package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
  37. package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
  38. package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
  39. package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
  40. package/dist/chunk-LV35NGVG.mjs +272 -0
  41. package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
  42. package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
  43. package/dist/chunk-MIZQHHUO.mjs +441 -0
  44. package/dist/chunk-MN5NYQCL.mjs +29 -0
  45. package/dist/chunk-NL3ZO62D.mjs +31 -0
  46. package/dist/{chunk-Q76O3RIQ.mjs → chunk-NMOI6CQD.mjs} +1 -1
  47. package/dist/{chunk-P6AM5V7O.mjs → chunk-OODBHKG7.mjs} +1 -1
  48. package/dist/chunk-PBL4OQV2.mjs +283 -0
  49. package/dist/{chunk-Y4QFWRNR.mjs → chunk-PU4YZQXV.mjs} +17 -18
  50. package/dist/chunk-QMY3AZJH.mjs +80 -0
  51. package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
  52. package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
  53. package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
  54. package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
  55. package/dist/chunk-UMTOX62O.mjs +415 -0
  56. package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
  57. package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
  58. package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
  59. package/dist/{chunk-ZRSDX6OW.mjs → chunk-ZC45IGZO.mjs} +33 -30
  60. package/dist/components/ui/add-column-modal.js +42 -14
  61. package/dist/components/ui/add-column-modal.mjs +5 -5
  62. package/dist/components/ui/add-lead-modal.js +42 -11
  63. package/dist/components/ui/add-lead-modal.mjs +3 -3
  64. package/dist/components/ui/advisor-card.js +497 -0
  65. package/dist/components/ui/advisor-card.mjs +13 -0
  66. package/dist/components/ui/ai-assistant-drawer.js +11 -10
  67. package/dist/components/ui/ai-assistant-drawer.mjs +3 -3
  68. package/dist/components/ui/alert-dialog.js +2 -2
  69. package/dist/components/ui/alert-dialog.mjs +2 -2
  70. package/dist/components/ui/appointment-action-dialogs.js +1160 -0
  71. package/dist/components/ui/appointment-action-dialogs.mjs +23 -0
  72. package/dist/components/ui/appointment-availability-settings.js +1590 -0
  73. package/dist/components/ui/appointment-availability-settings.mjs +23 -0
  74. package/dist/components/ui/appointment-book-dialog.js +1744 -0
  75. package/dist/components/ui/appointment-book-dialog.mjs +27 -0
  76. package/dist/components/ui/appointment-calendar-view.js +833 -0
  77. package/dist/components/ui/appointment-calendar-view.mjs +14 -0
  78. package/dist/components/ui/appointment-detail-sheet.js +1517 -0
  79. package/dist/components/ui/appointment-detail-sheet.mjs +24 -0
  80. package/dist/components/ui/appointment-gmail-connect.js +467 -0
  81. package/dist/components/ui/appointment-gmail-connect.mjs +14 -0
  82. package/dist/components/ui/appointment-mini-card.js +345 -0
  83. package/dist/components/ui/appointment-mini-card.mjs +11 -0
  84. package/dist/components/ui/appointment-time-slot-picker.js +311 -0
  85. package/dist/components/ui/appointment-time-slot-picker.mjs +13 -0
  86. package/dist/components/ui/appointment-upcoming-card.js +1268 -0
  87. package/dist/components/ui/appointment-upcoming-card.mjs +21 -0
  88. package/dist/components/ui/backoffice-alert-history-chart.js +11 -5
  89. package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -4
  90. package/dist/components/ui/backoffice-alerts-chart.js +786 -0
  91. package/dist/components/ui/backoffice-alerts-chart.mjs +19 -0
  92. package/dist/components/ui/backoffice-connections-chart.js +817 -0
  93. package/dist/components/ui/backoffice-connections-chart.mjs +19 -0
  94. package/dist/components/ui/backoffice-contact-history-chart.js +11 -5
  95. package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -4
  96. package/dist/components/ui/badge.js +6 -6
  97. package/dist/components/ui/badge.mjs +1 -1
  98. package/dist/components/ui/borrowing-capacity-line-chart.js +30 -21
  99. package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -4
  100. package/dist/components/ui/button.js +2 -2
  101. package/dist/components/ui/button.mjs +1 -1
  102. package/dist/components/ui/calendar.js +2 -2
  103. package/dist/components/ui/calendar.mjs +2 -2
  104. package/dist/components/ui/card.js +1 -1
  105. package/dist/components/ui/card.mjs +1 -1
  106. package/dist/components/ui/cash-balance-line-chart.js +31 -23
  107. package/dist/components/ui/cash-balance-line-chart.mjs +5 -4
  108. package/dist/components/ui/cashflow-bar-chart.js +12 -5
  109. package/dist/components/ui/cashflow-bar-chart.mjs +5 -4
  110. package/dist/components/ui/chip.js +97 -18
  111. package/dist/components/ui/chip.mjs +3 -2
  112. package/dist/components/ui/color-picker.js +158 -28
  113. package/dist/components/ui/color-picker.mjs +3 -1
  114. package/dist/components/ui/data-table.js +140 -119
  115. package/dist/components/ui/data-table.mjs +3 -2
  116. package/dist/components/ui/date-picker.js +48 -27
  117. package/dist/components/ui/date-picker.mjs +4 -3
  118. package/dist/components/ui/dialog.js +37 -9
  119. package/dist/components/ui/dialog.mjs +2 -2
  120. package/dist/components/ui/expense-bar-chart.js +12 -5
  121. package/dist/components/ui/expense-bar-chart.mjs +5 -4
  122. package/dist/components/ui/field.mjs +2 -2
  123. package/dist/components/ui/financial-cards.js +322 -155
  124. package/dist/components/ui/financial-cards.mjs +5 -3
  125. package/dist/components/ui/financial-drawers.js +2 -2
  126. package/dist/components/ui/financial-drawers.mjs +3 -3
  127. package/dist/components/ui/financial-sections.js +14 -10
  128. package/dist/components/ui/financial-sections.mjs +6 -5
  129. package/dist/components/ui/income-bar-chart.js +12 -5
  130. package/dist/components/ui/income-bar-chart.mjs +5 -4
  131. package/dist/components/ui/input-group.js +2 -2
  132. package/dist/components/ui/input-group.mjs +2 -2
  133. package/dist/components/ui/kanban-column.js +52 -44
  134. package/dist/components/ui/kanban-column.mjs +7 -5
  135. package/dist/components/ui/opportunity-card.js +52 -44
  136. package/dist/components/ui/opportunity-card.mjs +6 -4
  137. package/dist/components/ui/opportunity-edit-modals.js +1367 -1263
  138. package/dist/components/ui/opportunity-edit-modals.mjs +8 -8
  139. package/dist/components/ui/opportunity-summary-tab.js +2744 -2157
  140. package/dist/components/ui/opportunity-summary-tab.mjs +14 -14
  141. package/dist/components/ui/page-header.js +92 -0
  142. package/dist/components/ui/page-header.mjs +8 -0
  143. package/dist/components/ui/page-top-bar.js +88 -0
  144. package/dist/components/ui/page-top-bar.mjs +8 -0
  145. package/dist/components/ui/pagination.js +303 -19
  146. package/dist/components/ui/pagination.mjs +11 -4
  147. package/dist/components/ui/pipeline-board.js +205 -191
  148. package/dist/components/ui/pipeline-board.mjs +9 -7
  149. package/dist/components/ui/pipeline-dialogs.js +114 -65
  150. package/dist/components/ui/pipeline-dialogs.mjs +7 -6
  151. package/dist/components/ui/pipeline-primitives.js +6 -6
  152. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  153. package/dist/components/ui/property-cashflow-doughnut-chart.js +14 -12
  154. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -4
  155. package/dist/components/ui/property-debt-equity-doughnut-chart.js +14 -12
  156. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -4
  157. package/dist/components/ui/property-mobile-estimate-line-chart.js +16 -14
  158. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -4
  159. package/dist/components/ui/sidebar-nav.js +234 -95
  160. package/dist/components/ui/sidebar-nav.mjs +4 -1
  161. package/dist/components/ui/stage-timeline.js +6 -6
  162. package/dist/components/ui/stage-timeline.mjs +3 -3
  163. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +18 -16
  164. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -4
  165. package/dist/components/ui/transactions-income-expense-bar-chart.js +28 -12
  166. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -4
  167. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +18 -16
  168. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -4
  169. package/dist/index.js +12899 -9343
  170. package/dist/index.mjs +256 -190
  171. package/dist/styles.css +1 -1
  172. package/package.json +71 -1
  173. package/src/components/index.tsx +114 -9
  174. package/src/components/ui/add-column-modal.tsx +7 -7
  175. package/src/components/ui/add-lead-modal.tsx +6 -3
  176. package/src/components/ui/advisor-card.tsx +227 -0
  177. package/src/components/ui/ai-assistant-drawer.tsx +4 -3
  178. package/src/components/ui/appointment-action-dialogs.tsx +297 -0
  179. package/src/components/ui/appointment-availability-settings.tsx +645 -0
  180. package/src/components/ui/appointment-book-dialog.tsx +618 -0
  181. package/src/components/ui/appointment-calendar-view.tsx +510 -0
  182. package/src/components/ui/appointment-detail-sheet.tsx +415 -0
  183. package/src/components/ui/appointment-gmail-connect.tsx +188 -0
  184. package/src/components/ui/appointment-mini-card.tsx +104 -0
  185. package/src/components/ui/appointment-time-slot-picker.tsx +123 -0
  186. package/src/components/ui/appointment-upcoming-card.tsx +635 -0
  187. package/src/components/ui/backoffice-alert-history-chart.tsx +10 -2
  188. package/src/components/ui/backoffice-alerts-chart.tsx +312 -0
  189. package/src/components/ui/backoffice-connections-chart.tsx +339 -0
  190. package/src/components/ui/backoffice-contact-history-chart.tsx +10 -2
  191. package/src/components/ui/badge.tsx +12 -6
  192. package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -11
  193. package/src/components/ui/button.tsx +2 -2
  194. package/src/components/ui/card.tsx +1 -1
  195. package/src/components/ui/cash-balance-line-chart.tsx +4 -23
  196. package/src/components/ui/cashflow-bar-chart.tsx +9 -2
  197. package/src/components/ui/chart-shared.tsx +4 -11
  198. package/src/components/ui/chip.tsx +23 -19
  199. package/src/components/ui/color-picker.tsx +4 -2
  200. package/src/components/ui/data-table.tsx +28 -74
  201. package/src/components/ui/date-picker.tsx +42 -37
  202. package/src/components/ui/dialog.tsx +72 -6
  203. package/src/components/ui/expense-bar-chart.tsx +11 -2
  204. package/src/components/ui/financial-cards.tsx +99 -10
  205. package/src/components/ui/income-bar-chart.tsx +11 -2
  206. package/src/components/ui/opportunity-card.tsx +10 -39
  207. package/src/components/ui/opportunity-edit-modals.tsx +98 -36
  208. package/src/components/ui/opportunity-summary-tab.tsx +548 -232
  209. package/src/components/ui/page-header.tsx +57 -0
  210. package/src/components/ui/page-top-bar.tsx +48 -0
  211. package/src/components/ui/pagination.tsx +171 -22
  212. package/src/components/ui/pipeline-board.tsx +12 -5
  213. package/src/components/ui/property-cashflow-doughnut-chart.tsx +3 -1
  214. package/src/components/ui/property-debt-equity-doughnut-chart.tsx +3 -1
  215. package/src/components/ui/property-mobile-estimate-line-chart.tsx +3 -1
  216. package/src/components/ui/sidebar-nav.tsx +36 -37
  217. package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +3 -1
  218. package/src/components/ui/transactions-income-expense-bar-chart.tsx +12 -9
  219. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +3 -1
  220. package/src/lib/format-currency.ts +44 -0
  221. package/src/lib/format-date.ts +50 -0
  222. package/src/lib/opportunity-constants.ts +12 -0
  223. package/src/styles/globals.css +17 -15
  224. package/src/styles/styles-css.ts +1 -1
  225. package/tsup.config.ts +14 -0
  226. package/dist/chunk-S4QRUQNW.mjs +0 -475
  227. package/dist/chunk-URGMJAE3.mjs +0 -1885
  228. package/dist/chunk-WNGWBVLV.mjs +0 -148
  229. 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.2.2",
3
+ "version": "1.3.0",
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
  }
@@ -11,6 +11,21 @@ export type {
11
11
  AccordionContentProps,
12
12
  } from "./ui/accordion";
13
13
 
14
+ export { AdvisorCard } from "./ui/advisor-card";
15
+ export type {
16
+ AdvisorCardProps,
17
+ AdvisorAppointmentStrip,
18
+ } from "./ui/advisor-card";
19
+
20
+ export { AppointmentUpcomingCard } from "./ui/appointment-upcoming-card";
21
+ export type {
22
+ AppointmentUpcomingCardProps,
23
+ AppointmentUpcomingData,
24
+ AppointmentUpcomingAdvisor,
25
+ AppointmentUpcomingStatus,
26
+ AppointmentUpcomingSlot,
27
+ } from "./ui/appointment-upcoming-card";
28
+
14
29
  export { AddColumnModal } from "./ui/add-column-modal";
15
30
  export type {
16
31
  AddColumnModalProps,
@@ -65,6 +80,72 @@ export type {
65
80
  AlertDialogTriggerProps,
66
81
  } from "./ui/alert-dialog";
67
82
 
83
+ export { AppointmentAvailabilitySettings } from "./ui/appointment-availability-settings";
84
+ export type {
85
+ AppointmentAvailabilitySettingsProps,
86
+ AppointmentAvailabilityPrefs,
87
+ AppointmentBlockedDate,
88
+ AppointmentDaySchedule,
89
+ } from "./ui/appointment-availability-settings";
90
+
91
+ export {
92
+ AppointmentConfirmDialog,
93
+ AppointmentRescheduleDialog,
94
+ } from "./ui/appointment-action-dialogs";
95
+ export type {
96
+ AppointmentConfirmAction,
97
+ AppointmentConfirmDialogProps,
98
+ AppointmentRescheduleDialogProps,
99
+ } from "./ui/appointment-action-dialogs";
100
+
101
+ export { AppointmentBookDialog } from "./ui/appointment-book-dialog";
102
+ export type {
103
+ AppointmentBookDialogProps,
104
+ AppointmentBookingSlot,
105
+ AppointmentClient,
106
+ AppointmentOfflineLocation,
107
+ } from "./ui/appointment-book-dialog";
108
+
109
+ export { AppointmentCalendarView } from "./ui/appointment-calendar-view";
110
+ export type {
111
+ AppointmentCalendarViewProps,
112
+ AppointmentCalendarItem,
113
+ AppointmentWeekDay,
114
+ } from "./ui/appointment-calendar-view";
115
+
116
+ export { AppointmentDetailSheet } from "./ui/appointment-detail-sheet";
117
+ export type {
118
+ AppointmentDetailSheetProps,
119
+ AppointmentDetailItem,
120
+ AppointmentClientProfile,
121
+ LoanApplicationStatus,
122
+ } from "./ui/appointment-detail-sheet";
123
+
124
+ export { AppointmentGmailConnect } from "./ui/appointment-gmail-connect";
125
+ export type {
126
+ AppointmentGmailConnectProps,
127
+ GmailConnection,
128
+ GmailConnectionState,
129
+ } from "./ui/appointment-gmail-connect";
130
+
131
+ export { AppointmentMiniCard } from "./ui/appointment-mini-card";
132
+ export type {
133
+ AppointmentMiniCardProps,
134
+ AppointmentMiniCardItem,
135
+ } from "./ui/appointment-mini-card";
136
+
137
+ export {
138
+ AppointmentTimeSlotPicker,
139
+ AppointmentSlotSection,
140
+ } from "./ui/appointment-time-slot-picker";
141
+ export type {
142
+ AppointmentTimeSlotPickerProps,
143
+ AppointmentSlotSectionProps,
144
+ AppointmentTimeSlot,
145
+ AppointmentStatus,
146
+ AppointmentMeetingFormat,
147
+ } from "./ui/appointment-time-slot-picker";
148
+
68
149
  export {
69
150
  Avatar,
70
151
  AvatarImage,
@@ -89,6 +170,20 @@ export type {
89
170
  AlertHistoryPeriod,
90
171
  } from "./ui/backoffice-alert-history-chart";
91
172
 
173
+ export { BackofficeAlertsChart } from "./ui/backoffice-alerts-chart";
174
+ export type {
175
+ BackofficeAlertsChartProps,
176
+ AlertSummaryDataPoint,
177
+ AlertSummaryPeriod,
178
+ } from "./ui/backoffice-alerts-chart";
179
+
180
+ export { BackofficeConnectionsChart } from "./ui/backoffice-connections-chart";
181
+ export type {
182
+ BackofficeConnectionsChartProps,
183
+ ConnectionSummaryDataPoint,
184
+ ConnectionSummaryPeriod,
185
+ } from "./ui/backoffice-connections-chart";
186
+
92
187
  export { BackofficeContactHistoryChart } from "./ui/backoffice-contact-history-chart";
93
188
  export type {
94
189
  BackofficeContactHistoryChartProps,
@@ -531,6 +626,15 @@ export type {
531
626
  export { OpportunitySummaryTab } from "./ui/opportunity-summary-tab";
532
627
  export type { OpportunitySummaryTabProps } from "./ui/opportunity-summary-tab";
533
628
 
629
+ export { SidebarNav } from "./ui/sidebar-nav";
630
+ export type {
631
+ SidebarNavProps,
632
+ SidebarNavItem,
633
+ SidebarNavSubItem,
634
+ SidebarNavMetricItem,
635
+ SidebarNavMetricsGroup,
636
+ } from "./ui/sidebar-nav";
637
+
534
638
  export {
535
639
  Pagination,
536
640
  PaginationContent,
@@ -539,6 +643,8 @@ export {
539
643
  PaginationPrevious,
540
644
  PaginationNext,
541
645
  PaginationEllipsis,
646
+ PaginationNavButtons,
647
+ TablePagination,
542
648
  } from "./ui/pagination";
543
649
  export type {
544
650
  PaginationProps,
@@ -548,6 +654,8 @@ export type {
548
654
  PaginationPreviousProps,
549
655
  PaginationNextProps,
550
656
  PaginationEllipsisProps,
657
+ PaginationNavButtonsProps,
658
+ TablePaginationProps,
551
659
  } from "./ui/pagination";
552
660
 
553
661
  export { PipelineAlerts } from "./ui/pipeline-alerts";
@@ -603,6 +711,12 @@ export type {
603
711
  PopoverDescriptionProps,
604
712
  } from "./ui/popover";
605
713
 
714
+ export { PageHeader } from "./ui/page-header";
715
+ export type { PageHeaderProps } from "./ui/page-header";
716
+
717
+ export { PageTopBar } from "./ui/page-top-bar";
718
+ export type { PageTopBarProps } from "./ui/page-top-bar";
719
+
606
720
  export { Progress } from "./ui/progress";
607
721
  export type { ProgressProps } from "./ui/progress";
608
722
 
@@ -654,15 +768,6 @@ export type {
654
768
  export { Separator } from "./ui/separator";
655
769
  export type { SeparatorProps } from "./ui/separator";
656
770
 
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
771
  export {
667
772
  Sheet,
668
773
  SheetClose,
@@ -8,7 +8,7 @@ import {
8
8
  DialogTitle,
9
9
  DialogFooter,
10
10
  } from "@/components/ui/dialog";
11
- import { Button, buttonVariants } from "@/components/ui/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
- <button
265
+ <Button
266
+ type="button"
267
+ variant="ghost"
268
+ size="icon"
266
269
  onClick={() => removeTask(task.id)}
267
270
  disabled={loading}
268
- className={cn(
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
- </button>
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
- <button
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
- </button>
138
+ </Button>
136
139
  )}
137
140
  </div>
138
141
 
@@ -0,0 +1,227 @@
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
+ } from "lucide-react";
14
+ import type { AppointmentStatus } from "./appointment-time-slot-picker";
15
+
16
+ // ---------------------------------------------------------------------------
17
+ // Types
18
+ // ---------------------------------------------------------------------------
19
+
20
+ /** Appointment data shown in the strip inside the advisor card */
21
+ export interface AdvisorAppointmentStrip {
22
+ status: AppointmentStatus;
23
+ /** Human-readable appointment type — e.g. "Financial Review" */
24
+ appointmentType?: string;
25
+ /** Display date string — e.g. "Wed, 23 Apr 2026" */
26
+ date: string;
27
+ /** Display start time — e.g. "2:00 PM" */
28
+ timeStart: string;
29
+ /** Display end time — e.g. "2:30 PM" */
30
+ timeEnd: string;
31
+ }
32
+
33
+ export interface AdvisorCardProps {
34
+ /** Advisor full name */
35
+ name: string;
36
+ /** Job title / role label */
37
+ role: string;
38
+ /** Phone number string */
39
+ phone: string;
40
+ /** Email address */
41
+ email: string;
42
+ /** URL of the broker company logo — renders as avatar image */
43
+ companyLogoUrl?: string;
44
+ /** Initials shown in Avatar fallback when no companyLogoUrl is provided */
45
+ avatarInitials?: string;
46
+ /** Whether this is the client's primary assigned advisor */
47
+ isPrimary?: boolean;
48
+ /**
49
+ * Upcoming appointment data shown in the strip.
50
+ * - `undefined` — strip is hidden (feature not applicable)
51
+ * - `null` — empty state: "No upcoming appointments"
52
+ * - object — appointment info with status colour
53
+ */
54
+ appointment?: AdvisorAppointmentStrip | null;
55
+ /** Called when "Refer [name] to Others" is clicked */
56
+ onRefer?: () => void;
57
+ /** Called when the ⋮ overflow menu is clicked */
58
+ onMoreOptions?: () => void;
59
+ /** Called when "Book Appointment" is clicked */
60
+ onBookAppointment?: () => void;
61
+ /** Called when "View →" in the appointment strip is clicked */
62
+ onViewAppointment?: () => void;
63
+ }
64
+
65
+ // ---------------------------------------------------------------------------
66
+ // Status config
67
+ // ---------------------------------------------------------------------------
68
+
69
+ const STATUS_VARIANT: Record<
70
+ AppointmentStatus,
71
+ "warning" | "success" | "destructive" | "info"
72
+ > = {
73
+ pending: "warning",
74
+ confirmed: "success",
75
+ cancelled: "destructive",
76
+ rescheduled: "info",
77
+ };
78
+
79
+ const STATUS_LABEL: Record<AppointmentStatus, string> = {
80
+ pending: "Pending",
81
+ confirmed: "Confirmed",
82
+ cancelled: "Cancelled",
83
+ rescheduled: "Rescheduled",
84
+ };
85
+
86
+ const STRIP_BG: Record<AppointmentStatus, string> = {
87
+ pending: "bg-warning/5",
88
+ confirmed: "bg-success/5",
89
+ cancelled: "bg-destructive/5",
90
+ rescheduled: "bg-info/5",
91
+ };
92
+
93
+ // ---------------------------------------------------------------------------
94
+ // Component
95
+ // ---------------------------------------------------------------------------
96
+
97
+ export function AdvisorCard({
98
+ name,
99
+ role,
100
+ phone,
101
+ email,
102
+ companyLogoUrl,
103
+ avatarInitials,
104
+ isPrimary = false,
105
+ appointment,
106
+ onRefer,
107
+ onMoreOptions,
108
+ onBookAppointment,
109
+ onViewAppointment,
110
+ }: AdvisorCardProps) {
111
+ return (
112
+ <div className="flex flex-col border border-border bg-card">
113
+ {/* ── Advisor info ── */}
114
+ <div className="flex items-start gap-4 p-4">
115
+ <Avatar className="h-10 w-10 shrink-0">
116
+ {companyLogoUrl && (
117
+ <AvatarImage src={companyLogoUrl} alt={`${name} company logo`} />
118
+ )}
119
+ <AvatarFallback className="text-sm">
120
+ {avatarInitials ?? name.slice(0, 2).toUpperCase()}
121
+ </AvatarFallback>
122
+ </Avatar>
123
+
124
+ <div className="flex min-w-0 flex-1 flex-col gap-0.5">
125
+ <p className="text-sm font-semibold leading-tight">{name}</p>
126
+ <p className="text-sm text-muted-foreground">{role}</p>
127
+ <div className="mt-2 flex flex-col gap-1">
128
+ <div className="flex items-center gap-1.5 text-xs text-muted-foreground">
129
+ <Phone className="h-3 w-3 shrink-0" />
130
+ <span>{phone}</span>
131
+ </div>
132
+ <div className="flex items-center gap-1.5 text-xs text-muted-foreground">
133
+ <Mail className="h-3 w-3 shrink-0" />
134
+ <span>{email}</span>
135
+ </div>
136
+ </div>
137
+ </div>
138
+
139
+ {/* Badge + overflow menu */}
140
+ <div className="flex shrink-0 items-center gap-1.5">
141
+ {isPrimary && <Badge variant="success">Primary</Badge>}
142
+ <Button
143
+ variant="ghost"
144
+ size="icon"
145
+ className="h-7 w-7"
146
+ onClick={onMoreOptions}
147
+ aria-label="More options"
148
+ >
149
+ <MoreVertical className="h-4 w-4" />
150
+ </Button>
151
+ </div>
152
+ </div>
153
+
154
+ {/* ── Appointment strip ── */}
155
+ {appointment !== undefined && (
156
+ <>
157
+ <Separator />
158
+ {appointment ? (
159
+ /* Has appointment */
160
+ <div
161
+ className={`flex items-center gap-3 px-4 py-3 ${STRIP_BG[appointment.status]}`}
162
+ >
163
+ <CalendarCheck className="h-4 w-4 shrink-0 text-muted-foreground" />
164
+ <div className="flex min-w-0 flex-1 flex-col gap-0.5">
165
+ <div className="flex items-center gap-2">
166
+ <Badge
167
+ variant={STATUS_VARIANT[appointment.status]}
168
+ className="text-[10px]"
169
+ >
170
+ {STATUS_LABEL[appointment.status]}
171
+ </Badge>
172
+ {appointment.appointmentType && (
173
+ <span className="truncate text-xs text-muted-foreground">
174
+ {appointment.appointmentType}
175
+ </span>
176
+ )}
177
+ </div>
178
+ <p className="text-xs text-muted-foreground">
179
+ {appointment.date} · {appointment.timeStart}–
180
+ {appointment.timeEnd}
181
+ </p>
182
+ </div>
183
+ {onViewAppointment && (
184
+ <Button
185
+ variant="ghost"
186
+ size="sm"
187
+ className="h-7 shrink-0 gap-1 px-2 text-xs"
188
+ onClick={onViewAppointment}
189
+ >
190
+ View
191
+ <ChevronRight className="h-3 w-3" />
192
+ </Button>
193
+ )}
194
+ </div>
195
+ ) : (
196
+ /* No appointment */
197
+ <div className="flex items-center gap-3 px-4 py-3">
198
+ <Calendar className="h-4 w-4 shrink-0 text-muted-foreground" />
199
+ <p className="flex-1 text-xs text-muted-foreground">
200
+ No upcoming appointments
201
+ </p>
202
+ </div>
203
+ )}
204
+ </>
205
+ )}
206
+
207
+ {/* ── Footer actions ── */}
208
+ <Separator />
209
+ <div className="flex items-center gap-2 px-4 py-3">
210
+ {onBookAppointment && (
211
+ <Button
212
+ variant="outline-primary"
213
+ size="sm"
214
+ onClick={onBookAppointment}
215
+ >
216
+ Book Appointment
217
+ </Button>
218
+ )}
219
+ {onRefer && (
220
+ <Button variant="outline" size="sm" onClick={onRefer}>
221
+ Refer {name} to Others
222
+ </Button>
223
+ )}
224
+ </div>
225
+ </div>
226
+ );
227
+ }
@@ -141,10 +141,11 @@ function AiTaskCard({
141
141
  onSelect: (text: string) => void;
142
142
  }) {
143
143
  return (
144
- <button
144
+ <Button
145
145
  type="button"
146
+ variant="ghost"
146
147
  onClick={() => onSelect(suggestion.title)}
147
- className="flex flex-col gap-1 border border-border bg-background p-3 text-left transition-colors hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
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
- </button>
156
+ </Button>
156
157
  );
157
158
  }
158
159