aeon-ui-engine 1.3.1 → 1.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.
- package/CHANGELOG.md +61 -0
- package/package.json +1 -1
- package/packages/cli/README.md +13 -1
- package/packages/cli/dist/bin.js +23 -5
- package/packages/cli/dist/chunk-5L47SLNV.js +247 -0
- package/packages/cli/dist/index.d.ts +17 -1
- package/packages/cli/dist/index.js +5 -3
- package/packages/cli/src/bin.ts +21 -3
- package/packages/cli/src/index.ts +1 -0
- package/packages/cli/src/migrate.ts +170 -0
- package/packages/core/dist/index.d.ts +35 -7
- package/packages/core/dist/index.js +102 -2
- package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/packages/core/src/anatomy.ts +39 -3
- package/packages/core/src/identicon.test.ts +39 -0
- package/packages/core/src/identicon.ts +79 -0
- package/packages/core/src/index.ts +1 -0
- package/packages/panda/panda.config.ts +4 -0
- package/packages/panda/src/recipes/composer.ts +58 -4
- package/packages/panda/src/recipes/file-upload.ts +100 -0
- package/packages/panda/src/recipes/index.ts +2 -0
- package/packages/panda/src/recipes/range-slider.ts +59 -0
- package/packages/panda/src/recipes/thread.ts +77 -2
- package/packages/panda/styled-system/recipes/aeon-composer.d.ts +1 -1
- package/packages/panda/styled-system/recipes/aeon-composer.mjs +12 -0
- package/packages/panda/styled-system/recipes/aeon-file-upload.d.ts +31 -0
- package/packages/panda/styled-system/recipes/aeon-file-upload.mjs +61 -0
- package/packages/panda/styled-system/recipes/aeon-range-slider.d.ts +31 -0
- package/packages/panda/styled-system/recipes/aeon-range-slider.mjs +49 -0
- package/packages/panda/styled-system/recipes/aeon-thread.d.ts +1 -1
- package/packages/panda/styled-system/recipes/aeon-thread.mjs +20 -0
- package/packages/panda/styled-system/recipes/index.d.ts +2 -0
- package/packages/panda/styled-system/recipes/index.mjs +2 -0
- package/packages/panda/styled-system/styles.css +292 -0
- package/packages/primitives/dist/chunk-CV4UXXZF.js +44 -0
- package/packages/primitives/dist/chunk-IZKQSCYU.js +164 -0
- package/packages/primitives/dist/index.d.ts +2 -0
- package/packages/primitives/dist/index.js +22 -6
- package/packages/primitives/dist/machines/file-upload.d.ts +39 -0
- package/packages/primitives/dist/machines/file-upload.js +8 -0
- package/packages/primitives/dist/machines/range-slider.d.ts +129 -0
- package/packages/primitives/dist/machines/range-slider.js +12 -0
- package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/packages/primitives/src/__tests__/file-upload.test.ts +25 -0
- package/packages/primitives/src/__tests__/range-slider.test.ts +39 -0
- package/packages/primitives/src/index.ts +2 -0
- package/packages/primitives/src/machines/file-upload.ts +55 -0
- package/packages/primitives/src/machines/range-slider.ts +209 -0
- package/packages/react/dist/index.d.ts +117 -25
- package/packages/react/dist/index.js +1731 -1006
- package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/packages/react/src/button/index.tsx +50 -15
- package/packages/react/src/combobox/index.tsx +13 -8
- package/packages/react/src/composer/index.tsx +58 -3
- package/packages/react/src/file-upload/index.tsx +322 -0
- package/packages/react/src/index.ts +3 -0
- package/packages/react/src/prompt/index.tsx +45 -0
- package/packages/react/src/range-slider/index.tsx +322 -0
- package/packages/react/src/thread/index.tsx +74 -3
- package/packages/react/src/tooltip/index.tsx +48 -22
- package/packages/react/src/utils/slot.tsx +47 -0
- package/packages/schemas/dist/index.d.ts +73 -24
- package/packages/schemas/dist/index.js +514 -50
- package/packages/schemas/json/appNav.json +146 -0
- package/packages/schemas/json/appShell.json +151 -0
- package/packages/schemas/json/avatar.json +130 -0
- package/packages/schemas/json/bar.json +126 -0
- package/packages/schemas/json/button.json +6 -0
- package/packages/schemas/json/catalog.json +3496 -15
- package/packages/schemas/json/combobox.json +19 -7
- package/packages/schemas/json/composer.json +125 -0
- package/packages/schemas/json/content.json +167 -0
- package/packages/schemas/json/conversation.json +166 -0
- package/packages/schemas/json/entry.json +182 -0
- package/packages/schemas/json/fileUpload.json +168 -0
- package/packages/schemas/json/identity.json +147 -0
- package/packages/schemas/json/listRow.json +131 -0
- package/packages/schemas/json/metricStrip.json +132 -0
- package/packages/schemas/json/nav.json +136 -0
- package/packages/schemas/json/panel.json +143 -0
- package/packages/schemas/json/pinInput.json +112 -0
- package/packages/schemas/json/profileHeader.json +138 -0
- package/packages/schemas/json/prompt.json +155 -0
- package/packages/schemas/json/radioGroup.json +130 -0
- package/packages/schemas/json/rangeSlider.json +157 -0
- package/packages/schemas/json/separator.json +105 -0
- package/packages/schemas/json/slider.json +147 -0
- package/packages/schemas/json/statusBanner.json +149 -0
- package/packages/schemas/json/stickyBar.json +153 -0
- package/packages/schemas/json/thread.json +129 -0
- package/packages/schemas/json/tooltip.json +21 -7
- package/packages/schemas/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/packages/schemas/prompts/cursorrules.md +6 -4
- package/packages/schemas/prompts/statecharts.md +23 -2
- package/packages/schemas/prompts/system.md +2 -2
- package/packages/schemas/registry/catalog.json +313 -4
- package/packages/schemas/registry/components/appNav.json +146 -0
- package/packages/schemas/registry/components/appShell.json +151 -0
- package/packages/schemas/registry/components/avatar.json +130 -0
- package/packages/schemas/registry/components/bar.json +126 -0
- package/packages/schemas/registry/components/button.json +6 -0
- package/packages/schemas/registry/components/combobox.json +19 -7
- package/packages/schemas/registry/components/composer.json +125 -0
- package/packages/schemas/registry/components/content.json +167 -0
- package/packages/schemas/registry/components/conversation.json +166 -0
- package/packages/schemas/registry/components/entry.json +182 -0
- package/packages/schemas/registry/components/fileUpload.json +168 -0
- package/packages/schemas/registry/components/identity.json +147 -0
- package/packages/schemas/registry/components/listRow.json +131 -0
- package/packages/schemas/registry/components/metricStrip.json +132 -0
- package/packages/schemas/registry/components/nav.json +136 -0
- package/packages/schemas/registry/components/panel.json +143 -0
- package/packages/schemas/registry/components/pinInput.json +112 -0
- package/packages/schemas/registry/components/profileHeader.json +138 -0
- package/packages/schemas/registry/components/prompt.json +155 -0
- package/packages/schemas/registry/components/radioGroup.json +130 -0
- package/packages/schemas/registry/components/rangeSlider.json +157 -0
- package/packages/schemas/registry/components/separator.json +105 -0
- package/packages/schemas/registry/components/slider.json +147 -0
- package/packages/schemas/registry/components/statusBanner.json +149 -0
- package/packages/schemas/registry/components/stickyBar.json +153 -0
- package/packages/schemas/registry/components/thread.json +129 -0
- package/packages/schemas/registry/components/tooltip.json +21 -7
- package/packages/schemas/registry/machines/accordion.json +58 -0
- package/packages/schemas/registry/machines/appNav.json +108 -0
- package/packages/schemas/registry/machines/appShell.json +128 -0
- package/packages/schemas/registry/machines/contentRegion.json +314 -0
- package/packages/schemas/registry/machines/fileUpload.json +182 -0
- package/packages/schemas/registry/machines/panel.json +131 -0
- package/packages/schemas/registry/machines/popover.json +143 -0
- package/packages/schemas/registry/machines/rangeSlider.json +201 -0
- package/packages/schemas/registry/machines/slider.json +151 -0
- package/packages/schemas/registry/machines/stickyBar.json +261 -0
- package/packages/schemas/registry/machines/tabs.json +58 -0
- package/packages/schemas/registry/machines/toast.json +89 -0
- package/packages/schemas/registry/machines/toggle.json +134 -0
- package/packages/schemas/scripts/emit.ts +27 -0
- package/packages/schemas/src/components.ts +499 -6
- package/packages/schemas/src/index.test.ts +83 -0
- package/packages/schemas/src/index.ts +1 -0
- package/packages/schemas/src/machine-id.ts +7 -0
- package/packages/schemas/src/prompts.ts +25 -4
- package/packages/schemas/src/registry.ts +28 -39
- package/packages/schemas/tsconfig.json +1 -1
- package/packages/ui/dist/index.d.ts +100 -46
- package/packages/ui/dist/index.js +463 -341
- package/packages/ui/src/composer.tsx +37 -11
- package/packages/ui/src/file-upload.tsx +36 -0
- package/packages/ui/src/index.ts +2 -0
- package/packages/ui/src/prompt.tsx +3 -0
- package/packages/ui/src/range-slider.tsx +24 -0
- package/packages/ui/src/thread.tsx +40 -0
- package/packages/cli/dist/chunk-IW5NT2Z2.js +0 -103
|
@@ -89,11 +89,16 @@ var componentSchemas = {
|
|
|
89
89
|
},
|
|
90
90
|
variant: { type: "string", enum: ["solid", "outline", "ghost", "link"] },
|
|
91
91
|
size: { type: "string", enum: ["sm", "md", "lg"] },
|
|
92
|
-
disabled: { type: "boolean" }
|
|
92
|
+
disabled: { type: "boolean" },
|
|
93
|
+
asChild: {
|
|
94
|
+
type: "boolean",
|
|
95
|
+
description: "Merge button attrs onto a single child element (Link, a)."
|
|
96
|
+
}
|
|
93
97
|
},
|
|
94
98
|
slots: { Root: "button.root", Group: "button.group", Label: "button.label", Icon: "button.icon" },
|
|
95
99
|
examples: [
|
|
96
100
|
'<Button.Root status="pending" aria-busy>Saving\u2026</Button.Root>',
|
|
101
|
+
'<Button.Root asChild variant="solid"><a href="/upload">Upload</a></Button.Root>',
|
|
97
102
|
"const [snap, send] = useAeonMachine(buttonLifecycleMachine)\n<Button.Root status={snap.value as ButtonStatus} onClick={() => send({ type: 'PRESS' })} />"
|
|
98
103
|
]
|
|
99
104
|
}),
|
|
@@ -278,23 +283,25 @@ var componentSchemas = {
|
|
|
278
283
|
combobox: componentSchema({
|
|
279
284
|
id: "https://aeon-ui.com/schemas/combobox.json",
|
|
280
285
|
title: "Combobox",
|
|
281
|
-
description: "
|
|
286
|
+
description: "Open/closed via popoverMachine (same family as Select/Menu/Popover). Query, highlight, and item registry stay React-local for typeahead.",
|
|
282
287
|
scope: "combobox",
|
|
283
288
|
parts: ["root", "input", "icon", "content", "item", "empty"],
|
|
284
289
|
states: ["open", "closed"],
|
|
285
|
-
machine:
|
|
286
|
-
runtime: "
|
|
290
|
+
machine: "popoverMachine",
|
|
291
|
+
runtime: "useAeonMachine",
|
|
292
|
+
events: ["OPEN", "CLOSE", "TOGGLE", "ESCAPE", "POINTER_DOWN_OUTSIDE"],
|
|
287
293
|
slots: { Root: "combobox.root", Input: "combobox.input", Content: "combobox.content", Item: "combobox.item" }
|
|
288
294
|
}),
|
|
289
295
|
tooltip: componentSchema({
|
|
290
296
|
id: "https://aeon-ui.com/schemas/tooltip.json",
|
|
291
297
|
title: "Tooltip",
|
|
292
|
-
description: "Open via
|
|
298
|
+
description: "Open/closed via popoverMachine (same family as Popover/Select/Combobox). openDelay / closeDelay / touchDuration stay React-local.",
|
|
293
299
|
scope: "tooltip",
|
|
294
300
|
parts: ["root", "trigger", "positioner", "content", "arrow"],
|
|
295
301
|
states: ["open", "closed"],
|
|
296
|
-
machine:
|
|
297
|
-
runtime: "
|
|
302
|
+
machine: "popoverMachine",
|
|
303
|
+
runtime: "useAeonMachine",
|
|
304
|
+
events: ["OPEN", "CLOSE", "TOGGLE", "SET_OPEN", "ESCAPE", "POINTER_DOWN_OUTSIDE"],
|
|
298
305
|
slots: { Root: "tooltip.root", Trigger: "tooltip.trigger", Content: "tooltip.content" }
|
|
299
306
|
}),
|
|
300
307
|
toast: componentSchema({
|
|
@@ -340,6 +347,459 @@ var componentSchemas = {
|
|
|
340
347
|
indeterminate: { type: "boolean" }
|
|
341
348
|
},
|
|
342
349
|
slots: { Root: "progress.root", Track: "progress.track", Range: "progress.range", Label: "progress.label" }
|
|
350
|
+
}),
|
|
351
|
+
radioGroup: componentSchema({
|
|
352
|
+
id: "https://aeon-ui.com/schemas/radioGroup.json",
|
|
353
|
+
title: "RadioGroup",
|
|
354
|
+
description: "Single selection via tabsMachine (same chart family as Tabs/Nav).",
|
|
355
|
+
scope: "radioGroup",
|
|
356
|
+
parts: ["root", "item", "itemControl", "itemIndicator", "itemLabel"],
|
|
357
|
+
states: ["selected"],
|
|
358
|
+
machine: "tabsMachine",
|
|
359
|
+
runtime: "useAeonMachine",
|
|
360
|
+
events: ["SELECT"],
|
|
361
|
+
slots: {
|
|
362
|
+
Root: "radioGroup.root",
|
|
363
|
+
Item: "radioGroup.item",
|
|
364
|
+
ItemControl: "radioGroup.itemControl",
|
|
365
|
+
ItemLabel: "radioGroup.itemLabel"
|
|
366
|
+
}
|
|
367
|
+
}),
|
|
368
|
+
slider: componentSchema({
|
|
369
|
+
id: "https://aeon-ui.com/schemas/slider.json",
|
|
370
|
+
title: "Slider",
|
|
371
|
+
description: "Range control via sliderMachine \u2014 idle | dragging plus numeric value in context.",
|
|
372
|
+
scope: "slider",
|
|
373
|
+
parts: ["root", "track", "range", "thumb", "valueText"],
|
|
374
|
+
states: ["idle", "dragging"],
|
|
375
|
+
machine: "sliderMachine",
|
|
376
|
+
runtime: "useAeonMachine",
|
|
377
|
+
events: ["SET_VALUE", "STEP", "POINTER_DOWN", "POINTER_UP", "HOME", "END"],
|
|
378
|
+
slots: {
|
|
379
|
+
Root: "slider.root",
|
|
380
|
+
Track: "slider.track",
|
|
381
|
+
Range: "slider.range",
|
|
382
|
+
Thumb: "slider.thumb",
|
|
383
|
+
ValueText: "slider.valueText"
|
|
384
|
+
}
|
|
385
|
+
}),
|
|
386
|
+
rangeSlider: componentSchema({
|
|
387
|
+
id: "https://aeon-ui.com/schemas/rangeSlider.json",
|
|
388
|
+
title: "RangeSlider",
|
|
389
|
+
description: "Two-thumb range via rangeSliderMachine \u2014 idle | dragging with values pair and minStepsBetween gap.",
|
|
390
|
+
scope: "rangeSlider",
|
|
391
|
+
parts: ["root", "track", "range", "thumb", "valueText"],
|
|
392
|
+
states: ["idle", "dragging"],
|
|
393
|
+
machine: "rangeSliderMachine",
|
|
394
|
+
runtime: "useAeonMachine",
|
|
395
|
+
events: [
|
|
396
|
+
"SET_VALUES",
|
|
397
|
+
"SET_BOUNDS",
|
|
398
|
+
"SET_DISABLED",
|
|
399
|
+
"POINTER_DOWN",
|
|
400
|
+
"POINTER_MOVE",
|
|
401
|
+
"POINTER_UP",
|
|
402
|
+
"STEP",
|
|
403
|
+
"HOME",
|
|
404
|
+
"END"
|
|
405
|
+
],
|
|
406
|
+
slots: {
|
|
407
|
+
Root: "rangeSlider.root",
|
|
408
|
+
Track: "rangeSlider.track",
|
|
409
|
+
Range: "rangeSlider.range",
|
|
410
|
+
Thumb: "rangeSlider.thumb",
|
|
411
|
+
ValueText: "rangeSlider.valueText"
|
|
412
|
+
},
|
|
413
|
+
examples: [
|
|
414
|
+
"<RangeSlider.Root defaultValue={[20, 80]} minStepsBetween={1}>\n <RangeSlider.Track /><RangeSlider.Range />\n <RangeSlider.Thumb index={0} /><RangeSlider.Thumb index={1} />\n</RangeSlider.Root>"
|
|
415
|
+
]
|
|
416
|
+
}),
|
|
417
|
+
fileUpload: componentSchema({
|
|
418
|
+
id: "https://aeon-ui.com/schemas/fileUpload.json",
|
|
419
|
+
title: "FileUpload",
|
|
420
|
+
description: "Drag-drop surface via fileUploadMachine \u2014 idle | dragging | rejected. File bytes stay in React callbacks.",
|
|
421
|
+
scope: "fileUpload",
|
|
422
|
+
parts: [
|
|
423
|
+
"root",
|
|
424
|
+
"dropzone",
|
|
425
|
+
"input",
|
|
426
|
+
"label",
|
|
427
|
+
"hint",
|
|
428
|
+
"preview",
|
|
429
|
+
"clearTrigger",
|
|
430
|
+
"rejectionMessage"
|
|
431
|
+
],
|
|
432
|
+
states: ["idle", "dragging", "rejected"],
|
|
433
|
+
machine: "fileUploadMachine",
|
|
434
|
+
runtime: "useAeonMachine",
|
|
435
|
+
events: ["DRAG_OVER", "DRAG_LEAVE", "DROP_ACCEPT", "DROP_REJECT", "RESET"],
|
|
436
|
+
slots: {
|
|
437
|
+
Root: "fileUpload.root",
|
|
438
|
+
Dropzone: "fileUpload.dropzone",
|
|
439
|
+
Input: "fileUpload.input",
|
|
440
|
+
Label: "fileUpload.label",
|
|
441
|
+
Hint: "fileUpload.hint",
|
|
442
|
+
Preview: "fileUpload.preview",
|
|
443
|
+
ClearTrigger: "fileUpload.clearTrigger",
|
|
444
|
+
RejectionMessage: "fileUpload.rejectionMessage"
|
|
445
|
+
}
|
|
446
|
+
}),
|
|
447
|
+
pinInput: componentSchema({
|
|
448
|
+
id: "https://aeon-ui.com/schemas/pinInput.json",
|
|
449
|
+
title: "PinInput",
|
|
450
|
+
description: "OTP / PIN cells \u2014 React state for digit buffer; projects idle | complete on root.",
|
|
451
|
+
scope: "pinInput",
|
|
452
|
+
parts: ["root", "input"],
|
|
453
|
+
states: ["idle", "complete"],
|
|
454
|
+
machine: null,
|
|
455
|
+
runtime: "useState",
|
|
456
|
+
slots: { Root: "pinInput.root", Input: "pinInput.input" }
|
|
457
|
+
}),
|
|
458
|
+
avatar: componentSchema({
|
|
459
|
+
id: "https://aeon-ui.com/schemas/avatar.json",
|
|
460
|
+
title: "Avatar",
|
|
461
|
+
description: "Image load lifecycle in React; badge presence is a prop projection.",
|
|
462
|
+
scope: "avatar",
|
|
463
|
+
parts: ["root", "image", "fallback", "badge"],
|
|
464
|
+
states: ["idle", "loading", "loaded", "error"],
|
|
465
|
+
machine: null,
|
|
466
|
+
runtime: "useState",
|
|
467
|
+
slots: {
|
|
468
|
+
Root: "avatar.root",
|
|
469
|
+
Image: "avatar.image",
|
|
470
|
+
Fallback: "avatar.fallback",
|
|
471
|
+
Badge: "avatar.badge"
|
|
472
|
+
}
|
|
473
|
+
}),
|
|
474
|
+
content: componentSchema({
|
|
475
|
+
id: "https://aeon-ui.com/schemas/content.json",
|
|
476
|
+
title: "Content",
|
|
477
|
+
description: "Status-slotted body via contentRegionMachine (or Root state prop projection). Pair with Async for fetch.",
|
|
478
|
+
scope: "content",
|
|
479
|
+
parts: ["root", "toolbar", "body", "pending", "empty", "error", "success", "sentinel"],
|
|
480
|
+
states: ["idle", "pending", "empty", "error", "ready", "loadingMore", "success"],
|
|
481
|
+
machine: "contentRegionMachine",
|
|
482
|
+
runtime: "useAeonMachine",
|
|
483
|
+
events: ["LOAD", "RESOLVE", "REJECT", "RETRY", "LOAD_MORE", "MORE_DONE", "SUCCEED", "RESET"],
|
|
484
|
+
slots: {
|
|
485
|
+
Root: "content.root",
|
|
486
|
+
Pending: "content.pending",
|
|
487
|
+
Empty: "content.empty",
|
|
488
|
+
Error: "content.error",
|
|
489
|
+
Success: "content.success"
|
|
490
|
+
}
|
|
491
|
+
}),
|
|
492
|
+
panel: componentSchema({
|
|
493
|
+
id: "https://aeon-ui.com/schemas/panel.json",
|
|
494
|
+
title: "Panel",
|
|
495
|
+
description: "Collapsible layout region via panelMachine \u2014 expanded | collapsed.",
|
|
496
|
+
scope: "panel",
|
|
497
|
+
parts: ["group", "root", "trigger", "label", "content"],
|
|
498
|
+
states: ["expanded", "collapsed"],
|
|
499
|
+
machine: "panelMachine",
|
|
500
|
+
runtime: "useAeonMachine",
|
|
501
|
+
events: ["EXPAND", "COLLAPSE", "TOGGLE", "SET_EXPANDED"],
|
|
502
|
+
slots: {
|
|
503
|
+
Group: "panel.group",
|
|
504
|
+
Root: "panel.root",
|
|
505
|
+
Trigger: "panel.trigger",
|
|
506
|
+
Label: "panel.label",
|
|
507
|
+
Content: "panel.content"
|
|
508
|
+
}
|
|
509
|
+
}),
|
|
510
|
+
appShell: componentSchema({
|
|
511
|
+
id: "https://aeon-ui.com/schemas/appShell.json",
|
|
512
|
+
title: "AppShell",
|
|
513
|
+
description: "Application chrome frame via appShellMachine \u2014 idle | overlayOpen (+ dockVisible).",
|
|
514
|
+
scope: "appShell",
|
|
515
|
+
parts: ["root", "header", "subheader", "content", "aside", "footer", "dock", "scrim"],
|
|
516
|
+
states: ["idle", "overlayOpen"],
|
|
517
|
+
machine: "appShellMachine",
|
|
518
|
+
runtime: "useAeonMachine",
|
|
519
|
+
events: ["OPEN_OVERLAY", "CLOSE_OVERLAY", "SHOW_DOCK", "HIDE_DOCK", "SET_DOCK"],
|
|
520
|
+
slots: {
|
|
521
|
+
Root: "appShell.root",
|
|
522
|
+
Header: "appShell.header",
|
|
523
|
+
Content: "appShell.content",
|
|
524
|
+
Dock: "appShell.dock",
|
|
525
|
+
Scrim: "appShell.scrim"
|
|
526
|
+
}
|
|
527
|
+
}),
|
|
528
|
+
stickyBar: componentSchema({
|
|
529
|
+
id: "https://aeon-ui.com/schemas/stickyBar.json",
|
|
530
|
+
title: "StickyBar",
|
|
531
|
+
description: "Sticky/fixed chrome band via stickyBarMachine. DOM scope is bar (reuses bar anatomy zones).",
|
|
532
|
+
scope: "bar",
|
|
533
|
+
parts: ["root", "leading", "center", "trailing", "seam"],
|
|
534
|
+
states: ["floating", "docked", "collapsed", "hidden"],
|
|
535
|
+
machine: "stickyBarMachine",
|
|
536
|
+
runtime: "useAeonMachine",
|
|
537
|
+
events: ["DOCK", "FLOAT", "COLLAPSE", "EXPAND", "HIDE", "SHOW", "SET_OFFSET"],
|
|
538
|
+
slots: {
|
|
539
|
+
Root: "bar.root",
|
|
540
|
+
Leading: "bar.leading",
|
|
541
|
+
Center: "bar.center",
|
|
542
|
+
Trailing: "bar.trailing",
|
|
543
|
+
Seam: "bar.seam"
|
|
544
|
+
}
|
|
545
|
+
}),
|
|
546
|
+
bar: componentSchema({
|
|
547
|
+
id: "https://aeon-ui.com/schemas/bar.json",
|
|
548
|
+
title: "Bar",
|
|
549
|
+
description: "Three-zone toolbar layout (leading / center / trailing / seam). Sticky lifecycle uses StickyBar + stickyBarMachine.",
|
|
550
|
+
scope: "bar",
|
|
551
|
+
parts: ["root", "leading", "center", "trailing", "seam"],
|
|
552
|
+
states: ["idle"],
|
|
553
|
+
machine: null,
|
|
554
|
+
runtime: "layout",
|
|
555
|
+
slots: {
|
|
556
|
+
Root: "bar.root",
|
|
557
|
+
Leading: "bar.leading",
|
|
558
|
+
Center: "bar.center",
|
|
559
|
+
Trailing: "bar.trailing"
|
|
560
|
+
}
|
|
561
|
+
}),
|
|
562
|
+
nav: componentSchema({
|
|
563
|
+
id: "https://aeon-ui.com/schemas/nav.json",
|
|
564
|
+
title: "Nav",
|
|
565
|
+
description: "Navigational collection via tabsMachine; items project inactive | active | disabled.",
|
|
566
|
+
scope: "nav",
|
|
567
|
+
parts: ["root", "item", "indicator", "label", "icon", "badge"],
|
|
568
|
+
states: ["inactive", "active", "disabled"],
|
|
569
|
+
machine: "tabsMachine",
|
|
570
|
+
runtime: "useAeonMachine",
|
|
571
|
+
events: ["SELECT"],
|
|
572
|
+
slots: { Root: "nav.root", Item: "nav.item", Label: "nav.label", Icon: "nav.icon" }
|
|
573
|
+
}),
|
|
574
|
+
appNav: componentSchema({
|
|
575
|
+
id: "https://aeon-ui.com/schemas/appNav.json",
|
|
576
|
+
title: "AppNav",
|
|
577
|
+
description: "Section + detail stack via appNavMachine \u2014 list\u2192detail, settings drill-in.",
|
|
578
|
+
scope: "appNav",
|
|
579
|
+
parts: ["root", "rail", "section", "stage", "breadcrumb", "crumb", "back"],
|
|
580
|
+
states: ["section"],
|
|
581
|
+
machine: "appNavMachine",
|
|
582
|
+
runtime: "useAeonMachine",
|
|
583
|
+
events: ["SET_SECTION", "PUSH", "REPLACE", "POP", "POP_TO", "CLEAR", "RESET"],
|
|
584
|
+
slots: {
|
|
585
|
+
Root: "appNav.root",
|
|
586
|
+
Rail: "appNav.rail",
|
|
587
|
+
Stage: "appNav.stage",
|
|
588
|
+
Back: "appNav.back"
|
|
589
|
+
}
|
|
590
|
+
}),
|
|
591
|
+
prompt: componentSchema({
|
|
592
|
+
id: "https://aeon-ui.com/schemas/prompt.json",
|
|
593
|
+
title: "Prompt",
|
|
594
|
+
description: "Confirm / permission dialog composed on Dialog. Open/closed via dialogMachine; face via status prop.",
|
|
595
|
+
scope: "prompt",
|
|
596
|
+
parts: ["root", "eyebrow", "meta", "amount", "actions", "primary", "secondary"],
|
|
597
|
+
states: ["pending", "confirming", "dismissed", "confirmed"],
|
|
598
|
+
machine: "dialogMachine",
|
|
599
|
+
runtime: "status prop",
|
|
600
|
+
events: ["OPEN", "CLOSE", "TOGGLE"],
|
|
601
|
+
props: {
|
|
602
|
+
status: {
|
|
603
|
+
type: "string",
|
|
604
|
+
enum: ["pending", "confirming", "dismissed", "confirmed"],
|
|
605
|
+
default: "pending"
|
|
606
|
+
}
|
|
607
|
+
},
|
|
608
|
+
slots: {
|
|
609
|
+
Root: "prompt.root",
|
|
610
|
+
Primary: "prompt.primary",
|
|
611
|
+
Secondary: "prompt.secondary",
|
|
612
|
+
Actions: "prompt.actions"
|
|
613
|
+
}
|
|
614
|
+
}),
|
|
615
|
+
statusBanner: componentSchema({
|
|
616
|
+
id: "https://aeon-ui.com/schemas/statusBanner.json",
|
|
617
|
+
title: "StatusBanner",
|
|
618
|
+
description: "Non-blocking top-of-app notice \u2014 tone + optional status props project to data-aeon-state.",
|
|
619
|
+
scope: "statusBanner",
|
|
620
|
+
parts: ["root", "copy", "title", "body", "actions"],
|
|
621
|
+
states: ["info", "success", "warning", "danger", "neutral"],
|
|
622
|
+
machine: null,
|
|
623
|
+
runtime: "props",
|
|
624
|
+
props: {
|
|
625
|
+
tone: { type: "string", enum: ["info", "success", "warning", "danger", "neutral"] },
|
|
626
|
+
status: { type: "string", description: "Optional secondary token appended to data-aeon-state" }
|
|
627
|
+
},
|
|
628
|
+
slots: {
|
|
629
|
+
Root: "statusBanner.root",
|
|
630
|
+
Title: "statusBanner.title",
|
|
631
|
+
Body: "statusBanner.body",
|
|
632
|
+
Actions: "statusBanner.actions"
|
|
633
|
+
}
|
|
634
|
+
}),
|
|
635
|
+
separator: componentSchema({
|
|
636
|
+
id: "https://aeon-ui.com/schemas/separator.json",
|
|
637
|
+
title: "Separator",
|
|
638
|
+
description: "Static divider \u2014 orientation prop only.",
|
|
639
|
+
scope: "separator",
|
|
640
|
+
parts: ["root"],
|
|
641
|
+
states: ["horizontal", "vertical"],
|
|
642
|
+
machine: null,
|
|
643
|
+
runtime: "props",
|
|
644
|
+
slots: { Root: "separator.root" }
|
|
645
|
+
}),
|
|
646
|
+
composer: componentSchema({
|
|
647
|
+
id: "https://aeon-ui.com/schemas/composer.json",
|
|
648
|
+
title: "Composer",
|
|
649
|
+
description: "Compose chrome \u2014 root state prop idle | sending | disabled | error.",
|
|
650
|
+
scope: "composer",
|
|
651
|
+
parts: ["root", "input", "actions", "send"],
|
|
652
|
+
states: ["idle", "sending", "disabled", "error"],
|
|
653
|
+
machine: null,
|
|
654
|
+
runtime: "props",
|
|
655
|
+
slots: { Root: "composer.root", Input: "composer.input", Send: "composer.send" }
|
|
656
|
+
}),
|
|
657
|
+
thread: componentSchema({
|
|
658
|
+
id: "https://aeon-ui.com/schemas/thread.json",
|
|
659
|
+
title: "Thread",
|
|
660
|
+
description: "Message stream \u2014 item state prop mine | theirs | pending | failed.",
|
|
661
|
+
scope: "thread",
|
|
662
|
+
parts: ["root", "list", "item", "bubble", "meta", "day"],
|
|
663
|
+
states: ["mine", "theirs", "pending", "failed"],
|
|
664
|
+
machine: null,
|
|
665
|
+
runtime: "props",
|
|
666
|
+
slots: { Root: "thread.root", Item: "thread.item", Bubble: "thread.bubble" }
|
|
667
|
+
}),
|
|
668
|
+
identity: componentSchema({
|
|
669
|
+
id: "https://aeon-ui.com/schemas/identity.json",
|
|
670
|
+
title: "Identity",
|
|
671
|
+
description: "Avatar + title + subtitle strip \u2014 presentational layout, not a niche product scope.",
|
|
672
|
+
scope: "identity",
|
|
673
|
+
parts: ["root", "avatar", "title", "subtitle", "meta", "trailing"],
|
|
674
|
+
states: ["idle"],
|
|
675
|
+
machine: null,
|
|
676
|
+
runtime: "layout",
|
|
677
|
+
props: {
|
|
678
|
+
size: { type: "string", enum: ["sm", "md", "lg"] }
|
|
679
|
+
},
|
|
680
|
+
slots: {
|
|
681
|
+
Root: "identity.root",
|
|
682
|
+
Avatar: "identity.avatar",
|
|
683
|
+
Title: "identity.title",
|
|
684
|
+
Subtitle: "identity.subtitle",
|
|
685
|
+
Meta: "identity.meta",
|
|
686
|
+
Trailing: "identity.trailing"
|
|
687
|
+
}
|
|
688
|
+
}),
|
|
689
|
+
profileHeader: componentSchema({
|
|
690
|
+
id: "https://aeon-ui.com/schemas/profileHeader.json",
|
|
691
|
+
title: "ProfileHeader",
|
|
692
|
+
description: "Dense account header \u2014 identity \xB7 metrics \xB7 actions. Universal people chrome.",
|
|
693
|
+
scope: "profileHeader",
|
|
694
|
+
parts: ["root", "media", "identity", "metrics", "actions", "body"],
|
|
695
|
+
states: ["idle"],
|
|
696
|
+
machine: null,
|
|
697
|
+
runtime: "layout",
|
|
698
|
+
slots: {
|
|
699
|
+
Root: "profileHeader.root",
|
|
700
|
+
Media: "profileHeader.media",
|
|
701
|
+
Identity: "profileHeader.identity",
|
|
702
|
+
Metrics: "profileHeader.metrics",
|
|
703
|
+
Actions: "profileHeader.actions",
|
|
704
|
+
Body: "profileHeader.body"
|
|
705
|
+
}
|
|
706
|
+
}),
|
|
707
|
+
metricStrip: componentSchema({
|
|
708
|
+
id: "https://aeon-ui.com/schemas/metricStrip.json",
|
|
709
|
+
title: "MetricStrip",
|
|
710
|
+
description: "Dense value|label chips \u2014 cluster or loose density. Generic stats only.",
|
|
711
|
+
scope: "metricStrip",
|
|
712
|
+
parts: ["root", "chip", "value", "label"],
|
|
713
|
+
states: ["idle"],
|
|
714
|
+
machine: null,
|
|
715
|
+
runtime: "layout",
|
|
716
|
+
props: {
|
|
717
|
+
density: { type: "string", enum: ["cluster", "loose"] }
|
|
718
|
+
},
|
|
719
|
+
slots: {
|
|
720
|
+
Root: "metricStrip.root",
|
|
721
|
+
Chip: "metricStrip.chip",
|
|
722
|
+
Value: "metricStrip.value",
|
|
723
|
+
Label: "metricStrip.label"
|
|
724
|
+
}
|
|
725
|
+
}),
|
|
726
|
+
listRow: componentSchema({
|
|
727
|
+
id: "https://aeon-ui.com/schemas/listRow.json",
|
|
728
|
+
title: "ListRow",
|
|
729
|
+
description: "Settings / menu row \u2014 leading \xB7 label \xB7 trailing. Layout only.",
|
|
730
|
+
scope: "listRow",
|
|
731
|
+
parts: ["root", "leading", "label", "description", "trailing"],
|
|
732
|
+
states: ["idle"],
|
|
733
|
+
machine: null,
|
|
734
|
+
runtime: "layout",
|
|
735
|
+
slots: {
|
|
736
|
+
Root: "listRow.root",
|
|
737
|
+
Leading: "listRow.leading",
|
|
738
|
+
Label: "listRow.label",
|
|
739
|
+
Description: "listRow.description",
|
|
740
|
+
Trailing: "listRow.trailing"
|
|
741
|
+
}
|
|
742
|
+
}),
|
|
743
|
+
entry: componentSchema({
|
|
744
|
+
id: "https://aeon-ui.com/schemas/entry.json",
|
|
745
|
+
title: "Entry",
|
|
746
|
+
description: "Universal multi-value card (feed stack or listing split). Root state idle | selected | muted \u2014 never invent niche scopes.",
|
|
747
|
+
scope: "entry",
|
|
748
|
+
parts: [
|
|
749
|
+
"list",
|
|
750
|
+
"root",
|
|
751
|
+
"header",
|
|
752
|
+
"leading",
|
|
753
|
+
"heading",
|
|
754
|
+
"title",
|
|
755
|
+
"subtitle",
|
|
756
|
+
"meta",
|
|
757
|
+
"media",
|
|
758
|
+
"body",
|
|
759
|
+
"values",
|
|
760
|
+
"value",
|
|
761
|
+
"actions",
|
|
762
|
+
"footer"
|
|
763
|
+
],
|
|
764
|
+
states: ["idle", "selected", "muted"],
|
|
765
|
+
machine: null,
|
|
766
|
+
runtime: "props",
|
|
767
|
+
props: {
|
|
768
|
+
state: { type: "string", enum: ["idle", "selected", "muted"], default: "idle" },
|
|
769
|
+
density: { type: "string", enum: ["compact", "cozy"] },
|
|
770
|
+
layout: { type: "string", enum: ["stack", "split"] }
|
|
771
|
+
},
|
|
772
|
+
slots: {
|
|
773
|
+
List: "entry.list",
|
|
774
|
+
Root: "entry.root",
|
|
775
|
+
Header: "entry.header",
|
|
776
|
+
Body: "entry.body",
|
|
777
|
+
Actions: "entry.actions",
|
|
778
|
+
Footer: "entry.footer"
|
|
779
|
+
}
|
|
780
|
+
}),
|
|
781
|
+
conversation: componentSchema({
|
|
782
|
+
id: "https://aeon-ui.com/schemas/conversation.json",
|
|
783
|
+
title: "Conversation",
|
|
784
|
+
description: "Inbox / DM list \u2014 item state prop idle | unread | selected. Universal messaging chrome.",
|
|
785
|
+
scope: "conversation",
|
|
786
|
+
parts: ["root", "item", "leading", "body", "title", "preview", "meta", "badge"],
|
|
787
|
+
states: ["idle", "unread", "selected"],
|
|
788
|
+
machine: null,
|
|
789
|
+
runtime: "props",
|
|
790
|
+
props: {
|
|
791
|
+
state: { type: "string", enum: ["idle", "unread", "selected"], default: "idle" }
|
|
792
|
+
},
|
|
793
|
+
slots: {
|
|
794
|
+
Root: "conversation.root",
|
|
795
|
+
Item: "conversation.item",
|
|
796
|
+
Leading: "conversation.leading",
|
|
797
|
+
Body: "conversation.body",
|
|
798
|
+
Title: "conversation.title",
|
|
799
|
+
Preview: "conversation.preview",
|
|
800
|
+
Meta: "conversation.meta",
|
|
801
|
+
Badge: "conversation.badge"
|
|
802
|
+
}
|
|
343
803
|
})
|
|
344
804
|
};
|
|
345
805
|
var catalog = {
|
|
@@ -367,8 +827,8 @@ You are building UI with **Aeon UI**, a React component library powered by finit
|
|
|
367
827
|
## Non-negotiable rules
|
|
368
828
|
1. Do not duplicate open/checked/lifecycle in \`useState\` when a machine exists in \`@aeon-ui/primitives\`.
|
|
369
829
|
2. **Button \`status\` is a prop** (\`idle|pending|success|failure|disabled\`). Optional: drive it from \`buttonLifecycleMachine\` via \`useAeonMachine\` in app code.
|
|
370
|
-
3. **Select / Menu / Popover** share \`popoverMachine\` \u2014 never fork another open/closed chart.
|
|
371
|
-
4. **
|
|
830
|
+
3. **Select / Menu / Popover / Combobox / Tooltip** share \`popoverMachine\` for open/closed \u2014 never fork another open/closed chart. Combobox keeps query/highlight in React; Tooltip keeps openDelay/closeDelay/touchDuration in React.
|
|
831
|
+
4. **PinInput** digit buffer is React-local today \u2014 do not invent a pin machine without the component checklist.
|
|
372
832
|
5. **Scroll** uses \`getScrollSnapshot()\` \u2014 no XState machine.
|
|
373
833
|
6. If a machine lists N stable states, the UI must represent all N (totality).
|
|
374
834
|
7. Prefer \`@aeon-ui/react\` (headless) or \`@aeon-ui/ui\` (styled). Relative TS imports use \`.js\` extensions inside the Aeon monorepo only.
|
|
@@ -405,12 +865,29 @@ Rule: Pending must set aria-busy. Do not use disabled alone to mean "saving".`,
|
|
|
405
865
|
dialog: `## Dialog statechart
|
|
406
866
|
States: open | closed. Events: OPEN, CLOSE, TOGGLE.
|
|
407
867
|
Rule: Backdrop click and Escape are CLOSE transitions. Title/Description are required for a11y when open.`,
|
|
408
|
-
popoverFamily: `## Popover family (Popover, Menu, Select open state)
|
|
868
|
+
popoverFamily: `## Popover family (Popover, Menu, Select, Combobox, Tooltip open state)
|
|
409
869
|
Machine: popoverMachine \u2014 states open | closed.
|
|
410
|
-
Rule: Reuse this chart. Never create selectOpenMachine / menuOpenMachine forks
|
|
870
|
+
Rule: Reuse this chart. Never create selectOpenMachine / menuOpenMachine / comboboxOpenMachine / tooltipOpenMachine forks.
|
|
871
|
+
Combobox: query + highlight stay React-local; open/closed must still be popoverMachine.
|
|
872
|
+
Tooltip: openDelay / closeDelay / touchDuration stay React-local; open/closed must still be popoverMachine.`,
|
|
411
873
|
toggle: `## Switch / Checkbox
|
|
412
874
|
Machine: toggleMachine \u2014 checked | unchecked. Events: TOGGLE, CHECK, UNCHECK.
|
|
413
|
-
Rule: Hidden input stays in sync with snapshot for forms
|
|
875
|
+
Rule: Hidden input stays in sync with snapshot for forms.`,
|
|
876
|
+
slider: `## Slider statechart
|
|
877
|
+
Machine: sliderMachine \u2014 idle | dragging; value/min/max/step in context.
|
|
878
|
+
Events: SET_VALUE, STEP, POINTER_DOWN, POINTER_UP, HOME, END.
|
|
879
|
+
Rule: Disabled blocks SET_VALUE / drag; project idle vs dragging on data-aeon-state.`,
|
|
880
|
+
contentRegion: `## Content region statechart
|
|
881
|
+
Machine: contentRegionMachine \u2014 idle \u2192 pending \u2192 (empty | error | ready) \u2192 loadingMore | success.
|
|
882
|
+
Events: LOAD, RESOLVE, REJECT, RETRY, LOAD_MORE, MORE_DONE, SUCCEED, RESET.
|
|
883
|
+
Rule: Every stable state has a slot. Pair with Async for fetch; do not hide empty/error behind a spinner.`,
|
|
884
|
+
toast: `## Toast item statechart
|
|
885
|
+
Machine: toastMachine \u2014 hidden | visible. Events: SHOW, HIDE, DISMISS.
|
|
886
|
+
Rule: Provider list orchestration may use React; each toast item uses the machine.`,
|
|
887
|
+
stickyBar: `## StickyBar statechart
|
|
888
|
+
Machine: stickyBarMachine \u2014 floating | docked | collapsed | hidden.
|
|
889
|
+
Events: DOCK, FLOAT, COLLAPSE, EXPAND, HIDE, SHOW, SET_OFFSET.
|
|
890
|
+
Rule: DOM scope is bar (bar anatomy zones). Do not invent a parallel sticky useState.`
|
|
414
891
|
};
|
|
415
892
|
var GENERATIVE_UI_EXAMPLE = {
|
|
416
893
|
prompt: "Create a multi-step checkout form with error handling.",
|
|
@@ -627,8 +1104,29 @@ function createAgentEventBridge(actor, options) {
|
|
|
627
1104
|
};
|
|
628
1105
|
}
|
|
629
1106
|
|
|
1107
|
+
// src/machine-id.ts
|
|
1108
|
+
function machineRegistryId(machine) {
|
|
1109
|
+
if (machine == null) return void 0;
|
|
1110
|
+
if (machine === "createAsyncMachine") return "async";
|
|
1111
|
+
if (machine.endsWith("Machine")) return machine.slice(0, -"Machine".length);
|
|
1112
|
+
return machine;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
630
1115
|
// src/registry.ts
|
|
631
1116
|
var REGISTRY_BASE = "https://aeon-ui.com/registry";
|
|
1117
|
+
function entryFromSchema(id, schema) {
|
|
1118
|
+
const x = schema["x-aeon"];
|
|
1119
|
+
const mid = machineRegistryId(x.machine);
|
|
1120
|
+
return {
|
|
1121
|
+
id,
|
|
1122
|
+
title: String(schema.title ?? id),
|
|
1123
|
+
scope: x.scope,
|
|
1124
|
+
schemaUrl: `${REGISTRY_BASE}/components/${id}.json`,
|
|
1125
|
+
...mid ? { machineUrl: `${REGISTRY_BASE}/machines/${mid}.json` } : {},
|
|
1126
|
+
runtime: x.runtime,
|
|
1127
|
+
description: String(schema.description ?? "")
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
632
1130
|
var registryCatalog = {
|
|
633
1131
|
$id: `${REGISTRY_BASE}/catalog.json`,
|
|
634
1132
|
version: "0.1.0",
|
|
@@ -639,44 +1137,9 @@ var registryCatalog = {
|
|
|
639
1137
|
component: `${REGISTRY_BASE}/components/{id}.json`,
|
|
640
1138
|
machine: `${REGISTRY_BASE}/machines/{id}.json`
|
|
641
1139
|
},
|
|
642
|
-
components:
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
title: "Button",
|
|
646
|
-
scope: "button",
|
|
647
|
-
schemaUrl: `${REGISTRY_BASE}/components/button.json`,
|
|
648
|
-
machineUrl: `${REGISTRY_BASE}/machines/buttonLifecycle.json`,
|
|
649
|
-
runtime: "status prop",
|
|
650
|
-
description: "Action control with idle|pending|success|failure|disabled"
|
|
651
|
-
},
|
|
652
|
-
{
|
|
653
|
-
id: "async",
|
|
654
|
-
title: "Async",
|
|
655
|
-
scope: "async",
|
|
656
|
-
schemaUrl: `${REGISTRY_BASE}/components/async.json`,
|
|
657
|
-
machineUrl: `${REGISTRY_BASE}/machines/async.json`,
|
|
658
|
-
runtime: "useAeonMachine",
|
|
659
|
-
description: "Fetch lifecycle region with full totality"
|
|
660
|
-
},
|
|
661
|
-
{
|
|
662
|
-
id: "field",
|
|
663
|
-
title: "Field",
|
|
664
|
-
scope: "field",
|
|
665
|
-
schemaUrl: `${REGISTRY_BASE}/components/field.json`,
|
|
666
|
-
machineUrl: `${REGISTRY_BASE}/machines/field.json`,
|
|
667
|
-
runtime: "useAeonMachine",
|
|
668
|
-
description: "Parallel interaction \xD7 validation \xD7 submission"
|
|
669
|
-
},
|
|
670
|
-
{
|
|
671
|
-
id: "dialog",
|
|
672
|
-
title: "Dialog",
|
|
673
|
-
scope: "dialog",
|
|
674
|
-
schemaUrl: `${REGISTRY_BASE}/components/dialog.json`,
|
|
675
|
-
machineUrl: `${REGISTRY_BASE}/machines/dialog.json`,
|
|
676
|
-
runtime: "useAeonMachine",
|
|
677
|
-
description: "Modal open/closed"
|
|
678
|
-
}
|
|
679
|
-
],
|
|
1140
|
+
components: Object.entries(componentSchemas).map(
|
|
1141
|
+
([id, schema]) => entryFromSchema(id, schema)
|
|
1142
|
+
),
|
|
680
1143
|
client: {
|
|
681
1144
|
fetchCatalog: `fetch('${REGISTRY_BASE}/catalog.json').then(r => r.json())`,
|
|
682
1145
|
fetchComponent: `id => fetch(\`${REGISTRY_BASE}/components/\${id}.json\`).then(r => r.json())`,
|
|
@@ -697,5 +1160,6 @@ export {
|
|
|
697
1160
|
componentSchema,
|
|
698
1161
|
componentSchemas,
|
|
699
1162
|
createAgentEventBridge,
|
|
1163
|
+
machineRegistryId,
|
|
700
1164
|
registryCatalog
|
|
701
1165
|
};
|