@elevasis/ui 2.71.0 → 2.73.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 (71) hide show
  1. package/dist/api/index.js +3 -3
  2. package/dist/app/index.d.ts +116 -22
  3. package/dist/app/index.js +8 -8
  4. package/dist/auth/index.js +4 -4
  5. package/dist/charts/index.js +4 -4
  6. package/dist/{chunk-DCMFNSJ6.js → chunk-3TS5U5BL.js} +1 -1
  7. package/dist/{chunk-VRRIHA3S.js → chunk-4CW2C5BD.js} +1 -1
  8. package/dist/{chunk-26BTE3Z4.js → chunk-5B2ZFO44.js} +1 -1
  9. package/dist/{chunk-BM2WKRAQ.js → chunk-AJOVWB47.js} +3 -3
  10. package/dist/{chunk-DH2MO5DX.js → chunk-CJ2232PQ.js} +1 -1
  11. package/dist/{chunk-TVFSVTRG.js → chunk-ETN3TTRT.js} +7 -7
  12. package/dist/{chunk-NM4A63KJ.js → chunk-IBCEAVB2.js} +56 -20
  13. package/dist/{chunk-3BLYJT5L.js → chunk-IGBPWD6S.js} +3 -3
  14. package/dist/{chunk-TB2PM2OU.js → chunk-JYBJMVNY.js} +1 -1
  15. package/dist/{chunk-TCQZ4AJI.js → chunk-LEPYXLJ2.js} +1 -1
  16. package/dist/{chunk-H3SDGC5F.js → chunk-LZT2H2MA.js} +4 -4
  17. package/dist/{chunk-VDX6DL7Z.js → chunk-NHNTX6ZL.js} +1 -1
  18. package/dist/{chunk-VHPHWTX7.js → chunk-NI37YNRP.js} +4 -4
  19. package/dist/{chunk-UZ7MSORW.js → chunk-OCVSPAKM.js} +540 -29
  20. package/dist/{chunk-LL5H7J4N.js → chunk-PQ4B62HH.js} +2 -2
  21. package/dist/{chunk-CPBT6Z2G.js → chunk-SWKAH2YM.js} +52 -20
  22. package/dist/{chunk-C75XWBYZ.js → chunk-U2H3TIHD.js} +1 -1
  23. package/dist/{chunk-AIOV5NM7.js → chunk-Z4ICFQXG.js} +1 -1
  24. package/dist/{chunk-JTSNU6KA.js → chunk-ZDKPHFTH.js} +3 -3
  25. package/dist/components/index.d.ts +307 -24
  26. package/dist/components/index.js +316 -26
  27. package/dist/components/navigation/index.js +5 -5
  28. package/dist/features/auth/index.d.ts +76 -0
  29. package/dist/features/auth/index.js +6 -6
  30. package/dist/features/clients/index.js +5 -5
  31. package/dist/features/content/index.d.ts +586 -66
  32. package/dist/features/content/index.js +1213 -312
  33. package/dist/features/crm/index.d.ts +117 -22
  34. package/dist/features/crm/index.js +6 -6
  35. package/dist/features/dashboard/index.d.ts +20 -11
  36. package/dist/features/dashboard/index.js +6 -6
  37. package/dist/features/delivery/index.d.ts +76 -0
  38. package/dist/features/delivery/index.js +5 -5
  39. package/dist/features/knowledge/index.js +4 -4
  40. package/dist/features/lead-gen/index.d.ts +41 -22
  41. package/dist/features/lead-gen/index.js +6 -6
  42. package/dist/features/monitoring/index.js +7 -7
  43. package/dist/features/monitoring/requests/index.js +5 -5
  44. package/dist/features/operations/index.d.ts +40 -22
  45. package/dist/features/operations/index.js +9 -9
  46. package/dist/features/settings/index.d.ts +76 -0
  47. package/dist/features/settings/index.js +6 -6
  48. package/dist/hooks/access/index.js +4 -4
  49. package/dist/hooks/delivery/index.d.ts +76 -0
  50. package/dist/hooks/delivery/index.js +2 -2
  51. package/dist/hooks/index.d.ts +1259 -32
  52. package/dist/hooks/index.js +4 -4
  53. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +20 -11
  54. package/dist/hooks/published.d.ts +1259 -32
  55. package/dist/hooks/published.js +4 -4
  56. package/dist/initialization/index.d.ts +76 -0
  57. package/dist/knowledge/index.d.ts +40 -22
  58. package/dist/knowledge/index.js +18 -18
  59. package/dist/{knowledge-search-index-LP2WVSQX.js → knowledge-search-index-RZLIVWPJ.js} +5 -5
  60. package/dist/layout/index.js +7 -7
  61. package/dist/profile/index.d.ts +76 -0
  62. package/dist/provider/index.d.ts +116 -22
  63. package/dist/provider/index.js +4 -4
  64. package/dist/provider/published.d.ts +116 -22
  65. package/dist/provider/published.js +4 -4
  66. package/dist/supabase/index.d.ts +149 -0
  67. package/dist/test-utils/index.js +3 -3
  68. package/dist/types/index.d.ts +126 -14
  69. package/dist/utils/index.d.ts +20 -11
  70. package/dist/utils/index.js +1 -1
  71. package/package.json +5 -5
@@ -1,41 +1,41 @@
1
- export { AppErrorBoundary, CrashErrorFallback, ErrorReportCard, buildErrorReport } from '../chunk-TCQZ4AJI.js';
2
- import { useBreadcrumbs } from '../chunk-TB2PM2OU.js';
1
+ export { AppErrorBoundary, CrashErrorFallback, ErrorReportCard, buildErrorReport } from '../chunk-LEPYXLJ2.js';
2
+ import { useBreadcrumbs } from '../chunk-JYBJMVNY.js';
3
3
  import '../chunk-AH52XQB7.js';
4
- import { showAuthError } from '../chunk-CPBT6Z2G.js';
5
- export { CreateCredentialModal, CredentialList, CredentialSettings, MembershipStatusBadge, OAuthConnectModal, OrganizationMembershipsList, ProvisioningStateBadge, WebhookUrlDisplayModal, showAuthError } from '../chunk-CPBT6Z2G.js';
4
+ import { showAuthError } from '../chunk-SWKAH2YM.js';
5
+ export { CreateCredentialModal, CredentialList, CredentialSettings, MembershipStatusBadge, OAuthConnectModal, OrganizationMembershipsList, ProvisioningStateBadge, WebhookUrlDisplayModal, showAuthError } from '../chunk-SWKAH2YM.js';
6
6
  import '../chunk-ZFISGKYW.js';
7
- import '../chunk-DH2MO5DX.js';
8
- import { setDealReferrer, compareDealsByPriority } from '../chunk-VHPHWTX7.js';
9
- export { ActivityFeedWidget, CompanyDetailPage, ContactDetailPage, CrmOverview, CrmSidebar, CrmSidebarTop, DealDetailPage, DealsListPage, MetricsStrip, PIPELINE_FUNNEL_ORDER, PipelineFunnelWidget, useCrmPipelineSummary, useCrmQuickMetrics, useRecentCrmActivity } from '../chunk-VHPHWTX7.js';
10
- export { AllTasksPage, HealthStatusCard, MilestoneTimeline, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, TaskCard, UpcomingMilestonesPage } from '../chunk-BM2WKRAQ.js';
11
- export { LEAD_GEN_ROUTE_LINKS, LeadGenCompaniesPage, LeadGenContactsPage, LeadGenListDetailPage, LeadGenListsPage, LeadGenOverviewPage, LeadGenRouteShell, LeadGenSidebar, LeadGenSidebarTop, StepConfigForm, TabSection, getEnrichmentColor, getStatusColor, useDeleteLists } from '../chunk-H3SDGC5F.js';
12
- import '../chunk-LL5H7J4N.js';
13
- export { ActionModal, AgentDefinitionDisplay, AgentExecutionLogs, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, CommandQueueTaskRow, ConfigCard, ContentSections, ContextUsageBadge, ContractDisplay, ExecutionErrorSection, LogEntry, LogGroup, ResourceDefinitionSection, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceNotFoundState, SessionMemory, ToolsListDisplay, WorkflowDefinitionDisplay, WorkflowExecutionLogs, getExecutionStatusConfig, getIcon, getLogLevelConfig, iconMap } from '../chunk-TVFSVTRG.js';
7
+ import '../chunk-CJ2232PQ.js';
8
+ import { setDealReferrer, compareDealsByPriority } from '../chunk-NI37YNRP.js';
9
+ export { ActivityFeedWidget, CompanyDetailPage, ContactDetailPage, CrmOverview, CrmSidebar, CrmSidebarTop, DealDetailPage, DealsListPage, MetricsStrip, PIPELINE_FUNNEL_ORDER, PipelineFunnelWidget, useCrmPipelineSummary, useCrmQuickMetrics, useRecentCrmActivity } from '../chunk-NI37YNRP.js';
10
+ export { AllTasksPage, HealthStatusCard, MilestoneTimeline, ProjectDetailPage, ProjectsListPage, ProjectsSidebar, ProjectsSidebarMiddle, ProjectsSidebarTop, TaskCard, UpcomingMilestonesPage } from '../chunk-AJOVWB47.js';
11
+ export { LEAD_GEN_ROUTE_LINKS, LeadGenCompaniesPage, LeadGenContactsPage, LeadGenListDetailPage, LeadGenListsPage, LeadGenOverviewPage, LeadGenRouteShell, LeadGenSidebar, LeadGenSidebarTop, StepConfigForm, TabSection, getEnrichmentColor, getStatusColor, useDeleteLists } from '../chunk-LZT2H2MA.js';
12
+ import '../chunk-PQ4B62HH.js';
13
+ export { ActionModal, AgentDefinitionDisplay, AgentExecutionLogs, BaseExecutionLogs, BaseExecutionLogsHeader, BaseExecutionLogsStates, CommandQueueTaskRow, ConfigCard, ContentSections, ContextUsageBadge, ContractDisplay, ExecutionErrorSection, LogEntry, LogGroup, ResourceDefinitionSection, ResourceErrorState, ResourceFilter, ResourceHeader, ResourceNotFoundState, SessionMemory, ToolsListDisplay, WorkflowDefinitionDisplay, WorkflowExecutionLogs, getExecutionStatusConfig, getIcon, getLogLevelConfig, iconMap } from '../chunk-ETN3TTRT.js';
14
14
  import '../chunk-6ZAP3FOA.js';
15
- import '../chunk-AIOV5NM7.js';
16
- export { AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationDetailPanel, AgentIterationEdge, AgentIterationNode, BaseEdge, BaseNode, CollapsibleJsonSection, EmptyVisualizer, ExecutionStats, ExecutionStatusBadge, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, RunResourceButton, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, VisualizerContainer, WorkflowExecutionTimeline, getGraphBackgroundStyles, useGraphBackgroundStyles, useGraphTheme } from '../chunk-JTSNU6KA.js';
15
+ import '../chunk-Z4ICFQXG.js';
16
+ export { AgentExecutionTimeline, AgentExecutionVisualizer, AgentIterationDetailPanel, AgentIterationEdge, AgentIterationNode, BaseEdge, BaseNode, CollapsibleJsonSection, EmptyVisualizer, ExecutionStats, ExecutionStatusBadge, GraphBackground, GraphContainer, GraphFitViewButton, GraphFitViewHandler, GraphLegend, RunResourceButton, TimelineAxis, TimelineBar, TimelineContainer, TimelineRow, UnifiedWorkflowEdge, UnifiedWorkflowGraph, UnifiedWorkflowNode, VisualizerContainer, WorkflowExecutionTimeline, getGraphBackgroundStyles, useGraphBackgroundStyles, useGraphTheme } from '../chunk-ZDKPHFTH.js';
17
17
  export { ZodFormRenderer } from '../chunk-3MEXPLWT.js';
18
18
  import '../chunk-SNZDFCOQ.js';
19
- import { NotificationList } from '../chunk-3BLYJT5L.js';
20
- export { ActivityCard, ActivityFilters as ActivityFiltersBar, ActivityTable, BusinessImpactCard, CostBreakdownCard, CostByModelTable, CostMetricsCard, ErrorAnalysisCard, ErrorBreakdownTable, ExecutionBreakdownTable, ExecutionHealthCard, ExecutionLogsFilters as ExecutionLogsFilterBar, ExecutionLogsTable, NotificationItem, NotificationList } from '../chunk-3BLYJT5L.js';
21
- export { ResourceHealthPanel } from '../chunk-VRRIHA3S.js';
19
+ import { NotificationList } from '../chunk-IGBPWD6S.js';
20
+ export { ActivityCard, ActivityFilters as ActivityFiltersBar, ActivityTable, BusinessImpactCard, CostBreakdownCard, CostByModelTable, CostMetricsCard, ErrorAnalysisCard, ErrorBreakdownTable, ExecutionBreakdownTable, ExecutionHealthCard, ExecutionLogsFilters as ExecutionLogsFilterBar, ExecutionLogsTable, NotificationItem, NotificationList } from '../chunk-IGBPWD6S.js';
21
+ export { ResourceHealthPanel } from '../chunk-4CW2C5BD.js';
22
22
  export { ResourceHealthChart, getHealthColor } from '../chunk-LGKLC5MG.js';
23
23
  export { Graph_module_css_default as graphStyles } from '../chunk-HENXLGVD.js';
24
- import { AppShellLoader } from '../chunk-DCMFNSJ6.js';
24
+ import { AppShellLoader } from '../chunk-3TS5U5BL.js';
25
25
  export { calculateProgress, formatStatusLabel, milestoneStatusColors, noteTypeColors, projectStatusColors, taskStatusColors, taskTypeColors } from '../chunk-DLR4SDZW.js';
26
26
  import '../chunk-BZZCNLT6.js';
27
27
  export { SortableHeader, TableSelectionToolbar } from '../chunk-TUMSNGTX.js';
28
28
  import { FilterBar } from '../chunk-PDHTXPSF.js';
29
29
  export { FilterBar } from '../chunk-PDHTXPSF.js';
30
- import { useCreateOrgRole, usePermissionCatalog, CustomModal, useMarkAllAsRead, useNotifications, useUpdateApiKey, useDeleteApiKey, ListSkeleton, EmptyState, useCreateApiKey, useListApiKeys, PageTitleCaption, StatCard, usePaginationState, useActivateDeployment, useDeactivateDeployment, useDeleteDeployment, useListDeployments, useResources, useCreateSchedule, useListSchedules, usePauseSchedule, useResumeSchedule, useCancelSchedule, useDeleteSchedule, CenteredErrorState, useDeals, useTransitionItem, dealKeys, SubshellContentContainer } from '../chunk-UZ7MSORW.js';
31
- export { APIErrorAlert, ActivityTimeline, CenteredErrorState, CheckpointGroup, CollapsibleSection, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, ConfirmationInputModal, ConfirmationModal, ContextViewer, CrmSidebarMiddle, CustomModal, CustomSelector, DetailCardSkeleton, ElevasisLoader, EmptyState, FeatureUnavailableState, GlowDot, JsonViewer, LeadGenSidebarMiddle, ListSkeleton, MyTasksPanel, NavigationButton, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrganizationModelDriftActionIcon, PageNotFound, PageTitleCaption, QuickCreateActions, ResourceCard, SAVED_VIEW_PRESETS, SavedViewsPanel, StatCard, StatCardSkeleton, StatsCardSkeleton, StatusBadge, TabCountBadge, TimeRangeSelector, TrendIndicator, crmManifest, deliveryManifest, leadGenManifest, monitoringManifest, operationsManifest, settingsManifest } from '../chunk-UZ7MSORW.js';
30
+ import { useCreateOrgRole, usePermissionCatalog, CustomModal, useMarkAllAsRead, useNotifications, useUpdateApiKey, useDeleteApiKey, ListSkeleton, EmptyState, useCreateApiKey, useListApiKeys, PageTitleCaption, StatCard, usePaginationState, useActivateDeployment, useDeactivateDeployment, useDeleteDeployment, useListDeployments, useResources, useCreateSchedule, useListSchedules, usePauseSchedule, useResumeSchedule, useCancelSchedule, useDeleteSchedule, CenteredErrorState, useDeals, useTransitionItem, dealKeys, SubshellContentContainer, useCloudStorageFolder, useCloudStorageThumbnails } from '../chunk-OCVSPAKM.js';
31
+ export { APIErrorAlert, ActivityTimeline, CenteredErrorState, CheckpointGroup, CollapsibleSection, CommandQueueSidebar, CommandQueueSidebarMiddle, CommandQueueSidebarTop, ConfirmationInputModal, ConfirmationModal, ContextViewer, CrmSidebarMiddle, CustomModal, CustomSelector, DetailCardSkeleton, ElevasisLoader, EmptyState, FeatureUnavailableState, GlowDot, JsonViewer, LeadGenSidebarMiddle, ListSkeleton, MyTasksPanel, NavigationButton, OperationsSidebar, OperationsSidebarMiddle, OperationsSidebarTop, OrganizationModelDriftActionIcon, PageNotFound, PageTitleCaption, QuickCreateActions, ResourceCard, SAVED_VIEW_PRESETS, SavedViewsPanel, StatCard, StatCardSkeleton, StatsCardSkeleton, StatusBadge, TabCountBadge, TimeRangeSelector, TrendIndicator, crmManifest, deliveryManifest, leadGenManifest, monitoringManifest, operationsManifest, settingsManifest } from '../chunk-OCVSPAKM.js';
32
32
  import '../chunk-R6NMRXNO.js';
33
33
  import '../chunk-RBGVNPA6.js';
34
34
  import '../chunk-MKH2KOAO.js';
35
- import '../chunk-VDX6DL7Z.js';
35
+ import '../chunk-NHNTX6ZL.js';
36
36
  import '../chunk-L7BZZ4SI.js';
37
- import { showSuccessNotification, showErrorNotification, showApiErrorNotification } from '../chunk-C75XWBYZ.js';
38
- export { showApiErrorNotification, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification } from '../chunk-C75XWBYZ.js';
37
+ import { showSuccessNotification, showErrorNotification, showApiErrorNotification } from '../chunk-U2H3TIHD.js';
38
+ export { showApiErrorNotification, showErrorNotification, showInfoNotification, showSuccessNotification, showWarningNotification } from '../chunk-U2H3TIHD.js';
39
39
  export { SEOSidebar, SEOSidebarMiddle, SEOSidebarTop, seoManifest } from '../chunk-MISHPEJX.js';
40
40
  import { CardHeader } from '../chunk-62GVNH5U.js';
41
41
  export { CardHeader } from '../chunk-62GVNH5U.js';
@@ -48,7 +48,7 @@ export { RoleBadge } from '../chunk-UD657ICS.js';
48
48
  import '../chunk-DD3CCMCZ.js';
49
49
  import '../chunk-RNP5R5I3.js';
50
50
  import '../chunk-RT4KRGZT.js';
51
- import { formatDateTime, PAGE_SIZE_DEFAULT, formatTimeAgo } from '../chunk-NM4A63KJ.js';
51
+ import { formatDateTime, PAGE_SIZE_DEFAULT, formatTimeAgo } from '../chunk-IBCEAVB2.js';
52
52
  import '../chunk-Y6I3IC45.js';
53
53
  import '../chunk-6SSQGWK7.js';
54
54
  import { useElevasisServices } from '../chunk-BI5VDO2K.js';
@@ -57,8 +57,8 @@ import '../chunk-TVTSASST.js';
57
57
  import '../chunk-BRJ3QZ4E.js';
58
58
  import { useRouterContext } from '../chunk-Q7DJKLEN.js';
59
59
  import '../chunk-I2KLQ2HA.js';
60
- import { Stack, Card, Title, Checkbox, Group, Text, Tooltip, Center, TextInput, Textarea, Loader, Alert, Button, Box, Divider, ScrollArea, Popover, Indicator, ActionIcon, Table, Paper, Code, CopyButton, SimpleGrid, Badge, Pagination, SegmentedControl, Switch, Select, Menu, Timeline, ThemeIcon, Tabs, Breadcrumbs as Breadcrumbs$1 } from '@mantine/core';
61
- import { IconLock, IconBell, IconPencil, IconAlertCircle, IconKey, IconCalendar, IconClock, IconTrash, IconAlertTriangle, IconExclamationMark, IconShieldLock, IconCheck, IconCopy, IconPlus, IconRocket, IconRefresh, IconPower, IconPlayerPlay, IconCircleCheck, IconTag, IconCalendarRepeat, IconCalendarEvent, IconCalendarTime, IconRobot, IconGitBranch, IconSettings, IconExternalLink, IconDotsVertical, IconPlayerPause, IconPlayerStop, IconCalendarDue, IconCalendarStats, IconCalendarOff, IconListCheck } from '@tabler/icons-react';
60
+ import { Stack, Card, Title, Checkbox, Group, Text, Tooltip, Center, TextInput, Textarea, Loader, Alert, Button, Box, Divider, ScrollArea, Popover, Indicator, ActionIcon, Table, Paper, Code, CopyButton, SimpleGrid, Badge, Pagination, SegmentedControl, Switch, Select, Menu, Timeline, ThemeIcon, Tabs, Breadcrumbs as Breadcrumbs$1, UnstyledButton, Image, Flex } from '@mantine/core';
61
+ import { IconLock, IconBell, IconPencil, IconAlertCircle, IconKey, IconCalendar, IconClock, IconTrash, IconAlertTriangle, IconExclamationMark, IconShieldLock, IconCheck, IconCopy, IconPlus, IconRocket, IconRefresh, IconPower, IconPlayerPlay, IconCircleCheck, IconTag, IconCalendarRepeat, IconCalendarEvent, IconCalendarTime, IconRobot, IconGitBranch, IconSettings, IconExternalLink, IconDotsVertical, IconPlayerPause, IconPlayerStop, IconCalendarDue, IconCalendarStats, IconCalendarOff, IconListCheck, IconFolder, IconPhoto, IconCloudOff } from '@tabler/icons-react';
62
62
  import * as runtime from 'react/jsx-runtime';
63
63
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
64
64
  import { useForm } from '@mantine/form';
@@ -2784,5 +2784,295 @@ var DEFAULT_KANBAN_CONFIG = {
2784
2784
  closed_lost: { color: "red" },
2785
2785
  nurturing: { color: "grape" }
2786
2786
  };
2787
+ function CloudStorageFolderTree({ nodes, selectedPath, onNavigate }) {
2788
+ const childrenByParent = /* @__PURE__ */ new Map();
2789
+ const roots = [];
2790
+ for (const node of nodes) {
2791
+ const parentIds = node.parentIds ?? [];
2792
+ if (parentIds.length === 0) {
2793
+ roots.push(node);
2794
+ continue;
2795
+ }
2796
+ for (const parentId of parentIds) {
2797
+ const siblings = childrenByParent.get(parentId) ?? [];
2798
+ siblings.push(node);
2799
+ childrenByParent.set(parentId, siblings);
2800
+ }
2801
+ }
2802
+ return /* @__PURE__ */ jsx(Stack, { gap: 0, "data-testid": "cloud-storage-folder-tree", children: roots.map((root) => /* @__PURE__ */ jsx(
2803
+ FolderBranch,
2804
+ {
2805
+ branchKey: root.id,
2806
+ node: root,
2807
+ depth: 0,
2808
+ childrenByParent,
2809
+ selectedPath,
2810
+ onNavigate,
2811
+ ancestry: /* @__PURE__ */ new Set()
2812
+ },
2813
+ root.id
2814
+ )) });
2815
+ }
2816
+ function FolderBranch({
2817
+ branchKey,
2818
+ node,
2819
+ depth,
2820
+ childrenByParent,
2821
+ selectedPath,
2822
+ onNavigate,
2823
+ ancestry
2824
+ }) {
2825
+ if (ancestry.has(node.id)) return null;
2826
+ const children = childrenByParent.get(node.id) ?? [];
2827
+ const isSelected = selectedPath !== void 0 && node.path === selectedPath;
2828
+ const nextAncestry = new Set(ancestry);
2829
+ nextAncestry.add(node.id);
2830
+ return /* @__PURE__ */ jsxs(Stack, { gap: 0, children: [
2831
+ /* @__PURE__ */ jsx(
2832
+ UnstyledButton,
2833
+ {
2834
+ onClick: () => onNavigate(node),
2835
+ "data-testid": `folder-node-${branchKey}`,
2836
+ "data-selected": isSelected ? "true" : void 0,
2837
+ pl: depth * 16 + 8,
2838
+ py: 4,
2839
+ style: {
2840
+ background: isSelected ? "var(--color-surface-hover)" : void 0,
2841
+ transition: "background var(--duration-fast) var(--easing)"
2842
+ },
2843
+ children: /* @__PURE__ */ jsxs(Group, { gap: 6, wrap: "nowrap", children: [
2844
+ /* @__PURE__ */ jsx(IconFolder, { size: 16, color: "var(--color-primary)", style: { flexShrink: 0 } }),
2845
+ /* @__PURE__ */ jsx(Text, { size: "sm", truncate: true, children: node.name })
2846
+ ] })
2847
+ }
2848
+ ),
2849
+ children.map((child) => /* @__PURE__ */ jsx(
2850
+ FolderBranch,
2851
+ {
2852
+ branchKey: `${branchKey}>${child.id}`,
2853
+ node: child,
2854
+ depth: depth + 1,
2855
+ childrenByParent,
2856
+ selectedPath,
2857
+ onNavigate,
2858
+ ancestry: nextAncestry
2859
+ },
2860
+ `${branchKey}>${child.id}`
2861
+ ))
2862
+ ] });
2863
+ }
2864
+ function CloudStorageFileCard({ file, selected, used, dimensionWarning, onSelect }) {
2865
+ const selectable = onSelect !== void 0;
2866
+ const handleActivate = () => {
2867
+ onSelect?.(file);
2868
+ };
2869
+ return /* @__PURE__ */ jsxs(
2870
+ Card,
2871
+ {
2872
+ withBorder: true,
2873
+ padding: "xs",
2874
+ "data-file-id": file.id,
2875
+ "data-selected": selected ? "true" : void 0,
2876
+ onClick: selectable ? handleActivate : void 0,
2877
+ style: {
2878
+ cursor: selectable ? "pointer" : void 0,
2879
+ borderColor: selected ? "var(--color-primary)" : void 0,
2880
+ transition: "border-color var(--duration-fast) var(--easing)"
2881
+ },
2882
+ children: [
2883
+ /* @__PURE__ */ jsx(Card.Section, { children: /* @__PURE__ */ jsxs(Box, { pos: "relative", style: { aspectRatio: "1 / 1", overflow: "hidden", background: "var(--color-surface)" }, children: [
2884
+ file.thumbnailUrl ? /* @__PURE__ */ jsx(Image, { src: file.thumbnailUrl, alt: file.name, fit: "cover", h: "100%", w: "100%" }) : /* @__PURE__ */ jsxs(Stack, { align: "center", justify: "center", gap: 4, h: "100%", "data-testid": "thumbnail-fallback", children: [
2885
+ /* @__PURE__ */ jsx(IconPhoto, { size: 28, color: "var(--color-text-subtle)" }),
2886
+ /* @__PURE__ */ jsx(Text, { size: "xs", c: "dimmed", children: "No preview" })
2887
+ ] }),
2888
+ selectable && /* @__PURE__ */ jsx(
2889
+ Checkbox,
2890
+ {
2891
+ checked: Boolean(selected),
2892
+ onChange: handleActivate,
2893
+ onClick: (event) => event.stopPropagation(),
2894
+ pos: "absolute",
2895
+ top: 6,
2896
+ left: 6,
2897
+ "aria-label": selected ? `Deselect ${file.name}` : `Select ${file.name}`
2898
+ }
2899
+ ),
2900
+ /* @__PURE__ */ jsxs(Group, { pos: "absolute", top: 6, right: 6, gap: 4, children: [
2901
+ dimensionWarning && /* @__PURE__ */ jsx(Tooltip, { label: dimensionWarning, withArrow: true, children: /* @__PURE__ */ jsx(
2902
+ Box,
2903
+ {
2904
+ role: "img",
2905
+ "aria-label": dimensionWarning,
2906
+ style: {
2907
+ display: "flex",
2908
+ alignItems: "center",
2909
+ justifyContent: "center",
2910
+ width: 20,
2911
+ height: 20,
2912
+ borderRadius: "50%",
2913
+ background: "var(--color-warning)"
2914
+ },
2915
+ children: /* @__PURE__ */ jsx(IconAlertTriangle, { size: 12, color: "var(--color-background)" })
2916
+ }
2917
+ ) }),
2918
+ /* @__PURE__ */ jsx(Badge, { color: used ? "var(--color-success)" : "var(--color-text-dimmed)", variant: "filled", size: "sm", children: used ? "Used" : "Unused" })
2919
+ ] })
2920
+ ] }) }),
2921
+ /* @__PURE__ */ jsx(Text, { size: "sm", mt: "xs", truncate: true, title: file.name, children: file.name })
2922
+ ]
2923
+ }
2924
+ );
2925
+ }
2926
+ function CloudStorageFileGrid({
2927
+ items,
2928
+ selectedIds,
2929
+ multiple = false,
2930
+ onSelectionChange,
2931
+ emptyState
2932
+ }) {
2933
+ if (items.length === 0) {
2934
+ return emptyState ?? /* @__PURE__ */ jsx(Stack, { align: "center", py: "xl", children: /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No files to display" }) });
2935
+ }
2936
+ const handleSelect = (file) => {
2937
+ const isSelected = selectedIds.includes(file.id);
2938
+ if (!multiple) {
2939
+ onSelectionChange(isSelected ? [] : [file.id]);
2940
+ return;
2941
+ }
2942
+ onSelectionChange(isSelected ? selectedIds.filter((id) => id !== file.id) : [...selectedIds, file.id]);
2943
+ };
2944
+ return /* @__PURE__ */ jsx(SimpleGrid, { cols: { base: 2, sm: 3, md: 4, lg: 5 }, spacing: "sm", children: items.map((item) => /* @__PURE__ */ jsx(
2945
+ CloudStorageFileCard,
2946
+ {
2947
+ file: item,
2948
+ selected: selectedIds.includes(item.id),
2949
+ used: item.used,
2950
+ dimensionWarning: item.dimensionWarning,
2951
+ onSelect: handleSelect
2952
+ },
2953
+ item.id
2954
+ )) });
2955
+ }
2956
+ var FOLDER_PANE_WIDTH = 220;
2957
+ function CloudStorageBrowser({
2958
+ credentialName,
2959
+ selected,
2960
+ onSelectionChange,
2961
+ multiple = false,
2962
+ decorateItem,
2963
+ notConnected
2964
+ }) {
2965
+ const [currentPath, setCurrentPath] = useState("");
2966
+ const [cursor, setCursor] = useState(void 0);
2967
+ const [pagedFiles, setPagedFiles] = useState([]);
2968
+ const [folderNodes, setFolderNodes] = useState({});
2969
+ const folderQuery = useCloudStorageFolder({ credentialName, folderPath: currentPath, cursor });
2970
+ useEffect(() => {
2971
+ setPagedFiles([]);
2972
+ setCursor(void 0);
2973
+ }, [currentPath]);
2974
+ useEffect(() => {
2975
+ const data = folderQuery.data;
2976
+ if (!data) return;
2977
+ setPagedFiles((previous) => {
2978
+ const seen = new Set(previous.map((file) => file.id));
2979
+ const fresh = data.files.filter((file) => file.kind === "file" && !seen.has(file.id));
2980
+ return fresh.length === 0 ? previous : [...previous, ...fresh];
2981
+ });
2982
+ setFolderNodes((previous) => {
2983
+ const discovered = data.files.filter((file) => file.kind === "folder" && !previous[file.id]);
2984
+ if (discovered.length === 0) return previous;
2985
+ const parent = Object.values(previous).find((node) => node.path === currentPath);
2986
+ const next = { ...previous };
2987
+ for (const file of discovered) {
2988
+ next[file.id] = {
2989
+ id: file.id,
2990
+ name: file.name,
2991
+ path: file.path,
2992
+ // No parent marks a root, which is correct for the first level browsed.
2993
+ parentIds: parent ? [parent.id] : void 0
2994
+ };
2995
+ }
2996
+ return next;
2997
+ });
2998
+ }, [folderQuery.data, currentPath]);
2999
+ const fileIds = useMemo(() => pagedFiles.map((file) => file.id), [pagedFiles]);
3000
+ const { thumbnails } = useCloudStorageThumbnails(credentialName, fileIds);
3001
+ const gridItems = useMemo(
3002
+ () => pagedFiles.map((file) => ({
3003
+ ...file,
3004
+ // `null` here means the provider produced no thumbnail -- HEIC, or an
3005
+ // original over 20MB. A normal state the card renders a fallback for,
3006
+ // never an error, so it collapses to `undefined` rather than throwing.
3007
+ thumbnailUrl: thumbnails[file.id] ?? void 0,
3008
+ ...decorateItem?.(file)
3009
+ })),
3010
+ [pagedFiles, thumbnails, decorateItem]
3011
+ );
3012
+ const selectedIds = useMemo(() => selected.map((file) => file.id), [selected]);
3013
+ const handleSelectionChange = (nextIds) => {
3014
+ const known = /* @__PURE__ */ new Map();
3015
+ for (const file of selected) known.set(file.id, file);
3016
+ for (const file of pagedFiles) known.set(file.id, file);
3017
+ onSelectionChange(nextIds.map((id) => known.get(id)).filter((file) => file !== void 0));
3018
+ };
3019
+ const treeNodes = useMemo(() => Object.values(folderNodes), [folderNodes]);
3020
+ if (folderQuery.data && !folderQuery.data.connected) {
3021
+ return notConnected ?? /* @__PURE__ */ jsx(Paper, { withBorder: true, p: "xl", "data-testid": "cloud-storage-browser-not-connected", children: /* @__PURE__ */ jsxs(Stack, { align: "center", gap: "sm", children: [
3022
+ /* @__PURE__ */ jsx(IconCloudOff, { size: 32, color: "var(--color-textDimmed)" }),
3023
+ /* @__PURE__ */ jsx(Text, { fw: 600, children: "No storage account connected" }),
3024
+ /* @__PURE__ */ jsxs(Text, { size: "sm", c: "dimmed", ta: "center", children: [
3025
+ "No credential named ",
3026
+ /* @__PURE__ */ jsx("strong", { children: credentialName }),
3027
+ " exists for this organization."
3028
+ ] })
3029
+ ] }) });
3030
+ }
3031
+ return /* @__PURE__ */ jsx(Paper, { withBorder: true, "data-testid": "cloud-storage-browser", children: /* @__PURE__ */ jsxs(Flex, { direction: { base: "column", sm: "row" }, align: "stretch", children: [
3032
+ /* @__PURE__ */ jsx(Box, { p: "sm", w: { base: "100%", sm: FOLDER_PANE_WIDTH }, style: { flexShrink: 0 }, children: /* @__PURE__ */ jsxs(Stack, { gap: "xs", children: [
3033
+ /* @__PURE__ */ jsx(Text, { size: "xs", fw: 600, c: "dimmed", children: "FOLDERS" }),
3034
+ treeNodes.length === 0 ? /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", children: "No folders here." }) : /* @__PURE__ */ jsx(
3035
+ CloudStorageFolderTree,
3036
+ {
3037
+ nodes: treeNodes,
3038
+ selectedPath: currentPath,
3039
+ onNavigate: (node) => setCurrentPath(node.path ?? "")
3040
+ }
3041
+ )
3042
+ ] }) }),
3043
+ /* @__PURE__ */ jsx(Divider, { orientation: "vertical", visibleFrom: "sm" }),
3044
+ /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", hiddenFrom: "sm" }),
3045
+ /* @__PURE__ */ jsx(Box, { p: "sm", style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
3046
+ /* @__PURE__ */ jsxs(Group, { justify: "space-between", children: [
3047
+ /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", "data-testid": "cloud-storage-browser-path", children: currentPath === "" ? "Root" : currentPath }),
3048
+ /* @__PURE__ */ jsxs(Badge, { variant: "light", size: "sm", children: [
3049
+ pagedFiles.length,
3050
+ " files"
3051
+ ] })
3052
+ ] }),
3053
+ folderQuery.isLoading && pagedFiles.length === 0 ? /* @__PURE__ */ jsx(Group, { justify: "center", py: "xl", children: /* @__PURE__ */ jsx(Loader, { size: "sm" }) }) : /* @__PURE__ */ jsx(
3054
+ CloudStorageFileGrid,
3055
+ {
3056
+ items: gridItems,
3057
+ selectedIds,
3058
+ multiple,
3059
+ onSelectionChange: handleSelectionChange,
3060
+ emptyState: /* @__PURE__ */ jsx(Text, { size: "sm", c: "dimmed", ta: "center", py: "xl", children: "No files in this folder." })
3061
+ }
3062
+ ),
3063
+ folderQuery.data?.nextCursor && /* @__PURE__ */ jsx(Group, { justify: "center", children: /* @__PURE__ */ jsx(
3064
+ Button,
3065
+ {
3066
+ size: "compact-sm",
3067
+ variant: "light",
3068
+ loading: folderQuery.isFetching,
3069
+ onClick: () => setCursor(folderQuery.data?.nextCursor),
3070
+ "data-testid": "cloud-storage-browser-load-more",
3071
+ children: "Load more"
3072
+ }
3073
+ ) })
3074
+ ] }) })
3075
+ ] }) });
3076
+ }
2787
3077
 
2788
- export { AbsoluteScheduleForm, ApiKeyDisplayModal, ApiKeyList, ApiKeySettings, Breadcrumbs, CreateApiKeyModal, CreateRoleModal, CreateScheduleModal, DEAL_STAGES, DEFAULT_KANBAN_CONFIG, DealKanbanCard, DeleteScheduleModal, DeploymentDetailModal, DeploymentList, DeploymentSettings, DeploymentStatusBadge, EditApiKeyModal, KanbanBoard, MdxRenderer, NoAccessState, NotificationBell, NotificationPanel, PermissionMatrix, RecurringScheduleForm, RelativeScheduleForm, RichTextEditor, ScheduleCard, ScheduleDetailModal, ScheduleTypeSelector, TaskScheduler, mdxComponents };
3078
+ export { AbsoluteScheduleForm, ApiKeyDisplayModal, ApiKeyList, ApiKeySettings, Breadcrumbs, CloudStorageBrowser, CloudStorageFileCard, CloudStorageFileGrid, CloudStorageFolderTree, CreateApiKeyModal, CreateRoleModal, CreateScheduleModal, DEAL_STAGES, DEFAULT_KANBAN_CONFIG, DealKanbanCard, DeleteScheduleModal, DeploymentDetailModal, DeploymentList, DeploymentSettings, DeploymentStatusBadge, EditApiKeyModal, KanbanBoard, MdxRenderer, NoAccessState, NotificationBell, NotificationPanel, PermissionMatrix, RecurringScheduleForm, RelativeScheduleForm, RichTextEditor, ScheduleCard, ScheduleDetailModal, ScheduleTypeSelector, TaskScheduler, mdxComponents };
@@ -1,11 +1,11 @@
1
- export { useBreadcrumbs } from '../../chunk-TB2PM2OU.js';
2
- import '../../chunk-UZ7MSORW.js';
1
+ export { useBreadcrumbs } from '../../chunk-JYBJMVNY.js';
2
+ import '../../chunk-OCVSPAKM.js';
3
3
  import '../../chunk-R6NMRXNO.js';
4
4
  import '../../chunk-RBGVNPA6.js';
5
5
  import '../../chunk-MKH2KOAO.js';
6
- import '../../chunk-VDX6DL7Z.js';
6
+ import '../../chunk-NHNTX6ZL.js';
7
7
  import '../../chunk-L7BZZ4SI.js';
8
- import '../../chunk-C75XWBYZ.js';
8
+ import '../../chunk-U2H3TIHD.js';
9
9
  import '../../chunk-MISHPEJX.js';
10
10
  import '../../chunk-62GVNH5U.js';
11
11
  import '../../chunk-P45GQ3ZW.js';
@@ -17,7 +17,7 @@ import '../../chunk-UD657ICS.js';
17
17
  import '../../chunk-DD3CCMCZ.js';
18
18
  import '../../chunk-RNP5R5I3.js';
19
19
  import '../../chunk-RT4KRGZT.js';
20
- import '../../chunk-NM4A63KJ.js';
20
+ import '../../chunk-IBCEAVB2.js';
21
21
  import '../../chunk-Y6I3IC45.js';
22
22
  import '../../chunk-6SSQGWK7.js';
23
23
  import '../../chunk-BI5VDO2K.js';
@@ -1605,6 +1605,63 @@ type Database = {
1605
1605
  }
1606
1606
  ];
1607
1607
  };
1608
+ content_item_source_assets: {
1609
+ Row: {
1610
+ alt_text: string | null;
1611
+ content_item_id: string;
1612
+ created_at: string;
1613
+ crop: Json | null;
1614
+ derivative_crop: Json | null;
1615
+ derivative_path: string | null;
1616
+ derivative_rendered_at: string | null;
1617
+ id: string;
1618
+ organization_id: string;
1619
+ position: number;
1620
+ source_asset_id: string;
1621
+ };
1622
+ Insert: {
1623
+ alt_text?: string | null;
1624
+ content_item_id: string;
1625
+ created_at?: string;
1626
+ crop?: Json | null;
1627
+ derivative_crop?: Json | null;
1628
+ derivative_path?: string | null;
1629
+ derivative_rendered_at?: string | null;
1630
+ id?: string;
1631
+ organization_id: string;
1632
+ position: number;
1633
+ source_asset_id: string;
1634
+ };
1635
+ Update: {
1636
+ alt_text?: string | null;
1637
+ content_item_id?: string;
1638
+ created_at?: string;
1639
+ crop?: Json | null;
1640
+ derivative_crop?: Json | null;
1641
+ derivative_path?: string | null;
1642
+ derivative_rendered_at?: string | null;
1643
+ id?: string;
1644
+ organization_id?: string;
1645
+ position?: number;
1646
+ source_asset_id?: string;
1647
+ };
1648
+ Relationships: [
1649
+ {
1650
+ foreignKeyName: "content_item_source_assets_asset_fkey";
1651
+ columns: ["source_asset_id", "organization_id"];
1652
+ isOneToOne: false;
1653
+ referencedRelation: "content_source_assets";
1654
+ referencedColumns: ["id", "organization_id"];
1655
+ },
1656
+ {
1657
+ foreignKeyName: "content_item_source_assets_item_fkey";
1658
+ columns: ["content_item_id", "organization_id"];
1659
+ isOneToOne: false;
1660
+ referencedRelation: "content_items";
1661
+ referencedColumns: ["id", "organization_id"];
1662
+ }
1663
+ ];
1664
+ };
1608
1665
  content_items: {
1609
1666
  Row: {
1610
1667
  body: string | null;
@@ -3360,6 +3417,25 @@ type Database = {
3360
3417
  };
3361
3418
  Returns: Json;
3362
3419
  };
3420
+ activate_deployment_atomic: {
3421
+ Args: {
3422
+ p_deployment_id: string;
3423
+ p_organization_id: string;
3424
+ };
3425
+ Returns: {
3426
+ created_at: string;
3427
+ deployment_version: string | null;
3428
+ error_message: string | null;
3429
+ id: string;
3430
+ organization_id: string;
3431
+ pid: number | null;
3432
+ port: number | null;
3433
+ sdk_version: string;
3434
+ status: string;
3435
+ tarball_path: string | null;
3436
+ updated_at: string;
3437
+ };
3438
+ };
3363
3439
  append_deal_activity: {
3364
3440
  Args: {
3365
3441
  p_activity: Json;
@@ -1,12 +1,12 @@
1
- import { AppShellError } from '../../chunk-DCMFNSJ6.js';
2
- import { computeProtectedRouteGate, DEFAULT_WAIT_FOR_ORGANIZATION, ProtectedRoute, AppearanceContext, useAppearance } from '../../chunk-UZ7MSORW.js';
3
- export { AccessGuard } from '../../chunk-UZ7MSORW.js';
1
+ import { AppShellError } from '../../chunk-3TS5U5BL.js';
2
+ import { computeProtectedRouteGate, DEFAULT_WAIT_FOR_ORGANIZATION, ProtectedRoute, AppearanceContext, useAppearance } from '../../chunk-OCVSPAKM.js';
3
+ export { AccessGuard } from '../../chunk-OCVSPAKM.js';
4
4
  import '../../chunk-R6NMRXNO.js';
5
5
  import '../../chunk-RBGVNPA6.js';
6
6
  import '../../chunk-MKH2KOAO.js';
7
- import '../../chunk-VDX6DL7Z.js';
7
+ import '../../chunk-NHNTX6ZL.js';
8
8
  import '../../chunk-L7BZZ4SI.js';
9
- import '../../chunk-C75XWBYZ.js';
9
+ import '../../chunk-U2H3TIHD.js';
10
10
  import '../../chunk-MISHPEJX.js';
11
11
  import '../../chunk-62GVNH5U.js';
12
12
  import { useInitialization } from '../../chunk-P45GQ3ZW.js';
@@ -18,7 +18,7 @@ import '../../chunk-UD657ICS.js';
18
18
  import '../../chunk-DD3CCMCZ.js';
19
19
  import '../../chunk-RNP5R5I3.js';
20
20
  export { USER_PROFILE_QUERY_KEY, useUserProfile } from '../../chunk-RT4KRGZT.js';
21
- import '../../chunk-NM4A63KJ.js';
21
+ import '../../chunk-IBCEAVB2.js';
22
22
  import '../../chunk-Y6I3IC45.js';
23
23
  import '../../chunk-6SSQGWK7.js';
24
24
  import '../../chunk-BI5VDO2K.js';
@@ -2,14 +2,14 @@ import '../../chunk-DLR4SDZW.js';
2
2
  import { PageContainer } from '../../chunk-BZZCNLT6.js';
3
3
  import '../../chunk-TUMSNGTX.js';
4
4
  import { FilterBar } from '../../chunk-PDHTXPSF.js';
5
- import { useClientStatus, StatCard, EmptyState, useCreateClient, CustomModal, useUpdateClient, useDeleteClient, usePaginationState, useClients, SubshellContentContainer, PageTitleCaption, CenteredErrorState, useClient } from '../../chunk-UZ7MSORW.js';
6
- export { clientsManifest } from '../../chunk-UZ7MSORW.js';
5
+ import { useClientStatus, StatCard, EmptyState, useCreateClient, CustomModal, useUpdateClient, useDeleteClient, usePaginationState, useClients, SubshellContentContainer, PageTitleCaption, CenteredErrorState, useClient } from '../../chunk-OCVSPAKM.js';
6
+ export { clientsManifest } from '../../chunk-OCVSPAKM.js';
7
7
  import '../../chunk-R6NMRXNO.js';
8
8
  import '../../chunk-RBGVNPA6.js';
9
9
  import '../../chunk-MKH2KOAO.js';
10
- import '../../chunk-VDX6DL7Z.js';
10
+ import '../../chunk-NHNTX6ZL.js';
11
11
  import '../../chunk-L7BZZ4SI.js';
12
- import { showApiErrorNotification } from '../../chunk-C75XWBYZ.js';
12
+ import { showApiErrorNotification } from '../../chunk-U2H3TIHD.js';
13
13
  import '../../chunk-MISHPEJX.js';
14
14
  import { CardHeader } from '../../chunk-62GVNH5U.js';
15
15
  import '../../chunk-P45GQ3ZW.js';
@@ -21,7 +21,7 @@ import '../../chunk-UD657ICS.js';
21
21
  import '../../chunk-DD3CCMCZ.js';
22
22
  import '../../chunk-RNP5R5I3.js';
23
23
  import '../../chunk-RT4KRGZT.js';
24
- import { PAGE_SIZE_DEFAULT, formatTimeAgo } from '../../chunk-NM4A63KJ.js';
24
+ import { PAGE_SIZE_DEFAULT, formatTimeAgo } from '../../chunk-IBCEAVB2.js';
25
25
  import '../../chunk-Y6I3IC45.js';
26
26
  import '../../chunk-6SSQGWK7.js';
27
27
  import '../../chunk-BI5VDO2K.js';