@elevasis/ui 2.33.2 → 2.35.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 (116) hide show
  1. package/dist/api/index.d.ts +9 -2
  2. package/dist/api/index.js +3 -3
  3. package/dist/app/index.css +452 -0
  4. package/dist/app/index.d.ts +1255 -8
  5. package/dist/app/index.js +151 -13
  6. package/dist/charts/index.js +3 -6
  7. package/dist/chunk-26HFM4MH.js +41449 -0
  8. package/dist/{chunk-52K5RFDH.js → chunk-4U3XAWCN.js} +1328 -2492
  9. package/dist/{chunk-ND5TDV2J.js → chunk-57OZ3AEG.js} +1 -1
  10. package/dist/{chunk-E4WQGJNS.js → chunk-7FPLLSHN.js} +14 -1
  11. package/dist/{chunk-RQA2EVN3.js → chunk-AKW7KISS.js} +39 -3
  12. package/dist/chunk-AUDNF2Q7.js +2050 -0
  13. package/dist/{chunk-TYRUKGGD.js → chunk-GX6XBRRF.js} +1 -2
  14. package/dist/{chunk-V6SZ4ECN.js → chunk-LUYVRATI.js} +257 -6
  15. package/dist/{chunk-X4WBGKJQ.js → chunk-R3VCBZDC.js} +50 -3
  16. package/dist/chunk-SIQ3P4OR.js +1764 -0
  17. package/dist/{chunk-Z2K2EAPL.js → chunk-VDOOGGBA.js} +5 -6
  18. package/dist/{chunk-3FV6HBXS.js → chunk-WF7CONXF.js} +23 -23
  19. package/dist/chunk-YYX7OPZQ.js +25 -0
  20. package/dist/components/index.d.ts +69 -92
  21. package/dist/components/index.js +20 -3216
  22. package/dist/components/navigation/index.js +25 -7
  23. package/dist/execution/index.d.ts +9 -9
  24. package/dist/execution/index.js +1 -2
  25. package/dist/features/auth/index.js +23 -2
  26. package/dist/features/clients/index.js +20 -31
  27. package/dist/features/crm/index.js +20 -35
  28. package/dist/features/dashboard/index.d.ts +68 -91
  29. package/dist/features/dashboard/index.js +20 -33
  30. package/dist/features/delivery/index.js +20 -35
  31. package/dist/features/knowledge/index.js +25 -11
  32. package/dist/features/lead-gen/index.d.ts +9 -9
  33. package/dist/features/lead-gen/index.js +20 -36
  34. package/dist/features/monitoring/index.js +20 -35
  35. package/dist/features/monitoring/requests/index.js +20 -30
  36. package/dist/features/operations/index.d.ts +197 -188
  37. package/dist/features/operations/index.js +18 -42
  38. package/dist/features/seo/index.js +3 -4
  39. package/dist/features/settings/index.js +20 -32
  40. package/dist/graph/index.js +1 -1
  41. package/dist/hooks/delivery/index.js +30 -2
  42. package/dist/hooks/index.d.ts +105 -112
  43. package/dist/hooks/index.js +20 -26
  44. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +55 -62
  45. package/dist/hooks/published.d.ts +105 -112
  46. package/dist/hooks/published.js +20 -25
  47. package/dist/index.css +532 -532
  48. package/dist/index.d.ts +10261 -6793
  49. package/dist/index.js +22 -31
  50. package/dist/knowledge/index.d.ts +51 -59
  51. package/dist/knowledge/index.js +40 -211
  52. package/dist/{knowledge-search-index-VMAW7FLR.js → knowledge-search-index-ORIJCEZX.js} +3 -3
  53. package/dist/layout/index.js +4 -10
  54. package/dist/organization/index.js +27 -2
  55. package/dist/provider/index.d.ts +71 -52
  56. package/dist/provider/index.js +20 -20
  57. package/dist/provider/published.d.ts +39 -47
  58. package/dist/provider/published.js +20 -15
  59. package/dist/test-utils/index.d.ts +2 -0
  60. package/dist/test-utils/index.js +16 -4
  61. package/dist/test-utils/setup.js +38 -0
  62. package/dist/theme/index.js +2 -3
  63. package/dist/theme/presets/index.d.ts +28 -3
  64. package/dist/theme/presets/index.js +1 -1
  65. package/dist/typeform/index.js +1 -2049
  66. package/dist/types/index.d.ts +88 -95
  67. package/dist/utils/index.d.ts +46 -69
  68. package/dist/utils/index.js +1 -1
  69. package/dist/zustand/index.d.ts +21 -8
  70. package/dist/zustand/index.js +32 -1
  71. package/package.json +5 -5
  72. package/dist/chunk-2ZZ72TAB.js +0 -2281
  73. package/dist/chunk-32I2RCGC.js +0 -85
  74. package/dist/chunk-3MEXPLWT.js +0 -265
  75. package/dist/chunk-3ZMAGTWF.js +0 -18
  76. package/dist/chunk-44I4LOH6.js +0 -1593
  77. package/dist/chunk-4DYOXEH6.js +0 -951
  78. package/dist/chunk-7M2VOCYN.js +0 -1
  79. package/dist/chunk-A4VDJJCV.js +0 -1864
  80. package/dist/chunk-BZZCNLT6.js +0 -12
  81. package/dist/chunk-CLDCYJQT.js +0 -1
  82. package/dist/chunk-E565XMTQ.js +0 -17
  83. package/dist/chunk-EPTHX4VZ.js +0 -749
  84. package/dist/chunk-GWGQI6V4.js +0 -447
  85. package/dist/chunk-HUJCU55S.js +0 -159
  86. package/dist/chunk-IBWMR4TI.js +0 -469
  87. package/dist/chunk-IIMU5YAJ.js +0 -53
  88. package/dist/chunk-IOXOPMYS.js +0 -145
  89. package/dist/chunk-J2UD7BOH.js +0 -347
  90. package/dist/chunk-JA5ECJJB.js +0 -387
  91. package/dist/chunk-JFL3GRD4.js +0 -39
  92. package/dist/chunk-KW7ZNQD7.js +0 -126
  93. package/dist/chunk-LGKLC5MG.js +0 -44
  94. package/dist/chunk-N55DVMAG.js +0 -14
  95. package/dist/chunk-O56ESZCQ.js +0 -1874
  96. package/dist/chunk-OIBHQH5Q.js +0 -96
  97. package/dist/chunk-PDHTXPSF.js +0 -12
  98. package/dist/chunk-QDFJSUG3.js +0 -13
  99. package/dist/chunk-R2XR4FCV.js +0 -48
  100. package/dist/chunk-R66W5UDG.js +0 -26
  101. package/dist/chunk-RYTEQBAO.js +0 -37
  102. package/dist/chunk-SZHARWKU.js +0 -15
  103. package/dist/chunk-T3J6U77J.js +0 -12056
  104. package/dist/chunk-TBVLQRXT.js +0 -68
  105. package/dist/chunk-TGVAIWIL.js +0 -1778
  106. package/dist/chunk-TKAYX2SP.js +0 -204
  107. package/dist/chunk-TUMSNGTX.js +0 -35
  108. package/dist/chunk-VGU4ZFYZ.js +0 -4752
  109. package/dist/chunk-VNAZTCHA.js +0 -65
  110. package/dist/chunk-VNFR57DF.js +0 -87
  111. package/dist/chunk-WKW6B5ID.js +0 -29
  112. package/dist/chunk-XCYKC6OZ.js +0 -1
  113. package/dist/chunk-XZGSCABI.js +0 -383
  114. package/dist/chunk-ZMK5Z6KE.js +0 -5198
  115. /package/dist/{chunk-2RJMVWFJ.js → chunk-GEFWMU26.js} +0 -0
  116. /package/dist/{chunk-22UVE3RA.js → chunk-HENXLGVD.js} +0 -0
@@ -1,347 +0,0 @@
1
- import { SubshellNavItem } from './chunk-X4WBGKJQ.js';
2
- import { SubshellSidebarSection } from './chunk-IIMU5YAJ.js';
3
- import { useDealsLookup, useCreateDealTask, useDealTasksDue } from './chunk-ZMK5Z6KE.js';
4
- import { useRouterContext } from './chunk-Q7DJKLEN.js';
5
- import { Box, Stack, Text, UnstyledButton, Group, Button, Modal, Title, Select, TextInput, Textarea, Badge, Center, Loader } from '@mantine/core';
6
- import { IconLayoutGrid, IconColumns, IconFileInvoice, IconList, IconBuilding, IconAddressBook, IconTrophy, IconClockExclamation, IconUser, IconPlus, IconChecklist, IconTarget, IconCheckbox, IconCalendar, IconMail, IconPhone } from '@tabler/icons-react';
7
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
- import { useState } from 'react';
9
-
10
- // src/features/crm/workbench/constants.ts
11
- var SAVED_VIEW_PRESETS = [
12
- {
13
- id: "my-deals",
14
- label: "My Deals",
15
- iconName: "IconUser",
16
- target: "/crm/deals"
17
- },
18
- {
19
- id: "overdue",
20
- label: "Overdue",
21
- iconName: "IconClockExclamation",
22
- target: "/crm/deals"
23
- },
24
- {
25
- id: "won-this-month",
26
- label: "Won this month",
27
- iconName: "IconTrophy",
28
- target: "/crm/deals",
29
- urlFilters: { stage: "closed_won" }
30
- }
31
- ];
32
- var ICON_MAP = {
33
- IconUser,
34
- IconClockExclamation,
35
- IconTrophy
36
- };
37
- function SavedViewsPanel({ onViewClick, showSectionLabel = true }) {
38
- return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
39
- showSectionLabel && /* @__PURE__ */ jsx(Text, { fz: "xs", tt: "uppercase", c: "dimmed", fw: 600, mb: 4, children: "Saved Views" }),
40
- SAVED_VIEW_PRESETS.map((preset) => {
41
- const Icon = ICON_MAP[preset.iconName];
42
- return /* @__PURE__ */ jsx(
43
- UnstyledButton,
44
- {
45
- onClick: () => onViewClick(preset),
46
- style: {
47
- display: "block",
48
- width: "100%",
49
- padding: "4px 6px",
50
- borderRadius: "var(--mantine-radius-sm)",
51
- transition: `background-color var(--duration-fast) var(--easing)`
52
- },
53
- onMouseEnter: (e) => {
54
- e.currentTarget.style.backgroundColor = "var(--color-surface-hover)";
55
- },
56
- onMouseLeave: (e) => {
57
- e.currentTarget.style.backgroundColor = "transparent";
58
- },
59
- children: /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "nowrap", children: [
60
- /* @__PURE__ */ jsx(Icon, { size: 14, style: { color: "var(--color-text-dimmed)", flexShrink: 0 } }),
61
- /* @__PURE__ */ jsx(Text, { size: "xs", children: preset.label })
62
- ] })
63
- },
64
- preset.id
65
- );
66
- })
67
- ] }) });
68
- }
69
- var KIND_OPTIONS = [
70
- { value: "call", label: "Call" },
71
- { value: "email", label: "Email" },
72
- { value: "meeting", label: "Meeting" },
73
- { value: "other", label: "Other" }
74
- ];
75
- function QuickCreateActions({ showSectionLabel = true }) {
76
- const [open, setOpen] = useState(false);
77
- const [dealId, setDealId] = useState(null);
78
- const [dealSearch, setDealSearch] = useState("");
79
- const [title, setTitle] = useState("");
80
- const [description, setDescription] = useState("");
81
- const [kind, setKind] = useState("other");
82
- const [dueAt, setDueAt] = useState("");
83
- const { data: deals, isLoading: isLoadingDeals } = useDealsLookup(
84
- {
85
- search: dealSearch || void 0,
86
- limit: 25
87
- },
88
- { enabled: open }
89
- );
90
- const createTask = useCreateDealTask();
91
- const dealOptions = (deals ?? []).map((deal) => ({
92
- value: deal.id,
93
- label: deal.displayLabel
94
- }));
95
- function resetForm() {
96
- setDealId(null);
97
- setDealSearch("");
98
- setTitle("");
99
- setDescription("");
100
- setKind("other");
101
- setDueAt("");
102
- }
103
- function handleClose() {
104
- setOpen(false);
105
- resetForm();
106
- }
107
- async function handleSubmit() {
108
- if (!dealId || !title) return;
109
- await createTask.mutateAsync({
110
- dealId,
111
- title,
112
- description: description || null,
113
- kind,
114
- dueAt: dueAt ? new Date(dueAt).toISOString() : null
115
- });
116
- handleClose();
117
- }
118
- const isSubmitDisabled = !dealId || !title || createTask.isPending;
119
- return /* @__PURE__ */ jsxs(Fragment, { children: [
120
- /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
121
- showSectionLabel && /* @__PURE__ */ jsx(Text, { fz: "xs", tt: "uppercase", c: "dimmed", fw: 600, children: "TASKS" }),
122
- /* @__PURE__ */ jsx(Button, { variant: "light", size: "xs", leftSection: /* @__PURE__ */ jsx(IconPlus, { size: 14 }), fullWidth: true, onClick: () => setOpen(true), children: "New Task" })
123
- ] }),
124
- /* @__PURE__ */ jsxs(Modal, { opened: open, onClose: handleClose, size: "md", children: [
125
- /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
126
- /* @__PURE__ */ jsx(Title, { order: 3, children: "New Task" }),
127
- /* @__PURE__ */ jsx(
128
- Select,
129
- {
130
- label: "Deal",
131
- placeholder: "Search deals",
132
- data: dealOptions,
133
- value: dealId,
134
- onChange: setDealId,
135
- searchValue: dealSearch,
136
- onSearchChange: setDealSearch,
137
- searchable: true,
138
- nothingFoundMessage: dealSearch ? "No matching deals" : "No deals available",
139
- disabled: isLoadingDeals,
140
- required: true
141
- }
142
- ),
143
- /* @__PURE__ */ jsx(
144
- TextInput,
145
- {
146
- label: "Title",
147
- placeholder: "Task title",
148
- value: title,
149
- onChange: (e) => setTitle(e.currentTarget.value),
150
- required: true
151
- }
152
- ),
153
- /* @__PURE__ */ jsx(
154
- Textarea,
155
- {
156
- label: "Description",
157
- placeholder: "Optional description",
158
- value: description,
159
- onChange: (e) => setDescription(e.currentTarget.value),
160
- autosize: true,
161
- minRows: 2,
162
- maxRows: 5
163
- }
164
- ),
165
- /* @__PURE__ */ jsx(
166
- Select,
167
- {
168
- label: "Kind",
169
- data: KIND_OPTIONS,
170
- value: kind,
171
- onChange: (v) => setKind(v ?? "other")
172
- }
173
- ),
174
- /* @__PURE__ */ jsx(
175
- TextInput,
176
- {
177
- type: "datetime-local",
178
- label: "Due At",
179
- value: dueAt,
180
- onChange: (e) => setDueAt(e.currentTarget.value)
181
- }
182
- )
183
- ] }),
184
- /* @__PURE__ */ jsxs(Group, { justify: "flex-end", mt: "md", children: [
185
- /* @__PURE__ */ jsx(Button, { variant: "default", onClick: handleClose, children: "Cancel" }),
186
- /* @__PURE__ */ jsx(Button, { onClick: handleSubmit, loading: createTask.isPending, disabled: isSubmitDisabled, children: "Create" })
187
- ] })
188
- ] })
189
- ] });
190
- }
191
- var CRM_ITEMS = [
192
- { label: "Overview", to: "/crm", icon: IconLayoutGrid, exact: true },
193
- { label: "Pipeline", to: "/crm/pipeline", icon: IconColumns, exact: false },
194
- { label: "Deals", to: "/crm/deals", icon: IconFileInvoice, exact: false }
195
- ];
196
- var CrmSidebarMiddle = ({ items = CRM_ITEMS } = {}) => {
197
- const { currentPath, navigate } = useRouterContext();
198
- return /* @__PURE__ */ jsxs(Stack, { gap: 0, style: { flex: 1, overflowY: "auto" }, children: [
199
- /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: items.map((item) => {
200
- const isActive = item.exact ? currentPath === item.to || currentPath === `${item.to}/` : currentPath.startsWith(item.to);
201
- return /* @__PURE__ */ jsx(
202
- SubshellNavItem,
203
- {
204
- icon: item.icon,
205
- label: item.label,
206
- isActive,
207
- href: item.to,
208
- onClick: () => navigate(item.to)
209
- },
210
- item.to
211
- );
212
- }) }),
213
- /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconChecklist, label: "My Tasks", withTopBorder: true }),
214
- /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: /* @__PURE__ */ jsx(
215
- MyTasksPanel,
216
- {
217
- onTaskClick: (dealId) => navigate(`/crm/deals/${dealId}`),
218
- onSeeAll: () => navigate("/crm/deals"),
219
- showSectionLabel: false,
220
- footer: /* @__PURE__ */ jsx(QuickCreateActions, { showSectionLabel: false })
221
- }
222
- ) })
223
- ] });
224
- };
225
- var LEAD_GEN_ITEMS = [
226
- { label: "Overview", to: "/lead-gen", icon: IconLayoutGrid, exact: true },
227
- { label: "Lists", to: "/lead-gen/lists", icon: IconList, exact: false },
228
- { label: "Companies", to: "/lead-gen/companies", icon: IconBuilding, exact: false },
229
- { label: "Contacts", to: "/lead-gen/contacts", icon: IconAddressBook, exact: false }
230
- ];
231
- var LeadGenSidebarMiddle = ({ items = LEAD_GEN_ITEMS } = {}) => {
232
- const { currentPath, navigate } = useRouterContext();
233
- return /* @__PURE__ */ jsx(Stack, { gap: 0, style: { flex: 1, overflowY: "auto" }, children: /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: items.map((item) => {
234
- const isActive = item.exact ? currentPath === item.to || currentPath === `${item.to}/` : currentPath.startsWith(item.to);
235
- return /* @__PURE__ */ jsx(
236
- SubshellNavItem,
237
- {
238
- icon: item.icon,
239
- label: item.label,
240
- isActive,
241
- href: item.to,
242
- onClick: () => navigate(item.to)
243
- },
244
- item.to
245
- );
246
- }) }) });
247
- };
248
- var renderItems = (items, currentPath, navigate) => items.map((item) => {
249
- const isActive = item.exact ? currentPath === item.to || currentPath === `${item.to}/` : currentPath.startsWith(item.to);
250
- return /* @__PURE__ */ jsx(
251
- SubshellNavItem,
252
- {
253
- icon: item.icon,
254
- label: item.label,
255
- isActive,
256
- href: item.to,
257
- onClick: () => navigate(item.to)
258
- },
259
- item.to
260
- );
261
- });
262
- var SalesSidebar = () => {
263
- const { currentPath, navigate } = useRouterContext();
264
- return /* @__PURE__ */ jsx(Stack, { gap: 0, style: { height: "100%", display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ jsxs(Stack, { gap: 0, style: { flex: 1, overflowY: "auto" }, children: [
265
- /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconTarget, label: "Lead Gen" }),
266
- /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: renderItems(LEAD_GEN_ITEMS, currentPath, navigate) }),
267
- /* @__PURE__ */ jsx(SubshellSidebarSection, { icon: IconAddressBook, label: "CRM", withTopBorder: true }),
268
- /* @__PURE__ */ jsx(Stack, { gap: 0, p: "sm", children: renderItems(CRM_ITEMS, currentPath, navigate) })
269
- ] }) });
270
- };
271
- var KIND_ICONS = {
272
- call: IconPhone,
273
- email: IconMail,
274
- meeting: IconCalendar,
275
- other: IconCheckbox
276
- };
277
- function formatDueLabel(dueAt) {
278
- if (!dueAt) return "";
279
- const date = new Date(dueAt);
280
- const now = /* @__PURE__ */ new Date();
281
- const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
282
- const dueDay = new Date(date.getFullYear(), date.getMonth(), date.getDate());
283
- const diffDays = Math.round((dueDay.getTime() - today.getTime()) / 864e5);
284
- if (diffDays < 0) return `${Math.abs(diffDays)}d overdue`;
285
- if (diffDays === 0) {
286
- return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
287
- }
288
- return `in ${diffDays}d`;
289
- }
290
- function TaskRow({ task, onClick }) {
291
- const KindIcon = KIND_ICONS[task.kind];
292
- const dueLabel = formatDueLabel(task.dueAt);
293
- const isOverdue = task.dueAt !== null && new Date(task.dueAt) < /* @__PURE__ */ new Date();
294
- return /* @__PURE__ */ jsx(
295
- UnstyledButton,
296
- {
297
- onClick,
298
- style: {
299
- display: "block",
300
- width: "100%",
301
- padding: "4px 6px",
302
- borderRadius: "var(--mantine-radius-sm)",
303
- transition: `background-color var(--duration-fast) var(--easing)`
304
- },
305
- onMouseEnter: (e) => {
306
- e.currentTarget.style.backgroundColor = "var(--color-surface-hover)";
307
- },
308
- onMouseLeave: (e) => {
309
- e.currentTarget.style.backgroundColor = "transparent";
310
- },
311
- children: /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "nowrap", children: [
312
- /* @__PURE__ */ jsx(KindIcon, { size: 14, style: { color: "var(--color-text-dimmed)", flexShrink: 0 } }),
313
- /* @__PURE__ */ jsx(Text, { size: "xs", truncate: true, style: { flex: 1, minWidth: 0 }, children: task.title }),
314
- dueLabel && /* @__PURE__ */ jsx(Badge, { size: "xs", variant: "light", color: isOverdue ? "red" : "gray", style: { flexShrink: 0 }, children: dueLabel })
315
- ] })
316
- }
317
- );
318
- }
319
- function MyTasksPanel({
320
- onTaskClick,
321
- onSeeAll,
322
- footer,
323
- showSectionLabel = true
324
- }) {
325
- const { data, isLoading, isError } = useDealTasksDue({ window: "today_and_overdue" });
326
- const tasks = data ?? [];
327
- const total = tasks.length;
328
- const visible = tasks.slice(0, 5);
329
- return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
330
- showSectionLabel && /* @__PURE__ */ jsxs(Group, { justify: "space-between", mb: 4, children: [
331
- /* @__PURE__ */ jsx(Text, { fz: "xs", tt: "uppercase", c: "dimmed", fw: 600, children: "My Tasks" }),
332
- total > 0 && /* @__PURE__ */ jsx(Badge, { size: "xs", variant: "light", children: total })
333
- ] }),
334
- isLoading && /* @__PURE__ */ jsx(Center, { py: 4, children: /* @__PURE__ */ jsx(Loader, { size: "xs" }) }),
335
- isError && /* @__PURE__ */ jsx(Text, { size: "xs", c: "red", children: "Failed to load tasks" }),
336
- !isLoading && !isError && visible.length === 0 && /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "No tasks due - you're caught up." }),
337
- !isLoading && !isError && visible.map((task) => /* @__PURE__ */ jsx(TaskRow, { task, onClick: () => onTaskClick(task.dealId) }, task.id)),
338
- onSeeAll && total > 5 && /* @__PURE__ */ jsx(UnstyledButton, { onClick: onSeeAll, mt: 2, style: { display: "inline-block" }, children: /* @__PURE__ */ jsxs(Text, { size: "xs", c: "dimmed", style: { textDecoration: "underline" }, children: [
339
- "See all (",
340
- total,
341
- ")"
342
- ] }) }),
343
- footer
344
- ] }) });
345
- }
346
-
347
- export { CRM_ITEMS, CrmSidebarMiddle, LEAD_GEN_ITEMS, LeadGenSidebarMiddle, MyTasksPanel, QuickCreateActions, SAVED_VIEW_PRESETS, SalesSidebar, SavedViewsPanel };