@wealthx/shadcn 1.5.10 → 1.5.12

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 (116) hide show
  1. package/.turbo/turbo-build.log +114 -114
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-AANINK2B.mjs → chunk-2KNQZG5S.mjs} +1 -1
  4. package/dist/chunk-3KLJ4XRE.mjs +375 -0
  5. package/dist/{chunk-6U4NQGVM.mjs → chunk-4X4MGYHE.mjs} +2 -2
  6. package/dist/{chunk-CEEVYRQA.mjs → chunk-67DGIPQ4.mjs} +1 -1
  7. package/dist/{chunk-7UIL5UN3.mjs → chunk-7II6QRCZ.mjs} +1 -1
  8. package/dist/{chunk-W5QJ57PU.mjs → chunk-7LN5OGC2.mjs} +1 -1
  9. package/dist/{chunk-ZXEUBBHJ.mjs → chunk-7TMPOZDE.mjs} +1 -1
  10. package/dist/{chunk-AHSCWXYJ.mjs → chunk-AJUAJC5O.mjs} +1 -1
  11. package/dist/{chunk-3CGM3QXQ.mjs → chunk-AKWN5ZQG.mjs} +2 -2
  12. package/dist/{chunk-O5CP6VP6.mjs → chunk-CPM6P63C.mjs} +56 -44
  13. package/dist/{chunk-FRT3S72S.mjs → chunk-CQ7HKBEX.mjs} +1 -1
  14. package/dist/{chunk-54TRNCID.mjs → chunk-EB626HVW.mjs} +78 -11
  15. package/dist/{chunk-E2BNCA6L.mjs → chunk-EHQL64B7.mjs} +1 -1
  16. package/dist/{chunk-2WCIORP7.mjs → chunk-EXI64H46.mjs} +1 -1
  17. package/dist/{chunk-BBXSNDS3.mjs → chunk-FQYFPHDO.mjs} +1 -1
  18. package/dist/{chunk-3VZ6CYY2.mjs → chunk-GAXNO4JB.mjs} +1 -1
  19. package/dist/{chunk-3WGFIFP6.mjs → chunk-I4P7RXAE.mjs} +1 -1
  20. package/dist/{chunk-Z2BW5T7P.mjs → chunk-IODGRCQG.mjs} +1 -1
  21. package/dist/{chunk-GS47ZSSA.mjs → chunk-J7KQON2N.mjs} +20 -5
  22. package/dist/{chunk-IQGKOT7A.mjs → chunk-K35TFQUB.mjs} +1 -1
  23. package/dist/{chunk-4DO3WM7V.mjs → chunk-K4VWSDJJ.mjs} +1 -1
  24. package/dist/{chunk-KWD6GANL.mjs → chunk-MPA2HV5U.mjs} +1 -1
  25. package/dist/{chunk-5LZZYODG.mjs → chunk-QHAMVWDG.mjs} +19 -1
  26. package/dist/{chunk-XUCDPAVI.mjs → chunk-R6U246E4.mjs} +2 -2
  27. package/dist/{chunk-VCDGLN25.mjs → chunk-S6AYZJYO.mjs} +47 -21
  28. package/dist/{chunk-WL6WVV47.mjs → chunk-X6RC5UWB.mjs} +1 -1
  29. package/dist/{chunk-4BHDDLWK.mjs → chunk-XAS6KBIG.mjs} +2 -2
  30. package/dist/{chunk-VWZS32ZQ.mjs → chunk-XYWEGBAA.mjs} +1 -1
  31. package/dist/{chunk-54MTIKNC.mjs → chunk-YV7XF32X.mjs} +49 -24
  32. package/dist/{chunk-E5EDZQ5J.mjs → chunk-ZA44WICP.mjs} +1 -1
  33. package/dist/components/ui/advisor-card.js +144 -55
  34. package/dist/components/ui/advisor-card.mjs +5 -2
  35. package/dist/components/ui/agent-evaluation-toast.js +1 -1
  36. package/dist/components/ui/agent-evaluation-toast.mjs +2 -2
  37. package/dist/components/ui/ai-assistant-drawer.js +1 -1
  38. package/dist/components/ui/ai-assistant-drawer.mjs +2 -2
  39. package/dist/components/ui/ai-builder.js +1 -1
  40. package/dist/components/ui/ai-builder.mjs +2 -2
  41. package/dist/components/ui/ai-conversations.js +71 -4
  42. package/dist/components/ui/ai-conversations.mjs +3 -3
  43. package/dist/components/ui/appointment-action-dialogs.js +1 -1
  44. package/dist/components/ui/appointment-action-dialogs.mjs +3 -3
  45. package/dist/components/ui/appointment-book-dialog.js +19 -4
  46. package/dist/components/ui/appointment-book-dialog.mjs +3 -3
  47. package/dist/components/ui/appointment-calendar-view.js +1 -1
  48. package/dist/components/ui/appointment-calendar-view.mjs +2 -2
  49. package/dist/components/ui/appointment-detail-sheet.js +1 -1
  50. package/dist/components/ui/appointment-detail-sheet.mjs +4 -4
  51. package/dist/components/ui/appointment-gmail-connect.js +1 -1
  52. package/dist/components/ui/appointment-gmail-connect.mjs +2 -2
  53. package/dist/components/ui/appointment-time-slot-picker.js +1 -1
  54. package/dist/components/ui/appointment-time-slot-picker.mjs +2 -2
  55. package/dist/components/ui/appointment-upcoming-card.js +1 -1
  56. package/dist/components/ui/appointment-upcoming-card.mjs +3 -3
  57. package/dist/components/ui/badge.js +1 -1
  58. package/dist/components/ui/badge.mjs +1 -1
  59. package/dist/components/ui/bank-statement-generate-dialog.js +61 -46
  60. package/dist/components/ui/bank-statement-generate-dialog.mjs +1 -1
  61. package/dist/components/ui/chat-widget-primitives.js +1 -1
  62. package/dist/components/ui/chat-widget-primitives.mjs +2 -2
  63. package/dist/components/ui/chat-widget.js +1 -1
  64. package/dist/components/ui/chat-widget.mjs +3 -3
  65. package/dist/components/ui/chip.js +1 -1
  66. package/dist/components/ui/chip.mjs +2 -2
  67. package/dist/components/ui/contact-alert-dialog/index.js +19 -1
  68. package/dist/components/ui/contact-alert-dialog/index.mjs +1 -1
  69. package/dist/components/ui/dashboard-transactions-table.js +1 -1
  70. package/dist/components/ui/dashboard-transactions-table.mjs +2 -2
  71. package/dist/components/ui/financial-cards.js +1 -1
  72. package/dist/components/ui/financial-cards.mjs +2 -2
  73. package/dist/components/ui/financial-sections.js +1 -1
  74. package/dist/components/ui/financial-sections.mjs +3 -3
  75. package/dist/components/ui/income-summary-component.js +1 -1
  76. package/dist/components/ui/income-summary-component.mjs +1 -1
  77. package/dist/components/ui/integration-card.js +1 -1
  78. package/dist/components/ui/integration-card.mjs +2 -2
  79. package/dist/components/ui/kanban-column.js +46 -23
  80. package/dist/components/ui/kanban-column.mjs +4 -4
  81. package/dist/components/ui/loan-applicant-information.js +1 -1
  82. package/dist/components/ui/loan-applicant-information.mjs +1 -1
  83. package/dist/components/ui/loan-application-badge.js +1 -1
  84. package/dist/components/ui/loan-application-badge.mjs +2 -2
  85. package/dist/components/ui/opportunity-card.js +46 -23
  86. package/dist/components/ui/opportunity-card.mjs +3 -3
  87. package/dist/components/ui/opportunity-summary-tab.js +1 -1
  88. package/dist/components/ui/opportunity-summary-tab.mjs +3 -3
  89. package/dist/components/ui/pipeline-board.js +46 -23
  90. package/dist/components/ui/pipeline-board.mjs +5 -5
  91. package/dist/components/ui/pipeline-primitives.js +1 -1
  92. package/dist/components/ui/pipeline-primitives.mjs +2 -2
  93. package/dist/components/ui/property-asset-card.js +1 -1
  94. package/dist/components/ui/property-asset-card.mjs +1 -1
  95. package/dist/components/ui/resource-center.js +1 -1
  96. package/dist/components/ui/resource-center.mjs +2 -2
  97. package/dist/components/ui/share-details-dialog.js +326 -30
  98. package/dist/components/ui/share-details-dialog.mjs +4 -1
  99. package/dist/components/ui/stage-timeline.js +1 -1
  100. package/dist/components/ui/stage-timeline.mjs +3 -3
  101. package/dist/index.js +583 -232
  102. package/dist/index.mjs +45 -43
  103. package/dist/styles.css +1 -1
  104. package/package.json +1 -1
  105. package/src/components/index.tsx +4 -0
  106. package/src/components/ui/advisor-card.tsx +75 -25
  107. package/src/components/ui/ai-conversations.tsx +157 -23
  108. package/src/components/ui/appointment-book-dialog.tsx +26 -3
  109. package/src/components/ui/appointment-time-slot-picker.tsx +1 -0
  110. package/src/components/ui/badge.tsx +1 -1
  111. package/src/components/ui/bank-statement-generate-dialog.tsx +84 -61
  112. package/src/components/ui/contact-alert-dialog/contact-alert-dialog.tsx +19 -1
  113. package/src/components/ui/opportunity-card.tsx +56 -20
  114. package/src/components/ui/share-details-dialog.tsx +251 -0
  115. package/src/styles/styles-css.ts +1 -1
  116. package/dist/chunk-OZ2R6ERP.mjs +0 -174
@@ -211,7 +211,7 @@ Slot.displayName = "Slot";
211
211
  // src/components/ui/badge.tsx
212
212
  var import_jsx_runtime2 = require("react/jsx-runtime");
213
213
  var badgeVariants = (0, import_class_variance_authority.cva)(
214
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
214
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
215
215
  {
216
216
  variants: {
217
217
  variant: {
@@ -1244,15 +1244,19 @@ function ChatComposer({
1244
1244
  mode,
1245
1245
  channel: channelProp = "chat",
1246
1246
  onChannelChange,
1247
+ isEmailIntegrated = false,
1247
1248
  contactEmail = "",
1248
1249
  inputValue = "",
1249
1250
  onInputChange,
1250
1251
  onSend,
1252
+ onSendEmail,
1251
1253
  onTakeOver,
1252
1254
  onLetAiHandle,
1253
1255
  className
1254
1256
  }) {
1255
- const [channel, setChannel] = import_react3.default.useState(channelProp);
1257
+ const [channel, setChannel] = import_react3.default.useState(
1258
+ isEmailIntegrated ? channelProp : "chat"
1259
+ );
1256
1260
  const [emailTo, setEmailTo] = import_react3.default.useState(contactEmail);
1257
1261
  const [emailCc, setEmailCc] = import_react3.default.useState("");
1258
1262
  const [showCc, setShowCc] = import_react3.default.useState(false);
@@ -1302,7 +1306,7 @@ function ChatComposer({
1302
1306
  className
1303
1307
  ),
1304
1308
  children: [
1305
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1309
+ isEmailIntegrated && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1306
1310
  Tabs,
1307
1311
  {
1308
1312
  value: channel,
@@ -1437,7 +1441,12 @@ function ChatComposer({
1437
1441
  Button,
1438
1442
  {
1439
1443
  size: "sm",
1440
- onClick: () => onSend == null ? void 0 : onSend(inputValue),
1444
+ onClick: () => onSendEmail == null ? void 0 : onSendEmail({
1445
+ content: inputValue,
1446
+ to: emailTo,
1447
+ cc: emailCc,
1448
+ subject: emailSubject
1449
+ }),
1441
1450
  disabled: !inputValue.trim() || !emailTo.trim(),
1442
1451
  children: [
1443
1452
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.Send, { className: "mr-1.5 size-3.5" }),
@@ -1492,9 +1501,11 @@ function ChatThread({
1492
1501
  isAiTyping = false,
1493
1502
  channel,
1494
1503
  onChannelChange,
1504
+ isEmailIntegrated,
1495
1505
  inputValue,
1496
1506
  onInputChange,
1497
1507
  onSend,
1508
+ onSendEmail,
1498
1509
  onTakeOver,
1499
1510
  onLetAiHandle,
1500
1511
  onReopen,
@@ -1502,12 +1513,53 @@ function ChatThread({
1502
1513
  onUnmarkUrgent,
1503
1514
  onArchive,
1504
1515
  onAssignToAdvisor,
1516
+ hasMoreMessages,
1517
+ isLoadingMoreMessages,
1518
+ onLoadMoreMessages,
1505
1519
  onBack,
1506
1520
  onShowLeadInfo,
1507
1521
  className
1508
1522
  }) {
1509
1523
  const aiIsHandling = mode === "ai";
1510
1524
  const isClosed = status === "closed";
1525
+ const scrollRef = import_react3.default.useRef(null);
1526
+ const preLoadScrollHeightRef = import_react3.default.useRef(null);
1527
+ const handleScroll = (e) => {
1528
+ if (!hasMoreMessages || isLoadingMoreMessages || !onLoadMoreMessages) {
1529
+ return;
1530
+ }
1531
+ if (e.currentTarget.scrollTop <= 80) {
1532
+ preLoadScrollHeightRef.current = e.currentTarget.scrollHeight;
1533
+ onLoadMoreMessages();
1534
+ }
1535
+ };
1536
+ const prevLastMessageIdRef = import_react3.default.useRef(void 0);
1537
+ const prevContactIdRef = import_react3.default.useRef(contact.id);
1538
+ import_react3.default.useLayoutEffect(() => {
1539
+ var _a, _b;
1540
+ const el = scrollRef.current;
1541
+ if (!el) return;
1542
+ if (preLoadScrollHeightRef.current !== null) {
1543
+ el.scrollTop = el.scrollHeight - preLoadScrollHeightRef.current;
1544
+ preLoadScrollHeightRef.current = null;
1545
+ prevLastMessageIdRef.current = (_a = messages[messages.length - 1]) == null ? void 0 : _a.id;
1546
+ prevContactIdRef.current = contact.id;
1547
+ return;
1548
+ }
1549
+ const currentLastId = (_b = messages[messages.length - 1]) == null ? void 0 : _b.id;
1550
+ const contactChanged = prevContactIdRef.current !== contact.id;
1551
+ const tailChanged = prevLastMessageIdRef.current !== currentLastId;
1552
+ if (contactChanged || tailChanged) {
1553
+ el.scrollTop = el.scrollHeight;
1554
+ }
1555
+ prevLastMessageIdRef.current = currentLastId;
1556
+ prevContactIdRef.current = contact.id;
1557
+ }, [contact.id, messages]);
1558
+ import_react3.default.useLayoutEffect(() => {
1559
+ if (!isAiTyping) return;
1560
+ const el = scrollRef.current;
1561
+ if (el) el.scrollTop = el.scrollHeight;
1562
+ }, [isAiTyping]);
1511
1563
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: cn("flex flex-col bg-background", className), children: [
1512
1564
  /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1513
1565
  "div",
@@ -1597,9 +1649,12 @@ function ChatThread({
1597
1649
  /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1598
1650
  "div",
1599
1651
  {
1652
+ ref: scrollRef,
1653
+ onScroll: handleScroll,
1600
1654
  className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4",
1601
1655
  tabIndex: 0,
1602
1656
  children: [
1657
+ isLoadingMoreMessages && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex justify-center py-1 text-caption text-muted-foreground", children: "Loading older messages..." }),
1603
1658
  messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground", children: [
1604
1659
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.MessageSquare, { className: "size-8 opacity-30" }),
1605
1660
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-sm", children: "No messages yet" })
@@ -1637,10 +1692,12 @@ function ChatThread({
1637
1692
  mode,
1638
1693
  channel,
1639
1694
  onChannelChange,
1695
+ isEmailIntegrated,
1640
1696
  contactEmail: contact.email,
1641
1697
  inputValue,
1642
1698
  onInputChange,
1643
1699
  onSend,
1700
+ onSendEmail,
1644
1701
  onTakeOver,
1645
1702
  onLetAiHandle
1646
1703
  }
@@ -1991,11 +2048,15 @@ function ConversationsPage({
1991
2048
  onChannelFilterChange,
1992
2049
  channel,
1993
2050
  onChannelChange,
2051
+ isEmailIntegrated,
1994
2052
  inputValue,
1995
2053
  internalNotes,
1996
2054
  showLeadPanel = true,
1997
2055
  hasMore,
1998
2056
  isLoadingMore,
2057
+ hasMoreMessages,
2058
+ isLoadingMoreMessages,
2059
+ onLoadMoreMessages,
1999
2060
  isAiTyping,
2000
2061
  notesSaveStatus,
2001
2062
  onSelectConversation,
@@ -2004,6 +2065,7 @@ function ConversationsPage({
2004
2065
  onFilterChange,
2005
2066
  onInputChange,
2006
2067
  onSend,
2068
+ onSendEmail,
2007
2069
  onTakeOver,
2008
2070
  onLetAiHandle,
2009
2071
  onReopen,
@@ -2072,9 +2134,11 @@ function ConversationsPage({
2072
2134
  isAiTyping,
2073
2135
  channel,
2074
2136
  onChannelChange,
2137
+ isEmailIntegrated,
2075
2138
  inputValue,
2076
2139
  onInputChange,
2077
2140
  onSend,
2141
+ onSendEmail,
2078
2142
  onTakeOver,
2079
2143
  onLetAiHandle,
2080
2144
  onReopen,
@@ -2082,6 +2146,9 @@ function ConversationsPage({
2082
2146
  onUnmarkUrgent,
2083
2147
  onArchive,
2084
2148
  onAssignToAdvisor,
2149
+ hasMoreMessages,
2150
+ isLoadingMoreMessages,
2151
+ onLoadMoreMessages,
2085
2152
  onBack: () => setMobilePanel("list"),
2086
2153
  onShowLeadInfo: () => setMobilePanel("lead"),
2087
2154
  className: cn(
@@ -9,15 +9,15 @@ import {
9
9
  ConversationStatusChip,
10
10
  ConversationsPage,
11
11
  LeadInfoPanel
12
- } from "../../chunk-54TRNCID.mjs";
13
- import "../../chunk-H5DTKPJ2.mjs";
12
+ } from "../../chunk-EB626HVW.mjs";
14
13
  import "../../chunk-3S6KVFF5.mjs";
15
14
  import "../../chunk-WE4YKBDE.mjs";
15
+ import "../../chunk-H5DTKPJ2.mjs";
16
16
  import "../../chunk-2GIYVERS.mjs";
17
17
  import "../../chunk-BS75ICOO.mjs";
18
18
  import "../../chunk-LI2CTS5O.mjs";
19
19
  import "../../chunk-H6NQTIF4.mjs";
20
- import "../../chunk-WL6WVV47.mjs";
20
+ import "../../chunk-X6RC5UWB.mjs";
21
21
  import "../../chunk-OWFQSXVD.mjs";
22
22
  import "../../chunk-6QAFGZC2.mjs";
23
23
  import "../../chunk-LBTHZSBT.mjs";
@@ -864,7 +864,7 @@ var import_lucide_react4 = require("lucide-react");
864
864
  var import_class_variance_authority2 = require("class-variance-authority");
865
865
  var import_jsx_runtime9 = require("react/jsx-runtime");
866
866
  var badgeVariants = (0, import_class_variance_authority2.cva)(
867
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
867
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
868
868
  {
869
869
  variants: {
870
870
  variant: {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  AppointmentConfirmDialog,
3
3
  AppointmentRescheduleDialog
4
- } from "../../chunk-AANINK2B.mjs";
5
- import "../../chunk-FRT3S72S.mjs";
4
+ } from "../../chunk-2KNQZG5S.mjs";
5
+ import "../../chunk-CQ7HKBEX.mjs";
6
6
  import "../../chunk-2GIYVERS.mjs";
7
7
  import "../../chunk-BS75ICOO.mjs";
8
8
  import "../../chunk-LI2CTS5O.mjs";
9
- import "../../chunk-WL6WVV47.mjs";
9
+ import "../../chunk-X6RC5UWB.mjs";
10
10
  import "../../chunk-CEYEK3TI.mjs";
11
11
  import "../../chunk-FBNEIYSE.mjs";
12
12
  import "../../chunk-LHWJQNLG.mjs";
@@ -1264,7 +1264,7 @@ function Textarea(_a) {
1264
1264
  var import_class_variance_authority3 = require("class-variance-authority");
1265
1265
  var import_jsx_runtime15 = require("react/jsx-runtime");
1266
1266
  var badgeVariants = (0, import_class_variance_authority3.cva)(
1267
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
1267
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
1268
1268
  {
1269
1269
  variants: {
1270
1270
  variant: {
@@ -1448,6 +1448,19 @@ var FORMAT_OPTIONS = [
1448
1448
  icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.MapPin, { className: "h-4 w-4" })
1449
1449
  }
1450
1450
  ];
1451
+ var CLIENT_FORMAT_OPTIONS = [
1452
+ { value: "call", label: "Call", icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Phone, { className: "h-4 w-4" }) },
1453
+ {
1454
+ value: "online",
1455
+ label: "Online Meeting",
1456
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Video, { className: "h-4 w-4" })
1457
+ },
1458
+ {
1459
+ value: "offline",
1460
+ label: "Offline Meeting",
1461
+ icon: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.MapPin, { className: "h-4 w-4" })
1462
+ }
1463
+ ];
1451
1464
  function MeetingFormatSection({
1452
1465
  format: format2,
1453
1466
  onFormatChange,
@@ -1457,10 +1470,11 @@ function MeetingFormatSection({
1457
1470
  onCustomAddressChange,
1458
1471
  advisorOfficeAddress,
1459
1472
  clientHomeAddress,
1460
- isClientMode
1473
+ isClientMode,
1474
+ formatOptions
1461
1475
  }) {
1462
1476
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-col gap-2", children: [
1463
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex gap-2", children: FORMAT_OPTIONS.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1477
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex gap-2", children: formatOptions.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1464
1478
  Toggle,
1465
1479
  {
1466
1480
  variant: "outline",
@@ -1753,7 +1767,8 @@ function AppointmentBookDialog({
1753
1767
  onCustomAddressChange: setCustomAddress,
1754
1768
  advisorOfficeAddress,
1755
1769
  clientHomeAddress,
1756
- isClientMode
1770
+ isClientMode,
1771
+ formatOptions: isClientMode ? CLIENT_FORMAT_OPTIONS : FORMAT_OPTIONS
1757
1772
  }
1758
1773
  )
1759
1774
  ] }),
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  AppointmentBookDialog
3
- } from "../../chunk-GS47ZSSA.mjs";
3
+ } from "../../chunk-J7KQON2N.mjs";
4
4
  import "../../chunk-JTK6VJXY.mjs";
5
5
  import "../../chunk-MXP2RX2V.mjs";
6
6
  import "../../chunk-ISUA7DSB.mjs";
7
- import "../../chunk-FRT3S72S.mjs";
7
+ import "../../chunk-CQ7HKBEX.mjs";
8
8
  import "../../chunk-USOVLDGS.mjs";
9
9
  import "../../chunk-2GIYVERS.mjs";
10
10
  import "../../chunk-BS75ICOO.mjs";
11
11
  import "../../chunk-LI2CTS5O.mjs";
12
12
  import "../../chunk-H6NQTIF4.mjs";
13
- import "../../chunk-WL6WVV47.mjs";
13
+ import "../../chunk-X6RC5UWB.mjs";
14
14
  import "../../chunk-FBNEIYSE.mjs";
15
15
  import "../../chunk-LHWJQNLG.mjs";
16
16
  import "../../chunk-P7CEBZM6.mjs";
@@ -198,7 +198,7 @@ Slot.displayName = "Slot";
198
198
  // src/components/ui/badge.tsx
199
199
  var import_jsx_runtime2 = require("react/jsx-runtime");
200
200
  var badgeVariants = (0, import_class_variance_authority.cva)(
201
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
201
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
202
202
  {
203
203
  variants: {
204
204
  variant: {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  AppointmentCalendarView
3
- } from "../../chunk-Z2BW5T7P.mjs";
3
+ } from "../../chunk-IODGRCQG.mjs";
4
4
  import "../../chunk-WE4YKBDE.mjs";
5
5
  import "../../chunk-2GIYVERS.mjs";
6
6
  import "../../chunk-H6NQTIF4.mjs";
7
- import "../../chunk-WL6WVV47.mjs";
7
+ import "../../chunk-X6RC5UWB.mjs";
8
8
  import "../../chunk-LHWJQNLG.mjs";
9
9
  import "../../chunk-NOOEKOWY.mjs";
10
10
  import "../../chunk-R4HCRDU5.mjs";
@@ -199,7 +199,7 @@ Slot.displayName = "Slot";
199
199
  // src/components/ui/badge.tsx
200
200
  var import_jsx_runtime2 = require("react/jsx-runtime");
201
201
  var badgeVariants = (0, import_class_variance_authority.cva)(
202
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
202
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
203
203
  {
204
204
  variants: {
205
205
  variant: {
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  AppointmentDetailSheet
3
- } from "../../chunk-XUCDPAVI.mjs";
4
- import "../../chunk-AANINK2B.mjs";
5
- import "../../chunk-FRT3S72S.mjs";
3
+ } from "../../chunk-R6U246E4.mjs";
4
+ import "../../chunk-2KNQZG5S.mjs";
5
+ import "../../chunk-CQ7HKBEX.mjs";
6
6
  import "../../chunk-NCMV3LTP.mjs";
7
7
  import "../../chunk-2GIYVERS.mjs";
8
8
  import "../../chunk-BS75ICOO.mjs";
9
9
  import "../../chunk-LI2CTS5O.mjs";
10
10
  import "../../chunk-H6NQTIF4.mjs";
11
- import "../../chunk-WL6WVV47.mjs";
11
+ import "../../chunk-X6RC5UWB.mjs";
12
12
  import "../../chunk-CEYEK3TI.mjs";
13
13
  import "../../chunk-FBNEIYSE.mjs";
14
14
  import "../../chunk-LHWJQNLG.mjs";
@@ -155,7 +155,7 @@ Slot.displayName = "Slot";
155
155
  // src/components/ui/badge.tsx
156
156
  var import_jsx_runtime = require("react/jsx-runtime");
157
157
  var badgeVariants = (0, import_class_variance_authority.cva)(
158
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
158
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
159
159
  {
160
160
  variants: {
161
161
  variant: {
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  AppointmentGmailConnect
3
- } from "../../chunk-ZXEUBBHJ.mjs";
3
+ } from "../../chunk-7TMPOZDE.mjs";
4
4
  import "../../chunk-2GIYVERS.mjs";
5
- import "../../chunk-WL6WVV47.mjs";
5
+ import "../../chunk-X6RC5UWB.mjs";
6
6
  import "../../chunk-LBTHZSBT.mjs";
7
7
  import "../../chunk-NOOEKOWY.mjs";
8
8
  import "../../chunk-R4HCRDU5.mjs";
@@ -153,7 +153,7 @@ Slot.displayName = "Slot";
153
153
  // src/components/ui/badge.tsx
154
154
  var import_jsx_runtime = require("react/jsx-runtime");
155
155
  var badgeVariants = (0, import_class_variance_authority.cva)(
156
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
156
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
157
157
  {
158
158
  variants: {
159
159
  variant: {
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  AppointmentSlotSection,
3
3
  AppointmentTimeSlotPicker
4
- } from "../../chunk-FRT3S72S.mjs";
5
- import "../../chunk-WL6WVV47.mjs";
4
+ } from "../../chunk-CQ7HKBEX.mjs";
5
+ import "../../chunk-X6RC5UWB.mjs";
6
6
  import "../../chunk-6QAFGZC2.mjs";
7
7
  import "../../chunk-R4HCRDU5.mjs";
8
8
  import "../../chunk-AFML43VJ.mjs";
@@ -200,7 +200,7 @@ Slot.displayName = "Slot";
200
200
  // src/components/ui/badge.tsx
201
201
  var import_jsx_runtime2 = require("react/jsx-runtime");
202
202
  var badgeVariants = (0, import_class_variance_authority.cva)(
203
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
203
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
204
204
  {
205
205
  variants: {
206
206
  variant: {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  AppointmentUpcomingCard
3
- } from "../../chunk-4BHDDLWK.mjs";
4
- import "../../chunk-FRT3S72S.mjs";
3
+ } from "../../chunk-XAS6KBIG.mjs";
4
+ import "../../chunk-CQ7HKBEX.mjs";
5
5
  import "../../chunk-2GIYVERS.mjs";
6
6
  import "../../chunk-BS75ICOO.mjs";
7
7
  import "../../chunk-LI2CTS5O.mjs";
8
8
  import "../../chunk-H6NQTIF4.mjs";
9
- import "../../chunk-WL6WVV47.mjs";
9
+ import "../../chunk-X6RC5UWB.mjs";
10
10
  import "../../chunk-FBNEIYSE.mjs";
11
11
  import "../../chunk-LHWJQNLG.mjs";
12
12
  import "../../chunk-P7CEBZM6.mjs";
@@ -151,7 +151,7 @@ Slot.displayName = "Slot";
151
151
  // src/components/ui/badge.tsx
152
152
  var import_jsx_runtime = require("react/jsx-runtime");
153
153
  var badgeVariants = (0, import_class_variance_authority.cva)(
154
- "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-xs font-medium font-sans whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
154
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 py-0.5 text-caption whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3",
155
155
  {
156
156
  variants: {
157
157
  variant: {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Badge,
3
3
  badgeVariants
4
- } from "../../chunk-WL6WVV47.mjs";
4
+ } from "../../chunk-X6RC5UWB.mjs";
5
5
  import "../../chunk-R4HCRDU5.mjs";
6
6
  import "../../chunk-AFML43VJ.mjs";
7
7
  import "../../chunk-WNQUEZJF.mjs";
@@ -65,6 +65,11 @@ module.exports = __toCommonJS(bank_statement_generate_dialog_exports);
65
65
  var import_react5 = require("react");
66
66
  var import_date_fns3 = require("date-fns");
67
67
 
68
+ // src/components/ui/button.tsx
69
+ var import_react = require("react");
70
+ var import_class_variance_authority = require("class-variance-authority");
71
+ var import_lucide_react = require("lucide-react");
72
+
68
73
  // src/lib/utils.ts
69
74
  var import_clsx = require("clsx");
70
75
  var import_tailwind_merge = require("tailwind-merge");
@@ -104,11 +109,6 @@ function cn(...inputs) {
104
109
  return twMerge((0, import_clsx.clsx)(inputs));
105
110
  }
106
111
 
107
- // src/components/ui/button.tsx
108
- var import_react = require("react");
109
- var import_class_variance_authority = require("class-variance-authority");
110
- var import_lucide_react = require("lucide-react");
111
-
112
112
  // src/lib/slot.tsx
113
113
  var React = __toESM(require("react"));
114
114
  function mergeRefs(...refs) {
@@ -1278,6 +1278,10 @@ function ToggleGroupItem(_a) {
1278
1278
 
1279
1279
  // src/components/ui/bank-statement-generate-dialog.tsx
1280
1280
  var import_jsx_runtime17 = require("react/jsx-runtime");
1281
+ var APPLICANT_TYPE_LABELS = {
1282
+ primary: "Main applicant",
1283
+ secondary: "Co-applicant"
1284
+ };
1281
1285
  function toIsoDate(date) {
1282
1286
  return date.toISOString().slice(0, 10);
1283
1287
  }
@@ -1301,8 +1305,10 @@ function BankStatementGenerateDialog({
1301
1305
  }) {
1302
1306
  const [statementName, setStatementName] = (0, import_react5.useState)("Bank Statement 1");
1303
1307
  const [rangePreset, setRangePreset] = (0, import_react5.useState)(90);
1304
- const [fromDate, setFromDate] = (0, import_react5.useState)("");
1305
- const [toDate, setToDate] = (0, import_react5.useState)("");
1308
+ const [fromDate, setFromDate] = (0, import_react5.useState)(
1309
+ () => presetToDateRange(90).from
1310
+ );
1311
+ const [toDate, setToDate] = (0, import_react5.useState)(() => presetToDateRange(90).to);
1306
1312
  const [applicantType, setApplicantType] = (0, import_react5.useState)("");
1307
1313
  const [selectedAccountIds, setSelectedAccountIds] = (0, import_react5.useState)([]);
1308
1314
  (0, import_react5.useEffect)(() => {
@@ -1331,6 +1337,11 @@ function BankStatementGenerateDialog({
1331
1337
  setToDate(to);
1332
1338
  }
1333
1339
  };
1340
+ const handlePresetChange = (val) => {
1341
+ if (val.length === 0) return;
1342
+ const raw = val[0];
1343
+ applyPreset(raw === "custom" ? "custom" : Number(raw));
1344
+ };
1334
1345
  const areAllSelected = bankAccounts.length > 0 && selectedAccountIds.length === bankAccounts.length;
1335
1346
  const isSomeSelected = selectedAccountIds.length > 0 && !areAllSelected;
1336
1347
  const handleToggleAccount = (id) => {
@@ -1366,7 +1377,8 @@ function BankStatementGenerateDialog({
1366
1377
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1367
1378
  DialogContent,
1368
1379
  {
1369
- className: cn("max-w-[700px]", className),
1380
+ size: "3xl",
1381
+ className,
1370
1382
  "data-slot": "bank-statement-generate-dialog",
1371
1383
  children: [
1372
1384
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DialogTitle, { children: "Generate Bank Statement" }) }),
@@ -1390,15 +1402,7 @@ function BankStatementGenerateDialog({
1390
1402
  type: "single",
1391
1403
  variant: "outline",
1392
1404
  value: [String(rangePreset)],
1393
- onValueChange: (val) => {
1394
- if (val.length === 0) return;
1395
- const raw = val[0];
1396
- if (raw === "custom") {
1397
- applyPreset("custom");
1398
- } else {
1399
- applyPreset(Number(raw));
1400
- }
1401
- },
1405
+ onValueChange: handlePresetChange,
1402
1406
  className: "w-full",
1403
1407
  children: [
1404
1408
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ToggleGroupItem, { value: "90", className: "flex-1", children: "3 Months" }),
@@ -1434,11 +1438,12 @@ function BankStatementGenerateDialog({
1434
1438
  {
1435
1439
  value: applicantType,
1436
1440
  onValueChange: (v) => handleApplicantTypeChange(v),
1441
+ items: APPLICANT_TYPE_LABELS,
1437
1442
  children: [
1438
1443
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectTrigger, { className: "w-full", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectValue, { placeholder: "Applicant Type" }) }),
1439
1444
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(SelectContent, { children: [
1440
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectItem, { value: "primary", children: "Main applicant" }),
1441
- hasCoApplicant && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectItem, { value: "secondary", children: "Co-applicant" })
1445
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectItem, { value: "primary", children: APPLICANT_TYPE_LABELS.primary }),
1446
+ hasCoApplicant && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SelectItem, { value: "secondary", children: APPLICANT_TYPE_LABELS.secondary })
1442
1447
  ] })
1443
1448
  ]
1444
1449
  }
@@ -1464,33 +1469,43 @@ function BankStatementGenerateDialog({
1464
1469
  ] }) }),
1465
1470
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableBody, { children: bankAccounts.map((account) => {
1466
1471
  var _a, _b;
1467
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(TableRow, { children: [
1468
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1469
- Checkbox,
1470
- {
1471
- checked: selectedAccountIds.includes(account.id),
1472
- onCheckedChange: () => handleToggleAccount(account.id),
1473
- "aria-label": `Select ${account.name}`
1474
- }
1475
- ) }),
1476
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-2", children: [
1477
- account.institutionLogo && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1478
- "img",
1479
- {
1480
- src: account.institutionLogo,
1481
- alt: (_a = account.institutionName) != null ? _a : "",
1482
- className: "size-8 rounded object-cover"
1483
- }
1484
- ),
1485
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium font-semibold", children: account.name || account.institutionName || "\u2014" })
1486
- ] }) }),
1487
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium", children: (_b = account.accountNo) != null ? _b : "\u2014" }) }),
1488
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium", children: periodLabel }) }),
1489
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium", children: account.lastUpdated ? (0, import_date_fns3.format)(
1490
- (0, import_date_fns3.parseISO)(account.lastUpdated),
1491
- "dd MMM yyyy"
1492
- ) : "\u2014" }) })
1493
- ] }, account.id);
1472
+ const isSelected = selectedAccountIds.includes(
1473
+ account.id
1474
+ );
1475
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1476
+ TableRow,
1477
+ {
1478
+ "data-state": isSelected ? "selected" : void 0,
1479
+ children: [
1480
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1481
+ Checkbox,
1482
+ {
1483
+ checked: isSelected,
1484
+ onCheckedChange: () => handleToggleAccount(account.id),
1485
+ "aria-label": `Select ${account.name}`
1486
+ }
1487
+ ) }),
1488
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-2", children: [
1489
+ account.institutionLogo && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1490
+ "img",
1491
+ {
1492
+ src: account.institutionLogo,
1493
+ alt: (_a = account.institutionName) != null ? _a : "",
1494
+ className: "size-8 object-cover"
1495
+ }
1496
+ ),
1497
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium font-semibold", children: account.name || account.institutionName || "\u2014" })
1498
+ ] }) }),
1499
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium", children: (_b = account.accountNo) != null ? _b : "\u2014" }) }),
1500
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium", children: periodLabel }) }),
1501
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-body-medium", children: account.lastUpdated ? (0, import_date_fns3.format)(
1502
+ (0, import_date_fns3.parseISO)(account.lastUpdated),
1503
+ "dd MMM yyyy"
1504
+ ) : "\u2014" }) })
1505
+ ]
1506
+ },
1507
+ account.id
1508
+ );
1494
1509
  }) })
1495
1510
  ] })
1496
1511
  ] })