Skip to content
Open
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
0ad42f5
Refactor layout engine atoms package and add Vue runtime support
MichaelDecent Oct 16, 2025
d6e025a
Merge branch 'mono/dev' into layout_engine
MichaelDecent Oct 17, 2025
82f9278
feat: Add Vue example for dashboard manifest generation
MichaelDecent Oct 17, 2025
a869d8a
feat: Enhance Vue runtime with page selection and theme management fe…
MichaelDecent Oct 17, 2025
e67d8ab
feat: add realtime manifest streaming support and websocket event han…
MichaelDecent Oct 17, 2025
07b8bc7
feat: Design system alignment
MichaelDecent Oct 20, 2025
155b4db
feat: Extension hooks: - Allow custom components to be registered at …
MichaelDecent Oct 20, 2025
dc7eafc
Add unit coverage for new runtime utilities, plus integration tests t…
MichaelDecent Oct 20, 2025
d635876
creating working examples
MichaelDecent Oct 20, 2025
5055f51
added 2 new examples
MichaelDecent Oct 20, 2025
aae35b5
fixed related bugs
MichaelDecent Oct 21, 2025
b09aef4
fix: added all shared/reusable logic to runtime/core
MichaelDecent Oct 21, 2025
b0c9178
final bug fix
MichaelDecent Oct 22, 2025
d3254b6
added an hybrid demo
MichaelDecent Oct 22, 2025
baeb611
sepeared patch module
MichaelDecent Oct 22, 2025
250bf18
feat: added svelte thin layer wrapper
MichaelDecent Oct 24, 2025
acb90b0
finalizing on the svelte thin layer wrapper
MichaelDecent Oct 24, 2025
f31b2dd
completed the svelte thin layer wrapper
MichaelDecent Oct 27, 2025
5109ee8
feat: swarmakit atom mapping
MichaelDecent Oct 28, 2025
d647c9e
refactor: remove deprecated Vue and React atom presets, enhance Svelt…
MichaelDecent Oct 31, 2025
777ef53
feat: introduce Svelte runtime enhancements and new components
MichaelDecent Oct 31, 2025
72c00d1
feat: add Svelte to supported catalogs in layout engine
MichaelDecent Nov 3, 2025
776ad8e
feat: add Vue and Svelte landing page demos with FastAPI integration
MichaelDecent Nov 3, 2025
a9ce196
chore: remove outdated documentation and example files for Vue and Sv…
MichaelDecent Nov 3, 2025
e9f0a77
chore: remove deprecated core modules and utilities from layout engine
MichaelDecent Nov 3, 2025
7f54248
chore: remove Vue catalog file from layout engine atoms
MichaelDecent Nov 3, 2025
19185a6
chore: remove runtime adapters for Vue from layout engine atoms
MichaelDecent Nov 3, 2025
31e3f89
refactor: introduce IAtomCatalog interface and enhance AtomPresetCata…
MichaelDecent Nov 4, 2025
87c73cf
chore: update versioning for layout-engine and layout-engine-atoms to…
MichaelDecent Nov 5, 2025
ed814f5
feat: add high-level manifest helpers and quick manifest building uti…
MichaelDecent Nov 5, 2025
dce3dc7
exp: added swarma kit repo
MichaelDecent Nov 5, 2025
b128bf2
feat: introduce multi-page dashboard demo with FastAPI integration an…
MichaelDecent Nov 6, 2025
491eef6
feat: enhance multi-page dashboard with new layout options and UI hoo…
MichaelDecent Nov 6, 2025
b3ec8ea
feat: implement WebSocket event hub for real-time mission control upd…
MichaelDecent Nov 10, 2025
34da114
feat: integrate real-time capabilities with WebSocket support and enh…
MichaelDecent Nov 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,5 @@ kms.db
*.db
target/
!.gitkeep # keep the empty dir in repo

node_modules/
6 changes: 6 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

96 changes: 96 additions & 0 deletions pkgs/experimental/layout_engine/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,79 @@ artifacts directly from the repository.
- **Site-aware routing helpers** – `layout_engine.targets.SiteRouter` produces SSR HTML shells, manifest JSON payloads, and ESM
import maps you can bind directly to FastAPI, Starlette, or any HTTP framework route handlers.

### Unified manifest schema

Every manifest emitted by Layout Engine adheres to the following structure:

```json
{
"kind": "layout_manifest",
"version": "2025.10",
"viewport": {"width": 1280, "height": 720},
"grid": {
"row_height": 160,
"gap_x": 24,
"gap_y": 24,
"columns": [{"size": {"value": 1, "unit": "fr", "min_px": 72}}],
"baseline_unit": 12,
"tokens": {"columns": "sgd:columns:12", "baseline": "sgd:baseline:12"}
},
"tiles": [
{
"id": "hero",
"role": "swarmakit:vue:hero-card",
"frame": {"x": 0, "y": 0, "w": 1280, "h": 320},
"props": {"title": "Quarterly Highlights", "accent": "indigo", "size": "lg"},
"atom": {
"role": "swarmakit:vue:hero-card",
"module": "@swarmakit/vue",
"export": "HeroCard",
"framework": "vue",
"package": "@swarmakit/vue",
"family": "swarmakit",
"version": "0.0.22",
"defaults": {"size": "md"},
"tokens": {"variant": "hero"},
"registry": {
"name": "swarmakit",
"framework": "vue",
"version": "0.0.22"
}
}
}
],
"site": {
"active_page": "dashboard",
"navigation": {"base_path": "/"},
"pages": [
{"id": "dashboard", "route": "/", "title": "Dashboard"},
{"id": "catalog", "route": "/catalog", "title": "Catalog"}
]
},
"channels": [
{
"id": "ui.events",
"scope": "page",
"topic": "page:{page_id}:ui",
"description": "UI event bus",
"payload_schema": {"type": "object"},
"meta": {"transport": "ws"}
}
],
"ws_routes": [
{"path": "/ws/ui", "channels": ["ui.events"], "description": "Multiplexed UI events"}
],
"etag": "61d6d0d0b6f3c5f5..."
}
```

Key highlights:

- **Grid tokens** capture Swiss-grid presets so wrappers can align columns/gaps/baselines without recomputing measurements.
- **Atom metadata** preserves registry origin and package details, enabling thin wrappers (Vue, Svelte, React) to auto-import `@swarmakit/{framework}` modules with no bespoke glue.
- **Site block** embeds page navigation so multi-page experiences hydrate from a single manifest.
- **Channels & websocket routes** describe mux topics so runtime shells subscribe automatically.

### Serving manifests and import maps

`SiteRouter` centralizes the endpoints required by single-page and multi-page applications. Use
Expand All @@ -136,6 +209,24 @@ that powers the import map consumed by Vue's module loader. Defaults defined on
merged with tile props every time a manifest is built, so downstream atoms always receive a
complete prop payload.

#### Registering SwarmaKit atoms

`layout-engine` does not automatically install SwarmaKit presets. When `layout_engine_atoms` is
available you can populate an `AtomRegistry` using the helper introduced in v0.1.0:

```python
from layout_engine import AtomRegistry, register_swarma_atoms

atoms = register_swarma_atoms(AtomRegistry(), catalog="vue")

# optional overrides — merged instead of replaced
atoms.override("swarmakit:vue:button", defaults={"size": "lg"})
```

The helper lazily imports `layout_engine_atoms.catalog` so projects without SwarmaKit remain
functional. Overrides use additive merges (defaults/tokens/registry) to avoid clobbering preset
values.

```python
from layout_engine import AtomRegistry, AtomSpec
from layout_engine.mfe.default import RemoteRegistry
Expand Down Expand Up @@ -437,6 +528,11 @@ MPA pages perform the same fetch using their page-specific manifest endpoint, so
call `loadManifest(`/catalog/${itemId}/manifest.json`, new URLSearchParams(location.search))` and the
server will deliver props for the requested `itemId`.

Thin wrappers for React or Svelte follow identical steps: fetch the manifest, honour `manifest.grid.tokens`
when computing breakpoints, and import atoms using the `module`/`export` values stored in each tile's
`atom` block. Because registry metadata travels with the manifest, no framework-specific glue or
per-role switch statements are necessary.

### 5. Event handling with multiplexed WebSockets

Install the optional server extras (`layout-engine[server]`) plus the WebSocket JSON-RPC transport
Expand Down
33 changes: 0 additions & 33 deletions pkgs/experimental/layout_engine/examples/vue-example/README.md

This file was deleted.

Loading
Loading