@elevasis/ui 2.79.0 → 2.81.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 (108) hide show
  1. package/dist/{CoreAuthKitInner-PSTKG4B3.js → CoreAuthKitInner-5J7P7ZDL.js} +1 -1
  2. package/dist/api/index.js +6 -6
  3. package/dist/app/index.d.ts +1 -15
  4. package/dist/app/index.js +18 -18
  5. package/dist/auth/index.js +10 -10
  6. package/dist/charts/index.d.ts +4 -4
  7. package/dist/charts/index.js +10 -10
  8. package/dist/{chunk-NCPNKI3V.js → chunk-2HXDI4RY.js} +1 -1
  9. package/dist/{chunk-TVTSASST.js → chunk-34B3ACOZ.js} +9 -1
  10. package/dist/{chunk-AZCDL2SS.js → chunk-3ZADOARU.js} +5 -5
  11. package/dist/{chunk-2IU6BP6F.js → chunk-42C2WVYU.js} +11 -10
  12. package/dist/{chunk-3ONNZ4SO.js → chunk-52AZTFUR.js} +6 -6
  13. package/dist/{chunk-MGCXAAX4.js → chunk-5GYJ3IDO.js} +15 -9
  14. package/dist/{chunk-SJRIO26Q.js → chunk-6J3SCCZ2.js} +2 -2
  15. package/dist/{chunk-A37T4NIZ.js → chunk-6YWBMLEM.js} +22 -11
  16. package/dist/{chunk-GWCLI2RX.js → chunk-75OLN23F.js} +22 -39
  17. package/dist/{chunk-LDQSTEFW.js → chunk-7D4FKBB4.js} +38 -14
  18. package/dist/{chunk-JZQNUQE4.js → chunk-7RS2NUC6.js} +10 -2
  19. package/dist/{chunk-7ICEQPBU.js → chunk-AI5OYVLR.js} +1 -1
  20. package/dist/{chunk-G3WOMHVI.js → chunk-BLYK6I4D.js} +4 -3
  21. package/dist/{chunk-5ZK7K7YP.js → chunk-DEZW7QDI.js} +38 -25
  22. package/dist/{chunk-QLEY6Q7K.js → chunk-FPRDEKFY.js} +1 -1
  23. package/dist/{chunk-SVZR4GYA.js → chunk-G6VHIXWD.js} +1 -1
  24. package/dist/{chunk-VM2OWOXL.js → chunk-GY7FXTC4.js} +2 -3
  25. package/dist/{chunk-GFSOQH3N.js → chunk-HDITVHZT.js} +8 -11
  26. package/dist/{chunk-ASI3FDPC.js → chunk-HDLYC63N.js} +1 -1
  27. package/dist/{chunk-2GIJBHZT.js → chunk-IIMC4TRH.js} +3 -3
  28. package/dist/{chunk-22TWX4XG.js → chunk-ILOKKA6L.js} +8 -8
  29. package/dist/{chunk-4ZHX5KOT.js → chunk-JLKZUO2I.js} +1 -1
  30. package/dist/{chunk-WJO6QEI7.js → chunk-K635QVGI.js} +33 -78
  31. package/dist/{chunk-R42OYAQ2.js → chunk-KU7KN5VN.js} +1 -1
  32. package/dist/{chunk-6AJUWYKS.js → chunk-LGJASP5H.js} +1 -1
  33. package/dist/{chunk-4IYWLUXA.js → chunk-LTKBVL7D.js} +14 -10
  34. package/dist/{chunk-INCEZAM3.js → chunk-LTRJZOHA.js} +1 -1
  35. package/dist/{chunk-RMLWK3IR.js → chunk-O4XUKLRY.js} +1 -1
  36. package/dist/{chunk-3RK2NNJX.js → chunk-PJN6CMWZ.js} +1 -1
  37. package/dist/{chunk-KXNRTJAE.js → chunk-PNCJJE4Z.js} +1 -1
  38. package/dist/{chunk-4VGPEDQF.js → chunk-PSGSFPWA.js} +126 -69
  39. package/dist/{chunk-QMAIUPXK.js → chunk-QEQXPWOK.js} +23 -231
  40. package/dist/{chunk-M77G2MGW.js → chunk-QFKOHZM3.js} +3 -3
  41. package/dist/{chunk-P6HHXMLJ.js → chunk-ROC2TFPS.js} +10 -9
  42. package/dist/{chunk-QMOBXKW3.js → chunk-SHJYK2X4.js} +222 -191
  43. package/dist/{chunk-ODXLZZFR.js → chunk-SOBKRB4N.js} +1 -1
  44. package/dist/{chunk-SXZMHLH6.js → chunk-SWC54W3A.js} +4 -4
  45. package/dist/{chunk-G4IEH7NX.js → chunk-TLMNBOAG.js} +5 -5
  46. package/dist/{chunk-N6K2Q5BM.js → chunk-WDABHUIL.js} +9 -21
  47. package/dist/{chunk-3KCLWJDC.js → chunk-XUL4UBYJ.js} +22 -11
  48. package/dist/{chunk-UD657ICS.js → chunk-YJ437RDY.js} +29 -16
  49. package/dist/components/index.d.ts +18 -20
  50. package/dist/components/index.js +48 -48
  51. package/dist/components/navigation/index.js +11 -11
  52. package/dist/execution/index.js +2 -2
  53. package/dist/features/auth/index.d.ts +1 -1
  54. package/dist/features/auth/index.js +12 -12
  55. package/dist/features/clients/index.js +14 -15
  56. package/dist/features/content/index.js +13 -13
  57. package/dist/features/crm/index.d.ts +0 -14
  58. package/dist/features/crm/index.js +16 -16
  59. package/dist/features/dashboard/index.d.ts +8 -8
  60. package/dist/features/dashboard/index.js +13 -13
  61. package/dist/features/delivery/index.d.ts +0 -14
  62. package/dist/features/delivery/index.js +25 -25
  63. package/dist/features/knowledge/index.js +10 -10
  64. package/dist/features/lead-gen/index.d.ts +103 -48
  65. package/dist/features/lead-gen/index.js +17 -17
  66. package/dist/features/monitoring/index.d.ts +10 -10
  67. package/dist/features/monitoring/index.js +15 -15
  68. package/dist/features/monitoring/requests/index.js +12 -12
  69. package/dist/features/notes/index.js +1 -1
  70. package/dist/features/operations/index.d.ts +12 -12
  71. package/dist/features/operations/index.js +18 -18
  72. package/dist/features/public-agent-chat/index.js +4 -4
  73. package/dist/features/seo/index.d.ts +105 -17
  74. package/dist/features/seo/index.js +13 -13
  75. package/dist/features/settings/index.d.ts +1 -1
  76. package/dist/features/settings/index.js +13 -13
  77. package/dist/hooks/access/index.d.ts +60 -1
  78. package/dist/hooks/access/index.js +10 -10
  79. package/dist/hooks/delivery/index.d.ts +0 -14
  80. package/dist/hooks/delivery/index.js +6 -6
  81. package/dist/hooks/published.d.ts +286 -107
  82. package/dist/hooks/published.js +23 -23
  83. package/dist/hooks/user-notes/index.js +1 -1
  84. package/dist/initialization/index.d.ts +13 -1
  85. package/dist/initialization/index.js +1 -1
  86. package/dist/knowledge/index.d.ts +1 -1
  87. package/dist/knowledge/index.js +93 -91
  88. package/dist/{knowledge-search-index-6GQK55IQ.js → knowledge-search-index-UPKXCXQP.js} +91 -91
  89. package/dist/layout/index.js +14 -14
  90. package/dist/organization/index.d.ts +17 -1
  91. package/dist/organization/index.js +2 -2
  92. package/dist/profile/index.d.ts +1 -1
  93. package/dist/profile/index.js +1 -1
  94. package/dist/provider/ElevasisServiceContext.js +1 -1
  95. package/dist/provider/index.d.ts +0 -14
  96. package/dist/provider/index.js +10 -10
  97. package/dist/provider/published.d.ts +0 -14
  98. package/dist/provider/published.js +10 -10
  99. package/dist/sse/index.d.ts +7 -1
  100. package/dist/sse/index.js +36 -2
  101. package/dist/test-utils/index.d.ts +3 -1
  102. package/dist/test-utils/index.js +32 -9
  103. package/dist/types/index.d.ts +13 -15
  104. package/dist/utils/index.d.ts +25 -7
  105. package/dist/utils/index.js +4 -4
  106. package/package.json +24 -14
  107. /package/dist/{chunk-Y6I3IC45.js → chunk-6XBZPKMI.js} +0 -0
  108. /package/dist/{chunk-5F3QGBEI.js → chunk-7ZUXA2NW.js} +0 -0
@@ -1,30 +1,30 @@
1
- export { AppPageLayout, AppShellContainer, AppShellContentContainer, AppShellRightSideContainer, AppShellRightSideOuterContainer, AppTopbarAdjusterWrapper, CollapsibleSidebarGroup, CyberParticles, LinksGroup, Sidebar, SidebarContext, SidebarProvider, SubshellNavList, Topbar, TopbarActions, TopbarContainer, Vignette, subsidebarWidth, useSidebar, useSidebarCollapse } from '../chunk-R42OYAQ2.js';
2
- export { SubshellLoader } from '../chunk-4ZHX5KOT.js';
3
- export { AppShellCenteredContainer, AppShellError, AppShellLoader } from '../chunk-6AJUWYKS.js';
4
- export { SubshellPageLayout } from '../chunk-ODXLZZFR.js';
1
+ export { AppPageLayout, AppShellContainer, AppShellContentContainer, AppShellRightSideContainer, AppShellRightSideOuterContainer, AppTopbarAdjusterWrapper, CollapsibleSidebarGroup, CyberParticles, LinksGroup, Sidebar, SidebarContext, SidebarProvider, SubshellNavList, Topbar, TopbarActions, TopbarContainer, Vignette, subsidebarWidth, useSidebar, useSidebarCollapse } from '../chunk-KU7KN5VN.js';
2
+ export { SubshellLoader } from '../chunk-JLKZUO2I.js';
3
+ export { AppShellCenteredContainer, AppShellError, AppShellLoader } from '../chunk-LGJASP5H.js';
4
+ export { SubshellPageLayout } from '../chunk-SOBKRB4N.js';
5
5
  export { PageContainer } from '../chunk-BZZCNLT6.js';
6
- export { SubshellContainer, SubshellContentContainer, SubshellNavItem, SubshellRightSideContainer, SubshellSidebar, SubshellSidebarLoader, SubshellSidebarSection, sidebarBottomSectionCollapsedHeight, sidebarBottomSectionHeight, sidebarCollapsedWidth, sidebarGroupChevronSize, sidebarHoverDelay, sidebarIconInnerSize, sidebarIconSize, sidebarIconStroke, sidebarItemGap, sidebarItemHeight, sidebarItemPadding, sidebarSectionPadding, sidebarSubLinkIndent, sidebarSubLinkPaddingX, sidebarSubLinkPaddingY, sidebarToggleIconSize, sidebarTransitionDuration, sidebarWidth, subshellNavItemIconSize, topbarHeight } from '../chunk-4VGPEDQF.js';
6
+ export { SubshellContainer, SubshellContentContainer, SubshellNavItem, SubshellRightSideContainer, SubshellSidebar, SubshellSidebarLoader, SubshellSidebarSection, sidebarBottomSectionCollapsedHeight, sidebarBottomSectionHeight, sidebarCollapsedWidth, sidebarGroupChevronSize, sidebarHoverDelay, sidebarIconInnerSize, sidebarIconSize, sidebarIconStroke, sidebarItemGap, sidebarItemHeight, sidebarItemPadding, sidebarSectionPadding, sidebarSubLinkIndent, sidebarSubLinkPaddingX, sidebarSubLinkPaddingY, sidebarToggleIconSize, sidebarTransitionDuration, sidebarWidth, subshellNavItemIconSize, topbarHeight } from '../chunk-PSGSFPWA.js';
7
7
  import '../chunk-4WLAVUPS.js';
8
8
  export { AmbientBloomGrid, AppBackground, CyberBackground, FilmGrain, FloatingMotes, FloatingOrbs, PerspectiveGrid, RadiantGlow, WaveBackground } from '../chunk-RXZ3XDBM.js';
9
- import '../chunk-JZQNUQE4.js';
9
+ import '../chunk-7RS2NUC6.js';
10
10
  import '../chunk-L7BZZ4SI.js';
11
- import '../chunk-KXNRTJAE.js';
11
+ import '../chunk-PNCJJE4Z.js';
12
12
  import '../chunk-62GVNH5U.js';
13
13
  import '../chunk-P45GQ3ZW.js';
14
- import '../chunk-2GIJBHZT.js';
14
+ import '../chunk-IIMC4TRH.js';
15
15
  import '../chunk-3KMDHCAR.js';
16
16
  import '../chunk-2IFYDILW.js';
17
- import '../chunk-NCPNKI3V.js';
18
- import '../chunk-UD657ICS.js';
17
+ import '../chunk-2HXDI4RY.js';
18
+ import '../chunk-YJ437RDY.js';
19
19
  import '../chunk-DD3CCMCZ.js';
20
20
  import '../chunk-RNP5R5I3.js';
21
21
  import '../chunk-RT4KRGZT.js';
22
- import '../chunk-5ZK7K7YP.js';
23
- import '../chunk-Y6I3IC45.js';
24
- import '../chunk-5F3QGBEI.js';
22
+ import '../chunk-DEZW7QDI.js';
23
+ import '../chunk-6XBZPKMI.js';
24
+ import '../chunk-7ZUXA2NW.js';
25
25
  import '../chunk-BI5VDO2K.js';
26
26
  import '../chunk-MQZE7SUI.js';
27
- import '../chunk-TVTSASST.js';
27
+ import '../chunk-34B3ACOZ.js';
28
28
  import '../chunk-BRJ3QZ4E.js';
29
29
  import '../chunk-Q7DJKLEN.js';
30
30
  import '../chunk-I2KLQ2HA.js';
@@ -131,6 +131,18 @@ interface MembershipWithDetails extends OrganizationMembership {
131
131
  workos_org_id: string;
132
132
  primaryDomain?: string;
133
133
  is_test?: boolean;
134
+ /**
135
+ * The organization's lifecycle status (`active | suspended | archived |
136
+ * deleting | delete_failed` -- a DB CHECK constraint, not a TS enum).
137
+ * `GET /memberships/my-memberships` annotates every row with this field
138
+ * rather than filtering non-`active` organizations out of the response,
139
+ * so a member whose organization was archived or is being deleted still
140
+ * sees it (and can be told why) instead of the row silently vanishing.
141
+ * Consumers that auto-select a membership (e.g. `OrganizationProvider`)
142
+ * must check this before entering an organization on the caller's
143
+ * behalf. Optional for backward compatibility with callers and fixtures
144
+ * that predate this field; treat a missing value as serviceable.
145
+ */
134
146
  status?: string;
135
147
  metadata?: Record<string, unknown>;
136
148
  config?: Record<string, unknown>;
@@ -192,7 +204,11 @@ type ApiRequestFn = <T>(endpoint: string, options?: RequestInit) => Promise<T>;
192
204
  *
193
205
  * Behaviors:
194
206
  * - Fetches all memberships for the authenticated user via GET /memberships/my-memberships
195
- * - Selects the active org by priority: WorkOS org ID > saved preference > first membership
207
+ * - Selects the active org by priority: WorkOS org ID > saved preference > first membership,
208
+ * skipping any candidate whose `organization.status` is not serviceable (see
209
+ * {@link isOrganizationServiceable}) and falling through to the next priority
210
+ * - Sets a real `error` (rather than silently no-op'ing) when the fetch comes back with
211
+ * zero memberships, e.g. the user's only organization was just deleted
196
212
  * - Persists explicit multi-org switches to PATCH /users/me { lastVisitedOrg }
197
213
  * - Clears all state when the user signs out (user becomes null)
198
214
  */
@@ -1,9 +1,9 @@
1
- export { OrganizationProvider, OrganizationSwitcher, OrganizationSwitcherConnected, createOrganizationsSlice, createUseOrgInitialization, createUseOrganizations } from '../chunk-UD657ICS.js';
1
+ export { OrganizationProvider, OrganizationSwitcher, OrganizationSwitcherConnected, createOrganizationsSlice, createUseOrgInitialization, createUseOrganizations } from '../chunk-YJ437RDY.js';
2
2
  export { OrganizationContext, useOrganization } from '../chunk-DD3CCMCZ.js';
3
3
  import '../chunk-RNP5R5I3.js';
4
4
  import '../chunk-RT4KRGZT.js';
5
5
  import '../chunk-BI5VDO2K.js';
6
6
  import '../chunk-MQZE7SUI.js';
7
- import '../chunk-TVTSASST.js';
7
+ import '../chunk-34B3ACOZ.js';
8
8
  import '../chunk-BRJ3QZ4E.js';
9
9
  import '../chunk-I2KLQ2HA.js';
@@ -5,7 +5,7 @@ import { QueryKey } from '@tanstack/react-query';
5
5
  /**
6
6
  * Concrete row shapes for the published Supabase tables.
7
7
  *
8
- * GENERATED by `scripts/gen-published-rows.mjs`do not hand-edit; re-run the script instead.
8
+ * @generated by packages/core/scripts/gen-published-rows.mjs — DO NOT EDIT. Re-run `pnpm gen:published-rows`.
9
9
  *
10
10
  * These were `Tables<'users'>` / `TablesInsert<...>` aliases in `./index.ts`. Each one indexes
11
11
  * into the generated `Database` type, and a published `.d.ts` that references `Database` makes
@@ -2,6 +2,6 @@ import '../chunk-RNP5R5I3.js';
2
2
  export { ProfileProvider, USER_PROFILE_QUERY_KEY, UserProfileService, useProfile, useUserProfile } from '../chunk-RT4KRGZT.js';
3
3
  import '../chunk-BI5VDO2K.js';
4
4
  import '../chunk-MQZE7SUI.js';
5
- import '../chunk-TVTSASST.js';
5
+ import '../chunk-34B3ACOZ.js';
6
6
  import '../chunk-BRJ3QZ4E.js';
7
7
  import '../chunk-I2KLQ2HA.js';
@@ -1,4 +1,4 @@
1
1
  export { ElevasisServiceContext, ElevasisServiceProvider, useElevasisServices } from '../chunk-BI5VDO2K.js';
2
2
  import '../chunk-MQZE7SUI.js';
3
- import '../chunk-TVTSASST.js';
3
+ import '../chunk-34B3ACOZ.js';
4
4
  import '../chunk-I2KLQ2HA.js';
@@ -2872,13 +2872,6 @@ type Database = {
2872
2872
  referencedRelation: "users";
2873
2873
  referencedColumns: ["id"];
2874
2874
  },
2875
- {
2876
- foreignKeyName: "prj_notes_milestone_id_fkey";
2877
- columns: ["milestone_id"];
2878
- isOneToOne: false;
2879
- referencedRelation: "prj_milestones";
2880
- referencedColumns: ["id"];
2881
- },
2882
2875
  {
2883
2876
  foreignKeyName: "prj_notes_organization_id_fkey";
2884
2877
  columns: ["organization_id"];
@@ -2892,13 +2885,6 @@ type Database = {
2892
2885
  isOneToOne: false;
2893
2886
  referencedRelation: "prj_projects";
2894
2887
  referencedColumns: ["id"];
2895
- },
2896
- {
2897
- foreignKeyName: "prj_notes_task_id_fkey";
2898
- columns: ["task_id"];
2899
- isOneToOne: false;
2900
- referencedRelation: "prj_tasks";
2901
- referencedColumns: ["id"];
2902
2888
  }
2903
2889
  ];
2904
2890
  };
@@ -1,25 +1,25 @@
1
- export { AppearanceProvider, CrmActionsProvider, ElevasisCoreProvider, ElevasisSystemsProvider, ElevasisUIProvider, ListActionsProvider, NotificationProvider, SystemShell, createTestSystemsProvider, selectDeclaredSystems, useAppearance, useCrmActions, useElevasisSystems, useListActions, useNotificationAdapter, useOptionalElevasisSystems, useResolvedOrganizationModel } from '../chunk-4VGPEDQF.js';
1
+ export { AppearanceProvider, CrmActionsProvider, ElevasisCoreProvider, ElevasisSystemsProvider, ElevasisUIProvider, ListActionsProvider, NotificationProvider, SystemShell, createTestSystemsProvider, selectDeclaredSystems, useAppearance, useCrmActions, useElevasisSystems, useListActions, useNotificationAdapter, useOptionalElevasisSystems, useResolvedOrganizationModel } from '../chunk-PSGSFPWA.js';
2
2
  import '../chunk-4WLAVUPS.js';
3
3
  import '../chunk-RXZ3XDBM.js';
4
- import '../chunk-JZQNUQE4.js';
4
+ import '../chunk-7RS2NUC6.js';
5
5
  import '../chunk-L7BZZ4SI.js';
6
- import '../chunk-KXNRTJAE.js';
6
+ import '../chunk-PNCJJE4Z.js';
7
7
  import '../chunk-62GVNH5U.js';
8
8
  import '../chunk-P45GQ3ZW.js';
9
- import '../chunk-2GIJBHZT.js';
9
+ import '../chunk-IIMC4TRH.js';
10
10
  import '../chunk-3KMDHCAR.js';
11
11
  import '../chunk-2IFYDILW.js';
12
- import '../chunk-NCPNKI3V.js';
13
- import '../chunk-UD657ICS.js';
12
+ import '../chunk-2HXDI4RY.js';
13
+ import '../chunk-YJ437RDY.js';
14
14
  import '../chunk-DD3CCMCZ.js';
15
15
  import '../chunk-RNP5R5I3.js';
16
16
  import '../chunk-RT4KRGZT.js';
17
- import '../chunk-5ZK7K7YP.js';
18
- import '../chunk-Y6I3IC45.js';
19
- import '../chunk-5F3QGBEI.js';
17
+ import '../chunk-DEZW7QDI.js';
18
+ import '../chunk-6XBZPKMI.js';
19
+ import '../chunk-7ZUXA2NW.js';
20
20
  export { ElevasisServiceProvider, useElevasisServices } from '../chunk-BI5VDO2K.js';
21
21
  import '../chunk-MQZE7SUI.js';
22
- import '../chunk-TVTSASST.js';
22
+ import '../chunk-34B3ACOZ.js';
23
23
  import '../chunk-BRJ3QZ4E.js';
24
24
  import '../chunk-Q7DJKLEN.js';
25
25
  import '../chunk-I2KLQ2HA.js';
@@ -2871,13 +2871,6 @@ type Database = {
2871
2871
  referencedRelation: "users";
2872
2872
  referencedColumns: ["id"];
2873
2873
  },
2874
- {
2875
- foreignKeyName: "prj_notes_milestone_id_fkey";
2876
- columns: ["milestone_id"];
2877
- isOneToOne: false;
2878
- referencedRelation: "prj_milestones";
2879
- referencedColumns: ["id"];
2880
- },
2881
2874
  {
2882
2875
  foreignKeyName: "prj_notes_organization_id_fkey";
2883
2876
  columns: ["organization_id"];
@@ -2891,13 +2884,6 @@ type Database = {
2891
2884
  isOneToOne: false;
2892
2885
  referencedRelation: "prj_projects";
2893
2886
  referencedColumns: ["id"];
2894
- },
2895
- {
2896
- foreignKeyName: "prj_notes_task_id_fkey";
2897
- columns: ["task_id"];
2898
- isOneToOne: false;
2899
- referencedRelation: "prj_tasks";
2900
- referencedColumns: ["id"];
2901
2887
  }
2902
2888
  ];
2903
2889
  };
@@ -1,25 +1,25 @@
1
- export { AppearanceProvider, ElevasisCoreProvider, ElevasisSystemsProvider, NotificationProvider, SystemShell, selectDeclaredSystems, useAppearance, useElevasisSystems, useNotificationAdapter, useOptionalElevasisSystems, useResolvedOrganizationModel } from '../chunk-4VGPEDQF.js';
1
+ export { AppearanceProvider, ElevasisCoreProvider, ElevasisSystemsProvider, NotificationProvider, SystemShell, selectDeclaredSystems, useAppearance, useElevasisSystems, useNotificationAdapter, useOptionalElevasisSystems, useResolvedOrganizationModel } from '../chunk-PSGSFPWA.js';
2
2
  import '../chunk-4WLAVUPS.js';
3
3
  import '../chunk-RXZ3XDBM.js';
4
- import '../chunk-JZQNUQE4.js';
4
+ import '../chunk-7RS2NUC6.js';
5
5
  import '../chunk-L7BZZ4SI.js';
6
- import '../chunk-KXNRTJAE.js';
6
+ import '../chunk-PNCJJE4Z.js';
7
7
  import '../chunk-62GVNH5U.js';
8
8
  import '../chunk-P45GQ3ZW.js';
9
- import '../chunk-2GIJBHZT.js';
9
+ import '../chunk-IIMC4TRH.js';
10
10
  import '../chunk-3KMDHCAR.js';
11
11
  import '../chunk-2IFYDILW.js';
12
- import '../chunk-NCPNKI3V.js';
13
- import '../chunk-UD657ICS.js';
12
+ import '../chunk-2HXDI4RY.js';
13
+ import '../chunk-YJ437RDY.js';
14
14
  import '../chunk-DD3CCMCZ.js';
15
15
  import '../chunk-RNP5R5I3.js';
16
16
  import '../chunk-RT4KRGZT.js';
17
- import '../chunk-5ZK7K7YP.js';
18
- import '../chunk-Y6I3IC45.js';
19
- import '../chunk-5F3QGBEI.js';
17
+ import '../chunk-DEZW7QDI.js';
18
+ import '../chunk-6XBZPKMI.js';
19
+ import '../chunk-7ZUXA2NW.js';
20
20
  export { ElevasisServiceProvider, useElevasisServices } from '../chunk-BI5VDO2K.js';
21
21
  import '../chunk-MQZE7SUI.js';
22
- import '../chunk-TVTSASST.js';
22
+ import '../chunk-34B3ACOZ.js';
23
23
  import '../chunk-BRJ3QZ4E.js';
24
24
  import '../chunk-Q7DJKLEN.js';
25
25
  import '../chunk-I2KLQ2HA.js';
@@ -57,7 +57,13 @@ declare class SSEConnectionManager implements SSEConnectionManagerLike {
57
57
  * If a connection already exists for this endpoint, reuses it.
58
58
  * Otherwise, creates a new connection.
59
59
  *
60
- * @param key - Unique identifier for the connection (e.g., 'notifications', 'resource-executive-agent')
60
+ * The key must encode everything that varies the request — the organization above all. Only the
61
+ * first subscriber's `options` open the connection; a later subscriber on the same key inherits
62
+ * that request wholesale, headers included. A mismatch is reported to the console but not
63
+ * repaired, because repairing it here would move the other subscribers onto a stream they did
64
+ * not ask for.
65
+ *
66
+ * @param key - Unique identifier for the connection (e.g., `notifications:${organizationId}`)
61
67
  * @param subscriberId - Unique identifier for this subscriber (usually component instance)
62
68
  * @param options - SSE connection options
63
69
  * @returns Unsubscribe function to call when component unmounts
package/dist/sse/index.js CHANGED
@@ -1,6 +1,14 @@
1
1
  import '../chunk-I2KLQ2HA.js';
2
2
  import { fetchEventSource } from '@microsoft/fetch-event-source';
3
3
 
4
+ var FatalSSEResponseError = class extends Error {
5
+ status;
6
+ constructor(status) {
7
+ super(`Fatal response: ${status}`);
8
+ this.name = "FatalSSEResponseError";
9
+ this.status = status;
10
+ }
11
+ };
4
12
  async function fetchEventSourceWithTokenRefresh(options) {
5
13
  const {
6
14
  url,
@@ -59,6 +67,9 @@ async function fetchEventSourceWithTokenRefresh(options) {
59
67
  controller.abort();
60
68
  return;
61
69
  }
70
+ if (response.status === 403) {
71
+ throw new FatalSSEResponseError(response.status);
72
+ }
62
73
  throw new Error(`Unexpected response: ${response.status}`);
63
74
  },
64
75
  onmessage(event) {
@@ -69,6 +80,9 @@ async function fetchEventSourceWithTokenRefresh(options) {
69
80
  throw error;
70
81
  }
71
82
  onerror?.(error);
83
+ if (error instanceof FatalSSEResponseError) {
84
+ throw error;
85
+ }
72
86
  },
73
87
  onclose() {
74
88
  onclose?.();
@@ -95,6 +109,13 @@ async function fetchEventSourceWithTokenRefresh(options) {
95
109
  }
96
110
 
97
111
  // src/sse/SSEConnectionManager.ts
112
+ function differingHeaderNames(a, b) {
113
+ const normalize = (headers) => new Map(Object.entries(headers).map(([name, value]) => [name.toLowerCase(), value]));
114
+ const left = normalize(a);
115
+ const right = normalize(b);
116
+ const names = /* @__PURE__ */ new Set([...left.keys(), ...right.keys()]);
117
+ return Array.from(names).filter((name) => left.get(name) !== right.get(name));
118
+ }
98
119
  var SSEConnectionManager = class {
99
120
  connections = /* @__PURE__ */ new Map();
100
121
  closeGracePeriodMs;
@@ -107,7 +128,13 @@ var SSEConnectionManager = class {
107
128
  * If a connection already exists for this endpoint, reuses it.
108
129
  * Otherwise, creates a new connection.
109
130
  *
110
- * @param key - Unique identifier for the connection (e.g., 'notifications', 'resource-executive-agent')
131
+ * The key must encode everything that varies the request — the organization above all. Only the
132
+ * first subscriber's `options` open the connection; a later subscriber on the same key inherits
133
+ * that request wholesale, headers included. A mismatch is reported to the console but not
134
+ * repaired, because repairing it here would move the other subscribers onto a stream they did
135
+ * not ask for.
136
+ *
137
+ * @param key - Unique identifier for the connection (e.g., `notifications:${organizationId}`)
111
138
  * @param subscriberId - Unique identifier for this subscriber (usually component instance)
112
139
  * @param options - SSE connection options
113
140
  * @returns Unsubscribe function to call when component unmounts
@@ -115,6 +142,12 @@ var SSEConnectionManager = class {
115
142
  subscribe(key, subscriberId, options) {
116
143
  const existing = this.connections.get(key);
117
144
  if (existing) {
145
+ const mismatched = differingHeaderNames(existing.headers, options.headers ?? {});
146
+ if (mismatched.length > 0) {
147
+ console.error(
148
+ `[SSEConnectionManager] Subscriber "${subscriberId}" joined key "${key}" with different ${mismatched.join(", ")}. The live connection keeps the headers it was opened with. Include the differing value in the connection key.`
149
+ );
150
+ }
118
151
  if (existing.closeTimeout) {
119
152
  clearTimeout(existing.closeTimeout);
120
153
  existing.closeTimeout = void 0;
@@ -130,7 +163,8 @@ var SSEConnectionManager = class {
130
163
  const connection = {
131
164
  controller,
132
165
  subscribers,
133
- url: options.url
166
+ url: options.url,
167
+ headers: options.headers ?? {}
134
168
  };
135
169
  this.connections.set(key, connection);
136
170
  fetchEventSourceWithTokenRefresh({
@@ -194,13 +194,15 @@ interface OrgOsUiRouteContractOptions {
194
194
  */
195
195
  publiclyReachableRoutePaths?: Iterable<string>;
196
196
  }
197
- type OrgOsUiRouteContractIssueKind = 'missing-system' | 'missing-route' | 'unguarded-route';
197
+ type OrgOsUiRouteContractIssueKind = 'missing-system' | 'missing-route' | 'unguarded-route' | 'no-coverage';
198
198
  interface OrgOsUiRouteContractIssue {
199
199
  target: OrgOsUiRouteContractTarget;
200
200
  kind: OrgOsUiRouteContractIssueKind;
201
201
  systemId: string;
202
202
  path?: string;
203
203
  ownerSystemId?: string;
204
+ /** `no-coverage` only: Systems that declare a UI path but no owner claimed. */
205
+ unownedSystemIds?: readonly string[];
204
206
  }
205
207
  interface OrgOsUiRouteContractResult {
206
208
  issues: OrgOsUiRouteContractIssue[];
@@ -2,15 +2,15 @@ import { server, handlers } from '../chunk-7XKCG5CT.js';
2
2
  export { handlers, server } from '../chunk-7XKCG5CT.js';
3
3
  import { mockWorkOSUser, mockUseAuth, mockUnauthenticatedUser, mockAuthenticatedUser, mockAuthLoading, createMockUseAuth } from '../chunk-N7U24M2J.js';
4
4
  export { createMockUseAuth, mockAuthLoading, mockAuthenticatedUser, mockUnauthenticatedUser, mockUseAuth, mockWorkOSUser } from '../chunk-N7U24M2J.js';
5
- import '../chunk-SVZR4GYA.js';
6
- import { ApiClientProvider } from '../chunk-JZQNUQE4.js';
5
+ import '../chunk-G6VHIXWD.js';
6
+ import { ApiClientProvider } from '../chunk-7RS2NUC6.js';
7
7
  import '../chunk-DD3CCMCZ.js';
8
- import '../chunk-5ZK7K7YP.js';
9
- import '../chunk-Y6I3IC45.js';
10
- import '../chunk-5F3QGBEI.js';
8
+ import '../chunk-DEZW7QDI.js';
9
+ import '../chunk-6XBZPKMI.js';
10
+ import '../chunk-7ZUXA2NW.js';
11
11
  import { ElevasisServiceProvider } from '../chunk-BI5VDO2K.js';
12
12
  import '../chunk-MQZE7SUI.js';
13
- import '../chunk-TVTSASST.js';
13
+ import '../chunk-34B3ACOZ.js';
14
14
  import { __export, __reExport } from '../chunk-I2KLQ2HA.js';
15
15
  import { MantineProvider } from '@mantine/core';
16
16
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
@@ -186,8 +186,8 @@ function getOrgOsRouteContractSystems(organizationModel) {
186
186
  for (const [key, system] of Object.entries(entries)) {
187
187
  const id = prefix ? `${prefix}.${key}` : system.id || key;
188
188
  result.push({ ...system, id });
189
- if (system.systems) visit(system.systems, id);
190
- if (system.subsystems) visit(system.subsystems, id);
189
+ const nested = system.systems ?? system.subsystems;
190
+ if (nested) visit(nested, id);
191
191
  }
192
192
  };
193
193
  visit(systems);
@@ -207,6 +207,7 @@ function collectOrgOsUiRouteContractIssues(options) {
207
207
  const systems = getOrgOsRouteContractSystems(organizationModel);
208
208
  const modelSystemIds = new Set(systems.map((system) => system.id));
209
209
  const issues = [];
210
+ const unownedRoutableSystemIds = [];
210
211
  let checkedPathCount = 0;
211
212
  for (const systemId of target.systemIds) {
212
213
  if (!modelSystemIds.has(systemId)) {
@@ -222,7 +223,10 @@ function collectOrgOsUiRouteContractIssues(options) {
222
223
  if (!path || system.enabled === false) continue;
223
224
  if (system.lifecycle === "archived" || system.lifecycle === "deprecated") continue;
224
225
  const ownerSystemId = target.systemIds.find((candidate) => ownsOrgOsSystem(candidate, system.id));
225
- if (!ownerSystemId) continue;
226
+ if (!ownerSystemId) {
227
+ unownedRoutableSystemIds.push(system.id);
228
+ continue;
229
+ }
226
230
  checkedPathCount += 1;
227
231
  const normalizedPath = normalizeOrgOsRoutePath(path);
228
232
  if (!normalizedRoutePaths.has(normalizedPath)) {
@@ -245,9 +249,28 @@ function collectOrgOsUiRouteContractIssues(options) {
245
249
  });
246
250
  }
247
251
  }
252
+ if (checkedPathCount === 0 && unownedRoutableSystemIds.length > 0) {
253
+ issues.push({
254
+ target,
255
+ kind: "no-coverage",
256
+ systemId: "(none)",
257
+ unownedSystemIds: unownedRoutableSystemIds
258
+ });
259
+ }
248
260
  return { issues, checkedPathCount };
249
261
  }
250
262
  function formatOrgOsUiRouteContractIssue(issue) {
263
+ if (issue.kind === "no-coverage") {
264
+ const unowned = issue.unownedSystemIds ?? [];
265
+ return [
266
+ `[no-coverage] The contract checked 0 paths for ${issue.target.name}, but its Organization Model declares ${unowned.length} routable System(s): ${unowned.join(", ")}.`,
267
+ `No id in this target's derived systemIds owns any of them, so every path was skipped and the run reported a pass that asserted nothing.`,
268
+ `Derived systemIds: ${issue.target.systemIds.length === 0 ? "(empty)" : issue.target.systemIds.join(", ")}`,
269
+ "Fix one of:",
270
+ `- Point the target's shellSource at the file that actually declares the SYSTEM_MANIFESTS array. ${issue.target.shellSource} is what was read; a shell that imports the array from elsewhere yields no ids.`,
271
+ `- Or, if ${issue.target.name} genuinely mounts no System from its Organization Model, remove the target rather than leaving a check that cannot fail.`
272
+ ].join("\n");
273
+ }
251
274
  if (issue.kind === "missing-system") {
252
275
  return [
253
276
  `[missing-system] Registered SystemModule "${issue.systemId}" is not present in ${issue.target.orgModelSource}.`,
@@ -3540,13 +3540,6 @@ type Database = {
3540
3540
  referencedRelation: "users";
3541
3541
  referencedColumns: ["id"];
3542
3542
  },
3543
- {
3544
- foreignKeyName: "prj_notes_milestone_id_fkey";
3545
- columns: ["milestone_id"];
3546
- isOneToOne: false;
3547
- referencedRelation: "prj_milestones";
3548
- referencedColumns: ["id"];
3549
- },
3550
3543
  {
3551
3544
  foreignKeyName: "prj_notes_organization_id_fkey";
3552
3545
  columns: ["organization_id"];
@@ -3560,13 +3553,6 @@ type Database = {
3560
3553
  isOneToOne: false;
3561
3554
  referencedRelation: "prj_projects";
3562
3555
  referencedColumns: ["id"];
3563
- },
3564
- {
3565
- foreignKeyName: "prj_notes_task_id_fkey";
3566
- columns: ["task_id"];
3567
- isOneToOne: false;
3568
- referencedRelation: "prj_tasks";
3569
- referencedColumns: ["id"];
3570
3556
  }
3571
3557
  ];
3572
3558
  };
@@ -4484,7 +4470,7 @@ type Database = {
4484
4470
  /**
4485
4471
  * Concrete row shapes for the published Supabase tables.
4486
4472
  *
4487
- * GENERATED by `scripts/gen-published-rows.mjs`do not hand-edit; re-run the script instead.
4473
+ * @generated by packages/core/scripts/gen-published-rows.mjs — DO NOT EDIT. Re-run `pnpm gen:published-rows`.
4488
4474
  *
4489
4475
  * These were `Tables<'users'>` / `TablesInsert<...>` aliases in `./index.ts`. Each one indexes
4490
4476
  * into the generated `Database` type, and a published `.d.ts` that references `Database` makes
@@ -5182,6 +5168,18 @@ interface MembershipWithDetails extends OrganizationMembership {
5182
5168
  workos_org_id: string;
5183
5169
  primaryDomain?: string;
5184
5170
  is_test?: boolean;
5171
+ /**
5172
+ * The organization's lifecycle status (`active | suspended | archived |
5173
+ * deleting | delete_failed` -- a DB CHECK constraint, not a TS enum).
5174
+ * `GET /memberships/my-memberships` annotates every row with this field
5175
+ * rather than filtering non-`active` organizations out of the response,
5176
+ * so a member whose organization was archived or is being deleted still
5177
+ * sees it (and can be told why) instead of the row silently vanishing.
5178
+ * Consumers that auto-select a membership (e.g. `OrganizationProvider`)
5179
+ * must check this before entering an organization on the caller's
5180
+ * behalf. Optional for backward compatibility with callers and fixtures
5181
+ * that predate this field; treat a missing value as serviceable.
5182
+ */
5185
5183
  status?: string;
5186
5184
  metadata?: Record<string, unknown>;
5187
5185
  config?: Record<string, unknown>;
@@ -305,6 +305,15 @@ interface SystemInterfaceReadinessIssue {
305
305
  message: string;
306
306
  }
307
307
 
308
+ /**
309
+ * Type-safe error codes
310
+ * Adding a member obliges a producer in `apps/api` and a display title in the frontend.
311
+ * Both are enforced: `apps/api/src/platform/errors/__tests__/error-code-producers.test.ts`
312
+ * keys a producer map by this union, and `getErrorTitle` in `packages/ui/src/utils/error-utils.ts`
313
+ * looks up a `Record<APIErrorCode, string>` -- an unhandled member fails to compile in both.
314
+ */
315
+ type APIErrorCode = 'VALIDATION_ERROR' | 'AUTHENTICATION_FAILED' | 'FORBIDDEN' | 'NOT_FOUND' | 'CONFLICT' | 'RATE_LIMIT_EXCEEDED' | 'INTERNAL_SERVER_ERROR' | 'SERVICE_UNAVAILABLE';
316
+
308
317
  /**
309
318
  * Time range selector for dashboard metrics
310
319
  */
@@ -407,12 +416,6 @@ type NodeColorType = 'violet' | 'blue' | 'orange' | 'teal' | 'gray' | 'yellow';
407
416
  */
408
417
  declare function getResourceColor(type: ResourceDefinitionType): NodeColorType;
409
418
 
410
- /**
411
- * Type-safe error codes
412
- * MUST match API_ERROR_CODES in apps/api/src/errors/error-codes.ts
413
- */
414
- type APIErrorCode = 'VALIDATION_ERROR' | 'AUTHENTICATION_FAILED' | 'FORBIDDEN' | 'NOT_FOUND' | 'CONFLICT' | 'RATE_LIMIT_EXCEEDED' | 'INTERNAL_SERVER_ERROR' | 'SERVICE_UNAVAILABLE';
415
-
416
419
  /**
417
420
  * Time range utility functions
418
421
  * Converts TimeRange enum to ISO 8601 date strings and labels
@@ -509,6 +512,21 @@ declare function getErrorTitle(code?: APIErrorCode): string;
509
512
  */
510
513
  declare function formatErrorMessage(message: string, requestId?: string, fields?: Record<string, string[]>, retryAfter?: number): string;
511
514
 
515
+ /**
516
+ * Serializes a flat filter object into a `URLSearchParams`-encoded query string.
517
+ *
518
+ * Skips `undefined` only -- `0`, `false`, and `''` are legitimate, explicitly-provided
519
+ * filter values and must survive. A field's absence is expressed by omitting it or
520
+ * passing `undefined`, never by a falsy value, so skip-undefined is the only semantic
521
+ * that cannot silently drop a caller's real input. Do not change this to a falsy skip:
522
+ * several `@repo/ui` hooks pass `limit`/`offset`/`priorityMin` as `0`, and a truthy check
523
+ * would make "explicitly zero" indistinguishable from "not provided".
524
+ *
525
+ * Extracted from two byte-identical local copies in
526
+ * `hooks/acquisition/useCompanies.ts` and `hooks/acquisition/useContacts.ts`.
527
+ */
528
+ declare function buildQueryString(params: Record<string, string | number | boolean | undefined>): string;
529
+
512
530
  /**
513
531
  * Resource Icon Resolver
514
532
  *
@@ -601,5 +619,5 @@ declare function restoreConsole(): void;
601
619
 
602
620
  declare function setupBrowserMocks(): void;
603
621
 
604
- export { APIClientError, API_URL, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, ResourceStatusColors, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, debounce, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, getSystemReadinessServerErrorDetails, getTimeRangeDates, getTimeRangeLabel, isAPIClientError, restoreConsole, setupBrowserMocks, suppressKnownWarnings, validateEmail };
622
+ export { APIClientError, API_URL, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, PAGE_SIZE_DEFAULT, REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, ResourceStatusColors, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, buildQueryString, debounce, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, getSystemReadinessServerErrorDetails, getTimeRangeDates, getTimeRangeLabel, isAPIClientError, restoreConsole, setupBrowserMocks, suppressKnownWarnings, validateEmail };
605
623
  export type { SystemReadinessErrorDetails, TablerIcon };
@@ -1,5 +1,5 @@
1
- export { APIClientError, API_URL, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, PAGE_SIZE_DEFAULT, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, getSystemReadinessServerErrorDetails, isAPIClientError, restoreConsole, setupBrowserMocks, suppressKnownWarnings, validateEmail } from '../chunk-5ZK7K7YP.js';
2
- export { REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, debounce, getTimeRangeDates, getTimeRangeLabel } from '../chunk-Y6I3IC45.js';
3
- export { ResourceStatusColors } from '../chunk-5F3QGBEI.js';
4
- import '../chunk-TVTSASST.js';
1
+ export { APIClientError, API_URL, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, LIMIT_ACTIVITY_FEED, OAUTH_FLOW_TIMEOUT, PAGE_SIZE_DEFAULT, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, buildQueryString, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, getSystemReadinessServerErrorDetails, isAPIClientError, restoreConsole, setupBrowserMocks, suppressKnownWarnings, validateEmail } from '../chunk-DEZW7QDI.js';
2
+ export { REFETCH_INTERVAL_DASHBOARD, REFETCH_INTERVAL_REALTIME, REFETCH_INTERVAL_RUNNING, REFETCH_INTERVAL_RUNNING_FAST, SSE_CLOSE_GRACE_PERIOD, SSE_TOKEN_REFRESH_DELAY, WS_MAX_RETRIES_BEFORE_ERROR, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY, debounce, getTimeRangeDates, getTimeRangeLabel } from '../chunk-6XBZPKMI.js';
3
+ export { ResourceStatusColors } from '../chunk-7ZUXA2NW.js';
4
+ import '../chunk-34B3ACOZ.js';
5
5
  import '../chunk-I2KLQ2HA.js';