@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.
Files changed (277) hide show
  1. package/README.md +6 -3
  2. package/dist/cli.mjs +2 -2
  3. package/dist/{config-BKkdncJS.mjs → config-Cj9IzlRz.mjs} +105 -5
  4. package/dist/index.mjs +1 -1
  5. package/package.json +1 -1
  6. package/templates/admin/package.json +5 -3
  7. package/templates/admin/src/assets/svg-icon/logo.svg +2 -14
  8. package/templates/admin/src/features/router/routeTree.gen.ts +71 -1
  9. package/templates/admin/src/pages/(auth)/login/code-login.tsx +79 -0
  10. package/templates/admin/src/pages/(auth)/login/index.tsx +22 -1
  11. package/templates/admin/src/pages/(auth)/login/layout.tsx +25 -23
  12. package/templates/admin/src/pages/(auth)/login/modules/Header.tsx +25 -0
  13. package/templates/admin/src/pages/(auth)/login/register.tsx +86 -0
  14. package/templates/admin/src/pages/(auth)/login/reset-pwd.tsx +73 -0
  15. package/templates/admin/uno.config.ts +1 -1
  16. package/templates/admin-root/.agents/skills/component-doc/SKILL.md +304 -0
  17. package/templates/admin-root/.agents/skills/component-refactoring/SKILL.md +483 -0
  18. package/templates/admin-root/.agents/skills/component-refactoring/references/complexity-patterns.md +493 -0
  19. package/templates/admin-root/.agents/skills/component-refactoring/references/component-splitting.md +477 -0
  20. package/templates/admin-root/.agents/skills/component-refactoring/references/hook-extraction.md +317 -0
  21. package/templates/admin-root/.agents/skills/doc-coauthoring/SKILL.md +375 -0
  22. package/templates/admin-root/.agents/skills/feature-dev/SKILL.md +78 -0
  23. package/templates/admin-root/.agents/skills/frontend-code-review/SKILL.md +73 -0
  24. package/templates/admin-root/.agents/skills/frontend-code-review/references/business-logic.md +15 -0
  25. package/templates/admin-root/.agents/skills/frontend-code-review/references/code-quality.md +44 -0
  26. package/templates/admin-root/.agents/skills/frontend-code-review/references/performance.md +45 -0
  27. package/templates/admin-root/.agents/skills/frontend-design/LICENSE.txt +177 -0
  28. package/templates/admin-root/.agents/skills/frontend-design/SKILL.md +42 -0
  29. package/templates/admin-root/.agents/skills/frontend-testing/SKILL.md +325 -0
  30. package/templates/admin-root/.agents/skills/frontend-testing/assets/component-test.template.tsx +293 -0
  31. package/templates/admin-root/.agents/skills/frontend-testing/assets/hook-test.template.ts +207 -0
  32. package/templates/admin-root/.agents/skills/frontend-testing/assets/utility-test.template.ts +154 -0
  33. package/templates/admin-root/.agents/skills/frontend-testing/references/async-testing.md +345 -0
  34. package/templates/admin-root/.agents/skills/frontend-testing/references/checklist.md +205 -0
  35. package/templates/admin-root/.agents/skills/frontend-testing/references/common-patterns.md +449 -0
  36. package/templates/admin-root/.agents/skills/frontend-testing/references/domain-components.md +523 -0
  37. package/templates/admin-root/.agents/skills/frontend-testing/references/mocking.md +512 -0
  38. package/templates/admin-root/.agents/skills/frontend-testing/references/workflow.md +269 -0
  39. package/templates/admin-root/.agents/skills/migrate-nativewind-to-uniwind/SKILL.md +734 -0
  40. package/templates/admin-root/.agents/skills/migrate-oxfmt/SKILL.md +202 -0
  41. package/templates/admin-root/.agents/skills/migrate-oxlint/SKILL.md +196 -0
  42. package/templates/admin-root/.agents/skills/native-component-doc/SKILL.md +245 -0
  43. package/templates/admin-root/.agents/skills/senior-frontend/SKILL.md +209 -0
  44. package/templates/admin-root/.agents/skills/senior-frontend/references/frontend_best_practices.md +103 -0
  45. package/templates/admin-root/.agents/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
  46. package/templates/admin-root/.agents/skills/senior-frontend/references/react_patterns.md +103 -0
  47. package/templates/admin-root/.agents/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
  48. package/templates/admin-root/.agents/skills/senior-frontend/scripts/component_generator.py +114 -0
  49. package/templates/admin-root/.agents/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
  50. package/templates/admin-root/.agents/skills/skill-creator/SKILL.md +355 -0
  51. package/templates/admin-root/.agents/skills/skill-creator/references/output-patterns.md +86 -0
  52. package/templates/admin-root/.agents/skills/skill-creator/references/workflows.md +28 -0
  53. package/templates/admin-root/.agents/skills/skill-creator/scripts/init_skill.py +300 -0
  54. package/templates/admin-root/.agents/skills/skill-creator/scripts/package_skill.py +110 -0
  55. package/templates/admin-root/.agents/skills/skill-creator/scripts/quick_validate.py +97 -0
  56. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/SKILL.md +163 -0
  57. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/acceptance-checklist.md +75 -0
  58. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/evidence-order.md +109 -0
  59. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prd-rules.md +103 -0
  60. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prototype-rules.md +85 -0
  61. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs +144 -0
  62. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/admin-page.html +771 -0
  63. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/prd.md +182 -0
  64. package/templates/admin-root/.agents/skills/ui-ux-pro-max/SKILL.md +292 -0
  65. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
  66. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
  67. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
  68. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
  69. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
  70. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  71. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  72. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  73. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  74. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  75. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  76. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  77. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  78. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  79. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  80. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  81. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  82. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  83. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  84. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
  85. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
  86. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  87. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  88. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  89. package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
  90. package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  91. package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
  92. package/templates/admin-root/.agents/skills/uniwind/SKILL.md +64 -0
  93. package/templates/admin-root/.agents/skills/uniwind/references/component-bindings.md +338 -0
  94. package/templates/admin-root/.agents/skills/uniwind/references/css-and-utilities.md +325 -0
  95. package/templates/admin-root/.agents/skills/uniwind/references/integrations.md +75 -0
  96. package/templates/admin-root/.agents/skills/uniwind/references/pro.md +354 -0
  97. package/templates/admin-root/.agents/skills/uniwind/references/setup.md +144 -0
  98. package/templates/admin-root/.agents/skills/uniwind/references/styling-patterns.md +237 -0
  99. package/templates/admin-root/.agents/skills/uniwind/references/theming.md +309 -0
  100. package/templates/admin-root/.agents/skills/uniwind/references/troubleshooting.md +179 -0
  101. package/templates/admin-root/.agents/skills/uniwind/references/variants-and-selectors.md +224 -0
  102. package/templates/admin-root/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  103. package/templates/admin-root/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
  104. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  105. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  106. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  107. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  108. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  109. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  110. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  111. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  112. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  113. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  114. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  115. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  116. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  117. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  118. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  119. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  120. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  121. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  122. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  123. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  124. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  125. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  126. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  127. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  128. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  129. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  130. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  131. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  132. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  133. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  134. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  135. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  136. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  137. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  138. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  139. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  140. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  141. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  142. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  143. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  144. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  145. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  146. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  147. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  148. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  149. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  150. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  151. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  152. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  153. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  154. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  155. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  156. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  157. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  158. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  159. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  160. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  161. package/templates/admin-root/.claude/settings.json +5 -0
  162. package/templates/admin-root/.claude/skills/component-doc/SKILL.md +304 -0
  163. package/templates/admin-root/.claude/skills/component-refactoring/SKILL.md +483 -0
  164. package/templates/admin-root/.claude/skills/component-refactoring/references/complexity-patterns.md +493 -0
  165. package/templates/admin-root/.claude/skills/component-refactoring/references/component-splitting.md +477 -0
  166. package/templates/admin-root/.claude/skills/component-refactoring/references/hook-extraction.md +317 -0
  167. package/templates/admin-root/.claude/skills/doc-coauthoring/SKILL.md +375 -0
  168. package/templates/admin-root/.claude/skills/feature-dev/SKILL.md +78 -0
  169. package/templates/admin-root/.claude/skills/frontend-code-review/SKILL.md +73 -0
  170. package/templates/admin-root/.claude/skills/frontend-code-review/references/business-logic.md +15 -0
  171. package/templates/admin-root/.claude/skills/frontend-code-review/references/code-quality.md +44 -0
  172. package/templates/admin-root/.claude/skills/frontend-code-review/references/performance.md +45 -0
  173. package/templates/admin-root/.claude/skills/frontend-design/LICENSE.txt +177 -0
  174. package/templates/admin-root/.claude/skills/frontend-design/SKILL.md +42 -0
  175. package/templates/admin-root/.claude/skills/frontend-testing/SKILL.md +325 -0
  176. package/templates/admin-root/.claude/skills/frontend-testing/assets/component-test.template.tsx +293 -0
  177. package/templates/admin-root/.claude/skills/frontend-testing/assets/hook-test.template.ts +207 -0
  178. package/templates/admin-root/.claude/skills/frontend-testing/assets/utility-test.template.ts +154 -0
  179. package/templates/admin-root/.claude/skills/frontend-testing/references/async-testing.md +345 -0
  180. package/templates/admin-root/.claude/skills/frontend-testing/references/checklist.md +205 -0
  181. package/templates/admin-root/.claude/skills/frontend-testing/references/common-patterns.md +449 -0
  182. package/templates/admin-root/.claude/skills/frontend-testing/references/domain-components.md +523 -0
  183. package/templates/admin-root/.claude/skills/frontend-testing/references/mocking.md +512 -0
  184. package/templates/admin-root/.claude/skills/frontend-testing/references/workflow.md +269 -0
  185. package/templates/admin-root/.claude/skills/migrate-nativewind-to-uniwind +1 -0
  186. package/templates/admin-root/.claude/skills/native-component-doc/SKILL.md +245 -0
  187. package/templates/admin-root/.claude/skills/senior-frontend/SKILL.md +209 -0
  188. package/templates/admin-root/.claude/skills/senior-frontend/references/frontend_best_practices.md +103 -0
  189. package/templates/admin-root/.claude/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
  190. package/templates/admin-root/.claude/skills/senior-frontend/references/react_patterns.md +103 -0
  191. package/templates/admin-root/.claude/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
  192. package/templates/admin-root/.claude/skills/senior-frontend/scripts/component_generator.py +114 -0
  193. package/templates/admin-root/.claude/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
  194. package/templates/admin-root/.claude/skills/skill-creator/SKILL.md +355 -0
  195. package/templates/admin-root/.claude/skills/skill-creator/references/output-patterns.md +86 -0
  196. package/templates/admin-root/.claude/skills/skill-creator/references/workflows.md +28 -0
  197. package/templates/admin-root/.claude/skills/skill-creator/scripts/init_skill.py +300 -0
  198. package/templates/admin-root/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  199. package/templates/admin-root/.claude/skills/skill-creator/scripts/quick_validate.py +97 -0
  200. package/templates/admin-root/.claude/skills/ui-ux-pro-max/SKILL.md +386 -0
  201. package/templates/admin-root/.claude/skills/ui-ux-pro-max/data +1 -0
  202. package/templates/admin-root/.claude/skills/ui-ux-pro-max/scripts +1 -0
  203. package/templates/admin-root/.claude/skills/uniwind +1 -0
  204. package/templates/admin-root/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  205. package/templates/admin-root/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
  206. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  207. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  208. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  209. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  210. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  211. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  212. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  213. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  214. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  215. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  216. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  217. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  218. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  219. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  220. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  221. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  222. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  223. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  224. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  225. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  226. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  227. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  228. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  229. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  230. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  231. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  232. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  233. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  234. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  235. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  236. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  237. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  238. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  239. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  240. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  241. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  242. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  243. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  244. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  245. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  246. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  247. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  248. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  249. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  250. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  251. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  252. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  253. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  254. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  255. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  256. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  257. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  258. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  259. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  260. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  261. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  262. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  263. package/templates/admin-root/.cursor/settings.json +10 -0
  264. package/templates/admin-root/.editorconfig +19 -0
  265. package/templates/admin-root/.gitattributes +16 -0
  266. package/templates/admin-root/.oxfmtrc.json +35 -0
  267. package/templates/admin-root/AGENTS.md +297 -0
  268. package/templates/admin-root/CLAUDE.md +1 -0
  269. package/templates/admin-root/skills-lock.json +27 -0
  270. package/templates/admin-root.manifest.json +1317 -0
  271. package/templates/admin-shell/theme/antd/AntdProvider.tsx +1 -0
  272. package/templates/admin-shell/theme/antd/shared.ts +3 -3
  273. package/templates/admin-shell/theme/antd-algorithm/algorithm/dark/colors.ts +3 -3
  274. package/templates/admin-shell/theme/antd-algorithm/algorithm/default/colors.ts +1 -1
  275. package/templates/admin-shell/theme/presets/default.json +1 -1
  276. package/templates/admin.meta.json +10 -6
  277. package/LICENSE +0 -21
@@ -0,0 +1,493 @@
1
+ # Complexity Reduction Patterns
2
+
3
+ This document provides patterns for reducing cognitive complexity in Dify React components.
4
+
5
+ ## Understanding Complexity
6
+
7
+ ### SonarJS Cognitive Complexity
8
+
9
+ The `pnpm analyze-component` tool uses SonarJS cognitive complexity metrics:
10
+
11
+ - **Total Complexity**: Sum of all functions' complexity in the file
12
+ - **Max Complexity**: Highest single function complexity
13
+
14
+ ### What Increases Complexity
15
+
16
+ | Pattern | Complexity Impact |
17
+ |---------|-------------------|
18
+ | `if/else` | +1 per branch |
19
+ | Nested conditions | +1 per nesting level |
20
+ | `switch/case` | +1 per case |
21
+ | `for/while/do` | +1 per loop |
22
+ | `&&`/`||` chains | +1 per operator |
23
+ | Nested callbacks | +1 per nesting level |
24
+ | `try/catch` | +1 per catch |
25
+ | Ternary expressions | +1 per nesting |
26
+
27
+ ## Pattern 1: Replace Conditionals with Lookup Tables
28
+
29
+ **Before** (complexity: ~15):
30
+
31
+ ```typescript
32
+ const Template = useMemo(() => {
33
+ if (appDetail?.mode === AppModeEnum.CHAT) {
34
+ switch (locale) {
35
+ case LanguagesSupported[1]:
36
+ return <TemplateChatZh appDetail={appDetail} />
37
+ case LanguagesSupported[7]:
38
+ return <TemplateChatJa appDetail={appDetail} />
39
+ default:
40
+ return <TemplateChatEn appDetail={appDetail} />
41
+ }
42
+ }
43
+ if (appDetail?.mode === AppModeEnum.ADVANCED_CHAT) {
44
+ switch (locale) {
45
+ case LanguagesSupported[1]:
46
+ return <TemplateAdvancedChatZh appDetail={appDetail} />
47
+ case LanguagesSupported[7]:
48
+ return <TemplateAdvancedChatJa appDetail={appDetail} />
49
+ default:
50
+ return <TemplateAdvancedChatEn appDetail={appDetail} />
51
+ }
52
+ }
53
+ if (appDetail?.mode === AppModeEnum.WORKFLOW) {
54
+ // Similar pattern...
55
+ }
56
+ return null
57
+ }, [appDetail, locale])
58
+ ```
59
+
60
+ **After** (complexity: ~3):
61
+
62
+ ```typescript
63
+ // Define lookup table outside component
64
+ const TEMPLATE_MAP: Record<AppModeEnum, Record<string, FC<TemplateProps>>> = {
65
+ [AppModeEnum.CHAT]: {
66
+ [LanguagesSupported[1]]: TemplateChatZh,
67
+ [LanguagesSupported[7]]: TemplateChatJa,
68
+ default: TemplateChatEn,
69
+ },
70
+ [AppModeEnum.ADVANCED_CHAT]: {
71
+ [LanguagesSupported[1]]: TemplateAdvancedChatZh,
72
+ [LanguagesSupported[7]]: TemplateAdvancedChatJa,
73
+ default: TemplateAdvancedChatEn,
74
+ },
75
+ [AppModeEnum.WORKFLOW]: {
76
+ [LanguagesSupported[1]]: TemplateWorkflowZh,
77
+ [LanguagesSupported[7]]: TemplateWorkflowJa,
78
+ default: TemplateWorkflowEn,
79
+ },
80
+ // ...
81
+ }
82
+
83
+ // Clean component logic
84
+ const Template = useMemo(() => {
85
+ if (!appDetail?.mode) return null
86
+
87
+ const templates = TEMPLATE_MAP[appDetail.mode]
88
+ if (!templates) return null
89
+
90
+ const TemplateComponent = templates[locale] ?? templates.default
91
+ return <TemplateComponent appDetail={appDetail} />
92
+ }, [appDetail, locale])
93
+ ```
94
+
95
+ ## Pattern 2: Use Early Returns
96
+
97
+ **Before** (complexity: ~10):
98
+
99
+ ```typescript
100
+ const handleSubmit = () => {
101
+ if (isValid) {
102
+ if (hasChanges) {
103
+ if (isConnected) {
104
+ submitData()
105
+ } else {
106
+ showConnectionError()
107
+ }
108
+ } else {
109
+ showNoChangesMessage()
110
+ }
111
+ } else {
112
+ showValidationError()
113
+ }
114
+ }
115
+ ```
116
+
117
+ **After** (complexity: ~4):
118
+
119
+ ```typescript
120
+ const handleSubmit = () => {
121
+ if (!isValid) {
122
+ showValidationError()
123
+ return
124
+ }
125
+
126
+ if (!hasChanges) {
127
+ showNoChangesMessage()
128
+ return
129
+ }
130
+
131
+ if (!isConnected) {
132
+ showConnectionError()
133
+ return
134
+ }
135
+
136
+ submitData()
137
+ }
138
+ ```
139
+
140
+ ## Pattern 3: Extract Complex Conditions
141
+
142
+ **Before** (complexity: high):
143
+
144
+ ```typescript
145
+ const canPublish = (() => {
146
+ if (mode !== AppModeEnum.COMPLETION) {
147
+ if (!isAdvancedMode)
148
+ return true
149
+
150
+ if (modelModeType === ModelModeType.completion) {
151
+ if (!hasSetBlockStatus.history || !hasSetBlockStatus.query)
152
+ return false
153
+ return true
154
+ }
155
+ return true
156
+ }
157
+ return !promptEmpty
158
+ })()
159
+ ```
160
+
161
+ **After** (complexity: lower):
162
+
163
+ ```typescript
164
+ // Extract to named functions
165
+ const canPublishInCompletionMode = () => !promptEmpty
166
+
167
+ const canPublishInChatMode = () => {
168
+ if (!isAdvancedMode) return true
169
+ if (modelModeType !== ModelModeType.completion) return true
170
+ return hasSetBlockStatus.history && hasSetBlockStatus.query
171
+ }
172
+
173
+ // Clean main logic
174
+ const canPublish = mode === AppModeEnum.COMPLETION
175
+ ? canPublishInCompletionMode()
176
+ : canPublishInChatMode()
177
+ ```
178
+
179
+ ## Pattern 4: Replace Chained Ternaries
180
+
181
+ **Before** (complexity: ~5):
182
+
183
+ ```typescript
184
+ const statusText = serverActivated
185
+ ? t('status.running')
186
+ : serverPublished
187
+ ? t('status.inactive')
188
+ : appUnpublished
189
+ ? t('status.unpublished')
190
+ : t('status.notConfigured')
191
+ ```
192
+
193
+ **After** (complexity: ~2):
194
+
195
+ ```typescript
196
+ const getStatusText = () => {
197
+ if (serverActivated) return t('status.running')
198
+ if (serverPublished) return t('status.inactive')
199
+ if (appUnpublished) return t('status.unpublished')
200
+ return t('status.notConfigured')
201
+ }
202
+
203
+ const statusText = getStatusText()
204
+ ```
205
+
206
+ Or use lookup:
207
+
208
+ ```typescript
209
+ const STATUS_TEXT_MAP = {
210
+ running: 'status.running',
211
+ inactive: 'status.inactive',
212
+ unpublished: 'status.unpublished',
213
+ notConfigured: 'status.notConfigured',
214
+ } as const
215
+
216
+ const getStatusKey = (): keyof typeof STATUS_TEXT_MAP => {
217
+ if (serverActivated) return 'running'
218
+ if (serverPublished) return 'inactive'
219
+ if (appUnpublished) return 'unpublished'
220
+ return 'notConfigured'
221
+ }
222
+
223
+ const statusText = t(STATUS_TEXT_MAP[getStatusKey()])
224
+ ```
225
+
226
+ ## Pattern 5: Flatten Nested Loops
227
+
228
+ **Before** (complexity: high):
229
+
230
+ ```typescript
231
+ const processData = (items: Item[]) => {
232
+ const results: ProcessedItem[] = []
233
+
234
+ for (const item of items) {
235
+ if (item.isValid) {
236
+ for (const child of item.children) {
237
+ if (child.isActive) {
238
+ for (const prop of child.properties) {
239
+ if (prop.value !== null) {
240
+ results.push({
241
+ itemId: item.id,
242
+ childId: child.id,
243
+ propValue: prop.value,
244
+ })
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+
252
+ return results
253
+ }
254
+ ```
255
+
256
+ **After** (complexity: lower):
257
+
258
+ ```typescript
259
+ // Use functional approach
260
+ const processData = (items: Item[]) => {
261
+ return items
262
+ .filter(item => item.isValid)
263
+ .flatMap(item =>
264
+ item.children
265
+ .filter(child => child.isActive)
266
+ .flatMap(child =>
267
+ child.properties
268
+ .filter(prop => prop.value !== null)
269
+ .map(prop => ({
270
+ itemId: item.id,
271
+ childId: child.id,
272
+ propValue: prop.value,
273
+ }))
274
+ )
275
+ )
276
+ }
277
+ ```
278
+
279
+ ## Pattern 6: Extract Event Handler Logic
280
+
281
+ **Before** (complexity: high in component):
282
+
283
+ ```typescript
284
+ const Component = () => {
285
+ const handleSelect = (data: DataSet[]) => {
286
+ if (isEqual(data.map(item => item.id), dataSets.map(item => item.id))) {
287
+ hideSelectDataSet()
288
+ return
289
+ }
290
+
291
+ formattingChangedDispatcher()
292
+ let newDatasets = data
293
+ if (data.find(item => !item.name)) {
294
+ const newSelected = produce(data, (draft) => {
295
+ data.forEach((item, index) => {
296
+ if (!item.name) {
297
+ const newItem = dataSets.find(i => i.id === item.id)
298
+ if (newItem)
299
+ draft[index] = newItem
300
+ }
301
+ })
302
+ })
303
+ setDataSets(newSelected)
304
+ newDatasets = newSelected
305
+ }
306
+ else {
307
+ setDataSets(data)
308
+ }
309
+ hideSelectDataSet()
310
+
311
+ // 40 more lines of logic...
312
+ }
313
+
314
+ return <div>...</div>
315
+ }
316
+ ```
317
+
318
+ **After** (complexity: lower):
319
+
320
+ ```typescript
321
+ // Extract to hook or utility
322
+ const useDatasetSelection = (dataSets: DataSet[], setDataSets: SetState<DataSet[]>) => {
323
+ const normalizeSelection = (data: DataSet[]) => {
324
+ const hasUnloadedItem = data.some(item => !item.name)
325
+ if (!hasUnloadedItem) return data
326
+
327
+ return produce(data, (draft) => {
328
+ data.forEach((item, index) => {
329
+ if (!item.name) {
330
+ const existing = dataSets.find(i => i.id === item.id)
331
+ if (existing) draft[index] = existing
332
+ }
333
+ })
334
+ })
335
+ }
336
+
337
+ const hasSelectionChanged = (newData: DataSet[]) => {
338
+ return !isEqual(
339
+ newData.map(item => item.id),
340
+ dataSets.map(item => item.id)
341
+ )
342
+ }
343
+
344
+ return { normalizeSelection, hasSelectionChanged }
345
+ }
346
+
347
+ // Component becomes cleaner
348
+ const Component = () => {
349
+ const { normalizeSelection, hasSelectionChanged } = useDatasetSelection(dataSets, setDataSets)
350
+
351
+ const handleSelect = (data: DataSet[]) => {
352
+ if (!hasSelectionChanged(data)) {
353
+ hideSelectDataSet()
354
+ return
355
+ }
356
+
357
+ formattingChangedDispatcher()
358
+ const normalized = normalizeSelection(data)
359
+ setDataSets(normalized)
360
+ hideSelectDataSet()
361
+ }
362
+
363
+ return <div>...</div>
364
+ }
365
+ ```
366
+
367
+ ## Pattern 7: Reduce Boolean Logic Complexity
368
+
369
+ **Before** (complexity: ~8):
370
+
371
+ ```typescript
372
+ const toggleDisabled = hasInsufficientPermissions
373
+ || appUnpublished
374
+ || missingStartNode
375
+ || triggerModeDisabled
376
+ || (isAdvancedApp && !currentWorkflow?.graph)
377
+ || (isBasicApp && !basicAppConfig.updated_at)
378
+ ```
379
+
380
+ **After** (complexity: ~3):
381
+
382
+ ```typescript
383
+ // Extract meaningful boolean functions
384
+ const isAppReady = () => {
385
+ if (isAdvancedApp) return !!currentWorkflow?.graph
386
+ return !!basicAppConfig.updated_at
387
+ }
388
+
389
+ const hasRequiredPermissions = () => {
390
+ return isCurrentWorkspaceEditor && !hasInsufficientPermissions
391
+ }
392
+
393
+ const canToggle = () => {
394
+ if (!hasRequiredPermissions()) return false
395
+ if (!isAppReady()) return false
396
+ if (missingStartNode) return false
397
+ if (triggerModeDisabled) return false
398
+ return true
399
+ }
400
+
401
+ const toggleDisabled = !canToggle()
402
+ ```
403
+
404
+ ## Pattern 8: Simplify useMemo/useCallback Dependencies
405
+
406
+ **Before** (complexity: multiple recalculations):
407
+
408
+ ```typescript
409
+ const payload = useMemo(() => {
410
+ let parameters: Parameter[] = []
411
+ let outputParameters: OutputParameter[] = []
412
+
413
+ if (!published) {
414
+ parameters = (inputs || []).map((item) => ({
415
+ name: item.variable,
416
+ description: '',
417
+ form: 'llm',
418
+ required: item.required,
419
+ type: item.type,
420
+ }))
421
+ outputParameters = (outputs || []).map((item) => ({
422
+ name: item.variable,
423
+ description: '',
424
+ type: item.value_type,
425
+ }))
426
+ }
427
+ else if (detail && detail.tool) {
428
+ parameters = (inputs || []).map((item) => ({
429
+ // Complex transformation...
430
+ }))
431
+ outputParameters = (outputs || []).map((item) => ({
432
+ // Complex transformation...
433
+ }))
434
+ }
435
+
436
+ return {
437
+ icon: detail?.icon || icon,
438
+ label: detail?.label || name,
439
+ // ...more fields
440
+ }
441
+ }, [detail, published, workflowAppId, icon, name, description, inputs, outputs])
442
+ ```
443
+
444
+ **After** (complexity: separated concerns):
445
+
446
+ ```typescript
447
+ // Separate transformations
448
+ const useParameterTransform = (inputs: InputVar[], detail?: ToolDetail, published?: boolean) => {
449
+ return useMemo(() => {
450
+ if (!published) {
451
+ return inputs.map(item => ({
452
+ name: item.variable,
453
+ description: '',
454
+ form: 'llm',
455
+ required: item.required,
456
+ type: item.type,
457
+ }))
458
+ }
459
+
460
+ if (!detail?.tool) return []
461
+
462
+ return inputs.map(item => ({
463
+ name: item.variable,
464
+ required: item.required,
465
+ type: item.type === 'paragraph' ? 'string' : item.type,
466
+ description: detail.tool.parameters.find(p => p.name === item.variable)?.llm_description || '',
467
+ form: detail.tool.parameters.find(p => p.name === item.variable)?.form || 'llm',
468
+ }))
469
+ }, [inputs, detail, published])
470
+ }
471
+
472
+ // Component uses hook
473
+ const parameters = useParameterTransform(inputs, detail, published)
474
+ const outputParameters = useOutputTransform(outputs, detail, published)
475
+
476
+ const payload = useMemo(() => ({
477
+ icon: detail?.icon || icon,
478
+ label: detail?.label || name,
479
+ parameters,
480
+ outputParameters,
481
+ // ...
482
+ }), [detail, icon, name, parameters, outputParameters])
483
+ ```
484
+
485
+ ## Target Metrics After Refactoring
486
+
487
+ | Metric | Target |
488
+ |--------|--------|
489
+ | Total Complexity | < 50 |
490
+ | Max Function Complexity | < 30 |
491
+ | Function Length | < 30 lines |
492
+ | Nesting Depth | ≤ 3 levels |
493
+ | Conditional Chains | ≤ 3 conditions |