@braidlabs/console 0.3.0 → 0.4.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 (60) hide show
  1. package/README.md +34 -10
  2. package/package.json +10 -4
  3. package/src/app/auth.d.ts +46 -0
  4. package/src/app/auth.js +80 -0
  5. package/src/app/auth.js.map +1 -0
  6. package/src/app/console-app.d.ts +8 -6
  7. package/src/app/console-app.js +91 -20
  8. package/src/app/console-app.js.map +1 -1
  9. package/src/app/main.js +25 -2
  10. package/src/app/main.js.map +1 -1
  11. package/src/app/routes.d.ts +14 -0
  12. package/src/app/routes.js +23 -0
  13. package/src/app/routes.js.map +1 -0
  14. package/src/index.d.ts +15 -2
  15. package/src/index.js +10 -2
  16. package/src/index.js.map +1 -1
  17. package/src/lib/client.d.ts +52 -1
  18. package/src/lib/client.js +48 -0
  19. package/src/lib/client.js.map +1 -1
  20. package/src/lib/draft.d.ts +1 -1
  21. package/src/lib/draft.js +2 -2
  22. package/src/lib/draft.js.map +1 -1
  23. package/src/lib/empty-state.d.ts +15 -0
  24. package/src/lib/empty-state.js +38 -0
  25. package/src/lib/empty-state.js.map +1 -0
  26. package/src/lib/history-panel.d.ts +19 -0
  27. package/src/lib/history-panel.js +85 -0
  28. package/src/lib/history-panel.js.map +1 -0
  29. package/src/lib/ownership.d.ts +15 -0
  30. package/src/lib/ownership.js +21 -0
  31. package/src/lib/ownership.js.map +1 -0
  32. package/src/lib/query.d.ts +47 -0
  33. package/src/lib/query.js +121 -0
  34. package/src/lib/query.js.map +1 -0
  35. package/src/lib/registry-console.d.ts +13 -2
  36. package/src/lib/registry-console.js +15 -11
  37. package/src/lib/registry-console.js.map +1 -1
  38. package/src/lib/registry-editor.js +20 -7
  39. package/src/lib/registry-editor.js.map +1 -1
  40. package/src/lib/shell-codegen.d.ts +28 -0
  41. package/src/lib/shell-codegen.js +316 -0
  42. package/src/lib/shell-codegen.js.map +1 -0
  43. package/src/lib/shells-panel.d.ts +43 -0
  44. package/src/lib/shells-panel.js +307 -0
  45. package/src/lib/shells-panel.js.map +1 -0
  46. package/src/lib/styles.d.ts +1 -1
  47. package/src/lib/styles.js +72 -4
  48. package/src/lib/styles.js.map +1 -1
  49. package/src/lib/tag-chip.d.ts +8 -0
  50. package/src/lib/tag-chip.js +12 -0
  51. package/src/lib/tag-chip.js.map +1 -0
  52. package/src/lib/tags.d.ts +10 -0
  53. package/src/lib/tags.js +53 -0
  54. package/src/lib/tags.js.map +1 -0
  55. package/src/lib/topology-graph.d.ts +5 -2
  56. package/src/lib/topology-graph.js +17 -8
  57. package/src/lib/topology-graph.js.map +1 -1
  58. package/src/lib/topology.d.ts +18 -3
  59. package/src/lib/topology.js +42 -3
  60. package/src/lib/topology.js.map +1 -1
@@ -0,0 +1,316 @@
1
+ import { formatAreas, isSafeTrackList, parseAreas } from '@braidlabs/registry';
2
+ export const SHELL_TARGETS = [
3
+ { id: 'react', label: 'React' },
4
+ { id: 'angular', label: 'Angular' },
5
+ { id: 'angular-ssr', label: 'Angular SSR' },
6
+ { id: 'vanilla', label: 'Plain JS' },
7
+ ];
8
+ export function shellCode(shell, fragments, target) {
9
+ const byId = new Map(fragments.map((fragment) => [fragment.id, fragment]));
10
+ const used = new Set();
11
+ const routes = shell.routes.map((route, index) => describeRoute(shell, route, uniqueStem(shell, route, index, used), byId));
12
+ switch (target) {
13
+ case 'react':
14
+ return [reactRoutes(shell, routes), layoutCss(routes), indexHtml(shell, '<div id="root"></div>')];
15
+ case 'angular':
16
+ return [...angularFiles(shell, routes), indexHtml(shell, '<app-root></app-root>')];
17
+ case 'angular-ssr':
18
+ return [...angularFiles(shell, routes), angularServer(shell), indexHtml(shell, '<app-root></app-root>')];
19
+ case 'vanilla':
20
+ return routes.map((route) => vanillaPage(shell, route));
21
+ }
22
+ }
23
+ /** `/orders/*` → `<shell>-orders`, `/` → `<shell>-root`; a collision gets its route index appended. */
24
+ function uniqueStem(shell, route, index, used) {
25
+ const base = `${ident(shell.id)}-${ident(route.path) || 'root'}`;
26
+ let stem = base;
27
+ for (let n = index; used.has(stem); n += 1)
28
+ stem = `${base}-${n}`;
29
+ used.add(stem);
30
+ return stem;
31
+ }
32
+ function describeRoute(shell, route, stem, byId) {
33
+ const parsed = parseAreas(route.layout.areas);
34
+ const names = parsed.areas.map((area) => area.name);
35
+ const slots = Object.entries(route.slots ?? {})
36
+ .filter(([area]) => names.includes(area))
37
+ .map(([area, fragment]) => {
38
+ const manifest = byId.get(fragment);
39
+ // Only widgets (bound: false) take a src; a screen follows the host's own location.
40
+ const src = manifest?.bound === false ? manifest.src : undefined;
41
+ return { area, fragment, ...(src ? { src } : {}) };
42
+ });
43
+ return {
44
+ path: route.path,
45
+ stem,
46
+ componentName: `${pascal(stem)}Layout`,
47
+ areaRows: parsed.errors.length > 0 ? [] : formatAreas(parsed.cells),
48
+ ...trackProps(route.layout),
49
+ slots,
50
+ empty: names.filter((name) => !slots.some((slot) => slot.area === name)),
51
+ };
52
+ }
53
+ function trackProps(layout) {
54
+ const safe = (value) => (value !== undefined && isSafeTrackList(value) ? value.trim() : undefined);
55
+ const columns = safe(layout.columns);
56
+ const rows = safe(layout.rows);
57
+ const gap = safe(layout.gap);
58
+ return { ...(columns ? { columns } : {}), ...(rows ? { rows } : {}), ...(gap ? { gap } : {}) };
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Shared pieces
62
+ // ---------------------------------------------------------------------------
63
+ function cssRule(route, selector) {
64
+ return [
65
+ `${selector} {`,
66
+ ` display: grid;`,
67
+ ...(route.gap ? [` gap: ${route.gap};`] : []),
68
+ ...(route.columns ? [` grid-template-columns: ${route.columns};`] : []),
69
+ ...(route.rows ? [` grid-template-rows: ${route.rows};`] : []),
70
+ ` grid-template-areas:`,
71
+ ...route.areaRows.map((row, index) => ` ${row}${index === route.areaRows.length - 1 ? ';' : ''}`),
72
+ `}`,
73
+ ];
74
+ }
75
+ function layoutCss(routes) {
76
+ return {
77
+ name: 'shell-layout.css',
78
+ language: 'css',
79
+ code: routes.flatMap((route) => [`/* ${commentSafe(route.path)} */`, ...cssRule(route, `.${route.stem}`), '']).join('\n').trimEnd(),
80
+ };
81
+ }
82
+ function headLines(shell) {
83
+ const head = shell.head ?? {};
84
+ const ownViewport = (head.meta ?? []).some((meta) => meta.name === 'viewport');
85
+ return [
86
+ `<meta charset="utf-8">`,
87
+ ...(ownViewport ? [] : [`<meta name="viewport" content="width=device-width, initial-scale=1">`]),
88
+ ...(head.title ? [`<title>${escapeHtml(head.title)}</title>`] : []),
89
+ ...(head.meta ?? [])
90
+ .filter((meta) => meta.name ?? meta.property)
91
+ .map((meta) => meta.property
92
+ ? `<meta property="${escapeHtml(meta.property)}" content="${escapeHtml(meta.content)}">`
93
+ : `<meta name="${escapeHtml(meta.name ?? '')}" content="${escapeHtml(meta.content)}">`),
94
+ ...(head.stylesheets ?? []).map((sheet) => `<link rel="stylesheet" href="${escapeHtml(sheet.href)}"${sheet.integrity ? ` integrity="${escapeHtml(sheet.integrity)}" crossorigin="anonymous"` : ''}>`),
95
+ ...(head.scripts ?? []).map((script) => {
96
+ const attrs = [
97
+ ...(script.type === 'module' ? [`type="module"`] : []),
98
+ `src="${escapeHtml(script.src)}"`,
99
+ ...(script.integrity ? [`integrity="${escapeHtml(script.integrity)}"`, `crossorigin="anonymous"`] : []),
100
+ ...(script.async ? ['async'] : []),
101
+ ...(script.defer ? ['defer'] : []),
102
+ ];
103
+ return `<script ${attrs.join(' ')}></script>`;
104
+ }),
105
+ ];
106
+ }
107
+ function indexHtml(shell, body) {
108
+ return {
109
+ name: 'index.html',
110
+ language: 'html',
111
+ code: [
112
+ `<!doctype html>`,
113
+ `<html lang="en">`,
114
+ `<head>`,
115
+ ...headLines(shell).map((line) => ` ${line}`),
116
+ `</head>`,
117
+ `<body>`,
118
+ ` ${body}`,
119
+ `</body>`,
120
+ `</html>`,
121
+ ].join('\n'),
122
+ };
123
+ }
124
+ function header(shell, comment) {
125
+ return [comment(`Generated by Braid Console from shell ${jsString(shell.id)}. Regenerate rather than edit by hand.`)];
126
+ }
127
+ const js = (text) => `// ${commentSafe(text)}`;
128
+ // ---------------------------------------------------------------------------
129
+ // React
130
+ // ---------------------------------------------------------------------------
131
+ function reactRoutes(shell, routes) {
132
+ const components = routes.flatMap((route) => [
133
+ js(`Route ${route.path}`),
134
+ `export function ${route.componentName}() {`,
135
+ ` return (`,
136
+ // Braces, not quotes: a JSX string attribute has no escapes, so a value is only safe as a JS
137
+ // expression.
138
+ ` <div className={${jsString(route.stem)}}>`,
139
+ ...route.slots.map((slot) => ` <BraidFragment name={${jsString(slot.fragment)}}${slot.src ? ` src={${jsString(slot.src)}}` : ''} style={{ gridArea: ${jsString(slot.area)} }} />`),
140
+ ...(route.empty.length ? [` {/* empty areas: ${commentSafe(route.empty.join(', '))} */}`] : []),
141
+ ` </div>`,
142
+ ` );`,
143
+ `}`,
144
+ ``,
145
+ ]);
146
+ return {
147
+ name: `${ident(shell.id)}.tsx`,
148
+ language: 'tsx',
149
+ code: [
150
+ ...header(shell, js),
151
+ js(`Call initBraidReact() once before rendering, and route each path below to its layout.`),
152
+ `import { BraidFragment } from '@braidlabs/react';`,
153
+ `import './shell-layout.css';`,
154
+ ``,
155
+ ...components,
156
+ `export const routes = [`,
157
+ ...routes.map((route) => ` { path: ${jsString(route.path)}, element: <${route.componentName} /> },`),
158
+ `];`,
159
+ ].join('\n'),
160
+ };
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // Angular
164
+ // ---------------------------------------------------------------------------
165
+ function angularFiles(shell, routes) {
166
+ const components = routes.flatMap((route) => {
167
+ const template = [
168
+ `<div class="${escapeAngular(route.stem)}">`,
169
+ ...route.slots.map((slot) => ` <braid-fragment name="${escapeAngular(slot.fragment)}"${slot.src ? ` src="${escapeAngular(slot.src)}"` : ''} style="grid-area: ${escapeAngular(slot.area)}" />`),
170
+ `</div>`,
171
+ ];
172
+ return [
173
+ js(`Route ${route.path}`),
174
+ `@Component({`,
175
+ ` selector: ${jsString(`app-${route.stem}`)},`,
176
+ ` imports: [BraidFragment],`,
177
+ ` template: \``,
178
+ ...template.map((line) => ` ${templateLiteral(line)}`),
179
+ ` \`,`,
180
+ ` styles: \``,
181
+ ...cssRule(route, `.${route.stem}`).map((line) => ` ${templateLiteral(line)}`),
182
+ ` \`,`,
183
+ `})`,
184
+ `export class ${route.componentName} {}`,
185
+ ``,
186
+ ];
187
+ });
188
+ return [
189
+ {
190
+ name: `${ident(shell.id)}.routes.ts`,
191
+ language: 'typescript',
192
+ code: [
193
+ ...header(shell, js),
194
+ js(`Add provideBraid() to the application's providers once.`),
195
+ `import { Component } from '@angular/core';`,
196
+ `import type { Routes } from '@angular/router';`,
197
+ `import { BraidFragment } from '@braidlabs/angular';`,
198
+ ``,
199
+ ...components,
200
+ `export const routes: Routes = [`,
201
+ ...routes.map((route) => ` { path: ${jsString(angularPath(route.path))}, component: ${route.componentName} },`),
202
+ `];`,
203
+ ].join('\n'),
204
+ },
205
+ ];
206
+ }
207
+ /** URLPattern pathname → Angular route path: no leading slash, and a trailing `*` becomes `**`. */
208
+ export function angularPath(path) {
209
+ return path.replace(/^\/+/, '').replace(/(^|\/)\*$/, '$1**');
210
+ }
211
+ function angularServer(shell) {
212
+ return {
213
+ name: 'server.ts',
214
+ language: 'typescript',
215
+ code: [
216
+ ...header(shell, js),
217
+ js(`The gateway sits in front of the Angular SSR handler: it asks Angular for the shell`),
218
+ js(`document, then server-side renders each fragment into its <fragment-slot>.`),
219
+ `import { createGateway } from '@braidlabs/gateway';`,
220
+ `import { toNodeMiddleware } from '@braidlabs/gateway/node';`,
221
+ `import { snapshotRegistry } from '@braidlabs/registry';`,
222
+ `import { fileSnapshotStore } from '@braidlabs/registry/node';`,
223
+ ``,
224
+ `const gateway = createGateway({`,
225
+ ` mode: 'production',`,
226
+ ` registry: snapshotRegistry({`,
227
+ ` store: fileSnapshotStore({ directory: process.env['BRAID_REGISTRY_DIR'] ?? '.braid/registry' }),`,
228
+ ` pinned: process.env['BRAID_REGISTRY_SNAPSHOT'],`,
229
+ ` }),`,
230
+ `});`,
231
+ ``,
232
+ js(`Before the Angular request handler, so it can wrap the documents Angular renders:`),
233
+ `app.use(toNodeMiddleware(gateway));`,
234
+ ].join('\n'),
235
+ };
236
+ }
237
+ // ---------------------------------------------------------------------------
238
+ // Plain JS
239
+ // ---------------------------------------------------------------------------
240
+ function vanillaPage(shell, route) {
241
+ return {
242
+ name: `${route.stem}.html`,
243
+ language: 'html',
244
+ code: [
245
+ `<!doctype html>`,
246
+ `<!-- ${commentSafe(`Generated by Braid Console from shell "${shell.id}", route ${route.path}.`)} -->`,
247
+ `<html lang="en">`,
248
+ `<head>`,
249
+ ...headLines(shell).map((line) => ` ${line}`),
250
+ ` <style>`,
251
+ ...cssRule(route, `.${route.stem}`).map((line) => ` ${line}`),
252
+ ` </style>`,
253
+ ` <script type="module">`,
254
+ ` // A bare specifier: serve this page through your bundler, or map it with an import map.`,
255
+ ` import { initBraid } from '@braidlabs/core';`,
256
+ ` initBraid();`,
257
+ ` </script>`,
258
+ `</head>`,
259
+ `<body>`,
260
+ ` <div class="${escapeHtml(route.stem)}">`,
261
+ ...route.slots.map((slot) => ` <fragment-slot name="${escapeHtml(slot.fragment)}"${slot.src ? ` src="${escapeHtml(slot.src)}"` : ''} style="grid-area: ${escapeHtml(slot.area)}"></fragment-slot>`),
262
+ ` </div>`,
263
+ `</body>`,
264
+ `</html>`,
265
+ ].join('\n'),
266
+ };
267
+ }
268
+ // ---------------------------------------------------------------------------
269
+ // Escaping
270
+ // ---------------------------------------------------------------------------
271
+ export function escapeHtml(value) {
272
+ return String(value).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
273
+ }
274
+ /**
275
+ * A JS string literal. JSON.stringify leaves U+2028 and U+2029 raw: legal in a string since ES2019,
276
+ * but invisible to a reviewer and a line break to older tooling.
277
+ */
278
+ function jsString(value) {
279
+ return JSON.stringify(String(value)).replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
280
+ }
281
+ /** HTML escaping plus braces, so a value cannot become an Angular `{{ }}` interpolation. */
282
+ function escapeAngular(value) {
283
+ return escapeHtml(value).replace(/\{/g, '&#123;').replace(/\}/g, '&#125;');
284
+ }
285
+ /** Text placed inside a JS template literal: no backtick, no `${`, no stray escape. */
286
+ function templateLiteral(value) {
287
+ return value.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${');
288
+ }
289
+ /**
290
+ * Text placed inside a comment of any of the three languages, unable to close it early: `*\/`
291
+ * for CSS and block comments, `-->`, `--!>` and `<!--` for HTML, and every line terminator JS
292
+ * recognizes — U+2028 and U+2029 end a `//` comment too, and most editors draw them invisibly.
293
+ */
294
+ function commentSafe(value) {
295
+ return String(value)
296
+ .replace(/\*\//g, '* /')
297
+ .replace(/--!?>/g, '-- >')
298
+ .replace(/<!--/g, '< !--')
299
+ .replace(/[\r\n\u2028\u2029]+/g, ' ');
300
+ }
301
+ /** A CSS-identifier- and filename-safe stem. */
302
+ function ident(value) {
303
+ return value
304
+ .replace(/[^a-zA-Z0-9]+/g, '-')
305
+ .replace(/^-+|-+$/g, '')
306
+ .replace(/^(\d)/, 'x$1')
307
+ .toLowerCase();
308
+ }
309
+ function pascal(value) {
310
+ return value
311
+ .split('-')
312
+ .filter(Boolean)
313
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
314
+ .join('');
315
+ }
316
+ //# sourceMappingURL=shell-codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-codegen.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/shell-codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type ShellManifest } from '@braidlabs/registry';
2
+ import { type ConsoleApi, type PublishOutcome } from './client.js';
3
+ export interface ShellsPanelProps {
4
+ /** Needs the registry write API: shells live in snapshots, which discovery does not serve. */
5
+ api?: ConsoleApi;
6
+ theme?: 'light' | 'dark';
7
+ className?: string;
8
+ /**
9
+ * The open shell's id, when the host keeps it in its URL. Uncontrolled when omitted.
10
+ * `onSelect` reports opens, closes and renames, so the host can follow.
11
+ */
12
+ selected?: string | null;
13
+ onSelect?: (id: string | null) => void;
14
+ onPublished?: (outcome: PublishOutcome) => void;
15
+ /**
16
+ * Whether there are unpublished changes, for a host that wants to warn before leaving. The
17
+ * panel does not touch `beforeunload` itself: the page is the host's.
18
+ */
19
+ onDirtyChange?: (dirty: boolean) => void;
20
+ /**
21
+ * Change it to have the panel reload HEAD — after a rollback elsewhere, say. Ignored while there
22
+ * are unpublished changes: those publish against their own base and a stale one is a 409.
23
+ */
24
+ refreshKey?: unknown;
25
+ }
26
+ /**
27
+ * Shells: list, design, and publish them.
28
+ *
29
+ * Same contract as the fragment editor: **branch from what is pinned → edit → publish a new
30
+ * snapshot**. A draft lives in the browser until then. Publishing sends the pinned fragments back
31
+ * unchanged with the edited shells, and `baseId`, so a publish that would overwrite someone else's
32
+ * is refused rather than silently winning.
33
+ *
34
+ * The head a shell declares — meta tags, scripts, stylesheets — is edited as data and never
35
+ * injected into this page. Rendering it here would run third-party code in the admin origin with
36
+ * an operator's token in reach; the preview draws the grid and nothing else.
37
+ */
38
+ export declare function ShellsPanel({ api, theme, className, selected, onSelect, onPublished, onDirtyChange, refreshKey }: ShellsPanelProps): import("react").JSX.Element;
39
+ /**
40
+ * A starting shell: a three-row page. Its id and its route are both unique, so two new shells
41
+ * never collide — a page has one shell, and validation refuses two on the same route.
42
+ */
43
+ export declare function newShell(existing: readonly ShellManifest[], tags?: string[]): ShellManifest;