@elevasis/ui 2.68.0 → 2.70.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 (85) hide show
  1. package/dist/api/index.js +3 -3
  2. package/dist/app/index.d.ts +577 -367
  3. package/dist/app/index.js +10 -19
  4. package/dist/auth/index.d.ts +5 -0
  5. package/dist/auth/index.js +5 -5
  6. package/dist/charts/index.js +5 -5
  7. package/dist/{chunk-JC5W55J3.js → chunk-26BTE3Z4.js} +1 -1
  8. package/dist/{chunk-ZNKZMK2E.js → chunk-5C62IRKS.js} +5 -5
  9. package/dist/{chunk-ZGCWTWBD.js → chunk-6TT3FQEZ.js} +16218 -15769
  10. package/dist/{chunk-QYI5BZKM.js → chunk-AGX2CY2O.js} +1 -1
  11. package/dist/{chunk-UFTM5SZZ.js → chunk-AKANHRQ5.js} +9 -3
  12. package/dist/{chunk-NDHMZT2G.js → chunk-C75XWBYZ.js} +1 -1
  13. package/dist/{chunk-2MTP3H3A.js → chunk-CCZJ4OWY.js} +1 -1
  14. package/dist/{chunk-75NOC536.js → chunk-DUEGHF7A.js} +4 -4
  15. package/dist/{chunk-SIVUCZXQ.js → chunk-GJQF3S2Q.js} +1 -1
  16. package/dist/{chunk-ZWS3TCQR.js → chunk-GZADST64.js} +21 -108
  17. package/dist/{chunk-TYKAKJGW.js → chunk-JA2XDMAE.js} +1 -1
  18. package/dist/{chunk-76IVMVI3.js → chunk-LWYLZUUV.js} +3 -3
  19. package/dist/{chunk-WPIASV3H.js → chunk-LY3IKYTZ.js} +2 -2
  20. package/dist/{chunk-HJVPVS57.js → chunk-MFCV4JMQ.js} +5 -5
  21. package/dist/{chunk-L3HFJFYF.js → chunk-NM4A63KJ.js} +30 -48
  22. package/dist/{chunk-OOACTYRA.js → chunk-QDMIFD6F.js} +1 -1
  23. package/dist/{chunk-GBXTRSAU.js → chunk-SMH6SQQE.js} +1 -1
  24. package/dist/{chunk-TGPJNKDU.js → chunk-TJMZUL6E.js} +4 -4
  25. package/dist/{chunk-5NRJ2BLQ.js → chunk-VDX6DL7Z.js} +1 -1
  26. package/dist/{chunk-FK3K2VK2.js → chunk-XKUEO4HG.js} +10 -7
  27. package/dist/components/index.d.ts +1614 -256
  28. package/dist/components/index.js +25 -25
  29. package/dist/components/navigation/index.js +6 -6
  30. package/dist/features/auth/index.d.ts +457 -163
  31. package/dist/features/auth/index.js +7 -7
  32. package/dist/features/clients/index.d.ts +39 -1
  33. package/dist/features/clients/index.js +6 -5
  34. package/dist/features/content/index.css +659 -0
  35. package/dist/features/content/index.d.ts +1978 -0
  36. package/dist/features/content/index.js +2312 -0
  37. package/dist/features/crm/index.d.ts +584 -369
  38. package/dist/features/crm/index.js +7 -7
  39. package/dist/features/dashboard/index.d.ts +0 -6
  40. package/dist/features/dashboard/index.js +7 -7
  41. package/dist/features/delivery/index.css +149 -149
  42. package/dist/features/delivery/index.d.ts +457 -163
  43. package/dist/features/delivery/index.js +6 -6
  44. package/dist/features/knowledge/index.js +5 -5
  45. package/dist/features/lead-gen/index.d.ts +20 -91
  46. package/dist/features/lead-gen/index.js +7 -7
  47. package/dist/features/monitoring/index.css +149 -149
  48. package/dist/features/monitoring/index.js +8 -8
  49. package/dist/features/monitoring/requests/index.js +7 -12
  50. package/dist/features/operations/index.d.ts +0 -84
  51. package/dist/features/operations/index.js +10 -10
  52. package/dist/features/settings/index.d.ts +457 -163
  53. package/dist/features/settings/index.js +7 -7
  54. package/dist/hooks/access/index.d.ts +5 -0
  55. package/dist/hooks/access/index.js +5 -5
  56. package/dist/hooks/delivery/index.d.ts +457 -163
  57. package/dist/hooks/delivery/index.js +2 -2
  58. package/dist/hooks/index.css +149 -149
  59. package/dist/hooks/index.d.ts +2128 -233
  60. package/dist/hooks/index.js +5 -5
  61. package/dist/hooks/operations/command-view/utils/transformCommandViewData.d.ts +0 -6
  62. package/dist/hooks/published.css +149 -149
  63. package/dist/hooks/published.d.ts +2128 -233
  64. package/dist/hooks/published.js +5 -5
  65. package/dist/initialization/index.d.ts +464 -164
  66. package/dist/knowledge/index.d.ts +4 -88
  67. package/dist/knowledge/index.js +3211 -3201
  68. package/dist/{knowledge-search-index-6EZNBNSR.js → knowledge-search-index-LP2WVSQX.js} +689 -695
  69. package/dist/layout/index.js +8 -8
  70. package/dist/organization/index.d.ts +7 -1
  71. package/dist/profile/index.d.ts +457 -163
  72. package/dist/provider/index.d.ts +577 -368
  73. package/dist/provider/index.js +5 -5
  74. package/dist/provider/published.d.ts +577 -368
  75. package/dist/provider/published.js +5 -5
  76. package/dist/supabase/index.d.ts +906 -339
  77. package/dist/test-utils/index.d.ts +10 -2
  78. package/dist/test-utils/index.js +39 -10
  79. package/dist/types/index.d.ts +464 -170
  80. package/dist/utils/index.d.ts +0 -6
  81. package/dist/utils/index.js +1 -1
  82. package/dist/vite/index.js +2 -2
  83. package/dist/vite-plugin-knowledge/index.js +1 -1
  84. package/package.json +9 -5
  85. package/src/features/README.md +28 -28
@@ -154,7 +154,6 @@ interface OrgOsRouteContractSystem {
154
154
  path?: string | null;
155
155
  } | null;
156
156
  enabled?: boolean;
157
- devOnly?: boolean;
158
157
  }
159
158
  type OrgOsRouteContractSystemsDomain = Record<string, OrgOsRouteContractSystem> | {
160
159
  systems: readonly OrgOsRouteContractSystem[];
@@ -175,8 +174,17 @@ interface OrgOsUiRouteContractOptions {
175
174
  routeTreeSource?: string;
176
175
  routePaths?: Iterable<string>;
177
176
  mode?: OrgOsUiRouteContractMode;
177
+ /**
178
+ * Route paths whose route file — or an ancestor layout route — wraps the page
179
+ * in an `AccessGuard`. Supply this to enable the `unguarded-beta-route` check.
180
+ *
181
+ * Omitted means the beta-guard check does not run. Hiding a System from
182
+ * navigation (`lifecycle: 'beta'`) does not make its route unreachable, so a
183
+ * caller that can resolve route files should always pass this.
184
+ */
185
+ guardedRoutePaths?: Iterable<string>;
178
186
  }
179
- type OrgOsUiRouteContractIssueKind = 'missing-system' | 'missing-route';
187
+ type OrgOsUiRouteContractIssueKind = 'missing-system' | 'missing-route' | 'unguarded-beta-route';
180
188
  interface OrgOsUiRouteContractIssue {
181
189
  target: OrgOsUiRouteContractTarget;
182
190
  kind: OrgOsUiRouteContractIssueKind;
@@ -2,10 +2,10 @@ 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-JC5W55J3.js';
6
- import { ApiClientProvider } from '../chunk-5NRJ2BLQ.js';
5
+ import '../chunk-26BTE3Z4.js';
6
+ import { ApiClientProvider } from '../chunk-VDX6DL7Z.js';
7
7
  import '../chunk-DD3CCMCZ.js';
8
- import '../chunk-L3HFJFYF.js';
8
+ import '../chunk-NM4A63KJ.js';
9
9
  import '../chunk-Y6I3IC45.js';
10
10
  import '../chunk-6SSQGWK7.js';
11
11
  import { ElevasisServiceProvider } from '../chunk-BI5VDO2K.js';
@@ -178,26 +178,33 @@ function ownsOrgOsSystem(ownerSystemId, systemId) {
178
178
  function getOrgOsRouteContractSystems(organizationModel) {
179
179
  const { systems } = organizationModel;
180
180
  const arraySystems = systems.systems;
181
- if (Array.isArray(arraySystems)) return arraySystems;
181
+ if (Array.isArray(arraySystems)) {
182
+ return arraySystems.map((system) => ({
183
+ ...system,
184
+ betaByAncestry: system.lifecycle === "beta"
185
+ }));
186
+ }
182
187
  const result = [];
183
- const visit = (entries, prefix = "") => {
188
+ const visit = (entries, prefix = "", ancestorBeta = false) => {
184
189
  for (const [key, system] of Object.entries(entries)) {
185
190
  const id = prefix ? `${prefix}.${key}` : system.id || key;
186
- result.push({ ...system, id });
187
- if (system.systems) visit(system.systems, id);
188
- if (system.subsystems) visit(system.subsystems, id);
191
+ const betaByAncestry = ancestorBeta || system.lifecycle === "beta";
192
+ result.push({ ...system, id, betaByAncestry });
193
+ if (system.systems) visit(system.systems, id, betaByAncestry);
194
+ if (system.subsystems) visit(system.subsystems, id, betaByAncestry);
189
195
  }
190
196
  };
191
197
  visit(systems);
192
198
  return result;
193
199
  }
194
200
  function collectOrgOsUiRouteContractIssues(options) {
195
- const { target, organizationModel, mode = "production" } = options;
201
+ const { target, organizationModel } = options;
196
202
  const routePaths = options.routePaths ?? (options.routeTreeSource ? extractOrgOsRouteTreeFullPaths(options.routeTreeSource) : void 0);
197
203
  if (!routePaths) {
198
204
  throw new Error("Org OS UI route contract requires either routeTreeSource or routePaths.");
199
205
  }
200
206
  const normalizedRoutePaths = new Set([...routePaths].map(normalizeOrgOsRoutePath));
207
+ const normalizedGuardedPaths = options.guardedRoutePaths ? new Set([...options.guardedRoutePaths].map(normalizeOrgOsRoutePath)) : void 0;
201
208
  const systems = getOrgOsRouteContractSystems(organizationModel);
202
209
  const modelSystemIds = new Set(systems.map((system) => system.id));
203
210
  const issues = [];
@@ -215,7 +222,6 @@ function collectOrgOsUiRouteContractIssues(options) {
215
222
  const path = system.ui?.path ?? system.path;
216
223
  if (!path || system.enabled === false) continue;
217
224
  if (system.lifecycle === "archived" || system.lifecycle === "deprecated") continue;
218
- if (system.devOnly && mode === "production") continue;
219
225
  const ownerSystemId = target.systemIds.find((candidate) => ownsOrgOsSystem(candidate, system.id));
220
226
  if (!ownerSystemId) continue;
221
227
  checkedPathCount += 1;
@@ -228,6 +234,16 @@ function collectOrgOsUiRouteContractIssues(options) {
228
234
  ownerSystemId,
229
235
  path: normalizedPath
230
236
  });
237
+ continue;
238
+ }
239
+ if (normalizedGuardedPaths && system.betaByAncestry && !normalizedGuardedPaths.has(normalizedPath)) {
240
+ issues.push({
241
+ target,
242
+ kind: "unguarded-beta-route",
243
+ systemId: system.id,
244
+ ownerSystemId,
245
+ path: normalizedPath
246
+ });
231
247
  }
232
248
  }
233
249
  return { issues, checkedPathCount };
@@ -241,6 +257,19 @@ function formatOrgOsUiRouteContractIssue(issue) {
241
257
  `- If it should not ship, remove that SystemModule from ${issue.target.shellSource}.`
242
258
  ].join("\n");
243
259
  }
260
+ if (issue.kind === "unguarded-beta-route") {
261
+ return [
262
+ `[unguarded-beta-route] System "${issue.systemId}" is lifecycle "beta" (directly or via an ancestor) and routes to "${issue.path}", but neither that route file nor an ancestor layout route wraps it in an AccessGuard.`,
263
+ `Owner SystemModule: ${issue.ownerSystemId}`,
264
+ "A beta System is hidden from navigation, which is not the same as unreachable \u2014 the route still answers a direct URL.",
265
+ "Fix one of:",
266
+ // Phrased in prose rather than as a guard JSX tag on purpose. The
267
+ // access-key drift scanner in @repo/core matches that tag shape anywhere
268
+ // in a file and would read this message as a real runtime access key.
269
+ `- Wrap the route (or its layout route) in an AccessGuard whose access key is "${issue.systemId}".`,
270
+ `- Or change the System's lifecycle in ${issue.target.orgModelSource} if it is actually meant to be publicly reachable.`
271
+ ].join("\n");
272
+ }
244
273
  return [
245
274
  `[missing-route] System "${issue.systemId}" points to "${issue.path}", but ${issue.target.routeTreePath} does not contain that path.`,
246
275
  `Owner SystemModule: ${issue.ownerSystemId}`,