@bovinphang/frontend-craft 2.6.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +72 -1
- package/CHANGELOG.zh-CN.md +71 -1
- package/README.md +10 -6
- package/README.openclaw.md +100 -42
- package/README.openclaw.zh-CN.md +100 -42
- package/README.zh-CN.md +10 -6
- package/agents/fec-architect.md +70 -70
- package/agents/fec-code-reviewer.md +82 -82
- package/agents/fec-debugger.md +20 -20
- package/agents/fec-design-token-mapper.md +36 -36
- package/agents/fec-doc-updater.md +13 -13
- package/agents/fec-e2e-runner.md +45 -45
- package/agents/fec-figma-implementer.md +59 -59
- package/agents/fec-performance-optimizer.md +128 -128
- package/agents/fec-refactor-cleaner.md +14 -14
- package/agents/fec-security-reviewer.md +66 -67
- package/agents/fec-test-planner.md +27 -27
- package/agents/fec-typescript-reviewer.md +88 -88
- package/agents/fec-ui-checker.md +74 -74
- package/commands/fec-debug.md +19 -19
- package/commands/fec-doc-sync.md +11 -11
- package/commands/fec-init.md +37 -38
- package/commands/fec-plan.md +58 -58
- package/commands/fec-refactor-clean.md +11 -11
- package/commands/fec-review.md +41 -41
- package/commands/fec-scaffold.md +41 -41
- package/commands/fec-tdd.md +13 -13
- package/dist/bin/frontend-craft.js +29 -27
- package/docs/example-prompts.md +84 -69
- package/docs/ja-JP/README.md +56 -52
- package/docs/ko-KR/README.md +45 -41
- package/docs/project-structure.md +19 -7
- package/docs/superpowers/plans/2026-05-29-fec-debug.md +491 -0
- package/docs/superpowers/specs/2026-05-29-fec-debug-design.md +340 -0
- package/docs/zh-CN/example-prompts.md +84 -69
- package/docs/zh-CN/project-structure.md +14 -5
- package/docs/zh-TW/README.md +33 -29
- package/localized/zh-CN/agents/fec-architect.md +125 -0
- package/localized/zh-CN/agents/fec-code-reviewer.md +152 -0
- package/localized/zh-CN/agents/fec-debugger.md +44 -0
- package/localized/zh-CN/agents/fec-design-token-mapper.md +75 -0
- package/localized/zh-CN/agents/fec-doc-updater.md +30 -0
- package/localized/zh-CN/agents/fec-e2e-runner.md +107 -0
- package/localized/zh-CN/agents/fec-figma-implementer.md +104 -0
- package/localized/zh-CN/agents/fec-performance-optimizer.md +293 -0
- package/localized/zh-CN/agents/fec-refactor-cleaner.md +32 -0
- package/localized/zh-CN/agents/fec-security-reviewer.md +116 -0
- package/localized/zh-CN/agents/fec-test-planner.md +50 -0
- package/localized/zh-CN/agents/fec-typescript-reviewer.md +142 -0
- package/localized/zh-CN/agents/fec-ui-checker.md +120 -0
- package/localized/zh-CN/commands/fec-debug.md +30 -0
- package/localized/zh-CN/commands/fec-doc-sync.md +19 -0
- package/localized/zh-CN/commands/fec-init.md +70 -0
- package/localized/zh-CN/commands/fec-plan.md +94 -0
- package/localized/zh-CN/commands/fec-refactor-clean.md +19 -0
- package/localized/zh-CN/commands/fec-review.md +66 -0
- package/localized/zh-CN/commands/fec-scaffold.md +205 -0
- package/localized/zh-CN/commands/fec-tdd.md +21 -0
- package/localized/zh-CN/skills/TEMPLATE.md +155 -0
- package/localized/zh-CN/skills/eval_queries.json +1013 -0
- package/localized/zh-CN/skills/fec-accessibility-check/SKILL.md +39 -0
- package/localized/zh-CN/skills/fec-accessibility-check/references/report-template.md +23 -0
- package/localized/zh-CN/skills/fec-accessibility-check/references/screen-reader-testing.md +33 -0
- package/localized/zh-CN/skills/fec-alchemy/SKILL.md +74 -0
- package/localized/zh-CN/skills/fec-alchemy/assets/absorption-plan-template.md +47 -0
- package/localized/zh-CN/skills/fec-alchemy/assets/intake-template.md +55 -0
- package/localized/zh-CN/skills/fec-alchemy/assets/review-checklist.md +31 -0
- package/localized/zh-CN/skills/fec-alchemy/references/methodology.md +94 -0
- package/localized/zh-CN/skills/fec-alchemy/references/originality-and-licensing.md +57 -0
- package/localized/zh-CN/skills/fec-api-integration/SKILL.md +78 -0
- package/localized/zh-CN/skills/fec-api-integration/references/integration-patterns.md +80 -0
- package/localized/zh-CN/skills/fec-backend-requirements-handoff/SKILL.md +45 -0
- package/localized/zh-CN/skills/fec-browser-storage/SKILL.md +34 -0
- package/localized/zh-CN/skills/fec-browser-storage/references/storage-patterns.md +65 -0
- package/localized/zh-CN/skills/fec-canvas-threejs/SKILL.md +66 -0
- package/localized/zh-CN/skills/fec-canvas-threejs/references/rendering-patterns.md +67 -0
- package/localized/zh-CN/skills/fec-canvas-threejs/references/shader-webgl-patterns.md +67 -0
- package/localized/zh-CN/skills/fec-code-review/SKILL.md +143 -0
- package/localized/zh-CN/skills/fec-code-review/references/report-template.md +29 -0
- package/localized/zh-CN/skills/fec-component-testing/SKILL.md +119 -0
- package/localized/zh-CN/skills/fec-data-fetching/SKILL.md +62 -0
- package/localized/zh-CN/skills/fec-data-fetching/references/query-patterns.md +103 -0
- package/localized/zh-CN/skills/fec-debug-framework/SKILL.md +157 -0
- package/localized/zh-CN/skills/fec-debug-framework/references/report-template.md +58 -0
- package/localized/zh-CN/skills/fec-dependency-upgrade/SKILL.md +34 -0
- package/localized/zh-CN/skills/fec-dependency-upgrade/references/dependency-upgrade-workflow.md +56 -0
- package/localized/zh-CN/skills/fec-doc-sync/SKILL.md +39 -0
- package/localized/zh-CN/skills/fec-drawio-studio/SKILL.md +73 -0
- package/localized/zh-CN/skills/fec-drawio-studio/data/THIRD_PARTY_NOTICES.md +10 -0
- package/localized/zh-CN/skills/fec-drawio-studio/data/brand-icons.json +878 -0
- package/localized/zh-CN/skills/fec-drawio-studio/data/shape-index.json +83570 -0
- package/localized/zh-CN/skills/fec-drawio-studio/references/data-residency.md +27 -0
- package/localized/zh-CN/skills/fec-drawio-studio/references/diagram-patterns.md +60 -0
- package/localized/zh-CN/skills/fec-drawio-studio/references/flowchart-quality.md +49 -0
- package/localized/zh-CN/skills/fec-drawio-studio/references/layout-and-export.md +72 -0
- package/localized/zh-CN/skills/fec-drawio-studio/references/troubleshooting.md +29 -0
- package/localized/zh-CN/skills/fec-drawio-studio/references/xml-and-mermaid.md +58 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/brand-symbols.mjs +99 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/diagram-lint.mjs +205 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/diagram-url.mjs +102 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/drawio-export.mjs +134 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/layout-graph.mjs +107 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/png-embed-fix.mjs +26 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/scan-go-packages.mjs +36 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/scan-js-modules.mjs +52 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/scan-python-classes.mjs +30 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/scan-python-modules.mjs +55 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/scan-rust-modules.mjs +35 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/scan-ts-modules.mjs +7 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/shape-query.mjs +121 -0
- package/localized/zh-CN/skills/fec-drawio-studio/scripts/studio-core.mjs +139 -0
- package/localized/zh-CN/skills/fec-drawio-studio/styles/built-in/corporate.json +49 -0
- package/localized/zh-CN/skills/fec-drawio-studio/styles/built-in/default.json +49 -0
- package/localized/zh-CN/skills/fec-drawio-studio/styles/built-in/handdrawn.json +49 -0
- package/localized/zh-CN/skills/fec-drawio-studio/styles/schema.json +112 -0
- package/localized/zh-CN/skills/fec-e2e-testing/SKILL.md +42 -0
- package/localized/zh-CN/skills/fec-e2e-testing/references/e2e-ci-reporting.md +62 -0
- package/localized/zh-CN/skills/fec-e2e-testing/references/e2e-special-scenarios.md +52 -0
- package/localized/zh-CN/skills/fec-e2e-testing/references/e2e-visual-regression.md +60 -0
- package/localized/zh-CN/skills/fec-e2e-testing/references/playwright-patterns.md +95 -0
- package/localized/zh-CN/skills/fec-form-handling/SKILL.md +76 -0
- package/localized/zh-CN/skills/fec-form-handling/references/advanced-form-patterns.md +101 -0
- package/localized/zh-CN/skills/fec-image-generation/SKILL.md +80 -0
- package/localized/zh-CN/skills/fec-image-generation/assets/interactive-diagram.html +371 -0
- package/localized/zh-CN/skills/fec-image-generation/references/artifact-routing.md +80 -0
- package/localized/zh-CN/skills/fec-image-generation/references/diagram-workflows.md +74 -0
- package/localized/zh-CN/skills/fec-image-generation/references/html-technical-diagrams.md +236 -0
- package/localized/zh-CN/skills/fec-image-generation/references/png-qa-autofix.md +30 -0
- package/localized/zh-CN/skills/fec-image-generation/scripts/export-diagram.mjs +364 -0
- package/localized/zh-CN/skills/fec-image-generation/scripts/interactive-diagram-server.mjs +654 -0
- package/localized/zh-CN/skills/fec-image-generation/scripts/png-qa.mjs +431 -0
- package/localized/zh-CN/skills/fec-image-generation/scripts/tech-diagram-render.mjs +1397 -0
- package/localized/zh-CN/skills/fec-implement-from-design/SKILL.md +129 -0
- package/localized/zh-CN/skills/fec-implement-from-design/references/design-plan-template.md +36 -0
- package/localized/zh-CN/skills/fec-legacy-to-modern-migration/SKILL.md +46 -0
- package/localized/zh-CN/skills/fec-legacy-to-modern-migration/references/migration-execution-checklist.md +110 -0
- package/localized/zh-CN/skills/fec-legacy-to-modern-migration/references/migration-report-template.md +41 -0
- package/localized/zh-CN/skills/fec-legacy-to-modern-migration/references/migration-strategy-and-mapping.md +48 -0
- package/localized/zh-CN/skills/fec-legacy-web-standard/SKILL.md +35 -0
- package/localized/zh-CN/skills/fec-legacy-web-standard/references/legacy-patterns.md +85 -0
- package/localized/zh-CN/skills/fec-list-virtualization/SKILL.md +34 -0
- package/localized/zh-CN/skills/fec-list-virtualization/references/virtualization-patterns.md +80 -0
- package/localized/zh-CN/skills/fec-monorepo-project-standard/SKILL.md +142 -0
- package/localized/zh-CN/skills/fec-motion-interaction/SKILL.md +73 -0
- package/localized/zh-CN/skills/fec-motion-interaction/references/motion-patterns.md +112 -0
- package/localized/zh-CN/skills/fec-nextjs-project-standard/SKILL.md +123 -0
- package/localized/zh-CN/skills/fec-nuxt-project-standard/SKILL.md +122 -0
- package/localized/zh-CN/skills/fec-performance-optimization/SKILL.md +80 -0
- package/localized/zh-CN/skills/fec-performance-optimization/references/framework-performance-patterns.md +38 -0
- package/localized/zh-CN/skills/fec-performance-optimization/references/report-template.md +59 -0
- package/localized/zh-CN/skills/fec-pwa-implementation/SKILL.md +35 -0
- package/localized/zh-CN/skills/fec-pwa-implementation/references/manifest-and-icons.md +53 -0
- package/localized/zh-CN/skills/fec-pwa-implementation/references/service-worker-workbox.md +68 -0
- package/localized/zh-CN/skills/fec-react-project-standard/SKILL.md +91 -0
- package/localized/zh-CN/skills/fec-react-project-standard/references/react-performance-patterns.md +35 -0
- package/localized/zh-CN/skills/fec-react-project-standard/references/react-project-structure.md +197 -0
- package/localized/zh-CN/skills/fec-react-project-standard/references/react-quality-patterns.md +131 -0
- package/localized/zh-CN/skills/fec-react-project-standard/references/react-runtime-patterns.md +293 -0
- package/localized/zh-CN/skills/fec-refactor-clean/SKILL.md +51 -0
- package/localized/zh-CN/skills/fec-refactor-clean/references/report-template.md +42 -0
- package/localized/zh-CN/skills/fec-responsive-layout/SKILL.md +34 -0
- package/localized/zh-CN/skills/fec-responsive-layout/references/responsive-layout-patterns.md +70 -0
- package/localized/zh-CN/skills/fec-route-protection/SKILL.md +135 -0
- package/localized/zh-CN/skills/fec-security-review/SKILL.md +38 -0
- package/localized/zh-CN/skills/fec-security-review/references/report-template.md +27 -0
- package/localized/zh-CN/skills/fec-security-review/references/security-checklist.md +64 -0
- package/localized/zh-CN/skills/fec-source-driven-development/SKILL.md +87 -0
- package/localized/zh-CN/skills/fec-state-management/SKILL.md +140 -0
- package/localized/zh-CN/skills/fec-state-management/references/state-patterns.md +109 -0
- package/localized/zh-CN/skills/fec-storybook-component-doc/SKILL.md +37 -0
- package/localized/zh-CN/skills/fec-storybook-component-doc/references/story-patterns.md +118 -0
- package/localized/zh-CN/skills/fec-svg-animation/SKILL.md +148 -0
- package/localized/zh-CN/skills/fec-tailwind-design-system/SKILL.md +34 -0
- package/localized/zh-CN/skills/fec-tailwind-design-system/references/tailwind-system-patterns.md +59 -0
- package/localized/zh-CN/skills/fec-tdd-workflow/SKILL.md +52 -0
- package/localized/zh-CN/skills/fec-testing-strategy/SKILL.md +45 -0
- package/localized/zh-CN/skills/fec-typescript-project-standard/SKILL.md +54 -0
- package/{skills/fec-typescript-type-safety → localized/zh-CN/skills/fec-typescript-project-standard}/references/type-safety-patterns.md +1 -1
- package/{skills/fec-typescript-type-safety/SKILL.md → localized/zh-CN/skills/fec-typescript-project-standard/references/type-safety.md} +5 -14
- package/localized/zh-CN/skills/fec-ui-design/SKILL.md +108 -0
- package/localized/zh-CN/skills/fec-ui-design/data/product-rules.json +231 -0
- package/localized/zh-CN/skills/fec-ui-design/data/stack-ui-rules.json +146 -0
- package/localized/zh-CN/skills/fec-ui-design/data/style-archetypes.json +373 -0
- package/localized/zh-CN/skills/fec-ui-design/data/ux-quality-rules.json +203 -0
- package/localized/zh-CN/skills/fec-ui-design/references/design-intelligence.md +97 -0
- package/localized/zh-CN/skills/fec-ui-design/references/master-page-overrides.md +30 -0
- package/localized/zh-CN/skills/fec-ui-design/references/pre-delivery-checklist.md +39 -0
- package/localized/zh-CN/skills/fec-ui-design/scripts/design-system.mjs +648 -0
- package/localized/zh-CN/skills/fec-validation-fix/SKILL.md +51 -0
- package/localized/zh-CN/skills/fec-validation-fix/references/report-template.md +43 -0
- package/localized/zh-CN/skills/fec-vite-project-standard/SKILL.md +83 -0
- package/localized/zh-CN/skills/fec-vue3-project-standard/SKILL.md +58 -0
- package/localized/zh-CN/skills/fec-vue3-project-standard/references/vue3-composables-routing.md +162 -0
- package/localized/zh-CN/skills/fec-vue3-project-standard/references/vue3-performance-patterns.md +13 -0
- package/localized/zh-CN/skills/fec-vue3-project-standard/references/vue3-project-structure.md +176 -0
- package/localized/zh-CN/skills/fec-vue3-project-standard/references/vue3-state-api-quality.md +216 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/SKILL.md +61 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/data/starter-themes.json +59 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/references/chapter-craft.md +37 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/references/content-plan.md +38 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/references/recording-and-audio.md +33 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/references/theme-system.md +36 -0
- package/localized/zh-CN/skills/fec-web-video-presentation/scripts/create-video-presentation.mjs +430 -0
- package/localized/zh-CN/skills/fec-web-workers/SKILL.md +35 -0
- package/localized/zh-CN/skills/fec-web-workers/references/advanced-workers.md +54 -0
- package/localized/zh-CN/skills/fec-web-workers/references/basic-worker.md +67 -0
- package/localized/zh-CN/skills/metadata.json +1646 -0
- package/localized/zh-CN/skills/relations.json +755 -0
- package/localized/zh-CN/templates/claude/CLAUDE.md +106 -0
- package/localized/zh-CN/templates/claude/settings.json +62 -0
- package/localized/zh-CN/templates/codex/AGENTS.md +105 -0
- package/localized/zh-CN/templates/codex/config.toml +32 -0
- package/localized/zh-CN/templates/openclaw/AGENTS.md +101 -0
- package/localized/zh-CN/templates/openclaw/OPENCLAW-CONFIG.md +12 -0
- package/localized/zh-CN/templates/shared/rules/fec-agent-workflow.md +54 -0
- package/localized/zh-CN/templates/shared/rules/fec-api-layer.md +99 -0
- package/localized/zh-CN/templates/shared/rules/fec-ci-cd.md +40 -0
- package/localized/zh-CN/templates/shared/rules/fec-code-comments.md +33 -0
- package/localized/zh-CN/templates/shared/rules/fec-design-system.md +72 -0
- package/localized/zh-CN/templates/shared/rules/fec-error-handling.md +56 -0
- package/localized/zh-CN/templates/shared/rules/fec-git-conventions.md +73 -0
- package/localized/zh-CN/templates/shared/rules/fec-i18n.md +64 -0
- package/localized/zh-CN/templates/shared/rules/fec-naming-conventions.md +120 -0
- package/localized/zh-CN/templates/shared/rules/fec-performance.md +101 -0
- package/localized/zh-CN/templates/shared/rules/fec-react.md +82 -0
- package/localized/zh-CN/templates/shared/rules/fec-refactoring.md +47 -0
- package/localized/zh-CN/templates/shared/rules/fec-rendering-patterns.md +40 -0
- package/localized/zh-CN/templates/shared/rules/fec-responsive-design.md +50 -0
- package/localized/zh-CN/templates/shared/rules/fec-source-driven-development.md +31 -0
- package/localized/zh-CN/templates/shared/rules/fec-state-management.md +60 -0
- package/localized/zh-CN/templates/shared/rules/fec-testing.md +98 -0
- package/localized/zh-CN/templates/shared/rules/fec-typescript.md +112 -0
- package/localized/zh-CN/templates/shared/rules/fec-vue.md +64 -0
- package/localized/zh-CN/templates/shared/rules/fec-working-modes.md +50 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -3
- package/skills/TEMPLATE.md +74 -74
- package/skills/eval_queries.json +717 -619
- package/skills/fec-accessibility-check/SKILL.md +21 -21
- package/skills/fec-accessibility-check/references/report-template.md +12 -12
- package/skills/fec-accessibility-check/references/screen-reader-testing.md +24 -24
- package/skills/fec-alchemy/SKILL.md +50 -50
- package/skills/fec-alchemy/assets/absorption-plan-template.md +32 -32
- package/skills/fec-alchemy/assets/intake-template.md +55 -55
- package/skills/fec-alchemy/assets/review-checklist.md +23 -23
- package/skills/fec-alchemy/references/methodology.md +66 -66
- package/skills/fec-alchemy/references/originality-and-licensing.md +42 -42
- package/skills/fec-api-integration/SKILL.md +61 -61
- package/skills/fec-api-integration/references/integration-patterns.md +30 -30
- package/skills/fec-backend-requirements-handoff/SKILL.md +45 -0
- package/skills/fec-browser-storage/SKILL.md +16 -16
- package/skills/fec-browser-storage/references/storage-patterns.md +16 -16
- package/skills/fec-canvas-threejs/SKILL.md +21 -21
- package/skills/fec-canvas-threejs/references/rendering-patterns.md +10 -10
- package/skills/fec-canvas-threejs/references/shader-webgl-patterns.md +37 -37
- package/skills/fec-code-review/SKILL.md +94 -94
- package/skills/fec-code-review/references/report-template.md +13 -13
- package/skills/fec-component-testing/SKILL.md +39 -39
- package/skills/fec-data-fetching/SKILL.md +16 -16
- package/skills/fec-data-fetching/references/query-patterns.md +27 -27
- package/skills/fec-debug-framework/SKILL.md +95 -95
- package/skills/fec-debug-framework/references/report-template.md +34 -34
- package/skills/fec-dependency-upgrade/SKILL.md +17 -17
- package/skills/fec-dependency-upgrade/references/dependency-upgrade-workflow.md +31 -31
- package/skills/fec-doc-sync/SKILL.md +23 -23
- package/skills/fec-drawio-studio/SKILL.md +73 -0
- package/skills/fec-drawio-studio/data/THIRD_PARTY_NOTICES.md +10 -0
- package/skills/fec-drawio-studio/data/brand-icons.json +878 -0
- package/skills/fec-drawio-studio/data/shape-index.json +83570 -0
- package/skills/fec-drawio-studio/references/data-residency.md +27 -0
- package/skills/fec-drawio-studio/references/diagram-patterns.md +60 -0
- package/skills/fec-drawio-studio/references/flowchart-quality.md +49 -0
- package/skills/fec-drawio-studio/references/layout-and-export.md +72 -0
- package/skills/fec-drawio-studio/references/troubleshooting.md +29 -0
- package/skills/fec-drawio-studio/references/xml-and-mermaid.md +58 -0
- package/skills/fec-drawio-studio/scripts/brand-symbols.mjs +99 -0
- package/skills/fec-drawio-studio/scripts/diagram-lint.mjs +205 -0
- package/skills/fec-drawio-studio/scripts/diagram-url.mjs +102 -0
- package/skills/fec-drawio-studio/scripts/drawio-export.mjs +134 -0
- package/skills/fec-drawio-studio/scripts/layout-graph.mjs +107 -0
- package/skills/fec-drawio-studio/scripts/png-embed-fix.mjs +26 -0
- package/skills/fec-drawio-studio/scripts/scan-go-packages.mjs +36 -0
- package/skills/fec-drawio-studio/scripts/scan-js-modules.mjs +52 -0
- package/skills/fec-drawio-studio/scripts/scan-python-classes.mjs +30 -0
- package/skills/fec-drawio-studio/scripts/scan-python-modules.mjs +55 -0
- package/skills/fec-drawio-studio/scripts/scan-rust-modules.mjs +35 -0
- package/skills/fec-drawio-studio/scripts/scan-ts-modules.mjs +7 -0
- package/skills/fec-drawio-studio/scripts/shape-query.mjs +121 -0
- package/skills/fec-drawio-studio/scripts/studio-core.mjs +139 -0
- package/skills/fec-drawio-studio/styles/built-in/corporate.json +49 -0
- package/skills/fec-drawio-studio/styles/built-in/default.json +49 -0
- package/skills/fec-drawio-studio/styles/built-in/handdrawn.json +49 -0
- package/skills/fec-drawio-studio/styles/schema.json +112 -0
- package/skills/fec-e2e-testing/SKILL.md +24 -22
- package/skills/fec-e2e-testing/references/e2e-ci-reporting.md +62 -0
- package/skills/fec-e2e-testing/references/e2e-special-scenarios.md +52 -0
- package/skills/fec-e2e-testing/references/e2e-visual-regression.md +60 -0
- package/skills/fec-e2e-testing/references/playwright-patterns.md +6 -6
- package/skills/fec-form-handling/SKILL.md +21 -21
- package/skills/fec-form-handling/references/advanced-form-patterns.md +41 -41
- package/skills/fec-image-generation/SKILL.md +81 -0
- package/skills/fec-image-generation/assets/interactive-diagram.html +371 -0
- package/skills/fec-image-generation/references/artifact-routing.md +80 -0
- package/skills/fec-image-generation/references/diagram-workflows.md +74 -0
- package/skills/fec-image-generation/references/html-technical-diagrams.md +236 -0
- package/skills/fec-image-generation/references/png-qa-autofix.md +30 -0
- package/skills/fec-image-generation/scripts/export-diagram.mjs +364 -0
- package/skills/fec-image-generation/scripts/interactive-diagram-server.mjs +654 -0
- package/skills/fec-image-generation/scripts/png-qa.mjs +431 -0
- package/skills/fec-image-generation/scripts/tech-diagram-render.mjs +1397 -0
- package/skills/fec-implement-from-design/SKILL.md +81 -74
- package/skills/fec-implement-from-design/references/design-plan-template.md +16 -16
- package/skills/fec-legacy-to-modern-migration/SKILL.md +29 -173
- package/skills/fec-legacy-to-modern-migration/references/migration-execution-checklist.md +110 -0
- package/skills/fec-legacy-to-modern-migration/references/migration-report-template.md +37 -37
- package/skills/fec-legacy-to-modern-migration/references/migration-strategy-and-mapping.md +48 -0
- package/skills/fec-legacy-web-standard/SKILL.md +17 -17
- package/skills/fec-legacy-web-standard/references/legacy-patterns.md +16 -16
- package/skills/fec-list-virtualization/SKILL.md +16 -16
- package/skills/fec-list-virtualization/references/virtualization-patterns.md +31 -31
- package/skills/fec-monorepo-project-standard/SKILL.md +52 -52
- package/skills/fec-motion-interaction/SKILL.md +51 -44
- package/skills/fec-motion-interaction/references/motion-patterns.md +11 -11
- package/skills/fec-nextjs-project-standard/SKILL.md +64 -58
- package/skills/fec-nuxt-project-standard/SKILL.md +57 -57
- package/skills/fec-performance-optimization/SKILL.md +54 -50
- package/skills/fec-performance-optimization/references/framework-performance-patterns.md +38 -0
- package/skills/fec-performance-optimization/references/report-template.md +34 -28
- package/skills/fec-pwa-implementation/SKILL.md +17 -17
- package/skills/fec-pwa-implementation/references/manifest-and-icons.md +12 -12
- package/skills/fec-pwa-implementation/references/service-worker-workbox.md +13 -13
- package/skills/fec-react-project-standard/SKILL.md +72 -64
- package/skills/fec-react-project-standard/references/react-performance-patterns.md +35 -0
- package/skills/fec-react-project-standard/references/react-project-structure.md +197 -0
- package/skills/fec-react-project-standard/references/react-quality-patterns.md +131 -0
- package/skills/fec-react-project-standard/references/react-runtime-patterns.md +293 -0
- package/skills/fec-refactor-clean/SKILL.md +30 -30
- package/skills/fec-refactor-clean/references/report-template.md +23 -23
- package/skills/fec-responsive-layout/SKILL.md +17 -17
- package/skills/fec-responsive-layout/references/responsive-layout-patterns.md +39 -28
- package/skills/fec-route-protection/SKILL.md +26 -26
- package/skills/fec-security-review/SKILL.md +20 -20
- package/skills/fec-security-review/references/report-template.md +12 -12
- package/skills/fec-security-review/references/security-checklist.md +27 -27
- package/skills/fec-source-driven-development/SKILL.md +66 -40
- package/skills/fec-state-management/SKILL.md +34 -34
- package/skills/fec-state-management/references/state-patterns.md +19 -19
- package/skills/fec-storybook-component-doc/SKILL.md +19 -19
- package/skills/fec-storybook-component-doc/references/story-patterns.md +12 -12
- package/skills/fec-svg-animation/SKILL.md +32 -32
- package/skills/fec-tailwind-design-system/SKILL.md +17 -17
- package/skills/fec-tailwind-design-system/references/tailwind-system-patterns.md +36 -32
- package/skills/fec-tdd-workflow/SKILL.md +28 -28
- package/skills/fec-testing-strategy/SKILL.md +29 -29
- package/skills/fec-typescript-project-standard/SKILL.md +54 -0
- package/skills/fec-typescript-project-standard/references/type-safety-patterns.md +102 -0
- package/skills/fec-typescript-project-standard/references/type-safety.md +148 -0
- package/skills/fec-ui-design/SKILL.md +90 -72
- package/skills/fec-ui-design/data/style-archetypes.json +40 -0
- package/skills/fec-ui-design/data/ux-quality-rules.json +35 -0
- package/skills/fec-ui-design/references/design-intelligence.md +81 -21
- package/skills/fec-ui-design/references/master-page-overrides.md +15 -15
- package/skills/fec-ui-design/references/pre-delivery-checklist.md +38 -32
- package/skills/fec-ui-design/scripts/design-system.mjs +119 -1
- package/skills/fec-validation-fix/SKILL.md +26 -26
- package/skills/fec-validation-fix/references/report-template.md +25 -25
- package/skills/fec-vite-project-standard/SKILL.md +39 -39
- package/skills/fec-vue3-project-standard/SKILL.md +39 -30
- package/skills/fec-vue3-project-standard/references/vue3-composables-routing.md +163 -0
- package/skills/fec-vue3-project-standard/references/vue3-performance-patterns.md +13 -0
- package/skills/fec-vue3-project-standard/references/vue3-project-structure.md +177 -0
- package/skills/fec-vue3-project-standard/references/vue3-state-api-quality.md +216 -0
- package/skills/fec-web-video-presentation/SKILL.md +61 -0
- package/skills/fec-web-video-presentation/data/starter-themes.json +59 -0
- package/skills/fec-web-video-presentation/references/chapter-craft.md +37 -0
- package/skills/fec-web-video-presentation/references/content-plan.md +38 -0
- package/skills/fec-web-video-presentation/references/recording-and-audio.md +33 -0
- package/skills/fec-web-video-presentation/references/theme-system.md +36 -0
- package/skills/fec-web-video-presentation/scripts/create-video-presentation.mjs +430 -0
- package/skills/fec-web-workers/SKILL.md +16 -16
- package/skills/fec-web-workers/references/advanced-workers.md +13 -13
- package/skills/fec-web-workers/references/basic-worker.md +8 -8
- package/skills/metadata.json +402 -220
- package/skills/relations.json +120 -25
- package/templates/claude/CLAUDE.md +60 -60
- package/templates/codex/AGENTS.md +76 -76
- package/templates/codex/config.toml +4 -4
- package/templates/openclaw/AGENTS.md +68 -68
- package/templates/openclaw/OPENCLAW-CONFIG.md +8 -8
- package/templates/shared/rules/fec-agent-workflow.md +40 -40
- package/templates/shared/rules/fec-api-layer.md +52 -52
- package/templates/shared/rules/fec-ci-cd.md +29 -117
- package/templates/shared/rules/fec-code-comments.md +22 -22
- package/templates/shared/rules/fec-design-system.md +65 -241
- package/templates/shared/rules/fec-error-handling.md +41 -185
- package/templates/shared/rules/fec-git-conventions.md +42 -42
- package/templates/shared/rules/fec-i18n.md +48 -96
- package/templates/shared/rules/fec-naming-conventions.md +91 -91
- package/templates/shared/rules/fec-performance.md +78 -78
- package/templates/shared/rules/fec-react.md +58 -58
- package/templates/shared/rules/fec-refactoring.md +34 -30
- package/templates/shared/rules/fec-rendering-patterns.md +40 -183
- package/templates/shared/rules/fec-responsive-design.md +37 -214
- package/templates/shared/rules/fec-source-driven-development.md +22 -22
- package/templates/shared/rules/fec-state-management.md +45 -148
- package/templates/shared/rules/fec-testing.md +64 -64
- package/templates/shared/rules/fec-typescript.md +98 -341
- package/templates/shared/rules/fec-vue.md +42 -42
- package/templates/shared/rules/fec-working-modes.md +34 -34
- package/skills/fec-e2e-testing/references/e2e-advanced.md +0 -176
- package/skills/fec-react-project-standard/references/react-project-details.md +0 -642
- package/skills/fec-vue3-project-standard/references/vue3-project-details.md +0 -547
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Vue 3 composables and routing patterns
|
|
2
|
+
|
|
3
|
+
## Composables specification
|
|
4
|
+
|
|
5
|
+
### Design principles
|
|
6
|
+
|
|
7
|
+
- Named with `use` prefix
|
|
8
|
+
- Use objects as return values and clearly mark the type
|
|
9
|
+
- Internal processing loading / error / data tri-state
|
|
10
|
+
-Support parameter responsiveness (accepts `Ref` or getter)
|
|
11
|
+
- Library level composable to clarify whether the parameter supports normal values, `Ref`, `computed` or getter, and parse the latest value inside the side effect
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
export function useUserList(params: MaybeRef<QueryParams>) {
|
|
15
|
+
const data = ref<User[]>([]);
|
|
16
|
+
const loading = ref(false);
|
|
17
|
+
const error = ref<Error | null>(null);
|
|
18
|
+
|
|
19
|
+
async function fetch() {
|
|
20
|
+
loading.value = true;
|
|
21
|
+
error.value = null;
|
|
22
|
+
try {
|
|
23
|
+
const res = await getUserList(toValue(params));
|
|
24
|
+
data.value = res.list;
|
|
25
|
+
} catch (e) {
|
|
26
|
+
error.value = e as Error;
|
|
27
|
+
} finally {
|
|
28
|
+
loading.value = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
watchEffect(() => {
|
|
33
|
+
fetch();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
data: readonly(data),
|
|
38
|
+
loading: readonly(loading),
|
|
39
|
+
error: readonly(error),
|
|
40
|
+
refetch: fetch,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Composable usage principles
|
|
46
|
+
|
|
47
|
+
- Return a `readonly` reference to prevent accidental modification by outsiders
|
|
48
|
+
- In data request scenarios, libraries such as VueQuery / VueUse are preferred (if the project has been introduced)
|
|
49
|
+
- Clean up timers, event listeners and other side effects in `onUnmounted`
|
|
50
|
+
- Avoid directly manipulating DOM in composable
|
|
51
|
+
- Read-only inputs accept normal values, refs, computed or getters; inputs that require bidirectional writing only accept writable refs or explicit setters.
|
|
52
|
+
- If the parameter itself is a callback, comparator or predicate, do not design it as a getter type input, otherwise the business function may be mistakenly called during parsing.
|
|
53
|
+
|
|
54
|
+
### Vue Router / Pinia / Test common boundaries
|
|
55
|
+
|
|
56
|
+
- Changes in routing parameters will not recreate the same routing component; data that relies on `route.params` must watch clear fields and handle cancellation and race conditions.
|
|
57
|
+
- Avoid old-style `next()` multi-branch repeated calls in navigation guards; give priority to returning `false`, redirecting objects or throwing handleable errors.
|
|
58
|
+
- Use `storeToRefs` when destructuring the Pinia store will lose responsiveness; the setup store must return state, getters and actions that need to be tracked externally.
|
|
59
|
+
- UI temporary status, form input, and pop-up window switches do not enter the global store; URL query, server-side cache, and local component status are returned to their respective places first.
|
|
60
|
+
- Vue Test Utils tests prioritize user-visible behavior and do not use snapshots as the only proof; asynchronous updates use `await`, `flushPromises` or the waiting method recommended by the framework.
|
|
61
|
+
- When testing using Pinia, Router, Teleport, Suspense, async setup or `defineAsyncComponent`, explicitly install the plugin in the test fixture, mount the target container and wait for async to stabilize.
|
|
62
|
+
|
|
63
|
+
## Slots and Provide/Inject
|
|
64
|
+
|
|
65
|
+
### Slots
|
|
66
|
+
|
|
67
|
+
- Use `<slot>` to achieve component composition instead of too many props
|
|
68
|
+
- Named slots are used for explicit layout areas
|
|
69
|
+
- Scope slot passes data to parent component for custom rendering
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<template>
|
|
73
|
+
<div class="card">
|
|
74
|
+
<div class="card-header">
|
|
75
|
+
<slot name="header">{{ title }}</slot>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="card-body">
|
|
78
|
+
<slot :data="processedData" :loading="loading" />
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</template>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Provide/Inject
|
|
85
|
+
|
|
86
|
+
- For context sharing across multiple levels (topics, configurations, permissions)
|
|
87
|
+
- Provide InjectionKey to ensure type safety
|
|
88
|
+
- Do not use provide/inject instead of props to pass direct parent-child data
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// keys.ts
|
|
92
|
+
export const ThemeKey: InjectionKey<Ref<Theme>> = Symbol("theme");
|
|
93
|
+
|
|
94
|
+
// Provider.vue
|
|
95
|
+
provide(ThemeKey, theme);
|
|
96
|
+
|
|
97
|
+
// Consumer.vue
|
|
98
|
+
const theme = inject(ThemeKey);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Routing specifications
|
|
102
|
+
|
|
103
|
+
### Routing organization
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// app/router.ts
|
|
107
|
+
const routes: RouteRecordRaw[] = [
|
|
108
|
+
{
|
|
109
|
+
path: "/",
|
|
110
|
+
component: MainLayout,
|
|
111
|
+
children: [
|
|
112
|
+
{
|
|
113
|
+
path: "",
|
|
114
|
+
name: "Dashboard",
|
|
115
|
+
component: () => import("@/pages/Dashboard/DashboardPage.vue"),
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
path: "users",
|
|
119
|
+
name: "UserList",
|
|
120
|
+
component: () => import("@/pages/UserList/UserListPage.vue"),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
path: "users/:id",
|
|
124
|
+
name: "UserDetail",
|
|
125
|
+
component: () => import("@/pages/UserDetail/UserDetailPage.vue"),
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
path: "settings",
|
|
129
|
+
name: "Settings",
|
|
130
|
+
component: () => import("@/pages/Settings/SettingsPage.vue"),
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
path: "/login",
|
|
136
|
+
name: "Login",
|
|
137
|
+
component: () => import("@/pages/Login/LoginPage.vue"),
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
path: "/:pathMatch(.*)*",
|
|
141
|
+
name: "NotFound",
|
|
142
|
+
component: () => import("@/pages/NotFound.vue"),
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Routing principles
|
|
148
|
+
|
|
149
|
+
- Centralized management of routing configuration, each route must have a `name`
|
|
150
|
+
- Page components are loaded on demand using dynamic `import()`
|
|
151
|
+
- Permission control uses route guard (`beforeEach`) instead of judging within each page
|
|
152
|
+
- URL parameters (pagination, filtering, sorting) and routing status are synchronized
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// Navigation guard
|
|
156
|
+
router.beforeEach((to) => {
|
|
157
|
+
const authStore = useAuthStore();
|
|
158
|
+
if (to.meta.requiresAuth && !authStore.isLoggedIn) {
|
|
159
|
+
return { name: "Login", query: { redirect: to.fullPath } };
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Vue 3 performance patterns
|
|
2
|
+
|
|
3
|
+
This file keeps lightweight Vue project-standard performance guidance. Use the frontend performance workflow when the task needs metrics, traces, profiles, bundle analysis, network evidence, or a formal performance report.
|
|
4
|
+
|
|
5
|
+
## Performance
|
|
6
|
+
|
|
7
|
+
- Use `shallowRef` / `shallowReactive` to optimize large objects
|
|
8
|
+
- Use virtual scrolling for large lists
|
|
9
|
+
- Avoid using `v-if` in `v-for` (extract to computed filtering)
|
|
10
|
+
- Use `defineAsyncComponent` to lazily load heavy components
|
|
11
|
+
- `v-for` must have a stable `:key`
|
|
12
|
+
- Routing components are loaded on demand using dynamic `import()`
|
|
13
|
+
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Vue 3 project structure and component standards
|
|
2
|
+
|
|
3
|
+
## Project structure
|
|
4
|
+
|
|
5
|
+
The following is the industry's best practice structure for medium and large Vue 3 projects, tailored according to the actual situation of the project:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
src/
|
|
9
|
+
├── app/ # Application entry and global configuration
|
|
10
|
+
│ ├── App.vue # Root component
|
|
11
|
+
│ ├── main.ts # Application startup entrance
|
|
12
|
+
│ └── router.ts # Routing instance and configuration
|
|
13
|
+
│
|
|
14
|
+
├── pages/ # Page components (one-to-one correspondence with routing)
|
|
15
|
+
│ ├── Dashboard/
|
|
16
|
+
│ │ ├── DashboardPage.vue
|
|
17
|
+
│ │ ├── components/ # Page private components
|
|
18
|
+
│ │ └── composables/ # Page private composables
|
|
19
|
+
│ ├── UserList/
|
|
20
|
+
│ └── Settings/
|
|
21
|
+
│
|
|
22
|
+
├── layouts/ # Layout component
|
|
23
|
+
│ ├── MainLayout.vue # Main layout (sidebar + top bar + content area)
|
|
24
|
+
│ ├── AuthLayout.vue # Login/registration page layout
|
|
25
|
+
│ └── BlankLayout.vue # Blank layout (error page, etc.)
|
|
26
|
+
│
|
|
27
|
+
├── features/ # Function modules (divided by business areas)
|
|
28
|
+
│ ├── auth/
|
|
29
|
+
│ │ ├── components/ # Module components
|
|
30
|
+
│ │ ├── composables/ # module composables
|
|
31
|
+
│ │ ├── api.ts # Module API call
|
|
32
|
+
│ │ ├── types.ts # Module type definition
|
|
33
|
+
│ │ ├── constants.ts # Module constants
|
|
34
|
+
│ │ └── index.ts # Module publicly exported
|
|
35
|
+
│ └── order/
|
|
36
|
+
│
|
|
37
|
+
├── components/ # Globally shared UI components
|
|
38
|
+
│ ├── AppButton/
|
|
39
|
+
│ │ ├── AppButton.vue
|
|
40
|
+
│ │ └── __tests__/
|
|
41
|
+
│ ├── AppModal/
|
|
42
|
+
│ ├── AppForm/
|
|
43
|
+
│ └── AppErrorBoundary/
|
|
44
|
+
│
|
|
45
|
+
├── composables/ # Global shared composables
|
|
46
|
+
│ ├── useAuth.ts
|
|
47
|
+
│ ├── useDebounce.ts
|
|
48
|
+
│ └── useMediaQuery.ts
|
|
49
|
+
│
|
|
50
|
+
├── services/ # API base layer
|
|
51
|
+
│ ├── request.ts # Axios/fetch instance and interceptor
|
|
52
|
+
│ └── endpoints/ # API endpoint definition (such as split by field)
|
|
53
|
+
│
|
|
54
|
+
├── stores/ # Pinia status management
|
|
55
|
+
│ ├── authStore.ts
|
|
56
|
+
│ └── uiStore.ts
|
|
57
|
+
│
|
|
58
|
+
├── locales/ # International language pack
|
|
59
|
+
│ ├── zh-CN.json # Simplified Chinese
|
|
60
|
+
│ ├── en-US.json # English
|
|
61
|
+
│ └── index.ts # i18n instance initialization (vue-i18n)
|
|
62
|
+
│
|
|
63
|
+
├── assets/ # Static resources
|
|
64
|
+
│ ├── images/ # Pictures (PNG, JPG, WebP)
|
|
65
|
+
│ ├── icons/ # SVG icon
|
|
66
|
+
│ └── fonts/ # Custom fonts
|
|
67
|
+
│
|
|
68
|
+
├── config/ # Application configuration
|
|
69
|
+
│ ├── env.ts # Typed encapsulation of environment variables
|
|
70
|
+
│ └── features.ts # Feature Flags Management
|
|
71
|
+
│
|
|
72
|
+
├── types/ # Global shared types
|
|
73
|
+
│ ├── api.ts # API response/request common type
|
|
74
|
+
│ ├── models.ts #Business entity type
|
|
75
|
+
│ └── global.d.ts # Global type extension (component type, module declaration, etc.)
|
|
76
|
+
│
|
|
77
|
+
├── utils/ # Pure utility function
|
|
78
|
+
│ ├── format.ts # Date, number, currency formatting
|
|
79
|
+
│ ├── validators.ts # Form validation rules
|
|
80
|
+
│ └── storage.ts # LocalStorage / SessionStorage package
|
|
81
|
+
│
|
|
82
|
+
├── directives/ # Custom directives
|
|
83
|
+
│ ├── vPermission.ts # Permission command
|
|
84
|
+
│ └── vClickOutside.ts # Click outside to close
|
|
85
|
+
│
|
|
86
|
+
├── plugins/ # Vue plug-in registration
|
|
87
|
+
│ ├── i18n.ts # vue-i18n plug-in configuration
|
|
88
|
+
│ └── index.ts # Plug-in unified registration entrance
|
|
89
|
+
│
|
|
90
|
+
├── styles/ # Global styles and themes
|
|
91
|
+
│ ├── global.css # Global basic style (reset/normalize)
|
|
92
|
+
│ ├── variables.css # CSS variables (color, spacing, font size)
|
|
93
|
+
│ ├── breakpoints.ts # Responsive breakpoint constants
|
|
94
|
+
│ └── themes/ # theme definition
|
|
95
|
+
│ ├── light.css # Light theme variable
|
|
96
|
+
│ ├── dark.css # Dark theme variable
|
|
97
|
+
│ └── index.ts # theme switching logic
|
|
98
|
+
│
|
|
99
|
+
└── constants/ # Global constants
|
|
100
|
+
├── routes.ts #Routing path constants
|
|
101
|
+
└── config.ts #Business constants (paging size, timeout, etc.)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Key Principles
|
|
105
|
+
|
|
106
|
+
- `pages/` does route mapping and layout combination without putting business logic
|
|
107
|
+
- `layouts/` defines the page skeleton (sidebar, top bar, breadcrumbs), referenced by the `component` of the routing configuration
|
|
108
|
+
- `features/` is divided by business areas, self-contained within the module (components + composables + api + types)
|
|
109
|
+
- `components/` only contains common components without business coupling and can be reused across projects
|
|
110
|
+
- `composables/` only places common logic (anti-shake, media query, etc.), and business composables are placed in the corresponding feature
|
|
111
|
+
- `locales/` stores language pack JSON files, use `$t('key')` in the template instead of hard-coded copy
|
|
112
|
+
- `assets/` stores static resources, SVG is preferred for icons, and WebP/AVIF is preferred for images.
|
|
113
|
+
- `config/` encapsulates environment variables and Feature Flags, prohibiting direct reading of `import.meta.env` in components
|
|
114
|
+
- `styles/themes/` implements theme switching through CSS variables. Variables are referenced in components instead of hard-coded colors.
|
|
115
|
+
- Each module controls the public API through `index.ts` to avoid deep path imports
|
|
116
|
+
|
|
117
|
+
## Component design specifications
|
|
118
|
+
|
|
119
|
+
- Use `<script setup lang="ts">`
|
|
120
|
+
- Explicitly use `defineProps` / `defineEmits` with accompanying types
|
|
121
|
+
- Reusable logic is first extracted to composables
|
|
122
|
+
- Keep the template readable and avoid too deep nesting of conditions
|
|
123
|
+
- Prefer using computed properties instead of repeatedly maintaining state
|
|
124
|
+
- Avoid building large single components; **single file size** see `templates/shared/rules/fec-vue.md` "**component file size**" (approximately 300 lines or less, more than 500 lines or too complex to separate sub-components and Composables)
|
|
125
|
+
- Prioritize the use of strongly typed props, emits and exposed methods
|
|
126
|
+
- Follow the file and directory naming conventions of the warehouse
|
|
127
|
+
- Prioritize reuse of existing UI components and tokens
|
|
128
|
+
|
|
129
|
+
### Component layering
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
Pages → Route mapping, layout combination
|
|
133
|
+
└── Container components (Containers) → Data acquisition, status orchestration
|
|
134
|
+
└── Business components (Features) → Domain logic display
|
|
135
|
+
└── Universal Component (UI) → Pure display, no business coupling
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Comment specifications
|
|
139
|
+
|
|
140
|
+
- **Prefer using Chinese**: When explaining "why this is done", business constraints, boundary conditions, and non-obvious trade-offs, give priority to writing comments in Chinese to make it easier for the team and business parties to read.
|
|
141
|
+
- **Exception when consistent with the code language**: When connecting third-party protocol field names, HTTP headers, and English terms in specifications, English proper nouns can be retained in the comments, and Chinese and English descriptions can be given when necessary.
|
|
142
|
+
- **Less but more precise**: Can express clear logic through clear naming and types without writing nonsense comments; complex branches, temporary compatibility, and performance trade-offs must be clearly stated.
|
|
143
|
+
- **Public API**: Composable or module external contracts can use JSDoc (`@param` / `@returns` / `@example`). The instructions can be in Chinese, unless the warehouse requires English.
|
|
144
|
+
|
|
145
|
+
## TypeScript Specification
|
|
146
|
+
|
|
147
|
+
Common TypeScript project rules are taken care of by `fec-typescript-project-standard`, including `tsconfig`, strictness, DTO / view model boundaries, `unknown` narrowing, public API types, declared artifacts, and type tests.
|
|
148
|
+
|
|
149
|
+
The Vue specification only supplements SFC, Props / Emits, exposed methods, Provide / Inject and composable reactive types; complex type modeling or cross-framework type contracts are first offloaded to `fec-typescript-project-standard`.
|
|
150
|
+
|
|
151
|
+
### Vue 3 project supplementary conventions
|
|
152
|
+
|
|
153
|
+
```vue
|
|
154
|
+
<script setup lang="ts">
|
|
155
|
+
interface Props {
|
|
156
|
+
title: string;
|
|
157
|
+
items: Item[];
|
|
158
|
+
loading?: boolean;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
interface Emits {
|
|
162
|
+
(e: "select", item: Item): void;
|
|
163
|
+
(e: "delete", id: string): void;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
167
|
+
loading: false,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
const emit = defineEmits<Emits>();
|
|
171
|
+
</script>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
- Props and Emits are defined using the TypeScript interface
|
|
175
|
+
- Use `withDefaults` to set default values
|
|
176
|
+
- `defineExpose` exposed methods must have type constraints
|
|
177
|
+
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Vue 3 state, API, and quality patterns
|
|
2
|
+
|
|
3
|
+
## Status Management (Pinia)
|
|
4
|
+
|
|
5
|
+
| Status type | Recommended solution |
|
|
6
|
+
| ------------------ | ----------------------------- |
|
|
7
|
+
| Temporary UI state within the component | `ref` / `reactive` |
|
|
8
|
+
| Sharing business status across components | Pinia store |
|
|
9
|
+
| Server-side data cache | VueQuery / Custom composable |
|
|
10
|
+
| URL driver status | Route parameters / `useRoute().query` |
|
|
11
|
+
| Form Status | VeeValidate / FormKit |
|
|
12
|
+
|
|
13
|
+
### Pinia Store Specifications
|
|
14
|
+
|
|
15
|
+
Using Composition API style (`setup store`):
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// stores/authStore.ts
|
|
19
|
+
export const useAuthStore = defineStore("auth", () => {
|
|
20
|
+
const user = ref<User | null>(null);
|
|
21
|
+
const token = ref<string | null>(localStorage.getItem("token"));
|
|
22
|
+
|
|
23
|
+
const isLoggedIn = computed(() => !!token.value);
|
|
24
|
+
|
|
25
|
+
async function login(credentials: LoginParams) {
|
|
26
|
+
const res = await authApi.login(credentials);
|
|
27
|
+
user.value = res.user;
|
|
28
|
+
token.value = res.token;
|
|
29
|
+
localStorage.setItem("token", res.token);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function logout() {
|
|
33
|
+
user.value = null;
|
|
34
|
+
token.value = null;
|
|
35
|
+
localStorage.removeItem("token");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { user: readonly(user), isLoggedIn, login, logout };
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Store Principles
|
|
43
|
+
|
|
44
|
+
- Each store has a single responsibility and is split by area.
|
|
45
|
+
- Expose the status of `readonly` to the outside world and modify it through action
|
|
46
|
+
- Do not store UI temporary states (modal switches, form inputs, etc.) in the store
|
|
47
|
+
- Server-side data is first managed by the request library rather than manually stored in the store
|
|
48
|
+
|
|
49
|
+
## API layer specification
|
|
50
|
+
|
|
51
|
+
### Request instance
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
// services/request.ts
|
|
55
|
+
const request = axios.create({
|
|
56
|
+
baseURL: import.meta.env.VITE_API_BASE_URL,
|
|
57
|
+
timeout: 10000,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
request.interceptors.request.use((config) => {
|
|
61
|
+
const authStore = useAuthStore();
|
|
62
|
+
if (authStore.token) {
|
|
63
|
+
config.headers.Authorization = `Bearer ${authStore.token}`;
|
|
64
|
+
}
|
|
65
|
+
return config;
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
request.interceptors.response.use(
|
|
69
|
+
(res) => res.data,
|
|
70
|
+
(error) => {
|
|
71
|
+
if (error.response?.status === 401) {
|
|
72
|
+
const authStore = useAuthStore();
|
|
73
|
+
authStore.logout();
|
|
74
|
+
router.push({ name: "Login" });
|
|
75
|
+
}
|
|
76
|
+
return Promise.reject(normalizeError(error));
|
|
77
|
+
},
|
|
78
|
+
);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### API functions
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
// features/user/api.ts
|
|
85
|
+
export function getUserList(
|
|
86
|
+
params: UserQueryParams,
|
|
87
|
+
): Promise<PageResult<User>> {
|
|
88
|
+
return request.get("/users", { params });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function updateUser(id: string, data: UpdateUserDTO): Promise<User> {
|
|
92
|
+
return request.put(`/users/${id}`, data);
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- API functions are organized by feature instead of all being piled in one file
|
|
97
|
+
- Request parameters and responses have type constraints
|
|
98
|
+
- The interceptor handles authentication and error formatting uniformly
|
|
99
|
+
|
|
100
|
+
## Error handling
|
|
101
|
+
|
|
102
|
+
### Global error capture
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
// main.ts
|
|
106
|
+
app.config.errorHandler = (err, instance, info) => {
|
|
107
|
+
reportError(err, { component: instance?.$options.name, info });
|
|
108
|
+
};
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Component level errors
|
|
112
|
+
|
|
113
|
+
- Use `onErrorCaptured` to capture child component errors in the parent component
|
|
114
|
+
- Failed data requests must have user-visible prompts and retry mechanisms
|
|
115
|
+
- Don't swallow errors (empty catch block)
|
|
116
|
+
|
|
117
|
+
## Custom directive
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// directives/vPermission.ts
|
|
121
|
+
export const vPermission: Directive<HTMLElement, string> = {
|
|
122
|
+
mounted(el, binding) {
|
|
123
|
+
const authStore = useAuthStore();
|
|
124
|
+
if (!authStore.hasPermission(binding.value)) {
|
|
125
|
+
el.parentNode?.removeChild(el);
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
- The directive only handles operations at the DOM level
|
|
132
|
+
- Do not put business logic in instructions
|
|
133
|
+
- Implement the `updated` hook when responsive updates are required
|
|
134
|
+
|
|
135
|
+
## Style specification
|
|
136
|
+
|
|
137
|
+
- Use `<style scoped>` to isolate styles
|
|
138
|
+
- Depth selector uses `:deep()` instead of the deprecated `::v-deep`
|
|
139
|
+
- Be consistent with the existing style system of the project
|
|
140
|
+
- Dynamic styles preferentially use `:class` / `:style` binding
|
|
141
|
+
- Complex theme switching using CSS variables
|
|
142
|
+
- Theme/global variables are managed through CSS variables or Token
|
|
143
|
+
|
|
144
|
+
## Test specifications
|
|
145
|
+
|
|
146
|
+
### Must be tested
|
|
147
|
+
|
|
148
|
+
- Core interaction behaviors (click, input, submit)
|
|
149
|
+
- Conditional rendering (loading/error/empty/data)
|
|
150
|
+
- Emits trigger and payload
|
|
151
|
+
- Return value of key composables
|
|
152
|
+
- Pinia store actions and getters
|
|
153
|
+
|
|
154
|
+
### Test style
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
describe("UserForm", () => {
|
|
158
|
+
it("should emit submit with valid data", async () => {
|
|
159
|
+
const wrapper = mount(UserForm);
|
|
160
|
+
|
|
161
|
+
await wrapper.find('[data-testid="username"]').setValue("test");
|
|
162
|
+
await wrapper.find("form").trigger("submit");
|
|
163
|
+
|
|
164
|
+
expect(wrapper.emitted("submit")?.[0]).toEqual([{ username: "test" }]);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it("should show validation error on empty submit", async () => {
|
|
168
|
+
const wrapper = mount(UserForm);
|
|
169
|
+
await wrapper.find("form").trigger("submit");
|
|
170
|
+
expect(wrapper.text()).toContain("Username cannot be empty");
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Store Test
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
describe("authStore", () => {
|
|
179
|
+
beforeEach(() => setActivePinia(createPinia()));
|
|
180
|
+
|
|
181
|
+
it("should login and set user", async () => {
|
|
182
|
+
const store = useAuthStore();
|
|
183
|
+
await store.login({ username: "admin", password: "pass" });
|
|
184
|
+
expect(store.isLoggedIn).toBe(true);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
## Anti-pattern
|
|
191
|
+
|
|
192
|
+
- Inline large sections of business logic in template-driven components
|
|
193
|
+
- Used wide range watcher instead of computed
|
|
194
|
+
- The event payload is unclear
|
|
195
|
+
- Mix raw API calls directly into pure presentation components
|
|
196
|
+
- ref and props have no type constraints
|
|
197
|
+
- Use `watch` + manual assignment to simulate computed
|
|
198
|
+
- Mixing unrelated responsibilities into a component
|
|
199
|
+
- Use large-scale global style coverage to solve local UI problems
|
|
200
|
+
- Push all status to Pinia store instead of managing it nearby
|
|
201
|
+
- Put business coupling components in `components/`
|
|
202
|
+
- Import directly from the deep path inside the feature, bypassing `index.ts`
|
|
203
|
+
|
|
204
|
+
## Output checklist
|
|
205
|
+
|
|
206
|
+
- [ ] The file structure is consistent with the project convention (pages/features/components are separated)
|
|
207
|
+
- [ ] Use `<script setup lang="ts">`
|
|
208
|
+
- [ ] Props / Emits type complete
|
|
209
|
+
- [ ] Whether explanatory comments should be given priority in Chinese and to the point
|
|
210
|
+
- [ ] Reusable logic has been extracted to composable
|
|
211
|
+
- [ ] Loading / Error / Empty status have been processed
|
|
212
|
+
- [ ] Routing components are loaded using dynamic import
|
|
213
|
+
- [ ] Reasonable status management plan (proximity principle)
|
|
214
|
+
- [ ] API calls have type constraints and unified error handling
|
|
215
|
+
- [ ] styles use scoped isolation
|
|
216
|
+
- [ ] Key behaviors are covered by tests
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fec-web-video-presentation
|
|
3
|
+
description: Use when turning an article, talk script, lesson, product demo, or narrated explanation into a recordable 16:9 web presentation with step-driven scenes, optional narration alignment, theme tokens, and screen-recording guidance; Chinese triggers include web video, dynamic demonstration, spoken script to video, screen-recordable demonstration, 16:9 demonstration.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Web video demonstration
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Convert articles, oral presentations, courses, product explanations or technology sharing into screen-recordable 16:9 web presentations. The product should be like a clickable video stage: each step carries a spoken rhythm, the visual design serves the content rhythm, and can be stably recorded using the browser.
|
|
11
|
+
|
|
12
|
+
## Procedure
|
|
13
|
+
|
|
14
|
+
1. Determine the input form
|
|
15
|
+
- When the user submits an article or long text, it is first split into a spoken draft and an outline.
|
|
16
|
+
- When the user broadcasts the manuscript to the ready-made script, the original order is retained and only the outline, chapters and steps are added.
|
|
17
|
+
- When the user only provides a topic but no content, first ask for materials, outlines or key points; do not make up the entire content for the user.
|
|
18
|
+
|
|
19
|
+
2. Generate a content plan
|
|
20
|
+
- Press [content-plan.md](references/content-plan.md) to output script and outline.
|
|
21
|
+
- The script determines the order of telling and each beat; the outline determines the chapters, steps, time estimates, screen information and material list.
|
|
22
|
+
- The outline only describes the content density and screen tasks, and does not write down the specific animation implementation in advance.
|
|
23
|
+
|
|
24
|
+
3. Align the demo system
|
|
25
|
+
- Choose a starter theme from [theme-system.md](references/theme-system.md) or [starter-themes.json](data/starter-themes.json), or redefine the token by project brand.
|
|
26
|
+
- Create a minimal Vite + React + TypeScript presentation skeleton using [create-video-presentation.mjs](scripts/create-video-presentation.mjs):
|
|
27
|
+
```bash
|
|
28
|
+
node skills/fec-web-video-presentation/scripts/create-video-presentation.mjs ./presentation --theme editorial-slate
|
|
29
|
+
```
|
|
30
|
+
- If you just want to preview optional themes or plan to write content:
|
|
31
|
+
```bash
|
|
32
|
+
node skills/fec-web-video-presentation/scripts/create-video-presentation.mjs --list-themes
|
|
33
|
+
node skills/fec-web-video-presentation/scripts/create-video-presentation.mjs --dry-run ./presentation --theme editorial-slate
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
4. Implementation Chapter
|
|
37
|
+
- Each chapter is implemented as [chapter-craft.md](references/chapter-craft.md).
|
|
38
|
+
- Each step occupies the stage exclusively, and the screen only carries the core content that the user needs to understand for the current spoken beat.
|
|
39
|
+
- Chapters must have visible visual presentation, graphics, layout changes, status progression, or data/media presentation; do not deliver text-only slides.
|
|
40
|
+
- The first chapter should be completed and accepted first as the style anchor before continuing with other chapters.
|
|
41
|
+
|
|
42
|
+
5. Screen recording and audio
|
|
43
|
+
- Use [recording-and-audio.md](references/recording-and-audio.md) to check stage scale, navigation, recording mode and optional audio synchronization.
|
|
44
|
+
- Audio can come from the user's existing files, host tools, or the project's own TTS process; this skill is not bound to a specific TTS provider.
|
|
45
|
+
|
|
46
|
+
6. Pre-delivery verification
|
|
47
|
+
- Open the demo in a browser to check 16:9 zoom, keyboard/click advancement, step count, text overflow, hidden controls, console errors, and screen recording path.
|
|
48
|
+
- If the number, order or step number of chapters changes, reset the local persistence key or clear the old progress to avoid reverting to a non-existent step.
|
|
49
|
+
|
|
50
|
+
## Constraints
|
|
51
|
+
|
|
52
|
+
- Do not turn web videos into ordinary marketing landing pages, static PPT or long scrolling articles.
|
|
53
|
+
- Do not copy the reference project's themes, template chapters, long prompts, or scaffolding implementations; generate an original skeleton based on the current project.
|
|
54
|
+
- Do not lock each animation name in the outline stage; animations should be driven by chapter content relationships.
|
|
55
|
+
- Do not use fake data, fake quotes, fake product screenshots or uncheckable media to fill the screen.
|
|
56
|
+
- Do not let controls, page numbers, explanatory text or debugging panels pollute the screen recording; necessary controls are hidden or weakened by default.
|
|
57
|
+
- No outside-project vendor conventions are introduced for audio synthesis; TTS is an optional adaptation layer.
|
|
58
|
+
|
|
59
|
+
## Expected Output
|
|
60
|
+
|
|
61
|
+
Output script, outline, runnable 16:9 web page demonstration skeleton or chapter implementation, and describe the theme, number of chapters/steps, screen recording method, optional audio path and verification results. The final presentation should be able to be progressed steadily through clicks or keyboards, the visual rhythm should fit the spoken content, and it should be suitable for browser screen recording.
|