2.3 KiB
Shared Components
Soleprint has two distributable components. They live inside the spr repo and get published into consuming projects.
Management is handled by ctrl/spr.py.
soleprint-ui
Vue component library. Includes GraphRenderer, sidebar components, and shared UI pieces.
Source: soleprint/common/ui/
Publish to a consuming project:
python ctrl/spr.py publish soleprint-ui <target>
The target project receives the built files and commits them directly. No npm dependency on spr.
To give a project only the parts it uses — readable source, not the whole library — slice it instead:
make ui scan <app-dir> # what it uses, and how its copy compares with spr
./ctrl/ui.sh slice <app>/ui.toml # write the slice its run file describes
See Export / Compile for run files, the two deliveries and drift.
Reference: UI reference — every export's props, models, emits,
slots, closure, packages and tokens, generated from the source by make reference in
soleprint/common/ui (which also has make check: typecheck, tests, reference current,
parts in agreement). Hand-written notes live beside the library in common/ui/notes/.
soleprint-modelgen
Model generator. Reads schema definitions and produces model files.
Source: soleprint/station/tools/modelgen/
Has a pyproject.toml for local editable install:
pip install -e soleprint/station/tools/modelgen/
Registry
registry.json at the repo root defines all components. Each entry has:
- name — component identifier
- type —
npmorpython - source — path within the repo
- version — current version string
Commands
python ctrl/spr.py list # Show all components
python ctrl/spr.py sync <component> <target> # One-time copy
python ctrl/spr.py watch <component> <target> # Live sync (ctrl+c to stop)
python ctrl/spr.py publish <component> <target> # Versioned publish
python ctrl/spr.py diff <component> <target> # Show differences
sync copies files once. watch keeps them in sync while you develop. publish stamps a version and copies.
The consuming project has no awareness of spr. It just commits whatever lands in the target folder.