@stratum-hq/react 0.2.0 → 0.2.2

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 (54) hide show
  1. package/dist/components/ConfigDriftIndicator.d.ts +9 -0
  2. package/dist/components/ConfigDriftIndicator.d.ts.map +1 -0
  3. package/dist/components/ConfigDriftIndicator.js +24 -0
  4. package/dist/components/ConfigDriftIndicator.js.map +1 -0
  5. package/dist/components/DraggableTenantTree.d.ts +18 -11
  6. package/dist/components/DraggableTenantTree.d.ts.map +1 -1
  7. package/dist/components/DraggableTenantTree.js +99 -37
  8. package/dist/components/DraggableTenantTree.js.map +1 -1
  9. package/dist/components/EmptyState.d.ts +12 -0
  10. package/dist/components/EmptyState.d.ts.map +1 -0
  11. package/dist/components/EmptyState.js +5 -0
  12. package/dist/components/EmptyState.js.map +1 -0
  13. package/dist/components/TenantHealthCard.d.ts +15 -0
  14. package/dist/components/TenantHealthCard.d.ts.map +1 -0
  15. package/dist/components/TenantHealthCard.js +12 -0
  16. package/dist/components/TenantHealthCard.js.map +1 -0
  17. package/dist/components/TenantThemeProvider.d.ts +14 -0
  18. package/dist/components/TenantThemeProvider.d.ts.map +1 -0
  19. package/dist/components/TenantThemeProvider.js +19 -0
  20. package/dist/components/TenantThemeProvider.js.map +1 -0
  21. package/dist/index.d.ts +8 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/styles/default.css +1143 -0
  26. package/package.json +2 -1
  27. package/dist/components/ConfigEditor.stories.d.ts +0 -35
  28. package/dist/components/ConfigEditor.stories.d.ts.map +0 -1
  29. package/dist/components/ConfigEditor.stories.js +0 -73
  30. package/dist/components/ConfigEditor.stories.js.map +0 -1
  31. package/dist/components/PermissionEditor.stories.d.ts +0 -34
  32. package/dist/components/PermissionEditor.stories.d.ts.map +0 -1
  33. package/dist/components/PermissionEditor.stories.js +0 -90
  34. package/dist/components/PermissionEditor.stories.js.map +0 -1
  35. package/dist/components/Skeleton.stories.d.ts +0 -46
  36. package/dist/components/Skeleton.stories.d.ts.map +0 -1
  37. package/dist/components/Skeleton.stories.js +0 -125
  38. package/dist/components/Skeleton.stories.js.map +0 -1
  39. package/dist/components/TenantSwitcher.stories.d.ts +0 -30
  40. package/dist/components/TenantSwitcher.stories.d.ts.map +0 -1
  41. package/dist/components/TenantSwitcher.stories.js +0 -76
  42. package/dist/components/TenantSwitcher.stories.js.map +0 -1
  43. package/dist/components/TenantTree.stories.d.ts +0 -28
  44. package/dist/components/TenantTree.stories.d.ts.map +0 -1
  45. package/dist/components/TenantTree.stories.js +0 -71
  46. package/dist/components/TenantTree.stories.js.map +0 -1
  47. package/dist/components/Toast.stories.d.ts +0 -36
  48. package/dist/components/Toast.stories.d.ts.map +0 -1
  49. package/dist/components/Toast.stories.js +0 -105
  50. package/dist/components/Toast.stories.js.map +0 -1
  51. package/dist/components/storybook-helpers.d.ts +0 -96
  52. package/dist/components/storybook-helpers.d.ts.map +0 -1
  53. package/dist/components/storybook-helpers.js +0 -473
  54. package/dist/components/storybook-helpers.js.map +0 -1
@@ -1,473 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * Shared mock data and decorator for Storybook stories.
4
- *
5
- * All styled components depend on StratumProvider context via useStratum().
6
- * This module provides a MockStratumProvider that injects controlled data
7
- * into the real StratumContext so all hooks work without a live API.
8
- */
9
- import { useState, useCallback } from "react";
10
- import { StratumContext } from "../provider.js";
11
- // ---------------------------------------------------------------------------
12
- // Mock Tenant Data
13
- // ---------------------------------------------------------------------------
14
- const now = new Date().toISOString();
15
- export const mockTenants = [
16
- {
17
- id: "00000000-0000-0000-0000-000000000001",
18
- parent_id: null,
19
- ancestry_path: "/",
20
- depth: 0,
21
- name: "Acme Corp",
22
- slug: "acme_corp",
23
- config: {},
24
- metadata: {},
25
- isolation_strategy: "SHARED_RLS",
26
- status: "active",
27
- deleted_at: null,
28
- created_at: now,
29
- updated_at: now,
30
- },
31
- {
32
- id: "00000000-0000-0000-0000-000000000002",
33
- parent_id: "00000000-0000-0000-0000-000000000001",
34
- ancestry_path: "/acme_corp",
35
- depth: 1,
36
- name: "Acme MSSP",
37
- slug: "acme_mssp",
38
- config: {},
39
- metadata: {},
40
- isolation_strategy: "SHARED_RLS",
41
- status: "active",
42
- deleted_at: null,
43
- created_at: now,
44
- updated_at: now,
45
- },
46
- {
47
- id: "00000000-0000-0000-0000-000000000003",
48
- parent_id: "00000000-0000-0000-0000-000000000002",
49
- ancestry_path: "/acme_corp/acme_mssp",
50
- depth: 2,
51
- name: "CyberShield MSP",
52
- slug: "cybershield_msp",
53
- config: {},
54
- metadata: {},
55
- isolation_strategy: "SHARED_RLS",
56
- status: "active",
57
- deleted_at: null,
58
- created_at: now,
59
- updated_at: now,
60
- },
61
- {
62
- id: "00000000-0000-0000-0000-000000000004",
63
- parent_id: "00000000-0000-0000-0000-000000000003",
64
- ancestry_path: "/acme_corp/acme_mssp/cybershield_msp",
65
- depth: 3,
66
- name: "Globex Industries",
67
- slug: "globex_industries",
68
- config: {},
69
- metadata: {},
70
- isolation_strategy: "SHARED_RLS",
71
- status: "active",
72
- deleted_at: null,
73
- created_at: now,
74
- updated_at: now,
75
- },
76
- {
77
- id: "00000000-0000-0000-0000-000000000005",
78
- parent_id: "00000000-0000-0000-0000-000000000002",
79
- ancestry_path: "/acme_corp/acme_mssp",
80
- depth: 2,
81
- name: "Northwind Security",
82
- slug: "northwind_security",
83
- config: {},
84
- metadata: {},
85
- isolation_strategy: "SCHEMA_PER_TENANT",
86
- status: "active",
87
- deleted_at: null,
88
- created_at: now,
89
- updated_at: now,
90
- },
91
- {
92
- id: "00000000-0000-0000-0000-000000000006",
93
- parent_id: "00000000-0000-0000-0000-000000000001",
94
- ancestry_path: "/acme_corp",
95
- depth: 1,
96
- name: "Acme Direct",
97
- slug: "acme_direct",
98
- config: {},
99
- metadata: {},
100
- isolation_strategy: "SHARED_RLS",
101
- status: "active",
102
- deleted_at: null,
103
- created_at: now,
104
- updated_at: now,
105
- },
106
- {
107
- id: "00000000-0000-0000-0000-000000000007",
108
- parent_id: "00000000-0000-0000-0000-000000000006",
109
- ancestry_path: "/acme_corp/acme_direct",
110
- depth: 2,
111
- name: "Wayne Enterprises",
112
- slug: "wayne_enterprises",
113
- config: {},
114
- metadata: {},
115
- isolation_strategy: "DB_PER_TENANT",
116
- status: "active",
117
- deleted_at: null,
118
- created_at: now,
119
- updated_at: now,
120
- },
121
- {
122
- id: "00000000-0000-0000-0000-000000000008",
123
- parent_id: "00000000-0000-0000-0000-000000000003",
124
- ancestry_path: "/acme_corp/acme_mssp/cybershield_msp",
125
- depth: 3,
126
- name: "Initech LLC",
127
- slug: "initech_llc",
128
- config: {},
129
- metadata: {},
130
- isolation_strategy: "SHARED_RLS",
131
- status: "archived",
132
- deleted_at: null,
133
- created_at: now,
134
- updated_at: now,
135
- },
136
- ];
137
- /** Generate a large list of tenants for stress-testing. */
138
- export function generateManyTenants(count) {
139
- const base = [...mockTenants];
140
- for (let i = 9; i <= count; i++) {
141
- const parentIdx = Math.floor(Math.random() * Math.min(i - 1, 6)) + 1;
142
- const parentId = `00000000-0000-0000-0000-${String(parentIdx).padStart(12, "0")}`;
143
- base.push({
144
- id: `00000000-0000-0000-0000-${String(i).padStart(12, "0")}`,
145
- parent_id: parentId,
146
- ancestry_path: "/generated",
147
- depth: 2,
148
- name: `Tenant ${i}`,
149
- slug: `tenant_${i}`,
150
- config: {},
151
- metadata: {},
152
- isolation_strategy: "SHARED_RLS",
153
- status: "active",
154
- deleted_at: null,
155
- created_at: now,
156
- updated_at: now,
157
- });
158
- }
159
- return base;
160
- }
161
- // Deep hierarchy (5 levels)
162
- export const deepHierarchyTenants = [
163
- {
164
- id: "d0000000-0000-0000-0000-000000000001",
165
- parent_id: null,
166
- ancestry_path: "/",
167
- depth: 0,
168
- name: "Global Platform",
169
- slug: "global_platform",
170
- config: {},
171
- metadata: {},
172
- isolation_strategy: "SHARED_RLS",
173
- status: "active",
174
- deleted_at: null,
175
- created_at: now,
176
- updated_at: now,
177
- },
178
- {
179
- id: "d0000000-0000-0000-0000-000000000002",
180
- parent_id: "d0000000-0000-0000-0000-000000000001",
181
- ancestry_path: "/global_platform",
182
- depth: 1,
183
- name: "North America Region",
184
- slug: "na_region",
185
- config: {},
186
- metadata: {},
187
- isolation_strategy: "SHARED_RLS",
188
- status: "active",
189
- deleted_at: null,
190
- created_at: now,
191
- updated_at: now,
192
- },
193
- {
194
- id: "d0000000-0000-0000-0000-000000000003",
195
- parent_id: "d0000000-0000-0000-0000-000000000002",
196
- ancestry_path: "/global_platform/na_region",
197
- depth: 2,
198
- name: "SecureNet MSSP",
199
- slug: "securenet_mssp",
200
- config: {},
201
- metadata: {},
202
- isolation_strategy: "SHARED_RLS",
203
- status: "active",
204
- deleted_at: null,
205
- created_at: now,
206
- updated_at: now,
207
- },
208
- {
209
- id: "d0000000-0000-0000-0000-000000000004",
210
- parent_id: "d0000000-0000-0000-0000-000000000003",
211
- ancestry_path: "/global_platform/na_region/securenet_mssp",
212
- depth: 3,
213
- name: "Metro MSP Group",
214
- slug: "metro_msp",
215
- config: {},
216
- metadata: {},
217
- isolation_strategy: "SHARED_RLS",
218
- status: "active",
219
- deleted_at: null,
220
- created_at: now,
221
- updated_at: now,
222
- },
223
- {
224
- id: "d0000000-0000-0000-0000-000000000005",
225
- parent_id: "d0000000-0000-0000-0000-000000000004",
226
- ancestry_path: "/global_platform/na_region/securenet_mssp/metro_msp",
227
- depth: 4,
228
- name: "Downtown Office Client",
229
- slug: "downtown_client",
230
- config: {},
231
- metadata: {},
232
- isolation_strategy: "SHARED_RLS",
233
- status: "active",
234
- deleted_at: null,
235
- created_at: now,
236
- updated_at: now,
237
- },
238
- ];
239
- // Single root node
240
- export const singleRootTenant = [
241
- {
242
- id: "s0000000-0000-0000-0000-000000000001",
243
- parent_id: null,
244
- ancestry_path: "/",
245
- depth: 0,
246
- name: "Standalone Tenant",
247
- slug: "standalone",
248
- config: {},
249
- metadata: {},
250
- isolation_strategy: "DB_PER_TENANT",
251
- status: "active",
252
- deleted_at: null,
253
- created_at: now,
254
- updated_at: now,
255
- },
256
- ];
257
- // ---------------------------------------------------------------------------
258
- // Mock Config Data
259
- // ---------------------------------------------------------------------------
260
- export const mockConfigEntries = [
261
- {
262
- key: "app.theme",
263
- value: "dark",
264
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
265
- inherited: true,
266
- locked: false,
267
- },
268
- {
269
- key: "feature.sso_enabled",
270
- value: true,
271
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
272
- inherited: true,
273
- locked: true,
274
- },
275
- {
276
- key: "billing.plan",
277
- value: "enterprise",
278
- source_tenant_id: "00000000-0000-0000-0000-000000000003",
279
- inherited: false,
280
- locked: false,
281
- },
282
- {
283
- key: "security.mfa_required",
284
- value: true,
285
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
286
- inherited: true,
287
- locked: true,
288
- },
289
- {
290
- key: "notifications.email_digest",
291
- value: "weekly",
292
- source_tenant_id: "00000000-0000-0000-0000-000000000003",
293
- inherited: false,
294
- locked: false,
295
- },
296
- {
297
- key: "api.rate_limit",
298
- value: 1000,
299
- source_tenant_id: "00000000-0000-0000-0000-000000000002",
300
- inherited: true,
301
- locked: false,
302
- },
303
- {
304
- key: "storage.max_upload_mb",
305
- value: 50,
306
- source_tenant_id: "00000000-0000-0000-0000-000000000003",
307
- inherited: false,
308
- locked: false,
309
- },
310
- ];
311
- export const mockSensitiveConfigEntries = [
312
- ...mockConfigEntries,
313
- {
314
- key: "integrations.slack_webhook_url",
315
- value: "https://hooks.slack.com/services/T00000/B00000/XXXX",
316
- source_tenant_id: "00000000-0000-0000-0000-000000000003",
317
- inherited: false,
318
- locked: false,
319
- },
320
- {
321
- key: "integrations.stripe_secret_key",
322
- value: "sk_live_51Abc...redacted",
323
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
324
- inherited: true,
325
- locked: true,
326
- },
327
- ];
328
- export const mockLockedConfigEntries = mockConfigEntries.map((entry) => ({
329
- ...entry,
330
- locked: true,
331
- inherited: true,
332
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
333
- }));
334
- // ---------------------------------------------------------------------------
335
- // Mock Permission Data
336
- // ---------------------------------------------------------------------------
337
- export const mockPermissions = [
338
- {
339
- policy_id: "pol-001",
340
- key: "tenant.manage",
341
- value: true,
342
- mode: "LOCKED",
343
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
344
- locked: true,
345
- delegated: false,
346
- },
347
- {
348
- policy_id: "pol-002",
349
- key: "config.write",
350
- value: true,
351
- mode: "INHERITED",
352
- source_tenant_id: "00000000-0000-0000-0000-000000000002",
353
- locked: false,
354
- delegated: false,
355
- },
356
- {
357
- policy_id: "pol-003",
358
- key: "billing.view",
359
- value: true,
360
- mode: "DELEGATED",
361
- source_tenant_id: "00000000-0000-0000-0000-000000000003",
362
- locked: false,
363
- delegated: true,
364
- },
365
- {
366
- policy_id: "pol-004",
367
- key: "users.invite",
368
- value: true,
369
- mode: "INHERITED",
370
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
371
- locked: false,
372
- delegated: false,
373
- },
374
- {
375
- policy_id: "pol-005",
376
- key: "audit.read",
377
- value: true,
378
- mode: "LOCKED",
379
- source_tenant_id: "00000000-0000-0000-0000-000000000001",
380
- locked: true,
381
- delegated: false,
382
- },
383
- {
384
- policy_id: "pol-006",
385
- key: "webhooks.manage",
386
- value: true,
387
- mode: "DELEGATED",
388
- source_tenant_id: "00000000-0000-0000-0000-000000000003",
389
- locked: false,
390
- delegated: true,
391
- },
392
- ];
393
- /**
394
- * Wraps children with the real StratumContext populated by mock data.
395
- * All real hooks (useTenant, useTenantTree, useConfig, usePermissions)
396
- * will read from this context and receive controlled responses via apiCall.
397
- */
398
- export function MockStratumProvider({ tenants = mockTenants, configEntries = mockConfigEntries, permissions = mockPermissions, initialTenantId, loading: forceLoading = false, children, }) {
399
- const [currentTenant, setCurrentTenant] = useState(initialTenantId
400
- ? tenants.find((t) => t.id === initialTenantId) ?? null
401
- : tenants[0] ?? null);
402
- const [loading, setLoading] = useState(forceLoading);
403
- const switchTenant = useCallback(async (tenantId) => {
404
- setLoading(true);
405
- await new Promise((resolve) => setTimeout(resolve, 200));
406
- const found = tenants.find((t) => t.id === tenantId);
407
- if (found)
408
- setCurrentTenant(found);
409
- setLoading(false);
410
- }, [tenants]);
411
- const apiCall = useCallback(async (path, _options) => {
412
- await new Promise((resolve) => setTimeout(resolve, 50));
413
- // GET /api/v1/tenants
414
- if (path === "/api/v1/tenants") {
415
- return { data: tenants };
416
- }
417
- // GET /api/v1/tenants/:id/descendants
418
- if (path.match(/\/api\/v1\/tenants\/[^/]+\/descendants/)) {
419
- return tenants;
420
- }
421
- // GET /api/v1/tenants/:id/config (not config/:key)
422
- if (path.match(/\/api\/v1\/tenants\/[^/]+\/config$/)) {
423
- const configMap = {};
424
- for (const entry of configEntries) {
425
- configMap[entry.key] = entry;
426
- }
427
- return configMap;
428
- }
429
- // PUT/DELETE config operations
430
- if (path.match(/\/api\/v1\/tenants\/[^/]+\/config\//)) {
431
- return {};
432
- }
433
- // GET /api/v1/tenants/:id/permissions
434
- if (path.match(/\/api\/v1\/tenants\/[^/]+\/permissions$/)) {
435
- const permMap = {};
436
- for (const perm of permissions) {
437
- permMap[perm.key] = perm;
438
- }
439
- return permMap;
440
- }
441
- // POST/DELETE permission operations
442
- if (path.match(/\/api\/v1\/tenants\/[^/]+\/permissions\//)) {
443
- return {};
444
- }
445
- // GET /api/v1/tenants/:id
446
- if (path.match(/\/api\/v1\/tenants\/[^/]+$/)) {
447
- const id = path.split("/").pop();
448
- const tenant = tenants.find((t) => t.id === id);
449
- if (tenant)
450
- return tenant;
451
- throw new Error("Tenant not found");
452
- }
453
- return {};
454
- }, [tenants, configEntries, permissions]);
455
- const noopToast = {
456
- success: (_msg) => "",
457
- error: (_msg) => "",
458
- warning: (_msg) => "",
459
- info: (_msg) => "",
460
- };
461
- const value = {
462
- currentTenant,
463
- tenantContext: null,
464
- loading,
465
- error: null,
466
- switchTenant,
467
- apiCall,
468
- messages: {},
469
- toast: noopToast,
470
- };
471
- return (_jsx(StratumContext.Provider, { value: value, children: children }));
472
- }
473
- //# sourceMappingURL=storybook-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storybook-helpers.js","sourceRoot":"","sources":["../../src/components/storybook-helpers.tsx"],"names":[],"mappings":"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"}