musubi-sdd 5.1.0 → 5.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +106 -48
- package/README.md +110 -32
- package/bin/musubi-analyze.js +74 -67
- package/bin/musubi-browser.js +27 -26
- package/bin/musubi-change.js +48 -47
- package/bin/musubi-checkpoint.js +10 -7
- package/bin/musubi-convert.js +25 -25
- package/bin/musubi-costs.js +27 -10
- package/bin/musubi-gui.js +52 -46
- package/bin/musubi-init.js +1952 -10
- package/bin/musubi-orchestrate.js +327 -239
- package/bin/musubi-remember.js +69 -56
- package/bin/musubi-resolve.js +53 -45
- package/bin/musubi-trace.js +51 -22
- package/bin/musubi-validate.js +39 -30
- package/bin/musubi-workflow.js +33 -34
- package/bin/musubi.js +39 -2
- package/package.json +1 -1
- package/src/agents/agent-loop.js +94 -95
- package/src/agents/agentic/code-generator.js +119 -109
- package/src/agents/agentic/code-reviewer.js +105 -108
- package/src/agents/agentic/index.js +4 -4
- package/src/agents/browser/action-executor.js +13 -13
- package/src/agents/browser/ai-comparator.js +11 -10
- package/src/agents/browser/context-manager.js +6 -6
- package/src/agents/browser/index.js +5 -5
- package/src/agents/browser/nl-parser.js +31 -46
- package/src/agents/browser/screenshot.js +2 -2
- package/src/agents/browser/test-generator.js +6 -4
- package/src/agents/function-tool.js +71 -65
- package/src/agents/index.js +7 -7
- package/src/agents/schema-generator.js +98 -94
- package/src/analyzers/ast-extractor.js +158 -146
- package/src/analyzers/codegraph-auto-update.js +858 -0
- package/src/analyzers/complexity-analyzer.js +536 -0
- package/src/analyzers/context-optimizer.js +241 -126
- package/src/analyzers/impact-analyzer.js +1 -1
- package/src/analyzers/large-project-analyzer.js +766 -0
- package/src/analyzers/repository-map.js +77 -81
- package/src/analyzers/security-analyzer.js +19 -11
- package/src/analyzers/stuck-detector.js +19 -17
- package/src/converters/index.js +78 -57
- package/src/converters/ir/types.js +12 -12
- package/src/converters/parsers/musubi-parser.js +134 -126
- package/src/converters/parsers/openapi-parser.js +70 -53
- package/src/converters/parsers/speckit-parser.js +239 -175
- package/src/converters/writers/musubi-writer.js +123 -118
- package/src/converters/writers/speckit-writer.js +124 -113
- package/src/generators/rust-migration-generator.js +512 -0
- package/src/gui/public/index.html +1365 -1211
- package/src/gui/server.js +41 -40
- package/src/gui/services/file-watcher.js +23 -8
- package/src/gui/services/project-scanner.js +26 -20
- package/src/gui/services/replanning-service.js +27 -23
- package/src/gui/services/traceability-service.js +8 -8
- package/src/gui/services/workflow-service.js +14 -7
- package/src/index.js +151 -0
- package/src/integrations/cicd.js +90 -104
- package/src/integrations/codegraph-mcp.js +643 -0
- package/src/integrations/documentation.js +142 -103
- package/src/integrations/examples.js +95 -80
- package/src/integrations/github-client.js +17 -17
- package/src/integrations/index.js +5 -5
- package/src/integrations/mcp/index.js +21 -21
- package/src/integrations/mcp/mcp-context-provider.js +76 -78
- package/src/integrations/mcp/mcp-discovery.js +74 -72
- package/src/integrations/mcp/mcp-tool-registry.js +99 -94
- package/src/integrations/mcp-connector.js +70 -66
- package/src/integrations/platforms.js +50 -49
- package/src/integrations/tool-discovery.js +37 -31
- package/src/llm-providers/anthropic-provider.js +11 -11
- package/src/llm-providers/base-provider.js +16 -18
- package/src/llm-providers/copilot-provider.js +22 -19
- package/src/llm-providers/index.js +26 -25
- package/src/llm-providers/ollama-provider.js +11 -11
- package/src/llm-providers/openai-provider.js +12 -12
- package/src/managers/agent-memory.js +36 -24
- package/src/managers/checkpoint-manager.js +4 -8
- package/src/managers/delta-spec.js +19 -19
- package/src/managers/index.js +13 -4
- package/src/managers/memory-condenser.js +35 -45
- package/src/managers/repo-skill-manager.js +57 -31
- package/src/managers/skill-loader.js +25 -22
- package/src/managers/skill-tools.js +36 -72
- package/src/managers/workflow.js +30 -22
- package/src/monitoring/cost-tracker.js +48 -46
- package/src/monitoring/incident-manager.js +116 -106
- package/src/monitoring/index.js +144 -134
- package/src/monitoring/observability.js +75 -62
- package/src/monitoring/quality-dashboard.js +45 -41
- package/src/monitoring/release-manager.js +63 -53
- package/src/orchestration/agent-skill-binding.js +39 -47
- package/src/orchestration/error-handler.js +65 -107
- package/src/orchestration/guardrails/base-guardrail.js +26 -24
- package/src/orchestration/guardrails/guardrail-rules.js +50 -64
- package/src/orchestration/guardrails/index.js +5 -5
- package/src/orchestration/guardrails/input-guardrail.js +58 -45
- package/src/orchestration/guardrails/output-guardrail.js +104 -81
- package/src/orchestration/guardrails/safety-check.js +79 -79
- package/src/orchestration/index.js +38 -55
- package/src/orchestration/mcp-tool-adapters.js +96 -99
- package/src/orchestration/orchestration-engine.js +21 -21
- package/src/orchestration/pattern-registry.js +60 -45
- package/src/orchestration/patterns/auto.js +34 -47
- package/src/orchestration/patterns/group-chat.js +59 -65
- package/src/orchestration/patterns/handoff.js +67 -65
- package/src/orchestration/patterns/human-in-loop.js +51 -72
- package/src/orchestration/patterns/nested.js +25 -40
- package/src/orchestration/patterns/sequential.js +35 -34
- package/src/orchestration/patterns/swarm.js +63 -56
- package/src/orchestration/patterns/triage.js +150 -109
- package/src/orchestration/reasoning/index.js +9 -9
- package/src/orchestration/reasoning/planning-engine.js +143 -140
- package/src/orchestration/reasoning/reasoning-engine.js +206 -144
- package/src/orchestration/reasoning/self-correction.js +121 -128
- package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
- package/src/orchestration/replanning/alternative-generator.js +37 -42
- package/src/orchestration/replanning/config.js +63 -59
- package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
- package/src/orchestration/replanning/index.js +24 -20
- package/src/orchestration/replanning/plan-evaluator.js +49 -50
- package/src/orchestration/replanning/plan-monitor.js +32 -28
- package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
- package/src/orchestration/replanning/replan-history.js +33 -26
- package/src/orchestration/replanning/replanning-engine.js +106 -108
- package/src/orchestration/skill-executor.js +107 -109
- package/src/orchestration/skill-registry.js +85 -89
- package/src/orchestration/workflow-examples.js +228 -231
- package/src/orchestration/workflow-executor.js +65 -68
- package/src/orchestration/workflow-orchestrator.js +72 -73
- package/src/phase4-integration.js +47 -40
- package/src/phase5-integration.js +89 -30
- package/src/reporters/coverage-report.js +82 -30
- package/src/reporters/hierarchical-reporter.js +498 -0
- package/src/reporters/traceability-matrix-report.js +29 -20
- package/src/resolvers/issue-resolver.js +43 -31
- package/src/steering/advanced-validation.js +133 -124
- package/src/steering/auto-updater.js +60 -73
- package/src/steering/index.js +6 -6
- package/src/steering/quality-metrics.js +41 -35
- package/src/steering/steering-auto-update.js +83 -86
- package/src/steering/steering-validator.js +98 -106
- package/src/steering/template-constraints.js +53 -54
- package/src/templates/agents/claude-code/CLAUDE.md +32 -32
- package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
- package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
- package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
- package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
- package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
- package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
- package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
- package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
- package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
- package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
- package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
- package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
- package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
- package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
- package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
- package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
- package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
- package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
- package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
- package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
- package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
- package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
- package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
- package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
- package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
- package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
- package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
- package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
- package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
- package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
- package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
- package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
- package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
- package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
- package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
- package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
- package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
- package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
- package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
- package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
- package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
- package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
- package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
- package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
- package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
- package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
- package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
- package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
- package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
- package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
- package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
- package/src/templates/agents/codex/AGENTS.md +74 -42
- package/src/templates/agents/cursor/AGENTS.md +74 -42
- package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
- package/src/templates/agents/github-copilot/AGENTS.md +83 -51
- package/src/templates/agents/qwen-code/QWEN.md +74 -42
- package/src/templates/agents/windsurf/AGENTS.md +74 -42
- package/src/templates/architectures/README.md +41 -0
- package/src/templates/architectures/clean-architecture/README.md +113 -0
- package/src/templates/architectures/event-driven/README.md +162 -0
- package/src/templates/architectures/hexagonal/README.md +130 -0
- package/src/templates/index.js +6 -1
- package/src/templates/locale-manager.js +16 -16
- package/src/templates/shared/delta-spec-template.md +20 -13
- package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
- package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
- package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
- package/src/templates/shared/steering/structure.md +95 -0
- package/src/templates/skills/browser-agent.md +21 -16
- package/src/templates/skills/web-gui.md +8 -0
- package/src/templates/template-constraints.js +50 -53
- package/src/validators/advanced-validation.js +30 -36
- package/src/validators/constitutional-validator.js +77 -73
- package/src/validators/critic-system.js +49 -59
- package/src/validators/delta-format.js +59 -55
- package/src/validators/traceability-validator.js +7 -11
|
@@ -9,15 +9,19 @@ Guidelines for creating accessible user interfaces following WCAG 2.1 standards.
|
|
|
9
9
|
## WCAG Principles (POUR)
|
|
10
10
|
|
|
11
11
|
### 1. Perceivable
|
|
12
|
+
|
|
12
13
|
Content can be perceived by all users.
|
|
13
14
|
|
|
14
15
|
### 2. Operable
|
|
16
|
+
|
|
15
17
|
Interface can be operated by all users.
|
|
16
18
|
|
|
17
19
|
### 3. Understandable
|
|
20
|
+
|
|
18
21
|
Content and operation is understandable.
|
|
19
22
|
|
|
20
23
|
### 4. Robust
|
|
24
|
+
|
|
21
25
|
Content works with assistive technologies.
|
|
22
26
|
|
|
23
27
|
---
|
|
@@ -28,17 +32,16 @@ Content works with assistive technologies.
|
|
|
28
32
|
|
|
29
33
|
```html
|
|
30
34
|
<!-- Informative image -->
|
|
31
|
-
<img src="chart.png" alt="Sales increased 25% from January to March"
|
|
35
|
+
<img src="chart.png" alt="Sales increased 25% from January to March" />
|
|
32
36
|
|
|
33
37
|
<!-- Decorative image -->
|
|
34
|
-
<img src="decoration.png" alt="" role="presentation"
|
|
38
|
+
<img src="decoration.png" alt="" role="presentation" />
|
|
35
39
|
|
|
36
40
|
<!-- Complex image -->
|
|
37
41
|
<figure>
|
|
38
|
-
<img src="flowchart.png" alt="User registration process"
|
|
42
|
+
<img src="flowchart.png" alt="User registration process" />
|
|
39
43
|
<figcaption>
|
|
40
|
-
Detailed description: User enters email, confirms via link,
|
|
41
|
-
sets password, completes profile.
|
|
44
|
+
Detailed description: User enters email, confirms via link, sets password, completes profile.
|
|
42
45
|
</figcaption>
|
|
43
46
|
</figure>
|
|
44
47
|
```
|
|
@@ -48,18 +51,13 @@ Content works with assistive technologies.
|
|
|
48
51
|
```html
|
|
49
52
|
<!-- Label association -->
|
|
50
53
|
<label for="email">Email address</label>
|
|
51
|
-
<input type="email" id="email" name="email" required
|
|
52
|
-
aria-describedby="email-hint">
|
|
54
|
+
<input type="email" id="email" name="email" required aria-describedby="email-hint" />
|
|
53
55
|
<span id="email-hint">We'll never share your email.</span>
|
|
54
56
|
|
|
55
57
|
<!-- Error handling -->
|
|
56
58
|
<label for="password">Password</label>
|
|
57
|
-
<input type="password" id="password"
|
|
58
|
-
|
|
59
|
-
aria-describedby="password-error">
|
|
60
|
-
<span id="password-error" role="alert">
|
|
61
|
-
Password must be at least 8 characters.
|
|
62
|
-
</span>
|
|
59
|
+
<input type="password" id="password" aria-invalid="true" aria-describedby="password-error" />
|
|
60
|
+
<span id="password-error" role="alert"> Password must be at least 8 characters. </span>
|
|
63
61
|
```
|
|
64
62
|
|
|
65
63
|
### Buttons
|
|
@@ -74,11 +72,7 @@ Content works with assistive technologies.
|
|
|
74
72
|
</button>
|
|
75
73
|
|
|
76
74
|
<!-- Toggle button -->
|
|
77
|
-
<button type="button"
|
|
78
|
-
aria-pressed="false"
|
|
79
|
-
onclick="toggleDarkMode()">
|
|
80
|
-
Dark Mode
|
|
81
|
-
</button>
|
|
75
|
+
<button type="button" aria-pressed="false" onclick="toggleDarkMode()">Dark Mode</button>
|
|
82
76
|
```
|
|
83
77
|
|
|
84
78
|
### Navigation
|
|
@@ -131,28 +125,25 @@ Content works with assistive technologies.
|
|
|
131
125
|
|
|
132
126
|
```html
|
|
133
127
|
<!-- Natural tab order -->
|
|
134
|
-
<input type="text"
|
|
128
|
+
<input type="text" />
|
|
135
129
|
<button>Submit</button>
|
|
136
130
|
|
|
137
131
|
<!-- Skip decorative elements -->
|
|
138
132
|
<div tabindex="-1">Decorative</div>
|
|
139
133
|
|
|
140
134
|
<!-- Custom focusable element -->
|
|
141
|
-
<div role="button" tabindex="0"
|
|
142
|
-
onkeydown="handleKeyDown(event)">
|
|
143
|
-
Custom Button
|
|
144
|
-
</div>
|
|
135
|
+
<div role="button" tabindex="0" onkeydown="handleKeyDown(event)">Custom Button</div>
|
|
145
136
|
```
|
|
146
137
|
|
|
147
138
|
### Keyboard Shortcuts
|
|
148
139
|
|
|
149
140
|
```javascript
|
|
150
|
-
document.addEventListener('keydown',
|
|
141
|
+
document.addEventListener('keydown', e => {
|
|
151
142
|
// Escape to close modal
|
|
152
143
|
if (e.key === 'Escape' && modalOpen) {
|
|
153
144
|
closeModal();
|
|
154
145
|
}
|
|
155
|
-
|
|
146
|
+
|
|
156
147
|
// Arrow keys for navigation
|
|
157
148
|
if (e.key === 'ArrowDown') {
|
|
158
149
|
focusNextItem();
|
|
@@ -166,19 +157,21 @@ document.addEventListener('keydown', (e) => {
|
|
|
166
157
|
|
|
167
158
|
### Contrast Requirements
|
|
168
159
|
|
|
169
|
-
| Element
|
|
170
|
-
|
|
171
|
-
| Normal text
|
|
172
|
-
| Large text (18px+) | 3:1
|
|
173
|
-
| UI components
|
|
174
|
-
| Enhanced
|
|
160
|
+
| Element | Ratio | Level |
|
|
161
|
+
| ------------------ | ----- | ----- |
|
|
162
|
+
| Normal text | 4.5:1 | AA |
|
|
163
|
+
| Large text (18px+) | 3:1 | AA |
|
|
164
|
+
| UI components | 3:1 | AA |
|
|
165
|
+
| Enhanced | 7:1 | AAA |
|
|
175
166
|
|
|
176
167
|
### Color Independence
|
|
177
168
|
|
|
178
169
|
```css
|
|
179
170
|
/* Don't rely on color alone */
|
|
180
171
|
/* Bad */
|
|
181
|
-
.error {
|
|
172
|
+
.error {
|
|
173
|
+
color: red;
|
|
174
|
+
}
|
|
182
175
|
|
|
183
176
|
/* Good */
|
|
184
177
|
.error {
|
|
@@ -186,7 +179,7 @@ document.addEventListener('keydown', (e) => {
|
|
|
186
179
|
border: 2px solid red;
|
|
187
180
|
}
|
|
188
181
|
.error::before {
|
|
189
|
-
content:
|
|
182
|
+
content: '⚠ ';
|
|
190
183
|
}
|
|
191
184
|
```
|
|
192
185
|
|
|
@@ -197,10 +190,7 @@ document.addEventListener('keydown', (e) => {
|
|
|
197
190
|
### Modal Dialog
|
|
198
191
|
|
|
199
192
|
```html
|
|
200
|
-
<div role="dialog"
|
|
201
|
-
aria-modal="true"
|
|
202
|
-
aria-labelledby="dialog-title"
|
|
203
|
-
aria-describedby="dialog-desc">
|
|
193
|
+
<div role="dialog" aria-modal="true" aria-labelledby="dialog-title" aria-describedby="dialog-desc">
|
|
204
194
|
<h2 id="dialog-title">Confirm Action</h2>
|
|
205
195
|
<p id="dialog-desc">Are you sure you want to delete?</p>
|
|
206
196
|
<button onclick="confirm()">Yes, delete</button>
|
|
@@ -212,50 +202,26 @@ document.addEventListener('keydown', (e) => {
|
|
|
212
202
|
|
|
213
203
|
```html
|
|
214
204
|
<div role="tablist" aria-label="Settings">
|
|
215
|
-
<button role="tab"
|
|
216
|
-
|
|
217
|
-
aria-selected="true"
|
|
218
|
-
aria-controls="panel-1">
|
|
219
|
-
General
|
|
220
|
-
</button>
|
|
221
|
-
<button role="tab"
|
|
222
|
-
id="tab-2"
|
|
223
|
-
aria-selected="false"
|
|
224
|
-
aria-controls="panel-2"
|
|
225
|
-
tabindex="-1">
|
|
205
|
+
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1">General</button>
|
|
206
|
+
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">
|
|
226
207
|
Privacy
|
|
227
208
|
</button>
|
|
228
209
|
</div>
|
|
229
|
-
<div role="tabpanel"
|
|
230
|
-
|
|
231
|
-
aria-labelledby="tab-1">
|
|
232
|
-
General settings content
|
|
233
|
-
</div>
|
|
234
|
-
<div role="tabpanel"
|
|
235
|
-
id="panel-2"
|
|
236
|
-
aria-labelledby="tab-2"
|
|
237
|
-
hidden>
|
|
238
|
-
Privacy settings content
|
|
239
|
-
</div>
|
|
210
|
+
<div role="tabpanel" id="panel-1" aria-labelledby="tab-1">General settings content</div>
|
|
211
|
+
<div role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>Privacy settings content</div>
|
|
240
212
|
```
|
|
241
213
|
|
|
242
214
|
### Live Regions
|
|
243
215
|
|
|
244
216
|
```html
|
|
245
217
|
<!-- Status messages -->
|
|
246
|
-
<div role="status" aria-live="polite">
|
|
247
|
-
Form submitted successfully!
|
|
248
|
-
</div>
|
|
218
|
+
<div role="status" aria-live="polite">Form submitted successfully!</div>
|
|
249
219
|
|
|
250
220
|
<!-- Important alerts -->
|
|
251
|
-
<div role="alert" aria-live="assertive">
|
|
252
|
-
Session expiring in 2 minutes!
|
|
253
|
-
</div>
|
|
221
|
+
<div role="alert" aria-live="assertive">Session expiring in 2 minutes!</div>
|
|
254
222
|
|
|
255
223
|
<!-- Loading indicator -->
|
|
256
|
-
<div role="status" aria-busy="true" aria-live="polite">
|
|
257
|
-
Loading results...
|
|
258
|
-
</div>
|
|
224
|
+
<div role="status" aria-busy="true" aria-live="polite">Loading results...</div>
|
|
259
225
|
```
|
|
260
226
|
|
|
261
227
|
---
|
|
@@ -263,11 +229,13 @@ document.addEventListener('keydown', (e) => {
|
|
|
263
229
|
## Testing Checklist
|
|
264
230
|
|
|
265
231
|
### Automated
|
|
232
|
+
|
|
266
233
|
- [ ] Run axe-core or Lighthouse
|
|
267
234
|
- [ ] Validate HTML
|
|
268
235
|
- [ ] Check color contrast
|
|
269
236
|
|
|
270
237
|
### Manual
|
|
238
|
+
|
|
271
239
|
- [ ] Navigate with keyboard only
|
|
272
240
|
- [ ] Test with screen reader
|
|
273
241
|
- [ ] Zoom to 200%
|
|
@@ -275,6 +243,7 @@ document.addEventListener('keydown', (e) => {
|
|
|
275
243
|
- [ ] Check focus order
|
|
276
244
|
|
|
277
245
|
### Screen Readers
|
|
246
|
+
|
|
278
247
|
- [ ] VoiceOver (macOS/iOS)
|
|
279
248
|
- [ ] NVDA (Windows)
|
|
280
249
|
- [ ] JAWS (Windows)
|
|
@@ -284,13 +253,13 @@ document.addEventListener('keydown', (e) => {
|
|
|
284
253
|
|
|
285
254
|
## Common Issues
|
|
286
255
|
|
|
287
|
-
| Issue
|
|
288
|
-
|
|
289
|
-
| Missing alt text
|
|
290
|
-
| No focus indicator | Keyboard users get lost
|
|
291
|
-
| Color only meaning | Colorblind miss info
|
|
292
|
-
| No labels
|
|
293
|
-
| Mouse-only UI
|
|
256
|
+
| Issue | Impact | Fix |
|
|
257
|
+
| ------------------ | ------------------------------------ | -------------------- |
|
|
258
|
+
| Missing alt text | Blind users can't understand images | Add descriptive alt |
|
|
259
|
+
| No focus indicator | Keyboard users get lost | Add visible outline |
|
|
260
|
+
| Color only meaning | Colorblind miss info | Add text/icons |
|
|
261
|
+
| No labels | Screen readers can't identify fields | Associate labels |
|
|
262
|
+
| Mouse-only UI | Keyboard users blocked | Add keyboard support |
|
|
294
263
|
|
|
295
264
|
---
|
|
296
265
|
|
|
@@ -302,15 +271,20 @@ document.addEventListener('keydown', (e) => {
|
|
|
302
271
|
[Company] is committed to ensuring accessibility for all users.
|
|
303
272
|
|
|
304
273
|
## Standards
|
|
274
|
+
|
|
305
275
|
We aim to conform to WCAG 2.1 Level AA standards.
|
|
306
276
|
|
|
307
277
|
## Current Status
|
|
278
|
+
|
|
308
279
|
We are continuously improving accessibility. Known issues:
|
|
280
|
+
|
|
309
281
|
- [Issue 1]: [Expected fix date]
|
|
310
282
|
- [Issue 2]: [Expected fix date]
|
|
311
283
|
|
|
312
284
|
## Feedback
|
|
285
|
+
|
|
313
286
|
If you encounter accessibility barriers:
|
|
287
|
+
|
|
314
288
|
- Email: accessibility@example.com
|
|
315
289
|
- Phone: 1-800-XXX-XXXX
|
|
316
290
|
|
|
@@ -14,13 +14,13 @@ Guidelines for creating and maintaining design system components.
|
|
|
14
14
|
Atoms → Molecules → Organisms → Templates → Pages
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
| Level
|
|
18
|
-
|
|
19
|
-
| Atoms
|
|
20
|
-
| Molecules | Simple groups
|
|
21
|
-
| Organisms | Complex sections
|
|
22
|
-
| Templates | Page layouts
|
|
23
|
-
| Pages
|
|
17
|
+
| Level | Description | Examples |
|
|
18
|
+
| --------- | ------------------ | -------------------- |
|
|
19
|
+
| Atoms | Basic elements | Button, Input, Label |
|
|
20
|
+
| Molecules | Simple groups | Form field, Card |
|
|
21
|
+
| Organisms | Complex sections | Header, Form, Table |
|
|
22
|
+
| Templates | Page layouts | Dashboard layout |
|
|
23
|
+
| Pages | Specific instances | Home page |
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
@@ -33,19 +33,19 @@ interface ButtonProps {
|
|
|
33
33
|
// Variants
|
|
34
34
|
variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
35
35
|
size?: 'sm' | 'md' | 'lg';
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
// States
|
|
38
38
|
disabled?: boolean;
|
|
39
39
|
loading?: boolean;
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
// Content
|
|
42
42
|
children: React.ReactNode;
|
|
43
43
|
leftIcon?: React.ReactNode;
|
|
44
44
|
rightIcon?: React.ReactNode;
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
// Actions
|
|
47
47
|
onClick?: () => void;
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
// Accessibility
|
|
50
50
|
'aria-label'?: string;
|
|
51
51
|
}
|
|
@@ -55,7 +55,7 @@ interface ButtonProps {
|
|
|
55
55
|
|
|
56
56
|
```tsx
|
|
57
57
|
// Bad: Props explosion
|
|
58
|
-
<Card
|
|
58
|
+
<Card
|
|
59
59
|
title="Title"
|
|
60
60
|
subtitle="Subtitle"
|
|
61
61
|
image="/img.jpg"
|
|
@@ -92,18 +92,18 @@ interface ButtonProps {
|
|
|
92
92
|
--color-primary-500: #3b82f6;
|
|
93
93
|
--color-primary-600: #2563eb;
|
|
94
94
|
--color-primary-900: #1e3a8a;
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
/* Semantic colors */
|
|
97
97
|
--color-success: #22c55e;
|
|
98
98
|
--color-warning: #f59e0b;
|
|
99
99
|
--color-error: #ef4444;
|
|
100
100
|
--color-info: #3b82f6;
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
/* Text colors */
|
|
103
103
|
--color-text-primary: #111827;
|
|
104
104
|
--color-text-secondary: #6b7280;
|
|
105
105
|
--color-text-disabled: #9ca3af;
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
/* Background colors */
|
|
108
108
|
--color-bg-primary: #ffffff;
|
|
109
109
|
--color-bg-secondary: #f9fafb;
|
|
@@ -116,14 +116,14 @@ interface ButtonProps {
|
|
|
116
116
|
```css
|
|
117
117
|
:root {
|
|
118
118
|
--space-0: 0;
|
|
119
|
-
--space-1: 0.25rem;
|
|
120
|
-
--space-2: 0.5rem;
|
|
121
|
-
--space-3: 0.75rem;
|
|
122
|
-
--space-4: 1rem;
|
|
123
|
-
--space-6: 1.5rem;
|
|
124
|
-
--space-8: 2rem;
|
|
125
|
-
--space-12: 3rem;
|
|
126
|
-
--space-16: 4rem;
|
|
119
|
+
--space-1: 0.25rem; /* 4px */
|
|
120
|
+
--space-2: 0.5rem; /* 8px */
|
|
121
|
+
--space-3: 0.75rem; /* 12px */
|
|
122
|
+
--space-4: 1rem; /* 16px */
|
|
123
|
+
--space-6: 1.5rem; /* 24px */
|
|
124
|
+
--space-8: 2rem; /* 32px */
|
|
125
|
+
--space-12: 3rem; /* 48px */
|
|
126
|
+
--space-16: 4rem; /* 64px */
|
|
127
127
|
}
|
|
128
128
|
```
|
|
129
129
|
|
|
@@ -134,22 +134,22 @@ interface ButtonProps {
|
|
|
134
134
|
/* Font families */
|
|
135
135
|
--font-sans: 'Inter', system-ui, sans-serif;
|
|
136
136
|
--font-mono: 'Fira Code', monospace;
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
/* Font sizes */
|
|
139
|
-
--text-xs: 0.75rem;
|
|
140
|
-
--text-sm: 0.875rem;
|
|
141
|
-
--text-base: 1rem;
|
|
142
|
-
--text-lg: 1.125rem;
|
|
143
|
-
--text-xl: 1.25rem;
|
|
144
|
-
--text-2xl: 1.5rem;
|
|
145
|
-
--text-3xl: 1.875rem;
|
|
146
|
-
|
|
139
|
+
--text-xs: 0.75rem; /* 12px */
|
|
140
|
+
--text-sm: 0.875rem; /* 14px */
|
|
141
|
+
--text-base: 1rem; /* 16px */
|
|
142
|
+
--text-lg: 1.125rem; /* 18px */
|
|
143
|
+
--text-xl: 1.25rem; /* 20px */
|
|
144
|
+
--text-2xl: 1.5rem; /* 24px */
|
|
145
|
+
--text-3xl: 1.875rem; /* 30px */
|
|
146
|
+
|
|
147
147
|
/* Font weights */
|
|
148
148
|
--font-normal: 400;
|
|
149
149
|
--font-medium: 500;
|
|
150
150
|
--font-semibold: 600;
|
|
151
151
|
--font-bold: 700;
|
|
152
|
-
|
|
152
|
+
|
|
153
153
|
/* Line heights */
|
|
154
154
|
--leading-tight: 1.25;
|
|
155
155
|
--leading-normal: 1.5;
|
|
@@ -163,7 +163,7 @@ interface ButtonProps {
|
|
|
163
163
|
|
|
164
164
|
### Component Card Template
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
````markdown
|
|
167
167
|
# Button
|
|
168
168
|
|
|
169
169
|
Buttons are used to trigger actions or navigation.
|
|
@@ -175,17 +175,18 @@ import { Button } from '@/components';
|
|
|
175
175
|
|
|
176
176
|
<Button variant="primary" size="md">
|
|
177
177
|
Click me
|
|
178
|
-
</Button
|
|
178
|
+
</Button>;
|
|
179
179
|
```
|
|
180
|
+
````
|
|
180
181
|
|
|
181
182
|
## Props
|
|
182
183
|
|
|
183
|
-
| Prop
|
|
184
|
-
|
|
185
|
-
| variant
|
|
186
|
-
| size
|
|
187
|
-
| disabled | boolean
|
|
188
|
-
| loading
|
|
184
|
+
| Prop | Type | Default | Description |
|
|
185
|
+
| -------- | ----------------------------------- | --------- | -------------- |
|
|
186
|
+
| variant | 'primary' \| 'secondary' \| 'ghost' | 'primary' | Visual style |
|
|
187
|
+
| size | 'sm' \| 'md' \| 'lg' | 'md' | Button size |
|
|
188
|
+
| disabled | boolean | false | Disabled state |
|
|
189
|
+
| loading | boolean | false | Loading state |
|
|
189
190
|
|
|
190
191
|
## Variants
|
|
191
192
|
|
|
@@ -217,7 +218,8 @@ import { Button } from '@/components';
|
|
|
217
218
|
✅ Use ghost for less important actions
|
|
218
219
|
❌ Don't use more than one primary per view
|
|
219
220
|
❌ Don't disable without explanation
|
|
220
|
-
|
|
221
|
+
|
|
222
|
+
````
|
|
221
223
|
|
|
222
224
|
---
|
|
223
225
|
|
|
@@ -229,48 +231,46 @@ import { Button } from '@/components';
|
|
|
229
231
|
.button {
|
|
230
232
|
/* Default */
|
|
231
233
|
background: var(--color-primary-500);
|
|
232
|
-
|
|
234
|
+
|
|
233
235
|
/* Hover */
|
|
234
236
|
&:hover:not(:disabled) {
|
|
235
237
|
background: var(--color-primary-600);
|
|
236
238
|
}
|
|
237
|
-
|
|
239
|
+
|
|
238
240
|
/* Active */
|
|
239
241
|
&:active:not(:disabled) {
|
|
240
242
|
background: var(--color-primary-700);
|
|
241
243
|
transform: scale(0.98);
|
|
242
244
|
}
|
|
243
|
-
|
|
245
|
+
|
|
244
246
|
/* Focus */
|
|
245
247
|
&:focus-visible {
|
|
246
248
|
outline: 2px solid var(--color-primary-500);
|
|
247
249
|
outline-offset: 2px;
|
|
248
250
|
}
|
|
249
|
-
|
|
251
|
+
|
|
250
252
|
/* Disabled */
|
|
251
253
|
&:disabled {
|
|
252
254
|
opacity: 0.5;
|
|
253
255
|
cursor: not-allowed;
|
|
254
256
|
}
|
|
255
257
|
}
|
|
256
|
-
|
|
258
|
+
````
|
|
257
259
|
|
|
258
260
|
### Loading State
|
|
259
261
|
|
|
260
262
|
```tsx
|
|
261
263
|
function Button({ loading, children, ...props }) {
|
|
262
264
|
return (
|
|
263
|
-
<button
|
|
264
|
-
disabled={loading}
|
|
265
|
-
aria-busy={loading}
|
|
266
|
-
{...props}
|
|
267
|
-
>
|
|
265
|
+
<button disabled={loading} aria-busy={loading} {...props}>
|
|
268
266
|
{loading ? (
|
|
269
267
|
<>
|
|
270
268
|
<Spinner aria-hidden="true" />
|
|
271
269
|
<span className="sr-only">Loading...</span>
|
|
272
270
|
</>
|
|
273
|
-
) :
|
|
271
|
+
) : (
|
|
272
|
+
children
|
|
273
|
+
)}
|
|
274
274
|
</button>
|
|
275
275
|
);
|
|
276
276
|
}
|
|
@@ -290,24 +290,32 @@ function Button({ loading, children, ...props }) {
|
|
|
290
290
|
--breakpoint-xl: 1280px;
|
|
291
291
|
}
|
|
292
292
|
|
|
293
|
-
@media (min-width: 640px) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
@media (min-width:
|
|
293
|
+
@media (min-width: 640px) {
|
|
294
|
+
/* sm */
|
|
295
|
+
}
|
|
296
|
+
@media (min-width: 768px) {
|
|
297
|
+
/* md */
|
|
298
|
+
}
|
|
299
|
+
@media (min-width: 1024px) {
|
|
300
|
+
/* lg */
|
|
301
|
+
}
|
|
302
|
+
@media (min-width: 1280px) {
|
|
303
|
+
/* xl */
|
|
304
|
+
}
|
|
297
305
|
```
|
|
298
306
|
|
|
299
307
|
### Responsive Components
|
|
300
308
|
|
|
301
309
|
```tsx
|
|
302
310
|
// Responsive button sizing
|
|
303
|
-
<Button
|
|
311
|
+
<Button
|
|
304
312
|
size={{ base: 'sm', md: 'md', lg: 'lg' }}
|
|
305
313
|
>
|
|
306
314
|
Responsive Button
|
|
307
315
|
</Button>
|
|
308
316
|
|
|
309
317
|
// Stack to row on larger screens
|
|
310
|
-
<Stack
|
|
318
|
+
<Stack
|
|
311
319
|
direction={{ base: 'column', md: 'row' }}
|
|
312
320
|
gap={4}
|
|
313
321
|
>
|
|
@@ -321,24 +329,28 @@ function Button({ loading, children, ...props }) {
|
|
|
321
329
|
## Component Checklist
|
|
322
330
|
|
|
323
331
|
### Design
|
|
332
|
+
|
|
324
333
|
- [ ] Follows design tokens
|
|
325
334
|
- [ ] Has all necessary variants
|
|
326
335
|
- [ ] Responsive behavior defined
|
|
327
336
|
- [ ] Dark mode support
|
|
328
337
|
|
|
329
338
|
### Development
|
|
339
|
+
|
|
330
340
|
- [ ] TypeScript types defined
|
|
331
341
|
- [ ] Props documented
|
|
332
342
|
- [ ] Unit tests written
|
|
333
343
|
- [ ] Storybook stories created
|
|
334
344
|
|
|
335
345
|
### Accessibility
|
|
346
|
+
|
|
336
347
|
- [ ] Keyboard navigation
|
|
337
348
|
- [ ] Screen reader tested
|
|
338
349
|
- [ ] Focus management
|
|
339
350
|
- [ ] Color contrast
|
|
340
351
|
|
|
341
352
|
### Documentation
|
|
353
|
+
|
|
342
354
|
- [ ] Usage examples
|
|
343
355
|
- [ ] Props table
|
|
344
356
|
- [ ] Do's and don'ts
|