@fluid-app/portal-sdk 0.1.46 → 0.1.47

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 (117) hide show
  1. package/dist/{CarouselWidget-Bx5jrthO.cjs → CarouselWidget-BRauT5r7.cjs} +2 -2
  2. package/dist/{CarouselWidget-Bx5jrthO.cjs.map → CarouselWidget-BRauT5r7.cjs.map} +1 -1
  3. package/dist/{CarouselWidget-C04z7JxO.mjs → CarouselWidget-C7vsjw7r.mjs} +2 -2
  4. package/dist/{CarouselWidget-C04z7JxO.mjs.map → CarouselWidget-C7vsjw7r.mjs.map} +1 -1
  5. package/dist/{CarouselWidget-BcnZwnIh.cjs → CarouselWidget-CE12yIQt.cjs} +2 -2
  6. package/dist/{ChartWidget-WaLM-zc-.mjs → ChartWidget-BqidaXNw.mjs} +2 -2
  7. package/dist/{ChartWidget-WaLM-zc-.mjs.map → ChartWidget-BqidaXNw.mjs.map} +1 -1
  8. package/dist/{ChartWidget-_jzD434L.cjs → ChartWidget-DQvxMlax.cjs} +2 -2
  9. package/dist/{ChartWidget-DWWeWN0Q.cjs → ChartWidget-pFCP3KBK.cjs} +2 -2
  10. package/dist/{ChartWidget-DWWeWN0Q.cjs.map → ChartWidget-pFCP3KBK.cjs.map} +1 -1
  11. package/dist/{ContactsScreen-C0I1_D_a.cjs → ContactsScreen-9G2HgNsy.cjs} +375 -39
  12. package/dist/ContactsScreen-9G2HgNsy.cjs.map +1 -0
  13. package/dist/{ContactsScreen-DO7EwobV.cjs → ContactsScreen-BmM91s6y.cjs} +8 -8
  14. package/dist/{ContactsScreen-B4FZ0Qeu.mjs → ContactsScreen-Cx3DlL9d.mjs} +8 -8
  15. package/dist/{ContactsScreen-CoFB7EM3.mjs → ContactsScreen-VftTRDXR.mjs} +376 -40
  16. package/dist/ContactsScreen-VftTRDXR.mjs.map +1 -0
  17. package/dist/{FluidProvider-DzrMOFXn.cjs → FluidProvider-CsIC3HL2.cjs} +9 -9
  18. package/dist/{FluidProvider-DzrMOFXn.cjs.map → FluidProvider-CsIC3HL2.cjs.map} +1 -1
  19. package/dist/{FluidProvider-iYl6DSax.mjs → FluidProvider-Dj4ToywG.mjs} +9 -9
  20. package/dist/{FluidProvider-iYl6DSax.mjs.map → FluidProvider-Dj4ToywG.mjs.map} +1 -1
  21. package/dist/{LinkWidget-DFApxWIK.cjs → LinkWidget-CHTbeWcV.cjs} +2 -2
  22. package/dist/{LinkWidget-CJKveS10.cjs → LinkWidget-Dk_01CMC.cjs} +2 -2
  23. package/dist/{LinkWidget-CJKveS10.cjs.map → LinkWidget-Dk_01CMC.cjs.map} +1 -1
  24. package/dist/{LinkWidget-NR2OqU4Y.mjs → LinkWidget-sDGQRCy9.mjs} +2 -2
  25. package/dist/{LinkWidget-NR2OqU4Y.mjs.map → LinkWidget-sDGQRCy9.mjs.map} +1 -1
  26. package/dist/{MessagingScreen-CUBOR0qo.cjs → MessagingScreen-4tFoITCO.cjs} +4 -4
  27. package/dist/{MessagingScreen-CUBOR0qo.cjs.map → MessagingScreen-4tFoITCO.cjs.map} +1 -1
  28. package/dist/{MessagingScreen-kP-1EJZ5.mjs → MessagingScreen-C24TYBXX.mjs} +8 -8
  29. package/dist/{MessagingScreen-CfbkE7H-.cjs → MessagingScreen-D5xc9XPU.cjs} +7 -7
  30. package/dist/{MessagingScreen-DgvqyD7k.mjs → MessagingScreen-DbJPeyhA.mjs} +5 -5
  31. package/dist/{MessagingScreen-DgvqyD7k.mjs.map → MessagingScreen-DbJPeyhA.mjs.map} +1 -1
  32. package/dist/{MySiteScreen-jE2m5qP6.cjs → MySiteScreen-Bjt-TIOI.cjs} +7 -7
  33. package/dist/{MySiteScreen-CvyqpzJd.mjs → MySiteScreen-CgsOL37h.mjs} +3 -3
  34. package/dist/{MySiteScreen-CvyqpzJd.mjs.map → MySiteScreen-CgsOL37h.mjs.map} +1 -1
  35. package/dist/{MySiteScreen-DUMMPU6X.mjs → MySiteScreen-CsdcTxTp.mjs} +7 -7
  36. package/dist/{MySiteScreen-NJSRcmI-.cjs → MySiteScreen-ohuek6np.cjs} +3 -3
  37. package/dist/{MySiteScreen-NJSRcmI-.cjs.map → MySiteScreen-ohuek6np.cjs.map} +1 -1
  38. package/dist/{OrdersScreen-BTJAhLgs.mjs → OrdersScreen-BZEcJ0Hb.mjs} +8 -8
  39. package/dist/{OrdersScreen-B2ErpU4b.mjs → OrdersScreen-Bhll_o_2.mjs} +4 -4
  40. package/dist/{OrdersScreen-B2ErpU4b.mjs.map → OrdersScreen-Bhll_o_2.mjs.map} +1 -1
  41. package/dist/{OrdersScreen-CE0GMwfC.cjs → OrdersScreen-DZBPD4Qu.cjs} +8 -8
  42. package/dist/{OrdersScreen-DvqljQVk.cjs → OrdersScreen-mRGgujQ-.cjs} +4 -4
  43. package/dist/{OrdersScreen-DvqljQVk.cjs.map → OrdersScreen-mRGgujQ-.cjs.map} +1 -1
  44. package/dist/{ProductsScreen-CBVy5Zyi.mjs → ProductsScreen-9c89IHiX.mjs} +4 -4
  45. package/dist/{ProductsScreen-CBVy5Zyi.mjs.map → ProductsScreen-9c89IHiX.mjs.map} +1 -1
  46. package/dist/{ProductsScreen-DdX6HMHt.cjs → ProductsScreen-BtgPVLUi.cjs} +4 -4
  47. package/dist/{ProductsScreen-DdX6HMHt.cjs.map → ProductsScreen-BtgPVLUi.cjs.map} +1 -1
  48. package/dist/{ProductsScreen-HIV2lQ9Z.cjs → ProductsScreen-CYs8q165.cjs} +8 -8
  49. package/dist/{ProductsScreen-Bb5icf74.mjs → ProductsScreen-Dy-cmEiB.mjs} +9 -9
  50. package/dist/{ProfileScreen-LmGvJwTb.cjs → ProfileScreen-CLM8iOmL.cjs} +4 -4
  51. package/dist/{ProfileScreen-LmGvJwTb.cjs.map → ProfileScreen-CLM8iOmL.cjs.map} +1 -1
  52. package/dist/{ProfileScreen-DAFrOHW1.cjs → ProfileScreen-DCCZN8zU.cjs} +7 -7
  53. package/dist/{ProfileScreen-BpJ41w20.mjs → ProfileScreen-DPtpl6j3.mjs} +7 -7
  54. package/dist/{ProfileScreen-r8ceJSGs.mjs → ProfileScreen-s8S3JVIE.mjs} +4 -4
  55. package/dist/{ProfileScreen-r8ceJSGs.mjs.map → ProfileScreen-s8S3JVIE.mjs.map} +1 -1
  56. package/dist/{ShareablesScreen-CBw3gH0u.cjs → ShareablesScreen-BN3uztrI.cjs} +8 -8
  57. package/dist/{ShareablesScreen-Dfa0LM6R.cjs → ShareablesScreen-D1Ouqir1.cjs} +4 -4
  58. package/dist/{ShareablesScreen-Dfa0LM6R.cjs.map → ShareablesScreen-D1Ouqir1.cjs.map} +1 -1
  59. package/dist/{ShareablesScreen-0JcyLc7i.mjs → ShareablesScreen-DR6219-z.mjs} +4 -4
  60. package/dist/{ShareablesScreen-0JcyLc7i.mjs.map → ShareablesScreen-DR6219-z.mjs.map} +1 -1
  61. package/dist/{ShareablesScreen-Riod6fjb.mjs → ShareablesScreen-nhOckVQr.mjs} +9 -9
  62. package/dist/{ShopScreen-DMDSD4gF.mjs → ShopScreen-CUaZmX4U.mjs} +5 -5
  63. package/dist/{ShopScreen-DMDSD4gF.mjs.map → ShopScreen-CUaZmX4U.mjs.map} +1 -1
  64. package/dist/{ShopScreen-CET9016G.cjs → ShopScreen-D8hz0Io1.cjs} +7 -7
  65. package/dist/{ShopScreen-C73ARj6e.cjs → ShopScreen-Ds7FGtOi.cjs} +5 -5
  66. package/dist/{ShopScreen-C73ARj6e.cjs.map → ShopScreen-Ds7FGtOi.cjs.map} +1 -1
  67. package/dist/{ShopScreen-Ddrw43gs.mjs → ShopScreen-Dz-gzUFw.mjs} +7 -7
  68. package/dist/{SubscriptionsScreen-CPXCoeeu.cjs → SubscriptionsScreen-Bt6RDwDB.cjs} +8 -8
  69. package/dist/{SubscriptionsScreen-BMjdIyWT.mjs → SubscriptionsScreen-CX3uLV-Y.mjs} +8 -8
  70. package/dist/{SubscriptionsScreen-CpvMZaU0.cjs → SubscriptionsScreen-sixWFqS0.cjs} +5 -5
  71. package/dist/{SubscriptionsScreen-CpvMZaU0.cjs.map → SubscriptionsScreen-sixWFqS0.cjs.map} +1 -1
  72. package/dist/{SubscriptionsScreen-BLrScFQV.mjs → SubscriptionsScreen-wfQjDMiz.mjs} +5 -5
  73. package/dist/{SubscriptionsScreen-BLrScFQV.mjs.map → SubscriptionsScreen-wfQjDMiz.mjs.map} +1 -1
  74. package/dist/{TableWidget-aZUcob2U.mjs → TableWidget-DF5i7arL.mjs} +2 -2
  75. package/dist/{TableWidget-aZUcob2U.mjs.map → TableWidget-DF5i7arL.mjs.map} +1 -1
  76. package/dist/{TableWidget-DFWfQIWv.cjs → TableWidget-DFpr7R3o.cjs} +2 -2
  77. package/dist/{TableWidget-DFWfQIWv.cjs.map → TableWidget-DFpr7R3o.cjs.map} +1 -1
  78. package/dist/{TableWidget-WB7hx4Hb.cjs → TableWidget-blS7QRfo.cjs} +2 -2
  79. package/dist/{es-CE6ELtdT.mjs → es-D5TTjbe7.mjs} +2 -2
  80. package/dist/{es-CE6ELtdT.mjs.map → es-D5TTjbe7.mjs.map} +1 -1
  81. package/dist/index.cjs +38 -38
  82. package/dist/index.d.cts.map +1 -1
  83. package/dist/index.d.mts.map +1 -1
  84. package/dist/index.mjs +39 -39
  85. package/dist/{products-DOCuAQDz.mjs → products-BHmOUNfQ.mjs} +3 -3
  86. package/dist/{products-DOCuAQDz.mjs.map → products-BHmOUNfQ.mjs.map} +1 -1
  87. package/dist/{products-zutaVs48.cjs → products-jXnAQoTU.cjs} +3 -3
  88. package/dist/{products-zutaVs48.cjs.map → products-jXnAQoTU.cjs.map} +1 -1
  89. package/dist/{src-Dd1iRW7j.mjs → src-BtBYwiNS.mjs} +2 -2
  90. package/dist/{src-Dd1iRW7j.mjs.map → src-BtBYwiNS.mjs.map} +1 -1
  91. package/dist/{src-CIhTbou2.mjs → src-CnrUO5fh.mjs} +4 -4
  92. package/dist/{src-CIhTbou2.mjs.map → src-CnrUO5fh.mjs.map} +1 -1
  93. package/dist/{src-CXGrnE7x.cjs → src-CpNCyVxq.cjs} +3 -3
  94. package/dist/{src-CXGrnE7x.cjs.map → src-CpNCyVxq.cjs.map} +1 -1
  95. package/dist/{src-CWGmmrLZ.cjs → src-Da7I1fqK.cjs} +17 -3
  96. package/dist/src-Da7I1fqK.cjs.map +1 -0
  97. package/dist/{src-COTid97-.cjs → src-DecFyd_1.cjs} +2 -2
  98. package/dist/{src-COTid97-.cjs.map → src-DecFyd_1.cjs.map} +1 -1
  99. package/dist/{src-BVkLGnwV.mjs → src-DvSsESTu.mjs} +12 -4
  100. package/dist/src-DvSsESTu.mjs.map +1 -0
  101. package/dist/{use-account-clients-BOwgvZok.cjs → use-account-clients-C0ioK2n_.cjs} +2 -2
  102. package/dist/{use-account-clients-BOwgvZok.cjs.map → use-account-clients-C0ioK2n_.cjs.map} +1 -1
  103. package/dist/{use-account-clients-EEcG-B1B.mjs → use-account-clients-D9HGyaK9.mjs} +2 -2
  104. package/dist/{use-account-clients-EEcG-B1B.mjs.map → use-account-clients-D9HGyaK9.mjs.map} +1 -1
  105. package/dist/{use-customer-account-TLWo3z05.mjs → use-customer-account-BwXCw2H3.mjs} +3 -3
  106. package/dist/{use-customer-account-TLWo3z05.mjs.map → use-customer-account-BwXCw2H3.mjs.map} +1 -1
  107. package/dist/{use-customer-account-BxoVi8ak.cjs → use-customer-account-CRcU8yDx.cjs} +3 -3
  108. package/dist/{use-customer-account-BxoVi8ak.cjs.map → use-customer-account-CRcU8yDx.cjs.map} +1 -1
  109. package/dist/{use-fluid-api-CU_r0Gu9.cjs → use-fluid-api-Bb3qgqYS.cjs} +2 -2
  110. package/dist/{use-fluid-api-CU_r0Gu9.cjs.map → use-fluid-api-Bb3qgqYS.cjs.map} +1 -1
  111. package/dist/{use-fluid-api-DH8hTTPQ.mjs → use-fluid-api-Chd3dSwr.mjs} +2 -2
  112. package/dist/{use-fluid-api-DH8hTTPQ.mjs.map → use-fluid-api-Chd3dSwr.mjs.map} +1 -1
  113. package/package.json +15 -15
  114. package/dist/ContactsScreen-C0I1_D_a.cjs.map +0 -1
  115. package/dist/ContactsScreen-CoFB7EM3.mjs.map +0 -1
  116. package/dist/src-BVkLGnwV.mjs.map +0 -1
  117. package/dist/src-CWGmmrLZ.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  const require_chunk = require("./chunk-DAgNkxik.cjs");
2
- const require_FluidProvider = require("./FluidProvider-DzrMOFXn.cjs");
2
+ const require_FluidProvider = require("./FluidProvider-CsIC3HL2.cjs");
3
3
  const require_parse_api_errors = require("./parse-api-errors-CAnpE2_r.cjs");
4
- const require_src = require("./src-CWGmmrLZ.cjs");
5
- const require_src$1 = require("./src-COTid97-.cjs");
4
+ const require_src = require("./src-Da7I1fqK.cjs");
5
+ const require_src$1 = require("./src-DecFyd_1.cjs");
6
6
  const require_dist = require("./dist-CtcLRHrv.cjs");
7
7
  const require_dist$1 = require("./dist-BUWkpuUk.cjs");
8
8
  let react = require("react");
@@ -40,21 +40,233 @@ function StatusBadge({ status, label, className }) {
40
40
  }
41
41
  //#endregion
42
42
  //#region ../../contacts/ui/src/shared/components/contacts/allContacts/contactsTable.tsx
43
+ function getInitials(fullName) {
44
+ const trimmed = fullName?.trim();
45
+ if (!trimmed) return "?";
46
+ const parts = trimmed.split(/\s+/).filter(Boolean);
47
+ if (parts.length >= 2) {
48
+ const a = parts[0]?.[0];
49
+ const b = parts[1]?.[0];
50
+ return `${a ?? ""}${b ?? ""}`.toUpperCase() || "?";
51
+ }
52
+ return trimmed.slice(0, 2).toUpperCase();
53
+ }
54
+ function dedupeGroupLabels(labels) {
55
+ const seen = /* @__PURE__ */ new Set();
56
+ const out = [];
57
+ for (const label of labels) {
58
+ const key = label.toLowerCase();
59
+ if (seen.has(key)) continue;
60
+ seen.add(key);
61
+ out.push(label);
62
+ }
63
+ return out;
64
+ }
65
+ /** Pull a display label from one API group/tag object or string. */
66
+ function labelFromGroupLikeItem(item) {
67
+ if (typeof item === "string") return item.trim();
68
+ if (!item || typeof item !== "object") return "";
69
+ const o = item;
70
+ for (const k of [
71
+ "name",
72
+ "title",
73
+ "label",
74
+ "display_name"
75
+ ]) {
76
+ const v = o[k];
77
+ if (typeof v === "string" && v.trim()) return v.trim();
78
+ }
79
+ return "";
80
+ }
81
+ function labelsFromGroupArray(value) {
82
+ if (!Array.isArray(value) || value.length === 0) return [];
83
+ return dedupeGroupLabels(value.map(labelFromGroupLikeItem).filter(Boolean));
84
+ }
85
+ function labelsFromMetadata(m) {
86
+ for (const key of [
87
+ "contact_groups",
88
+ "contactGroups",
89
+ "groups",
90
+ "labels",
91
+ "tags",
92
+ "segments"
93
+ ]) {
94
+ const found = labelsFromGroupArray(m[key]);
95
+ if (found.length > 0) return found;
96
+ }
97
+ for (const key of [
98
+ "group_name",
99
+ "contact_group",
100
+ "group"
101
+ ]) {
102
+ const v = m[key];
103
+ if (typeof v === "string" && v.trim()) return [v.trim()];
104
+ const one = labelFromGroupLikeItem(v);
105
+ if (one) return [one];
106
+ }
107
+ return [];
108
+ }
109
+ function firstNonEmptyGroupList(...candidates) {
110
+ for (const c of candidates) {
111
+ const labels = labelsFromGroupArray(c);
112
+ if (labels.length > 0) return labels;
113
+ }
114
+ return [];
115
+ }
116
+ /**
117
+ * Ordered group labels for badges. Prefer plural/array sources before singular
118
+ * `contact_group` so we don't drop additional groups when the API sends both.
119
+ */
120
+ function resolveContactGroupLabels(contact) {
121
+ const raw = contact;
122
+ const fromPlural = firstNonEmptyGroupList(raw.contact_groups, raw.contactGroups, raw.groups, raw.labels, raw.tags, raw.segments);
123
+ if (fromPlural.length > 0) return fromPlural;
124
+ const direct = raw.group;
125
+ if (typeof direct === "string" && direct.trim()) return [direct.trim()];
126
+ const nested = raw.contact_group;
127
+ const singleNested = labelFromGroupLikeItem(nested);
128
+ if (singleNested) return [singleNested];
129
+ const meta = contact.metadata;
130
+ if (meta && typeof meta === "object") {
131
+ const fromMeta = labelsFromMetadata(meta);
132
+ if (fromMeta.length > 0) return fromMeta;
133
+ }
134
+ const lead = contact.lead_type;
135
+ if (lead && String(lead).trim()) return [String(lead).replaceAll("_", " ")];
136
+ return [];
137
+ }
138
+ function RepContactCard({ contact, selected, onToggleSelect, onRowClick, onEditContact, setSelectedContacts, setOpenDeleteModal }) {
139
+ const groupLabels = resolveContactGroupLabels(contact);
140
+ const groupTitle = groupLabels.length > 0 ? groupLabels.join(", ") : void 0;
141
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Card, {
142
+ className: require_src.cn("border-border hover:bg-accent/30 h-[100px] w-full flex-col items-start justify-center gap-0 py-0 shadow-sm transition-colors", selected && "bg-accent/40 border-primary/25 ring-primary/20 ring-1"),
143
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.CardContent, {
144
+ className: "w-full px-3 py-0",
145
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
146
+ className: "flex items-center gap-2 sm:gap-3",
147
+ children: [
148
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
149
+ className: "flex shrink-0 items-center",
150
+ onClick: (e) => e.stopPropagation(),
151
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
152
+ type: "checkbox",
153
+ checked: selected,
154
+ onChange: () => onToggleSelect(contact.id),
155
+ "aria-label": `Select ${contact.full_name}`,
156
+ className: "accent-primary h-3.5 w-3.5 rounded sm:h-4 sm:w-4"
157
+ })
158
+ }),
159
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
160
+ type: "button",
161
+ className: "text-foreground focus-visible:ring-ring flex min-w-0 flex-1 items-center gap-2 rounded-md text-left outline-none focus-visible:ring-2 sm:gap-3",
162
+ onClick: () => onRowClick?.(contact),
163
+ children: [
164
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Avatar, {
165
+ className: "size-12 shrink-0",
166
+ children: [contact.avatar_url ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.AvatarImage, {
167
+ src: contact.avatar_url,
168
+ alt: contact.full_name || "Contact"
169
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.AvatarFallback, {
170
+ className: "border-border text-foreground bg-accent ring-border/80 text-xs font-semibold ring-1",
171
+ children: getInitials(contact.full_name)
172
+ })]
173
+ }),
174
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
175
+ className: "max-w-[32%] min-w-0 shrink truncate text-sm leading-tight font-semibold sm:max-w-none sm:flex-[1.15]",
176
+ title: contact.full_name,
177
+ children: contact.full_name || "—"
178
+ }),
179
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
180
+ className: "text-muted-foreground min-w-0 flex-[1.35] truncate text-xs leading-tight",
181
+ title: contact.email ?? void 0,
182
+ children: contact.email || "—"
183
+ }),
184
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
185
+ className: "text-muted-foreground min-w-0 flex-[0.95] truncate text-xs leading-tight",
186
+ title: contact.phone ?? void 0,
187
+ children: contact.phone || "—"
188
+ }),
189
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
190
+ className: "text-muted-foreground flex min-w-0 flex-[0.95] items-center gap-1 text-xs leading-tight",
191
+ title: groupTitle,
192
+ children: [groupLabels.length > 0 ? groupLabels.slice(0, 2).map((label, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Badge, {
193
+ variant: "secondary",
194
+ className: "max-w-[min(100%,10rem)] shrink truncate font-normal capitalize",
195
+ title: label,
196
+ children: label
197
+ }, `${contact.id}-group-${index}-${label}`)) : "—", groupLabels.length > 2 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
198
+ className: "text-muted-foreground shrink-0 text-[10px]",
199
+ children: ["+", groupLabels.length - 2]
200
+ })]
201
+ })
202
+ ]
203
+ }),
204
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
205
+ className: "flex shrink-0 items-center",
206
+ onClick: (e) => e.stopPropagation(),
207
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuTrigger, {
208
+ asChild: true,
209
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
210
+ variant: "ghost",
211
+ size: "icon-xs",
212
+ "aria-label": "Contact actions",
213
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.EllipsisVertical, { className: "h-4 w-4" })
214
+ })
215
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuContent, {
216
+ align: "end",
217
+ children: [onEditContact && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
218
+ onClick: () => onEditContact(contact),
219
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pencil, { className: "h-3.5 w-3.5" }), "Edit"]
220
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuSeparator, {})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
221
+ className: "text-destructive",
222
+ onClick: () => {
223
+ setSelectedContacts([contact]);
224
+ setOpenDeleteModal(true);
225
+ },
226
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Trash2, { className: "h-3.5 w-3.5" }), "Delete"]
227
+ })]
228
+ })] })
229
+ })
230
+ ]
231
+ })
232
+ })
233
+ });
234
+ }
43
235
  const TABS = [
44
236
  "All",
45
237
  "Leads",
46
238
  "Customers"
47
239
  ];
240
+ function getSortComparable(contact, field) {
241
+ if (field === "name") return contact.full_name ?? "";
242
+ return contact.email ?? "";
243
+ }
48
244
  const PAGE_SIZE = 25;
49
- function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setOpenDeleteModal, onEditContact, onRowClick, resetKey }) {
245
+ const CONTACT_SORT_COLUMNS = [{
246
+ id: "name",
247
+ name: "Name"
248
+ }, {
249
+ id: "email",
250
+ name: "Email"
251
+ }];
252
+ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setOpenDeleteModal, onEditContact, onRowClick, resetKey, tableLayout }) {
253
+ const isMemberLayout = tableLayout === "members";
50
254
  const [currentPage, setCurrentPage] = (0, react.useState)(1);
51
255
  const [searchTerm, setSearchTerm] = (0, react.useState)("");
52
256
  const [activeTab, setActiveTab] = (0, react.useState)("All");
257
+ const [currentSort, setCurrentSort] = (0, react.useState)({
258
+ id: "name",
259
+ desc: false
260
+ });
53
261
  const [selectedIds, setSelectedIds] = (0, react.useState)(/* @__PURE__ */ new Set());
54
262
  (0, react.useEffect)(() => {
55
263
  setCurrentPage(1);
56
264
  setSelectedIds(/* @__PURE__ */ new Set());
57
- }, [searchTerm, activeTab]);
265
+ }, [
266
+ searchTerm,
267
+ activeTab,
268
+ currentSort
269
+ ]);
58
270
  (0, react.useEffect)(() => {
59
271
  setSelectedIds(/* @__PURE__ */ new Set());
60
272
  }, [currentPage]);
@@ -66,19 +278,34 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
66
278
  queryKey: [queryKeyPrefix, {
67
279
  searchTerm,
68
280
  currentPage,
69
- activeTab
281
+ activeTab,
282
+ sortField: currentSort.id,
283
+ sortDesc: currentSort.desc
70
284
  }],
71
285
  queryFn: () => listContacts({
72
286
  search_query: searchTerm || void 0,
73
287
  page: currentPage,
74
288
  per_page: PAGE_SIZE,
75
- ...resolvedStatus ? { status: resolvedStatus } : {}
76
- })
289
+ ...resolvedStatus ? { status: resolvedStatus } : {},
290
+ sort_by: currentSort.id,
291
+ sort_direction: currentSort.desc ? "desc" : "asc"
292
+ }),
293
+ placeholderData: _tanstack_react_query.keepPreviousData
77
294
  });
78
295
  const items = (0, react.useMemo)(() => data?.contacts ?? [], [data?.contacts]);
296
+ const displayItems = (0, react.useMemo)(() => {
297
+ const sortField = currentSort.id;
298
+ const sortDir = currentSort.desc ? "desc" : "asc";
299
+ return [...items].sort((a, b) => {
300
+ const av = getSortComparable(a, sortField).toLowerCase();
301
+ const bv = getSortComparable(b, sortField).toLowerCase();
302
+ const cmp = av.localeCompare(bv, void 0, { sensitivity: "base" });
303
+ return sortDir === "asc" ? cmp : -cmp;
304
+ });
305
+ }, [items, currentSort]);
79
306
  const totalItems = data?.meta?.total_count ?? 0;
80
307
  const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
81
- const allSelected = items.length > 0 && items.every((c) => selectedIds.has(c.id));
308
+ const allSelected = displayItems.length > 0 && displayItems.every((c) => selectedIds.has(c.id));
82
309
  const someSelected = selectedIds.size > 0 && !allSelected;
83
310
  const selectAllRef = (0, react.useRef)(null);
84
311
  (0, react.useEffect)(() => {
@@ -87,11 +314,11 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
87
314
  const toggleSelectAll = (0, react.useCallback)(() => {
88
315
  setSelectedIds((prev) => {
89
316
  const next = new Set(prev);
90
- if (allSelected) for (const item of items) next.delete(item.id);
91
- else for (const item of items) next.add(item.id);
317
+ if (allSelected) for (const item of displayItems) next.delete(item.id);
318
+ else for (const item of displayItems) next.add(item.id);
92
319
  return next;
93
320
  });
94
- }, [allSelected, items]);
321
+ }, [allSelected, displayItems]);
95
322
  const toggleSelect = (0, react.useCallback)((id) => {
96
323
  setSelectedIds((prev) => {
97
324
  const next = new Set(prev);
@@ -101,13 +328,13 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
101
328
  });
102
329
  }, []);
103
330
  const handleBulkDelete = (0, react.useCallback)(() => {
104
- const selected = items.filter((c) => selectedIds.has(c.id));
331
+ const selected = displayItems.filter((c) => selectedIds.has(c.id));
105
332
  if (selected.length > 0) {
106
333
  setSelectedContacts(selected);
107
334
  setOpenDeleteModal(true);
108
335
  }
109
336
  }, [
110
- items,
337
+ displayItems,
111
338
  selectedIds,
112
339
  setSelectedContacts,
113
340
  setOpenDeleteModal
@@ -118,18 +345,55 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
118
345
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
119
346
  className: "flex flex-col gap-2 p-3 sm:flex-row sm:items-center sm:justify-between",
120
347
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
121
- className: "flex items-center gap-1",
122
- children: TABS.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
123
- variant: "ghost",
124
- size: "sm",
125
- onClick: () => setActiveTab(tab),
126
- className: require_src.cn("rounded-md text-xs", activeTab === tab && "bg-accent font-bold"),
127
- children: tab
128
- }, tab))
129
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
130
- className: "flex items-center gap-2",
131
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
132
- className: "relative w-full sm:w-auto sm:min-w-[220px]",
348
+ className: "flex flex-wrap items-center gap-2 sm:gap-3",
349
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
350
+ className: "flex items-center gap-1",
351
+ children: TABS.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
352
+ variant: "ghost",
353
+ size: "sm",
354
+ onClick: () => setActiveTab(tab),
355
+ className: require_src.cn("rounded-md text-xs", activeTab === tab && "bg-accent font-bold"),
356
+ children: tab
357
+ }, tab))
358
+ })
359
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
360
+ className: "flex min-w-0 flex-1 items-center justify-end gap-2 sm:max-w-none",
361
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
362
+ className: "shrink-0",
363
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuTrigger, {
364
+ asChild: true,
365
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
366
+ variant: "ghost",
367
+ size: "icon-xs",
368
+ "aria-label": "Sort contacts",
369
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ArrowUpDown, { className: "h-4 w-4" })
370
+ })
371
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuContent, {
372
+ align: "end",
373
+ className: "w-48",
374
+ children: [
375
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuLabel, {
376
+ className: "text-xs font-medium",
377
+ children: "Sort by"
378
+ }),
379
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuSeparator, {}),
380
+ CONTACT_SORT_COLUMNS.map((col) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
381
+ onClick: () => setCurrentSort((prev) => ({
382
+ id: col.id,
383
+ desc: prev.id === col.id ? !prev.desc : false
384
+ })),
385
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
386
+ className: "flex-1",
387
+ children: col.name
388
+ }), currentSort.id === col.id && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
389
+ className: "text-muted-foreground text-xs",
390
+ children: currentSort.desc ? "↓" : "↑"
391
+ })]
392
+ }, col.id))
393
+ ]
394
+ })] })
395
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
396
+ className: "relative min-w-0 flex-1 sm:w-auto sm:min-w-[220px] sm:flex-initial",
133
397
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
134
398
  className: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3",
135
399
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Search, { className: "text-muted-foreground h-4 w-4" })
@@ -140,10 +404,81 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
140
404
  className: "h-8 w-full pl-10 text-sm",
141
405
  placeholder: "Search contacts..."
142
406
  })]
143
- })
407
+ })]
144
408
  })]
145
409
  }),
146
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
410
+ isMemberLayout ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
411
+ className: "space-y-3 p-3",
412
+ children: [!isLoading && items.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
413
+ className: "bg-muted/40 border-border flex flex-wrap items-center justify-between gap-2 rounded-lg border px-3 py-2",
414
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
415
+ className: "flex items-center gap-3",
416
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
417
+ ref: selectAllRef,
418
+ type: "checkbox",
419
+ checked: allSelected,
420
+ onChange: toggleSelectAll,
421
+ "aria-label": allSelected ? "Deselect all" : "Select all on this page",
422
+ className: "accent-primary h-4 w-4 shrink-0 rounded"
423
+ }), selectedIds.size > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
424
+ className: "text-foreground text-sm font-medium",
425
+ children: [selectedIds.size, " selected"]
426
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
427
+ className: "text-muted-foreground text-sm",
428
+ children: "Select all"
429
+ })]
430
+ }), selectedIds.size > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuTrigger, {
431
+ asChild: true,
432
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Button, {
433
+ variant: "ghost",
434
+ size: "sm",
435
+ className: "h-8 gap-1 text-xs",
436
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.EllipsisVertical, { className: "h-4 w-4" }), "Actions"]
437
+ })
438
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuContent, {
439
+ align: "end",
440
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
441
+ className: "text-destructive",
442
+ onClick: handleBulkDelete,
443
+ children: [
444
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Trash2, { className: "h-3.5 w-3.5" }),
445
+ "Delete ",
446
+ selectedIds.size,
447
+ " ",
448
+ selectedIds.size === 1 ? "contact" : "contacts"
449
+ ]
450
+ })
451
+ })] }) : null]
452
+ }) : null, isLoading ? Array(5).fill(0).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Card, {
453
+ className: "border-border h-[100px] w-full flex-col items-start justify-center gap-0 py-0 shadow-sm",
454
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.CardContent, {
455
+ className: "w-full px-3 py-0",
456
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
457
+ className: "flex items-center gap-2 sm:gap-3",
458
+ children: [
459
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 w-3.5 shrink-0 rounded sm:h-4 sm:w-4" }),
460
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "size-12 shrink-0 rounded-full" }),
461
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 max-w-[32%] shrink sm:max-w-none sm:flex-[1.15]" }),
462
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 min-w-0 flex-[1.35]" }),
463
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 min-w-0 flex-[0.95]" }),
464
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 min-w-0 flex-[0.95]" }),
465
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "size-7 shrink-0 rounded-md" })
466
+ ]
467
+ })
468
+ })
469
+ }, `card-skel-${i}`)) : items.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
470
+ className: "text-muted-foreground py-10 text-center text-sm",
471
+ children: "No contacts found"
472
+ }) : displayItems.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RepContactCard, {
473
+ contact,
474
+ selected: selectedIds.has(contact.id),
475
+ onToggleSelect: toggleSelect,
476
+ onRowClick,
477
+ onEditContact,
478
+ setSelectedContacts,
479
+ setOpenDeleteModal
480
+ }, contact.id))]
481
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
147
482
  className: "block md:hidden",
148
483
  children: isLoading ? Array(5).fill(0).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
149
484
  className: "border-border border-b p-4",
@@ -154,11 +489,11 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
154
489
  }, `skeleton-${i}`)) : items.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
155
490
  className: "text-muted-foreground px-3 py-8 text-center text-sm",
156
491
  children: "No contacts found"
157
- }) : items.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
492
+ }) : displayItems.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
158
493
  className: "border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors last:border-b-0",
159
494
  onClick: () => onRowClick?.(contact),
160
495
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
161
- className: "flex items-center justify-between",
496
+ className: "flex items-center justify-between gap-3",
162
497
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
163
498
  className: "min-w-0 flex-1",
164
499
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
@@ -171,8 +506,7 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
171
506
  }), contact.status && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusBadge, { status: contact.status })]
172
507
  })
173
508
  }, contact.id))
174
- }),
175
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
509
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
176
510
  className: "hidden md:block",
177
511
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Table, {
178
512
  className: "min-w-full table-fixed",
@@ -299,7 +633,7 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
299
633
  colSpan: 7,
300
634
  className: "text-muted-foreground px-3 py-8 text-center",
301
635
  children: "No contacts found"
302
- }) }) : items.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.TableRow, {
636
+ }) }) : displayItems.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.TableRow, {
303
637
  className: require_src.cn("cursor-pointer", selectedIds.has(contact.id) && "bg-accent"),
304
638
  onClick: () => onRowClick?.(contact),
305
639
  children: [
@@ -354,10 +688,10 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
354
688
  })
355
689
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuContent, {
356
690
  align: "end",
357
- children: [onEditContact && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
691
+ children: [onEditContact && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
358
692
  onClick: () => onEditContact(contact),
359
693
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pencil, { className: "h-3.5 w-3.5" }), "Edit"]
360
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
694
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuSeparator, {})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
361
695
  className: "text-destructive",
362
696
  onClick: () => {
363
697
  setSelectedContacts([contact]);
@@ -372,7 +706,7 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
372
706
  })
373
707
  ]
374
708
  })
375
- }),
709
+ })] }),
376
710
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src$1.PaginationFooter, {
377
711
  currentPage,
378
712
  totalPages,
@@ -396,7 +730,7 @@ const CONTACTS_QUERY_KEYS = {
396
730
  };
397
731
  //#endregion
398
732
  //#region ../../contacts/ui/src/shared/components/contacts/allContacts/contactsPage.tsx
399
- function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, onEditContact, onRowClick }) {
733
+ function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, onEditContact, onRowClick, tableLayout }) {
400
734
  const [openDeleteModal, setOpenDeleteModal] = (0, react.useState)(false);
401
735
  const [selectedContacts, setSelectedContacts] = (0, react.useState)([]);
402
736
  const [resetKey, setResetKey] = (0, react.useState)(0);
@@ -435,7 +769,8 @@ function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, on
435
769
  setOpenDeleteModal,
436
770
  onEditContact,
437
771
  onRowClick,
438
- resetKey
772
+ resetKey,
773
+ tableLayout
439
774
  })
440
775
  }),
441
776
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.AlertDialog, {
@@ -3708,6 +4043,7 @@ function ContactListView({ client, onNavigate, onContactSelect }) {
3708
4043
  deleteContacts: (0, react.useCallback)((ids) => bulkDeleteUserContacts(client, { contact_ids: ids }), [client]),
3709
4044
  queryKeyPrefix: QUERY_KEY_PREFIX,
3710
4045
  header,
4046
+ tableLayout: "members",
3711
4047
  onEditContact: handleSelectContact,
3712
4048
  onRowClick: handleSelectContact
3713
4049
  });
@@ -3936,4 +4272,4 @@ Object.defineProperty(exports, "contactsScreenPropertySchema", {
3936
4272
  }
3937
4273
  });
3938
4274
 
3939
- //# sourceMappingURL=ContactsScreen-C0I1_D_a.cjs.map
4275
+ //# sourceMappingURL=ContactsScreen-9G2HgNsy.cjs.map