@qijenchen/design-system 0.1.0-beta.10 → 0.1.0-beta.13
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/CLAUDE.md +201 -0
- package/README.md +7 -15
- package/cli-init.mjs +90 -0
- package/ds-canonical/commands/README.md +26 -0
- package/ds-canonical/commands/gov-status.md +79 -0
- package/ds-canonical/hooks/README.md +145 -0
- package/ds-canonical/hooks/_log-fire.sh +44 -0
- package/ds-canonical/hooks/block_prototype_imports.py +111 -0
- package/ds-canonical/hooks/check_app_shell_primary_header_consistency.sh +68 -0
- package/ds-canonical/hooks/check_audit_post_report_validator.sh +88 -0
- package/ds-canonical/hooks/check_audit_sample_escape.sh +73 -0
- package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
- package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
- package/ds-canonical/hooks/check_chrome_header_handcraft.sh +70 -0
- package/ds-canonical/hooks/check_codex_brief_invariants.sh +83 -0
- package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
- package/ds-canonical/hooks/check_datatable_invariants.sh +117 -0
- package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
- package/ds-canonical/hooks/check_field_controls_contracts.sh +110 -0
- package/ds-canonical/hooks/check_field_family_invariants.sh +205 -0
- package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
- package/ds-canonical/hooks/check_header_with_tabs_border.sh +87 -0
- package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
- package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
- package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
- package/ds-canonical/hooks/check_pattern_invariants.sh +194 -0
- package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
- package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
- package/ds-canonical/hooks/check_propose_plain_chinese.sh +74 -0
- package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
- package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
- package/ds-canonical/hooks/check_solo_workflow.sh +258 -0
- package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
- package/ds-canonical/hooks/check_story_invariants.sh +612 -0
- package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +105 -0
- package/ds-canonical/hooks/check_tab_lg_chrome_header_equal.sh +66 -0
- package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
- package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
- package/ds-canonical/hooks/inject_pending_self_audit.sh +204 -0
- package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
- package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
- package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
- package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
- package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
- package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
- package/ds-canonical/hooks/lib/_overlay_handcraft.sh +141 -0
- package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
- package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
- package/ds-canonical/hooks/lib/_token_hygiene.sh +95 -0
- package/ds-canonical/hooks/log_governance_fires.sh +50 -0
- package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
- package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
- package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
- package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
- package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
- package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
- package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
- package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
- package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
- package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
- package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
- package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
- package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
- package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
- package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
- package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
- package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
- package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
- package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
- package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
- package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
- package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
- package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
- package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
- package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
- package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
- package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
- package/ds-canonical/hooks/session_start_governance_check.sh +263 -0
- package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
- package/ds-canonical/hooks/stop_self_audit.sh +450 -0
- package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
- package/ds-canonical/hooks/tests/run-all.sh +76 -0
- package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
- package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +140 -0
- package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +115 -0
- package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
- package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
- package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
- package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +123 -0
- package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
- package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
- package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
- package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
- package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
- package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
- package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +194 -0
- package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
- package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
- package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
- package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
- package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
- package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
- package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
- package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
- package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
- package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
- package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
- package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
- package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +126 -0
- package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
- package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
- package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
- package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
- package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
- package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
- package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
- package/ds-canonical/hooks/tests/test_check_story_invariants.sh +209 -0
- package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
- package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
- package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
- package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +138 -0
- package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
- package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
- package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
- package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
- package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
- package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
- package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
- package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +143 -0
- package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
- package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
- package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
- package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
- package/ds-canonical/hooks/tests/test_stop_self_audit.sh +76 -0
- package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
- package/ds-canonical/references/README.md +43 -0
- package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
- package/ds-canonical/references/build-ui-canonicals.md +69 -0
- package/ds-canonical/references/cva-patterns.md +41 -0
- package/ds-canonical/references/drag-canonical.md +331 -0
- package/ds-canonical/references/item-anatomy-recipe.md +225 -0
- package/ds-canonical/references/naming-conventions.md +56 -0
- package/ds-canonical/references/principle-dim-map.json +515 -0
- package/ds-canonical/references/props-naming.md +45 -0
- package/ds-canonical/references/spec-rules.md +58 -0
- package/ds-canonical/references/ssot-consultation.md +63 -0
- package/ds-canonical/references/ssot-index.md +40 -0
- package/ds-canonical/references/story-baseline-registry.json +79 -0
- package/ds-canonical/references/structural-token-retention.md +42 -0
- package/ds-canonical/references/tailwind-gotchas.md +87 -0
- package/ds-canonical/references/ui-dev-rules.md +60 -0
- package/ds-canonical/rules/README.md +34 -0
- package/ds-canonical/rules/meta-patterns.md +87 -0
- package/ds-canonical/rules/self-verify.md +53 -0
- package/ds-canonical/rules/spec-rules.md +25 -0
- package/ds-canonical/rules/story-rules.md +56 -0
- package/ds-canonical/rules/ui-development.md +87 -0
- package/ds-canonical/skills/README.md +88 -0
- package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
- package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
- package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
- package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
- package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
- package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
- package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
- package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
- package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
- package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +247 -0
- package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
- package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +165 -0
- package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +91 -0
- package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
- package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
- package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
- package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
- package/ds-canonical/skills/design-system-audit/SKILL.md +343 -0
- package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1260 -0
- package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
- package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
- package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +364 -0
- package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
- package/ds-canonical/skills/design-system-audit/references/spec-template.md +66 -0
- package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
- package/ds-canonical/skills/governance-health/SKILL.md +146 -0
- package/ds-canonical/skills/knowledge-prune/SKILL.md +303 -0
- package/ds-canonical/skills/new-component/SKILL.md +170 -0
- package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
- package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
- package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
- package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
- package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
- package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
- package/ds-canonical/skills/propose-options/SKILL.md +177 -0
- package/ds-canonical/skills/prototype/SKILL.md +244 -0
- package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
- package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
- package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
- package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
- package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
- package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
- package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
- package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
- package/ds-canonical/skills/story-writing/SKILL.md +122 -0
- package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
- package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
- package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
- package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
- package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
- package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
- package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
- package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
- package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
- package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
- package/package.json +9 -5
- package/src/components/Accordion/accordion.spec.md +114 -0
- package/src/components/Alert/alert.spec.md +197 -0
- package/src/components/AppShell/app-shell.spec.md +331 -0
- package/src/components/AspectRatio/aspect-ratio.spec.md +134 -0
- package/src/components/Avatar/avatar.spec.md +329 -0
- package/src/components/Badge/badge.spec.md +380 -0
- package/src/components/Breadcrumb/breadcrumb.spec.md +257 -0
- package/src/components/BulkActionBar/bulk-action-bar.spec.md +210 -0
- package/src/components/Button/button.spec.md +460 -0
- package/src/components/Calendar/calendar.spec.md +242 -0
- package/src/components/Carousel/carousel.spec.md +253 -0
- package/src/components/Chart/chart.spec.md +155 -0
- package/src/components/Checkbox/checkbox.spec.md +344 -0
- package/src/components/Chip/chip.spec.md +237 -0
- package/src/components/CircularProgress/circular-progress.spec.md +268 -0
- package/src/components/Coachmark/coachmark.spec.md +230 -0
- package/src/components/Combobox/combobox.spec.md +180 -0
- package/src/components/Command/command.spec.md +171 -0
- package/src/components/DataTable/data-table.spec.md +525 -0
- package/src/components/DateGrid/date-grid.spec.md +215 -0
- package/src/components/DatePicker/date-picker.spec.md +334 -0
- package/src/components/DescriptionList/description-list.spec.md +214 -0
- package/src/components/Dialog/dialog.spec.md +202 -0
- package/src/components/DropdownMenu/dropdown-menu.spec.md +250 -0
- package/src/components/Empty/empty.spec.md +214 -0
- package/src/components/Field/field-controls.spec.md +338 -0
- package/src/components/Field/field.spec.md +438 -0
- package/src/components/Field/form-validation.spec.md +152 -0
- package/src/components/FieldControlGroup/field-control-group.spec.md +176 -0
- package/src/components/FileItem/file-item.spec.md +467 -0
- package/src/components/FileUpload/file-upload.spec.md +123 -0
- package/src/components/FileViewer/file-viewer.spec.md +373 -0
- package/src/components/HoverCard/hover-card.spec.md +157 -0
- package/src/components/Input/input.spec.md +193 -0
- package/src/components/LinkInput/link-input.spec.md +130 -0
- package/src/components/Menu/menu-item.spec.md +290 -0
- package/src/components/NameCard/name-card.spec.md +171 -0
- package/src/components/Notice/notice.spec.md +149 -0
- package/src/components/NumberInput/number-input.spec.md +126 -0
- package/src/components/OverflowIndicator/overflow-indicator.spec.md +120 -0
- package/src/components/PeoplePicker/people-picker.spec.md +263 -0
- package/src/components/Popover/popover.spec.md +198 -0
- package/src/components/ProgressBar/progress-bar.spec.md +232 -0
- package/src/components/RadioGroup/radio-group.spec.md +141 -0
- package/src/components/Rating/rating.spec.md +208 -0
- package/src/components/ScrollArea/scroll-area.spec.md +145 -0
- package/src/components/SegmentedControl/segmented-control.spec.md +295 -0
- package/src/components/Select/select.spec.md +299 -0
- package/src/components/SelectMenu/select-menu.spec.md +220 -0
- package/src/components/SelectionControl/selection-item.spec.md +128 -0
- package/src/components/Separator/separator.spec.md +109 -0
- package/src/components/Sheet/sheet.spec.md +148 -0
- package/src/components/Sidebar/sidebar.spec.md +713 -0
- package/src/components/Skeleton/skeleton.spec.md +104 -0
- package/src/components/Slider/slider.spec.md +353 -0
- package/src/components/Steps/steps.spec.md +465 -0
- package/src/components/Switch/switch.spec.md +215 -0
- package/src/components/Tabs/tabs.spec.md +314 -0
- package/src/components/Tag/tag.spec.md +282 -0
- package/src/components/Textarea/textarea.spec.md +151 -0
- package/src/components/TimePicker/time-picker.spec.md +279 -0
- package/src/components/Toast/toast.spec.md +177 -0
- package/src/components/Tooltip/tooltip.spec.md +139 -0
- package/src/components/TreeView/tree-view.spec.md +374 -0
- package/src/patterns/action-bar/action-bar.spec.md +458 -0
- package/src/patterns/element-anatomy/element-anatomy.spec.md +215 -0
- package/src/patterns/element-anatomy/inline-action.spec.md +315 -0
- package/src/patterns/element-anatomy/item-anatomy.spec.md +1042 -0
- package/src/patterns/header-canonical/header-canonical.spec.md +285 -0
- package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +191 -0
- package/src/patterns/overlay-surface/overlay-surface.spec.md +428 -0
- package/src/patterns/resize-handle/resize-handle.spec.md +109 -0
- package/src/tokens/color/color.spec.md +804 -0
- package/src/tokens/density/density.spec.md +127 -0
- package/src/tokens/elevation/elevation.spec.md +81 -0
- package/src/tokens/layoutSpace/layoutSpace.spec.md +314 -0
- package/src/tokens/motion/motion.spec.md +97 -0
- package/src/tokens/opacity/opacity.spec.md +78 -0
- package/src/tokens/orphan-tokens.spec.md +117 -0
- package/src/tokens/radius/radius.spec.md +123 -0
- package/src/tokens/typography/typography.spec.md +202 -0
- package/src/tokens/uiSize/uiSize.spec.md +438 -0
- package/src/styles/preset.css +0 -31
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Flow Diagram — Mermaid UI Flow 指引
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 為什麼用 Mermaid
|
|
6
|
+
|
|
7
|
+
- **Text-based**:可 git diff / review / version control
|
|
8
|
+
- **Storybook 支援**:`mdx` 可直接 render;純 `tsx` story 用 `<pre>` 包 mermaid source + 指引
|
|
9
|
+
- **世界級工具支援**:GitHub / Notion / GitLab / Confluence 都 render
|
|
10
|
+
- **Export**:可 export PNG / SVG / PDF 交付給不進 Storybook 的 stakeholder
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 基本語法
|
|
15
|
+
|
|
16
|
+
### flowchart(最常用)
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
Start([使用者進入 checkout]) --> Cart[Cart Review]
|
|
21
|
+
Cart -->|修改| Edit[Edit Item Dialog]
|
|
22
|
+
Edit --> Cart
|
|
23
|
+
Cart -->|確認| Pay[Payment Step]
|
|
24
|
+
Pay -->|信用卡| Card[Card Form]
|
|
25
|
+
Pay -->|轉帳| Bank[Bank Info]
|
|
26
|
+
Card --> Confirm[Confirm Dialog]
|
|
27
|
+
Bank --> Confirm
|
|
28
|
+
Confirm -->|下單| Success([訂單成立])
|
|
29
|
+
Confirm -->|取消| Cart
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Nodes:
|
|
33
|
+
- `[Text]` = rectangle(主 screen / modal)
|
|
34
|
+
- `([Text])` = stadium(流程起點 / 終點)
|
|
35
|
+
- `{Text}` = rhombus(決策點)
|
|
36
|
+
- `((Text))` = circle(特殊節點,如 async operation)
|
|
37
|
+
|
|
38
|
+
Edges:
|
|
39
|
+
- `-->` arrow
|
|
40
|
+
- `-->|label|` arrow with label(e.g., 條件)
|
|
41
|
+
- `-.->` dashed(非主路徑 / optional)
|
|
42
|
+
- `==>` thick(強調 / primary 路徑)
|
|
43
|
+
|
|
44
|
+
### sequenceDiagram(互動時序)
|
|
45
|
+
|
|
46
|
+
```mermaid
|
|
47
|
+
sequenceDiagram
|
|
48
|
+
User->>UI: 點「套用」
|
|
49
|
+
UI->>API: POST /discount
|
|
50
|
+
API-->>UI: 200 + discount data
|
|
51
|
+
UI->>UI: 更新 state
|
|
52
|
+
UI-->>User: 顯示「已套用」
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
適合:非同步互動 / API 時序 / 多 actor 流程。
|
|
56
|
+
|
|
57
|
+
### stateDiagram(狀態機)
|
|
58
|
+
|
|
59
|
+
```mermaid
|
|
60
|
+
stateDiagram-v2
|
|
61
|
+
[*] --> Idle
|
|
62
|
+
Idle --> Loading: click apply
|
|
63
|
+
Loading --> Applied: 200
|
|
64
|
+
Loading --> Error: 4xx/5xx
|
|
65
|
+
Applied --> Idle: click clear
|
|
66
|
+
Error --> Idle: dismiss
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
適合:元件 / feature 的狀態機(idle / loading / success / error)。
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 世界級 reference
|
|
74
|
+
|
|
75
|
+
對標世界級設計 handoff 的 flow 品質:
|
|
76
|
+
|
|
77
|
+
- **Shopify Polaris Pattern pages**: 每 pattern 有 `flow` section 用 SVG,我們用 Mermaid
|
|
78
|
+
- **Material Design Guidelines**: 流程圖 + 截圖並列
|
|
79
|
+
- **Stripe Documentation**: Payment Flow 用 Mermaid + inline code
|
|
80
|
+
- **Figma Design Process blog posts**: Journey map + flow 混合
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 原則
|
|
85
|
+
|
|
86
|
+
### 1. 一張圖涵蓋一個 feature,不超過 20 個 nodes
|
|
87
|
+
|
|
88
|
+
> 20+ nodes → 拆成多個 sub-flow diagram。
|
|
89
|
+
|
|
90
|
+
### 2. 標示 **error path**(非 happy path)
|
|
91
|
+
|
|
92
|
+
> 只畫 happy path = handoff 失真。user 也要知道錯誤 / 邊界 case 流向何處。
|
|
93
|
+
|
|
94
|
+
### 3. 決策點標清楚
|
|
95
|
+
|
|
96
|
+
> 用 `-->|label|` 寫條件,避免邊無敘述。
|
|
97
|
+
|
|
98
|
+
### 4. Start / End 用 stadium node
|
|
99
|
+
|
|
100
|
+
> `([Start])` / `([End])` 讓讀者知道邊界。
|
|
101
|
+
|
|
102
|
+
### 5. 搭配 spec sheet 引用
|
|
103
|
+
|
|
104
|
+
> Node text 應對應 spec sheet 的 screen / modal 名稱,讀者一眼看出對應。
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 範本 — Checkout 完整 flow
|
|
109
|
+
|
|
110
|
+
```mermaid
|
|
111
|
+
flowchart TD
|
|
112
|
+
Start([進入 /checkout]) --> AuthCheck{已登入?}
|
|
113
|
+
AuthCheck -->|否| Login[Login Screen]
|
|
114
|
+
Login --> Start
|
|
115
|
+
AuthCheck -->|是| CartCheck{購物車有 item?}
|
|
116
|
+
CartCheck -->|否| Empty[Empty Cart Screen]
|
|
117
|
+
Empty -->|回去購物| End1([exit to /products])
|
|
118
|
+
CartCheck -->|是| Review[Cart Review Screen]
|
|
119
|
+
|
|
120
|
+
Review -->|點 item| Edit[Edit Item Dialog]
|
|
121
|
+
Edit -->|save| Review
|
|
122
|
+
Edit -->|cancel| Review
|
|
123
|
+
|
|
124
|
+
Review -->|輸入折扣| Discount{折扣有效?}
|
|
125
|
+
Discount -->|否| DiscountError[顯示 error]
|
|
126
|
+
DiscountError --> Review
|
|
127
|
+
Discount -->|是| Review
|
|
128
|
+
|
|
129
|
+
Review -->|下一步| Payment[Payment Selection]
|
|
130
|
+
Payment -->|信用卡| CardForm[Card Form]
|
|
131
|
+
Payment -->|轉帳| BankInfo[Bank Instructions]
|
|
132
|
+
Payment -->|超商| StoreInfo[Store Instructions]
|
|
133
|
+
|
|
134
|
+
CardForm --> Validate{valid?}
|
|
135
|
+
Validate -->|否| CardError[Inline errors]
|
|
136
|
+
CardError --> CardForm
|
|
137
|
+
Validate -->|是| Confirm[Confirm Dialog]
|
|
138
|
+
|
|
139
|
+
BankInfo --> Confirm
|
|
140
|
+
StoreInfo --> Confirm
|
|
141
|
+
|
|
142
|
+
Confirm -->|確認下單| Submit[POST /order]
|
|
143
|
+
Submit --> SubmitCheck{success?}
|
|
144
|
+
SubmitCheck -->|是| Success([訂單成立 / 跳 /orders/:id])
|
|
145
|
+
SubmitCheck -->|否| RetryToast[Toast: 請稍後再試]
|
|
146
|
+
RetryToast --> Confirm
|
|
147
|
+
|
|
148
|
+
Confirm -->|取消| Payment
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Edge case 節點命名慣例
|
|
154
|
+
|
|
155
|
+
- `XxxError` = 錯誤狀態(顯示 Alert / Notice)
|
|
156
|
+
- `XxxEmpty` = 空狀態(顯示 Empty 元件)
|
|
157
|
+
- `XxxLoading` = 載入中
|
|
158
|
+
- `XxxRetry` = 可重試狀態
|
|
159
|
+
- `XxxSkipped` = 跳過(optional flow)
|
|
160
|
+
|
|
161
|
+
讓讀者一眼看出節點是 happy 還是 edge。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 集成 Storybook
|
|
166
|
+
|
|
167
|
+
Storybook 8+ 支援 MDX,可直接寫 mermaid code block:
|
|
168
|
+
|
|
169
|
+
````mdx
|
|
170
|
+
# Checkout Flow
|
|
171
|
+
|
|
172
|
+
```mermaid
|
|
173
|
+
flowchart TD
|
|
174
|
+
Start --> End
|
|
175
|
+
```
|
|
176
|
+
````
|
|
177
|
+
|
|
178
|
+
純 tsx story 可用 `<pre>{mermaidSource}</pre>` + 外部 render tool,或用 `mermaid.js` npm lib runtime render。
|
|
179
|
+
|
|
180
|
+
一般推薦 MDX 方式,Storybook 原生支援。
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Handoff Template — Storybook page + Markdown spec
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Storybook Handoff Page 結構
|
|
6
|
+
|
|
7
|
+
位置: `src/app/features/{feature-slug}/{feature-slug}.handoff.stories.tsx`
|
|
8
|
+
|
|
9
|
+
Title: `Features/{Feature Name}/Handoff`
|
|
10
|
+
|
|
11
|
+
每個 handoff page 5 個 story(5 tab):
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
const meta: Meta = {
|
|
15
|
+
title: 'Features/Checkout/Handoff',
|
|
16
|
+
parameters: { layout: 'fullscreen' },
|
|
17
|
+
}
|
|
18
|
+
export default meta
|
|
19
|
+
|
|
20
|
+
export const Overview: Story = {
|
|
21
|
+
name: '0. Overview',
|
|
22
|
+
render: () => <OverviewPage />,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const UIFlow: Story = {
|
|
26
|
+
name: '1. UI Flow',
|
|
27
|
+
render: () => <FlowDiagram />, // Mermaid render
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const Inventory: Story = {
|
|
31
|
+
name: '2. Inventory',
|
|
32
|
+
render: () => <InventoryTables />, // Component / Token / a11y
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const Screens: Story = {
|
|
36
|
+
name: '3. Screens',
|
|
37
|
+
render: () => <ScreenGrid />, // 每 screen 的 preview + link
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const SpecSheets: Story = {
|
|
41
|
+
name: '4. Spec Sheets',
|
|
42
|
+
render: () => <SpecTabs />, // per-screen detail
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Per-screen Markdown Spec 範本
|
|
49
|
+
|
|
50
|
+
每 screen 一份,組合為完整 feature 的 spec sheet:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
# Screen: {Name}
|
|
54
|
+
|
|
55
|
+
**Storybook**: `Features/{Feature}/{Screen}`
|
|
56
|
+
**Source**: `src/app/features/{slug}/{Screen}.tsx`
|
|
57
|
+
**Route**: `/{path}`
|
|
58
|
+
|
|
59
|
+
## 用途(Why)
|
|
60
|
+
|
|
61
|
+
{1-2 sentence 敘述 user 會在此頁做什麼}
|
|
62
|
+
|
|
63
|
+
## 進入條件(Entry conditions)
|
|
64
|
+
|
|
65
|
+
- {e.g., 已登入 + 購物車有 ≥1 item}
|
|
66
|
+
- {e.g., 付款方式已選擇}
|
|
67
|
+
|
|
68
|
+
## 主要元件(Components used)
|
|
69
|
+
|
|
70
|
+
| Component | Count | Purpose |
|
|
71
|
+
|-----------|-------|---------|
|
|
72
|
+
| Button | 3 | CTA + 次要 action |
|
|
73
|
+
| Input | 1 | 折扣碼輸入 |
|
|
74
|
+
| ... | | |
|
|
75
|
+
|
|
76
|
+
## 狀態(States)
|
|
77
|
+
|
|
78
|
+
### default
|
|
79
|
+
{正常載入後的畫面描述 + 截圖}
|
|
80
|
+
|
|
81
|
+
### empty
|
|
82
|
+
{無資料時的 fallback}
|
|
83
|
+
|
|
84
|
+
### error
|
|
85
|
+
{錯誤情境處理}
|
|
86
|
+
|
|
87
|
+
### loading
|
|
88
|
+
{載入中 skeleton / spinner}
|
|
89
|
+
|
|
90
|
+
## 互動(Interactions)
|
|
91
|
+
|
|
92
|
+
| Action | Element | Result |
|
|
93
|
+
|--------|---------|--------|
|
|
94
|
+
| 點 Apply | Button | POST /discount |
|
|
95
|
+
| 按 Esc | 任何 Dialog | 關閉 |
|
|
96
|
+
| ... | | |
|
|
97
|
+
|
|
98
|
+
## A11y
|
|
99
|
+
|
|
100
|
+
- ✓ icon-only 元件均有 aria-label
|
|
101
|
+
- ✓ Dialog 有 DialogTitle + DialogDescription
|
|
102
|
+
- ✓ keyboard tab order 正確
|
|
103
|
+
- ⚠ {如有未達標項,明列 + 說明}
|
|
104
|
+
|
|
105
|
+
## 邊界(Edge cases)
|
|
106
|
+
|
|
107
|
+
- {e.g., 折扣碼超過總額 → capped}
|
|
108
|
+
- {e.g., 網路斷線 → toast + retry}
|
|
109
|
+
- {e.g., 超過 N items → 分頁}
|
|
110
|
+
|
|
111
|
+
## 業務規則(Business rules)
|
|
112
|
+
|
|
113
|
+
- {e.g., VIP 折扣上限 30%}
|
|
114
|
+
- {e.g., 免運門檻 NT$1000}
|
|
115
|
+
|
|
116
|
+
## Related
|
|
117
|
+
|
|
118
|
+
- Next step: [Screen Y]
|
|
119
|
+
- Alternative: [Screen Z]
|
|
120
|
+
- Design source: [Explorations/ folder](...)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Overview story render 範本
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
function OverviewPage() {
|
|
129
|
+
return (
|
|
130
|
+
<div className="max-w-4xl mx-auto p-8 flex flex-col gap-6">
|
|
131
|
+
<h1 className="text-h1 font-medium">Checkout Feature Handoff</h1>
|
|
132
|
+
<p className="text-body-lg text-fg-secondary">
|
|
133
|
+
使用者從購物車到下單的完整結帳流程。包含 3 screens、4 modals、支援信用卡 / 銀行轉帳 /
|
|
134
|
+
超商付款 3 種付款方式。
|
|
135
|
+
</p>
|
|
136
|
+
|
|
137
|
+
<div className="border-t border-divider pt-6">
|
|
138
|
+
<h2 className="text-h2 font-medium mb-3">Audience</h2>
|
|
139
|
+
<ul className="list-disc pl-5 text-body">
|
|
140
|
+
<li>工程團隊:實作參考 + test case 來源</li>
|
|
141
|
+
<li>QA:邊界 case checklist</li>
|
|
142
|
+
<li>PM:業務規則確認</li>
|
|
143
|
+
</ul>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div className="border-t border-divider pt-6">
|
|
147
|
+
<h2 className="text-h2 font-medium mb-3">Status</h2>
|
|
148
|
+
<div className="grid grid-cols-3 gap-3">
|
|
149
|
+
<StatCard label="元件消費" value="12" caption="既有 DS" />
|
|
150
|
+
<StatCard label="新元件" value="0" caption="零污染" />
|
|
151
|
+
<StatCard label="A11y" value="✓" caption="WCAG AA" />
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<div className="border-t border-divider pt-6">
|
|
156
|
+
<h2 className="text-h2 font-medium mb-3">Navigation</h2>
|
|
157
|
+
<ul className="list-disc pl-5 text-body">
|
|
158
|
+
<li>Tab 1: UI Flow — Mermaid diagram</li>
|
|
159
|
+
<li>Tab 2: Inventory — 元件 / token / a11y 報告</li>
|
|
160
|
+
<li>Tab 3: Screens — 每 screen preview + link</li>
|
|
161
|
+
<li>Tab 4: Spec Sheets — per-screen detail</li>
|
|
162
|
+
</ul>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 設計原則
|
|
172
|
+
|
|
173
|
+
1. **target audience driven**: 語氣深度因 audience 調整。工程語氣精準 / PM 語氣情境 / 設計語氣對標
|
|
174
|
+
2. **每段可獨立被引用**: per-screen spec 可單獨丟給 team member,不需看其他頁
|
|
175
|
+
3. **不重複 DS spec**: 元件的行為 / variant 由 `components/*/spec.md` owning,handoff 只寫 **feature-level** 使用
|
|
176
|
+
4. **截圖 / preview 是 Storybook render 即可**: 不要 mockup,直接看真實 code 的 output
|
|
177
|
+
5. **Edge case 必寫**: handoff 不寫 edge case = 實作 + QA 會踩坑
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Inventory Checklist — 元件 / token / a11y grep pattern
|
|
2
|
+
|
|
3
|
+
Phase 1 inventory 生成的具體 grep + 統計方法。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Component Inventory
|
|
8
|
+
|
|
9
|
+
### 步驟 1: grep 所有 import
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
grep -rhnE "^import.*@/design-system/components/" {target} | \
|
|
13
|
+
sed -E 's/.*components\/([A-Z][a-zA-Z]+)\/.*/\1/' | \
|
|
14
|
+
sort | uniq -c | sort -rn
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
輸出:每個 DS 元件被 import 幾次。
|
|
18
|
+
|
|
19
|
+
### 步驟 2: count JSX usage
|
|
20
|
+
|
|
21
|
+
每個 component 精確使用次數(非 import):
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
for comp in Button Input Dialog Empty ScrollArea ...; do
|
|
25
|
+
count=$(grep -rhnE "<$comp\b" {target} | wc -l)
|
|
26
|
+
echo "$comp: $count"
|
|
27
|
+
done
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 步驟 3: 輸出 table
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
## Components Used (12)
|
|
34
|
+
|
|
35
|
+
| Component | Count | Files |
|
|
36
|
+
|-----------|-------|-------|
|
|
37
|
+
| Button | 12 | Checkout.tsx, Summary.tsx, ... |
|
|
38
|
+
| Input | 3 | PaymentForm.tsx |
|
|
39
|
+
| Dialog | 2 | ConfirmDialog.tsx, EditDialog.tsx |
|
|
40
|
+
| Empty | 1 | EmptyCart.tsx |
|
|
41
|
+
| ProgressBar | 1 | UploadingBanner.tsx |
|
|
42
|
+
| ScrollArea | 1 | ItemList.tsx |
|
|
43
|
+
| ... | | |
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Token Inventory
|
|
49
|
+
|
|
50
|
+
### CSS variable usage
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
grep -rohnE 'var\(--[a-z-]+\)' {target} | \
|
|
54
|
+
sort | uniq -c | sort -rn
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Semantic token utility class
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
grep -rohnE '\b(bg|text|border|fill|stroke|ring)-(primary|primary-hover|primary-subtle|primary-text|info|info-hover|info-subtle|info-text|error|error-hover|error-subtle|error-text|success|success-hover|success-subtle|success-text|warning|warning-hover|warning-subtle|warning-text|foreground|fg-secondary|fg-muted|fg-disabled|neutral-hover|neutral-active|neutral-selected|surface|surface-raised|canvas|muted|secondary|border|border-hover|divider|overlay|tooltip|notification|chart-[1-5])\b' {target} | \
|
|
61
|
+
awk -F: '{print $NF}' | sort | uniq -c | sort -rn
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 輸出 table
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
## Tokens Used (24)
|
|
68
|
+
|
|
69
|
+
| Token | Usage | Primary consumer |
|
|
70
|
+
|-------|-------|------------------|
|
|
71
|
+
| --primary | 8 | 主 CTA |
|
|
72
|
+
| --fg-secondary | 14 | 次要文字 |
|
|
73
|
+
| --error | 3 | 錯誤狀態 |
|
|
74
|
+
| --surface-raised | 5 | Dialog / Popover bg |
|
|
75
|
+
| ... | | |
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Layout primitives 消費報告
|
|
81
|
+
|
|
82
|
+
每類 primitive 用了幾次 + 哪些地方:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Empty
|
|
86
|
+
grep -rhnE '<Empty\b' {target} | wc -l
|
|
87
|
+
|
|
88
|
+
# ScrollArea
|
|
89
|
+
grep -rhnE '<ScrollArea\b' {target} | wc -l
|
|
90
|
+
|
|
91
|
+
# AspectRatio
|
|
92
|
+
grep -rhnE '<AspectRatio\b' {target} | wc -l
|
|
93
|
+
|
|
94
|
+
# item-layout (MenuItem etc.)
|
|
95
|
+
grep -rhnE '<(MenuItem|TreeItem|SidebarMenuButton|ItemIcon|ItemAvatar|ItemLabel|ItemSuffix)\b' {target} | wc -l
|
|
96
|
+
|
|
97
|
+
# overlay-surface (Dialog/Popover auto consume)
|
|
98
|
+
grep -rhnE '<(DialogHeader|DialogBody|DialogFooter|PopoverHeader|PopoverBody|PopoverFooter)\b' {target} | wc -l
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
輸出:
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
## Layout primitives used
|
|
105
|
+
|
|
106
|
+
| Primitive | Count | Note |
|
|
107
|
+
|-----------|-------|------|
|
|
108
|
+
| Empty | 1 | EmptyCart.tsx |
|
|
109
|
+
| item-layout | 5 | via MenuItem(3) / TreeItem(2) |
|
|
110
|
+
| overlay-surface | 4 | via Dialog sub-components |
|
|
111
|
+
| ScrollArea | 1 | ItemList.tsx |
|
|
112
|
+
| AspectRatio | 0 | 本 feature 無 media container |
|
|
113
|
+
| Horizontal-overflow | 0 | 本 feature 無水平溢出 |
|
|
114
|
+
| Field-wrapper | 3 | via Input(3) |
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## A11y Checklist
|
|
120
|
+
|
|
121
|
+
### 自動掃描(visible)
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# icon-only 無 aria-label
|
|
125
|
+
grep -rnE '(iconOnly|startIcon=\{)' {target} | \
|
|
126
|
+
xargs -I {} sh -c 'echo {} | grep -v "aria-label"'
|
|
127
|
+
|
|
128
|
+
# 非 button 綁 onClick
|
|
129
|
+
grep -rnE '<(div|span)[^>]*onClick=' {target}
|
|
130
|
+
|
|
131
|
+
# Dialog 是否有 DialogTitle
|
|
132
|
+
grep -rlE '<DialogContent>' {target} | \
|
|
133
|
+
xargs -I {} grep -L 'DialogTitle' {}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 人工 review(本 skill AI 無法判)
|
|
137
|
+
|
|
138
|
+
| Check | Status | Note |
|
|
139
|
+
|-------|--------|------|
|
|
140
|
+
| Color contrast WCAG AA | ? | 需 Storybook 視覺 + axe plugin |
|
|
141
|
+
| Keyboard navigation tab order | ? | 需實際操作 |
|
|
142
|
+
| Screen reader announce 正確 | ? | 需 VoiceOver / NVDA 測試 |
|
|
143
|
+
| Focus trap 在 Modal 內 | ✓ | Radix 自動處理 |
|
|
144
|
+
| Esc 關閉 Modal | ✓ | Radix 自動處理 |
|
|
145
|
+
|
|
146
|
+
輸出:
|
|
147
|
+
|
|
148
|
+
```markdown
|
|
149
|
+
## A11y Status
|
|
150
|
+
|
|
151
|
+
### Auto-scanned (visible issues)
|
|
152
|
+
|
|
153
|
+
| Check | Status |
|
|
154
|
+
|-------|--------|
|
|
155
|
+
| icon-only 有 aria-label | ✓ 全過(12/12) |
|
|
156
|
+
| 非 button 綁 onClick | ✓ 無 |
|
|
157
|
+
| Dialog 有 Title | ✓ 2/2 |
|
|
158
|
+
|
|
159
|
+
### Manual review needed
|
|
160
|
+
|
|
161
|
+
- [ ] Color contrast(run axe in Storybook)
|
|
162
|
+
- [ ] Keyboard navigation test
|
|
163
|
+
- [ ] Screen reader test
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 新增的元件 / token
|
|
169
|
+
|
|
170
|
+
若 feature 過程中**新增**到 design-system/,在 inventory 特別標示:
|
|
171
|
+
|
|
172
|
+
```markdown
|
|
173
|
+
## New additions to DS (本 feature 過程新增)
|
|
174
|
+
|
|
175
|
+
| Added | File | Motivation |
|
|
176
|
+
|-------|------|-----------|
|
|
177
|
+
| Coachmark | packages/design-system/src/components/Coachmark/ | onboarding tour 需求 |
|
|
178
|
+
| --chart-accent | packages/design-system/src/tokens/color/semantic.css | data viz 擴充 |
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
讓 stakeholder 看得出「這 feature 帶動了 DS 擴充」的成本。
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 範本輸出順序
|
|
186
|
+
|
|
187
|
+
inventory 結果編排:
|
|
188
|
+
|
|
189
|
+
1. **Overview**(feature 規模:X screens / Y modals)
|
|
190
|
+
2. **Components Used**(按 count 由高至低)
|
|
191
|
+
3. **Tokens Used**(按 count 由高至低,分色 / 字 / 間距 / shadow 四類)
|
|
192
|
+
4. **Layout primitives**(全表)
|
|
193
|
+
5. **A11y**(auto + manual two tables)
|
|
194
|
+
6. **New additions**(若有)
|
|
195
|
+
|
|
196
|
+
如此 stakeholder 一分鐘可掃完,三分鐘可讀懂 feature 全景。
|