@loworbitstudio/visor 1.0.0 → 1.2.1

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/README.md CHANGED
@@ -23,6 +23,42 @@ npx visor init
23
23
  | `visor suggest --for <context>` | Get component suggestions for a use case |
24
24
  | `visor migrate token-substitution [path]` | Apply the §3.1 V7-primitive → Visor-semantic substitution table (dry-run by default; use `--apply` to commit) |
25
25
  | `visor check design <path>` | Scan frontend code for Borealis design anti-patterns (deterministic, no LLM) |
26
+ | `visor sandbox init <name>` | Scaffold a Next.js sandbox for in-vivo primitive iteration from a design-handoff manifest |
27
+ | `visor sandbox dev --name <name>` | Boot the sandbox dev server on its allocated port (port 3000 reserved) |
28
+ | `visor sandbox approve --name <name>` | Capture Playwright screenshots of every sandbox route as the visual spec (use `--diff` to pixel-diff vs prior approved) |
29
+
30
+ ## Sandbox
31
+
32
+ The `sandbox` subcommand scaffolds a Next.js app at `.lo/sandbox/<name>/`
33
+ populated with real Visor primitives (via `visor add`) plus visible gap stubs
34
+ for primitives not yet shipped. Operators iterate visually in a real Next.js
35
+ dev server; on approval, captures become the `visual_spec` attached to the
36
+ gap primitive's VI ticket.
37
+
38
+ ```bash
39
+ # 1. Init from a design-handoff manifest
40
+ npx visor sandbox init org-mgmt \
41
+ --handoff ~/Code/playbook/.lo/pattern-builds/organization-management/design-handoff.md \
42
+ --theme entr
43
+
44
+ # 2. Iterate visually
45
+ npx visor sandbox dev --name org-mgmt
46
+ # → prints per-route URLs on a port >= 4060 (never 3000)
47
+
48
+ # 3. Approve captures
49
+ npx visor sandbox approve --name org-mgmt # writes captures/approved/*.png
50
+ npx visor sandbox approve --name org-mgmt --diff # pixel-diff vs prior approved
51
+ ```
52
+
53
+ Pass `--theme <slug>` to look up a theme by name in `themes/` or
54
+ `custom-themes/`, or `--theme /path/to/theme.visor.yaml` for an arbitrary
55
+ location. Pass `--overwrite` to replace an existing sandbox; `--skip-install`
56
+ skips `npm install` (useful for test fixtures).
57
+
58
+ Gap primitives appear as visible dashed-border placeholders containing
59
+ `GAP: VI-<NNN>` plus the primitive name. Hand-edit the stub at
60
+ `components/stubs/<primitive>.tsx` to sketch the design in place; the operator
61
+ edits propagate into the captures and become the visual spec downstream.
26
62
 
27
63
  ## Target platforms
28
64
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.4.0",
3
- "generated_at": "2026-05-18T21:20:42.449Z",
3
+ "generated_at": "2026-05-20T19:48:54.659Z",
4
4
  "components": {
5
5
  "accessibility-specimen": {
6
6
  "changeType": "current",
@@ -50,6 +50,12 @@
50
50
  "breakingChange": false,
51
51
  "migrationNote": null
52
52
  },
53
+ "box": {
54
+ "changeType": "current",
55
+ "files": [],
56
+ "breakingChange": false,
57
+ "migrationNote": null
58
+ },
53
59
  "breadcrumb": {
54
60
  "changeType": "current",
55
61
  "files": [],
@@ -128,6 +134,12 @@
128
134
  "breakingChange": false,
129
135
  "migrationNote": null
130
136
  },
137
+ "color-picker": {
138
+ "changeType": "current",
139
+ "files": [],
140
+ "breakingChange": false,
141
+ "migrationNote": null
142
+ },
131
143
  "color-swatch": {
132
144
  "changeType": "current",
133
145
  "files": [],
@@ -152,6 +164,12 @@
152
164
  "breakingChange": false,
153
165
  "migrationNote": null
154
166
  },
167
+ "container": {
168
+ "changeType": "current",
169
+ "files": [],
170
+ "breakingChange": false,
171
+ "migrationNote": null
172
+ },
155
173
  "context-menu": {
156
174
  "changeType": "current",
157
175
  "files": [],
@@ -242,6 +260,12 @@
242
260
  "breakingChange": false,
243
261
  "migrationNote": null
244
262
  },
263
+ "grid": {
264
+ "changeType": "current",
265
+ "files": [],
266
+ "breakingChange": false,
267
+ "migrationNote": null
268
+ },
245
269
  "heading": {
246
270
  "changeType": "current",
247
271
  "files": [],
@@ -266,6 +290,12 @@
266
290
  "breakingChange": false,
267
291
  "migrationNote": null
268
292
  },
293
+ "inline": {
294
+ "changeType": "current",
295
+ "files": [],
296
+ "breakingChange": false,
297
+ "migrationNote": null
298
+ },
269
299
  "input": {
270
300
  "changeType": "current",
271
301
  "files": [],
@@ -392,6 +422,12 @@
392
422
  "breakingChange": false,
393
423
  "migrationNote": null
394
424
  },
425
+ "score-indicator": {
426
+ "changeType": "current",
427
+ "files": [],
428
+ "breakingChange": false,
429
+ "migrationNote": null
430
+ },
395
431
  "scroll-area": {
396
432
  "changeType": "current",
397
433
  "files": [],
@@ -464,6 +500,12 @@
464
500
  "breakingChange": false,
465
501
  "migrationNote": null
466
502
  },
503
+ "stack": {
504
+ "changeType": "current",
505
+ "files": [],
506
+ "breakingChange": false,
507
+ "migrationNote": null
508
+ },
467
509
  "stat-card": {
468
510
  "changeType": "current",
469
511
  "files": [],