@skyroc/scripts 2.5.1 → 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 (265) hide show
  1. package/README.md +6 -3
  2. package/dist/cli.mjs +1 -1
  3. package/dist/{config-BKkdncJS.mjs → config-Cj9IzlRz.mjs} +105 -5
  4. package/dist/index.mjs +1 -1
  5. package/package.json +3 -3
  6. package/templates/admin/package.json +5 -1
  7. package/templates/admin/src/assets/svg-icon/logo.svg +1 -1
  8. package/templates/admin/uno.config.ts +1 -1
  9. package/templates/admin-root/.agents/skills/component-doc/SKILL.md +304 -0
  10. package/templates/admin-root/.agents/skills/component-refactoring/SKILL.md +483 -0
  11. package/templates/admin-root/.agents/skills/component-refactoring/references/complexity-patterns.md +493 -0
  12. package/templates/admin-root/.agents/skills/component-refactoring/references/component-splitting.md +477 -0
  13. package/templates/admin-root/.agents/skills/component-refactoring/references/hook-extraction.md +317 -0
  14. package/templates/admin-root/.agents/skills/doc-coauthoring/SKILL.md +375 -0
  15. package/templates/admin-root/.agents/skills/feature-dev/SKILL.md +78 -0
  16. package/templates/admin-root/.agents/skills/frontend-code-review/SKILL.md +73 -0
  17. package/templates/admin-root/.agents/skills/frontend-code-review/references/business-logic.md +15 -0
  18. package/templates/admin-root/.agents/skills/frontend-code-review/references/code-quality.md +44 -0
  19. package/templates/admin-root/.agents/skills/frontend-code-review/references/performance.md +45 -0
  20. package/templates/admin-root/.agents/skills/frontend-design/LICENSE.txt +177 -0
  21. package/templates/admin-root/.agents/skills/frontend-design/SKILL.md +42 -0
  22. package/templates/admin-root/.agents/skills/frontend-testing/SKILL.md +325 -0
  23. package/templates/admin-root/.agents/skills/frontend-testing/assets/component-test.template.tsx +293 -0
  24. package/templates/admin-root/.agents/skills/frontend-testing/assets/hook-test.template.ts +207 -0
  25. package/templates/admin-root/.agents/skills/frontend-testing/assets/utility-test.template.ts +154 -0
  26. package/templates/admin-root/.agents/skills/frontend-testing/references/async-testing.md +345 -0
  27. package/templates/admin-root/.agents/skills/frontend-testing/references/checklist.md +205 -0
  28. package/templates/admin-root/.agents/skills/frontend-testing/references/common-patterns.md +449 -0
  29. package/templates/admin-root/.agents/skills/frontend-testing/references/domain-components.md +523 -0
  30. package/templates/admin-root/.agents/skills/frontend-testing/references/mocking.md +512 -0
  31. package/templates/admin-root/.agents/skills/frontend-testing/references/workflow.md +269 -0
  32. package/templates/admin-root/.agents/skills/migrate-nativewind-to-uniwind/SKILL.md +734 -0
  33. package/templates/admin-root/.agents/skills/migrate-oxfmt/SKILL.md +202 -0
  34. package/templates/admin-root/.agents/skills/migrate-oxlint/SKILL.md +196 -0
  35. package/templates/admin-root/.agents/skills/native-component-doc/SKILL.md +245 -0
  36. package/templates/admin-root/.agents/skills/senior-frontend/SKILL.md +209 -0
  37. package/templates/admin-root/.agents/skills/senior-frontend/references/frontend_best_practices.md +103 -0
  38. package/templates/admin-root/.agents/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
  39. package/templates/admin-root/.agents/skills/senior-frontend/references/react_patterns.md +103 -0
  40. package/templates/admin-root/.agents/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
  41. package/templates/admin-root/.agents/skills/senior-frontend/scripts/component_generator.py +114 -0
  42. package/templates/admin-root/.agents/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
  43. package/templates/admin-root/.agents/skills/skill-creator/SKILL.md +355 -0
  44. package/templates/admin-root/.agents/skills/skill-creator/references/output-patterns.md +86 -0
  45. package/templates/admin-root/.agents/skills/skill-creator/references/workflows.md +28 -0
  46. package/templates/admin-root/.agents/skills/skill-creator/scripts/init_skill.py +300 -0
  47. package/templates/admin-root/.agents/skills/skill-creator/scripts/package_skill.py +110 -0
  48. package/templates/admin-root/.agents/skills/skill-creator/scripts/quick_validate.py +97 -0
  49. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/SKILL.md +163 -0
  50. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/acceptance-checklist.md +75 -0
  51. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/evidence-order.md +109 -0
  52. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prd-rules.md +103 -0
  53. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prototype-rules.md +85 -0
  54. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs +144 -0
  55. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/admin-page.html +771 -0
  56. package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/prd.md +182 -0
  57. package/templates/admin-root/.agents/skills/ui-ux-pro-max/SKILL.md +292 -0
  58. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
  59. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
  60. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
  61. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
  62. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
  63. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  64. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  65. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  66. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  67. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  68. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  69. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  70. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  71. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  72. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  73. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  74. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  75. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  76. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  77. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
  78. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
  79. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  80. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  81. package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  82. package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
  83. package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  84. package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
  85. package/templates/admin-root/.agents/skills/uniwind/SKILL.md +64 -0
  86. package/templates/admin-root/.agents/skills/uniwind/references/component-bindings.md +338 -0
  87. package/templates/admin-root/.agents/skills/uniwind/references/css-and-utilities.md +325 -0
  88. package/templates/admin-root/.agents/skills/uniwind/references/integrations.md +75 -0
  89. package/templates/admin-root/.agents/skills/uniwind/references/pro.md +354 -0
  90. package/templates/admin-root/.agents/skills/uniwind/references/setup.md +144 -0
  91. package/templates/admin-root/.agents/skills/uniwind/references/styling-patterns.md +237 -0
  92. package/templates/admin-root/.agents/skills/uniwind/references/theming.md +309 -0
  93. package/templates/admin-root/.agents/skills/uniwind/references/troubleshooting.md +179 -0
  94. package/templates/admin-root/.agents/skills/uniwind/references/variants-and-selectors.md +224 -0
  95. package/templates/admin-root/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  96. package/templates/admin-root/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
  97. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  98. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  99. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  100. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  101. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  102. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  103. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  104. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  105. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  106. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  107. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  108. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  109. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  110. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  111. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  112. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  113. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  114. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  115. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  116. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  117. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  118. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  119. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  120. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  121. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  122. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  123. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  124. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  125. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  126. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  127. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  128. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  129. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  130. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  131. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  132. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  133. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  134. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  135. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  136. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  137. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  138. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  139. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  140. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  141. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  142. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  143. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  144. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  145. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  146. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  147. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  148. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  149. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  150. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  151. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  152. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  153. package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  154. package/templates/admin-root/.claude/settings.json +5 -0
  155. package/templates/admin-root/.claude/skills/component-doc/SKILL.md +304 -0
  156. package/templates/admin-root/.claude/skills/component-refactoring/SKILL.md +483 -0
  157. package/templates/admin-root/.claude/skills/component-refactoring/references/complexity-patterns.md +493 -0
  158. package/templates/admin-root/.claude/skills/component-refactoring/references/component-splitting.md +477 -0
  159. package/templates/admin-root/.claude/skills/component-refactoring/references/hook-extraction.md +317 -0
  160. package/templates/admin-root/.claude/skills/doc-coauthoring/SKILL.md +375 -0
  161. package/templates/admin-root/.claude/skills/feature-dev/SKILL.md +78 -0
  162. package/templates/admin-root/.claude/skills/frontend-code-review/SKILL.md +73 -0
  163. package/templates/admin-root/.claude/skills/frontend-code-review/references/business-logic.md +15 -0
  164. package/templates/admin-root/.claude/skills/frontend-code-review/references/code-quality.md +44 -0
  165. package/templates/admin-root/.claude/skills/frontend-code-review/references/performance.md +45 -0
  166. package/templates/admin-root/.claude/skills/frontend-design/LICENSE.txt +177 -0
  167. package/templates/admin-root/.claude/skills/frontend-design/SKILL.md +42 -0
  168. package/templates/admin-root/.claude/skills/frontend-testing/SKILL.md +325 -0
  169. package/templates/admin-root/.claude/skills/frontend-testing/assets/component-test.template.tsx +293 -0
  170. package/templates/admin-root/.claude/skills/frontend-testing/assets/hook-test.template.ts +207 -0
  171. package/templates/admin-root/.claude/skills/frontend-testing/assets/utility-test.template.ts +154 -0
  172. package/templates/admin-root/.claude/skills/frontend-testing/references/async-testing.md +345 -0
  173. package/templates/admin-root/.claude/skills/frontend-testing/references/checklist.md +205 -0
  174. package/templates/admin-root/.claude/skills/frontend-testing/references/common-patterns.md +449 -0
  175. package/templates/admin-root/.claude/skills/frontend-testing/references/domain-components.md +523 -0
  176. package/templates/admin-root/.claude/skills/frontend-testing/references/mocking.md +512 -0
  177. package/templates/admin-root/.claude/skills/frontend-testing/references/workflow.md +269 -0
  178. package/templates/admin-root/.claude/skills/migrate-nativewind-to-uniwind +1 -0
  179. package/templates/admin-root/.claude/skills/native-component-doc/SKILL.md +245 -0
  180. package/templates/admin-root/.claude/skills/senior-frontend/SKILL.md +209 -0
  181. package/templates/admin-root/.claude/skills/senior-frontend/references/frontend_best_practices.md +103 -0
  182. package/templates/admin-root/.claude/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
  183. package/templates/admin-root/.claude/skills/senior-frontend/references/react_patterns.md +103 -0
  184. package/templates/admin-root/.claude/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
  185. package/templates/admin-root/.claude/skills/senior-frontend/scripts/component_generator.py +114 -0
  186. package/templates/admin-root/.claude/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
  187. package/templates/admin-root/.claude/skills/skill-creator/SKILL.md +355 -0
  188. package/templates/admin-root/.claude/skills/skill-creator/references/output-patterns.md +86 -0
  189. package/templates/admin-root/.claude/skills/skill-creator/references/workflows.md +28 -0
  190. package/templates/admin-root/.claude/skills/skill-creator/scripts/init_skill.py +300 -0
  191. package/templates/admin-root/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  192. package/templates/admin-root/.claude/skills/skill-creator/scripts/quick_validate.py +97 -0
  193. package/templates/admin-root/.claude/skills/ui-ux-pro-max/SKILL.md +386 -0
  194. package/templates/admin-root/.claude/skills/ui-ux-pro-max/data +1 -0
  195. package/templates/admin-root/.claude/skills/ui-ux-pro-max/scripts +1 -0
  196. package/templates/admin-root/.claude/skills/uniwind +1 -0
  197. package/templates/admin-root/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  198. package/templates/admin-root/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
  199. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  200. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  201. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  202. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  203. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  204. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  205. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  206. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  207. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  208. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  209. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  210. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  211. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  212. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  213. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  214. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  215. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  216. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  217. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  218. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  219. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  220. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  221. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  222. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  223. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  224. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  225. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  226. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  227. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  228. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  229. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  230. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  231. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  232. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  233. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  234. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  235. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  236. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  237. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  238. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  239. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  240. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  241. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  242. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  243. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  244. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  245. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  246. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  247. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  248. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  249. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  250. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  251. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  252. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  253. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  254. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  255. package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  256. package/templates/admin-root/.cursor/settings.json +10 -0
  257. package/templates/admin-root/.editorconfig +19 -0
  258. package/templates/admin-root/.gitattributes +16 -0
  259. package/templates/admin-root/.oxfmtrc.json +35 -0
  260. package/templates/admin-root/AGENTS.md +297 -0
  261. package/templates/admin-root/CLAUDE.md +1 -0
  262. package/templates/admin-root/skills-lock.json +27 -0
  263. package/templates/admin-root.manifest.json +1317 -0
  264. package/templates/admin.meta.json +9 -4
  265. package/LICENSE +0 -21
@@ -0,0 +1,477 @@
1
+ # Component Splitting Patterns
2
+
3
+ This document provides detailed guidance on splitting large components into smaller, focused components in Dify.
4
+
5
+ ## When to Split Components
6
+
7
+ Split a component when you identify:
8
+
9
+ 1. **Multiple UI sections** - Distinct visual areas with minimal coupling that can be composed independently
10
+ 1. **Conditional rendering blocks** - Large `{condition && <JSX />}` blocks
11
+ 1. **Repeated patterns** - Similar UI structures used multiple times
12
+ 1. **300+ lines** - Component exceeds manageable size
13
+ 1. **Modal clusters** - Multiple modals rendered in one component
14
+
15
+ ## Splitting Strategies
16
+
17
+ ### Strategy 1: Section-Based Splitting
18
+
19
+ Identify visual sections and extract each as a component.
20
+
21
+ ```typescript
22
+ // ❌ Before: Monolithic component (500+ lines)
23
+ const ConfigurationPage = () => {
24
+ return (
25
+ <div>
26
+ {/* Header Section - 50 lines */}
27
+ <div className="header">
28
+ <h1>{t('configuration.title')}</h1>
29
+ <div className="actions">
30
+ {isAdvancedMode && <Badge>Advanced</Badge>}
31
+ <ModelParameterModal ... />
32
+ <AppPublisher ... />
33
+ </div>
34
+ </div>
35
+
36
+ {/* Config Section - 200 lines */}
37
+ <div className="config">
38
+ <Config />
39
+ </div>
40
+
41
+ {/* Debug Section - 150 lines */}
42
+ <div className="debug">
43
+ <Debug ... />
44
+ </div>
45
+
46
+ {/* Modals Section - 100 lines */}
47
+ {showSelectDataSet && <SelectDataSet ... />}
48
+ {showHistoryModal && <EditHistoryModal ... />}
49
+ {showUseGPT4Confirm && <Confirm ... />}
50
+ </div>
51
+ )
52
+ }
53
+
54
+ // ✅ After: Split into focused components
55
+ // configuration/
56
+ // ├── index.tsx (orchestration)
57
+ // ├── configuration-header.tsx
58
+ // ├── configuration-content.tsx
59
+ // ├── configuration-debug.tsx
60
+ // └── configuration-modals.tsx
61
+
62
+ // configuration-header.tsx
63
+ interface ConfigurationHeaderProps {
64
+ isAdvancedMode: boolean
65
+ onPublish: () => void
66
+ }
67
+
68
+ const ConfigurationHeader: FC<ConfigurationHeaderProps> = ({
69
+ isAdvancedMode,
70
+ onPublish,
71
+ }) => {
72
+ const { t } = useTranslation()
73
+
74
+ return (
75
+ <div className="header">
76
+ <h1>{t('configuration.title')}</h1>
77
+ <div className="actions">
78
+ {isAdvancedMode && <Badge>Advanced</Badge>}
79
+ <ModelParameterModal ... />
80
+ <AppPublisher onPublish={onPublish} />
81
+ </div>
82
+ </div>
83
+ )
84
+ }
85
+
86
+ // index.tsx (orchestration only)
87
+ const ConfigurationPage = () => {
88
+ const { modelConfig, setModelConfig } = useModelConfig()
89
+ const { activeModal, openModal, closeModal } = useModalState()
90
+
91
+ return (
92
+ <div>
93
+ <ConfigurationHeader
94
+ isAdvancedMode={isAdvancedMode}
95
+ onPublish={handlePublish}
96
+ />
97
+ <ConfigurationContent
98
+ modelConfig={modelConfig}
99
+ onConfigChange={setModelConfig}
100
+ />
101
+ {!isMobile && (
102
+ <ConfigurationDebug
103
+ inputs={inputs}
104
+ onSetting={handleSetting}
105
+ />
106
+ )}
107
+ <ConfigurationModals
108
+ activeModal={activeModal}
109
+ onClose={closeModal}
110
+ />
111
+ </div>
112
+ )
113
+ }
114
+ ```
115
+
116
+ ### Strategy 2: Conditional Block Extraction
117
+
118
+ Extract large conditional rendering blocks.
119
+
120
+ ```typescript
121
+ // ❌ Before: Large conditional blocks
122
+ const AppInfo = () => {
123
+ return (
124
+ <div>
125
+ {expand ? (
126
+ <div className="expanded">
127
+ {/* 100 lines of expanded view */}
128
+ </div>
129
+ ) : (
130
+ <div className="collapsed">
131
+ {/* 50 lines of collapsed view */}
132
+ </div>
133
+ )}
134
+ </div>
135
+ )
136
+ }
137
+
138
+ // ✅ After: Separate view components
139
+ const AppInfoExpanded: FC<AppInfoViewProps> = ({ appDetail, onAction }) => {
140
+ return (
141
+ <div className="expanded">
142
+ {/* Clean, focused expanded view */}
143
+ </div>
144
+ )
145
+ }
146
+
147
+ const AppInfoCollapsed: FC<AppInfoViewProps> = ({ appDetail, onAction }) => {
148
+ return (
149
+ <div className="collapsed">
150
+ {/* Clean, focused collapsed view */}
151
+ </div>
152
+ )
153
+ }
154
+
155
+ const AppInfo = () => {
156
+ return (
157
+ <div>
158
+ {expand
159
+ ? <AppInfoExpanded appDetail={appDetail} onAction={handleAction} />
160
+ : <AppInfoCollapsed appDetail={appDetail} onAction={handleAction} />
161
+ }
162
+ </div>
163
+ )
164
+ }
165
+ ```
166
+
167
+ ### Strategy 3: Modal Extraction
168
+
169
+ Extract modals with their trigger logic.
170
+
171
+ ```typescript
172
+ // ❌ Before: Multiple modals in one component
173
+ const AppInfo = () => {
174
+ const [showEdit, setShowEdit] = useState(false)
175
+ const [showDuplicate, setShowDuplicate] = useState(false)
176
+ const [showDelete, setShowDelete] = useState(false)
177
+ const [showSwitch, setShowSwitch] = useState(false)
178
+
179
+ const onEdit = async (data) => { /* 20 lines */ }
180
+ const onDuplicate = async (data) => { /* 20 lines */ }
181
+ const onDelete = async () => { /* 15 lines */ }
182
+
183
+ return (
184
+ <div>
185
+ {/* Main content */}
186
+
187
+ {showEdit && <EditModal onConfirm={onEdit} onClose={() => setShowEdit(false)} />}
188
+ {showDuplicate && <DuplicateModal onConfirm={onDuplicate} onClose={() => setShowDuplicate(false)} />}
189
+ {showDelete && <DeleteConfirm onConfirm={onDelete} onClose={() => setShowDelete(false)} />}
190
+ {showSwitch && <SwitchModal ... />}
191
+ </div>
192
+ )
193
+ }
194
+
195
+ // ✅ After: Modal manager component
196
+ // app-info-modals.tsx
197
+ type ModalType = 'edit' | 'duplicate' | 'delete' | 'switch' | null
198
+
199
+ interface AppInfoModalsProps {
200
+ appDetail: AppDetail
201
+ activeModal: ModalType
202
+ onClose: () => void
203
+ onSuccess: () => void
204
+ }
205
+
206
+ const AppInfoModals: FC<AppInfoModalsProps> = ({
207
+ appDetail,
208
+ activeModal,
209
+ onClose,
210
+ onSuccess,
211
+ }) => {
212
+ const handleEdit = async (data) => { /* logic */ }
213
+ const handleDuplicate = async (data) => { /* logic */ }
214
+ const handleDelete = async () => { /* logic */ }
215
+
216
+ return (
217
+ <>
218
+ {activeModal === 'edit' && (
219
+ <EditModal
220
+ appDetail={appDetail}
221
+ onConfirm={handleEdit}
222
+ onClose={onClose}
223
+ />
224
+ )}
225
+ {activeModal === 'duplicate' && (
226
+ <DuplicateModal
227
+ appDetail={appDetail}
228
+ onConfirm={handleDuplicate}
229
+ onClose={onClose}
230
+ />
231
+ )}
232
+ {activeModal === 'delete' && (
233
+ <DeleteConfirm
234
+ onConfirm={handleDelete}
235
+ onClose={onClose}
236
+ />
237
+ )}
238
+ {activeModal === 'switch' && (
239
+ <SwitchModal
240
+ appDetail={appDetail}
241
+ onClose={onClose}
242
+ />
243
+ )}
244
+ </>
245
+ )
246
+ }
247
+
248
+ // Parent component
249
+ const AppInfo = () => {
250
+ const { activeModal, openModal, closeModal } = useModalState()
251
+
252
+ return (
253
+ <div>
254
+ {/* Main content with openModal triggers */}
255
+ <Button onClick={() => openModal('edit')}>Edit</Button>
256
+
257
+ <AppInfoModals
258
+ appDetail={appDetail}
259
+ activeModal={activeModal}
260
+ onClose={closeModal}
261
+ onSuccess={handleSuccess}
262
+ />
263
+ </div>
264
+ )
265
+ }
266
+ ```
267
+
268
+ ### Strategy 4: List Item Extraction
269
+
270
+ Extract repeated item rendering.
271
+
272
+ ```typescript
273
+ // ❌ Before: Inline item rendering
274
+ const OperationsList = () => {
275
+ return (
276
+ <div>
277
+ {operations.map(op => (
278
+ <div key={op.id} className="operation-item">
279
+ <span className="icon">{op.icon}</span>
280
+ <span className="title">{op.title}</span>
281
+ <span className="description">{op.description}</span>
282
+ <button onClick={() => op.onClick()}>
283
+ {op.actionLabel}
284
+ </button>
285
+ {op.badge && <Badge>{op.badge}</Badge>}
286
+ {/* More complex rendering... */}
287
+ </div>
288
+ ))}
289
+ </div>
290
+ )
291
+ }
292
+
293
+ // ✅ After: Extracted item component
294
+ interface OperationItemProps {
295
+ operation: Operation
296
+ onAction: (id: string) => void
297
+ }
298
+
299
+ const OperationItem: FC<OperationItemProps> = ({ operation, onAction }) => {
300
+ return (
301
+ <div className="operation-item">
302
+ <span className="icon">{operation.icon}</span>
303
+ <span className="title">{operation.title}</span>
304
+ <span className="description">{operation.description}</span>
305
+ <button onClick={() => onAction(operation.id)}>
306
+ {operation.actionLabel}
307
+ </button>
308
+ {operation.badge && <Badge>{operation.badge}</Badge>}
309
+ </div>
310
+ )
311
+ }
312
+
313
+ const OperationsList = () => {
314
+ const handleAction = useCallback((id: string) => {
315
+ const op = operations.find(o => o.id === id)
316
+ op?.onClick()
317
+ }, [operations])
318
+
319
+ return (
320
+ <div>
321
+ {operations.map(op => (
322
+ <OperationItem
323
+ key={op.id}
324
+ operation={op}
325
+ onAction={handleAction}
326
+ />
327
+ ))}
328
+ </div>
329
+ )
330
+ }
331
+ ```
332
+
333
+ ## Directory Structure Patterns
334
+
335
+ ### Pattern A: Flat Structure (Simple Components)
336
+
337
+ For components with 2-3 sub-components:
338
+
339
+ ```
340
+ component-name/
341
+ ├── index.tsx # Main component
342
+ ├── sub-component-a.tsx
343
+ ├── sub-component-b.tsx
344
+ └── types.ts # Shared types
345
+ ```
346
+
347
+ ### Pattern B: Nested Structure (Complex Components)
348
+
349
+ For components with many sub-components:
350
+
351
+ ```
352
+ component-name/
353
+ ├── index.tsx # Main orchestration
354
+ ├── types.ts # Shared types
355
+ ├── hooks/
356
+ │ ├── use-feature-a.ts
357
+ │ └── use-feature-b.ts
358
+ ├── components/
359
+ │ ├── header/
360
+ │ │ └── index.tsx
361
+ │ ├── content/
362
+ │ │ └── index.tsx
363
+ │ └── modals/
364
+ │ └── index.tsx
365
+ └── utils/
366
+ └── helpers.ts
367
+ ```
368
+
369
+ ### Pattern C: Feature-Based Structure (Dify Standard)
370
+
371
+ Following Dify's existing patterns:
372
+
373
+ ```
374
+ configuration/
375
+ ├── index.tsx # Main page component
376
+ ├── base/ # Base/shared components
377
+ │ ├── feature-panel/
378
+ │ ├── group-name/
379
+ │ └── operation-btn/
380
+ ├── config/ # Config section
381
+ │ ├── index.tsx
382
+ │ ├── agent/
383
+ │ └── automatic/
384
+ ├── dataset-config/ # Dataset section
385
+ │ ├── index.tsx
386
+ │ ├── card-item/
387
+ │ └── params-config/
388
+ ├── debug/ # Debug section
389
+ │ ├── index.tsx
390
+ │ └── hooks.tsx
391
+ └── hooks/ # Shared hooks
392
+ └── use-advanced-prompt-config.ts
393
+ ```
394
+
395
+ ## Props Design
396
+
397
+ ### Minimal Props Principle
398
+
399
+ Pass only what's needed:
400
+
401
+ ```typescript
402
+ // ❌ Bad: Passing entire objects when only some fields needed
403
+ <ConfigHeader appDetail={appDetail} modelConfig={modelConfig} />
404
+
405
+ // ✅ Good: Destructure to minimum required
406
+ <ConfigHeader
407
+ appName={appDetail.name}
408
+ isAdvancedMode={modelConfig.isAdvanced}
409
+ onPublish={handlePublish}
410
+ />
411
+ ```
412
+
413
+ ### Callback Props Pattern
414
+
415
+ Use callbacks for child-to-parent communication:
416
+
417
+ ```typescript
418
+ // Parent
419
+ const Parent = () => {
420
+ const [value, setValue] = useState('')
421
+
422
+ return (
423
+ <Child
424
+ value={value}
425
+ onChange={setValue}
426
+ onSubmit={handleSubmit}
427
+ />
428
+ )
429
+ }
430
+
431
+ // Child
432
+ interface ChildProps {
433
+ value: string
434
+ onChange: (value: string) => void
435
+ onSubmit: () => void
436
+ }
437
+
438
+ const Child: FC<ChildProps> = ({ value, onChange, onSubmit }) => {
439
+ return (
440
+ <div>
441
+ <input value={value} onChange={e => onChange(e.target.value)} />
442
+ <button onClick={onSubmit}>Submit</button>
443
+ </div>
444
+ )
445
+ }
446
+ ```
447
+
448
+ ### Render Props for Flexibility
449
+
450
+ When sub-components need parent context:
451
+
452
+ ```typescript
453
+ interface ListProps<T> {
454
+ items: T[]
455
+ renderItem: (item: T, index: number) => React.ReactNode
456
+ renderEmpty?: () => React.ReactNode
457
+ }
458
+
459
+ function List<T>({ items, renderItem, renderEmpty }: ListProps<T>) {
460
+ if (items.length === 0 && renderEmpty) {
461
+ return <>{renderEmpty()}</>
462
+ }
463
+
464
+ return (
465
+ <div>
466
+ {items.map((item, index) => renderItem(item, index))}
467
+ </div>
468
+ )
469
+ }
470
+
471
+ // Usage
472
+ <List
473
+ items={operations}
474
+ renderItem={(op, i) => <OperationItem key={i} operation={op} />}
475
+ renderEmpty={() => <EmptyState message="No operations" />}
476
+ />
477
+ ```