bsmnt 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) 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 +23 -15
  88. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/package.json +1 -1
  89. package/src/templates/next-webgl/lib/renderer.ts +7 -0
  90. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/package.json +1 -1
  91. package/packages/cli/bin/index.js +0 -259
  92. package/packages/cli/src/commands/add-integration.js +0 -310
  93. package/packages/cli/src/commands/create.js +0 -409
  94. package/packages/cli/src/commands/setup-sanity.js +0 -426
  95. package/packages/cli/src/commands/worktree.js +0 -805
  96. package/packages/create-basement-app/integrations/sanity/config.js +0 -46
  97. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
  98. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
  99. package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
  100. package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
  101. package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
  102. package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
  103. package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
  104. package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
  105. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
  106. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
  107. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
  108. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
  109. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
  110. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
  111. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
  112. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
  113. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
  114. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
  115. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
  116. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
  117. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
  118. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
  119. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
  120. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
  121. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
  122. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
  123. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
  124. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
  125. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
  126. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
  127. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
  128. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
  129. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
  130. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
  131. package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
  132. package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
  133. package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
  134. package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
  135. package/packages/create-basement-app/package.json +0 -10
  136. package/packages/create-basement-app/src/configs/animations.js +0 -28
  137. package/packages/create-basement-app/src/index.js +0 -15
  138. package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
  139. package/packages/create-basement-app/src/mergers/config.js +0 -109
  140. package/packages/create-basement-app/src/mergers/index.js +0 -346
  141. package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
  142. package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
  143. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
  144. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +0 -12
  145. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +0 -10
  146. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
  147. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
  148. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
  149. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
  150. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
  151. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
  152. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
  153. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  154. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
  155. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +0 -20
  156. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +0 -105
  157. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  158. package/packages/create-basement-app/templates/webgl/app/layout.tsx +0 -104
  159. package/packages/create-basement-app/templates/webgl/app/robots.ts +0 -15
  160. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +0 -16
  161. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +0 -27
  162. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +0 -11
  163. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +0 -66
  164. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +0 -65
  165. package/packages/create-basement-app/templates/webgl/components/ui/README.md +0 -77
  166. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +0 -37
  167. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +0 -224
  168. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +0 -146
  169. package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
  170. /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
  171. /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
  172. /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
  173. /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
  174. /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
  175. /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
  176. /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
  177. /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
  178. /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
  179. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
  180. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
  181. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
  182. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
  183. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
  184. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +0 -0
  185. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
  186. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
  187. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
  188. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
  189. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
  190. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
  191. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/integrations/.gitkeep +0 -0
  192. /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
  193. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
  194. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
  195. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
  196. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
  197. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
  198. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
  199. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
  200. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
  201. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
  202. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
  203. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
  204. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
  205. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
  206. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
  207. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
  208. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
  209. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
  210. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
  211. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
  212. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
  213. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
  214. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
  215. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
  216. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
  217. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
  218. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
  219. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
  220. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
  221. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
  222. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
  223. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
  224. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
  225. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
  226. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +0 -0
  227. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
  228. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
  229. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
  230. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
  231. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
  232. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
  233. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +0 -0
  234. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
  235. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
  236. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
  237. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
  238. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  239. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  240. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/README.md +0 -0
  241. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/architecture.mdc +0 -0
  242. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/components.mdc +0 -0
  243. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/integrations.mdc +0 -0
  244. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/main.mdc +0 -0
  245. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/styling.mdc +0 -0
  246. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
  247. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
  248. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
  249. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  250. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/workflows/lighthouse-to-slack.yml +0 -0
  251. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/extensions.json +0 -0
  252. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/settings.json +0 -0
  253. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
  254. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
  255. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/favicon.ico +0 -0
  256. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/layout.tsx +0 -0
  257. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
  258. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/robots.ts +0 -0
  259. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +0 -0
  260. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/biome.json +0 -0
  261. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
  262. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
  263. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
  264. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
  265. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/theme/index.tsx +0 -0
  266. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/wrapper/index.tsx +0 -0
  267. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/README.md +0 -0
  268. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/README.md +0 -0
  269. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/index.tsx +0 -0
  270. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +0 -0
  271. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
  272. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
  273. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
  274. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
  275. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
  276. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
  277. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
  278. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
  279. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
  280. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
  281. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
  282. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
  283. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
  284. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
  285. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
  286. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
  287. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
  288. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
  289. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
  290. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
  291. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
  292. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
  293. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
  294. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
  295. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
  296. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
  297. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
  298. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
  299. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
  300. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
  301. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
  302. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
  303. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
  304. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
  305. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
  306. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
  307. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
  308. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
  309. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
  310. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
  311. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +0 -0
  312. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
  313. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
  314. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
  315. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
  316. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
  317. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
  318. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
  319. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  320. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
  321. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
  322. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
  323. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  324. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  325. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/README.md +0 -0
  326. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/architecture.mdc +0 -0
  327. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/components.mdc +0 -0
  328. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/integrations.mdc +0 -0
  329. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/main.mdc +0 -0
  330. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/styling.mdc +0 -0
  331. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
  332. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
  333. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
  334. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  335. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/workflows/lighthouse-to-slack.yml +0 -0
  336. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/extensions.json +0 -0
  337. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/settings.json +0 -0
  338. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
  339. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
  340. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/favicon.ico +0 -0
  341. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/layout.tsx +0 -0
  342. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
  343. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/robots.ts +0 -0
  344. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +0 -0
  345. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/biome.json +0 -0
  346. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
  347. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
  348. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
  349. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/theme/index.tsx +0 -0
  350. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -0
  351. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/README.md +0 -0
  352. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/README.md +0 -0
  353. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/index.tsx +0 -0
  354. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/link/index.tsx +0 -0
  355. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
  356. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
  357. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +0 -0
  358. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
  359. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
  360. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
  361. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
  362. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
  363. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
  364. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
  365. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
  366. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
  367. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
  368. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
  369. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
  370. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
  371. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
  372. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
  373. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
  374. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
  375. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
  376. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
  377. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
  378. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
  379. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
  380. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
  381. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
  382. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
  383. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
  384. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
  385. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
  386. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
  387. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
  388. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
  389. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
  390. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
  391. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
  392. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
  393. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
  394. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
  395. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
  396. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
  397. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +0 -0
  398. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
  399. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
  400. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
  401. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
  402. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
  403. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
  404. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
  405. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  406. /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":"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"}
@@ -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"}