@skyroc/scripts 2.5.0 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/cli.mjs +2 -2
- package/dist/{config-BKkdncJS.mjs → config-Cj9IzlRz.mjs} +105 -5
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/templates/admin/package.json +5 -3
- package/templates/admin/src/assets/svg-icon/logo.svg +2 -14
- package/templates/admin/src/features/router/routeTree.gen.ts +71 -1
- package/templates/admin/src/pages/(auth)/login/code-login.tsx +79 -0
- package/templates/admin/src/pages/(auth)/login/index.tsx +22 -1
- package/templates/admin/src/pages/(auth)/login/layout.tsx +25 -23
- package/templates/admin/src/pages/(auth)/login/modules/Header.tsx +25 -0
- package/templates/admin/src/pages/(auth)/login/register.tsx +86 -0
- package/templates/admin/src/pages/(auth)/login/reset-pwd.tsx +73 -0
- package/templates/admin/uno.config.ts +1 -1
- package/templates/admin-root/.agents/skills/component-doc/SKILL.md +304 -0
- package/templates/admin-root/.agents/skills/component-refactoring/SKILL.md +483 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/complexity-patterns.md +493 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/component-splitting.md +477 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/hook-extraction.md +317 -0
- package/templates/admin-root/.agents/skills/doc-coauthoring/SKILL.md +375 -0
- package/templates/admin-root/.agents/skills/feature-dev/SKILL.md +78 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/SKILL.md +73 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/business-logic.md +15 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/code-quality.md +44 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/performance.md +45 -0
- package/templates/admin-root/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/admin-root/.agents/skills/frontend-design/SKILL.md +42 -0
- package/templates/admin-root/.agents/skills/frontend-testing/SKILL.md +325 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/component-test.template.tsx +293 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/hook-test.template.ts +207 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/utility-test.template.ts +154 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/async-testing.md +345 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/checklist.md +205 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/common-patterns.md +449 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/domain-components.md +523 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/mocking.md +512 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/workflow.md +269 -0
- package/templates/admin-root/.agents/skills/migrate-nativewind-to-uniwind/SKILL.md +734 -0
- package/templates/admin-root/.agents/skills/migrate-oxfmt/SKILL.md +202 -0
- package/templates/admin-root/.agents/skills/migrate-oxlint/SKILL.md +196 -0
- package/templates/admin-root/.agents/skills/native-component-doc/SKILL.md +245 -0
- package/templates/admin-root/.agents/skills/senior-frontend/SKILL.md +209 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/frontend_best_practices.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/react_patterns.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/component_generator.py +114 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
- package/templates/admin-root/.agents/skills/skill-creator/SKILL.md +355 -0
- package/templates/admin-root/.agents/skills/skill-creator/references/output-patterns.md +86 -0
- package/templates/admin-root/.agents/skills/skill-creator/references/workflows.md +28 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/init_skill.py +300 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/quick_validate.py +97 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/SKILL.md +163 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/acceptance-checklist.md +75 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/evidence-order.md +109 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prd-rules.md +103 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prototype-rules.md +85 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs +144 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/admin-page.html +771 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/prd.md +182 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/SKILL.md +292 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/templates/admin-root/.agents/skills/uniwind/SKILL.md +64 -0
- package/templates/admin-root/.agents/skills/uniwind/references/component-bindings.md +338 -0
- package/templates/admin-root/.agents/skills/uniwind/references/css-and-utilities.md +325 -0
- package/templates/admin-root/.agents/skills/uniwind/references/integrations.md +75 -0
- package/templates/admin-root/.agents/skills/uniwind/references/pro.md +354 -0
- package/templates/admin-root/.agents/skills/uniwind/references/setup.md +144 -0
- package/templates/admin-root/.agents/skills/uniwind/references/styling-patterns.md +237 -0
- package/templates/admin-root/.agents/skills/uniwind/references/theming.md +309 -0
- package/templates/admin-root/.agents/skills/uniwind/references/troubleshooting.md +179 -0
- package/templates/admin-root/.agents/skills/uniwind/references/variants-and-selectors.md +224 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/admin-root/.claude/settings.json +5 -0
- package/templates/admin-root/.claude/skills/component-doc/SKILL.md +304 -0
- package/templates/admin-root/.claude/skills/component-refactoring/SKILL.md +483 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/complexity-patterns.md +493 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/component-splitting.md +477 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/hook-extraction.md +317 -0
- package/templates/admin-root/.claude/skills/doc-coauthoring/SKILL.md +375 -0
- package/templates/admin-root/.claude/skills/feature-dev/SKILL.md +78 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/SKILL.md +73 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/business-logic.md +15 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/code-quality.md +44 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/performance.md +45 -0
- package/templates/admin-root/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/admin-root/.claude/skills/frontend-design/SKILL.md +42 -0
- package/templates/admin-root/.claude/skills/frontend-testing/SKILL.md +325 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/component-test.template.tsx +293 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/hook-test.template.ts +207 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/utility-test.template.ts +154 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/async-testing.md +345 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/checklist.md +205 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/common-patterns.md +449 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/domain-components.md +523 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/mocking.md +512 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/workflow.md +269 -0
- package/templates/admin-root/.claude/skills/migrate-nativewind-to-uniwind +1 -0
- package/templates/admin-root/.claude/skills/native-component-doc/SKILL.md +245 -0
- package/templates/admin-root/.claude/skills/senior-frontend/SKILL.md +209 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/frontend_best_practices.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/react_patterns.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/component_generator.py +114 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
- package/templates/admin-root/.claude/skills/skill-creator/SKILL.md +355 -0
- package/templates/admin-root/.claude/skills/skill-creator/references/output-patterns.md +86 -0
- package/templates/admin-root/.claude/skills/skill-creator/references/workflows.md +28 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/init_skill.py +300 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/quick_validate.py +97 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/SKILL.md +386 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/data +1 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/scripts +1 -0
- package/templates/admin-root/.claude/skills/uniwind +1 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/admin-root/.cursor/settings.json +10 -0
- package/templates/admin-root/.editorconfig +19 -0
- package/templates/admin-root/.gitattributes +16 -0
- package/templates/admin-root/.oxfmtrc.json +35 -0
- package/templates/admin-root/AGENTS.md +297 -0
- package/templates/admin-root/CLAUDE.md +1 -0
- package/templates/admin-root/skills-lock.json +27 -0
- package/templates/admin-root.manifest.json +1317 -0
- package/templates/admin-shell/theme/antd/AntdProvider.tsx +1 -0
- package/templates/admin-shell/theme/antd/shared.ts +3 -3
- package/templates/admin-shell/theme/antd-algorithm/algorithm/dark/colors.ts +3 -3
- package/templates/admin-shell/theme/antd-algorithm/algorithm/default/colors.ts +1 -1
- package/templates/admin-shell/theme/presets/default.json +1 -1
- package/templates/admin.meta.json +10 -6
- package/LICENSE +0 -21
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FlipText } from '@shell/ui/compose';
|
|
2
|
+
import { ThemeSchemaSwitch, useSettingsTheme } from '@shell/theme';
|
|
3
|
+
|
|
4
|
+
import SystemLogo from '@/components/SystemLogo';
|
|
5
|
+
import { LangSwitch } from '@shell/i18n';
|
|
6
|
+
|
|
7
|
+
const Header = memo(() => {
|
|
8
|
+
const { t } = useTranslation();
|
|
9
|
+
const { header } = useSettingsTheme();
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<header className="flex-y-center justify-between">
|
|
13
|
+
<SystemLogo className="size-5xl text-primary lt-sm:size-4xl" />
|
|
14
|
+
|
|
15
|
+
<FlipText className="text-3xl text-primary font-500 lt-sm:text-2xl" word={t('system.title')} />
|
|
16
|
+
|
|
17
|
+
<div className="i-flex-col">
|
|
18
|
+
<ThemeSchemaSwitch className="text-xl lt-sm:text-lg" showTooltip={false} />
|
|
19
|
+
<LangSwitch showTooltip={false} visible={header.multilingual.visible} />
|
|
20
|
+
</div>
|
|
21
|
+
</header>
|
|
22
|
+
);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export default Header;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { useCaptcha } from '@skyroc/hooks';
|
|
2
|
+
import { ButtonLink } from '@shell/ui/antd';
|
|
3
|
+
import { REG_PHONE } from '@skyroc/utils';
|
|
4
|
+
import { createFileRoute } from '@tanstack/react-router';
|
|
5
|
+
|
|
6
|
+
import { useAuthFormRules } from '@/features/auth/use-auth-form-rules';
|
|
7
|
+
|
|
8
|
+
interface FormModel {
|
|
9
|
+
code: string;
|
|
10
|
+
confirmPassword: string;
|
|
11
|
+
password: string;
|
|
12
|
+
phone: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const Register = () => {
|
|
16
|
+
const { t } = useTranslation();
|
|
17
|
+
|
|
18
|
+
const { getCaptcha, isCounting, label, loading } = useCaptcha(t('page.login.codeLogin.getCode'), getCountingLabel);
|
|
19
|
+
|
|
20
|
+
const [form] = AForm.useForm<FormModel>();
|
|
21
|
+
|
|
22
|
+
const phone = AForm.useWatch('phone', form);
|
|
23
|
+
|
|
24
|
+
const isValidPhone = REG_PHONE.test(phone);
|
|
25
|
+
|
|
26
|
+
const { createConfirmPwdRule, formRules } = useAuthFormRules();
|
|
27
|
+
|
|
28
|
+
function handleSubmit(_params: FormModel) {
|
|
29
|
+
// request to reset password
|
|
30
|
+
showSuccessMessage(t('page.login.common.validateSuccess'));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getCountingLabel(count: number) {
|
|
34
|
+
return t('page.login.codeLogin.reGetCode', { time: count });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function sendCaptcha() {
|
|
38
|
+
getCaptcha(phone);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
useKeyPress('enter', () => {
|
|
42
|
+
form.submit();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<>
|
|
47
|
+
<h3 className="text-18px text-primary font-medium">{t('page.login.register.title')}</h3>
|
|
48
|
+
<AForm className="pt-24px" form={form} onFinish={handleSubmit}>
|
|
49
|
+
<AForm.Item name="phone" rules={formRules.phone}>
|
|
50
|
+
<AInput placeholder={t('page.login.common.phonePlaceholder')} size="large" />
|
|
51
|
+
</AForm.Item>
|
|
52
|
+
<AForm.Item name="code" rules={formRules.code}>
|
|
53
|
+
<div className="w-full flex-y-center gap-16px">
|
|
54
|
+
<AInput placeholder={t('page.login.common.codePlaceholder')} size="large" />
|
|
55
|
+
<AButton disabled={!isValidPhone || isCounting} loading={loading} size="large" onClick={sendCaptcha}>
|
|
56
|
+
{label}
|
|
57
|
+
</AButton>
|
|
58
|
+
</div>
|
|
59
|
+
</AForm.Item>
|
|
60
|
+
<AForm.Item name="password" rules={formRules.pwd}>
|
|
61
|
+
<AInput placeholder={t('page.login.common.passwordPlaceholder')} />
|
|
62
|
+
</AForm.Item>
|
|
63
|
+
<AForm.Item name="confirmPassword" rules={createConfirmPwdRule(form)}>
|
|
64
|
+
<AInput placeholder={t('page.login.common.confirmPasswordPlaceholder')} size="large" />
|
|
65
|
+
</AForm.Item>
|
|
66
|
+
<ASpace className="w-full" orientation="vertical" size={18}>
|
|
67
|
+
<AButton block htmlType="submit" shape="round" size="large" type="primary">
|
|
68
|
+
{t('common.confirm')}
|
|
69
|
+
</AButton>
|
|
70
|
+
|
|
71
|
+
<ButtonLink block shape="round" size="large" to="..">
|
|
72
|
+
{t('page.login.common.back')}
|
|
73
|
+
</ButtonLink>
|
|
74
|
+
</ASpace>
|
|
75
|
+
</AForm>
|
|
76
|
+
</>
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const Route = createFileRoute('/(auth)/login/register')({
|
|
81
|
+
component: Register,
|
|
82
|
+
staticData: {
|
|
83
|
+
title: 'login_register',
|
|
84
|
+
i18nKey: 'route.login_register'
|
|
85
|
+
}
|
|
86
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ButtonLink } from '@shell/ui/antd';
|
|
2
|
+
import { createFileRoute } from '@tanstack/react-router';
|
|
3
|
+
|
|
4
|
+
import { useAuthFormRules } from '@/features/auth/use-auth-form-rules';
|
|
5
|
+
|
|
6
|
+
interface FormModel {
|
|
7
|
+
code: string;
|
|
8
|
+
confirmPassword: string;
|
|
9
|
+
password: string;
|
|
10
|
+
phone: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const ResetPwd = () => {
|
|
14
|
+
const { t } = useTranslation();
|
|
15
|
+
|
|
16
|
+
const [form] = AForm.useForm<FormModel>();
|
|
17
|
+
|
|
18
|
+
const { createConfirmPwdRule, formRules } = useAuthFormRules();
|
|
19
|
+
|
|
20
|
+
function handleSubmit(_params: FormModel) {
|
|
21
|
+
// request to reset password
|
|
22
|
+
showSuccessMessage(t('page.login.common.validateSuccess'));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
useKeyPress('enter', () => {
|
|
26
|
+
form.submit();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<>
|
|
31
|
+
<h3 className="text-18px text-primary font-medium">{t('page.login.register.title')}</h3>
|
|
32
|
+
<AForm className="pt-24px" form={form} onFinish={handleSubmit}>
|
|
33
|
+
<AForm.Item name="phone" rules={formRules.phone}>
|
|
34
|
+
<AInput placeholder={t('page.login.common.phonePlaceholder')} size="large" />
|
|
35
|
+
</AForm.Item>
|
|
36
|
+
<AForm.Item name="code" rules={formRules.code}>
|
|
37
|
+
<AInput placeholder={t('page.login.common.codePlaceholder')} size="large" />
|
|
38
|
+
</AForm.Item>
|
|
39
|
+
<AForm.Item name="password" rules={formRules.pwd}>
|
|
40
|
+
<AInput.Password
|
|
41
|
+
autoComplete="password"
|
|
42
|
+
placeholder={t('page.login.common.passwordPlaceholder')}
|
|
43
|
+
size="large"
|
|
44
|
+
/>
|
|
45
|
+
</AForm.Item>
|
|
46
|
+
<AForm.Item name="confirmPassword" rules={createConfirmPwdRule(form)}>
|
|
47
|
+
<AInput.Password
|
|
48
|
+
autoComplete="confirm-password"
|
|
49
|
+
placeholder={t('page.login.common.confirmPasswordPlaceholder')}
|
|
50
|
+
size="large"
|
|
51
|
+
/>
|
|
52
|
+
</AForm.Item>
|
|
53
|
+
<ASpace className="w-full" orientation="vertical" size={18}>
|
|
54
|
+
<AButton block htmlType="submit" shape="round" size="large" type="primary">
|
|
55
|
+
{t('common.confirm')}
|
|
56
|
+
</AButton>
|
|
57
|
+
|
|
58
|
+
<ButtonLink block shape="round" size="large" to="..">
|
|
59
|
+
{t('page.login.common.back')}
|
|
60
|
+
</ButtonLink>
|
|
61
|
+
</ASpace>
|
|
62
|
+
</AForm>
|
|
63
|
+
</>
|
|
64
|
+
);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const Route = createFileRoute('/(auth)/login/reset-pwd')({
|
|
68
|
+
component: ResetPwd,
|
|
69
|
+
staticData: {
|
|
70
|
+
title: 'login_reset-pwd',
|
|
71
|
+
i18nKey: 'route.login_reset-pwd'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: component-doc
|
|
3
|
+
description: 为 @skyroc/web-ui 组件编写文档。当用户说出组件名(如 Button、Accordion、AlertDialog)时触发。自动定位组件源码、playground demo、已有文档,按照项目文档规范生成或更新 MDX 文档。
|
|
4
|
+
argument-hint: 组件名,如 Button、Accordion、AlertDialog
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Component Documentation Workflow
|
|
8
|
+
|
|
9
|
+
为 `@skyroc/web-ui` 组件库编写文档的专用工作流。
|
|
10
|
+
|
|
11
|
+
## 文件定位规则
|
|
12
|
+
|
|
13
|
+
给定组件名 `$COMPONENT`(用户输入,如 `Button`),将其转为 kebab-case `$slug`(如 `button`),然后按以下路径查找:
|
|
14
|
+
|
|
15
|
+
| 用途 | 路径 |
|
|
16
|
+
|---|---|
|
|
17
|
+
| 组件源码 | `packages/web/ui/shadcn/src/components/$slug/` |
|
|
18
|
+
| Playground Demo | `apps/web-ui-playground/src/app/[locale]/(demo)/$slug/modules/` |
|
|
19
|
+
| 文档 MDX | `apps/web-ui-docs/content/docs/components/$slug.mdx` |
|
|
20
|
+
|
|
21
|
+
**文档基础设施文件**(不需要每次都读,但需要了解):
|
|
22
|
+
|
|
23
|
+
| 文件 | 作用 |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `apps/web-ui-docs/components/props-table.tsx` | `<PropsTable>` — API 属性表格 |
|
|
26
|
+
| `apps/web-ui-docs/components/type-table.tsx` | `<TypeTable>` + `<UnionType>` — 类型定义区 |
|
|
27
|
+
| `apps/web-ui-docs/components/type-anchor.tsx` | 类型链接解析(PascalCase 自定义类型 → 蓝色可点击锚点) |
|
|
28
|
+
| `apps/web-ui-docs/components/type-registry.ts` | 跨页面类型链接注册表 |
|
|
29
|
+
| `apps/web-ui-docs/components/demo/index.tsx` | `<Demo>` — 从 playground 加载 live demo |
|
|
30
|
+
| `apps/web-ui-docs/components/mdx.tsx` | MDX 组件注册(Demo / PropsTable / TypeTable / UnionType) |
|
|
31
|
+
|
|
32
|
+
## 执行流程
|
|
33
|
+
|
|
34
|
+
### Phase 1: 源码阅读与行为校验
|
|
35
|
+
|
|
36
|
+
1. 读取 `packages/web/ui/shadcn/src/components/$slug/` 下所有文件
|
|
37
|
+
- 重点关注:`index.ts`(导出)、`types.ts`(Props 定义)、`*-variants.ts`(样式变体)、主组件文件
|
|
38
|
+
2. 读取 `apps/web-ui-playground/src/app/[locale]/(demo)/$slug/modules/` 下所有 demo
|
|
39
|
+
- 如果目录不存在或 demo 数量不足以覆盖文档需要的功能章节,标记为"需创建 demo"
|
|
40
|
+
3. 如果 preset 包装器存在,读取 `packages/web/ui/shadcn/src/preset/$slug/` 了解预设封装和 `useComponentConfig` 集成
|
|
41
|
+
4. 如果已有文档 MDX,读取 `apps/web-ui-docs/content/docs/components/$slug.mdx`
|
|
42
|
+
5. 读取一个已完成的文档作为参考模板(优先 `alert.mdx`,其次 `button.mdx`)
|
|
43
|
+
|
|
44
|
+
#### 实现一致性校验(必须执行)
|
|
45
|
+
|
|
46
|
+
文档不是 API 想象稿,必须从 **源码、类型、demo、实际行为** 四者交叉验证。
|
|
47
|
+
|
|
48
|
+
写文档前必须同时检查:
|
|
49
|
+
|
|
50
|
+
- `types.ts` 声明了哪些 public props / types
|
|
51
|
+
- 主组件实际解构了哪些 props
|
|
52
|
+
- props 是否真的传递给对应子组件或底层库
|
|
53
|
+
- 默认值实际在哪里设置
|
|
54
|
+
- `classNames` / slot props / `size` / `variant` / `color` 等样式控制是否真的生效
|
|
55
|
+
- `index.ts` 实际导出了哪些组件和类型
|
|
56
|
+
|
|
57
|
+
如果发现 **类型/API 承诺** 与 **实现行为** 不一致:
|
|
58
|
+
|
|
59
|
+
1. 先明确指出这是实现问题或 API 语义不一致
|
|
60
|
+
2. 如果任务允许修改代码,应优先修实现或类型,而不是在文档里规避
|
|
61
|
+
3. 如果不能修改实现,必须在最终说明中列为风险/阻塞,并在文档中避免承诺未实现能力
|
|
62
|
+
4. 不允许只降低文档表述来掩盖实现 bug
|
|
63
|
+
|
|
64
|
+
典型例子:
|
|
65
|
+
|
|
66
|
+
- `BottomSheetProps.size` 声明为主组件尺寸,但主组件没有传给 `BottomSheetContent`:这是实现 bug,应提出或修复
|
|
67
|
+
- props 被解构但没有使用:不要在文档中承诺该能力已生效
|
|
68
|
+
- 类型继承了底层库 props,但封装组件覆盖或丢弃了其中一部分:以实际封装行为为准
|
|
69
|
+
|
|
70
|
+
### Phase 2: 文档编写
|
|
71
|
+
|
|
72
|
+
#### MDX 结构(必须遵循)
|
|
73
|
+
|
|
74
|
+
```mdx
|
|
75
|
+
---
|
|
76
|
+
title: $COMPONENT
|
|
77
|
+
description: 一句话描述组件用途
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
组件概述段落。
|
|
81
|
+
|
|
82
|
+
\`\`\`tsx
|
|
83
|
+
import { ... } from '@skyroc/web-ui';
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
## 何时使用
|
|
87
|
+
|
|
88
|
+
- 使用场景 1
|
|
89
|
+
- 使用场景 2
|
|
90
|
+
- 与相似组件的区分
|
|
91
|
+
|
|
92
|
+
## 功能章节 1(如"颜色"、"变体"、"尺寸"等)
|
|
93
|
+
|
|
94
|
+
说明文字 + 表格(可选)
|
|
95
|
+
|
|
96
|
+
<Demo src="@playground/$slug/modules/DemoName" />
|
|
97
|
+
|
|
98
|
+
\`\`\`tsx
|
|
99
|
+
// 内联代码作为 API 快速参考
|
|
100
|
+
<Component prop="value" />
|
|
101
|
+
\`\`\`
|
|
102
|
+
|
|
103
|
+
## 功能章节 N
|
|
104
|
+
|
|
105
|
+
...
|
|
106
|
+
|
|
107
|
+
## API
|
|
108
|
+
|
|
109
|
+
### $COMPONENT
|
|
110
|
+
|
|
111
|
+
通用属性参考说明。
|
|
112
|
+
|
|
113
|
+
<PropsTable data={[...]} />
|
|
114
|
+
|
|
115
|
+
### 子组件(如有)
|
|
116
|
+
|
|
117
|
+
<PropsTable data={[...]} />
|
|
118
|
+
|
|
119
|
+
## 类型
|
|
120
|
+
|
|
121
|
+
<TypeTable data={[...]} />
|
|
122
|
+
<UnionType name="..." description="..." type="..." />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### Demo + 内联代码的组合模式(必须遵循)
|
|
126
|
+
|
|
127
|
+
每个功能章节的示例由两部分组成,缺一不可:
|
|
128
|
+
|
|
129
|
+
1. **`<Demo>` 标签**(必须):引用 playground 源码,用户可在文档中看到交互式 live demo 和完整源码。
|
|
130
|
+
2. **内联代码块**(推荐):紧跟在 `<Demo>` 后面,提供简洁的 API 用法速查。
|
|
131
|
+
|
|
132
|
+
内联代码块的编写原则:
|
|
133
|
+
- 不需要完整组件结构,只展示关键 API 用法(最核心的 props 组合)
|
|
134
|
+
- Hooks 类的章节用 1-3 行代码展示调用签名即可
|
|
135
|
+
- 如果 Demo 本身已经足够简单直观,可以省略内联代码
|
|
136
|
+
- 纯展示类章节(如尺寸枚举、变体枚举)可以用表格代替内联代码
|
|
137
|
+
|
|
138
|
+
示例:
|
|
139
|
+
|
|
140
|
+
```mdx
|
|
141
|
+
## 受控模式
|
|
142
|
+
|
|
143
|
+
通过 `page` + `onPageChange` 实现受控分页。
|
|
144
|
+
|
|
145
|
+
<Demo src="@playground/pagination/modules/Controlled" />
|
|
146
|
+
|
|
147
|
+
\`\`\`tsx
|
|
148
|
+
const [page, setPage] = useState(1);
|
|
149
|
+
|
|
150
|
+
<Pagination
|
|
151
|
+
total={200}
|
|
152
|
+
itemsPerPage={10}
|
|
153
|
+
page={page}
|
|
154
|
+
onPageChange={setPage}
|
|
155
|
+
/>
|
|
156
|
+
\`\`\`
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### PropsTable 书写规则
|
|
160
|
+
|
|
161
|
+
- `type` 字段:短字面量联合类型必须直接内联,不要另起 PascalCase 类型名,也不要在 `## 类型` 区域写 `<UnionType>`。
|
|
162
|
+
- 典型需要内联的类型:
|
|
163
|
+
- 主题色:`"'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent'"`
|
|
164
|
+
- 尺寸:`"'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'"`
|
|
165
|
+
- 状态 / 方向 / 位置 / 形状等短联合:`"boolean | 'indeterminate'"`、`"'horizontal' | 'vertical'"`、`"'left' | 'right'"`、`"'square' | 'rounded'"`
|
|
166
|
+
- 对象类型、复杂派生类型、外部库大型类型、子组件 Props、classNames/slots 配置,使用 PascalCase 类型名引用。
|
|
167
|
+
- PascalCase 类型名由 `typeToReactNode` 自动渲染为蓝色可点击链接,跳转到当前页类型定义或 `type-registry.ts` 注册的跨页锚点。
|
|
168
|
+
- `default` 用字符串表示,如 `"'md'"`、`'false'`
|
|
169
|
+
- `required: true` 仅在属性必填时添加
|
|
170
|
+
|
|
171
|
+
#### 类型完整性规则(严格遵循)
|
|
172
|
+
|
|
173
|
+
**核心原则:PropsTable / TypeTable 中出现的每一个非内置 PascalCase 类型名,都必须在当前页 `## 类型` 区域有对应定义,或在 `type-registry.ts` 中注册了跨页面链接。不允许出现"引用了但未定义"的类型。**
|
|
174
|
+
|
|
175
|
+
检查清单(写完文档后逐项核对):
|
|
176
|
+
|
|
177
|
+
1. 遍历所有 `<PropsTable>` 的 `type` 字段,收集全部 PascalCase 类型名
|
|
178
|
+
2. 遍历所有 `<TypeTable>` 的 `fields[].type`,收集全部 PascalCase 类型名
|
|
179
|
+
3. 排除内置类型(`ReactNode`、`HTMLElement`、`Record`、`Partial` 等,见 `type-anchor.tsx` 的 `BUILTIN_TYPE_NAMES`)
|
|
180
|
+
4. 对剩余的每一个类型名,确认以下之一成立:
|
|
181
|
+
- 在当前页的 `<TypeTable>` 中作为 `name` 定义
|
|
182
|
+
- 在当前页的 `<UnionType>` 中作为 `name` 定义
|
|
183
|
+
- 在 `type-registry.ts` 中注册了跨页面链接
|
|
184
|
+
5. 如有遗漏,补充定义后再输出
|
|
185
|
+
6. 如果遗漏类型只是短字面量联合类型(如 ThemeSize、ThemeColor、方向、位置、形状、简单状态),不要补 `<UnionType>`,应改为在 `type` 字段直接内联。
|
|
186
|
+
|
|
187
|
+
特别注意:
|
|
188
|
+
|
|
189
|
+
- **子组件 Props 类型**:如果组件有 `titleProps: AlertTitleProps`、`descriptionProps: AlertDescriptionProps` 等 props,这些类型也必须在 TypeTable 中定义,包含各自的字段列表
|
|
190
|
+
- **组件本目录导出的 public 类型**:`index.ts` / `types.ts` 导出的 Props、ClassNames/Ui、Slots、ItemData、Option、Variant 等类型,都必须在当前页类型区定义或跨页注册
|
|
191
|
+
- **封装依赖类型**:如果组件类型继承 `StyledComponentProps<T>`、`HTMLComponentProps<T>`、Radix Props、Vaul Props 等,需要在类型区说明这些包装类型和关键字段
|
|
192
|
+
- **不要展开无关大类型**:如果引用外部组件的大型 Props(如 `ButtonProps`、`DropdownMenuProps`),且该类型不属于当前组件,可以只引用并通过 `type-registry.ts` 跨页链接;不要在当前页复制展开全部字段
|
|
193
|
+
- **共享主题类型**:`ThemeColor`、`ThemeSize` 这类短联合直接内联;`ClassValue` 这类复杂类型可以在类型区保留定义。
|
|
194
|
+
- **BUILTIN_TYPE_NAMES 维护**:如果文档中用到了 PascalCase 类型名但它并非当前组件定义的自定义类型(如 `DeepPartial`、`ElementType`、`StandardSchema`、`Values` 等泛型/外部类型),需要确认它已在 `type-anchor.tsx` 的 `BUILTIN_TYPE_NAMES` 中注册。如果没有注册,会生成错误的本地锚点链接。遇到这种情况需要将其添加到 `BUILTIN_TYPE_NAMES` 中。
|
|
195
|
+
|
|
196
|
+
#### 常用内联类型(直接复制使用)
|
|
197
|
+
|
|
198
|
+
以下类型在多数组件文档中都需要,按需取用:
|
|
199
|
+
|
|
200
|
+
```mdx
|
|
201
|
+
type: "'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent'"
|
|
202
|
+
|
|
203
|
+
type: "'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'"
|
|
204
|
+
|
|
205
|
+
<UnionType name="ClassValue" description="CSS 类名类型" type="string | null | undefined | Record<string, boolean> | ClassValue[]" />
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
#### 类型定义规则
|
|
209
|
+
|
|
210
|
+
- 页面底部 `## 类型` 区域定义本页引用的所有非内置类型
|
|
211
|
+
- `<TypeTable>` — 对象类型(有字段列表的类型,如 ClassNames、子组件 Props)
|
|
212
|
+
- `<UnionType>` — 复杂联合、外部库派生类型、确实需要解释的类型定义;短字面量联合不要使用 `<UnionType>`,直接内联到表格
|
|
213
|
+
- 类型名与 PropsTable 中的 `type` 字段一致,系统自动生成锚点 ID
|
|
214
|
+
- 排列顺序建议:先 `<TypeTable>`(对象类型),再 `<UnionType>`(联合类型)
|
|
215
|
+
|
|
216
|
+
#### 跨页面类型引用
|
|
217
|
+
|
|
218
|
+
当 PropsTable 中引用了定义在**其他页面**的类型(如 AlertDialog 引用 ButtonProps):
|
|
219
|
+
|
|
220
|
+
1. 在 `apps/web-ui-docs/components/type-registry.ts` 中注册映射
|
|
221
|
+
2. 格式:`TypeName: '/docs/components/target-page#anchor'`
|
|
222
|
+
3. 无需在当前页重复定义该类型
|
|
223
|
+
|
|
224
|
+
#### Demo 引用规则
|
|
225
|
+
|
|
226
|
+
- 格式:`<Demo src="@playground/$slug/modules/DemoModuleName" />`
|
|
227
|
+
- **每个功能章节必须有 Demo**,Demo 是文档的核心展示方式,不可省略
|
|
228
|
+
- 优先复用 playground 中已经存在、能代表功能点的 demo
|
|
229
|
+
- 引用 demo 前检查 demo 文件是否依赖本地 `./shared`、同目录模块、图片、路由组件或其他非 scope 内容
|
|
230
|
+
- 如果 demo 不是自包含的,必须确认当前 Demo transformer / react-live 环境能处理这些 import
|
|
231
|
+
- 如果不能处理,选择以下方式之一:
|
|
232
|
+
- 调整 playground demo 使其可在文档中运行
|
|
233
|
+
- 新增 docs 专用 demo
|
|
234
|
+
- 在最终说明中明确该 demo 存在运行时风险
|
|
235
|
+
- 不允许假设所有 playground demo 都能被 react-live 直接执行
|
|
236
|
+
|
|
237
|
+
#### 创建缺失的 Playground Demo(必须执行)
|
|
238
|
+
|
|
239
|
+
当 playground `modules/` 目录不存在或缺少所需 demo 时,**必须创建**,不能因为缺 demo 而只写内联代码。
|
|
240
|
+
|
|
241
|
+
**创建 demo 文件的规范:**
|
|
242
|
+
|
|
243
|
+
1. 文件路径:`apps/web-ui-playground/src/app/[locale]/(demo)/$slug/modules/$DemoName.tsx`
|
|
244
|
+
2. 文件结构模板:
|
|
245
|
+
|
|
246
|
+
```tsx
|
|
247
|
+
'use client';
|
|
248
|
+
|
|
249
|
+
import { ... } from '@skyroc/web-ui';
|
|
250
|
+
|
|
251
|
+
const $DemoName = () => {
|
|
252
|
+
// demo 实现
|
|
253
|
+
return (
|
|
254
|
+
<div className="...">
|
|
255
|
+
...
|
|
256
|
+
</div>
|
|
257
|
+
);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
export default $DemoName;
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
3. 创建规则:
|
|
264
|
+
- 必须添加 `'use client'` 指令
|
|
265
|
+
- 组件使用箭头函数 + PascalCase 命名
|
|
266
|
+
- 必须使用 `export default` 导出
|
|
267
|
+
- 从 `@skyroc/web-ui` 导入 UI 组件,不要从内部路径导入
|
|
268
|
+
- 图标从 `lucide-react` 导入
|
|
269
|
+
- 避免依赖外部 `shared.tsx`,demo 应自包含(如需共享常量直接内联到各 demo 中)
|
|
270
|
+
- 使用 tailwind 类名进行布局样式
|
|
271
|
+
- 每个 demo 聚焦展示一个功能点,保持简洁
|
|
272
|
+
|
|
273
|
+
4. 同步 `page.tsx`:如果 `page.tsx` 不存在或未引用新 demo,需要一并创建/更新
|
|
274
|
+
|
|
275
|
+
**判断流程:**
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
读取 playground/$slug/modules/ 目录
|
|
279
|
+
├── 已有 demo 覆盖文档需要的功能点 → 直接引用
|
|
280
|
+
├── 有 page.tsx 但缺少部分 demo → 补充缺失的 demo 模块
|
|
281
|
+
└── 目录不存在 → 创建全部 demo 模块 + page.tsx
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### react-live scope 注意事项
|
|
285
|
+
|
|
286
|
+
Demo 在 `react-live` 沙箱中执行,scope 定义在 `apps/web-ui-docs/components/demo/scope.ts`。需注意:
|
|
287
|
+
|
|
288
|
+
- scope 中同时导入了 `@skyroc/web-ui` 和 `lucide-react`,后者也导出部分同名组件(如 `Badge`)
|
|
289
|
+
- 当前 scope 的赋值顺序保证 `@skyroc/web-ui` 优先(最后赋值覆盖同名导出)
|
|
290
|
+
- 如果新增的组件名与 `lucide-react` 图标同名,需确认 scope 中不存在冲突,或调整赋值顺序
|
|
291
|
+
|
|
292
|
+
#### 工作区边界
|
|
293
|
+
|
|
294
|
+
- 默认只新增或修改目标文档 `apps/web-ui-docs/content/docs/components/$slug.mdx`
|
|
295
|
+
- 不要回滚、格式化或整理与当前组件文档无关的用户改动
|
|
296
|
+
- 如果组件源码已有未提交改动,必须基于当前工作区实现写文档
|
|
297
|
+
- 只有当实现问题会导致文档无法正确描述组件时,才修改组件源码或类型;修改前先说明发现的问题
|
|
298
|
+
- 最终回复中要明确区分:本次修改的文件、已有但未处理的工作区改动、验证结果或未验证原因
|
|
299
|
+
|
|
300
|
+
## 参考范例
|
|
301
|
+
|
|
302
|
+
以 `apps/web-ui-docs/content/docs/components/alert.mdx` 为首选参考,`button.mdx` 为辅助参考。
|
|
303
|
+
|
|
304
|
+
`alert.mdx` 展示了完整的类型引用模式:PropsTable 使用类型名引用 → 类型区包含全部 TypeTable 和 UnionType 定义 → 无遗漏。
|