@1agh/maude 0.15.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/LICENSE +21 -0
- package/README.md +166 -0
- package/cli/bin/maude.exe +15 -0
- package/cli/bin/maude.mjs +45 -0
- package/cli/bin/mdcc.exe +10 -0
- package/cli/bin/mdcc.mjs +7 -0
- package/cli/cli-wrapper.cjs +67 -0
- package/cli/commands/config.mjs +94 -0
- package/cli/commands/design.mjs +386 -0
- package/cli/commands/help.mjs +57 -0
- package/cli/commands/init.mjs +178 -0
- package/cli/commands/version.mjs +7 -0
- package/cli/install.cjs +113 -0
- package/cli/lib/argv.mjs +37 -0
- package/cli/lib/argv.test.mjs +46 -0
- package/cli/lib/copy-tree.mjs +78 -0
- package/package.json +94 -0
- package/plugins/design/dev-server/annotations-context-toolbar.tsx +397 -0
- package/plugins/design/dev-server/annotations-layer.tsx +1717 -0
- package/plugins/design/dev-server/api.ts +674 -0
- package/plugins/design/dev-server/bin/_screenshot-playwright.mjs +50 -0
- package/plugins/design/dev-server/bin/bootstrap-check.sh +83 -0
- package/plugins/design/dev-server/bin/canvas-edit.sh +48 -0
- package/plugins/design/dev-server/bin/handoff.sh +27 -0
- package/plugins/design/dev-server/bin/screenshot.sh +232 -0
- package/plugins/design/dev-server/bin/server-up.sh +135 -0
- package/plugins/design/dev-server/bin/slug.sh +22 -0
- package/plugins/design/dev-server/bin/smoke.sh +272 -0
- package/plugins/design/dev-server/build.ts +267 -0
- package/plugins/design/dev-server/canvas-build.ts +219 -0
- package/plugins/design/dev-server/canvas-edit.ts +388 -0
- package/plugins/design/dev-server/canvas-header.ts +165 -0
- package/plugins/design/dev-server/canvas-icons.tsx +131 -0
- package/plugins/design/dev-server/canvas-lib-inline.ts +260 -0
- package/plugins/design/dev-server/canvas-lib-resolver.ts +85 -0
- package/plugins/design/dev-server/canvas-lib.tsx +1995 -0
- package/plugins/design/dev-server/canvas-meta.schema.json +181 -0
- package/plugins/design/dev-server/canvas-pipeline.ts +270 -0
- package/plugins/design/dev-server/canvas-shell.tsx +813 -0
- package/plugins/design/dev-server/client/app.jsx +2027 -0
- package/plugins/design/dev-server/client/hmr.mjs +85 -0
- package/plugins/design/dev-server/client/iframe-lazy.mjs +121 -0
- package/plugins/design/dev-server/client/index.html +15 -0
- package/plugins/design/dev-server/client/styles/0-reset.css +18 -0
- package/plugins/design/dev-server/client/styles/1-tokens.css +297 -0
- package/plugins/design/dev-server/client/styles/2-layout.css +35 -0
- package/plugins/design/dev-server/client/styles/3-shell.css +906 -0
- package/plugins/design/dev-server/client/styles/4-components.css +1268 -0
- package/plugins/design/dev-server/client/styles/5-utilities.css +4 -0
- package/plugins/design/dev-server/client/styles/_index.css +24 -0
- package/plugins/design/dev-server/client/styles.css +1419 -0
- package/plugins/design/dev-server/config.schema.json +147 -0
- package/plugins/design/dev-server/context-menu.tsx +343 -0
- package/plugins/design/dev-server/context.ts +173 -0
- package/plugins/design/dev-server/dist/client.bundle.js +20323 -0
- package/plugins/design/dev-server/dist/styles.css +2875 -0
- package/plugins/design/dev-server/examples/README.md +9 -0
- package/plugins/design/dev-server/examples/perf-100-artboards.tsx +113 -0
- package/plugins/design/dev-server/fs-watch.ts +63 -0
- package/plugins/design/dev-server/handoff.ts +721 -0
- package/plugins/design/dev-server/history.ts +125 -0
- package/plugins/design/dev-server/hmr-broadcast.ts +114 -0
- package/plugins/design/dev-server/http.ts +413 -0
- package/plugins/design/dev-server/input-router.tsx +485 -0
- package/plugins/design/dev-server/inspect.ts +365 -0
- package/plugins/design/dev-server/locator.ts +159 -0
- package/plugins/design/dev-server/mem.ts +97 -0
- package/plugins/design/dev-server/runtime-bundle.ts +235 -0
- package/plugins/design/dev-server/server.mjs +1246 -0
- package/plugins/design/dev-server/server.ts +131 -0
- package/plugins/design/dev-server/test/_helpers.ts +81 -0
- package/plugins/design/dev-server/test/active-state.test.ts +145 -0
- package/plugins/design/dev-server/test/annotations-api.test.ts +146 -0
- package/plugins/design/dev-server/test/annotations-layer.test.ts +419 -0
- package/plugins/design/dev-server/test/binary-smoke.test.ts +47 -0
- package/plugins/design/dev-server/test/bundle-smoke.test.ts +29 -0
- package/plugins/design/dev-server/test/canvas-build.test.ts +78 -0
- package/plugins/design/dev-server/test/canvas-edit.test.ts +139 -0
- package/plugins/design/dev-server/test/canvas-header.test.ts +127 -0
- package/plugins/design/dev-server/test/canvas-lib-inline.test.ts +146 -0
- package/plugins/design/dev-server/test/canvas-lib-resolver.test.ts +112 -0
- package/plugins/design/dev-server/test/canvas-meta-api.test.ts +236 -0
- package/plugins/design/dev-server/test/canvas-pipeline.test.ts +180 -0
- package/plugins/design/dev-server/test/canvas-route.test.ts +176 -0
- package/plugins/design/dev-server/test/fs-watch.test.ts +41 -0
- package/plugins/design/dev-server/test/handoff-static-frames.test.ts +215 -0
- package/plugins/design/dev-server/test/handoff.test.ts +281 -0
- package/plugins/design/dev-server/test/history-rollback.test.ts +62 -0
- package/plugins/design/dev-server/test/hmr-broadcast.test.ts +108 -0
- package/plugins/design/dev-server/test/input-router.test.ts +316 -0
- package/plugins/design/dev-server/test/locator.test.ts +214 -0
- package/plugins/design/dev-server/test/perf-harness.ts +193 -0
- package/plugins/design/dev-server/test/phase-3.6-smoke.test.ts +77 -0
- package/plugins/design/dev-server/test/runtime-bundle.test.ts +69 -0
- package/plugins/design/dev-server/test/server-lifecycle.test.ts +28 -0
- package/plugins/design/dev-server/test/tool-palette.test.tsx +55 -0
- package/plugins/design/dev-server/test/use-annotation-selection.test.tsx +77 -0
- package/plugins/design/dev-server/test/use-artboard-drag.test.ts +325 -0
- package/plugins/design/dev-server/test/use-selection-set.test.tsx +166 -0
- package/plugins/design/dev-server/test/use-snap-guides.test.ts +190 -0
- package/plugins/design/dev-server/test/use-tool-mode.test.tsx +93 -0
- package/plugins/design/dev-server/test/ws-handshake.test.ts +33 -0
- package/plugins/design/dev-server/tool-palette.tsx +278 -0
- package/plugins/design/dev-server/tsconfig.json +26 -0
- package/plugins/design/dev-server/use-annotation-selection.tsx +92 -0
- package/plugins/design/dev-server/use-annotations-visibility.tsx +43 -0
- package/plugins/design/dev-server/use-artboard-drag.tsx +445 -0
- package/plugins/design/dev-server/use-selection-set.tsx +224 -0
- package/plugins/design/dev-server/use-snap-guides.tsx +215 -0
- package/plugins/design/dev-server/use-tool-mode.tsx +114 -0
- package/plugins/design/dev-server/ws.ts +90 -0
- package/plugins/design/templates/_shell.html +177 -0
- package/plugins/design/templates/canvas.tsx.template +54 -0
- package/plugins/design/templates/design-system-inspiration/_MAPPING.md +277 -0
- package/plugins/design/templates/design-system-inspiration/_README.md +71 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-banner.html +68 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-empty-state-generous.html +39 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-feature-grid.html +62 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-marketing-card.html +63 -0
- package/plugins/design/templates/design-system-inspiration/audience-consumer/components-testimonial.html +80 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-code-block.html +71 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-diff-view.html +65 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-log-stream.html +62 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-monospace-table.html +57 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/components-terminal-pane.html +67 -0
- package/plugins/design/templates/design-system-inspiration/audience-developer/type-mono.html +57 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/colors-presence.html +74 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-command-palette.html +90 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-keyboard.html +51 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-list.html +89 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-shortcuts-overlay.html +85 -0
- package/plugins/design/templates/design-system-inspiration/audience-pro/components-toast-menu.html +80 -0
- package/plugins/design/templates/design-system-inspiration/core/INDEX.md.tpl +25 -0
- package/plugins/design/templates/design-system-inspiration/core/README.orchestration.md.tpl +71 -0
- package/plugins/design/templates/design-system-inspiration/core/README.philosophy.md.tpl +77 -0
- package/plugins/design/templates/design-system-inspiration/core/SKILL.md.tpl +50 -0
- package/plugins/design/templates/design-system-inspiration/core/colors_and_type.css.tpl +111 -0
- package/plugins/design/templates/design-system-inspiration/core/config.json.tpl +28 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/_layout.css +113 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/colors-accent.html +48 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/colors-surfaces.html +49 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/colors-text.html +52 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/components-buttons.html +83 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/components-cards.html +79 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/components-inputs.html +82 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/motion.html +66 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/spacing-scale.html +53 -0
- package/plugins/design/templates/design-system-inspiration/core/preview/type-scale.html +62 -0
- package/plugins/design/templates/design-system-inspiration/foundations/borders.html +39 -0
- package/plugins/design/templates/design-system-inspiration/foundations/elevation.html +46 -0
- package/plugins/design/templates/design-system-inspiration/foundations/focus.html +48 -0
- package/plugins/design/templates/design-system-inspiration/foundations/grid.html +51 -0
- package/plugins/design/templates/design-system-inspiration/foundations/iconography.html +73 -0
- package/plugins/design/templates/design-system-inspiration/foundations/opacity.html +45 -0
- package/plugins/design/templates/design-system-inspiration/foundations/radii.html +40 -0
- package/plugins/design/templates/design-system-inspiration/foundations/selection.html +45 -0
- package/plugins/design/templates/design-system-inspiration/meta/accessibility.html +62 -0
- package/plugins/design/templates/design-system-inspiration/meta/i18n.html +73 -0
- package/plugins/design/templates/design-system-inspiration/meta/presence-multiplayer.html +71 -0
- package/plugins/design/templates/design-system-inspiration/meta/tokens-index.html +80 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-auth.html +78 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-data-density.html +61 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-error-pages.html +70 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-form-layouts.html +70 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-onboarding.html +71 -0
- package/plugins/design/templates/design-system-inspiration/patterns/patterns-pricing.html +83 -0
- package/plugins/design/templates/design-system-inspiration/platform-desktop/components-resize-panels.html +63 -0
- package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-index.html +55 -0
- package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-showcase.html +302 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-bottom-sheet.html +63 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-pull-to-refresh.html +74 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-segmented-control.html +51 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/components-tab-bar.html +57 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-index.html +58 -0
- package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-showcase.html +237 -0
- package/plugins/design/templates/design-system-inspiration/status/colors-status.html +49 -0
- package/plugins/design/templates/design-system-inspiration/status/components-status.html +63 -0
- package/plugins/design/templates/design-system-inspiration/status/skeletons.html +74 -0
- package/plugins/design/templates/design-system-inspiration/theme-both/colors-themes-side-by-side.html +59 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-callout.html +74 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-dialogs.html +81 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-tables.html +101 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-toggles.html +74 -0
- package/plugins/design/templates/design-system-inspiration/universal/components-tooltips.html +74 -0
- package/plugins/design/templates/design-system-inspiration/universal/empty-state.html.tpl +34 -0
- package/plugins/design/templates/design-system-inspiration/universal/logo.html +42 -0
- package/plugins/design/templates/ds-specimen.tsx.template +59 -0
- package/plugins/flow/.claude-plugin/config.schema.json +398 -0
- package/plugins/flow/README.md +45 -0
- package/plugins/flow/templates/ai-skeleton/INDEX.md +50 -0
- package/plugins/flow/templates/ai-skeleton/README.md +46 -0
- package/plugins/flow/templates/ai-skeleton/browser/har/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/browser/snapshots/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/business/README.md +12 -0
- package/plugins/flow/templates/ai-skeleton/context/README.md +12 -0
- package/plugins/flow/templates/ai-skeleton/decisions/README.md +20 -0
- package/plugins/flow/templates/ai-skeleton/design-import/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/dev-logs/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/device/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/docs/README.md +5 -0
- package/plugins/flow/templates/ai-skeleton/logs/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/logs/README.md +13 -0
- package/plugins/flow/templates/ai-skeleton/plans/README.md +16 -0
- package/plugins/flow/templates/ai-skeleton/plans/archive/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/release-guide.md +35 -0
- package/plugins/flow/templates/ai-skeleton/reviews/README.md +15 -0
- package/plugins/flow/templates/ai-skeleton/scenarios/README.md +26 -0
- package/plugins/flow/templates/ai-skeleton/scenarios/_lib/.gitkeep +0 -0
- package/plugins/flow/templates/ai-skeleton/state/STATE.md +25 -0
- package/plugins/flow/templates/ai-skeleton/templates/HANDOFF.md +32 -0
- package/plugins/flow/templates/ai-skeleton/workflows.config.json +74 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# Mapping — discovery answer → scaffold file set
|
|
2
|
+
|
|
3
|
+
> The contract for skill `design-system` (bootstrap mode). Computes which specimens land in `<designRoot>/system/<ds>/preview/` based on the 8 discovery answers + computed `activeFamilies[]`.
|
|
4
|
+
>
|
|
5
|
+
> **Library state (2026-05-13):** 67 reference HTML specimens across 11 category dirs. Earlier copies of this mapping described the conditional dirs as "filled in follow-up phases" — that's no longer true; they're populated and the bootstrap flow MUST honor them.
|
|
6
|
+
|
|
7
|
+
## Library layout (where to find what)
|
|
8
|
+
|
|
9
|
+
| Dir | Role | Files | Gate for scaffold |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| `core/` | Always-on tokens + 10 baseline previews + `_layout.css` chrome | 10 + 6 .tpl | always |
|
|
12
|
+
| `universal/` | Always-on cross-cutting components (toggles, dialogs, tooltips, tables, callout, empty-state, logo) | 7 | always (mostly) |
|
|
13
|
+
| `foundations/` | Token-foundation specimens beyond core (borders, elevation, focus, grid, iconography, opacity, radii, selection) | 8 | always-on for any non-`minimal` profile |
|
|
14
|
+
| `status/` | Status-family specimens (colors-status, components-status, skeletons) | 3 | IF `"status" ∈ activeFamilies` |
|
|
15
|
+
| `audience-developer/` | Developer-tool patterns (code-block, diff-view, log-stream, monospace-table, terminal-pane, type-mono) | 6 | IF Q2 audience = `developer tool` |
|
|
16
|
+
| `audience-pro/` | Pro-tool patterns (colors-presence, command-palette, keyboard, list, shortcuts-overlay, toast-menu) | 6 | IF Q2 audience = `pro tool` |
|
|
17
|
+
| `audience-consumer/` | Consumer patterns (banner, generous empty-state, feature-grid, marketing-card, testimonial) | 5 | IF Q2 audience = `consumer app` |
|
|
18
|
+
| `platform-desktop/` | Desktop-only patterns (resize-panels) + `ui_kits-desktop-index.html` catalog + `ui_kits-desktop-showcase.html` full mock | 3 | IF Q3 platforms includes desktop (default) |
|
|
19
|
+
| `platform-mobile/` | Mobile-only patterns (bottom-sheet, pull-to-refresh, segmented-control, tab-bar) + `ui_kits-mobile-index.html` catalog + `ui_kits-mobile-showcase.html` full mock | 6 | IF Q3 platforms includes mobile |
|
|
20
|
+
| `theme-both/` | Side-by-side dark+light comparison | 1 | IF Q4 theme = `both equal` |
|
|
21
|
+
| `patterns/` | Cross-cutting flows (auth, data-density, error-pages, form-layouts, onboarding, pricing) | 6 | opt-in via `config.extensions` or explicit user request — not auto-scaffolded |
|
|
22
|
+
| `meta/` | Cross-cutting concerns (accessibility, i18n, presence-multiplayer, tokens-index) | 4 | opt-in / informational |
|
|
23
|
+
|
|
24
|
+
**Total reference inventory: 67 HTML specimens.** Typical scaffold output: 18–30 files depending on audience + platforms + theme + completenessProfile.
|
|
25
|
+
|
|
26
|
+
## Always-on (Core)
|
|
27
|
+
|
|
28
|
+
Every project — regardless of discovery — gets:
|
|
29
|
+
|
|
30
|
+
- `core/README.philosophy.md.tpl` → `system/<ds>/README.md`
|
|
31
|
+
- `core/README.orchestration.md.tpl` → `.design/README.md` (if missing)
|
|
32
|
+
- `core/SKILL.md.tpl` → `system/<ds>/SKILL.md`
|
|
33
|
+
- `core/INDEX.md.tpl` → `.design/INDEX.md` (if missing)
|
|
34
|
+
- `core/config.json.tpl` → `.design/config.json` (if missing or in re-bootstrap)
|
|
35
|
+
- `core/colors_and_type.css.tpl` → `system/<ds>/colors_and_type.css`
|
|
36
|
+
- `core/preview/_layout.css` → `system/<ds>/preview/_layout.css` (copy as-is)
|
|
37
|
+
- `core/preview/colors-{text,surfaces,accent}.html` → 3 token specimens
|
|
38
|
+
- `core/preview/type-scale.html` → 1 typography specimen
|
|
39
|
+
- `core/preview/spacing-scale.html` → 1 spacing specimen
|
|
40
|
+
- `core/preview/motion.html` → 1 motion specimen
|
|
41
|
+
- `core/preview/components-{buttons,cards,inputs}.html` → 3 component specimens
|
|
42
|
+
|
|
43
|
+
**Core minimum: 10 preview specimens (excluding `.tpl` docs and `_layout.css`).**
|
|
44
|
+
|
|
45
|
+
## Always-on (Foundations layer)
|
|
46
|
+
|
|
47
|
+
Token-foundation specimens that ship for any non-`minimal` profile:
|
|
48
|
+
|
|
49
|
+
- `foundations/radii.html` → `system/<ds>/preview/radii.tsx`
|
|
50
|
+
- `foundations/elevation.html` → `system/<ds>/preview/elevation.tsx`
|
|
51
|
+
- `foundations/iconography.html` → `system/<ds>/preview/iconography.tsx` (skill re-curates icon set to project domain at scaffold time — see Rules #8 below)
|
|
52
|
+
- `foundations/focus.html` → `system/<ds>/preview/focus.tsx`
|
|
53
|
+
- `foundations/grid.html` → `system/<ds>/preview/grid.tsx`
|
|
54
|
+
- `foundations/borders.html` → `system/<ds>/preview/borders.tsx`
|
|
55
|
+
- `foundations/opacity.html` → `system/<ds>/preview/opacity.tsx`
|
|
56
|
+
- `foundations/selection.html` → `system/<ds>/preview/selection.tsx`
|
|
57
|
+
|
|
58
|
+
**Foundations default: +8 files.** Profile `minimal` drops these. Profile `standard`/`strict` includes all eight.
|
|
59
|
+
|
|
60
|
+
## Always-on (Universal components)
|
|
61
|
+
|
|
62
|
+
Cross-cutting components every project surfaces:
|
|
63
|
+
|
|
64
|
+
- `universal/components-toggles.html`
|
|
65
|
+
- `universal/components-dialogs.html`
|
|
66
|
+
- `universal/components-tooltips.html`
|
|
67
|
+
- `universal/components-tables.html`
|
|
68
|
+
- `universal/components-callout.html`
|
|
69
|
+
- `universal/empty-state.html.tpl` (substitute project name)
|
|
70
|
+
- `universal/logo.html` — IF wordmark/logotype claim in README/SKILL.md OR `assets/logos/*.svg` exists. If a claim exists with no asset, the skill ALSO generates a minimal placeholder SVG (see Rule #7).
|
|
71
|
+
|
|
72
|
+
**Universal components default: +6 to +7 files.**
|
|
73
|
+
|
|
74
|
+
## Conditional family specimens
|
|
75
|
+
|
|
76
|
+
Gated by `activeFamilies[]`:
|
|
77
|
+
|
|
78
|
+
- `status/colors-status.html` → IF `"status" ∈ activeFamilies` (default-on)
|
|
79
|
+
- `status/components-status.html` → IF `"status" ∈ activeFamilies`
|
|
80
|
+
- `status/skeletons.html` → IF `"status" ∈ activeFamilies`
|
|
81
|
+
- `audience-pro/colors-presence.html` → IF `"presence" ∈ activeFamilies` (pro tool + multiplayer)
|
|
82
|
+
- `audience-developer/type-mono.html` → IF `"mono" ∈ activeFamilies` (developer audience OR Q7 picked mono pairing)
|
|
83
|
+
|
|
84
|
+
## Conditional audience specimens
|
|
85
|
+
|
|
86
|
+
Gated by Q2 (audience):
|
|
87
|
+
|
|
88
|
+
- **`audience-developer/*`** — IF Q2 = `developer tool`. Includes: type-mono, components-code-block, components-diff-view, components-log-stream, components-monospace-table, components-terminal-pane. **+6 files.**
|
|
89
|
+
- **`audience-pro/*`** — IF Q2 = `pro tool`. Includes: colors-presence (if presence active), components-command-palette, components-keyboard, components-list, components-shortcuts-overlay, components-toast-menu. **+5 to +6 files.**
|
|
90
|
+
- **`audience-consumer/*`** — IF Q2 = `consumer app`. Includes: components-banner, components-empty-state-generous, components-feature-grid, components-marketing-card, components-testimonial. **+5 files.**
|
|
91
|
+
|
|
92
|
+
## Conditional platform specimens
|
|
93
|
+
|
|
94
|
+
Gated by Q3 (platforms):
|
|
95
|
+
|
|
96
|
+
- **`platform-desktop/*`** — IF Q3 includes desktop. Includes: components-resize-panels (1 file), plus the two ui_kit entries below.
|
|
97
|
+
- **`platform-mobile/*`** — IF Q3 includes mobile or tablet. Includes: components-bottom-sheet, components-pull-to-refresh, components-segmented-control, components-tab-bar (4 files), plus the two ui_kit entries below.
|
|
98
|
+
|
|
99
|
+
## Always-on (ui_kit — the "DS in use" artifacts)
|
|
100
|
+
|
|
101
|
+
`platform-<platform>/ui_kits-<platform>-{index,showcase}.html` is **not optional**. Every bootstrap produces at least one composition that demonstrates the DS on a realistic product surface. The two entries serve different purposes:
|
|
102
|
+
|
|
103
|
+
| File | Role |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `platform-desktop/ui_kits-desktop-index.html` | **Catalog/launcher** — links out to individual platform-desktop specimens. Useful for browsing what desktop-specific patterns the project ships. |
|
|
106
|
+
| `platform-desktop/ui_kits-desktop-showcase.html` | **Full product mock** — multi-screen composition (nav + sidebar + main content + status bar) with theme/accent picker. The single highest-leverage "DS in use" artifact in the bootstrap output. |
|
|
107
|
+
| `platform-mobile/ui_kits-mobile-index.html` | **Catalog/launcher** for mobile specimens. |
|
|
108
|
+
| `platform-mobile/ui_kits-mobile-showcase.html` | **Full product mock** sized to a 375 × 812 artboard. |
|
|
109
|
+
|
|
110
|
+
Both showcase files use vanilla JS for theme/accent switching and include `EDITMODE-BEGIN`/`EDITMODE-END` markers so agents can edit defaults in-place.
|
|
111
|
+
|
|
112
|
+
**ui_kit default: +2 files for desktop, +2 more for mobile = +2 to +4 files.**
|
|
113
|
+
|
|
114
|
+
Hard rule: **never scaffold `ui_kits/<platform>/` as an empty directory.** Either populate at least the showcase (single highest-leverage) or skip the platform entirely. The completeness-critic V12/V13 enforces this.
|
|
115
|
+
|
|
116
|
+
## Conditional theme
|
|
117
|
+
|
|
118
|
+
- `theme-both/colors-themes-side-by-side.html` → IF Q4 theme = `both equal`. **+1 file.**
|
|
119
|
+
|
|
120
|
+
## Opt-in (Patterns + Meta)
|
|
121
|
+
|
|
122
|
+
These are NOT auto-scaffolded. The user can request specific patterns via `config.extensions[]` or explicit `/design:new` invocations:
|
|
123
|
+
|
|
124
|
+
- `patterns/patterns-auth.html`, `patterns-data-density.html`, `patterns-error-pages.html`, `patterns-form-layouts.html`, `patterns-onboarding.html`, `patterns-pricing.html` — 6 files
|
|
125
|
+
- `meta/accessibility.html`, `i18n.html`, `presence-multiplayer.html`, `tokens-index.html` — 4 files
|
|
126
|
+
|
|
127
|
+
If the user mentions onboarding or auth flows in Q1, the skill MAY proactively include the matching pattern; otherwise opt-in only.
|
|
128
|
+
|
|
129
|
+
## Aesthetic inputs (discovery Round 2)
|
|
130
|
+
|
|
131
|
+
Round 2 answers (Q5 mood, Q6 color, Q7 typography, Q8 voice) are **payload-driven** — the `design:ux-research-agent` discovers domain-relevant options per project. Token values (font families, OKLCH ranges, voice characteristics) come from the chosen payload option, NOT from a hardcoded mapping table.
|
|
132
|
+
|
|
133
|
+
| Q | Answer source | Effect on scaffold |
|
|
134
|
+
|---|---|---|
|
|
135
|
+
| Q5 mood | payload `mood_clusters[selected]` | Drives aesthetic decisions in `_layout.css` chrome + `_components.css` defaults. No fixed iconography/radii/motion mapping — those land in their own Q11 / Q9 / motion tokens. |
|
|
136
|
+
| Q6 brand color | payload `color_oklch_options[selected]` | OKLCH range from the chosen option becomes `--accent` family. If user picked "I have a hex" → skill converts to OKLCH, derives hover (−2L) / active (−4L) / fg. If user picked "pick-for-me" → skill picks within the Recommended option's OKLCH range, validated against the mood cue ladder in SKILL.md "Accent color heuristic". |
|
|
137
|
+
| Q7 typography | payload `typography_pairing_options[selected]` | `display_family`, `body_family`, `mono_family` from the chosen option are written verbatim into `colors_and_type.css` `--font-display / --font-body / --font-mono` tokens. |
|
|
138
|
+
| Q8 content tone | payload `voice_tone_options[selected]` | The selected option's `characteristics[]` go into the DS README "Voice" section; the `sample_microcopy` becomes the reference example sub-agents read before writing specimen copy. |
|
|
139
|
+
|
|
140
|
+
## Pro-designer inputs (discovery Round 3)
|
|
141
|
+
|
|
142
|
+
Round 3 answers (Q9 signature treatment, Q10 hard-NOs, Q11 iconography, Q12 density) are **payload-driven** — the `design:ux-research-agent` surfaces project-specific options. **This table is NOT a list of valid user-facing answers** (the agent's payload generates those per-project from research). Instead, this is the **vocabulary of scaffold effect families** that every payload option MUST classify itself into via a `family` field. The agent picks options that fit the brief, names them per-project (e.g. `<treatment-id> (anchor: <real-product>)`), and tags each with one of these family IDs so the scaffold knows what CSS / asset behavior to apply.
|
|
143
|
+
|
|
144
|
+
### Q9 signature treatment — effect families
|
|
145
|
+
|
|
146
|
+
Every `signature_treatment_options[i]` in the payload MUST set `family` to one of these IDs. The scaffold then applies the corresponding `_layout.css` / token changes regardless of how the option was labeled.
|
|
147
|
+
|
|
148
|
+
| Family ID | Scaffold effect (what `_layout.css` / tokens do when this family is chosen) |
|
|
149
|
+
|---|---|
|
|
150
|
+
| `chrome-glow` | Body bg = soft accent halo + faint vignette; `--shadow-glow` halo on signature cards. Subtle, accent-anchored ambient warmth. |
|
|
151
|
+
| `body-pattern` | Body bg = repeating pattern (scanlines, dot grid, hatch, noise overlay) at low opacity; `body::before` SVG film/grain; optional `body::after` slow animation gated behind reduced-motion. Heavier, atmospheric. |
|
|
152
|
+
| `frosted-blur` | `.specimen` + cards get `backdrop-filter: blur(20px) saturate(140%)` + low-alpha bg; tokens add a frosted-tint variable. Translucent depth. |
|
|
153
|
+
| `hard-edges` | Radii collapse to `0/2/4`; shadows removed except focus ring; borders bumped to `--border-strong`; thicker outlines on key elements. Brutalist / no-nonsense. |
|
|
154
|
+
| `depth-stretch` | Shadow ladder stretched — `--shadow-md/lg/xl` get longer offsets and softer blurs; cards float higher; hover state lifts more. Soft-floaty depth. |
|
|
155
|
+
| `inset-recess` | Tokens add `--shadow-inset-sm/md`; inputs + toggles use inset-shadow surfaces; never inside chrome with text on it (accessibility). Hardware-toggle / recessed feel. |
|
|
156
|
+
| `none` | No body-level treatment; `_layout.css` stays minimal; chrome reads flat. The opt-out value. |
|
|
157
|
+
|
|
158
|
+
The agent may also propose treatments outside this catalog — when it does, it must either map them to the closest family OR flag in `research_quality_notes` that a new family ID is needed (which then becomes a spec-change conversation, not a silent extension).
|
|
159
|
+
|
|
160
|
+
### Q10 hard NOs — sub-agent guardrails
|
|
161
|
+
|
|
162
|
+
| Q | Answer source | Effect on scaffold |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| Q10 hard NOs | payload `suggested_hard_NOs[]` + `anti_references[]` (user-picked subset, multi-select) | Each picked guardrail surfaced in DS README "Hard rules"; sub-agents read this list and enforce — "no animations" → no `transition` / `@keyframes` outside reduced-motion fallback; "no gradients" → no `linear-gradient` / `radial-gradient` anywhere; "no emoji" → no emoji glyphs in any scaffolded HTML (use stroke SVG glyphs instead). Hard NOs override the Q9 signature treatment when they conflict (e.g. `frosted-blur` + "no gradients" = use solid translucent fill, no gradient backdrop). |
|
|
165
|
+
|
|
166
|
+
### Q11 iconography — effect families
|
|
167
|
+
|
|
168
|
+
Every `iconography_vibe_options[i]` in the payload MUST set `family` to one of these IDs.
|
|
169
|
+
|
|
170
|
+
| Family ID | Scaffold effect (`iconography.html` content + `assets/glyphs/` SVG style) |
|
|
171
|
+
|---|---|
|
|
172
|
+
| `thin-stroke-geometric` | `iconography.html` scaffolds 12 ASCII-leaning 1px-stroke icons; generated SVG glyphs use 1px stroke + rounded caps; no emoji anywhere. Terminal / IDE heritage. |
|
|
173
|
+
| `outline-product` | Default outline icon set at 1.5–2px stroke on a 20–24px grid; balanced product nouns derived from Q1+Q2. The most common "rounded outline" family. |
|
|
174
|
+
| `industry-specific` | `iconography.html` curated to project domain (the agent's `domain_nouns` from the payload drives glyph selection); each domain noun gets a custom SVG. |
|
|
175
|
+
| `filled-solid` | Filled (not stroked) icons; larger sizes default (24/32). High-contrast presence. |
|
|
176
|
+
| `photographic` | Iconography replaced by photographic thumbnails (e.g. ingredient photos as IDs); `assets/glyphs/` remains nominal; thumbnail scaffolding lives in components. |
|
|
177
|
+
|
|
178
|
+
### Q12 density — effect families
|
|
179
|
+
|
|
180
|
+
Every `density_options[i]` in the payload MUST set `family` to one of these IDs.
|
|
181
|
+
|
|
182
|
+
| Family ID | Scaffold effect (`--space-*` defaults + component padding) |
|
|
183
|
+
|---|---|
|
|
184
|
+
| `dense` | Base `--space-*` shrinks (most padding lands on space-2/3); buttons 7px vertical; tables compact; sidebar 220–248px. Pro-tool / data-heavy. |
|
|
185
|
+
| `balanced` | Default `--space-*`; buttons 8px vertical; sidebar 248–280px. Mid-range. |
|
|
186
|
+
| `roomy` | Base padding bumps (most lands on space-4/5); buttons 10–12px vertical; sidebar 280–320px; type-scale slightly bumped. Consumer / reading-friendly. |
|
|
187
|
+
|
|
188
|
+
## Brand asset minimums (always-on)
|
|
189
|
+
|
|
190
|
+
When the README/SKILL.md/specimen copy makes a brand claim (`mascot`, `wordmark`, `logotype`, `glyph`, `illustration`, `hedgehog`, `character`), the skill MUST generate at least one minimal SVG to back the claim. The completeness-critic V20 enforces this.
|
|
191
|
+
|
|
192
|
+
Minimum scaffold:
|
|
193
|
+
- If a wordmark is claimed → `assets/logos/wordmark.svg` (a simple typographic SVG using the project label + accent color, ~15 lines of SVG)
|
|
194
|
+
- If a mark/glyph is claimed → `assets/logos/mark.svg` OR `assets/glyphs/<name>.svg` (a simple geometric mark in the accent color, ~10 lines of SVG)
|
|
195
|
+
- If domain-specific glyphs are claimed (e.g. dugmate's sport balls) → at least 2–3 example SVGs under `assets/glyphs/`
|
|
196
|
+
|
|
197
|
+
These don't need to be world-class illustrations — the goal is "claim has an artifact". Better placeholders than empty dirs.
|
|
198
|
+
|
|
199
|
+
### Claim → receipt (machine-checkable contract)
|
|
200
|
+
|
|
201
|
+
The bootstrap flow MUST run a claim scan against the freshly-authored README + SKILL.md BEFORE emitting the scaffold roster. Every match in the left column requires the corresponding row in the roster as a `pending` file. After scaffold, the completeness-critic re-verifies this table and flags any mismatch.
|
|
202
|
+
|
|
203
|
+
| claim substring | required receiving file(s) in roster | rewrite alternative |
|
|
204
|
+
|---|---|---|
|
|
205
|
+
| `wordmark`, `logotype` | `universal/logo.html` + `assets/logos/wordmark.svg` | strip the claim from README + SKILL |
|
|
206
|
+
| `mark` (when not part of `wordmark`) | `universal/logo.html` + `assets/logos/mark.svg` | strip the claim |
|
|
207
|
+
| `glyph`, `terminal-glyph` | `foundations/iconography.html` + ≥ 1 `assets/glyphs/*.svg` | strip the claim from README + SKILL |
|
|
208
|
+
| `mascot`, `character` | `assets/logos/mark.svg` OR `assets/illustrations/<name>.svg` (no dedicated specimen template — generate a placeholder SVG) | strip the claim |
|
|
209
|
+
| `illustration` | `assets/illustrations/<name>.svg` (no template — placeholder) | strip the claim |
|
|
210
|
+
| `hedgehog`, named-creature claims | `assets/logos/mark.svg` or matching illustration | strip the claim |
|
|
211
|
+
|
|
212
|
+
The bootstrap roster emission step (in SKILL.md → "Pre-scaffold — claim scan + emit `_scaffold-roster.yaml`") consults this table; missing receiving files = the row goes into the roster as `pending`. Studio-2 retro BAD-4 caught the failure mode where `assets/glyphs/` was left empty despite the README claiming terminal glyphs lived there — this table is the structural fix.
|
|
213
|
+
|
|
214
|
+
## Computed `activeFamilies[]`
|
|
215
|
+
|
|
216
|
+
The skill computes this array based on discovery answers + audience-conditional logic. Used by the completeness-critic to scope checks.
|
|
217
|
+
|
|
218
|
+
| Family | Included when |
|
|
219
|
+
|---|---|
|
|
220
|
+
| `accent` | always (every project has one accent) |
|
|
221
|
+
| `status` | always unless audience explicitly excludes (rare; minimal scaffolds may skip status/) |
|
|
222
|
+
| `presence` | audience = pro tool AND project has multiplayer hint in Q1 brief |
|
|
223
|
+
| `mono` | audience = developer tool, OR Q7 typography includes a monospace pairing |
|
|
224
|
+
|
|
225
|
+
## Typical scaffold sizes (full-library state)
|
|
226
|
+
|
|
227
|
+
| Project profile (Q2 / Q3 / Q4) | Approx file count |
|
|
228
|
+
|---|---|
|
|
229
|
+
| Consumer marketing (consumer / desktop / dark) | ~22 (10 core + 8 foundations + 6 universal + 5 audience-consumer + 2 desktop ui_kit) |
|
|
230
|
+
| Pro-tool SaaS (pro / desktop+mobile / dark) | ~30 (10 + 8 + 6 + 6 audience-pro + 4 platform-mobile + 4 ui_kit + 3 status) |
|
|
231
|
+
| Developer CLI dashboard (developer / desktop / dark) | ~25 (10 + 8 + 6 + 6 audience-developer + 2 desktop ui_kit + 3 status) |
|
|
232
|
+
| Consumer mobile (consumer / mobile / light) | ~24 (10 + 8 + 6 + 5 audience-consumer + 4 platform-mobile + 2 mobile ui_kit) |
|
|
233
|
+
| Enterprise admin (pro / desktop / both) | ~28 (10 + 8 + 6 + 6 audience-pro + 2 desktop ui_kit + 3 status + 1 theme-both) |
|
|
234
|
+
|
|
235
|
+
Variance comes from audience-* (5–6 files), platform-mobile (4–6 files including ui_kit), and conditional families (status, mono, presence).
|
|
236
|
+
|
|
237
|
+
## Fan-out batching (dependency_closure)
|
|
238
|
+
|
|
239
|
+
The skill batches scaffold writes by dependency closure so independent files can be written in parallel by sub-agents. Three tiers:
|
|
240
|
+
|
|
241
|
+
| `dependency_closure` | Meaning | Batch | Authored by |
|
|
242
|
+
|---|---|---|---|
|
|
243
|
+
| `root` | The dependency root — tokens, `_layout.css`, READMEs, SKILL.md, `config.json`. Nothing else can be written until these exist. | **A** | main agent, serial |
|
|
244
|
+
| `tokens-only` | Pure token-and-chrome specimens (colors-*, type-*, spacing-scale, motion, radii, elevation, focus, iconography, borders, grid, opacity, selection). No reference-template reading required to generate — token CSS + Q5/Q9 mood are enough. | **B** | parallel sub-agents (3–4 slices of 3–5 files each) |
|
|
245
|
+
| `tokens + chrome + template` | Components and compositions (components-*, empty-state, logo, audience-* specimens, platform-* showcases). Each needs the matching reference template from the inspiration library to understand the demonstration intent. | **C** | parallel sub-agents (3–5 slices of 2–4 files each) |
|
|
246
|
+
| `index` | The catalog launcher (`ui_kits-*-index.html`) that links every peer. Written LAST after all peers exist. | **A (post)** | main agent, serial |
|
|
247
|
+
|
|
248
|
+
| Dir | `dependency_closure` |
|
|
249
|
+
|---|---|
|
|
250
|
+
| `core/colors_and_type.css.tpl`, `core/SKILL.md.tpl`, `core/README.*.tpl`, `core/config.json.tpl`, `core/preview/_layout.css` | `root` |
|
|
251
|
+
| `core/preview/colors-{text,surfaces,accent}.html`, `type-scale.html`, `spacing-scale.html`, `motion.html` | `tokens-only` |
|
|
252
|
+
| `foundations/*.html` | `tokens-only` |
|
|
253
|
+
| `core/preview/components-{buttons,cards,inputs}.html` | `tokens + chrome + template` |
|
|
254
|
+
| `universal/*.html`, `universal/empty-state.html.tpl`, `universal/logo.html` | `tokens + chrome + template` |
|
|
255
|
+
| `status/*.html` | `tokens + chrome + template` |
|
|
256
|
+
| `audience-*/*.html` | `tokens + chrome + template` |
|
|
257
|
+
| `platform-*/components-*.html` | `tokens + chrome + template` |
|
|
258
|
+
| `platform-*/ui_kits-*-showcase.html` | `tokens + chrome + template` |
|
|
259
|
+
| `platform-*/ui_kits-*-index.html` | `index` (written last) |
|
|
260
|
+
| `theme-both/*.html` | `tokens-only` |
|
|
261
|
+
|
|
262
|
+
The skill emits `<designRoot>/_history/_system/000-scaffold-roster.yaml` with one row per file (path / batch / deps / status). Sub-agents update `status: pending → written` as they go. See `SKILL.md` "Pre-scaffold — emit `_scaffold-roster.yaml`".
|
|
263
|
+
|
|
264
|
+
## Rules the agent MUST honor
|
|
265
|
+
|
|
266
|
+
1. **Never copy a specimen verbatim.** Read SPECIMEN comment → understand the demonstration → generate a fresh, project-flavored equivalent. **Target 1.5×–6× the reference LOC** for signature specimens (accent, empty-state, ui_kits-showcase, logo). Token-swap-only output is a scaffold regression; the skill's `Creativity rubric` (in SKILL.md "Scaffold (3-batch fan-out)") names the gold-standards and anti-examples.
|
|
267
|
+
2. **No placeholder copy in output.** "Lorem Solutions Inc.", "Click here", "Acme Corp." MUST NOT appear in the scaffolded files. Use discovery answers to derive project-specific copy.
|
|
268
|
+
3. **Tokens only.** No hardcoded hex / px / rem / em-letter-spacing in scaffolded files (outside the shared `_layout.css` chrome). Typography-critic catches off-ladder px and returns a blocker — see the studio 2026-05-13 re-bootstrap retro.
|
|
269
|
+
4. **Always include the SPECIMEN header** in the scaffolded file (carry it across) so future reads can identify what each specimen demonstrates.
|
|
270
|
+
5. **Honor `activeFamilies[]`.** Skip families the project didn't opt into (no presence specimens for solo-author projects; no mono for non-developer audiences unless Q7 chose a mono pairing).
|
|
271
|
+
6. **Always scaffold at least the platform ui_kit showcase.** The "DS in use" composition is the single most useful artifact for a designer or stakeholder to evaluate the system. Skipping it makes the DS look like a token inventory instead of a product surface. `ui_kits-<platform>-showcase.html` is the canonical filename inside `system/<ds>/preview/`.
|
|
272
|
+
7. **Claim → asset receipt.** If discovery answers include mascot / illustration / logotype cues (Q5 mentions a brand with distinctive mascot, or Q1 implies "character"), generate at least one minimal SVG into `assets/glyphs/` or `assets/logos/` to back the claim. Never let scaffolded copy say "hedgehog mascot energy" with an empty assets dir.
|
|
273
|
+
8. **Re-curate the iconography family.** `foundations/iconography.html` ships with a generic Lucide-style set (trending, clock, search, filter). The skill MUST replace these with icons relevant to Q11 vibe + project's domain at scaffold time: developer tool → terminal/file/branch/commit; consumer → home/search/notification; pro tool → roster/calendar/analytics. Keep the same SPECIMEN header + size scale + stroke conventions.
|
|
274
|
+
9. **Scaffold output is flat.** All category dirs in the inspiration library (`foundations/`, `status/`, `audience-*/`, `platform-*/`, `theme-both/`, `patterns/`, `meta/`, `universal/`) flatten into `system/<ds>/preview/<filename>.html` in the scaffold output. The category prefix lives only in the library, not in the project tree.
|
|
275
|
+
10. **Honor the Q10 hard-NO list.** Each NO picked in discovery becomes a guardrail every sub-agent reads before writing. "No animations" → no `transition` / `@keyframes` outside reduced-motion fallback. "No gradients" → no `linear-gradient` / `radial-gradient` in any output. "No emoji in chrome" → SVG glyphs only. Hard NOs override the Q9 signature treatment when they conflict (e.g. `glassmorphism` + `no gradients` = use solid translucent fill, no gradient backdrop).
|
|
276
|
+
11. **Honor the Q12 density preference.** `dense pro-tool` collapses default padding by one step; `roomy SaaS` bumps it by one. The default values in `_layout.css` `.specimen` + the `--space-*` usage conventions in components MUST reflect the chosen density.
|
|
277
|
+
12. **Reconcile the roster.** After Batch C completes, the main agent reads `_scaffold-roster.yaml`, asserts every row has `status: written`, and rejects the bootstrap as incomplete otherwise — never silently "complete" a bootstrap with pending rows.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Design system inspiration library
|
|
2
|
+
|
|
3
|
+
> **For the agent (skill `design-system`, bootstrap mode):** this directory is a **reference inventory**, NOT a substrate to copy literally. Read each specimen as "this is what a good X looks like, this is which tokens it demonstrates, this is the copy voice it uses" — then **generate a fresh, project-flavored equivalent** during scaffold.
|
|
4
|
+
|
|
5
|
+
## What this directory is
|
|
6
|
+
|
|
7
|
+
A library of ~20 (skeleton) → ~62 (full) HTML/markdown specimens that demonstrate **what a complete design system looks like in `.design/system/<ds>/`** for various project types. Each specimen:
|
|
8
|
+
|
|
9
|
+
- Sits in a directory keyed by **when it applies** (`core/` = always, `audience-pro/` = only pro-tool projects, etc.)
|
|
10
|
+
- Has a **SPECIMEN comment header** at the top (`<!-- SPECIMEN: … -->`) listing what tokens it demonstrates, the composition it shows, the copy voice it uses, and when the bootstrap scaffold should include it.
|
|
11
|
+
- Uses **placeholder tokens** (`var(--accent)`, `var(--bg-1)`, …) — the agent must replace them with the project's actual computed values during scaffold.
|
|
12
|
+
|
|
13
|
+
## What this directory is NOT
|
|
14
|
+
|
|
15
|
+
- **Not a literal substrate.** Do not `cp -R` this tree into a project's `.design/system/<ds>/`. The output should be project-flavored — fresh content using the project's tokens, project's copy voice, and only the specimens that fit the project's audience / platform / theme.
|
|
16
|
+
- **Not authoritative source.** The agent regenerates files; this library teaches the SHAPE.
|
|
17
|
+
- **Not placeholder copy.** When you scaffold, no "Lorem Solutions Inc." should appear in the output. Replace all placeholder copy with project-flavored content derived from discovery answers (Q1 product one-liner, Q5 mood references, Q8 content tone).
|
|
18
|
+
|
|
19
|
+
## Directory layout (when fully populated)
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
templates/design-system-inspiration/
|
|
23
|
+
├── _README.md # this file
|
|
24
|
+
├── _MAPPING.md # discovery answer → which files apply (the contract)
|
|
25
|
+
├── core/ # ALWAYS — every project gets these (10 specimens)
|
|
26
|
+
│ ├── README.philosophy.md.tpl # system/<ds>/README.md template
|
|
27
|
+
│ ├── README.orchestration.md.tpl # .design/README.md template
|
|
28
|
+
│ ├── SKILL.md.tpl # system/<ds>/SKILL.md template
|
|
29
|
+
│ ├── INDEX.md.tpl # .design/INDEX.md template
|
|
30
|
+
│ ├── config.json.tpl # .design/config.json template
|
|
31
|
+
│ ├── colors_and_type.css.tpl # tokens skeleton
|
|
32
|
+
│ └── preview/
|
|
33
|
+
│ ├── _layout.css # shared specimen chrome (copy as-is)
|
|
34
|
+
│ ├── colors-text.html
|
|
35
|
+
│ ├── colors-surfaces.html
|
|
36
|
+
│ ├── colors-accent.html
|
|
37
|
+
│ ├── type-scale.html
|
|
38
|
+
│ ├── spacing-scale.html
|
|
39
|
+
│ ├── motion.html
|
|
40
|
+
│ ├── components-buttons.html
|
|
41
|
+
│ ├── components-cards.html
|
|
42
|
+
│ └── components-inputs.html
|
|
43
|
+
├── universal/ # default-on unless explicitly excluded — common components
|
|
44
|
+
│ ├── components-toggles.html
|
|
45
|
+
│ ├── components-dialogs.html
|
|
46
|
+
│ ├── components-tooltips.html
|
|
47
|
+
│ ├── components-tables.html
|
|
48
|
+
│ ├── components-callout.html
|
|
49
|
+
│ └── empty-state.html.tpl
|
|
50
|
+
└── (foundations/ status/ audience-*/ platform-*/ theme-*/ patterns/ meta/ — added in follow-up phases)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## How the bootstrap-mode agent uses this library
|
|
54
|
+
|
|
55
|
+
1. **Read `_MAPPING.md`** to know which subdirectories apply to the current project based on discovery answers (Q2 audience, Q3 platforms, Q4 theme, plus universal default-ons).
|
|
56
|
+
2. **Read each applicable specimen's SPECIMEN comment header** to learn what tokens / composition / voice it demonstrates.
|
|
57
|
+
3. **Generate a fresh equivalent** in the project's `.design/system/<ds>/` using the project's actual tokens (from Q6 brand color, Q7 typography) and project's actual copy voice (from Q1 product one-liner, Q8 content tone).
|
|
58
|
+
4. **Never copy a specimen verbatim** — even if the project's profile matches the specimen's intended use case 1:1.
|
|
59
|
+
|
|
60
|
+
## Editing the library
|
|
61
|
+
|
|
62
|
+
- Add new specimens by creating an HTML file with a SPECIMEN comment header (see existing files for the format).
|
|
63
|
+
- Add new mappings to `_MAPPING.md` so the agent knows when to include the new specimen.
|
|
64
|
+
- Keep specimens ≤ ~120 lines each. They're for the agent to READ, not paginate.
|
|
65
|
+
- Token usage: only `var(--…)` references, no hardcoded hex / px / rem outside `_layout.css`. The shared chrome can have hardcoded base styles.
|
|
66
|
+
|
|
67
|
+
## Placeholder syntax (`.tpl` files only)
|
|
68
|
+
|
|
69
|
+
Templates (`.tpl` extension) use `{{name}}` double-brace placeholders. Distinct from flow's `PROJECT_NAME` namespace. The CLI helper (`maude design init`) strips the `.tpl` suffix during scaffold and substitutes placeholders from the discovery payload.
|
|
70
|
+
|
|
71
|
+
Plain `.html` files have no placeholders — the agent reads them as references and writes fresh files.
|
package/plugins/design/templates/design-system-inspiration/audience-consumer/components-banner.html
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-consumer-banner
|
|
3
|
+
DEMONSTRATES: page-level info / warn / error / promo banners, dismissible variant, position at top of page
|
|
4
|
+
COMPOSITION: 4 banner types stacked, each with icon + body + CTA + optional dismiss button
|
|
5
|
+
COPY VOICE: terse — banners interrupt; respect the user's attention
|
|
6
|
+
WHEN SCAFFOLDED: audience-consumer
|
|
7
|
+
NOTES: Banner sits above the page chrome (not inside a card). Always dismissible UNLESS it's a system error blocking action. Don't stack more than one promo banner at once.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — consumer banner</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.banner { display: flex; align-items: center; gap: 12px; padding: 10px 16px; border-radius: var(--radius-sm); margin: 0 0 12px; font-size: var(--type-sm); }
|
|
18
|
+
.banner .icon { flex-shrink: 0; }
|
|
19
|
+
.banner .body { flex: 1; }
|
|
20
|
+
.banner .actions { display: flex; gap: 8px; align-items: center; }
|
|
21
|
+
.banner button { background: transparent; border: 0; color: inherit; font: inherit; padding: 4px 10px; border-radius: var(--radius-xs); cursor: pointer; opacity: 0.85; }
|
|
22
|
+
.banner button:hover { opacity: 1; background: oklch(0 0 0 / 0.15); }
|
|
23
|
+
.banner .dismiss { font-size: 18px; line-height: 1; padding: 2px 6px; }
|
|
24
|
+
.banner--info { background: oklch(from var(--status-info) l c h / 0.18); color: var(--status-info); border: 1px solid var(--status-info); }
|
|
25
|
+
.banner--warn { background: oklch(from var(--status-warn) l c h / 0.18); color: var(--status-warn); border: 1px solid var(--status-warn); }
|
|
26
|
+
.banner--error { background: oklch(from var(--status-error) l c h / 0.18); color: var(--status-error); border: 1px solid var(--status-error); }
|
|
27
|
+
.banner--promo { background: oklch(from var(--accent) l c h / 0.18); color: var(--accent); border: 1px solid var(--accent); }
|
|
28
|
+
.banner strong { color: inherit; }
|
|
29
|
+
</style>
|
|
30
|
+
</head>
|
|
31
|
+
<body class="app" data-theme="dark">
|
|
32
|
+
<main class="specimen">
|
|
33
|
+
<h1>Banners</h1>
|
|
34
|
+
<p class="lede">Page-level announcements. They sit above content (not inside a card) and respect the user's attention — terse copy, single CTA, dismissible unless they block action.</p>
|
|
35
|
+
|
|
36
|
+
<div class="banner banner--info">
|
|
37
|
+
<span class="icon">ⓘ</span>
|
|
38
|
+
<div class="body"><strong>New:</strong> match recap cards now include xG. <a href="#" style="color: inherit; text-decoration: underline;">See what changed</a>.</div>
|
|
39
|
+
<div class="actions"><button class="dismiss" aria-label="Dismiss">×</button></div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div class="banner banner--warn">
|
|
43
|
+
<span class="icon">⚠</span>
|
|
44
|
+
<div class="body"><strong>Heads up:</strong> league sync is paused while the federation updates their endpoint. Manual entry still works.</div>
|
|
45
|
+
<div class="actions"><button>Status page</button></div>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div class="banner banner--error">
|
|
49
|
+
<span class="icon">⚠</span>
|
|
50
|
+
<div class="body"><strong>Couldn't load the roster.</strong> The league API is returning errors. We're retrying every 30s.</div>
|
|
51
|
+
<div class="actions"><button>Retry now</button></div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div class="banner banner--promo">
|
|
55
|
+
<span class="icon">★</span>
|
|
56
|
+
<div class="body"><strong>2 weeks free</strong> on the Club plan when you import your squad before Sunday.</div>
|
|
57
|
+
<div class="actions">
|
|
58
|
+
<button>Try Club</button>
|
|
59
|
+
<button class="dismiss" aria-label="Dismiss">×</button>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<footer class="legend">
|
|
64
|
+
<p>Error banners are usually NOT dismissible — they block meaningful work, so dismissing them hides a real problem. Info, warn, and promo banners should always have an × close button.</p>
|
|
65
|
+
</footer>
|
|
66
|
+
</main>
|
|
67
|
+
</body>
|
|
68
|
+
</html>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-consumer-empty-state-generous
|
|
3
|
+
DEMONSTRATES: oversized empty state with illustration slot, headline, supporting sentence, primary + optional secondary CTA
|
|
4
|
+
COMPOSITION: full-bleed empty state with 80-120px breathing room around content
|
|
5
|
+
COPY VOICE: warm and specific — names what's missing ("No match recaps yet"), suggests a clear first action
|
|
6
|
+
WHEN SCAFFOLDED: audience-consumer (generous variant; pro tools use the universal/empty-state.html)
|
|
7
|
+
NOTES: Generous version takes more vertical space (~480px min height) — used on dashboards, not nested panes. Illustration is a 96px decorative SVG, not a stock photo.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — consumer empty state (generous)</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body class="app" data-theme="dark">
|
|
18
|
+
<main class="specimen">
|
|
19
|
+
<h1>Empty state — generous</h1>
|
|
20
|
+
<p class="lede">For consumer dashboards where the empty state IS the screen. More breathing room, a friendly headline, and a clear next step — never just "Nothing here yet."</p>
|
|
21
|
+
|
|
22
|
+
<div style="background: var(--bg-1); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 80px 40px; text-align: center; max-width: 600px;">
|
|
23
|
+
<div style="width: 96px; height: 96px; background: oklch(from var(--accent) l c h / 0.1); border-radius: var(--radius-pill); color: var(--accent); display: inline-flex; align-items: center; justify-content: center; margin: 0 auto 24px;">
|
|
24
|
+
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg>
|
|
25
|
+
</div>
|
|
26
|
+
<h2 style="font-family: var(--font-display); font-size: var(--type-2xl); font-weight: 600; margin: 0 0 8px;">No match recaps yet</h2>
|
|
27
|
+
<p style="color: var(--fg-1); font-size: var(--type-md); line-height: var(--lh-md); max-width: 40ch; margin: 0 auto 24px;">When your team plays its first match, the recap will land here automatically — with goals, ratings, and a shareable card for the club channel.</p>
|
|
28
|
+
<div style="display: flex; justify-content: center; gap: 12px;">
|
|
29
|
+
<button style="background: var(--accent); color: var(--accent-fg); border: 0; padding: 10px 20px; border-radius: var(--radius-md); font: inherit; font-weight: 500; cursor: pointer;">Log a match</button>
|
|
30
|
+
<button style="background: transparent; color: var(--fg-1); border: 1px solid var(--border-default); padding: 10px 20px; border-radius: var(--radius-md); font: inherit; cursor: pointer;">See a demo recap</button>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<footer class="legend" style="margin-top: 48px;">
|
|
35
|
+
<p>This is the version you want on a marketing-flavored dashboard. For dense pro tools, use <code>universal/empty-state.html</code> — same idea, tighter spacing.</p>
|
|
36
|
+
</footer>
|
|
37
|
+
</main>
|
|
38
|
+
</body>
|
|
39
|
+
</html>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-consumer-feature-grid
|
|
3
|
+
DEMONSTRATES: 3-column feature grid, icon-headline-body pattern, balanced visual weight
|
|
4
|
+
COMPOSITION: 6 features in a 3x2 grid, each with icon + 2-4 word title + 1-sentence body
|
|
5
|
+
COPY VOICE: title is the benefit ("Sync with the club"), body is the proof ("Auto-pushes match recaps to your team channel.")
|
|
6
|
+
WHEN SCAFFOLDED: audience-consumer
|
|
7
|
+
NOTES: Icons are 24px on top, never inline with the title. Keep titles ≤ 4 words. Bodies ≤ 16 words. Don't list 9 features — pick the top 6 that actually differentiate.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — consumer feature grid</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.feature { display: grid; gap: 8px; padding: 20px; background: var(--bg-1); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); }
|
|
18
|
+
.feature .icon { width: 36px; height: 36px; background: oklch(from var(--accent) l c h / 0.15); color: var(--accent); border-radius: var(--radius-sm); display: inline-flex; align-items: center; justify-content: center; }
|
|
19
|
+
.feature .title { font-family: var(--font-display); font-size: var(--type-md); font-weight: 600; margin: 4px 0 0; }
|
|
20
|
+
.feature .body { color: var(--fg-1); font-size: var(--type-sm); margin: 0; }
|
|
21
|
+
</style>
|
|
22
|
+
</head>
|
|
23
|
+
<body class="app" data-theme="dark">
|
|
24
|
+
<main class="specimen">
|
|
25
|
+
<h1>Feature grid</h1>
|
|
26
|
+
<p class="lede">Six features, no more. Icon + 2–4-word title + one-sentence body. Each title is the benefit; each body is the proof.</p>
|
|
27
|
+
|
|
28
|
+
<div class="grid" style="grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 16px;">
|
|
29
|
+
<div class="feature">
|
|
30
|
+
<span class="icon">⚡</span>
|
|
31
|
+
<h3 class="title">Real-time match view</h3>
|
|
32
|
+
<p class="body">See goals, subs, and cards as they happen. No refresh needed.</p>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="feature">
|
|
35
|
+
<span class="icon">📋</span>
|
|
36
|
+
<h3 class="title">One-tap roster sync</h3>
|
|
37
|
+
<p class="body">Pull from the league, push to your team chat in two taps.</p>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="feature">
|
|
40
|
+
<span class="icon">📊</span>
|
|
41
|
+
<h3 class="title">Season-long stats</h3>
|
|
42
|
+
<p class="body">Track goals, minutes, and clean sheets without a spreadsheet.</p>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="feature">
|
|
45
|
+
<span class="icon">🎯</span>
|
|
46
|
+
<h3 class="title">Match recap card</h3>
|
|
47
|
+
<p class="body">Shareable summary auto-built when the final whistle blows.</p>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="feature">
|
|
50
|
+
<span class="icon">🏃</span>
|
|
51
|
+
<h3 class="title">Training planner</h3>
|
|
52
|
+
<p class="body">Drag-and-drop drills, share the session, mark attendance.</p>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="feature">
|
|
55
|
+
<span class="icon">🔔</span>
|
|
56
|
+
<h3 class="title">Smart notifications</h3>
|
|
57
|
+
<p class="body">Only the things you asked for. No "5 highlights you missed."</p>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</main>
|
|
61
|
+
</body>
|
|
62
|
+
</html>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPECIMEN: audience-consumer-marketing-card
|
|
3
|
+
DEMONSTRATES: generous padding, large typography, prominent CTA, optional eyebrow + image slot
|
|
4
|
+
COMPOSITION: 3 marketing-card variants — feature card, pricing tier, testimonial-adjacent — each at consumer density
|
|
5
|
+
COPY VOICE: consumer-friendly but specific ("Real-time match insights", not "Powerful analytics")
|
|
6
|
+
WHEN SCAFFOLDED: audience-consumer
|
|
7
|
+
NOTES: Consumer density = more padding (--space-5/6 inside cards), bigger type (--type-lg / --type-xl for headlines), one clear CTA. Avoid sentence-cap headlines longer than 6 words.
|
|
8
|
+
-->
|
|
9
|
+
<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8" />
|
|
13
|
+
<title>Audience — consumer marketing card</title>
|
|
14
|
+
<link rel="stylesheet" href="../core/colors_and_type.css" />
|
|
15
|
+
<link rel="stylesheet" href="../core/preview/_layout.css" />
|
|
16
|
+
<style>
|
|
17
|
+
.mcard { background: var(--bg-1); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: var(--space-5); display: grid; gap: 12px; max-width: 360px; }
|
|
18
|
+
.mcard .eyebrow { font-size: var(--type-xs); text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent); font-weight: 600; }
|
|
19
|
+
.mcard .title { font-family: var(--font-display); font-size: var(--type-xl); line-height: var(--lh-xl); font-weight: 600; margin: 0; }
|
|
20
|
+
.mcard .body { color: var(--fg-1); margin: 0; }
|
|
21
|
+
.mcard .cta { background: var(--accent); color: var(--accent-fg); border: 0; padding: 10px 18px; border-radius: var(--radius-md); font: inherit; font-weight: 500; cursor: pointer; align-self: start; }
|
|
22
|
+
.mcard .hero { height: 120px; border-radius: var(--radius-md); background: linear-gradient(135deg, var(--accent) 0%, oklch(from var(--accent) calc(l - 0.15) c h) 100%); }
|
|
23
|
+
</style>
|
|
24
|
+
</head>
|
|
25
|
+
<body class="app" data-theme="dark">
|
|
26
|
+
<main class="specimen">
|
|
27
|
+
<h1>Marketing card</h1>
|
|
28
|
+
<p class="lede">Generous breathing room, one CTA. The eyebrow names the category at low visual weight; the title carries the proposition.</p>
|
|
29
|
+
|
|
30
|
+
<div class="row" style="gap: 24px; align-items: start;">
|
|
31
|
+
<div class="mcard">
|
|
32
|
+
<span class="eyebrow">New in 2.0</span>
|
|
33
|
+
<h2 class="title">Real-time match insights</h2>
|
|
34
|
+
<p class="body">See who's hot, who's not, and who needs a sub — without leaving the sideline.</p>
|
|
35
|
+
<button class="cta">Try it free</button>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="mcard">
|
|
39
|
+
<div class="hero"></div>
|
|
40
|
+
<span class="eyebrow">For clubs</span>
|
|
41
|
+
<h2 class="title">Plan a season in a week</h2>
|
|
42
|
+
<p class="body">Squad lists, fixture sync, training notes — every coach on one shared view.</p>
|
|
43
|
+
<button class="cta">See a demo</button>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<div class="mcard" style="border-color: var(--accent);">
|
|
47
|
+
<span class="eyebrow" style="color: var(--accent);">Most popular</span>
|
|
48
|
+
<h2 class="title">Club</h2>
|
|
49
|
+
<div style="display: flex; align-items: baseline; gap: 4px;">
|
|
50
|
+
<span style="font-family: var(--font-display); font-size: var(--type-3xl); font-weight: 600;">$24</span>
|
|
51
|
+
<span style="color: var(--fg-2);">/month per team</span>
|
|
52
|
+
</div>
|
|
53
|
+
<ul style="margin: 0; padding-left: 18px; color: var(--fg-1);">
|
|
54
|
+
<li>Up to 5 squads</li>
|
|
55
|
+
<li>Full season archive</li>
|
|
56
|
+
<li>Match recap exports</li>
|
|
57
|
+
</ul>
|
|
58
|
+
<button class="cta">Start free trial</button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</main>
|
|
62
|
+
</body>
|
|
63
|
+
</html>
|