ui-design-workbench-cli 0.5.0__tar.gz → 0.6.6__tar.gz
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.
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/PKG-INFO +8 -7
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/README.md +7 -6
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/SKILL.md +9 -5
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/pyproject.toml +6 -2
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/agent-integrations.md +1 -1
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/cache-protocol.md +4 -0
- ui_design_workbench_cli-0.6.6/references/component-catalog.json +121 -0
- ui_design_workbench_cli-0.6.6/references/component-catalog.md +22 -0
- ui_design_workbench_cli-0.6.6/references/component-inventory.json +209 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/fidelity.md +5 -3
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/ir-schema.md +1 -1
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/native-rendering.md +2 -2
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/fidelity_adapters.py +34 -9
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/fidelity_platform_adapters.py +417 -33
- ui_design_workbench_cli-0.6.6/scripts/layout_model.py +489 -0
- ui_design_workbench_cli-0.6.6/scripts/platform_component_catalog.py +294 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/render_preview.py +106 -14
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/scan_ui.py +186 -11
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/scoped_context.py +104 -8
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/smoke_preview.js +6 -2
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ui_design_workbench_cli.egg-info/PKG-INFO +8 -7
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ui_design_workbench_cli.egg-info/SOURCES.txt +5 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ui_design_workbench_cli.egg-info/top_level.txt +2 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/uidw.py +256 -60
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/uidw_mcp.py +43 -9
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/adapter-api.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/design-modes.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/platform-profiles.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/platform-standards.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/platforms.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/quality-automation.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/review-workflow.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/ui-guidance-mode.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/ui-policy-schema.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/ui-reviewer.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/validation.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/workbench-ui.md +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/schemas/native-render-state.schema.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/schemas/ui-agent-job.schema.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/schemas/ui-graph.schema.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/schemas/ui-ir.patch.schema.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/schemas/ui-ir.schema.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/schemas/uidw-config.schema.json +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/android_resource_resolver.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/android_xml_support.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/apple_resource_resolver.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/coverage_report.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/fidelity_adapter_api.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/fidelity_core.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/generate_interaction_matrix.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ir_contracts.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/merge_review_state.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/native_render_android.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/native_render_apple.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/native_render_contracts.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/native_render_registry.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/quality_common.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ui_design_workbench_cli.egg-info/dependency_links.txt +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ui_design_workbench_cli.egg-info/entry_points.txt +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/ui_design_workbench_cli.egg-info/requires.txt +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/validate_platform_profiles.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/scripts/visual_regression.py +0 -0
- {ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ui-design-workbench-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.6
|
|
4
4
|
Summary: Repository UI indexing, graph, preview, and deterministic review CLI
|
|
5
5
|
Author: Elgreed
|
|
6
6
|
Project-URL: Homepage, https://github.com/Elgreed/ui-design-workbench
|
|
@@ -19,7 +19,7 @@ Requires-Dist: mcp<3,>=2; extra == "mcp"
|
|
|
19
19
|
|
|
20
20
|
# UI Design Workbench
|
|
21
21
|
|
|
22
|
-
[Русская версия](README.ru.md) · [Changelog](CHANGELOG.md)
|
|
22
|
+
[Русская версия](README.ru.md) · [Changelog](CHANGELOG.md)
|
|
23
23
|
|
|
24
24
|
Turn repository UI source into an offline interactive HTML workbench—without building or running the application.
|
|
25
25
|
|
|
@@ -82,7 +82,7 @@ uidw --repo <repo> review --output-dir <review-dir> --level full
|
|
|
82
82
|
- Incremental scans that reprocess only changed UI files.
|
|
83
83
|
- Property-level evidence and explicit unsupported gaps instead of guessed UI.
|
|
84
84
|
- Sparse review patches and a separate, authorized source-apply step.
|
|
85
|
-
-
|
|
85
|
+
- Runtime-free Android, Apple, and Flutter source projection with deterministic geometry for the supported subset; native evidence is required only before claiming visual or pixel parity and is never launched automatically.
|
|
86
86
|
|
|
87
87
|
Supported source families include Web, React, Vue, Svelte, Jetpack Compose, Android Views XML, SwiftUI, Storyboard/XIB, WinUI/WPF, and Flutter.
|
|
88
88
|
|
|
@@ -105,8 +105,8 @@ Run `uidw help overview`, `uidw help advanced`, or `uidw <command> --help` for d
|
|
|
105
105
|
|
|
106
106
|
## Accuracy and safety
|
|
107
107
|
|
|
108
|
-
- HTML is a
|
|
109
|
-
- Android and
|
|
108
|
+
- HTML is a deterministic runtime-free source projection for the supported shared layout subset, not proof of runtime or pixel parity.
|
|
109
|
+
- Android, Apple, and Flutter translation uses deterministic projection geometry for the supported shared layout subset; without separate native evidence it remains a structural projection, not proof of runtime or pixel parity.
|
|
110
110
|
- Unsupported bindings, custom drawing, runtime data, and platform behavior remain explicit gaps.
|
|
111
111
|
- Preview and review keep application source read-only; applying a proposal is a separate step.
|
|
112
112
|
- Derived cache and review state live outside the target repository by default.
|
|
@@ -123,11 +123,12 @@ A Windows `.exe` is not published yet. PyPI + `pipx` is the primary cross-platfo
|
|
|
123
123
|
## Documentation
|
|
124
124
|
|
|
125
125
|
- [Changelog](CHANGELOG.md)
|
|
126
|
-
- [Release and distribution guide](RELEASING.md)
|
|
127
126
|
- [Agent integrations](references/agent-integrations.md)
|
|
128
127
|
- [Fidelity contract](references/fidelity.md)
|
|
129
128
|
- [Native rendering](references/native-rendering.md)
|
|
129
|
+
- [Cache protocol](references/cache-protocol.md)
|
|
130
|
+
- [Platform component catalog](references/component-catalog.md)
|
|
130
131
|
- [IR schema](references/ir-schema.md)
|
|
131
132
|
- [Review workflow](references/review-workflow.md)
|
|
132
133
|
|
|
133
|
-
Current CLI version: `0.
|
|
134
|
+
Current CLI version: `0.6.6`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UI Design Workbench
|
|
2
2
|
|
|
3
|
-
[Русская версия](README.ru.md) · [Changelog](CHANGELOG.md)
|
|
3
|
+
[Русская версия](README.ru.md) · [Changelog](CHANGELOG.md)
|
|
4
4
|
|
|
5
5
|
Turn repository UI source into an offline interactive HTML workbench—without building or running the application.
|
|
6
6
|
|
|
@@ -63,7 +63,7 @@ uidw --repo <repo> review --output-dir <review-dir> --level full
|
|
|
63
63
|
- Incremental scans that reprocess only changed UI files.
|
|
64
64
|
- Property-level evidence and explicit unsupported gaps instead of guessed UI.
|
|
65
65
|
- Sparse review patches and a separate, authorized source-apply step.
|
|
66
|
-
-
|
|
66
|
+
- Runtime-free Android, Apple, and Flutter source projection with deterministic geometry for the supported subset; native evidence is required only before claiming visual or pixel parity and is never launched automatically.
|
|
67
67
|
|
|
68
68
|
Supported source families include Web, React, Vue, Svelte, Jetpack Compose, Android Views XML, SwiftUI, Storyboard/XIB, WinUI/WPF, and Flutter.
|
|
69
69
|
|
|
@@ -86,8 +86,8 @@ Run `uidw help overview`, `uidw help advanced`, or `uidw <command> --help` for d
|
|
|
86
86
|
|
|
87
87
|
## Accuracy and safety
|
|
88
88
|
|
|
89
|
-
- HTML is a
|
|
90
|
-
- Android and
|
|
89
|
+
- HTML is a deterministic runtime-free source projection for the supported shared layout subset, not proof of runtime or pixel parity.
|
|
90
|
+
- Android, Apple, and Flutter translation uses deterministic projection geometry for the supported shared layout subset; without separate native evidence it remains a structural projection, not proof of runtime or pixel parity.
|
|
91
91
|
- Unsupported bindings, custom drawing, runtime data, and platform behavior remain explicit gaps.
|
|
92
92
|
- Preview and review keep application source read-only; applying a proposal is a separate step.
|
|
93
93
|
- Derived cache and review state live outside the target repository by default.
|
|
@@ -104,11 +104,12 @@ A Windows `.exe` is not published yet. PyPI + `pipx` is the primary cross-platfo
|
|
|
104
104
|
## Documentation
|
|
105
105
|
|
|
106
106
|
- [Changelog](CHANGELOG.md)
|
|
107
|
-
- [Release and distribution guide](RELEASING.md)
|
|
108
107
|
- [Agent integrations](references/agent-integrations.md)
|
|
109
108
|
- [Fidelity contract](references/fidelity.md)
|
|
110
109
|
- [Native rendering](references/native-rendering.md)
|
|
110
|
+
- [Cache protocol](references/cache-protocol.md)
|
|
111
|
+
- [Platform component catalog](references/component-catalog.md)
|
|
111
112
|
- [IR schema](references/ir-schema.md)
|
|
112
113
|
- [Review workflow](references/review-workflow.md)
|
|
113
114
|
|
|
114
|
-
Current CLI version: `0.
|
|
115
|
+
Current CLI version: `0.6.6`.
|
|
@@ -14,22 +14,26 @@ Use UIDW as a deterministic local utility. The CLI, not the skill prompt, owns s
|
|
|
14
14
|
Prefer MCP tools `ui_project` then `ui_scope` when the local UIDW MCP is configured. Otherwise use the complete CLI fallback:
|
|
15
15
|
|
|
16
16
|
```text
|
|
17
|
-
uidw --repo <repo>
|
|
18
|
-
uidw --repo <repo> scope --
|
|
17
|
+
uidw --repo <repo> scope --budget 4000
|
|
18
|
+
uidw --repo <repo> scope --screen <id> --budget 4000
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
The first command initializes or reuses the cache and writes a compact catalog; the second writes the selected screen context. Scope provenance is compact by default. Use `ui_fidelity` or `uidw fidelity explain <node-id>` only for nodes that need full source evidence. Reuse the returned `scopeHash` through `if_none_match` or `--if-none-match` before requesting the same scope again.
|
|
22
|
+
|
|
23
|
+
If `uidw` is unavailable, run `python <skill-dir>/scripts/uidw.py ...`. Reuse a clean cache. Never paste or read the complete `ui-ir.json` when a scoped context can answer the task. Request another screen/finding scope only when needed. If a scope reports `over-budget`, narrow it or explicitly raise the budget; no partial node tree was returned.
|
|
22
24
|
|
|
23
25
|
If first-use context says `setupRequired`, ask only for `low`, `medium`, or `high` using its short descriptions. Mock-data depth follows that choice. Do not recommend a level. Optional `uiMode` remains off until explicitly enabled.
|
|
24
26
|
|
|
25
27
|
## 2. Route the request
|
|
26
28
|
|
|
27
|
-
- Reconstruct/generate/redesign: read [references/design-modes.md](references/design-modes.md), then only the matching platform section from [references/platform-standards.md](references/platform-standards.md). Use cached evidence and `uidw workbench`; validate transfer fidelity, not product UX.
|
|
29
|
+
- Reconstruct/generate/redesign: read [references/design-modes.md](references/design-modes.md), then only the matching platform section from [references/platform-standards.md](references/platform-standards.md). Use cached evidence and `uidw workbench`; validate transfer fidelity, not product UX. Layout fidelity comes from the runtime-free deterministic projection; do not build or launch the source application.
|
|
28
30
|
- Explicit review/audit/critique: read [references/ui-reviewer.md](references/ui-reviewer.md) and [references/review-workflow.md](references/review-workflow.md). Review immutable Before only and work in bounded screen batches.
|
|
29
31
|
- Workbench chrome behavior: read [references/workbench-ui.md](references/workbench-ui.md).
|
|
30
32
|
- Ordinary UI source task with `uiMode.enabled=true`: read [references/ui-guidance-mode.md](references/ui-guidance-mode.md). Do not create a preview or review unless requested.
|
|
31
33
|
- Cache/install/agent integration question: read only [references/cache-protocol.md](references/cache-protocol.md) or [references/agent-integrations.md](references/agent-integrations.md), respectively.
|
|
32
34
|
|
|
35
|
+
Legacy provider discovery remains available through read-only MCP `ui_native_status` (or `uidw native status`). It is optional compatibility diagnostics and must not be called as part of reconstruction, deterministic layout, rendering, or fidelity gating.
|
|
36
|
+
|
|
33
37
|
## 3. Return sparse changes
|
|
34
38
|
|
|
35
39
|
Review/proposal agents write `ui-ir.patch.json`, never a replacement full IR:
|
|
@@ -47,6 +51,6 @@ Allowed operations are `upsert-findings`, `upsert-versions`, `merge-annotations`
|
|
|
47
51
|
- Do not run the target app, emulator, simulator, build, or dev server unless separately requested. Headless checks may open only generated local HTML.
|
|
48
52
|
- Preserve discovered screens, routes, project components, platform idioms, tokens, themes, states, provenance, and unsupported gaps. Do not invent polish or browser-default replacements.
|
|
49
53
|
- HTML is a projection. Base IR is immutable Before; proposal versions are sparse overrides.
|
|
50
|
-
- Android
|
|
54
|
+
- Android, Apple, Windows, and Flutter source translation uses deterministic projection geometry where the shared layout subset is known. Never call HTML a native render or claim runtime/pixel parity without matching native evidence.
|
|
51
55
|
- Applying a proposal to real source requires a separate explicit `Apply to project` or direct-fix authorization, bounded source targets, incremental sync, and targeted verification. Never repeat the full AI review automatically.
|
|
52
56
|
- Keep cache and review artifacts outside source control unless the user explicitly requests otherwise.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ui-design-workbench-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.6.6"
|
|
8
8
|
description = "Repository UI indexing, graph, preview, and deterministic review CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -39,12 +39,14 @@ py-modules = [
|
|
|
39
39
|
"android_xml_support",
|
|
40
40
|
"scan_ui",
|
|
41
41
|
"ir_contracts",
|
|
42
|
+
"layout_model",
|
|
42
43
|
"fidelity_core",
|
|
43
44
|
"fidelity_adapter_api",
|
|
44
45
|
"fidelity_adapters",
|
|
45
46
|
"fidelity_platform_adapters",
|
|
46
47
|
"android_resource_resolver",
|
|
47
48
|
"apple_resource_resolver",
|
|
49
|
+
"platform_component_catalog",
|
|
48
50
|
"native_render_contracts",
|
|
49
51
|
"native_render_android",
|
|
50
52
|
"native_render_apple",
|
|
@@ -57,7 +59,7 @@ py-modules = [
|
|
|
57
59
|
|
|
58
60
|
[tool.setuptools.data-files]
|
|
59
61
|
"share/ui-design-workbench" = ["SKILL.md"]
|
|
60
|
-
"share/ui-design-workbench/references" = ["references/*.md", "references/platform-profiles.json"]
|
|
62
|
+
"share/ui-design-workbench/references" = ["references/*.md", "references/platform-profiles.json", "references/component-catalog.json", "references/component-inventory.json"]
|
|
61
63
|
"share/ui-design-workbench/schemas" = ["schemas/*.json"]
|
|
62
64
|
"share/ui-design-workbench/scripts" = [
|
|
63
65
|
"scripts/android_resource_resolver.py",
|
|
@@ -70,11 +72,13 @@ py-modules = [
|
|
|
70
72
|
"scripts/fidelity_platform_adapters.py",
|
|
71
73
|
"scripts/generate_interaction_matrix.py",
|
|
72
74
|
"scripts/ir_contracts.py",
|
|
75
|
+
"scripts/layout_model.py",
|
|
73
76
|
"scripts/merge_review_state.py",
|
|
74
77
|
"scripts/native_render_android.py",
|
|
75
78
|
"scripts/native_render_apple.py",
|
|
76
79
|
"scripts/native_render_contracts.py",
|
|
77
80
|
"scripts/native_render_registry.py",
|
|
81
|
+
"scripts/platform_component_catalog.py",
|
|
78
82
|
"scripts/quality_common.py",
|
|
79
83
|
"scripts/render_preview.py",
|
|
80
84
|
"scripts/scan_ui.py",
|
{ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/agent-integrations.md
RENAMED
|
@@ -36,4 +36,4 @@ For ordinary source tasks, `uidw init` can opt a project into lightweight UI gui
|
|
|
36
36
|
|
|
37
37
|
Codex may opt into `render_preview.py --agent codex`, which enables the official local `codex://new` preparation path. Other agents use copied prompts or the JSON job. Provider-specific adapters are optional presentation conveniences and must not change the IR, cache, review semantics, permissions, or approval boundary.
|
|
38
38
|
|
|
39
|
-
The optional `uidw-mcp` stdio server is a transport facade over the same deterministic CLI core. It exposes compact project discovery, bounded screen/finding context, job preparation, sparse patch application, preview building, and fidelity explanation. MCP is an optional dependency; installing or running the regular CLI must not require it. Configure an agent to launch `uidw-mcp --repo <absolute-project-path>` as a local stdio command; it opens no port and keeps
|
|
39
|
+
The optional `uidw-mcp` stdio server is a transport facade over the same deterministic CLI core. It exposes compact project discovery, strictly bounded screen/finding context, job preparation, sparse patch application, preview building, and on-demand fidelity explanation. Scoped nodes omit full source expressions by default and expose a stable `scopeHash`; pass it back as `if_none_match` before repeating the same request. MCP is an optional dependency; installing or running the regular CLI must not require it. Configure an agent to launch `uidw-mcp --repo <absolute-project-path>` as a local stdio command; it opens no port and keeps project caches on the local machine. Selected model-facing context is still visible to the host agent and should be treated as derived source data.
|
{ui_design_workbench_cli-0.5.0 → ui_design_workbench_cli-0.6.6}/references/cache-protocol.md
RENAMED
|
@@ -34,6 +34,8 @@ uidw --repo <repo> status --json
|
|
|
34
34
|
uidw --repo <repo> sync
|
|
35
35
|
uidw --repo <repo> context --screen <screen-id> --json
|
|
36
36
|
uidw --repo <repo> context --screen <screen-id> --budget 4000 --format markdown
|
|
37
|
+
uidw --repo <repo> scope --budget 4000
|
|
38
|
+
uidw --repo <repo> scope --screen <screen-id> --budget 4000
|
|
37
39
|
uidw --repo <repo> map --output <docs-or-artifact-dir>/ui-graph.json
|
|
38
40
|
uidw --repo <repo> diff
|
|
39
41
|
uidw --repo <repo> workbench --output-dir <artifact-dir>
|
|
@@ -59,3 +61,5 @@ Interactive `init` asks only for detail level and does not recommend or preselec
|
|
|
59
61
|
UI guidance is not asked during setup and remains off unless explicitly enabled. `init --ui-mode` and `init --no-ui-mode` make automation deterministic. Later use `ui-mode --enable`, `ui-mode --disable`, or `config set ui-mode on|off`. Enabling guidance changes agent behavior only for UI-related tasks and does not imply review, redesign, preview generation, or source-edit permission.
|
|
60
62
|
|
|
61
63
|
Mock data follows detail level automatically: `low` uses `minimal`, `medium` uses `representative`, and `high` uses `exhaustive`. This derived change refreshes model context but never causes another repository source scan by itself. Preserve existing `scenarioFixtures` and `screen.scenarios` for unaffected screen IDs during incremental sync; regenerate only fixtures whose source dependencies changed.
|
|
64
|
+
|
|
65
|
+
Use `scope` rather than JSON `context --screen` for agent prompts. It includes only referenced tokens and theme overrides, summarizes property provenance, enforces the requested budget without returning a partial tree, and supports `scopeHash` reuse. The older `context` command remains a human-readable cache summary and compatibility surface.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"authorityOrder": ["official-platform-documentation", "built-in-renderer-calibration", "project-authored-overrides"],
|
|
4
|
+
"note": "Component identity and semantics follow official platform documentation. HTML geometry is a calibrated fallback only; explicit project values always win.",
|
|
5
|
+
"families": {
|
|
6
|
+
"android": {
|
|
7
|
+
"sources": [
|
|
8
|
+
{"title": "Material 3 components", "url": "https://m3.material.io/components", "authority": "official"},
|
|
9
|
+
{"title": "Compose accessibility defaults", "url": "https://developer.android.com/develop/ui/compose/accessibility/api-defaults", "authority": "official"}
|
|
10
|
+
],
|
|
11
|
+
"components": {
|
|
12
|
+
"button": {"aliases": ["Button", "MaterialButton", "FilledButton", "FilledTonalButton"], "types": ["button"], "rendererKind": "button", "layout": {"minHeight": 48, "paddingHorizontal": 24}, "style": {"backgroundColor": "#6750a4", "color": "#ffffff", "radius": 20, "fontFamily": "Roboto, Arial, sans-serif", "fontSize": 14, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
13
|
+
"outlined-button": {"aliases": ["OutlinedButton"], "rendererKind": "button", "layout": {"minHeight": 48, "paddingHorizontal": 24}, "style": {"backgroundColor": "transparent", "color": "#6750a4", "borderColor": "#79747e", "borderWidth": 1, "borderStyle": "solid", "radius": 20, "fontSize": 14, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
14
|
+
"text-button": {"aliases": ["TextButton"], "rendererKind": "button", "layout": {"minHeight": 48, "paddingHorizontal": 12}, "style": {"backgroundColor": "transparent", "color": "#6750a4", "radius": 20, "fontSize": 14, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
15
|
+
"icon-button": {"aliases": ["IconButton", "ImageButton", "FloatingActionButton", "ExtendedFloatingActionButton"], "rendererKind": "icon-button", "layout": {"width": 48, "height": 48}, "style": {"backgroundColor": "transparent", "color": "#49454f", "radius": 24}, "semantics": {"role": "button"}},
|
|
16
|
+
"text-field": {"aliases": ["TextField", "OutlinedTextField", "EditText", "TextInputEditText"], "types": ["input"], "rendererKind": "input", "layout": {"minHeight": 56, "paddingHorizontal": 16}, "style": {"backgroundColor": "#f7f2fa", "color": "#1d1b20", "borderColor": "#79747e", "borderWidth": 1, "borderStyle": "solid", "radius": 4, "fontFamily": "Roboto, Arial, sans-serif", "fontSize": 16}, "semantics": {"role": "textbox"}},
|
|
17
|
+
"card": {"aliases": ["Card", "Surface", "MaterialCardView", "CardView", "ElevatedCard", "OutlinedCard"], "types": ["card"], "rendererKind": "surface", "layout": {"padding": 16}, "style": {"backgroundColor": "#f7f2fa", "color": "#1d1b20", "radius": 12}},
|
|
18
|
+
"text": {"aliases": ["Text", "TextView", "MaterialTextView"], "types": ["text"], "rendererKind": "text", "style": {"color": "#1d1b20", "fontFamily": "Roboto, Arial, sans-serif", "fontSize": 16, "lineHeight": 24}},
|
|
19
|
+
"switch": {"aliases": ["Switch", "SwitchMaterial"], "rendererKind": "switch", "layout": {"width": 52, "height": 32}, "style": {"backgroundColor": "#79747e", "color": "#ffffff", "radius": 16}, "semantics": {"role": "switch"}},
|
|
20
|
+
"checkbox": {"aliases": ["Checkbox", "CheckBox", "RadioButton"], "rendererKind": "checkbox", "layout": {"width": 48, "height": 48}, "style": {"color": "#6750a4"}, "semantics": {"role": "checkbox"}},
|
|
21
|
+
"navigation": {"aliases": ["NavigationBar", "NavigationRail", "TopAppBar", "CenterAlignedTopAppBar", "Toolbar"], "rendererKind": "navigation", "layout": {"minHeight": 64, "paddingHorizontal": 16}, "style": {"backgroundColor": "#fffbfe", "color": "#1d1b20"}, "semantics": {"role": "navigation"}},
|
|
22
|
+
"list-item": {"aliases": ["ListItem"], "rendererKind": "surface", "layout": {"minHeight": 56, "paddingHorizontal": 16, "paddingVertical": 8}, "style": {"backgroundColor": "transparent", "color": "#1d1b20"}},
|
|
23
|
+
"neutral": {"aliases": [], "rendererKind": "surface"},
|
|
24
|
+
"progress": {"aliases": ["LinearProgressIndicator", "CircularProgressIndicator", "ProgressBar"], "rendererKind": "progress", "layout": {"height": 4}, "style": {"backgroundColor": "#e7e0ec", "color": "#6750a4", "radius": 2}, "semantics": {"role": "progressbar"}}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"ios": {
|
|
28
|
+
"sources": [
|
|
29
|
+
{"title": "Apple Human Interface Guidelines — Components", "url": "https://developer.apple.com/design/human-interface-guidelines/components", "authority": "official"},
|
|
30
|
+
{"title": "Apple Human Interface Guidelines — Designing for iOS", "url": "https://developer.apple.com/design/human-interface-guidelines/designing-for-ios", "authority": "official"}
|
|
31
|
+
],
|
|
32
|
+
"components": {
|
|
33
|
+
"button": {"aliases": ["Button", "button", "CupertinoButton"], "types": ["button"], "rendererKind": "button", "layout": {"minHeight": 44, "paddingHorizontal": 16}, "style": {"backgroundColor": "#007aff", "color": "#ffffff", "radius": 10, "fontFamily": "-apple-system, BlinkMacSystemFont, sans-serif", "fontSize": 17, "fontWeight": 600, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
34
|
+
"icon-button": {"aliases": ["IconButton"], "rendererKind": "icon-button", "layout": {"width": 44, "height": 44}, "style": {"backgroundColor": "transparent", "color": "#007aff", "radius": 22}, "semantics": {"role": "button"}},
|
|
35
|
+
"text-field": {"aliases": ["TextField", "SecureField", "textField", "textView", "CupertinoTextField"], "types": ["input"], "rendererKind": "input", "layout": {"minHeight": 44, "paddingHorizontal": 12}, "style": {"backgroundColor": "#e9e9eb", "color": "#000000", "radius": 10, "fontFamily": "-apple-system, BlinkMacSystemFont, sans-serif", "fontSize": 17}, "semantics": {"role": "textbox"}},
|
|
36
|
+
"card": {"aliases": ["GroupBox", "Section"], "types": ["card"], "rendererKind": "surface", "layout": {"padding": 16}, "style": {"backgroundColor": "#ffffff", "color": "#000000", "radius": 12, "boxShadow": "0 1px 3px rgba(0,0,0,.12)"}},
|
|
37
|
+
"text": {"aliases": ["Text", "Label", "label"], "types": ["text"], "rendererKind": "text", "style": {"color": "#000000", "fontFamily": "-apple-system, BlinkMacSystemFont, sans-serif", "fontSize": 17, "lineHeight": 22}},
|
|
38
|
+
"switch": {"aliases": ["Toggle", "switch"], "rendererKind": "switch", "layout": {"width": 51, "height": 31}, "style": {"backgroundColor": "#8e8e93", "color": "#ffffff", "radius": 16}, "semantics": {"role": "switch"}},
|
|
39
|
+
"checkbox": {"aliases": ["Checkbox"], "rendererKind": "checkbox", "layout": {"width": 44, "height": 44}, "style": {"color": "#007aff"}, "semantics": {"role": "checkbox"}},
|
|
40
|
+
"navigation": {"aliases": ["NavigationStack", "NavigationView", "navigationBar", "toolbar"], "rendererKind": "navigation", "layout": {"minHeight": 44, "paddingHorizontal": 16}, "style": {"backgroundColor": "rgba(249,249,249,.94)", "color": "#000000"}, "semantics": {"role": "navigation"}},
|
|
41
|
+
"list": {"aliases": ["List", "Form", "tableView", "collectionView"], "types": ["list"], "rendererKind": "list", "style": {"backgroundColor": "#f2f2f7", "color": "#000000"}},
|
|
42
|
+
"neutral": {"aliases": [], "rendererKind": "surface"},
|
|
43
|
+
"progress": {"aliases": ["ProgressView", "progressView"], "rendererKind": "progress", "layout": {"height": 4}, "style": {"backgroundColor": "#d1d1d6", "color": "#007aff", "radius": 2}, "semantics": {"role": "progressbar"}}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"macos": {
|
|
47
|
+
"sources": [
|
|
48
|
+
{"title": "Apple Human Interface Guidelines — Components", "url": "https://developer.apple.com/design/human-interface-guidelines/components", "authority": "official"},
|
|
49
|
+
{"title": "Apple Human Interface Guidelines — Designing for macOS", "url": "https://developer.apple.com/design/human-interface-guidelines/designing-for-macos", "authority": "official"}
|
|
50
|
+
],
|
|
51
|
+
"components": {
|
|
52
|
+
"button": {"aliases": ["Button", "button"], "types": ["button"], "rendererKind": "button", "layout": {"minHeight": 28, "paddingHorizontal": 12}, "style": {"backgroundColor": "#0a84ff", "color": "#ffffff", "radius": 6, "fontFamily": "-apple-system, BlinkMacSystemFont, sans-serif", "fontSize": 13, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
53
|
+
"text-field": {"aliases": ["TextField", "SecureField", "textField", "textView"], "types": ["input"], "rendererKind": "input", "layout": {"minHeight": 22, "paddingHorizontal": 7}, "style": {"backgroundColor": "#ffffff", "color": "#1e1e1e", "borderColor": "#8e8e93", "borderWidth": 1, "borderStyle": "solid", "radius": 5, "fontSize": 13}, "semantics": {"role": "textbox"}},
|
|
54
|
+
"card": {"aliases": ["GroupBox", "Section"], "types": ["card"], "rendererKind": "surface", "layout": {"padding": 12}, "style": {"backgroundColor": "#f5f5f5", "color": "#1e1e1e", "radius": 8, "borderColor": "#d1d1d1", "borderWidth": 1, "borderStyle": "solid"}},
|
|
55
|
+
"text": {"aliases": ["Text", "Label", "label"], "types": ["text"], "rendererKind": "text", "style": {"color": "#1e1e1e", "fontFamily": "-apple-system, BlinkMacSystemFont, sans-serif", "fontSize": 13, "lineHeight": 17}},
|
|
56
|
+
"switch": {"aliases": ["Toggle", "switch"], "rendererKind": "switch", "layout": {"width": 38, "height": 22}, "style": {"backgroundColor": "#8e8e93", "color": "#ffffff", "radius": 11}, "semantics": {"role": "switch"}},
|
|
57
|
+
"navigation": {"aliases": ["NavigationSplitView", "toolbar", "NSToolbar", "NSSplitView"], "rendererKind": "navigation", "layout": {"minHeight": 38, "paddingHorizontal": 10}, "style": {"backgroundColor": "rgba(246,246,246,.94)", "color": "#1e1e1e", "borderColor": "#c8c8c8", "borderBottomWidth": 1, "borderStyle": "solid"}, "semantics": {"role": "navigation"}},
|
|
58
|
+
"list": {"aliases": ["List", "Table", "tableView", "collectionView"], "types": ["list"], "rendererKind": "list", "style": {"backgroundColor": "#ffffff", "color": "#1e1e1e"}},
|
|
59
|
+
"checkbox": {"aliases": ["CheckBox", "RadioButton", "checkBox", "radioButton", "segmentedControl"], "rendererKind": "checkbox", "layout": {"width": 28, "height": 22}, "style": {"color": "#0a84ff"}, "semantics": {"role": "checkbox"}},
|
|
60
|
+
"neutral": {"aliases": [], "rendererKind": "surface"},
|
|
61
|
+
"progress": {"aliases": ["ProgressView", "progressIndicator", "levelIndicator"], "rendererKind": "progress", "layout": {"height": 4}, "style": {"backgroundColor": "#d1d1d6", "color": "#0a84ff", "radius": 2}, "semantics": {"role": "progressbar"}}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"windows": {
|
|
65
|
+
"sources": [
|
|
66
|
+
{"title": "Windows app controls", "url": "https://learn.microsoft.com/en-us/windows/apps/design/controls/", "authority": "official"}
|
|
67
|
+
],
|
|
68
|
+
"components": {
|
|
69
|
+
"button": {"aliases": ["Button", "HyperlinkButton"], "types": ["button"], "rendererKind": "button", "layout": {"minHeight": 32, "paddingHorizontal": 12}, "style": {"backgroundColor": "#005fb8", "color": "#ffffff", "radius": 4, "fontFamily": "Segoe UI, sans-serif", "fontSize": 14, "fontWeight": 600, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
70
|
+
"icon-button": {"aliases": ["AppBarButton"], "rendererKind": "icon-button", "layout": {"width": 40, "height": 40}, "style": {"backgroundColor": "transparent", "color": "#1a1a1a", "radius": 4}, "semantics": {"role": "button"}},
|
|
71
|
+
"text-field": {"aliases": ["TextBox", "PasswordBox", "AutoSuggestBox", "NumberBox"], "types": ["input"], "rendererKind": "input", "layout": {"minHeight": 32, "paddingHorizontal": 10}, "style": {"backgroundColor": "#ffffff", "color": "#1a1a1a", "borderColor": "#8a8886", "borderWidth": 1, "borderStyle": "solid", "radius": 4, "fontFamily": "Segoe UI, sans-serif", "fontSize": 14}, "semantics": {"role": "textbox"}},
|
|
72
|
+
"card": {"aliases": ["Border", "Expander"], "types": ["card"], "rendererKind": "surface", "layout": {"padding": 12}, "style": {"backgroundColor": "#ffffff", "color": "#1a1a1a", "radius": 8, "borderColor": "#e5e5e5", "borderWidth": 1, "borderStyle": "solid"}},
|
|
73
|
+
"text": {"aliases": ["TextBlock", "Label"], "types": ["text"], "rendererKind": "text", "style": {"color": "#1a1a1a", "fontFamily": "Segoe UI, sans-serif", "fontSize": 14, "lineHeight": 20}},
|
|
74
|
+
"switch": {"aliases": ["ToggleSwitch", "ToggleButton"], "rendererKind": "switch", "layout": {"width": 40, "height": 20}, "style": {"backgroundColor": "#8a8886", "color": "#ffffff", "radius": 10}, "semantics": {"role": "switch"}},
|
|
75
|
+
"checkbox": {"aliases": ["CheckBox", "RadioButton"], "rendererKind": "checkbox", "layout": {"width": 32, "height": 32}, "style": {"color": "#005fb8"}, "semantics": {"role": "checkbox"}},
|
|
76
|
+
"navigation": {"aliases": ["NavigationView", "CommandBar", "MenuBar", "ToolBar"], "rendererKind": "navigation", "layout": {"minHeight": 48, "paddingHorizontal": 12}, "style": {"backgroundColor": "#f3f3f3", "color": "#1a1a1a", "borderColor": "#e5e5e5", "borderBottomWidth": 1, "borderStyle": "solid"}, "semantics": {"role": "navigation"}},
|
|
77
|
+
"list": {"aliases": ["ListView", "GridView", "ItemsControl", "TreeView"], "types": ["list"], "rendererKind": "list", "style": {"backgroundColor": "#ffffff", "color": "#1a1a1a"}},
|
|
78
|
+
"neutral": {"aliases": [], "rendererKind": "surface"},
|
|
79
|
+
"progress": {"aliases": ["ProgressBar", "ProgressRing"], "rendererKind": "progress", "layout": {"height": 4}, "style": {"backgroundColor": "#d1d1d1", "color": "#005fb8", "radius": 2}, "semantics": {"role": "progressbar"}}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"flutter": {
|
|
83
|
+
"sources": [
|
|
84
|
+
{"title": "Flutter widget catalog", "url": "https://docs.flutter.dev/ui/widgets", "authority": "official"},
|
|
85
|
+
{"title": "Flutter Material component widgets", "url": "https://docs.flutter.dev/ui/widgets/material", "authority": "official"},
|
|
86
|
+
{"title": "Flutter Cupertino widgets", "url": "https://docs.flutter.dev/ui/widgets/cupertino", "authority": "official"}
|
|
87
|
+
],
|
|
88
|
+
"components": {
|
|
89
|
+
"button": {"aliases": ["ElevatedButton", "FilledButton", "CupertinoButton"], "types": ["button"], "rendererKind": "button", "layout": {"minHeight": 48, "paddingHorizontal": 24}, "style": {"backgroundColor": "#6750a4", "color": "#ffffff", "radius": 20, "fontFamily": "Roboto, Arial, sans-serif", "fontSize": 14, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
90
|
+
"outlined-button": {"aliases": ["OutlinedButton"], "rendererKind": "button", "layout": {"minHeight": 48, "paddingHorizontal": 24}, "style": {"backgroundColor": "transparent", "color": "#6750a4", "borderColor": "#79747e", "borderWidth": 1, "borderStyle": "solid", "radius": 20, "fontSize": 14, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
91
|
+
"text-button": {"aliases": ["TextButton"], "rendererKind": "button", "layout": {"minHeight": 48, "paddingHorizontal": 12}, "style": {"backgroundColor": "transparent", "color": "#6750a4", "radius": 20, "fontSize": 14, "fontWeight": 500, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
92
|
+
"icon-button": {"aliases": ["IconButton", "FloatingActionButton"], "rendererKind": "icon-button", "layout": {"width": 48, "height": 48}, "style": {"backgroundColor": "transparent", "color": "#49454f", "radius": 24}, "semantics": {"role": "button"}},
|
|
93
|
+
"text-field": {"aliases": ["TextField", "TextFormField", "CupertinoTextField"], "types": ["input"], "rendererKind": "input", "layout": {"minHeight": 56, "paddingHorizontal": 16}, "style": {"backgroundColor": "#f7f2fa", "color": "#1d1b20", "borderColor": "#79747e", "borderWidth": 1, "borderStyle": "solid", "radius": 4, "fontSize": 16}, "semantics": {"role": "textbox"}},
|
|
94
|
+
"card": {"aliases": ["Card"], "types": ["card"], "rendererKind": "surface", "layout": {"padding": 16}, "style": {"backgroundColor": "#f7f2fa", "color": "#1d1b20", "radius": 12, "boxShadow": "0 1px 3px rgba(0,0,0,.16)"}},
|
|
95
|
+
"text": {"aliases": ["Text"], "types": ["text"], "rendererKind": "text", "style": {"color": "#1d1b20", "fontFamily": "Roboto, Arial, sans-serif", "fontSize": 14, "lineHeight": 20}},
|
|
96
|
+
"switch": {"aliases": ["Switch", "CupertinoSwitch"], "rendererKind": "switch", "layout": {"width": 52, "height": 32}, "style": {"backgroundColor": "#79747e", "color": "#ffffff", "radius": 16}, "semantics": {"role": "switch"}},
|
|
97
|
+
"checkbox": {"aliases": ["Checkbox", "Radio"], "rendererKind": "checkbox", "layout": {"width": 48, "height": 48}, "style": {"color": "#6750a4"}, "semantics": {"role": "checkbox"}},
|
|
98
|
+
"navigation": {"aliases": ["AppBar", "NavigationBar", "BottomNavigationBar"], "rendererKind": "navigation", "layout": {"minHeight": 64, "paddingHorizontal": 16}, "style": {"backgroundColor": "#fffbfe", "color": "#1d1b20"}, "semantics": {"role": "navigation"}},
|
|
99
|
+
"list-item": {"aliases": ["ListTile"], "rendererKind": "surface", "layout": {"minHeight": 56, "paddingHorizontal": 16, "paddingVertical": 8}, "style": {"backgroundColor": "transparent", "color": "#1d1b20"}},
|
|
100
|
+
"neutral": {"aliases": [], "rendererKind": "surface"},
|
|
101
|
+
"progress": {"aliases": ["LinearProgressIndicator", "CircularProgressIndicator"], "rendererKind": "progress", "layout": {"height": 4}, "style": {"backgroundColor": "#e7e0ec", "color": "#6750a4", "radius": 2}, "semantics": {"role": "progressbar"}}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"web": {
|
|
105
|
+
"sources": [
|
|
106
|
+
{"title": "HTML Living Standard", "url": "https://html.spec.whatwg.org/multipage/", "authority": "official-standard"},
|
|
107
|
+
{"title": "WAI-ARIA Authoring Practices", "url": "https://www.w3.org/WAI/ARIA/apg/", "authority": "official-standard"}
|
|
108
|
+
],
|
|
109
|
+
"components": {
|
|
110
|
+
"button": {"aliases": ["button"], "types": ["button"], "rendererKind": "button", "layout": {"minHeight": 30, "paddingHorizontal": 8}, "style": {"backgroundColor": "#efefef", "color": "#111111", "borderColor": "#767676", "borderWidth": 1, "borderStyle": "solid", "radius": 2, "fontFamily": "Arial, sans-serif", "fontSize": 13, "textAlign": "center"}, "semantics": {"role": "button"}},
|
|
111
|
+
"input": {"aliases": ["input", "textarea", "select"], "types": ["input"], "rendererKind": "input", "layout": {"minHeight": 30, "paddingHorizontal": 6}, "style": {"backgroundColor": "#ffffff", "color": "#111111", "borderColor": "#767676", "borderWidth": 1, "borderStyle": "solid", "radius": 2, "fontFamily": "Arial, sans-serif", "fontSize": 13}, "semantics": {"role": "textbox"}},
|
|
112
|
+
"text": {"aliases": ["p", "span", "label", "h1", "h2", "h3", "h4", "h5", "h6"], "types": ["text"], "rendererKind": "text", "style": {"color": "#111111", "fontFamily": "Arial, sans-serif", "fontSize": 16, "lineHeight": 20}},
|
|
113
|
+
"navigation": {"aliases": ["nav"], "rendererKind": "navigation", "semantics": {"role": "navigation"}},
|
|
114
|
+
"list": {"aliases": ["ul", "ol", "table"], "types": ["list"], "rendererKind": "list"},
|
|
115
|
+
"neutral": {"aliases": [], "rendererKind": "surface"},
|
|
116
|
+
"link": {"aliases": ["a"], "rendererKind": "text", "style": {"color": "#0000ee", "textDecoration": "underline"}, "semantics": {"role": "link"}},
|
|
117
|
+
"progress": {"aliases": ["progress"], "rendererKind": "progress", "layout": {"height": 8}, "style": {"backgroundColor": "#d1d5db", "color": "#2563eb", "radius": 4}, "semantics": {"role": "progressbar"}}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Platform component inventory and renderer catalog
|
|
2
|
+
|
|
3
|
+
The component model has two deliberately separate layers:
|
|
4
|
+
|
|
5
|
+
- `component-inventory.json` is the complete public visual-component inventory recognized by the source adapters. It groups framework/API names into official concepts for Android, iOS, macOS, Windows, Flutter, and Web.
|
|
6
|
+
- `component-catalog.json` contains calibrated HTML renderer recipes. Several official components can share one recipe without being treated as the same source component.
|
|
7
|
+
|
|
8
|
+
The current inventory contains 178 official concept groups and 593 concrete framework bindings. The renderer has 66 conservative recipes. These counts are different on purpose: copying hundreds of near-identical CSS recipes would make calibration inconsistent and would not improve fidelity.
|
|
9
|
+
|
|
10
|
+
The authority order is deliberate:
|
|
11
|
+
|
|
12
|
+
1. official platform documentation defines component identity, semantics, and expected behavior;
|
|
13
|
+
2. built-in renderer calibration supplies conservative HTML geometry when source code has no explicit value;
|
|
14
|
+
3. project-authored layout, theme, token, style, and accessibility values always override the fallback.
|
|
15
|
+
|
|
16
|
+
Every family links to its official documentation in JSON. `uidw fidelity capabilities` reports recipe, concept, and binding coverage separately and fails when bindings conflict, an inventory concept references a missing recipe, a family has no source, or a renderer kind is invalid.
|
|
17
|
+
|
|
18
|
+
“Complete” means the public visual primitives and controls in the linked official component/widget/control catalogs. It intentionally excludes nonvisual controllers, delegates, routes, painters, internal implementation classes, deprecated platform-specific products, and runtime-generated project components. Project wrappers are discovered separately and mapped back to this inventory with source provenance.
|
|
19
|
+
|
|
20
|
+
The fallback is not a native screenshot and must not be described as pixel-perfect. Official documentation does not encode every runtime measurement, font rasterization detail, OS-version variation, or project theme override. Native captures remain the visual authority where exact evidence is required.
|
|
21
|
+
|
|
22
|
+
Large-project analysis is secondary. It may discover project wrappers such as `PrimaryButton`, theme indirection, and frequently combined primitives, but it must not redefine official controls or copy proprietary UI code into the global catalog. Project-specific mappings belong to the project cache and must retain source provenance.
|