@elevasis/ui 2.75.0 → 2.77.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 (110) hide show
  1. package/dist/api/index.js +3 -3
  2. package/dist/app/index.d.ts +277 -249
  3. package/dist/app/index.js +12 -11
  4. package/dist/auth/context.d.ts +1 -2
  5. package/dist/auth/index.d.ts +1 -2
  6. package/dist/auth/index.js +6 -7
  7. package/dist/charts/index.js +6 -7
  8. package/dist/{chunk-CRPH5AAB.js → chunk-2GIHWU5O.js} +4 -3
  9. package/dist/chunk-2Y6AKWGU.js +42 -0
  10. package/dist/chunk-3QYRZSHP.js +854 -0
  11. package/dist/{chunk-L3NBMLRN.js → chunk-3RK2NNJX.js} +1 -1
  12. package/dist/{chunk-R6NMRXNO.js → chunk-4WLAVUPS.js} +1 -1
  13. package/dist/{chunk-DTEGVSJ6.js → chunk-5R4I2PAN.js} +9 -43
  14. package/dist/chunk-6B4ZPBQJ.js +7 -0
  15. package/dist/{chunk-QFS2GZMV.js → chunk-73G3I5HJ.js} +160 -160
  16. package/dist/{chunk-7OOFMEX6.js → chunk-BFLYDVEN.js} +28 -41
  17. package/dist/{chunk-VWGCURZF.js → chunk-BG6PWDJ3.js} +381 -381
  18. package/dist/{chunk-5VF5LPYS.js → chunk-BV2RNLPP.js} +1 -1
  19. package/dist/{chunk-NMHQAYZU.js → chunk-CTT4RDXE.js} +150 -151
  20. package/dist/chunk-E2LJ3FRA.js +237 -0
  21. package/dist/{chunk-5RH6NYZH.js → chunk-EFQLXRYT.js} +1 -2
  22. package/dist/{chunk-M6VAZAQW.js → chunk-EVNLJHDD.js} +3 -3
  23. package/dist/{chunk-NYIIRZSA.js → chunk-GDQQX5SL.js} +4 -42
  24. package/dist/{chunk-IYATYH5I.js → chunk-GFSOQH3N.js} +1 -1
  25. package/dist/{chunk-G7O4CBMC.js → chunk-H5AEYSVX.js} +164 -3
  26. package/dist/{chunk-ZFISGKYW.js → chunk-IIEZXXDD.js} +1 -1
  27. package/dist/{chunk-5SLRGUC4.js → chunk-INCEZAM3.js} +1 -1
  28. package/dist/{chunk-ZG6YJUT4.js → chunk-JZQNUQE4.js} +1 -1
  29. package/dist/{chunk-SB3IHM5Y.js → chunk-K55TU6CC.js} +2023 -1700
  30. package/dist/chunk-KB5CAN5D.js +33 -0
  31. package/dist/{chunk-OGHTJKBV.js → chunk-KMA4FOSV.js} +5682 -5675
  32. package/dist/{chunk-ICHDIVQO.js → chunk-KXNRTJAE.js} +1 -1
  33. package/dist/{chunk-MLHZUN2X.js → chunk-MGAELVTZ.js} +12 -12
  34. package/dist/chunk-MKH2KOAO.js +39 -0
  35. package/dist/{chunk-6BJ5HMMC.js → chunk-NAPXMYFW.js} +35 -362
  36. package/dist/{chunk-GDTK33QT.js → chunk-OGG3QJYW.js} +14 -5
  37. package/dist/{chunk-SN7X5N2A.js → chunk-P6HHXMLJ.js} +1 -1
  38. package/dist/{chunk-SEYOVNS5.js → chunk-QAILYRC2.js} +1 -1
  39. package/dist/{chunk-RBGVNPA6.js → chunk-RXZ3XDBM.js} +1 -1
  40. package/dist/{chunk-2ZRY3ARL.js → chunk-SPW6UA6B.js} +1 -1
  41. package/dist/{chunk-3H5DIJN7.js → chunk-SVZR4GYA.js} +1 -1
  42. package/dist/{chunk-47YJVIZE.js → chunk-UEY4AB3R.js} +789 -66
  43. package/dist/{chunk-LFLM723H.js → chunk-UL6MPMKY.js} +1 -1
  44. package/dist/{chunk-TX3UHDL5.js → chunk-WELN7DDV.js} +2 -2
  45. package/dist/{chunk-D3XXPCCK.js → chunk-WJN2VVVJ.js} +1 -1
  46. package/dist/{chunk-DMSTDZCJ.js → chunk-XODQUPFW.js} +11 -11
  47. package/dist/components/index.d.ts +135 -25
  48. package/dist/components/index.js +2165 -1996
  49. package/dist/components/navigation/index.js +7 -8
  50. package/dist/features/auth/index.d.ts +35 -3716
  51. package/dist/features/auth/index.js +9 -10
  52. package/dist/features/clients/index.js +18 -12
  53. package/dist/features/content/index.js +27 -27
  54. package/dist/features/crm/index.css +59 -59
  55. package/dist/features/crm/index.d.ts +17 -1
  56. package/dist/features/crm/index.js +13 -11
  57. package/dist/features/dashboard/index.css +59 -59
  58. package/dist/features/dashboard/index.js +8 -9
  59. package/dist/features/delivery/index.d.ts +3 -0
  60. package/dist/features/delivery/index.js +21 -20
  61. package/dist/features/knowledge/index.js +6 -7
  62. package/dist/features/lead-gen/index.css +59 -59
  63. package/dist/features/lead-gen/index.d.ts +3921 -4
  64. package/dist/features/lead-gen/index.js +15 -13
  65. package/dist/features/monitoring/index.js +10 -11
  66. package/dist/features/monitoring/requests/index.css +59 -59
  67. package/dist/features/monitoring/requests/index.js +8 -9
  68. package/dist/features/notes/index.js +4 -4
  69. package/dist/features/operations/index.css +59 -59
  70. package/dist/features/operations/index.js +13 -15
  71. package/dist/features/seo/index.css +659 -0
  72. package/dist/features/seo/index.d.ts +3979 -1
  73. package/dist/features/seo/index.js +31 -2
  74. package/dist/features/settings/index.css +59 -59
  75. package/dist/features/settings/index.d.ts +96 -3742
  76. package/dist/features/settings/index.js +10 -12
  77. package/dist/hooks/access/index.js +6 -7
  78. package/dist/hooks/delivery/index.css +59 -59
  79. package/dist/hooks/delivery/index.d.ts +12 -4
  80. package/dist/hooks/delivery/index.js +3 -3
  81. package/dist/hooks/published.d.ts +83 -29
  82. package/dist/hooks/published.js +19 -19
  83. package/dist/initialization/index.d.ts +35 -3716
  84. package/dist/knowledge/index.js +11 -11
  85. package/dist/layout/index.d.ts +55 -2
  86. package/dist/layout/index.js +10 -10
  87. package/dist/organization/index.css +59 -59
  88. package/dist/organization/index.d.ts +20 -4
  89. package/dist/profile/index.d.ts +81 -3716
  90. package/dist/provider/ElevasisServiceContext.d.ts +1 -2
  91. package/dist/provider/index.d.ts +4 -2
  92. package/dist/provider/index.js +6 -7
  93. package/dist/provider/published.d.ts +4 -2
  94. package/dist/provider/published.js +6 -7
  95. package/dist/test-utils/index.d.ts +1 -2
  96. package/dist/test-utils/index.js +3 -3
  97. package/dist/theme/index.js +3 -3
  98. package/dist/theme/presets/index.js +1 -1
  99. package/dist/types/index.d.ts +298 -251
  100. package/dist/utils/index.d.ts +1 -1
  101. package/dist/utils/index.js +1 -1
  102. package/package.json +4 -8
  103. package/src/hooks/README.md +22 -23
  104. package/dist/chunk-6ZAP3FOA.js +0 -93
  105. package/dist/chunk-AH52XQB7.js +0 -1
  106. package/dist/chunk-DVAOCHIF.js +0 -165
  107. package/dist/chunk-MISHPEJX.js +0 -244
  108. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +0 -879
  109. package/dist/hooks/operations/command-view/utils/transformCommandViewData.js +0 -2
  110. /package/dist/{chunk-A2SB32YV.js → chunk-5ZK7K7YP.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-A2SB32YV.js';
1
+ import { getErrorInfo, formatErrorMessage, getErrorTitle } from './chunk-5ZK7K7YP.js';
2
2
  import { notifications } from '@mantine/notifications';
3
3
 
4
4
  var showInfoNotification = (message) => {
@@ -1,15 +1,15 @@
1
- import { useProjectRealtime, useProjectActivities } from './chunk-DTEGVSJ6.js';
2
- import { useCreateTask, useCreateMilestone, useProjectMilestones, useUpdateTask, useProjects, useDeleteProject, useProject, useProjectNotes, useUpdateMilestone, useCreateNote } from './chunk-IYATYH5I.js';
3
- import { useTableSort, sortData } from './chunk-NYIIRZSA.js';
1
+ import { useProjectRealtime, useProjectActivities } from './chunk-5R4I2PAN.js';
2
+ import { useCreateTask, useCreateMilestone, useProjectMilestones, useUpdateTask, useProjects, useDeleteProject, useProject, useProjectNotes, useUpdateMilestone, useCreateNote } from './chunk-GFSOQH3N.js';
3
+ import { useTableSort, sortData } from './chunk-2Y6AKWGU.js';
4
4
  import { useTableSelection } from './chunk-WDBNW44Z.js';
5
5
  import { milestoneStatusColors, formatStatusLabel, taskTypeColors, taskStatusColors, projectStatusColors, calculateProgress, noteTypeColors } from './chunk-DLR4SDZW.js';
6
+ import { SubshellPageLayout } from './chunk-6B4ZPBQJ.js';
6
7
  import { PageContainer } from './chunk-BZZCNLT6.js';
7
8
  import { TableSelectionToolbar, SortableHeader } from './chunk-TUMSNGTX.js';
8
9
  import { FilterBar } from './chunk-PDHTXPSF.js';
9
- import { StatusBadge, EmptyState, SubshellContentContainer, PageTitleCaption, usePaginationState, CenteredErrorState, CustomModal, StatCard } from './chunk-SB3IHM5Y.js';
10
- import { SubshellSidebarSection, SubshellNavItem } from './chunk-MISHPEJX.js';
10
+ import { StatusBadge, EmptyState, SubshellSidebarSection, PageTitleCaption, usePaginationState, SubshellContentContainer, CenteredErrorState, CustomModal, StatCard, SubshellNavItem } from './chunk-K55TU6CC.js';
11
11
  import { CardHeader } from './chunk-62GVNH5U.js';
12
- import { PAGE_SIZE_DEFAULT, formatTimeAgo, formatDate, formatRelativeTime } from './chunk-A2SB32YV.js';
12
+ import { PAGE_SIZE_DEFAULT, formatTimeAgo, formatDate, formatRelativeTime } from './chunk-5ZK7K7YP.js';
13
13
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
14
14
  import { useState, useMemo } from 'react';
15
15
  import { Stack, Text, Group, Checkbox, ActionIcon, TextInput, Button, Modal, Title, Textarea, Select, SimpleGrid, Card, ThemeIcon, RingProgress, Paper, Timeline, Badge, Collapse, Center, Loader, Table, Pagination, Alert, CopyButton, Tooltip, Space, Tabs, Divider, Anchor, Chip, List } from '@mantine/core';
@@ -494,7 +494,7 @@ var ProjectsSidebar = ({ children } = {}) => {
494
494
  ] });
495
495
  };
496
496
  function AllTasksPage() {
497
- return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsxs(PageContainer, { children: [
497
+ return /* @__PURE__ */ jsxs(SubshellPageLayout, { children: [
498
498
  /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(PageTitleCaption, { title: "All Tasks", caption: "Project tasks are scoped to an individual project" }) }),
499
499
  /* @__PURE__ */ jsxs(Paper, { children: [
500
500
  /* @__PURE__ */ jsx(
@@ -508,10 +508,10 @@ function AllTasksPage() {
508
508
  ),
509
509
  /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", ta: "center", pb: "xl", children: "This page is kept for route parity only." })
510
510
  ] })
511
- ] }) });
511
+ ] });
512
512
  }
513
513
  function UpcomingMilestonesPage() {
514
- return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsxs(PageContainer, { children: [
514
+ return /* @__PURE__ */ jsxs(SubshellPageLayout, { children: [
515
515
  /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(PageTitleCaption, { title: "Upcoming Milestones", caption: "Milestones are scoped to an individual project" }) }),
516
516
  /* @__PURE__ */ jsxs(Paper, { children: [
517
517
  /* @__PURE__ */ jsx(
@@ -525,7 +525,7 @@ function UpcomingMilestonesPage() {
525
525
  ),
526
526
  /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", ta: "center", pb: "xl", children: "This page is kept for route parity only." })
527
527
  ] })
528
- ] }) });
528
+ ] });
529
529
  }
530
530
  var STATUS_OPTIONS = [
531
531
  { value: "active", label: "Active" },
@@ -1153,7 +1153,7 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1153
1153
  (lastIndex, milestone, index) => milestone.status !== "upcoming" ? index : lastIndex,
1154
1154
  -1
1155
1155
  );
1156
- return /* @__PURE__ */ jsx(SubshellContentContainer, { children: /* @__PURE__ */ jsx(PageContainer, { children: /* @__PURE__ */ jsxs(Stack, { children: [
1156
+ return /* @__PURE__ */ jsx(SubshellPageLayout, { children: /* @__PURE__ */ jsxs(Stack, { children: [
1157
1157
  /* @__PURE__ */ jsx(
1158
1158
  PageTitleCaption,
1159
1159
  {
@@ -1592,7 +1592,7 @@ function ProjectDetailPage({ projectId, onBack, backLabel = "Projects" }) {
1592
1592
  )
1593
1593
  ] })
1594
1594
  ] }) })
1595
- ] }) }) });
1595
+ ] }) });
1596
1596
  }
1597
1597
 
1598
1598
  export { AllTasksPage, Checklist, CreateDeliveryEntityModal, DELIVERY_COMMUNICATION_ITEMS, DELIVERY_PROJECT_ITEMS, DELIVERY_WORK_ITEMS, HealthStatusCard, MilestoneTimeline, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, TaskCard, UpcomingMilestonesPage };
@@ -0,0 +1,39 @@
1
+ import { useAuthContext } from './chunk-BRJ3QZ4E.js';
2
+ import { createClient } from '@supabase/supabase-js';
3
+ import { useMemo } from 'react';
4
+
5
+ function getSupabaseConfig() {
6
+ const url = import.meta.env?.VITE_SUPABASE_URL;
7
+ const anonKey = import.meta.env?.VITE_SUPABASE_ANON_KEY;
8
+ if (!url || !anonKey) {
9
+ throw new Error("Missing Supabase environment variables (VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY)");
10
+ }
11
+ return { url, anonKey };
12
+ }
13
+ var useSupabase = () => {
14
+ const { getAccessToken } = useAuthContext();
15
+ const { url, anonKey } = getSupabaseConfig();
16
+ return useMemo(
17
+ () => createClient(url, anonKey, {
18
+ global: {
19
+ headers: {
20
+ // Additional headers if needed
21
+ }
22
+ },
23
+ accessToken: async () => {
24
+ try {
25
+ const token = await getAccessToken();
26
+ if (!token) {
27
+ return null;
28
+ }
29
+ return token;
30
+ } catch {
31
+ return null;
32
+ }
33
+ }
34
+ }),
35
+ [getAccessToken, url, anonKey]
36
+ );
37
+ };
38
+
39
+ export { useSupabase };
@@ -1,23 +1,20 @@
1
- import { useAvailablePresets } from './chunk-ZFISGKYW.js';
2
- import { MEMBERSHIP_STATUS_COLORS, PROVISIONING_STATE_DISPLAY, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useOrgRoles, useAssignRole, useRevokeRole, useOrganizationMembers, usePermissionCatalog } from './chunk-QFS2GZMV.js';
3
- import { useUpdateCredential, CredentialSchemas } from './chunk-G7O4CBMC.js';
4
- import { AppShellLoader } from './chunk-5RH6NYZH.js';
1
+ import { useAvailablePresets } from './chunk-IIEZXXDD.js';
2
+ import { MEMBERSHIP_STATUS_COLORS, PROVISIONING_STATE_DISPLAY, transformMembershipToTableRow, useUserMemberships, useUpdateWebhookEndpoint, useDeleteWebhookEndpoint, useCreateWebhookEndpoint, useListWebhookEndpoints, useOrgRoles, useAssignRole, useRevokeRole, useOrganizationMembers, usePermissionCatalog } from './chunk-73G3I5HJ.js';
3
+ import { AppShellLoader } from './chunk-EFQLXRYT.js';
5
4
  import { FilterBar } from './chunk-PDHTXPSF.js';
6
- import { CustomModal, APIErrorAlert, EmptyState, PageTitleCaption, useResources, ListSkeleton, StatCard, useAccess, AccessKeys, AccessGuard } from './chunk-SB3IHM5Y.js';
7
- import { showApiErrorNotification, showErrorNotification, showSuccessNotification } from './chunk-ICHDIVQO.js';
5
+ import { CustomModal, APIErrorAlert, EmptyState, PageTitleCaption, useResources, ListSkeleton, StatCard, useAccess, AccessKeys, AccessGuard } from './chunk-K55TU6CC.js';
6
+ import { showApiErrorNotification, showErrorNotification, showSuccessNotification } from './chunk-KXNRTJAE.js';
8
7
  import { CardHeader } from './chunk-62GVNH5U.js';
9
8
  import { useInitialization } from './chunk-P45GQ3ZW.js';
10
9
  import { RoleBadge } from './chunk-UD657ICS.js';
11
10
  import { useOrganization } from './chunk-DD3CCMCZ.js';
12
- import { isAPIClientError, formatDateTime, OAUTH_FLOW_TIMEOUT } from './chunk-A2SB32YV.js';
11
+ import { isAPIClientError, formatDateTime, OAUTH_FLOW_TIMEOUT } from './chunk-5ZK7K7YP.js';
13
12
  import { useElevasisServices } from './chunk-BI5VDO2K.js';
14
- import { brandSupabaseOrgId } from './chunk-MQZE7SUI.js';
15
13
  import { useAuthContext } from './chunk-BRJ3QZ4E.js';
16
- import { Text, Stack, Title, Alert, TextInput, Group, Button, Paper, SimpleGrid, Card, ThemeIcon, Badge, Tooltip, Select, Table, Center, Loader, Box, Code, CopyButton, ActionIcon, UnstyledButton, Switch, Divider, Textarea, MultiSelect, PasswordInput } from '@mantine/core';
17
- import { IconShieldOff, IconAlertCircle, IconBrandDropbox, IconBrandGoogleDrive, IconPlug, IconUsers, IconSearch, IconBuilding, IconWebhook, IconCheck, IconCopy, IconUser, IconMail, IconPalette, IconEye, IconSparkles, IconTrendingUp, IconExclamationMark, IconPencil, IconClock, IconPlayerPause, IconPlayerPlay, IconTrash, IconAlertTriangle, IconPlus, IconActivity, IconShieldLock, IconStar, IconUserCog, IconUsersGroup, IconSettings, IconRefresh, IconEdit, IconUserX, IconUserCheck } from '@tabler/icons-react';
14
+ import { Text, Stack, Title, Alert, TextInput, Group, Button, Paper, SimpleGrid, Card, ThemeIcon, Badge, Tooltip, Select, Table, Center, Loader, Box, Code, CopyButton, ActionIcon, UnstyledButton, Switch, Divider, Textarea, MultiSelect } from '@mantine/core';
15
+ import { IconShieldOff, IconAlertCircle, IconBrandDropbox, IconBrandGoogleDrive, IconPlug, IconUsers, IconSearch, IconBuilding, IconWebhook, IconCheck, IconCopy, IconUser, IconMail, IconPalette, IconEye, IconSparkles, IconTrendingUp, IconExclamationMark, IconPencil, IconClock, IconPlayerPause, IconPlayerPlay, IconTrash, IconAlertTriangle, IconPlus, IconActivity, IconShieldLock, IconStar, IconUserCog, IconUsersGroup, IconSettings, IconEdit, IconUserX, IconUserCheck } from '@tabler/icons-react';
18
16
  import { modals } from '@mantine/modals';
19
17
  import { notifications } from '@mantine/notifications';
20
- import { z } from 'zod';
21
18
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
22
19
  import { useState, useEffect, useRef, useMemo, useCallback } from 'react';
23
20
  import { useQueryClient } from '@tanstack/react-query';
@@ -85,178 +82,6 @@ var OAUTH_PROVIDERS = {
85
82
  ]
86
83
  }
87
84
  };
88
- var CredentialFieldSchema = z.object({
89
- key: z.string(),
90
- label: z.string(),
91
- type: z.enum(["password", "text"]),
92
- required: z.boolean(),
93
- placeholder: z.string().optional(),
94
- description: z.string().optional()
95
- });
96
- var CredentialSchemaZod = z.object({
97
- type: z.string(),
98
- label: z.string(),
99
- description: z.string(),
100
- fields: z.array(CredentialFieldSchema).optional(),
101
- docsUrl: z.string().url().optional(),
102
- nameSuggestions: z.array(z.string()),
103
- oauthProvider: z.string().optional()
104
- });
105
- var CREDENTIAL_SCHEMAS = {
106
- "google-sheets": {
107
- type: "oauth",
108
- label: "Google Sheets",
109
- description: "Google Sheets OAuth integration",
110
- oauthProvider: "google-sheets",
111
- nameSuggestions: ["google-sheets-prod", "google-sheets-dev", "sheets-workspace"]
112
- },
113
- dropbox: {
114
- type: "oauth",
115
- label: "Dropbox",
116
- description: "Dropbox OAuth integration",
117
- oauthProvider: "dropbox",
118
- nameSuggestions: ["dropbox-prod", "dropbox-dev", "elevasis-dropbox"]
119
- },
120
- oauth: {
121
- type: "oauth",
122
- label: "OAuth",
123
- description: "Generic OAuth credential",
124
- nameSuggestions: []
125
- },
126
- "api-key": {
127
- type: "single_field",
128
- label: "API Key",
129
- description: "Single-field API key credential",
130
- fields: [
131
- {
132
- key: "apiKey",
133
- label: "API Key",
134
- type: "password",
135
- required: true,
136
- placeholder: "Enter your API key",
137
- description: "API key for the service"
138
- }
139
- ],
140
- nameSuggestions: ["service-prod", "service-dev", "api-key"]
141
- },
142
- "webhook-secret": {
143
- type: "single_field",
144
- label: "Webhook Secret",
145
- description: "Webhook signing secret for signature validation",
146
- fields: [
147
- {
148
- key: "signingSecret",
149
- label: "Signing Secret",
150
- type: "password",
151
- required: true,
152
- placeholder: "whsec_...",
153
- description: "Webhook signing secret from provider dashboard"
154
- }
155
- ],
156
- nameSuggestions: ["my-org-cal-com-webhook", "my-org-stripe-webhook", "my-org-signature-api-webhook"]
157
- },
158
- "api-key-secret": {
159
- type: "api-key-secret",
160
- label: "API Key + Secret",
161
- description: "API key and secret pair authentication",
162
- fields: [
163
- {
164
- key: "apiKey",
165
- label: "API Key",
166
- type: "password",
167
- required: true
168
- },
169
- {
170
- key: "apiSecret",
171
- label: "API Secret",
172
- type: "password",
173
- required: true
174
- }
175
- ],
176
- nameSuggestions: []
177
- },
178
- apify: {
179
- type: "single_field",
180
- label: "Apify",
181
- description: "Apify API token for running web-scraping actors (e.g. website crawl, Google Places scrape).",
182
- fields: [
183
- {
184
- key: "apiKey",
185
- label: "API Token",
186
- type: "password",
187
- required: true,
188
- placeholder: "apify_api_...",
189
- description: "Personal API token from https://console.apify.com/account/integrations"
190
- }
191
- ],
192
- docsUrl: "https://docs.apify.com/platform/integrations/api",
193
- nameSuggestions: ["elevasis-apify", "apify-prod", "apify-dev"]
194
- },
195
- clickup: {
196
- type: "single_field",
197
- label: "ClickUp",
198
- description: "ClickUp personal API token for creating tasks in tenant-managed ClickUp workspaces.",
199
- fields: [
200
- {
201
- key: "apiToken",
202
- label: "API Token",
203
- type: "password",
204
- required: true,
205
- placeholder: "pk_...",
206
- description: "Personal API token from ClickUp settings. Personal tokens start with pk_."
207
- }
208
- ],
209
- docsUrl: "https://developer.clickup.com/docs/authentication",
210
- nameSuggestions: ["clickup-demo", "clickup-prod", "clickup-dev"]
211
- },
212
- instagram: {
213
- type: "single_field",
214
- label: "Instagram",
215
- description: "Long-lived Instagram access token for publishing through Meta\u2019s Content Publishing API.",
216
- fields: [
217
- {
218
- key: "accessToken",
219
- label: "Access Token",
220
- type: "password",
221
- required: true,
222
- placeholder: "IGAA...",
223
- description: "Long-lived token from the Meta app dashboard. Valid 60 days from issue or last refresh."
224
- },
225
- {
226
- key: "igUserId",
227
- label: "Instagram User ID",
228
- type: "text",
229
- required: true,
230
- placeholder: "17841400000000000",
231
- description: "The Instagram professional account id shown beside the token on the same Meta screen."
232
- }
233
- ],
234
- docsUrl: "https://developers.facebook.com/docs/instagram-platform/instagram-api-with-instagram-login/content-publishing",
235
- nameSuggestions: ["elevasis-instagram", "instagram-prod", "instagram-dev"]
236
- }
237
- };
238
- function getCredentialSchema(type) {
239
- const schema = CREDENTIAL_SCHEMAS[type] || CREDENTIAL_SCHEMAS["api-key"];
240
- return CredentialSchemaZod.parse(schema);
241
- }
242
-
243
- // ../core/src/integrations/credentials/utils.ts
244
- function buildCredentialValue(type, formValues) {
245
- const schema = getCredentialSchema(type);
246
- if (schema.type === "oauth") {
247
- throw new Error(`buildCredentialValue should not be used for OAuth type: ${type}`);
248
- }
249
- const value = {};
250
- if (schema.fields) {
251
- for (const field of schema.fields) {
252
- const fieldValue = formValues[field.key];
253
- if (fieldValue !== void 0 && fieldValue !== null) {
254
- value[field.key] = fieldValue.trim();
255
- }
256
- }
257
- }
258
- return value;
259
- }
260
85
  function showAuthError(error) {
261
86
  if (isAPIClientError(error)) {
262
87
  if (error.code === "LAST_OWNER_PROTECTED") {
@@ -1458,7 +1283,7 @@ function MemberAccessModal({ opened, onClose, orgId, member, defaultTab = "roles
1458
1283
  ] }) });
1459
1284
  }
1460
1285
  function RolesTabPanel({ orgId, member, onSaved }) {
1461
- const { data: rolesData, isLoading: rolesLoading } = useOrgRoles(orgId ? brandSupabaseOrgId(orgId) : void 0);
1286
+ const { data: rolesData, isLoading: rolesLoading } = useOrgRoles(orgId ?? void 0);
1462
1287
  const assignMutation = useAssignRole();
1463
1288
  const revokeMutation = useRevokeRole();
1464
1289
  const canManagePrivileged = useAccess(AccessKeys.rolesManage).allowed;
@@ -1543,7 +1368,7 @@ function transformMemberForModal(member) {
1543
1368
  };
1544
1369
  }
1545
1370
  function OrgMembersList({ orgId }) {
1546
- const { data: members, isLoading, error } = useOrganizationMembers(brandSupabaseOrgId(orgId));
1371
+ const { data: members, isLoading, error } = useOrganizationMembers(orgId);
1547
1372
  const [selectedMember, setSelectedMember] = useState(null);
1548
1373
  const [modalOpened, setModalOpened] = useState(false);
1549
1374
  const [defaultTab, setDefaultTab] = useState("roles");
@@ -1612,7 +1437,12 @@ function OrgMembersList({ orgId }) {
1612
1437
  )
1613
1438
  ] });
1614
1439
  }
1615
- function OrganizationSettings({ user, currentMembership, isOrgAdmin }) {
1440
+ function OrganizationSettings({
1441
+ user,
1442
+ currentMembership,
1443
+ organizationId,
1444
+ isOrgAdmin
1445
+ }) {
1616
1446
  return /* @__PURE__ */ jsxs(Stack, { children: [
1617
1447
  /* @__PURE__ */ jsx(PageTitleCaption, { title: "Organization Settings", caption: "Manage your current organization" }),
1618
1448
  currentMembership?.organization && /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
@@ -1663,7 +1493,7 @@ function OrganizationSettings({ user, currentMembership, isOrgAdmin }) {
1663
1493
  ] })
1664
1494
  ] })
1665
1495
  ] }) }),
1666
- isOrgAdmin && currentMembership?.organization && /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { children: [
1496
+ isOrgAdmin && organizationId && /* @__PURE__ */ jsx(Paper, { withBorder: true, children: /* @__PURE__ */ jsxs(Stack, { children: [
1667
1497
  /* @__PURE__ */ jsx(
1668
1498
  CardHeader,
1669
1499
  {
@@ -1672,7 +1502,7 @@ function OrganizationSettings({ user, currentMembership, isOrgAdmin }) {
1672
1502
  subtitle: "Configure feature access for organization members."
1673
1503
  }
1674
1504
  ),
1675
- /* @__PURE__ */ jsx(OrgMembersList, { orgId: currentMembership.organization.id })
1505
+ /* @__PURE__ */ jsx(OrgMembersList, { orgId: organizationId })
1676
1506
  ] }) })
1677
1507
  ] });
1678
1508
  }
@@ -1698,7 +1528,13 @@ function MyRolesPage({ onManageMembers, onManageOrganizationRoles }) {
1698
1528
  return groups;
1699
1529
  }, {});
1700
1530
  return /* @__PURE__ */ jsxs(Stack, { gap: "md", children: [
1701
- /* @__PURE__ */ jsx(PageTitleCaption, { title: "My Roles", caption: `Roles assigned to you in ${orgName} and what each one lets you do.` }),
1531
+ /* @__PURE__ */ jsx(
1532
+ PageTitleCaption,
1533
+ {
1534
+ title: "My Roles",
1535
+ caption: `Roles assigned to you in ${orgName} and what each one lets you do.`
1536
+ }
1537
+ ),
1702
1538
  /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "md", children: /* @__PURE__ */ jsxs(Stack, { children: [
1703
1539
  /* @__PURE__ */ jsx(
1704
1540
  CardHeader,
@@ -1743,181 +1579,18 @@ function MyRolesPage({ onManageMembers, onManageOrganizationRoles }) {
1743
1579
  ),
1744
1580
  /* @__PURE__ */ jsxs(Group, { children: [
1745
1581
  onManageMembers ? /* @__PURE__ */ jsx(Button, { variant: "light", leftSection: /* @__PURE__ */ jsx(IconUsersGroup, { size: 14 }), onClick: onManageMembers, children: "Members" }) : null,
1746
- onManageOrganizationRoles ? /* @__PURE__ */ jsx(AccessGuard, { accessKey: AccessKeys.organizationManage, children: /* @__PURE__ */ jsx(Button, { variant: "light", leftSection: /* @__PURE__ */ jsx(IconShieldLock, { size: 14 }), onClick: onManageOrganizationRoles, children: "Organization roles" }) }) : null
1582
+ onManageOrganizationRoles ? /* @__PURE__ */ jsx(AccessGuard, { accessKey: AccessKeys.organizationManage, children: /* @__PURE__ */ jsx(
1583
+ Button,
1584
+ {
1585
+ variant: "light",
1586
+ leftSection: /* @__PURE__ */ jsx(IconShieldLock, { size: 14 }),
1587
+ onClick: onManageOrganizationRoles,
1588
+ children: "Organization roles"
1589
+ }
1590
+ ) }) : null
1747
1591
  ] })
1748
1592
  ] }) }) })
1749
1593
  ] });
1750
1594
  }
1751
- function EditCredentialModal({ apiUrl, credential, onClose }) {
1752
- const [credentialName, setCredentialName] = useState("");
1753
- const [nameError, setNameError] = useState(null);
1754
- const [fieldValues, setFieldValues] = useState({});
1755
- const { authorize, isAuthorizing, error: oauthError } = useOAuthFlow({ apiUrl });
1756
- const updateMutation = useUpdateCredential();
1757
- useEffect(() => {
1758
- if (credential) {
1759
- setCredentialName(credential.name);
1760
- }
1761
- }, [credential]);
1762
- if (!credential) return null;
1763
- const credentialType = credential.type || "api-key";
1764
- const schema = getCredentialSchema(credentialType);
1765
- const provider = credential.provider;
1766
- const isOAuth = !!provider || schema.type === "oauth";
1767
- const hasMetadataChanged = credentialName !== credential.name;
1768
- const isPending = isAuthorizing || updateMutation.isPending;
1769
- const handleClose = () => {
1770
- if (!isPending) {
1771
- onClose();
1772
- }
1773
- };
1774
- const handleOAuthReconnect = async () => {
1775
- if (!provider) return;
1776
- try {
1777
- await authorize(provider, credential.name);
1778
- onClose();
1779
- } catch (err) {
1780
- console.error("Reconnect failed:", err);
1781
- }
1782
- };
1783
- const handleSaveChanges = async () => {
1784
- const nameValidation = CredentialSchemas.UpdateRequest.shape.name.safeParse(credentialName);
1785
- if (!nameValidation.success) {
1786
- setNameError(nameValidation.error.issues[0]?.message || "Invalid credential name");
1787
- return;
1788
- }
1789
- setNameError(null);
1790
- const updateData = { name: credentialName };
1791
- const validationResult = CredentialSchemas.UpdateRequest.safeParse(updateData);
1792
- if (!validationResult.success) {
1793
- console.error("Validation failed:", validationResult.error);
1794
- return;
1795
- }
1796
- try {
1797
- await updateMutation.mutateAsync({
1798
- credentialId: credential.id,
1799
- updates: updateData
1800
- });
1801
- onClose();
1802
- } catch (err) {
1803
- console.error("Save changes failed:", err);
1804
- }
1805
- };
1806
- const handleCredentialUpdate = async () => {
1807
- const hasValues = Object.values(fieldValues).some((v) => v.trim());
1808
- if (!hasValues) return;
1809
- try {
1810
- const credentialValue = buildCredentialValue(credentialType, fieldValues);
1811
- const updateData = { value: credentialValue };
1812
- const validationResult = CredentialSchemas.UpdateRequest.safeParse(updateData);
1813
- if (!validationResult.success) {
1814
- console.error("Validation failed:", validationResult.error);
1815
- return;
1816
- }
1817
- await updateMutation.mutateAsync({
1818
- credentialId: credential.id,
1819
- updates: updateData
1820
- });
1821
- onClose();
1822
- } catch (err) {
1823
- console.error("Update failed:", err);
1824
- }
1825
- };
1826
- const handleFieldChange = (key, value) => {
1827
- setFieldValues((prev) => ({ ...prev, [key]: value }));
1828
- };
1829
- const handleNameChange = (value) => {
1830
- setCredentialName(value);
1831
- if (nameError) setNameError(null);
1832
- };
1833
- const hasFieldValues = Object.values(fieldValues).some((v) => v.trim());
1834
- return /* @__PURE__ */ jsx(CustomModal, { opened: true, onClose: handleClose, loading: isPending, children: /* @__PURE__ */ jsxs(Stack, { children: [
1835
- /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1836
- /* @__PURE__ */ jsx(IconSettings, { size: 24 }),
1837
- /* @__PURE__ */ jsx(Title, { order: 3, children: isOAuth ? "Manage OAuth Credential" : "Edit API Key" })
1838
- ] }),
1839
- /* @__PURE__ */ jsxs(Group, { gap: "xs", children: [
1840
- /* @__PURE__ */ jsx(Text, { size: "sm", fw: 500, children: "Type:" }),
1841
- /* @__PURE__ */ jsx(Badge, { variant: "light", size: "sm", children: schema.label })
1842
- ] }),
1843
- /* @__PURE__ */ jsx(
1844
- TextInput,
1845
- {
1846
- label: "Name",
1847
- value: credentialName,
1848
- onChange: (e) => handleNameChange(e.target.value),
1849
- disabled: isPending,
1850
- maxLength: 100,
1851
- description: "Lowercase letters, numbers, and hyphens only (e.g., gmail-dev, notion-prod)",
1852
- error: nameError
1853
- }
1854
- ),
1855
- isOAuth && /* @__PURE__ */ jsxs(Fragment, { children: [
1856
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: 'OAuth credentials are managed by the provider. You can update the name above, or click "Reconnect" to refresh your connection and update access tokens.' }),
1857
- oauthError && /* @__PURE__ */ jsx(Alert, { icon: /* @__PURE__ */ jsx(IconAlertCircle, { size: 16 }), color: "red", title: "Connection Failed", children: oauthError }),
1858
- /* @__PURE__ */ jsxs(Group, { justify: "space-between", gap: "sm", children: [
1859
- /* @__PURE__ */ jsx(Button, { variant: "light", onClick: handleClose, disabled: isPending, children: "Cancel" }),
1860
- /* @__PURE__ */ jsxs(Group, { gap: "sm", children: [
1861
- /* @__PURE__ */ jsx(
1862
- Button,
1863
- {
1864
- variant: "light",
1865
- onClick: handleSaveChanges,
1866
- loading: updateMutation.isPending,
1867
- disabled: !hasMetadataChanged || isAuthorizing,
1868
- children: "Save Changes"
1869
- }
1870
- ),
1871
- /* @__PURE__ */ jsx(
1872
- Button,
1873
- {
1874
- color: "blue",
1875
- onClick: handleOAuthReconnect,
1876
- loading: isAuthorizing,
1877
- leftSection: /* @__PURE__ */ jsx(IconRefresh, { size: 16 }),
1878
- disabled: updateMutation.isPending,
1879
- children: "Reconnect OAuth"
1880
- }
1881
- )
1882
- ] })
1883
- ] })
1884
- ] }),
1885
- !isOAuth && /* @__PURE__ */ jsxs(Fragment, { children: [
1886
- /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "Current values are encrypted and cannot be displayed. Enter new values below to replace them." }),
1887
- schema.fields?.map((field) => {
1888
- const Input = field.type === "text" ? TextInput : PasswordInput;
1889
- return /* @__PURE__ */ jsx(
1890
- Input,
1891
- {
1892
- label: `New ${field.label}`,
1893
- placeholder: field.placeholder || `Enter new ${field.label.toLowerCase()}`,
1894
- value: fieldValues[field.key] || "",
1895
- onChange: (e) => handleFieldChange(field.key, e.target.value),
1896
- description: field.description,
1897
- disabled: isPending
1898
- },
1899
- field.key
1900
- );
1901
- }),
1902
- updateMutation.error && /* @__PURE__ */ jsx(Alert, { icon: /* @__PURE__ */ jsx(IconAlertCircle, { size: 16 }), color: "red", title: "Update Failed", children: "Failed to update credential" }),
1903
- /* @__PURE__ */ jsxs(Group, { justify: "space-between", gap: "sm", children: [
1904
- /* @__PURE__ */ jsx(Button, { variant: "light", onClick: handleClose, disabled: isPending, children: "Cancel" }),
1905
- /* @__PURE__ */ jsxs(Group, { gap: "sm", children: [
1906
- /* @__PURE__ */ jsx(
1907
- Button,
1908
- {
1909
- variant: "light",
1910
- onClick: handleSaveChanges,
1911
- loading: updateMutation.isPending,
1912
- disabled: !hasMetadataChanged,
1913
- children: "Save Name"
1914
- }
1915
- ),
1916
- /* @__PURE__ */ jsx(Button, { onClick: handleCredentialUpdate, loading: updateMutation.isPending, disabled: !hasFieldValues, children: "Save Credential" })
1917
- ] })
1918
- ] })
1919
- ] })
1920
- ] }) });
1921
- }
1922
1595
 
1923
- export { AccountSettings, AppearanceSettings, CREDENTIAL_SCHEMAS, CreateWebhookEndpointModal, EditCredentialModal, EditWebhookEndpointModal, MemberAccessModal, MembershipStatusBadge, MyRolesPage, OAuthConnectModal, OAuthIntegrationsCard, OrgMembersList, OrganizationMembershipsList, OrganizationSettings, ProvisioningStateBadge, WebhookEndpointList, WebhookEndpointSettings, WebhookUrlDisplayModal, buildCredentialValue, getCredentialSchema, showAuthError };
1596
+ export { AccountSettings, AppearanceSettings, CreateWebhookEndpointModal, EditWebhookEndpointModal, MemberAccessModal, MembershipStatusBadge, MyRolesPage, OAuthConnectModal, OAuthIntegrationsCard, OrgMembersList, OrganizationMembershipsList, OrganizationSettings, ProvisioningStateBadge, WebhookEndpointList, WebhookEndpointSettings, WebhookUrlDisplayModal, showAuthError };
@@ -1,11 +1,11 @@
1
- import { useMarkAsRead, useExecutionLogsFilters, useExecutionLogs, useExecutionHealth, useCostSummary, useActivityFilters, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead } from './chunk-DMSTDZCJ.js';
1
+ import { useMarkAsRead, useExecutionLogsFilters, useExecutionLogs, useExecutionHealth, useCostSummary, useActivityFilters, useActivityTrend, useActivities, useNotifications, useMarkAllAsRead } from './chunk-XODQUPFW.js';
2
+ import { AppShellLoader } from './chunk-EFQLXRYT.js';
2
3
  import { useTimeRangeDates } from './chunk-YQQ5GRUR.js';
3
- import { AppShellLoader } from './chunk-5RH6NYZH.js';
4
4
  import { FilterBar } from './chunk-PDHTXPSF.js';
5
- import { CenteredErrorState, StatsCardSkeleton, CyberAreaChart, TrendIndicator, DetailCardSkeleton, useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, EmptyState, PageTitleCaption, useErrorAnalysis, useErrorDetail, useResolveErrorsByExecution, useResources, CustomModal, JsonViewer, useCostTrends, useCostByModel, useCostBreakdown, CostTrendChart, ActivityTrendChart } from './chunk-SB3IHM5Y.js';
5
+ import { CenteredErrorState, StatsCardSkeleton, CyberAreaChart, TrendIndicator, DetailCardSkeleton, useResolveError, useResolveAllErrors, usePaginationState, useErrorDetails, EmptyState, PageTitleCaption, useErrorAnalysis, useErrorDetail, useResolveErrorsByExecution, useResources, CustomModal, JsonViewer, useCostTrends, useCostByModel, useCostBreakdown, CostTrendChart, ActivityTrendChart } from './chunk-K55TU6CC.js';
6
6
  import { CardHeader } from './chunk-62GVNH5U.js';
7
7
  import { formatDuration } from './chunk-BLXJEIQS.js';
8
- import { PAGE_SIZE_DEFAULT } from './chunk-A2SB32YV.js';
8
+ import { PAGE_SIZE_DEFAULT } from './chunk-5ZK7K7YP.js';
9
9
  import { formatBucketTime, getTimeRangeDates } from './chunk-Y6I3IC45.js';
10
10
  import { useRouterContext } from './chunk-Q7DJKLEN.js';
11
11
  import { useState, useMemo, useCallback } from 'react';
@@ -1553,7 +1553,16 @@ ${primaryError.errorContext ? JSON.stringify(primaryError.errorContext, null, 2)
1553
1553
  ] }),
1554
1554
  /* @__PURE__ */ jsxs(Group, { children: [
1555
1555
  /* @__PURE__ */ jsx(Button, { variant: "default", onClick: onClose, children: "Close" }),
1556
- resourceDetailHref && /* @__PURE__ */ jsx(Button, { component: "a", href: resourceDetailHref, target: "_blank", leftSection: /* @__PURE__ */ jsx(IconExternalLink, { size: 16 }), children: "View Execution Log" })
1556
+ resourceDetailHref && /* @__PURE__ */ jsx(
1557
+ Button,
1558
+ {
1559
+ component: "a",
1560
+ href: resourceDetailHref,
1561
+ target: "_blank",
1562
+ leftSection: /* @__PURE__ */ jsx(IconExternalLink, { size: 16 }),
1563
+ children: "View Execution Log"
1564
+ }
1565
+ )
1557
1566
  ] })
1558
1567
  ] })
1559
1568
  ] })
@@ -1,4 +1,4 @@
1
- import { showApiErrorNotification } from './chunk-ICHDIVQO.js';
1
+ import { showApiErrorNotification } from './chunk-KXNRTJAE.js';
2
2
  import { useElevasisServices } from './chunk-BI5VDO2K.js';
3
3
  import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
4
4
 
@@ -1,4 +1,4 @@
1
- import { useCyberColors, useResourcesHealth, EmptyState, CyberLegendItem, CyberAreaChart } from './chunk-SB3IHM5Y.js';
1
+ import { useCyberColors, useResourcesHealth, EmptyState, CyberLegendItem, CyberAreaChart } from './chunk-K55TU6CC.js';
2
2
  import { CardHeader } from './chunk-62GVNH5U.js';
3
3
  import { getTimeRangeDates, formatBucketTime } from './chunk-Y6I3IC45.js';
4
4
  import { Paper, Center, Loader, Group } from '@mantine/core';
@@ -1169,7 +1169,7 @@ function ChromeBackground({ variant, beam }) {
1169
1169
  ] });
1170
1170
  }
1171
1171
 
1172
- // src/theme/presets/aurora.tsx
1172
+ // src/theme/presets/aurora.ts
1173
1173
  var auroraPreset = {
1174
1174
  subtitleFontFamily: '"Nunito", sans-serif',
1175
1175
  fontImports: ["https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700&display=swap"],
@@ -1,4 +1,4 @@
1
- import { useAppearance } from './chunk-SB3IHM5Y.js';
1
+ import { useAppearance } from './chunk-K55TU6CC.js';
2
2
  import { Center } from '@mantine/core';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { GC_TIME_LONG, STALE_TIME_DEFAULT } from './chunk-A2SB32YV.js';
1
+ import { GC_TIME_LONG, STALE_TIME_DEFAULT } from './chunk-5ZK7K7YP.js';
2
2
  import { QueryClient } from '@tanstack/react-query';
3
3
 
4
4
  function createElevasisQueryClient(options = {}) {