bsmnt 0.1.3 → 0.2.4

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 (407) hide show
  1. package/README.md +18 -18
  2. package/dist/configs/animations.d.ts +25 -0
  3. package/dist/configs/animations.d.ts.map +1 -0
  4. package/dist/configs/animations.js +29 -0
  5. package/dist/configs/animations.js.map +1 -0
  6. package/dist/helpers/add/hooks-config.d.ts +22 -0
  7. package/dist/helpers/add/hooks-config.d.ts.map +1 -0
  8. package/dist/helpers/add/hooks-config.js +37 -0
  9. package/dist/helpers/add/hooks-config.js.map +1 -0
  10. package/dist/helpers/add/index.d.ts +18 -0
  11. package/dist/helpers/add/index.d.ts.map +1 -0
  12. package/dist/helpers/add/index.js +152 -0
  13. package/dist/helpers/add/index.js.map +1 -0
  14. package/dist/helpers/create/copy-template.d.ts +11 -0
  15. package/dist/helpers/create/copy-template.d.ts.map +1 -0
  16. package/dist/helpers/create/copy-template.js +19 -0
  17. package/dist/helpers/create/copy-template.js.map +1 -0
  18. package/dist/helpers/create/index.d.ts +22 -0
  19. package/dist/helpers/create/index.d.ts.map +1 -0
  20. package/dist/helpers/create/index.js +81 -0
  21. package/dist/helpers/create/index.js.map +1 -0
  22. package/dist/helpers/create/install.d.ts +8 -0
  23. package/dist/helpers/create/install.d.ts.map +1 -0
  24. package/dist/helpers/create/install.js +20 -0
  25. package/dist/helpers/create/install.js.map +1 -0
  26. package/dist/helpers/create/rename-files.d.ts +10 -0
  27. package/dist/helpers/create/rename-files.d.ts.map +1 -0
  28. package/dist/helpers/create/rename-files.js +17 -0
  29. package/dist/helpers/create/rename-files.js.map +1 -0
  30. package/dist/helpers/create/setup-agent.d.ts +21 -0
  31. package/dist/helpers/create/setup-agent.d.ts.map +1 -0
  32. package/dist/helpers/create/setup-agent.js +65 -0
  33. package/dist/helpers/create/setup-agent.js.map +1 -0
  34. package/dist/helpers/create/setup-sanity.d.ts +23 -0
  35. package/dist/helpers/create/setup-sanity.d.ts.map +1 -0
  36. package/dist/helpers/create/setup-sanity.js +354 -0
  37. package/dist/helpers/create/setup-sanity.js.map +1 -0
  38. package/dist/helpers/create/update-package.d.ts +20 -0
  39. package/dist/helpers/create/update-package.d.ts.map +1 -0
  40. package/dist/helpers/create/update-package.js +87 -0
  41. package/dist/helpers/create/update-package.js.map +1 -0
  42. package/dist/helpers/integrate/index.d.ts +13 -0
  43. package/dist/helpers/integrate/index.d.ts.map +1 -0
  44. package/dist/helpers/integrate/index.js +204 -0
  45. package/dist/helpers/integrate/index.js.map +1 -0
  46. package/dist/helpers/integrate/merge-config.d.ts +21 -0
  47. package/dist/helpers/integrate/merge-config.d.ts.map +1 -0
  48. package/dist/helpers/integrate/merge-config.js +38 -0
  49. package/dist/helpers/integrate/merge-config.js.map +1 -0
  50. package/dist/helpers/integrate/merge-orchestrator.d.ts +10 -0
  51. package/dist/helpers/integrate/merge-orchestrator.d.ts.map +1 -0
  52. package/dist/helpers/integrate/merge-orchestrator.js +188 -0
  53. package/dist/helpers/integrate/merge-orchestrator.js.map +1 -0
  54. package/dist/helpers/integrate/sanity/config.d.ts +14 -0
  55. package/dist/helpers/integrate/sanity/config.d.ts.map +1 -0
  56. package/dist/helpers/integrate/sanity/config.js +38 -0
  57. package/dist/helpers/integrate/sanity/config.js.map +1 -0
  58. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts +13 -0
  59. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +1 -0
  60. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js +84 -0
  61. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +1 -0
  62. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts +23 -0
  63. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +1 -0
  64. package/dist/helpers/integrate/sanity/mergers/layout-merger.js +161 -0
  65. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +1 -0
  66. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +13 -0
  67. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +1 -0
  68. package/{packages/create-basement-app/src → dist/helpers/integrate/sanity}/mergers/sitemap-merger.js +33 -45
  69. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +337 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/paths.d.ts +14 -0
  75. package/dist/paths.d.ts.map +1 -0
  76. package/dist/paths.js +24 -0
  77. package/dist/paths.js.map +1 -0
  78. package/dist/utils/detect-project.d.ts +40 -0
  79. package/dist/utils/detect-project.d.ts.map +1 -0
  80. package/dist/utils/detect-project.js +69 -0
  81. package/dist/utils/detect-project.js.map +1 -0
  82. package/dist/utils/format-results.d.ts +24 -0
  83. package/dist/utils/format-results.d.ts.map +1 -0
  84. package/dist/utils/format-results.js +27 -0
  85. package/dist/utils/format-results.js.map +1 -0
  86. package/index.js +25 -0
  87. package/package.json +40 -15
  88. package/{packages/create-basement-app/templates/experiment → src/templates/next-default}/app/layout.tsx +18 -18
  89. package/src/templates/next-default/app/page.tsx +11 -0
  90. package/{packages/create-basement-app/templates/experiment → src/templates/next-default}/app/robots.ts +3 -3
  91. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/app/sitemap.ts +4 -4
  92. package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +2 -2
  93. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/components/layout/footer/index.tsx +5 -1
  94. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/components/layout/header/index.tsx +1 -3
  95. package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/layout/theme/index.tsx +1 -1
  96. package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/layout/wrapper/index.tsx +0 -2
  97. package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/components/ui/image/index.tsx +6 -11
  98. package/{packages/create-basement-app/templates/experiment → src/templates/next-default}/components/ui/link/index.tsx +39 -33
  99. package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +26 -26
  100. package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +4 -4
  101. package/{packages/create-basement-app/templates/webgl → src/templates/next-experiments}/app/layout.tsx +18 -18
  102. package/{packages/create-basement-app/templates/webgl → src/templates/next-experiments}/app/robots.ts +3 -3
  103. package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +4 -4
  104. package/{packages/create-basement-app/templates/webgl → src/templates/next-experiments}/biome.json +2 -2
  105. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/theme/index.tsx +1 -1
  106. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/wrapper/index.tsx +7 -9
  107. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/ui/image/index.tsx +39 -46
  108. package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +6 -0
  109. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +26 -26
  110. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/package.json +4 -4
  111. package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/app/layout.tsx +18 -18
  112. package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/app/robots.ts +3 -3
  113. package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +4 -4
  114. package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/biome.json +2 -2
  115. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/layout/theme/index.tsx +1 -1
  116. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -2
  117. package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/ui/image/index.tsx +6 -11
  118. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/ui/link/index.tsx +9 -2
  119. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +1 -0
  120. package/src/templates/next-webgl/lib/renderer.ts +7 -0
  121. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +26 -26
  122. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/package.json +4 -4
  123. package/packages/cli/bin/index.js +0 -259
  124. package/packages/cli/src/commands/add-integration.js +0 -310
  125. package/packages/cli/src/commands/create.js +0 -409
  126. package/packages/cli/src/commands/setup-sanity.js +0 -426
  127. package/packages/cli/src/commands/worktree.js +0 -805
  128. package/packages/create-basement-app/integrations/sanity/config.js +0 -46
  129. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
  130. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
  131. package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
  132. package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
  133. package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
  134. package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
  135. package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
  136. package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
  137. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
  138. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
  139. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
  140. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
  141. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
  142. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
  143. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
  144. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
  145. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
  146. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
  147. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
  148. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
  149. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
  150. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
  151. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
  152. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
  153. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
  154. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
  155. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
  156. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
  157. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
  158. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
  159. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
  160. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
  161. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
  162. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
  163. package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
  164. package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
  165. package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
  166. package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
  167. package/packages/create-basement-app/package.json +0 -10
  168. package/packages/create-basement-app/src/configs/animations.js +0 -28
  169. package/packages/create-basement-app/src/index.js +0 -15
  170. package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
  171. package/packages/create-basement-app/src/mergers/config.js +0 -109
  172. package/packages/create-basement-app/src/mergers/index.js +0 -346
  173. package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
  174. package/packages/create-basement-app/templates/default/.cursor/rules/README.md +0 -184
  175. package/packages/create-basement-app/templates/default/.cursor/rules/architecture.mdc +0 -437
  176. package/packages/create-basement-app/templates/default/.cursor/rules/components.mdc +0 -436
  177. package/packages/create-basement-app/templates/default/.cursor/rules/integrations.mdc +0 -447
  178. package/packages/create-basement-app/templates/default/.cursor/rules/main.mdc +0 -278
  179. package/packages/create-basement-app/templates/default/.cursor/rules/styling.mdc +0 -433
  180. package/packages/create-basement-app/templates/default/.github/workflows/lighthouse-to-slack.yml +0 -136
  181. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +0 -184
  182. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +0 -437
  183. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +0 -436
  184. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +0 -447
  185. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +0 -278
  186. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +0 -433
  187. package/packages/create-basement-app/templates/experiment/.github/workflows/lighthouse-to-slack.yml +0 -136
  188. package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
  189. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
  190. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
  191. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
  192. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
  193. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
  194. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
  195. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
  196. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
  197. /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
  198. /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
  199. /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
  200. /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
  201. /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
  202. /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
  203. /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
  204. /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
  205. /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
  206. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.biome/plugins/no-anchor-element.grit +0 -0
  207. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  208. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  209. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
  210. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
  211. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
  212. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  213. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.vscode/extensions.json +0 -0
  214. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.vscode/settings.json +0 -0
  215. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
  216. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
  217. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/app/favicon.ico +0 -0
  218. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
  219. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/ui/README.md +0 -0
  220. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/ui/image/README.md +0 -0
  221. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
  222. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
  223. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
  224. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
  225. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
  226. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/integrations/.gitkeep +0 -0
  227. /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
  228. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
  229. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
  230. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
  231. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
  232. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
  233. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
  234. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
  235. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
  236. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
  237. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
  238. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
  239. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
  240. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
  241. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
  242. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
  243. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
  244. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
  245. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
  246. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
  247. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
  248. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
  249. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
  250. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
  251. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
  252. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
  253. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
  254. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
  255. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
  256. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
  257. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
  258. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
  259. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
  260. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
  261. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
  262. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
  263. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
  264. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
  265. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
  266. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
  267. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
  268. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  269. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
  270. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
  271. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
  272. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  273. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  274. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
  275. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
  276. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
  277. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  278. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.vscode/extensions.json +0 -0
  279. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.vscode/settings.json +0 -0
  280. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
  281. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
  282. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/app/favicon.ico +0 -0
  283. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
  284. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
  285. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
  286. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
  287. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
  288. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/ui/README.md +0 -0
  289. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/ui/image/README.md +0 -0
  290. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
  291. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
  292. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
  293. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
  294. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
  295. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
  296. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
  297. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
  298. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
  299. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
  300. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
  301. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
  302. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
  303. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
  304. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
  305. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
  306. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
  307. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
  308. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
  309. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
  310. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
  311. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
  312. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
  313. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
  314. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
  315. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
  316. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
  317. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
  318. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
  319. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
  320. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
  321. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
  322. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
  323. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
  324. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
  325. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
  326. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
  327. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
  328. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
  329. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
  330. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
  331. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
  332. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
  333. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
  334. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
  335. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
  336. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
  337. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  338. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
  339. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
  340. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
  341. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  342. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  343. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
  344. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
  345. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
  346. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  347. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.vscode/extensions.json +0 -0
  348. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.vscode/settings.json +0 -0
  349. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
  350. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
  351. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/favicon.ico +0 -0
  352. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
  353. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
  354. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
  355. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
  356. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/ui/README.md +0 -0
  357. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/ui/image/README.md +0 -0
  358. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
  359. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
  360. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
  361. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
  362. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
  363. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
  364. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
  365. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
  366. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
  367. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
  368. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
  369. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
  370. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
  371. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
  372. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
  373. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
  374. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
  375. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
  376. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
  377. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
  378. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
  379. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
  380. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
  381. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
  382. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
  383. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
  384. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
  385. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
  386. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
  387. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
  388. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
  389. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
  390. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
  391. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
  392. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
  393. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
  394. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
  395. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
  396. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
  397. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
  398. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
  399. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
  400. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
  401. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
  402. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
  403. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
  404. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
  405. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
  406. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  407. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/tsconfig.json +0 -0
package/README.md CHANGED
@@ -69,36 +69,36 @@ Creates three isolated worktrees with dependencies auto-installed. Each one is a
69
69
 
70
70
  ## Project Structure
71
71
 
72
- This is a **bun workspaces monorepo** with two publishable packages:
73
-
74
- | Package | npm | Description |
75
- |---------|-----|-------------|
76
- | `packages/cli` | `@basementstudio/cli` | CLI binary — prompts, argument parsing, command routing |
77
- | `packages/create-basement-app` | `@basementstudio/create-basement-app` | Templates, integrations, mergers, hooks, plugins |
72
+ Single TypeScript package published as `bsmnt` on npm:
78
73
 
79
74
  ```
80
- packages/
81
- ├── cli/ # CLI entry point and commands
82
- ├── bin/index.js
83
- │ └── src/commands/
84
- └── create-basement-app/ # Scaffolding assets and merge logic
85
- ├── templates/{default,webgl,webgpu,experiment}/
86
- ├── integrations/{sanity}/
87
- ├── template-hooks/
88
- └── plugins/
75
+ src/
76
+ ├── index.ts # Commander program, prompts, routing
77
+ ├── paths.ts # Centralized path resolution
78
+ ├── configs/animations.ts # GSAP / Motion dependency configs
79
+ ├── helpers/
80
+ ├── create/ # Project creation pipeline
81
+ ├── integrate/ # CMS integration injection
82
+ │ │ └── sanity/ # Sanity files, config, mergers
83
+ │ ├── add/ # Hook injection
84
+ │ └── worktree/ # Git worktree management
85
+ └── utils/ # detect-project, format-results
86
+ templates/ # Standalone project templates
87
+ template-hooks/ # Reusable React hooks
88
+ plugins/ # Biome linting rules (Grit patterns)
89
89
  ```
90
90
 
91
91
  ## (SOON) Installation
92
92
 
93
93
  ```bash
94
- npm install -g @basementstudio/cli
94
+ npm install -g bsmnt
95
95
  ```
96
96
 
97
- For local development clone the repo and run:
97
+ For local development -- clone the repo and run:
98
98
 
99
99
  ```bash
100
100
  bun install
101
- cd packages/cli && npm link
101
+ npm link .
102
102
  ```
103
103
 
104
104
  ## Usage
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Animation library configuration manifest.
3
+ * Single source of truth for animation library dependencies.
4
+ */
5
+ /** A map of npm package names to their semver version ranges. */
6
+ interface DependencyMap {
7
+ [packageName: string]: string;
8
+ }
9
+ /** Configuration for a single animation library. */
10
+ interface AnimationLibraryConfig {
11
+ dependencies: DependencyMap;
12
+ }
13
+ /** The supported animation library identifiers. */
14
+ type AnimationLibraryName = "gsap" | "motion";
15
+ /** The full animation config record, keyed by library name. */
16
+ type AnimationConfig = Record<AnimationLibraryName, AnimationLibraryConfig>;
17
+ export declare const ANIMATION_CONFIG: AnimationConfig;
18
+ /**
19
+ * Get configuration for a specific animation library.
20
+ * @param name - The animation library name (e.g., 'gsap', 'motion')
21
+ * @returns Animation configuration or null if not found
22
+ */
23
+ export declare function getAnimationConfig(name: string): AnimationLibraryConfig | null;
24
+ export {};
25
+ //# sourceMappingURL=animations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../src/configs/animations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,UAAU,aAAa;IACtB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,oDAAoD;AACpD,UAAU,sBAAsB;IAC/B,YAAY,EAAE,aAAa,CAAC;CAC5B;AAED,mDAAmD;AACnD,KAAK,oBAAoB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C,+DAA+D;AAC/D,KAAK,eAAe,GAAG,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;AAE5E,eAAO,MAAM,gBAAgB,EAAE,eAY9B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,GACV,sBAAsB,GAAG,IAAI,CAK/B"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Animation library configuration manifest.
3
+ * Single source of truth for animation library dependencies.
4
+ */
5
+ export const ANIMATION_CONFIG = {
6
+ gsap: {
7
+ dependencies: {
8
+ gsap: "^3.12.0",
9
+ "@gsap/react": "^2.0.0",
10
+ },
11
+ },
12
+ motion: {
13
+ dependencies: {
14
+ motion: "^12.0.0",
15
+ },
16
+ },
17
+ };
18
+ /**
19
+ * Get configuration for a specific animation library.
20
+ * @param name - The animation library name (e.g., 'gsap', 'motion')
21
+ * @returns Animation configuration or null if not found
22
+ */
23
+ export function getAnimationConfig(name) {
24
+ if (name in ANIMATION_CONFIG) {
25
+ return ANIMATION_CONFIG[name];
26
+ }
27
+ return null;
28
+ }
29
+ //# sourceMappingURL=animations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animations.js","sourceRoot":"","sources":["../../src/configs/animations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAChD,IAAI,EAAE;QACL,YAAY,EAAE;YACb,IAAI,EAAE,SAAS;YACf,aAAa,EAAE,QAAQ;SACvB;KACD;IACD,MAAM,EAAE;QACP,YAAY,EAAE;YACb,MAAM,EAAE,SAAS;SACjB;KACD;CACD,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CACjC,IAAY;IAEZ,IAAI,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,IAA4B,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Hook configuration manifest.
3
+ * Each entry describes a template hook, its source file, and npm dependencies.
4
+ */
5
+ /** A map of npm package names to their semver version ranges. */
6
+ interface DependencyMap {
7
+ [packageName: string]: string;
8
+ }
9
+ /** Configuration for a single template hook. */
10
+ export interface HookConfig {
11
+ /** Display/identifier name for the hook (e.g., "use-battery"). */
12
+ name: string;
13
+ /** Source filename within the template-hooks directory. */
14
+ file: string;
15
+ /** Runtime npm dependencies required by this hook. */
16
+ dependencies: DependencyMap;
17
+ /** Dev-only npm dependencies required by this hook. */
18
+ devDependencies: DependencyMap;
19
+ }
20
+ export declare const hooksConfig: readonly HookConfig[];
21
+ export {};
22
+ //# sourceMappingURL=hooks-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-config.d.ts","sourceRoot":"","sources":["../../../src/helpers/add/hooks-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,UAAU,aAAa;IACtB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IAC1B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,YAAY,EAAE,aAAa,CAAC;IAC5B,uDAAuD;IACvD,eAAe,EAAE,aAAa,CAAC;CAC/B;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,UAAU,EA+BnC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Hook configuration manifest.
3
+ * Each entry describes a template hook, its source file, and npm dependencies.
4
+ */
5
+ export const hooksConfig = [
6
+ {
7
+ name: "use-battery",
8
+ file: "use-battery.ts",
9
+ dependencies: {
10
+ "lodash-es": "^4.17.21",
11
+ },
12
+ devDependencies: {},
13
+ },
14
+ {
15
+ name: "use-device-perf",
16
+ file: "use-device-perf.ts",
17
+ dependencies: {
18
+ "detect-gpu": "^5.0.0",
19
+ "react-device-detect": "^2.2.3",
20
+ zustand: "^5.0.0",
21
+ },
22
+ devDependencies: {},
23
+ },
24
+ {
25
+ name: "use-intersection-observer",
26
+ file: "use-intersection-observer.ts",
27
+ dependencies: {},
28
+ devDependencies: {},
29
+ },
30
+ {
31
+ name: "use-media",
32
+ file: "use-media.ts",
33
+ dependencies: {},
34
+ devDependencies: {},
35
+ },
36
+ ];
37
+ //# sourceMappingURL=hooks-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../../../src/helpers/add/hooks-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,CAAC,MAAM,WAAW,GAA0B;IACjD;QACC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE;YACb,WAAW,EAAE,UAAU;SACvB;QACD,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE;YACb,YAAY,EAAE,QAAQ;YACtB,qBAAqB,EAAE,QAAQ;YAC/B,OAAO,EAAE,QAAQ;SACjB;QACD,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,2BAA2B;QACjC,IAAI,EAAE,8BAA8B;QACpC,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;KACnB;IACD;QACC,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;KACnB;CACQ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copy selected hook files from the template-hooks source directory into the
3
+ * target project's `hooks/` directory.
4
+ *
5
+ * Only hooks whose filenames appear in the {@link hooksConfig} manifest are
6
+ * considered valid. Unknown filenames are silently skipped.
7
+ *
8
+ * @param targetDir - Absolute path to the scaffolded project directory
9
+ * @param hookNames - Array of hook filenames to install (e.g. `["use-battery.ts"]`)
10
+ */
11
+ export declare function addHooks(targetDir: string, hookNames: string[]): Promise<void>;
12
+ /**
13
+ * Interactive flow for adding hooks to an existing project.
14
+ * Validates the project, prompts for hook selection, copies files,
15
+ * and injects dependencies into package.json.
16
+ */
17
+ export declare function addToProject(): Promise<void>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/add/index.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAYD;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAwIlD"}
@@ -0,0 +1,152 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import ora from "ora";
4
+ import pc from "picocolors";
5
+ import prompts from "prompts";
6
+ import { TEMPLATE_HOOKS_DIR } from "../../paths.js";
7
+ import { hooksConfig } from "./hooks-config.js";
8
+ /**
9
+ * Copy selected hook files from the template-hooks source directory into the
10
+ * target project's `hooks/` directory.
11
+ *
12
+ * Only hooks whose filenames appear in the {@link hooksConfig} manifest are
13
+ * considered valid. Unknown filenames are silently skipped.
14
+ *
15
+ * @param targetDir - Absolute path to the scaffolded project directory
16
+ * @param hookNames - Array of hook filenames to install (e.g. `["use-battery.ts"]`)
17
+ */
18
+ export async function addHooks(targetDir, hookNames) {
19
+ if (hookNames.length === 0)
20
+ return;
21
+ const projectHooksDir = path.join(targetDir, "hooks");
22
+ await fs.ensureDir(projectHooksDir);
23
+ for (const hookFile of hookNames) {
24
+ // Validate against the known manifest
25
+ const known = hooksConfig.find((h) => h.file === hookFile);
26
+ if (!known)
27
+ continue;
28
+ const sourcePath = path.join(TEMPLATE_HOOKS_DIR, hookFile);
29
+ const destPath = path.join(projectHooksDir, hookFile);
30
+ if (await fs.pathExists(sourcePath)) {
31
+ await fs.copy(sourcePath, destPath);
32
+ }
33
+ }
34
+ }
35
+ /**
36
+ * Interactive flow for adding hooks to an existing project.
37
+ * Validates the project, prompts for hook selection, copies files,
38
+ * and injects dependencies into package.json.
39
+ */
40
+ export async function addToProject() {
41
+ const targetDir = process.cwd();
42
+ // 1. Validate current directory has a package.json
43
+ const pkgPath = path.join(targetDir, "package.json");
44
+ if (!(await fs.pathExists(pkgPath))) {
45
+ console.log(pc.red("\n No package.json found in the current directory."));
46
+ console.log(pc.yellow(" Make sure you're in a project directory.\n"));
47
+ return;
48
+ }
49
+ // 2. Detect src/ prefix for hooks directory
50
+ const usesSrc = await fs.pathExists(path.join(targetDir, "src/app"));
51
+ const hooksDir = usesSrc
52
+ ? path.join(targetDir, "src/hooks")
53
+ : path.join(targetDir, "hooks");
54
+ // 3. Prompt for what to add
55
+ const { category } = (await prompts({
56
+ type: "select",
57
+ name: "category",
58
+ message: "What would you like to add?",
59
+ choices: [
60
+ {
61
+ title: "Hooks",
62
+ description: "Add reusable React hooks to your project",
63
+ value: "hooks",
64
+ },
65
+ ],
66
+ }));
67
+ if (!category) {
68
+ console.log(pc.yellow("\n Operation cancelled.\n"));
69
+ return;
70
+ }
71
+ if (category === "hooks") {
72
+ // 4. Check which hooks are already installed
73
+ const installedHooks = new Set();
74
+ for (const hook of hooksConfig) {
75
+ const hookPath = path.join(hooksDir, hook.file);
76
+ if (await fs.pathExists(hookPath)) {
77
+ installedHooks.add(hook.file);
78
+ }
79
+ }
80
+ const availableHooks = hooksConfig.filter((h) => !installedHooks.has(h.file));
81
+ if (availableHooks.length === 0) {
82
+ console.log(pc.green("\n All available hooks are already installed.\n"));
83
+ return;
84
+ }
85
+ // 5. Prompt for hook selection
86
+ const { selectedHooks } = (await prompts({
87
+ type: "multiselect",
88
+ name: "selectedHooks",
89
+ message: "Select hooks to add:",
90
+ choices: availableHooks.map((h) => ({
91
+ title: h.name,
92
+ value: h.file,
93
+ })),
94
+ }));
95
+ if (!selectedHooks || selectedHooks.length === 0) {
96
+ console.log(pc.yellow("\n No hooks selected.\n"));
97
+ return;
98
+ }
99
+ // 6. Copy hooks and inject dependencies
100
+ const spinner = ora("Adding hooks...").start();
101
+ try {
102
+ // Copy hook files
103
+ await fs.ensureDir(hooksDir);
104
+ for (const hookFile of selectedHooks) {
105
+ const sourcePath = path.join(TEMPLATE_HOOKS_DIR, hookFile);
106
+ const destPath = path.join(hooksDir, hookFile);
107
+ if (await fs.pathExists(sourcePath)) {
108
+ await fs.copy(sourcePath, destPath);
109
+ }
110
+ }
111
+ // Inject dependencies into package.json
112
+ const pkg = (await fs.readJson(pkgPath));
113
+ let depsAdded = false;
114
+ for (const hookFile of selectedHooks) {
115
+ const hookCfg = hooksConfig.find((h) => h.file === hookFile);
116
+ if (!hookCfg)
117
+ continue;
118
+ if (Object.keys(hookCfg.dependencies).length > 0) {
119
+ pkg.dependencies = {
120
+ ...pkg.dependencies,
121
+ ...hookCfg.dependencies,
122
+ };
123
+ depsAdded = true;
124
+ }
125
+ if (Object.keys(hookCfg.devDependencies).length > 0) {
126
+ pkg.devDependencies = {
127
+ ...pkg.devDependencies,
128
+ ...hookCfg.devDependencies,
129
+ };
130
+ depsAdded = true;
131
+ }
132
+ }
133
+ if (depsAdded) {
134
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
135
+ }
136
+ spinner.succeed("Hooks added");
137
+ }
138
+ catch (error) {
139
+ spinner.fail("Failed to add hooks");
140
+ throw error;
141
+ }
142
+ // 7. Summary
143
+ const hookNames = selectedHooks
144
+ .map((f) => hooksConfig.find((h) => h.file === f)?.name ?? f)
145
+ .join(", ");
146
+ console.log(`\n ${pc.bold(pc.green("Done!"))} Added: ${pc.cyan(hookNames)}`);
147
+ console.log(`\n ${pc.bold("Next steps:")}`);
148
+ console.log(pc.cyan(" bun install"));
149
+ console.log();
150
+ }
151
+ }
152
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/add/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,SAAiB,EACjB,SAAmB;IAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAEpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,sCAAsC;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;AACF,CAAC;AAYD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhC,mDAAmD;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAC7D,CAAC;QACF,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,MAAM,CAAC,8CAA8C,CAAC,CACzD,CAAC;QACF,OAAO;IACR,CAAC;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,OAAO;QACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEjC,4BAA4B;IAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC;QACnC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,6BAA6B;QACtC,OAAO,EAAE;YACR;gBACC,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,0CAA0C;gBACvD,KAAK,EAAE,OAAO;aACd;SACD;KACD,CAAC,CAA0B,CAAC;IAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACrD,OAAO;IACR,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,6CAA6C;QAC7C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QAED,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAClC,CAAC;QAEF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QAED,+BAA+B;QAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC;YACxC,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,KAAK,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;SACH,CAAC,CAAiC,CAAC;QAEpC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACnD,OAAO;QACR,CAAC;QAED,wCAAwC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE/C,IAAI,CAAC;YACJ,kBAAkB;YAClB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7B,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/C,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACrC,CAAC;YACF,CAAC;YAED,wCAAwC;YACxC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAoB,CAAC;YAC5D,IAAI,SAAS,GAAG,KAAK,CAAC;YAEtB,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;gBAC7D,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,GAAG,CAAC,YAAY,GAAG;wBAClB,GAAG,GAAG,CAAC,YAAY;wBACnB,GAAG,OAAO,CAAC,YAAY;qBACvB,CAAC;oBACF,SAAS,GAAG,IAAI,CAAC;gBAClB,CAAC;gBAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,eAAe,GAAG;wBACrB,GAAG,GAAG,CAAC,eAAe;wBACtB,GAAG,OAAO,CAAC,eAAe;qBAC1B,CAAC;oBACF,SAAS,GAAG,IAAI,CAAC;gBAClB,CAAC;YACF,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACf,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC;QACb,CAAC;QAED,aAAa;QACb,MAAM,SAAS,GAAG,aAAa;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;aAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO,CAAC,GAAG,CACV,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,EAAE,CAAC;IACf,CAAC;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** Valid template names that can be scaffolded. */
2
+ export type TemplateName = "default" | "webgl" | "webgpu" | "experiment";
3
+ /**
4
+ * Copy a standalone project template into the target directory.
5
+ *
6
+ * @param templateName - One of the available template identifiers
7
+ * @param targetDir - Absolute path where the template should be written
8
+ * @throws If the requested template directory does not exist
9
+ */
10
+ export declare function copyTemplate(templateName: string, targetDir: string): Promise<void>;
11
+ //# sourceMappingURL=copy-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-template.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/copy-template.ts"],"names":[],"mappings":"AAKA,mDAAmD;AACnD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEzE;;;;;;GAMG;AACH,wBAAsB,YAAY,CACjC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,19 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ import { TEMPLATES_DIR } from "../../paths.js";
4
+ /**
5
+ * Copy a standalone project template into the target directory.
6
+ *
7
+ * @param templateName - One of the available template identifiers
8
+ * @param targetDir - Absolute path where the template should be written
9
+ * @throws If the requested template directory does not exist
10
+ */
11
+ export async function copyTemplate(templateName, targetDir) {
12
+ const templateDir = path.join(TEMPLATES_DIR, templateName);
13
+ const exists = await fs.pathExists(templateDir);
14
+ if (!exists) {
15
+ throw new Error(`Template "${templateName}" not found at ${templateDir}`);
16
+ }
17
+ await fs.copy(templateDir, targetDir);
18
+ }
19
+ //# sourceMappingURL=copy-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-template.js","sourceRoot":"","sources":["../../../src/helpers/create/copy-template.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAK/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,YAAoB,EACpB,SAAiB;IAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,kBAAkB,WAAW,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** All options required by the create-project orchestrator. */
2
+ export interface CreateProjectOptions {
3
+ projectName: string;
4
+ targetDir: string;
5
+ template: string;
6
+ cms: string;
7
+ animation: string;
8
+ agent: "claude" | "opencode" | null;
9
+ hooks: string[];
10
+ }
11
+ /** Result summary returned after project creation. */
12
+ export interface CreateProjectResult {
13
+ success: boolean;
14
+ sanitySetupDone: boolean;
15
+ }
16
+ /**
17
+ * Orchestrate the full project creation pipeline.
18
+ *
19
+ * Displays ora spinners with step-by-step progress while steps run.
20
+ */
21
+ export declare function createProject(options: CreateProjectOptions): Promise<CreateProjectResult>;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/index.ts"],"names":[],"mappings":"AAYA,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAyE9B"}
@@ -0,0 +1,81 @@
1
+ import ora from "ora";
2
+ import { addHooks } from "../add/index.js";
3
+ import { injectIntegration } from "../integrate/merge-orchestrator.js";
4
+ import { copyTemplate } from "./copy-template.js";
5
+ import { installDependencies } from "./install.js";
6
+ import { renameSpecialFiles } from "./rename-files.js";
7
+ import { setupAgent } from "./setup-agent.js";
8
+ import { setupSanity } from "./setup-sanity.js";
9
+ import { updatePackageJson } from "./update-package.js";
10
+ /**
11
+ * Orchestrate the full project creation pipeline.
12
+ *
13
+ * Displays ora spinners with step-by-step progress while steps run.
14
+ */
15
+ export async function createProject(options) {
16
+ const { projectName, targetDir, template, cms, animation, agent, hooks } = options;
17
+ const spinner = ora({ color: "cyan" });
18
+ try {
19
+ // 1. Copy template + rename special files
20
+ spinner.start("Scaffolding project from template...");
21
+ await copyTemplate(template, targetDir);
22
+ await renameSpecialFiles(targetDir);
23
+ spinner.succeed("Project scaffolded");
24
+ // 2. Configure project (package.json)
25
+ spinner.start("Configuring project...");
26
+ await updatePackageJson(targetDir, {
27
+ projectName,
28
+ cms,
29
+ animation,
30
+ hooks,
31
+ });
32
+ spinner.succeed("Project configured");
33
+ // 3. Inject CMS integration files + mergers
34
+ if (cms !== "none") {
35
+ spinner.start(`Adding ${cms} integration...`);
36
+ await injectIntegration(targetDir, cms, spinner);
37
+ spinner.succeed(`${cms.charAt(0).toUpperCase() + cms.slice(1)} integration added`);
38
+ }
39
+ // 4. Set up agent skills (slow — 10-30s)
40
+ if (agent) {
41
+ spinner.start("Setting up AI agent skills...");
42
+ await setupAgent(targetDir, {
43
+ agent,
44
+ cms,
45
+ templateType: template,
46
+ });
47
+ spinner.succeed("Agent skills installed");
48
+ }
49
+ // 5. Install dependencies (slow — 5-20s)
50
+ spinner.start("Installing dependencies...");
51
+ await installDependencies(targetDir);
52
+ spinner.succeed("Dependencies installed");
53
+ // 6. Add hooks
54
+ if (hooks.length > 0) {
55
+ spinner.start("Adding hooks...");
56
+ await addHooks(targetDir, hooks);
57
+ spinner.succeed("Hooks added");
58
+ }
59
+ }
60
+ catch (error) {
61
+ spinner.fail("Pipeline failed");
62
+ throw error;
63
+ }
64
+ // 7. Interactive Sanity project setup (manages its own spinners)
65
+ let sanitySetupDone = false;
66
+ if (cms === "sanity") {
67
+ try {
68
+ sanitySetupDone = await setupSanity(targetDir, {
69
+ projectName,
70
+ });
71
+ }
72
+ catch {
73
+ // Sanity auto-setup is optional; callers handle messaging
74
+ }
75
+ }
76
+ return {
77
+ success: true,
78
+ sanitySetupDone,
79
+ };
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/create/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Run `bun install` in the target project directory.
3
+ *
4
+ * @param targetDir - Absolute path to the scaffolded project directory
5
+ * @throws If the install process exits with a non-zero code
6
+ */
7
+ export declare function installDependencies(targetDir: string): Promise<void>;
8
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/install.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1E"}
@@ -0,0 +1,20 @@
1
+ import { execSync } from "node:child_process";
2
+ /**
3
+ * Run `bun install` in the target project directory.
4
+ *
5
+ * @param targetDir - Absolute path to the scaffolded project directory
6
+ * @throws If the install process exits with a non-zero code
7
+ */
8
+ export async function installDependencies(targetDir) {
9
+ try {
10
+ execSync("bun install", {
11
+ cwd: targetDir,
12
+ stdio: "pipe",
13
+ });
14
+ }
15
+ catch (error) {
16
+ const message = error instanceof Error ? error.message : String(error);
17
+ throw new Error(`Failed to install dependencies: ${message}`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/helpers/create/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IAC1D,IAAI,CAAC;QACJ,QAAQ,CAAC,aAAa,EAAE;YACvB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,MAAM;SACb,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Rename special files that had to be prefixed for npm publishing.
3
+ *
4
+ * npm strips `.gitignore` from published packages, so templates ship it as
5
+ * `_gitignore` and this function renames it back after copying.
6
+ *
7
+ * @param targetDir - Absolute path to the scaffolded project directory
8
+ */
9
+ export declare function renameSpecialFiles(targetDir: string): Promise<void>;
10
+ //# sourceMappingURL=rename-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-files.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/rename-files.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE"}
@@ -0,0 +1,17 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ /**
4
+ * Rename special files that had to be prefixed for npm publishing.
5
+ *
6
+ * npm strips `.gitignore` from published packages, so templates ship it as
7
+ * `_gitignore` and this function renames it back after copying.
8
+ *
9
+ * @param targetDir - Absolute path to the scaffolded project directory
10
+ */
11
+ export async function renameSpecialFiles(targetDir) {
12
+ const underscoreGitignore = path.join(targetDir, "_gitignore");
13
+ if (await fs.pathExists(underscoreGitignore)) {
14
+ await fs.rename(underscoreGitignore, path.join(targetDir, ".gitignore"));
15
+ }
16
+ }
17
+ //# sourceMappingURL=rename-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-files.js","sourceRoot":"","sources":["../../../src/helpers/create/rename-files.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACzD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAE/D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1E,CAAC;AACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ /** Options controlling which agent tooling to scaffold. */
2
+ export interface AgentOptions {
3
+ /** The AI agent flavour, or null to skip agent setup. */
4
+ agent: "claude" | "opencode" | null;
5
+ /** The selected CMS integration (e.g. "sanity"), or null / "none". */
6
+ cms: string | null;
7
+ /** The selected template type (e.g. "webgpu", "experiment"). */
8
+ templateType: string | null;
9
+ }
10
+ /**
11
+ * Set up AI agent skills and configuration in the target project.
12
+ *
13
+ * 1. Creates the agent directory structure (`.claude/skills/` or `.opencode/skills/`).
14
+ * 2. Installs recommended skills via `bunx skills add`.
15
+ * 3. If CMS is Sanity and agent is Claude, registers the Sanity MCP server.
16
+ *
17
+ * @param targetDir - Absolute path to the scaffolded project directory
18
+ * @param options - Agent configuration
19
+ */
20
+ export declare function setupAgent(targetDir: string, options: AgentOptions): Promise<void>;
21
+ //# sourceMappingURL=setup-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-agent.d.ts","sourceRoot":"","sources":["../../../src/helpers/create/setup-agent.ts"],"names":[],"mappings":"AAIA,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC5B,yDAAyD;IACzD,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;IACpC,sEAAsE;IACtE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiEf"}