@wealthx/shadcn 1.2.1 → 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 (247) hide show
  1. package/.turbo/turbo-build.log +203 -150
  2. package/CHANGELOG.md +29 -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-SYOD63OZ.mjs → chunk-5FQIKDKP.mjs} +6 -6
  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-WOEHFRGB.mjs → chunk-BDYZCBRT.mjs} +4 -4
  20. package/dist/{chunk-WAZD7NFU.mjs → chunk-BKNFWEH2.mjs} +6 -6
  21. package/dist/{chunk-CLIN5525.mjs → chunk-C7CQJNMR.mjs} +1 -1
  22. package/dist/{chunk-D4ILTPOG.mjs → chunk-CFMQP5QS.mjs} +5 -4
  23. package/dist/{chunk-VPBN3WOO.mjs → chunk-DGHAXJBN.mjs} +9 -7
  24. package/dist/chunk-DOEO3CDL.mjs +27 -0
  25. package/dist/{chunk-KUDCQ4FI.mjs → chunk-DUJTAXMH.mjs} +9 -4
  26. package/dist/{chunk-GGM2UYGG.mjs → chunk-EBXQWIYG.mjs} +10 -4
  27. package/dist/{chunk-PMB3A7V3.mjs → chunk-EI5F6FMT.mjs} +1 -1
  28. package/dist/chunk-EWRB4PAD.mjs +468 -0
  29. package/dist/chunk-FAKPBKLT.mjs +253 -0
  30. package/dist/chunk-FNQXOAYJ.mjs +169 -0
  31. package/dist/{chunk-4CX4SBRO.mjs → chunk-GHC7LLUX.mjs} +14 -5
  32. package/dist/chunk-HBZLGDIN.mjs +507 -0
  33. package/dist/{chunk-SIZMLSRU.mjs → chunk-HISNT2MG.mjs} +8 -6
  34. package/dist/{chunk-PR6V5XKM.mjs → chunk-HVY6KCCF.mjs} +7 -4
  35. package/dist/chunk-I3RZS7V2.mjs +136 -0
  36. package/dist/chunk-IAE3F7DR.mjs +1962 -0
  37. package/dist/{chunk-ZRO5JO3H.mjs → chunk-IHMFS7NZ.mjs} +81 -84
  38. package/dist/{chunk-PCPLO5HT.mjs → chunk-IOJRDS6V.mjs} +96 -14
  39. package/dist/{chunk-LHYCMLVA.mjs → chunk-JKGDCQTZ.mjs} +11 -4
  40. package/dist/{chunk-H45TKD34.mjs → chunk-JMHR3YGZ.mjs} +1 -1
  41. package/dist/{chunk-4MN6UQHG.mjs → chunk-K5A5L6T2.mjs} +17 -39
  42. package/dist/{chunk-CSDO6VBW.mjs → chunk-LBMRIB3G.mjs} +10 -10
  43. package/dist/chunk-LV35NGVG.mjs +272 -0
  44. package/dist/{chunk-FZIXGLMV.mjs → chunk-M3FV7LOK.mjs} +5 -12
  45. package/dist/{chunk-FMAXJ2SI.mjs → chunk-MBON7YRJ.mjs} +1 -1
  46. package/dist/chunk-MIZQHHUO.mjs +441 -0
  47. package/dist/chunk-MN5NYQCL.mjs +29 -0
  48. package/dist/chunk-NL3ZO62D.mjs +31 -0
  49. package/dist/{chunk-Q76O3RIQ.mjs → chunk-NMOI6CQD.mjs} +1 -1
  50. package/dist/{chunk-P6AM5V7O.mjs → chunk-OODBHKG7.mjs} +1 -1
  51. package/dist/chunk-PBL4OQV2.mjs +283 -0
  52. package/dist/{chunk-3WMX6KWS.mjs → chunk-PU4YZQXV.mjs} +11 -12
  53. package/dist/chunk-QMY3AZJH.mjs +80 -0
  54. package/dist/{chunk-BL3DXM2X.mjs → chunk-QZ4RE6NA.mjs} +11 -4
  55. package/dist/{chunk-VACKZOMY.mjs → chunk-R3VSPKNP.mjs} +3 -3
  56. package/dist/{chunk-OPNQAVVH.mjs → chunk-RJI6GKVF.mjs} +8 -6
  57. package/dist/{chunk-WG6JGJXB.mjs → chunk-T4BJLT57.mjs} +1 -1
  58. package/dist/chunk-U4NDAF2P.mjs +207 -0
  59. package/dist/{chunk-DOH3EHX7.mjs → chunk-U5X52X37.mjs} +1 -1
  60. package/dist/chunk-UMTOX62O.mjs +415 -0
  61. package/dist/{chunk-7MMXNK3C.mjs → chunk-VLARHE5V.mjs} +8 -6
  62. package/dist/{chunk-2I5S2AMY.mjs → chunk-XREGSKX3.mjs} +2 -2
  63. package/dist/{chunk-JNQORUPP.mjs → chunk-YJG55G2H.mjs} +14 -11
  64. package/dist/chunk-ZC45IGZO.mjs +388 -0
  65. package/dist/components/ui/add-column-modal.js +42 -14
  66. package/dist/components/ui/add-column-modal.mjs +4 -4
  67. package/dist/components/ui/add-lead-modal.js +42 -11
  68. package/dist/components/ui/add-lead-modal.mjs +3 -3
  69. package/dist/components/ui/advisor-card.js +497 -0
  70. package/dist/components/ui/advisor-card.mjs +13 -0
  71. package/dist/components/ui/ai-assistant-drawer.js +11 -10
  72. package/dist/components/ui/ai-assistant-drawer.mjs +3 -3
  73. package/dist/components/ui/alert-dialog.js +2 -2
  74. package/dist/components/ui/alert-dialog.mjs +2 -2
  75. package/dist/components/ui/appointment-action-dialogs.js +1160 -0
  76. package/dist/components/ui/appointment-action-dialogs.mjs +23 -0
  77. package/dist/components/ui/appointment-availability-settings.js +1590 -0
  78. package/dist/components/ui/appointment-availability-settings.mjs +23 -0
  79. package/dist/components/ui/appointment-book-dialog.js +1744 -0
  80. package/dist/components/ui/appointment-book-dialog.mjs +27 -0
  81. package/dist/components/ui/appointment-calendar-view.js +833 -0
  82. package/dist/components/ui/appointment-calendar-view.mjs +14 -0
  83. package/dist/components/ui/appointment-detail-sheet.js +1517 -0
  84. package/dist/components/ui/appointment-detail-sheet.mjs +24 -0
  85. package/dist/components/ui/appointment-gmail-connect.js +467 -0
  86. package/dist/components/ui/appointment-gmail-connect.mjs +14 -0
  87. package/dist/components/ui/appointment-mini-card.js +345 -0
  88. package/dist/components/ui/appointment-mini-card.mjs +11 -0
  89. package/dist/components/ui/appointment-time-slot-picker.js +311 -0
  90. package/dist/components/ui/appointment-time-slot-picker.mjs +13 -0
  91. package/dist/components/ui/appointment-upcoming-card.js +1268 -0
  92. package/dist/components/ui/appointment-upcoming-card.mjs +21 -0
  93. package/dist/components/ui/backoffice-alert-history-chart.js +11 -5
  94. package/dist/components/ui/backoffice-alert-history-chart.mjs +5 -4
  95. package/dist/components/ui/backoffice-alerts-chart.js +786 -0
  96. package/dist/components/ui/backoffice-alerts-chart.mjs +19 -0
  97. package/dist/components/ui/backoffice-connections-chart.js +817 -0
  98. package/dist/components/ui/backoffice-connections-chart.mjs +19 -0
  99. package/dist/components/ui/backoffice-contact-history-chart.js +11 -5
  100. package/dist/components/ui/backoffice-contact-history-chart.mjs +5 -4
  101. package/dist/components/ui/badge.js +6 -6
  102. package/dist/components/ui/badge.mjs +1 -1
  103. package/dist/components/ui/borrowing-capacity-line-chart.js +30 -21
  104. package/dist/components/ui/borrowing-capacity-line-chart.mjs +5 -4
  105. package/dist/components/ui/button.js +2 -2
  106. package/dist/components/ui/button.mjs +1 -1
  107. package/dist/components/ui/calendar.js +2 -2
  108. package/dist/components/ui/calendar.mjs +2 -2
  109. package/dist/components/ui/card.js +1 -1
  110. package/dist/components/ui/card.mjs +1 -1
  111. package/dist/components/ui/cash-balance-line-chart.js +31 -23
  112. package/dist/components/ui/cash-balance-line-chart.mjs +5 -4
  113. package/dist/components/ui/cashflow-bar-chart.js +12 -5
  114. package/dist/components/ui/cashflow-bar-chart.mjs +5 -4
  115. package/dist/components/ui/chip.js +97 -18
  116. package/dist/components/ui/chip.mjs +3 -2
  117. package/dist/components/ui/color-picker.js +547 -0
  118. package/dist/components/ui/color-picker.mjs +24 -0
  119. package/dist/components/ui/data-table.js +182 -129
  120. package/dist/components/ui/data-table.mjs +3 -2
  121. package/dist/components/ui/date-picker.js +48 -27
  122. package/dist/components/ui/date-picker.mjs +4 -3
  123. package/dist/components/ui/dialog.js +37 -9
  124. package/dist/components/ui/dialog.mjs +2 -2
  125. package/dist/components/ui/expense-bar-chart.js +12 -5
  126. package/dist/components/ui/expense-bar-chart.mjs +5 -4
  127. package/dist/components/ui/field.mjs +2 -2
  128. package/dist/components/ui/financial-cards.js +322 -155
  129. package/dist/components/ui/financial-cards.mjs +5 -3
  130. package/dist/components/ui/financial-drawers.js +2 -2
  131. package/dist/components/ui/financial-drawers.mjs +3 -3
  132. package/dist/components/ui/financial-sections.js +14 -10
  133. package/dist/components/ui/financial-sections.mjs +6 -5
  134. package/dist/components/ui/form-primitives.js +4 -4
  135. package/dist/components/ui/form-primitives.mjs +3 -3
  136. package/dist/components/ui/income-bar-chart.js +12 -5
  137. package/dist/components/ui/income-bar-chart.mjs +5 -4
  138. package/dist/components/ui/input-group.js +2 -2
  139. package/dist/components/ui/input-group.mjs +2 -2
  140. package/dist/components/ui/kanban-column.js +52 -44
  141. package/dist/components/ui/kanban-column.mjs +7 -5
  142. package/dist/components/ui/opportunity-card.js +52 -44
  143. package/dist/components/ui/opportunity-card.mjs +6 -4
  144. package/dist/components/ui/opportunity-edit-modals.js +1371 -1267
  145. package/dist/components/ui/opportunity-edit-modals.mjs +10 -10
  146. package/dist/components/ui/opportunity-summary-tab.js +2748 -2161
  147. package/dist/components/ui/opportunity-summary-tab.mjs +16 -16
  148. package/dist/components/ui/page-header.js +92 -0
  149. package/dist/components/ui/page-header.mjs +8 -0
  150. package/dist/components/ui/page-top-bar.js +88 -0
  151. package/dist/components/ui/page-top-bar.mjs +8 -0
  152. package/dist/components/ui/pagination.js +303 -19
  153. package/dist/components/ui/pagination.mjs +11 -4
  154. package/dist/components/ui/pipeline-board.js +209 -195
  155. package/dist/components/ui/pipeline-board.mjs +10 -8
  156. package/dist/components/ui/pipeline-dialogs.js +118 -69
  157. package/dist/components/ui/pipeline-dialogs.mjs +8 -7
  158. package/dist/components/ui/pipeline-primitives.js +6 -6
  159. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  160. package/dist/components/ui/property-cashflow-doughnut-chart.js +14 -12
  161. package/dist/components/ui/property-cashflow-doughnut-chart.mjs +5 -4
  162. package/dist/components/ui/property-debt-equity-doughnut-chart.js +14 -12
  163. package/dist/components/ui/property-debt-equity-doughnut-chart.mjs +5 -4
  164. package/dist/components/ui/property-mobile-estimate-line-chart.js +16 -14
  165. package/dist/components/ui/property-mobile-estimate-line-chart.mjs +5 -4
  166. package/dist/components/ui/sidebar-nav.js +679 -0
  167. package/dist/components/ui/sidebar-nav.mjs +14 -0
  168. package/dist/components/ui/stage-timeline.js +6 -6
  169. package/dist/components/ui/stage-timeline.mjs +3 -3
  170. package/dist/components/ui/stepper.js +283 -0
  171. package/dist/components/ui/stepper.mjs +18 -0
  172. package/dist/components/ui/toggle-group.js +4 -4
  173. package/dist/components/ui/toggle-group.mjs +2 -2
  174. package/dist/components/ui/toggle.js +4 -4
  175. package/dist/components/ui/toggle.mjs +1 -1
  176. package/dist/components/ui/transactions-expense-categories-doughnut-chart.js +18 -16
  177. package/dist/components/ui/transactions-expense-categories-doughnut-chart.mjs +5 -4
  178. package/dist/components/ui/transactions-income-expense-bar-chart.js +28 -12
  179. package/dist/components/ui/transactions-income-expense-bar-chart.mjs +5 -4
  180. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.js +18 -16
  181. package/dist/components/ui/transactions-liabilities-breakdown-doughnut-chart.mjs +5 -4
  182. package/dist/index.js +12927 -8522
  183. package/dist/index.mjs +288 -190
  184. package/dist/lib/typography.js +10 -10
  185. package/dist/lib/typography.mjs +1 -1
  186. package/dist/styles.css +1 -1
  187. package/package.json +86 -1
  188. package/src/components/index.tsx +146 -0
  189. package/src/components/ui/add-column-modal.tsx +7 -7
  190. package/src/components/ui/add-lead-modal.tsx +6 -3
  191. package/src/components/ui/advisor-card.tsx +227 -0
  192. package/src/components/ui/ai-assistant-drawer.tsx +4 -3
  193. package/src/components/ui/appointment-action-dialogs.tsx +297 -0
  194. package/src/components/ui/appointment-availability-settings.tsx +645 -0
  195. package/src/components/ui/appointment-book-dialog.tsx +618 -0
  196. package/src/components/ui/appointment-calendar-view.tsx +510 -0
  197. package/src/components/ui/appointment-detail-sheet.tsx +415 -0
  198. package/src/components/ui/appointment-gmail-connect.tsx +188 -0
  199. package/src/components/ui/appointment-mini-card.tsx +104 -0
  200. package/src/components/ui/appointment-time-slot-picker.tsx +123 -0
  201. package/src/components/ui/appointment-upcoming-card.tsx +635 -0
  202. package/src/components/ui/backoffice-alert-history-chart.tsx +10 -2
  203. package/src/components/ui/backoffice-alerts-chart.tsx +312 -0
  204. package/src/components/ui/backoffice-connections-chart.tsx +339 -0
  205. package/src/components/ui/backoffice-contact-history-chart.tsx +10 -2
  206. package/src/components/ui/badge.tsx +12 -6
  207. package/src/components/ui/borrowing-capacity-line-chart.tsx +4 -11
  208. package/src/components/ui/button.tsx +2 -2
  209. package/src/components/ui/card.tsx +1 -1
  210. package/src/components/ui/cash-balance-line-chart.tsx +4 -23
  211. package/src/components/ui/cashflow-bar-chart.tsx +9 -2
  212. package/src/components/ui/chart-shared.tsx +4 -11
  213. package/src/components/ui/chip.tsx +23 -19
  214. package/src/components/ui/color-picker.tsx +309 -0
  215. package/src/components/ui/data-table.tsx +117 -83
  216. package/src/components/ui/date-picker.tsx +42 -37
  217. package/src/components/ui/dialog.tsx +72 -6
  218. package/src/components/ui/expense-bar-chart.tsx +11 -2
  219. package/src/components/ui/financial-cards.tsx +99 -10
  220. package/src/components/ui/income-bar-chart.tsx +11 -2
  221. package/src/components/ui/opportunity-card.tsx +10 -39
  222. package/src/components/ui/opportunity-edit-modals.tsx +98 -36
  223. package/src/components/ui/opportunity-summary-tab.tsx +548 -232
  224. package/src/components/ui/page-header.tsx +57 -0
  225. package/src/components/ui/page-top-bar.tsx +48 -0
  226. package/src/components/ui/pagination.tsx +171 -22
  227. package/src/components/ui/pipeline-board.tsx +12 -5
  228. package/src/components/ui/property-cashflow-doughnut-chart.tsx +3 -1
  229. package/src/components/ui/property-debt-equity-doughnut-chart.tsx +3 -1
  230. package/src/components/ui/property-mobile-estimate-line-chart.tsx +3 -1
  231. package/src/components/ui/sidebar-nav.tsx +516 -0
  232. package/src/components/ui/stepper.tsx +347 -0
  233. package/src/components/ui/toggle.tsx +4 -4
  234. package/src/components/ui/transactions-expense-categories-doughnut-chart.tsx +3 -1
  235. package/src/components/ui/transactions-income-expense-bar-chart.tsx +12 -9
  236. package/src/components/ui/transactions-liabilities-breakdown-doughnut-chart.tsx +3 -1
  237. package/src/lib/format-currency.ts +44 -0
  238. package/src/lib/format-date.ts +50 -0
  239. package/src/lib/opportunity-constants.ts +12 -0
  240. package/src/lib/typography.ts +11 -11
  241. package/src/styles/globals.css +36 -34
  242. package/src/styles/styles-css.ts +1 -1
  243. package/tsup.config.ts +17 -0
  244. package/dist/chunk-PG6K5XEC.mjs +0 -475
  245. package/dist/chunk-WA6O6EUR.mjs +0 -1885
  246. package/dist/chunk-WNGWBVLV.mjs +0 -148
  247. 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.1",
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",
@@ -248,6 +258,11 @@
248
258
  "import": "./dist/components/ui/chip.mjs",
249
259
  "require": "./dist/components/ui/chip.js"
250
260
  },
261
+ "./color-picker": {
262
+ "types": "./src/components/ui/color-picker.tsx",
263
+ "import": "./dist/components/ui/color-picker.mjs",
264
+ "require": "./dist/components/ui/color-picker.js"
265
+ },
251
266
  "./combobox": {
252
267
  "types": "./src/components/ui/combobox.tsx",
253
268
  "import": "./dist/components/ui/combobox.mjs",
@@ -363,6 +378,16 @@
363
378
  "import": "./dist/components/ui/backoffice-alert-history-chart.mjs",
364
379
  "require": "./dist/components/ui/backoffice-alert-history-chart.js"
365
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
+ },
366
391
  "./pipeline-primitives": {
367
392
  "types": "./src/components/ui/pipeline-primitives.tsx",
368
393
  "import": "./dist/components/ui/pipeline-primitives.mjs",
@@ -413,6 +438,11 @@
413
438
  "import": "./dist/components/ui/stage-timeline.mjs",
414
439
  "require": "./dist/components/ui/stage-timeline.js"
415
440
  },
441
+ "./stepper": {
442
+ "types": "./src/components/ui/stepper.tsx",
443
+ "import": "./dist/components/ui/stepper.mjs",
444
+ "require": "./dist/components/ui/stepper.js"
445
+ },
416
446
  "./ai-assistant-drawer": {
417
447
  "types": "./src/components/ui/ai-assistant-drawer.tsx",
418
448
  "import": "./dist/components/ui/ai-assistant-drawer.mjs",
@@ -432,6 +462,61 @@
432
462
  "types": "./src/components/ui/opportunity-summary-tab.tsx",
433
463
  "import": "./dist/components/ui/opportunity-summary-tab.mjs",
434
464
  "require": "./dist/components/ui/opportunity-summary-tab.js"
465
+ },
466
+ "./sidebar-nav": {
467
+ "types": "./src/components/ui/sidebar-nav.tsx",
468
+ "import": "./dist/components/ui/sidebar-nav.mjs",
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"
435
520
  }
436
521
  }
437
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,
@@ -153,6 +248,20 @@ export type { CheckboxProps, CheckboxCardProps } from "./ui/checkbox";
153
248
  export { Chip } from "./ui/chip";
154
249
  export type { ChipProps } from "./ui/chip";
155
250
 
251
+ export {
252
+ ColorPicker,
253
+ ColorPickerContent,
254
+ ColorSwatch,
255
+ COLOR_PICKER_PRESETS,
256
+ isValidHex,
257
+ normalizeHex,
258
+ } from "./ui/color-picker";
259
+ export type {
260
+ ColorPickerProps,
261
+ ColorPickerContentProps,
262
+ ColorSwatchProps,
263
+ } from "./ui/color-picker";
264
+
156
265
  export {
157
266
  Combobox,
158
267
  ComboboxTrigger,
@@ -191,6 +300,7 @@ export {
191
300
  export type {
192
301
  DataTableProps,
193
302
  ColumnDef,
303
+ PaginationState,
194
304
  SortingState,
195
305
  ColumnFiltersState,
196
306
  VisibilityState,
@@ -516,6 +626,15 @@ export type {
516
626
  export { OpportunitySummaryTab } from "./ui/opportunity-summary-tab";
517
627
  export type { OpportunitySummaryTabProps } from "./ui/opportunity-summary-tab";
518
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
+
519
638
  export {
520
639
  Pagination,
521
640
  PaginationContent,
@@ -524,6 +643,8 @@ export {
524
643
  PaginationPrevious,
525
644
  PaginationNext,
526
645
  PaginationEllipsis,
646
+ PaginationNavButtons,
647
+ TablePagination,
527
648
  } from "./ui/pagination";
528
649
  export type {
529
650
  PaginationProps,
@@ -533,6 +654,8 @@ export type {
533
654
  PaginationPreviousProps,
534
655
  PaginationNextProps,
535
656
  PaginationEllipsisProps,
657
+ PaginationNavButtonsProps,
658
+ TablePaginationProps,
536
659
  } from "./ui/pagination";
537
660
 
538
661
  export { PipelineAlerts } from "./ui/pipeline-alerts";
@@ -588,6 +711,12 @@ export type {
588
711
  PopoverDescriptionProps,
589
712
  } from "./ui/popover";
590
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
+
591
720
  export { Progress } from "./ui/progress";
592
721
  export type { ProgressProps } from "./ui/progress";
593
722
 
@@ -680,6 +809,23 @@ export type {
680
809
  StageTimelineTask,
681
810
  } from "./ui/stage-timeline";
682
811
 
812
+ export {
813
+ Stepper,
814
+ Step,
815
+ StepIndicator,
816
+ StepLabel,
817
+ StepContent,
818
+ StepItem,
819
+ } from "./ui/stepper";
820
+ export type {
821
+ StepperProps,
822
+ StepProps,
823
+ StepIndicatorProps,
824
+ StepLabelProps,
825
+ StepContentProps,
826
+ StepItemProps,
827
+ } from "./ui/stepper";
828
+
683
829
  export { Switch, SwitchCard } from "./ui/switch";
684
830
  export type { SwitchProps, SwitchCardProps } from "./ui/switch";
685
831
 
@@ -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