bsmnt 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/dist/{helpers/add → application/add-hooks}/index.d.ts +4 -4
  2. package/dist/application/add-hooks/index.d.ts.map +1 -0
  3. package/dist/{helpers/add → application/add-hooks}/index.js +22 -35
  4. package/dist/application/add-hooks/index.js.map +1 -0
  5. package/dist/{utils → application/add-integration}/format-results.d.ts +1 -6
  6. package/dist/application/add-integration/format-results.d.ts.map +1 -0
  7. package/dist/{utils → application/add-integration}/format-results.js +1 -6
  8. package/dist/application/add-integration/format-results.js.map +1 -0
  9. package/dist/{helpers/integrate → application/add-integration}/index.d.ts +2 -1
  10. package/dist/application/add-integration/index.d.ts.map +1 -0
  11. package/dist/{helpers/integrate → application/add-integration}/index.js +46 -41
  12. package/dist/application/add-integration/index.js.map +1 -0
  13. package/dist/application/create-project/build-context.d.ts +9 -0
  14. package/dist/application/create-project/build-context.d.ts.map +1 -0
  15. package/dist/application/create-project/build-context.js +13 -0
  16. package/dist/application/create-project/build-context.js.map +1 -0
  17. package/dist/application/create-project/index.d.ts +44 -0
  18. package/dist/application/create-project/index.d.ts.map +1 -0
  19. package/dist/application/create-project/index.js +70 -0
  20. package/dist/application/create-project/index.js.map +1 -0
  21. package/dist/application/create-project/map-selection-to-registry.d.ts +3 -0
  22. package/dist/application/create-project/map-selection-to-registry.d.ts.map +1 -0
  23. package/dist/application/create-project/map-selection-to-registry.js +30 -0
  24. package/dist/application/create-project/map-selection-to-registry.js.map +1 -0
  25. package/dist/application/create-project/resolve-selection.d.ts +15 -0
  26. package/dist/application/create-project/resolve-selection.d.ts.map +1 -0
  27. package/dist/application/create-project/resolve-selection.js +11 -0
  28. package/dist/application/create-project/resolve-selection.js.map +1 -0
  29. package/dist/{helpers/skills → application/install-skills}/index.d.ts +1 -1
  30. package/dist/application/install-skills/index.d.ts.map +1 -0
  31. package/dist/{helpers/skills → application/install-skills}/index.js +31 -44
  32. package/dist/application/install-skills/index.js.map +1 -0
  33. package/dist/{utils/detect-project.d.ts → application/shared/project-detection.d.ts} +8 -15
  34. package/dist/application/shared/project-detection.d.ts.map +1 -0
  35. package/dist/{utils/detect-project.js → application/shared/project-detection.js} +8 -24
  36. package/dist/application/shared/project-detection.js.map +1 -0
  37. package/dist/core/create/build-plan.d.ts +8 -0
  38. package/dist/core/create/build-plan.d.ts.map +1 -0
  39. package/dist/core/create/build-plan.js +89 -0
  40. package/dist/core/create/build-plan.js.map +1 -0
  41. package/dist/core/create/execute-plan.d.ts +23 -0
  42. package/dist/core/create/execute-plan.d.ts.map +1 -0
  43. package/dist/core/create/execute-plan.js +23 -0
  44. package/dist/core/create/execute-plan.js.map +1 -0
  45. package/dist/core/create/internal-ids.d.ts +23 -0
  46. package/dist/core/create/internal-ids.d.ts.map +1 -0
  47. package/dist/core/create/internal-ids.js +36 -0
  48. package/dist/core/create/internal-ids.js.map +1 -0
  49. package/dist/core/create/registry.d.ts +12 -0
  50. package/dist/core/create/registry.d.ts.map +1 -0
  51. package/dist/core/create/registry.js +33 -0
  52. package/dist/core/create/registry.js.map +1 -0
  53. package/dist/core/create/types.d.ts +96 -0
  54. package/dist/core/create/types.d.ts.map +1 -0
  55. package/dist/core/create/types.js +2 -0
  56. package/dist/core/create/types.js.map +1 -0
  57. package/dist/domain/agents.d.ts +61 -0
  58. package/dist/domain/agents.d.ts.map +1 -0
  59. package/dist/domain/agents.js +35 -0
  60. package/dist/domain/agents.js.map +1 -0
  61. package/dist/domain/animations.d.ts +20 -0
  62. package/dist/domain/animations.d.ts.map +1 -0
  63. package/dist/domain/animations.js +13 -0
  64. package/dist/domain/animations.js.map +1 -0
  65. package/dist/domain/cms.d.ts +24 -0
  66. package/dist/domain/cms.d.ts.map +1 -0
  67. package/dist/domain/cms.js +13 -0
  68. package/dist/domain/cms.js.map +1 -0
  69. package/dist/domain/hooks.d.ts +67 -0
  70. package/dist/domain/hooks.d.ts.map +1 -0
  71. package/dist/domain/hooks.js +52 -0
  72. package/dist/domain/hooks.js.map +1 -0
  73. package/dist/domain/skills.d.ts +70 -0
  74. package/dist/domain/skills.d.ts.map +1 -0
  75. package/dist/domain/skills.js +84 -0
  76. package/dist/domain/skills.js.map +1 -0
  77. package/dist/domain/templates.d.ts +51 -0
  78. package/dist/domain/templates.d.ts.map +1 -0
  79. package/dist/domain/templates.js +27 -0
  80. package/dist/domain/templates.js.map +1 -0
  81. package/dist/index.js +124 -115
  82. package/dist/index.js.map +1 -1
  83. package/dist/infrastructure/agents/register-sanity-mcp.d.ts +12 -0
  84. package/dist/infrastructure/agents/register-sanity-mcp.d.ts.map +1 -0
  85. package/dist/infrastructure/agents/register-sanity-mcp.js +153 -0
  86. package/dist/infrastructure/agents/register-sanity-mcp.js.map +1 -0
  87. package/dist/infrastructure/create/apply-copy-paths.d.ts +3 -0
  88. package/dist/infrastructure/create/apply-copy-paths.d.ts.map +1 -0
  89. package/dist/infrastructure/create/apply-copy-paths.js +12 -0
  90. package/dist/infrastructure/create/apply-copy-paths.js.map +1 -0
  91. package/dist/infrastructure/create/apply-merge-paths.d.ts +3 -0
  92. package/dist/infrastructure/create/apply-merge-paths.d.ts.map +1 -0
  93. package/dist/infrastructure/create/apply-merge-paths.js +17 -0
  94. package/dist/infrastructure/create/apply-merge-paths.js.map +1 -0
  95. package/dist/infrastructure/create/apply-package-json.d.ts +8 -0
  96. package/dist/infrastructure/create/apply-package-json.d.ts.map +1 -0
  97. package/dist/infrastructure/create/apply-package-json.js +46 -0
  98. package/dist/infrastructure/create/apply-package-json.js.map +1 -0
  99. package/dist/infrastructure/create/copy-template.d.ts +10 -0
  100. package/dist/infrastructure/create/copy-template.d.ts.map +1 -0
  101. package/dist/infrastructure/create/copy-template.js.map +1 -0
  102. package/dist/infrastructure/create/executor.d.ts +3 -0
  103. package/dist/infrastructure/create/executor.d.ts.map +1 -0
  104. package/dist/infrastructure/create/executor.js +21 -0
  105. package/dist/infrastructure/create/executor.js.map +1 -0
  106. package/dist/{helpers/create/init-git.d.ts → infrastructure/create/init-git-repo.d.ts} +2 -3
  107. package/dist/infrastructure/create/init-git-repo.d.ts.map +1 -0
  108. package/dist/{helpers/create/init-git.js → infrastructure/create/init-git-repo.js} +1 -4
  109. package/dist/infrastructure/create/init-git-repo.js.map +1 -0
  110. package/dist/{helpers/create/install.d.ts → infrastructure/create/install-dependencies.d.ts} +1 -1
  111. package/dist/infrastructure/create/install-dependencies.d.ts.map +1 -0
  112. package/dist/{helpers/create/install.js → infrastructure/create/install-dependencies.js} +1 -1
  113. package/dist/infrastructure/create/install-dependencies.js.map +1 -0
  114. package/dist/infrastructure/create/lifecycle-registry.d.ts +3 -0
  115. package/dist/infrastructure/create/lifecycle-registry.d.ts.map +1 -0
  116. package/dist/infrastructure/create/lifecycle-registry.js +38 -0
  117. package/dist/infrastructure/create/lifecycle-registry.js.map +1 -0
  118. package/dist/infrastructure/create/merge-registry.d.ts +3 -0
  119. package/dist/infrastructure/create/merge-registry.d.ts.map +1 -0
  120. package/dist/infrastructure/create/merge-registry.js +27 -0
  121. package/dist/infrastructure/create/merge-registry.js.map +1 -0
  122. package/dist/infrastructure/create/rename-files.d.ts.map +1 -0
  123. package/dist/infrastructure/create/rename-files.js.map +1 -0
  124. package/dist/{helpers → infrastructure}/create/setup-agent.d.ts +9 -7
  125. package/dist/infrastructure/create/setup-agent.d.ts.map +1 -0
  126. package/dist/infrastructure/create/setup-agent.js +77 -0
  127. package/dist/infrastructure/create/setup-agent.js.map +1 -0
  128. package/dist/infrastructure/create/setup-sanity.d.ts.map +1 -0
  129. package/dist/{helpers → infrastructure}/create/setup-sanity.js +1 -19
  130. package/dist/infrastructure/create/setup-sanity.js.map +1 -0
  131. package/dist/infrastructure/integrations/inject-integration.d.ts +9 -0
  132. package/dist/infrastructure/integrations/inject-integration.d.ts.map +1 -0
  133. package/dist/{helpers/integrate/merge-orchestrator.js → infrastructure/integrations/inject-integration.js} +26 -38
  134. package/dist/infrastructure/integrations/inject-integration.js.map +1 -0
  135. package/dist/modules/features/agents/index.d.ts +3 -0
  136. package/dist/modules/features/agents/index.d.ts.map +1 -0
  137. package/dist/modules/features/agents/index.js +4 -0
  138. package/dist/modules/features/agents/index.js.map +1 -0
  139. package/dist/modules/features/agents/shared.d.ts +4 -0
  140. package/dist/modules/features/agents/shared.d.ts.map +1 -0
  141. package/dist/modules/features/agents/shared.js +21 -0
  142. package/dist/modules/features/agents/shared.js.map +1 -0
  143. package/dist/{configs/animations.d.ts → modules/features/animation/config.d.ts} +1 -1
  144. package/dist/modules/features/animation/config.d.ts.map +1 -0
  145. package/dist/{configs/animations.js → modules/features/animation/config.js} +1 -1
  146. package/dist/modules/features/animation/config.js.map +1 -0
  147. package/dist/modules/features/animation/gsap.d.ts +3 -0
  148. package/dist/modules/features/animation/gsap.d.ts.map +1 -0
  149. package/dist/modules/features/animation/gsap.js +16 -0
  150. package/dist/modules/features/animation/gsap.js.map +1 -0
  151. package/dist/modules/features/animation/index.d.ts +3 -0
  152. package/dist/modules/features/animation/index.d.ts.map +1 -0
  153. package/dist/modules/features/animation/index.js +4 -0
  154. package/dist/modules/features/animation/index.js.map +1 -0
  155. package/dist/modules/features/animation/motion.d.ts +3 -0
  156. package/dist/modules/features/animation/motion.d.ts.map +1 -0
  157. package/dist/modules/features/animation/motion.js +16 -0
  158. package/dist/modules/features/animation/motion.js.map +1 -0
  159. package/dist/modules/features/cms/index.d.ts +3 -0
  160. package/dist/modules/features/cms/index.d.ts.map +1 -0
  161. package/dist/modules/features/cms/index.js +7 -0
  162. package/dist/modules/features/cms/index.js.map +1 -0
  163. package/dist/modules/features/cms/sanity/config.d.ts.map +1 -0
  164. package/dist/{helpers/integrate → modules/features/cms}/sanity/config.js +3 -2
  165. package/dist/modules/features/cms/sanity/config.js.map +1 -0
  166. package/dist/modules/features/cms/sanity/index.d.ts +3 -0
  167. package/dist/modules/features/cms/sanity/index.d.ts.map +1 -0
  168. package/dist/modules/features/cms/sanity/index.js +61 -0
  169. package/dist/modules/features/cms/sanity/index.js.map +1 -0
  170. package/dist/{helpers/integrate/sanity/mergers/check-integration-merger.d.ts → modules/features/cms/sanity/mergers/check-integration.d.ts} +1 -1
  171. package/dist/modules/features/cms/sanity/mergers/check-integration.d.ts.map +1 -0
  172. package/dist/{helpers/integrate/sanity/mergers/check-integration-merger.js → modules/features/cms/sanity/mergers/check-integration.js} +1 -1
  173. package/dist/modules/features/cms/sanity/mergers/check-integration.js.map +1 -0
  174. package/dist/{helpers/integrate/sanity/mergers/layout-merger.d.ts → modules/features/cms/sanity/mergers/layout.d.ts} +1 -1
  175. package/dist/modules/features/cms/sanity/mergers/layout.d.ts.map +1 -0
  176. package/dist/{helpers/integrate/sanity/mergers/layout-merger.js → modules/features/cms/sanity/mergers/layout.js} +1 -1
  177. package/dist/modules/features/cms/sanity/mergers/layout.js.map +1 -0
  178. package/dist/modules/features/cms/sanity/mergers/sitemap.d.ts +13 -0
  179. package/dist/modules/features/cms/sanity/mergers/sitemap.d.ts.map +1 -0
  180. package/dist/modules/features/cms/sanity/mergers/sitemap.js +92 -0
  181. package/dist/modules/features/cms/sanity/mergers/sitemap.js.map +1 -0
  182. package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts +14 -0
  183. package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts.map +1 -0
  184. package/dist/modules/features/cms/sanity-pagebuilder/config.js +44 -0
  185. package/dist/modules/features/cms/sanity-pagebuilder/config.js.map +1 -0
  186. package/dist/modules/features/cms/sanity-pagebuilder/index.d.ts +3 -0
  187. package/dist/modules/features/cms/sanity-pagebuilder/index.d.ts.map +1 -0
  188. package/dist/modules/features/cms/sanity-pagebuilder/index.js +46 -0
  189. package/dist/modules/features/cms/sanity-pagebuilder/index.js.map +1 -0
  190. package/dist/modules/features/hooks/factory.d.ts +4 -0
  191. package/dist/modules/features/hooks/factory.d.ts.map +1 -0
  192. package/dist/modules/features/hooks/factory.js +26 -0
  193. package/dist/modules/features/hooks/factory.js.map +1 -0
  194. package/dist/modules/features/hooks/index.d.ts +3 -0
  195. package/dist/modules/features/hooks/index.d.ts.map +1 -0
  196. package/dist/modules/features/hooks/index.js +4 -0
  197. package/dist/modules/features/hooks/index.js.map +1 -0
  198. package/dist/modules/presets/index.d.ts +3 -0
  199. package/dist/modules/presets/index.d.ts.map +1 -0
  200. package/dist/modules/presets/index.js +11 -0
  201. package/dist/modules/presets/index.js.map +1 -0
  202. package/dist/modules/presets/next-default.d.ts +3 -0
  203. package/dist/modules/presets/next-default.d.ts.map +1 -0
  204. package/dist/modules/presets/next-default.js +9 -0
  205. package/dist/modules/presets/next-default.js.map +1 -0
  206. package/dist/modules/presets/next-experiments.d.ts +3 -0
  207. package/dist/modules/presets/next-experiments.d.ts.map +1 -0
  208. package/dist/modules/presets/next-experiments.js +9 -0
  209. package/dist/modules/presets/next-experiments.js.map +1 -0
  210. package/dist/modules/presets/next-pagebuilder.d.ts +3 -0
  211. package/dist/modules/presets/next-pagebuilder.d.ts.map +1 -0
  212. package/dist/modules/presets/next-pagebuilder.js +10 -0
  213. package/dist/modules/presets/next-pagebuilder.js.map +1 -0
  214. package/dist/modules/presets/next-webgl.d.ts +3 -0
  215. package/dist/modules/presets/next-webgl.d.ts.map +1 -0
  216. package/dist/modules/presets/next-webgl.js +9 -0
  217. package/dist/modules/presets/next-webgl.js.map +1 -0
  218. package/dist/paths.d.ts +7 -1
  219. package/dist/paths.d.ts.map +1 -1
  220. package/dist/paths.js +8 -2
  221. package/dist/paths.js.map +1 -1
  222. package/index.js +2 -2
  223. package/package.json +11 -4
  224. package/src/modules/features/cms/sanity/files/.knip.json +8 -0
  225. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/blog/[slug]/route.ts +3 -4
  226. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/revalidate/route.ts +1 -4
  227. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/blog/[slug]/page.tsx +8 -9
  228. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/layout.tsx +2 -2
  229. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/sitemap.md/route.ts +18 -29
  230. package/src/modules/features/cms/sanity/files/app/sitemap.xml/route.ts +51 -0
  231. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/env.ts +2 -4
  232. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/queries.ts +0 -42
  233. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/index.ts +1 -1
  234. package/src/modules/features/cms/sanity/files/lib/scripts/copy-sanity-mcp.ts +23 -0
  235. package/src/modules/features/cms/sanity/files/lib/scripts/generate-page.ts +297 -0
  236. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/json-ld.tsx +1 -6
  237. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/metadata.ts +2 -2
  238. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/url.ts +4 -2
  239. package/src/{helpers/integrate → modules/features/cms}/sanity/files/proxy.ts +11 -11
  240. package/src/template-hooks/use-device-perf.ts +27 -17
  241. package/src/templates/next-default/.env.example +3 -3
  242. package/src/templates/next-default/.vscode/extensions.json +1 -5
  243. package/src/templates/next-default/.vscode/settings.json +1 -1
  244. package/src/templates/next-default/.zed/settings.json +47 -0
  245. package/src/templates/next-default/README.md +7 -6
  246. package/src/templates/next-default/_gitignore +1 -3
  247. package/src/templates/next-default/app/layout.tsx +21 -35
  248. package/src/templates/next-default/app/robots.ts +3 -4
  249. package/src/templates/next-default/app/sitemap.xml/route.ts +29 -29
  250. package/src/templates/next-default/biome.json +9 -2
  251. package/src/templates/next-default/components/ui/image/index.tsx +2 -1
  252. package/src/templates/next-default/components/ui/link/index.tsx +35 -35
  253. package/src/templates/next-default/lefthook.yml +25 -0
  254. package/src/templates/next-default/lib/README.md +8 -4
  255. package/src/templates/next-default/lib/hooks/use-media.ts +6 -3
  256. package/src/templates/next-default/lib/scripts/dev.ts +32 -0
  257. package/src/templates/next-default/lib/styles/README.md +13 -0
  258. package/src/templates/next-default/lib/styles/fonts.ts +20 -0
  259. package/src/templates/next-default/lib/styles/global.css +15 -196
  260. package/src/templates/next-default/lib/styles/index.css +3 -0
  261. package/src/templates/next-default/lib/styles/tokens.css +182 -0
  262. package/src/templates/next-default/lib/utils/README.md +40 -0
  263. package/src/templates/next-default/lib/utils/easings.ts +240 -0
  264. package/src/templates/next-default/lib/utils/fetch.ts +84 -0
  265. package/src/templates/next-default/lib/utils/global-css.d.ts +1 -0
  266. package/src/templates/next-default/lib/utils/json-ld.tsx +70 -68
  267. package/src/templates/next-default/lib/utils/math.ts +236 -0
  268. package/src/templates/next-default/lib/utils/metadata.ts +26 -27
  269. package/src/templates/next-default/lib/utils/strings.ts +246 -0
  270. package/src/templates/next-default/lib/utils/types.d.ts +15 -0
  271. package/src/templates/next-default/lib/utils/url.ts +8 -5
  272. package/src/templates/next-default/lib/utils/viewport.ts +199 -0
  273. package/src/templates/next-default/package.json +12 -7
  274. package/src/templates/next-default/svg.d.ts +1 -0
  275. package/src/templates/next-experiments/.env.example +3 -3
  276. package/src/templates/next-experiments/.knip.json +3 -0
  277. package/src/templates/next-experiments/.vscode/extensions.json +1 -5
  278. package/src/templates/next-experiments/.vscode/settings.json +1 -1
  279. package/src/templates/next-experiments/.zed/settings.json +47 -0
  280. package/src/templates/next-experiments/README.md +7 -6
  281. package/src/templates/next-experiments/_gitignore +1 -3
  282. package/src/templates/next-experiments/app/layout.tsx +21 -35
  283. package/src/templates/next-experiments/app/robots.ts +5 -2
  284. package/src/templates/next-experiments/app/sitemap.xml/route.ts +51 -0
  285. package/src/templates/next-experiments/biome.json +4 -2
  286. package/src/templates/next-experiments/components/layout/navigation-menu.tsx +1 -1
  287. package/src/templates/next-experiments/components/layout/wrapper/index.tsx +6 -6
  288. package/src/templates/next-experiments/components/ui/image/index.tsx +33 -33
  289. package/src/templates/next-experiments/lib/README.md +8 -4
  290. package/src/templates/next-experiments/lib/hooks/use-media.ts +6 -3
  291. package/src/templates/next-experiments/lib/scripts/dev.ts +32 -0
  292. package/src/templates/next-experiments/lib/styles/README.md +13 -0
  293. package/src/templates/next-experiments/lib/styles/fonts.ts +20 -0
  294. package/src/templates/next-experiments/lib/styles/global.css +16 -196
  295. package/src/templates/next-experiments/lib/styles/index.css +3 -0
  296. package/src/templates/next-experiments/lib/styles/tokens.css +182 -0
  297. package/src/templates/next-experiments/lib/utils/README.md +40 -0
  298. package/src/templates/next-experiments/lib/utils/easings.ts +240 -0
  299. package/src/templates/next-experiments/lib/utils/fetch.ts +84 -0
  300. package/src/templates/next-experiments/lib/utils/global-css.d.ts +1 -0
  301. package/src/templates/next-experiments/lib/utils/json-ld.tsx +70 -68
  302. package/src/templates/next-experiments/lib/utils/math.ts +236 -0
  303. package/src/templates/next-experiments/lib/utils/metadata.ts +26 -27
  304. package/src/templates/next-experiments/lib/utils/strings.ts +246 -0
  305. package/src/templates/next-experiments/lib/utils/types.d.ts +15 -0
  306. package/src/templates/next-experiments/lib/utils/url.ts +8 -5
  307. package/src/templates/next-experiments/lib/utils/viewport.ts +199 -0
  308. package/src/templates/next-experiments/package.json +6 -6
  309. package/src/templates/next-experiments/svg.d.ts +1 -0
  310. package/src/templates/next-pagebuilder/.vscode/extensions.json +16 -0
  311. package/src/templates/next-pagebuilder/.vscode/settings.json +105 -0
  312. package/src/templates/next-pagebuilder/.zed/settings.json +47 -0
  313. package/src/templates/next-pagebuilder/_gitignore +1 -3
  314. package/src/templates/next-pagebuilder/app/(content)/[[...slug]]/page.tsx +1 -1
  315. package/src/templates/next-pagebuilder/app/(content)/layout.tsx +0 -1
  316. package/src/templates/next-pagebuilder/app/robots.ts +3 -4
  317. package/src/templates/next-pagebuilder/biome.json +17 -0
  318. package/src/templates/next-pagebuilder/components/layout/footer/index.tsx +4 -5
  319. package/src/templates/next-pagebuilder/components/layout/header/index.tsx +1 -1
  320. package/src/templates/next-pagebuilder/components/page-builder/components/article-content/index.tsx +4 -9
  321. package/src/templates/next-pagebuilder/components/page-builder/components/article-content/related-post-item.tsx +4 -4
  322. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/content-card.tsx +3 -1
  323. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/index.tsx +12 -5
  324. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/types.ts +3 -1
  325. package/src/templates/next-pagebuilder/components/page-builder/renderer.tsx +6 -2
  326. package/src/templates/next-pagebuilder/components/page-builder/types.ts +9 -7
  327. package/src/templates/next-pagebuilder/components/page-document/index.tsx +12 -2
  328. package/src/templates/next-pagebuilder/lefthook.yml +25 -0
  329. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.types.ts +208 -0
  330. package/src/templates/next-pagebuilder/lib/styles/global.css +0 -1
  331. package/src/templates/next-pagebuilder/next.config.ts +0 -2
  332. package/src/templates/next-pagebuilder/package.json +13 -25
  333. package/src/templates/next-pagebuilder/postcss.config.mjs +27 -1
  334. package/src/templates/next-pagebuilder/svg.d.ts +1 -0
  335. package/src/templates/next-webgl/.env.example +3 -3
  336. package/src/templates/next-webgl/.vscode/extensions.json +1 -5
  337. package/src/templates/next-webgl/.vscode/settings.json +1 -1
  338. package/src/templates/next-webgl/.zed/settings.json +47 -0
  339. package/src/templates/next-webgl/README.md +7 -6
  340. package/src/templates/next-webgl/_gitignore +1 -3
  341. package/src/templates/next-webgl/app/layout.tsx +21 -35
  342. package/src/templates/next-webgl/app/robots.ts +3 -4
  343. package/src/templates/next-webgl/app/sitemap.xml/route.ts +29 -29
  344. package/src/templates/next-webgl/biome.json +9 -2
  345. package/src/templates/next-webgl/components/ui/image/index.tsx +2 -1
  346. package/src/templates/next-webgl/components/webgl/components/scene/index.tsx +0 -2
  347. package/src/templates/next-webgl/lefthook.yml +25 -0
  348. package/src/templates/next-webgl/lib/README.md +8 -4
  349. package/src/templates/next-webgl/lib/hooks/use-media.ts +6 -3
  350. package/src/templates/next-webgl/lib/scripts/dev.ts +32 -0
  351. package/src/templates/next-webgl/lib/styles/README.md +13 -0
  352. package/src/templates/next-webgl/lib/styles/fonts.ts +20 -0
  353. package/src/templates/next-webgl/lib/styles/global.css +16 -196
  354. package/src/templates/next-webgl/lib/styles/index.css +3 -0
  355. package/src/templates/next-webgl/lib/styles/tokens.css +182 -0
  356. package/src/templates/next-webgl/lib/utils/README.md +40 -0
  357. package/src/templates/next-webgl/lib/utils/easings.ts +240 -0
  358. package/src/templates/next-webgl/lib/utils/fetch.ts +84 -0
  359. package/src/templates/next-webgl/lib/utils/global-css.d.ts +1 -0
  360. package/src/templates/next-webgl/lib/utils/json-ld.tsx +70 -68
  361. package/src/templates/next-webgl/lib/utils/math.ts +236 -0
  362. package/src/templates/next-webgl/lib/utils/metadata.ts +26 -27
  363. package/src/templates/next-webgl/lib/utils/strings.ts +246 -0
  364. package/src/templates/next-webgl/lib/utils/types.d.ts +15 -0
  365. package/src/templates/next-webgl/lib/utils/url.ts +8 -5
  366. package/src/templates/next-webgl/lib/utils/viewport.ts +199 -0
  367. package/src/templates/next-webgl/package.json +13 -8
  368. package/src/templates/next-webgl/svg.d.ts +1 -0
  369. package/src/templates/next-webgl/tsconfig.tsbuildinfo +1 -1
  370. package/dist/configs/animations.d.ts.map +0 -1
  371. package/dist/configs/animations.js.map +0 -1
  372. package/dist/configs/skills.d.ts +0 -27
  373. package/dist/configs/skills.d.ts.map +0 -1
  374. package/dist/configs/skills.js +0 -18
  375. package/dist/configs/skills.js.map +0 -1
  376. package/dist/configs/skills.json +0 -26
  377. package/dist/helpers/add/hooks-config.d.ts +0 -22
  378. package/dist/helpers/add/hooks-config.d.ts.map +0 -1
  379. package/dist/helpers/add/hooks-config.js +0 -31
  380. package/dist/helpers/add/hooks-config.js.map +0 -1
  381. package/dist/helpers/add/index.d.ts.map +0 -1
  382. package/dist/helpers/add/index.js.map +0 -1
  383. package/dist/helpers/create/copy-template.d.ts +0 -11
  384. package/dist/helpers/create/copy-template.d.ts.map +0 -1
  385. package/dist/helpers/create/copy-template.js.map +0 -1
  386. package/dist/helpers/create/index.d.ts +0 -24
  387. package/dist/helpers/create/index.d.ts.map +0 -1
  388. package/dist/helpers/create/index.js +0 -99
  389. package/dist/helpers/create/index.js.map +0 -1
  390. package/dist/helpers/create/init-git.d.ts.map +0 -1
  391. package/dist/helpers/create/init-git.js.map +0 -1
  392. package/dist/helpers/create/install.d.ts.map +0 -1
  393. package/dist/helpers/create/install.js.map +0 -1
  394. package/dist/helpers/create/rename-files.d.ts.map +0 -1
  395. package/dist/helpers/create/rename-files.js.map +0 -1
  396. package/dist/helpers/create/setup-agent.d.ts.map +0 -1
  397. package/dist/helpers/create/setup-agent.js +0 -91
  398. package/dist/helpers/create/setup-agent.js.map +0 -1
  399. package/dist/helpers/create/setup-sanity.d.ts.map +0 -1
  400. package/dist/helpers/create/setup-sanity.js.map +0 -1
  401. package/dist/helpers/create/update-package.d.ts +0 -20
  402. package/dist/helpers/create/update-package.d.ts.map +0 -1
  403. package/dist/helpers/create/update-package.js +0 -97
  404. package/dist/helpers/create/update-package.js.map +0 -1
  405. package/dist/helpers/integrate/index.d.ts.map +0 -1
  406. package/dist/helpers/integrate/index.js.map +0 -1
  407. package/dist/helpers/integrate/merge-config.d.ts +0 -21
  408. package/dist/helpers/integrate/merge-config.d.ts.map +0 -1
  409. package/dist/helpers/integrate/merge-config.js +0 -42
  410. package/dist/helpers/integrate/merge-config.js.map +0 -1
  411. package/dist/helpers/integrate/merge-orchestrator.d.ts +0 -10
  412. package/dist/helpers/integrate/merge-orchestrator.d.ts.map +0 -1
  413. package/dist/helpers/integrate/merge-orchestrator.js.map +0 -1
  414. package/dist/helpers/integrate/sanity/config.d.ts.map +0 -1
  415. package/dist/helpers/integrate/sanity/config.js.map +0 -1
  416. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +0 -1
  417. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +0 -1
  418. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +0 -1
  419. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +0 -1
  420. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +0 -11
  421. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +0 -1
  422. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js +0 -133
  423. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +0 -1
  424. package/dist/helpers/skills/index.d.ts.map +0 -1
  425. package/dist/helpers/skills/index.js.map +0 -1
  426. package/dist/utils/detect-project.d.ts.map +0 -1
  427. package/dist/utils/detect-project.js.map +0 -1
  428. package/dist/utils/format-results.d.ts.map +0 -1
  429. package/dist/utils/format-results.js.map +0 -1
  430. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/WEBHOOK-SETUP.md +0 -74
  431. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/sitemap.ts +0 -90
  432. package/src/template-hooks/config.js +0 -32
  433. package/src/templates/next-default/css.d.ts +0 -1
  434. package/src/templates/next-default/lib/utils/portable-text-to-markdown.ts +0 -83
  435. package/src/templates/next-default/tsconfig.tsbuildinfo +0 -1
  436. package/src/templates/next-experiments/css.d.ts +0 -1
  437. package/src/templates/next-experiments/lib/utils/portable-text-to-markdown.ts +0 -83
  438. package/src/templates/next-pagebuilder/app/api/[[...slug]]/route.ts +0 -100
  439. package/src/templates/next-pagebuilder/app/api/draft-mode/disable/route.ts +0 -7
  440. package/src/templates/next-pagebuilder/app/api/draft-mode/enable/route.ts +0 -20
  441. package/src/templates/next-pagebuilder/app/api/revalidate/route.ts +0 -121
  442. package/src/templates/next-pagebuilder/app/sitemap.md/route.ts +0 -124
  443. package/src/templates/next-pagebuilder/app/studio/[[...tool]]/page.tsx +0 -8
  444. package/src/templates/next-pagebuilder/components/sanity/draft-mode-toggle.tsx +0 -27
  445. package/src/templates/next-pagebuilder/components/sanity/rich-text.tsx +0 -87
  446. package/src/templates/next-pagebuilder/components/sanity/visual-editing.tsx +0 -28
  447. package/src/templates/next-pagebuilder/components/ui/sanity-image/index.tsx +0 -41
  448. package/src/templates/next-pagebuilder/lib/integrations/check-integration.ts +0 -5
  449. package/src/templates/next-pagebuilder/lib/integrations/sanity/client.ts +0 -27
  450. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -23
  451. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-builder-input.tsx +0 -36
  452. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-category-input.tsx +0 -50
  453. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/rich-text.tsx +0 -84
  454. package/src/templates/next-pagebuilder/lib/integrations/sanity/confirm-publish-action.ts +0 -40
  455. package/src/templates/next-pagebuilder/lib/integrations/sanity/constants.ts +0 -1
  456. package/src/templates/next-pagebuilder/lib/integrations/sanity/env.ts +0 -34
  457. package/src/templates/next-pagebuilder/lib/integrations/sanity/fetchers/layout.ts +0 -34
  458. package/src/templates/next-pagebuilder/lib/integrations/sanity/icons.ts +0 -58
  459. package/src/templates/next-pagebuilder/lib/integrations/sanity/live/index.tsx +0 -88
  460. package/src/templates/next-pagebuilder/lib/integrations/sanity/markdown-proxy.config.ts +0 -50
  461. package/src/templates/next-pagebuilder/lib/integrations/sanity/page-builder-config.ts +0 -132
  462. package/src/templates/next-pagebuilder/lib/integrations/sanity/page-category.ts +0 -28
  463. package/src/templates/next-pagebuilder/lib/integrations/sanity/presentation.ts +0 -118
  464. package/src/templates/next-pagebuilder/lib/integrations/sanity/queries.ts +0 -394
  465. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.cli.ts +0 -29
  466. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.config.ts +0 -116
  467. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/index.ts +0 -4
  468. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/blog-content.ts +0 -89
  469. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/description.ts +0 -29
  470. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/hero.ts +0 -28
  471. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/singleton/content-collection.ts +0 -45
  472. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/author.ts +0 -70
  473. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/blog-category.ts +0 -55
  474. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/index.ts +0 -96
  475. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/company-data.ts +0 -62
  476. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/footer.ts +0 -79
  477. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/navbar.ts +0 -74
  478. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/link.ts +0 -125
  479. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/logo-field.ts +0 -9
  480. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/metadata.ts +0 -68
  481. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/nav-objects.ts +0 -192
  482. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-builder.ts +0 -39
  483. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-folder.ts +0 -124
  484. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page.ts +0 -232
  485. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/richText.ts +0 -63
  486. package/src/templates/next-pagebuilder/lib/integrations/sanity/singletons.ts +0 -44
  487. package/src/templates/next-pagebuilder/lib/integrations/sanity/structure.ts +0 -453
  488. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/image.ts +0 -8
  489. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/link.ts +0 -137
  490. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/page-builder-markdown.ts +0 -81
  491. package/src/templates/next-pagebuilder/lib/scripts/sanity-typegen.ts +0 -45
  492. package/src/templates/next-pagebuilder/lib/utils/json-ld.tsx +0 -213
  493. package/src/templates/next-pagebuilder/lib/utils/metadata.ts +0 -167
  494. package/src/templates/next-pagebuilder/lib/utils/sitemap.ts +0 -37
  495. package/src/templates/next-pagebuilder/proxy.ts +0 -81
  496. package/src/templates/next-webgl/css.d.ts +0 -1
  497. package/src/templates/next-webgl/lib/utils/portable-text-to-markdown.ts +0 -83
  498. package/dist/{helpers → infrastructure}/create/copy-template.js +0 -0
  499. package/dist/{helpers → infrastructure}/create/rename-files.d.ts +0 -0
  500. package/dist/{helpers → infrastructure}/create/rename-files.js +0 -0
  501. package/dist/{helpers → infrastructure}/create/setup-sanity.d.ts +0 -0
  502. package/dist/{helpers/integrate → modules/features/cms}/sanity/config.d.ts +0 -0
  503. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/disable/route.ts +0 -0
  504. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/enable/route.ts +0 -0
  505. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/[[...tool]]/page.tsx +0 -0
  506. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/layout.tsx +0 -0
  507. package/src/{helpers/integrate → modules/features/cms}/sanity/files/components/ui/sanity-image/index.tsx +0 -0
  508. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/README.md +0 -0
  509. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/check-integration.ts +0 -0
  510. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/MARKDOWN-PROXY.md +0 -0
  511. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/README.md +0 -0
  512. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/client.ts +0 -0
  513. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
  514. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -0
  515. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/confirm-publish-action.ts +0 -0
  516. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/live/index.tsx +1 -1
  517. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/markdown-proxy.config.ts +0 -0
  518. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -0
  519. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.config.ts +1 -1
  520. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -0
  521. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schema.json +0 -0
  522. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -0
  523. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -0
  524. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -0
  525. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -0
  526. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -0
  527. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -0
  528. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/structure.ts +0 -0
  529. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/image.ts +0 -0
  530. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/link.ts +0 -0
  531. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/portable-text-to-markdown.ts +0 -0
@@ -1,8 +1,8 @@
1
1
  import { ArticleContent } from "./components/article-content"
2
2
  import { ContentCollection } from "./components/content-collection"
3
+ import type { ContentCollectionSearchParams } from "./components/content-collection/types"
3
4
  import { Description } from "./components/description"
4
5
  import { Hero } from "./components/hero"
5
- import type { ContentCollectionSearchParams } from "./components/content-collection/types"
6
6
  import type { PageBuilderBlock, PageBuilderBlocks } from "./types"
7
7
 
8
8
  type RendererProps = {
@@ -16,7 +16,11 @@ export function Renderer({ blocks, searchParams }: RendererProps) {
16
16
  return (
17
17
  <div className="space-y-16">
18
18
  {blocks.map((block: PageBuilderBlock) => (
19
- <PageBuilderNode key={block._key} block={block} searchParams={searchParams} />
19
+ <PageBuilderNode
20
+ key={block._key}
21
+ block={block}
22
+ searchParams={searchParams}
23
+ />
20
24
  ))}
21
25
  </div>
22
26
  )
@@ -6,18 +6,20 @@ export type PageBuilderBlock = NonNullable<
6
6
 
7
7
  export type PageBuilderBlocks = NonNullable<PAGE_QUERY_RESULT>["pageBuilder"]
8
8
 
9
- export type BlogContentBlock = Extract<PageBuilderBlock, { _type: "blogContent" }>
9
+ export type BlogContentBlock = Extract<
10
+ PageBuilderBlock,
11
+ { _type: "blogContent" }
12
+ >
10
13
 
11
14
  export type ArticleContentProps = {
12
15
  block: BlogContentBlock
13
-
14
16
  }
15
17
 
16
18
  export type ArticleRelatedPost = {
17
- _id: string;
18
- title: string | null;
19
- resolvedSlug: string | null;
19
+ _id: string
20
+ title: string | null
21
+ resolvedSlug: string | null
20
22
  metadata?: {
21
- image?: unknown;
23
+ image?: unknown
22
24
  } | null
23
- }
25
+ }
@@ -20,7 +20,13 @@ export const getPageSections = (
20
20
  searchParams: ContentCollectionSearchParams
21
21
  ) =>
22
22
  page.pageBuilder?.length
23
- ? [<Renderer key="page-builder" blocks={page.pageBuilder} searchParams={searchParams} />]
23
+ ? [
24
+ <Renderer
25
+ key="page-builder"
26
+ blocks={page.pageBuilder}
27
+ searchParams={searchParams}
28
+ />,
29
+ ]
24
30
  : []
25
31
 
26
32
  const buildBreadcrumbs = (
@@ -52,7 +58,11 @@ const buildBreadcrumbs = (
52
58
  return items
53
59
  }
54
60
 
55
- export const PageDocument = ({ page, path, searchParams }: PageDocumentProps) => {
61
+ export const PageDocument = ({
62
+ page,
63
+ path,
64
+ searchParams,
65
+ }: PageDocumentProps) => {
56
66
  const title = stegaClean(page.title) || page.title
57
67
  const sections = getPageSections(page, searchParams)
58
68
 
@@ -0,0 +1,25 @@
1
+ # Lefthook configuration for git hooks
2
+ # Cross-platform compatible (Windows, macOS, Linux)
3
+ # https://github.com/evilmartians/lefthook
4
+
5
+ pre-commit:
6
+ parallel: true
7
+ commands:
8
+ biome:
9
+ glob: '*.{js,mjs,ts,jsx,tsx,css,scss}'
10
+ run: bun biome check --max-diagnostics=200 --write --unsafe {staged_files}
11
+ stage_fixed: true
12
+ typecheck:
13
+ glob: '*.{ts,tsx}'
14
+ run: bunx tsgo --noEmit --incremental false
15
+ stage_fixed: false
16
+
17
+ post-merge:
18
+ commands:
19
+ install-deps:
20
+ run: bun i
21
+
22
+ post-checkout:
23
+ commands:
24
+ install-deps:
25
+ run: '[ "{3}" = "1" ] && bun i || true'
@@ -0,0 +1,208 @@
1
+ // Placeholder types — run `bun sanity:typegen` to regenerate from your Sanity schema.
2
+
3
+ type SanityImageField = {
4
+ asset?: { _ref: string; _type: "reference" }
5
+ alt?: string
6
+ hotspot?: object
7
+ crop?: object
8
+ }
9
+
10
+ type SanitySlug = { current?: string | null } | null
11
+
12
+ type SanityPageMetadata = {
13
+ metaTitle?: string | null
14
+ metaDescription?: string | null
15
+ og?: { image?: SanityImageField | null } | null
16
+ index?: boolean | null
17
+ title?: string | null
18
+ description?: string | null
19
+ image?: SanityImageField | null
20
+ noIndex?: boolean | null
21
+ }
22
+
23
+ type PageReference = {
24
+ _id?: string
25
+ _ref?: string
26
+ _type?: string
27
+ slug?: SanitySlug
28
+ resolvedSlug?: string | null
29
+ title?: string | null
30
+ }
31
+
32
+ type LinkItem = {
33
+ _key?: string
34
+ _type?: string
35
+ page?: PageReference | null
36
+ href?: string | null
37
+ text?: string | null
38
+ openInNewTab?: boolean | null
39
+ [key: string]: unknown
40
+ }
41
+
42
+ type NavLeafItem = {
43
+ _key: string
44
+ title?: string | null
45
+ link?: LinkItem | null
46
+ }
47
+
48
+ type NavColumn = {
49
+ _key: string
50
+ title?: string | null
51
+ link?: LinkItem | null
52
+ items?: NavLeafItem[] | null
53
+ }
54
+
55
+ type NavMegaMenu = {
56
+ columns?: NavColumn[] | null
57
+ }
58
+
59
+ type NavItem = {
60
+ _key: string
61
+ title?: string | null
62
+ itemType?: string | null
63
+ link?: LinkItem | null
64
+ megaMenu?: NavMegaMenu | null
65
+ }
66
+
67
+ type CtaButton = {
68
+ _key: string
69
+ label?: string | null
70
+ link?: LinkItem | null
71
+ variant?: string | null
72
+ }
73
+
74
+ type FooterLinkItem = {
75
+ _key: string
76
+ label?: string | null
77
+ href?: string | null
78
+ }
79
+
80
+ type FooterLinkGroup = {
81
+ _key: string
82
+ title?: string | null
83
+ items?: FooterLinkItem[] | null
84
+ }
85
+
86
+ type SocialLink = {
87
+ _key: string
88
+ name?: string | null
89
+ icon?: unknown
90
+ url?: string | null
91
+ label?: string | null
92
+ }
93
+
94
+ type BlogCategory = {
95
+ _id: string
96
+ title?: string | null
97
+ slug?: SanitySlug
98
+ }
99
+
100
+ type BlogAuthor = {
101
+ _id: string
102
+ name?: string | null
103
+ avatar?: unknown
104
+ role?: string | null
105
+ }
106
+
107
+ type BlogContentBlock = {
108
+ _type: "blogContent"
109
+ _key: string
110
+ thumbnail?: SanityImageField | null
111
+ categories: BlogCategory[]
112
+ date?: string | null
113
+ author?: BlogAuthor | null
114
+ body?: Array<{ _type: string; _key?: string; [key: string]: unknown }> | null
115
+ relatedPosts?: Array<{
116
+ _id: string
117
+ title: string | null
118
+ resolvedSlug: string | null
119
+ metadata?: { image?: unknown } | null
120
+ }> | null
121
+ [key: string]: unknown
122
+ }
123
+
124
+ type HeroBlock = {
125
+ _type: "hero"
126
+ _key: string
127
+ headline?: string | null
128
+ [key: string]: unknown
129
+ }
130
+
131
+ type DescriptionBlock = {
132
+ _type: "description"
133
+ _key: string
134
+ description?: string | null
135
+ [key: string]: unknown
136
+ }
137
+
138
+ type BlogCollectionBlock = {
139
+ _type: "blogCollection"
140
+ _key: string
141
+ subtitle?: string | null
142
+ [key: string]: unknown
143
+ }
144
+
145
+ type PageBuilderBlockType =
146
+ | BlogContentBlock
147
+ | HeroBlock
148
+ | DescriptionBlock
149
+ | BlogCollectionBlock
150
+
151
+ type PageDocument = {
152
+ _id: string
153
+ _type: string
154
+ _updatedAt: string
155
+ title?: string | null
156
+ subtitle?: string | null
157
+ slug?: SanitySlug
158
+ resolvedSlug?: string | null
159
+ pageBuilder?: PageBuilderBlockType[] | null
160
+ metadata?: SanityPageMetadata | null
161
+ [key: string]: unknown
162
+ }
163
+
164
+ type PageSlug = {
165
+ title: string | null
166
+ slug: string | null
167
+ _updatedAt: string
168
+ }
169
+
170
+ type PageSitemap = {
171
+ title: string | null
172
+ slug: string | null
173
+ _updatedAt: string
174
+ noIndex: boolean
175
+ }
176
+
177
+ type PageRef = {
178
+ _id: string
179
+ title: string | null
180
+ slug: string | null
181
+ }
182
+
183
+ type BlogArticle = PageDocument & {
184
+ blogContent?: {
185
+ thumbnail?: SanityImageField | null
186
+ categories: BlogCategory[]
187
+ date?: string | null
188
+ author?: BlogAuthor | null
189
+ } | null
190
+ }
191
+
192
+ export type ALL_PAGE_SLUGS_QUERY_RESULT = PageSlug[]
193
+ export type PAGE_QUERY_RESULT = PageDocument | null
194
+ export type PAGE_SITEMAP_QUERY_RESULT = PageSitemap[]
195
+ export type ALL_BLOG_ARTICLES_QUERY_RESULT = BlogArticle[]
196
+ export type P_REF_PB_COMP_QUERY_RESULT = PageRef[]
197
+ export type COMPANY_DATA_QUERY_RESULT = { socialLinks?: SocialLink[] | null } | null
198
+ export type FOOTER_QUERY_RESULT = { links?: FooterLinkGroup[] | null } | null
199
+ export type NAVBAR_QUERY_RESULT = {
200
+ logo?: {
201
+ url?: string | null
202
+ metadata?: { dimensions?: unknown } | null
203
+ asset?: { _id: string; url: string; metadata?: { dimensions?: unknown } | null } | null
204
+ [key: string]: unknown
205
+ } | null
206
+ navigationItems?: NavItem[] | null
207
+ ctaButtons?: CtaButton[] | null
208
+ } | null
@@ -67,4 +67,3 @@ button {
67
67
  cursor: pointer;
68
68
  user-select: none;
69
69
  }
70
-
@@ -1,8 +1,6 @@
1
1
  import withBundleAnalyzer from "@next/bundle-analyzer"
2
2
  import type { NextConfig } from "next"
3
3
 
4
-
5
-
6
4
  const nextConfig: NextConfig = {
7
5
  reactStrictMode: true,
8
6
  reactCompiler: true,
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "next-pagebuilder",
2
+ "name": "bsmnt-pagebuilder-starter",
3
3
  "description": "Basement Next.js starter template",
4
4
  "version": "0.1.0",
5
5
  "private": true,
@@ -9,43 +9,31 @@
9
9
  "build": "next build",
10
10
  "dev": "next dev",
11
11
  "format": "biome format --write .",
12
- "generate": "bun ./lib/scripts/generate.ts",
12
+ "knip": "bunx knip",
13
+ "knip:fix": "bunx knip --fix",
13
14
  "lighthouse": "bunx @unlighthouse/cli --site http://localhost:3000",
14
15
  "lint": "biome lint --max-diagnostics=200",
15
- "lint:fix": "biome lint --write --unsafe --max-diagnostics=200",
16
+ "lint:fix": "biome check --write --unsafe --max-diagnostics=200",
17
+ "prepare": "lefthook install",
16
18
  "start": "next start",
17
- "test": "bun test",
18
19
  "typecheck": "tsgo --noEmit",
19
20
  "typecheck:compare": "bun run typecheck:tsc && bun run typecheck",
20
21
  "typecheck:tsc": "tsc --noEmit --incremental false",
21
- "sanity:extract": "cd lib/integrations/sanity && bun --env-file ../../../.env.local sanity schema extract",
22
- "sanity:typegen": "bun ./lib/scripts/sanity-typegen.ts",
23
- "predev": "bun run sanity:typegen",
24
- "prebuild": "bun run sanity:typegen"
22
+ "update:packages": "cross-env NPM_CHECK_INSTALLER=bun bunx npm-check -u"
25
23
  },
26
24
  "dependencies": {
27
- "@phosphor-icons/react": "^2.1.10",
28
- "@portabletext/types": "^4.0.2",
29
- "@sanity/asset-utils": "^2.3.0",
30
- "@sanity/image-url": "^2.0.3",
31
- "@sanity/table": "^2.0.1",
32
- "@sanity/vision": "^5.17.1",
33
- "@sanity/visual-editing": "^5.3.1",
34
25
  "class-variance-authority": "^0.7.1",
35
- "next": "16.2.3",
36
- "next-sanity": "^12.1.4",
37
- "react": "19.2.4",
38
- "react-dom": "19.2.4",
26
+ "next": "^16",
27
+ "react": "^19",
28
+ "react-dom": "^19",
39
29
  "react-use": "^17.6.0",
40
- "sanity": "^5.17.1",
41
- "sanity-plugin-media": "^4.1.1",
42
30
  "tailwind-merge": "^3.5.0",
43
31
  "zod": "^4.3.6"
44
32
  },
45
33
  "devDependencies": {
46
- "@biomejs/biome": "2.4.8",
34
+ "@biomejs/biome": "^2.4.14",
47
35
  "@csstools/postcss-global-data": "^4.0.0",
48
- "@next/bundle-analyzer": "16.2.1",
36
+ "@next/bundle-analyzer": "^16.2.1",
49
37
  "@svgr/webpack": "^8.1.0",
50
38
  "@tailwindcss/postcss": "^4.2.2",
51
39
  "@types/bun": "^1.3.11",
@@ -53,11 +41,11 @@
53
41
  "@types/react": "^19.2.14",
54
42
  "@types/react-dom": "^19.2.3",
55
43
  "@typescript/native-preview": "^7.0.0-dev.20260323.1",
56
- "babel-plugin-react-compiler": "1.0.0",
44
+ "babel-plugin-react-compiler": "^1.0.0",
57
45
  "cross-env": "^10.1.0",
46
+ "lefthook": "^1.13.0",
58
47
  "postcss-functions": "^4.0.2",
59
48
  "postcss-preset-env": "^11.2.0",
60
- "schema-dts": "^2.0.0",
61
49
  "tailwindcss": "^4.2.2",
62
50
  "typescript": "^5.9.3"
63
51
  },
@@ -1,3 +1,29 @@
1
+ import { existsSync } from "node:fs"
2
+ import { fileURLToPath } from "node:url"
3
+ import path from "node:path"
4
+
5
+ // Turbopack evaluates this from .next/, sanity CLI from lib/integrations/sanity/.
6
+ // Walk up from both candidates until we find the project root.
7
+ const TARGET = "lib/styles/global.css"
8
+
9
+ function findRoot(...candidates) {
10
+ for (const start of candidates) {
11
+ let dir = start
12
+ while (true) {
13
+ if (existsSync(path.join(dir, TARGET))) return dir
14
+ const parent = path.dirname(dir)
15
+ if (parent === dir) break
16
+ dir = parent
17
+ }
18
+ }
19
+ return process.cwd()
20
+ }
21
+
22
+ const projectRoot = findRoot(
23
+ path.dirname(fileURLToPath(import.meta.url)),
24
+ process.cwd(),
25
+ )
26
+
1
27
  /**
2
28
  * PostCSS preset-env config
3
29
  * @see Docs {@link https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/README.md#options}
@@ -23,7 +49,7 @@ const presetEnvConfig = {
23
49
  * @type {import('@csstools/postcss-global-data').pluginOptions}
24
50
  */
25
51
  const globalDataConfig = {
26
- files: ["./lib/styles/global.css"],
52
+ files: [path.join(projectRoot, "lib/styles/global.css")],
27
53
  }
28
54
 
29
55
  const postcssConfig = {
@@ -1,5 +1,6 @@
1
1
  declare module "*.svg" {
2
2
  import type { FC, SVGProps } from "react"
3
+
3
4
  const content: FC<SVGProps<SVGSVGElement>>
4
5
  export default content
5
6
  }
@@ -13,9 +13,9 @@
13
13
  # CORE (Recommended)
14
14
  # ============================================
15
15
 
16
- # Base URL (sitemaps, OG tags, canonical URLs)
17
- # On Vercel: auto-detected if unset. Set explicitly for custom domains.
18
- # Local: http://localhost:3000
16
+ # Base URL for your site (used for SEO, canonical URLs, etc.)
17
+ # Development: http://localhost:3000
18
+ # Production: https://your-domain.com
19
19
  NEXT_PUBLIC_BASE_URL="http://localhost:3000"
20
20
 
21
21
  # Draft mode secret for preview functionality
@@ -7,14 +7,10 @@
7
7
  "bradlc.vscode-tailwindcss",
8
8
  "csstools.postcss",
9
9
 
10
- // GraphQL (Shopify, etc.)
11
- "graphql.vscode-graphql-syntax",
12
-
13
10
  // Sanity CMS (GROQ syntax + validation)
14
11
  "sanity-io.vscode-sanity",
15
12
 
16
13
  // DX Enhancements
17
- "yoavbls.pretty-ts-errors",
18
- "waderyan.gitblame"
14
+ "yoavbls.pretty-ts-errors"
19
15
  ]
20
16
  }
@@ -82,7 +82,7 @@
82
82
  ["cn\\(([^)]*)\\)", "(?:'|\"|`)([^\"'`]*)(?:'|\"|`)"],
83
83
  ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]
84
84
  ],
85
- "tailwindCSS.experimental.configFile": "./lib/styles/global.css",
85
+ "tailwindCSS.experimental.configFile": "./lib/styles/css/tailwind.css",
86
86
  "tailwindCSS.includeLanguages": {
87
87
  "typescriptreact": "html"
88
88
  },
@@ -0,0 +1,47 @@
1
+ {
2
+ "format_on_save": "on",
3
+ "lsp": {
4
+ "vscode-css-language-server": {
5
+ "settings": {
6
+ "css": {
7
+ "lint": {
8
+ "unknownAtRules": "ignore"
9
+ }
10
+ }
11
+ }
12
+ }
13
+ },
14
+ "languages": {
15
+ "JavaScript": {
16
+ "language_servers": ["biome", "..."],
17
+ "formatter": { "language_server": { "name": "biome" } },
18
+ "code_actions_on_format": {
19
+ "source.fixAll.biome": true,
20
+ "source.organizeImports.biome": true
21
+ }
22
+ },
23
+ "TypeScript": {
24
+ "formatter": { "language_server": { "name": "biome" } },
25
+ "code_actions_on_format": {
26
+ "source.fixAll.biome": true,
27
+ "source.organizeImports.biome": true
28
+ }
29
+ },
30
+ "TSX": {
31
+ "formatter": { "language_server": { "name": "biome" } },
32
+ "code_actions_on_format": {
33
+ "source.fixAll.biome": true,
34
+ "source.organizeImports.biome": true
35
+ }
36
+ },
37
+ "CSS": {
38
+ "formatter": { "language_server": { "name": "biome" } }
39
+ },
40
+ "JSON": {
41
+ "formatter": { "language_server": { "name": "biome" } }
42
+ },
43
+ "JSONC": {
44
+ "formatter": { "language_server": { "name": "biome" } }
45
+ }
46
+ }
47
+ }
@@ -35,16 +35,17 @@ lib/
35
35
  scripts/
36
36
  store/
37
37
  styles/
38
+ index.css
39
+ tokens.css
38
40
  global.css
41
+ fonts.ts
39
42
  cn.ts
40
43
  utils/
41
- metadata.ts
42
- portable-text-to-markdown.ts
43
- json-ld.ts
44
44
  ```
45
45
 
46
46
  ## Styling
47
47
 
48
- - Import `@/lib/styles/global.css` once in `app/layout.tsx`.
49
- - `lib/styles/global.css` includes Tailwind utilities, theme tokens, and app-wide global styles.
50
- - `lib/styles/cn.ts` is the shared class merge helper.
48
+ - Import `@/lib/styles/index.css` once in `app/layout.tsx`.
49
+ - Edit `lib/styles/tokens.css` for theme variables, breakpoints, and custom Tailwind utilities.
50
+ - Edit `lib/styles/global.css` for reset rules and app-wide global styles.
51
+ - `lib/styles/fonts.ts` handles font variables.
@@ -29,7 +29,6 @@
29
29
  # misc
30
30
  .DS_Store
31
31
  *.pem
32
- .cursor/scratchpad.md
33
32
 
34
33
  # debug
35
34
  npm-debug.log*
@@ -57,8 +56,7 @@ yarn-error.log*
57
56
  certificates
58
57
 
59
58
  next-env.d.ts
60
- # claude
61
- .claude
59
+
62
60
 
63
61
  # unlighthouse
64
62
  .unlighthouse/
@@ -1,40 +1,26 @@
1
- import type { Metadata, Viewport } from "next";
2
- import { Geist, Geist_Mono } from "next/font/google";
3
- import { type PropsWithChildren, Suspense } from "react";
4
- import { Link } from "@/components/ui/link";
5
- import AppData from "@/package.json";
6
- import "@/lib/styles/global.css";
7
- import { cn } from "@/lib/styles/cn";
8
- import { getBaseUrl } from "@/lib/utils/url";
1
+ import type { Metadata, Viewport } from "next"
2
+ import { Geist } from "next/font/google"
3
+ import { type PropsWithChildren, Suspense } from "react"
4
+ import { Link } from "@/components/ui/link"
5
+ import { fontsVariable } from "@/lib/styles/fonts"
6
+ import AppData from "@/package.json"
7
+ import "@/lib/styles/index.css"
8
+ import { cn } from "@/lib/styles/cn"
9
9
  import {
10
- JsonLd,
11
- generateWebSiteJsonLd,
12
10
  generateOrganizationJsonLd,
13
- } from "@/lib/utils/json-ld";
11
+ generateWebSiteJsonLd,
12
+ JsonLd,
13
+ } from "@/lib/utils/json-ld"
14
14
 
15
- const APP_NAME = AppData.name;
16
- const APP_DEFAULT_TITLE = "Basement Starter";
17
- const APP_TITLE_TEMPLATE = "%s - Basement Starter";
18
- const APP_DESCRIPTION = AppData.description;
19
- const APP_BASE_URL = getBaseUrl();
15
+ const APP_NAME = AppData.name
16
+ const APP_DEFAULT_TITLE = "Basement Starter"
17
+ const APP_TITLE_TEMPLATE = "%s - Basement Starter"
18
+ const APP_DESCRIPTION = AppData.description
19
+ const APP_BASE_URL = process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000"
20
20
 
21
21
  const geist = Geist({
22
22
  subsets: ["latin"],
23
- });
24
-
25
- const mono = Geist_Mono({
26
- subsets: ["latin"],
27
- display: "swap",
28
- variable: "--geist-mono",
29
- fallback: [
30
- "ui-monospace",
31
- "SFMono-Regular",
32
- "Consolas",
33
- "Liberation Mono",
34
- "Menlo",
35
- "monospace",
36
- ],
37
- });
23
+ })
38
24
 
39
25
  export const metadata: Metadata = {
40
26
  alternates: {
@@ -87,19 +73,19 @@ export const metadata: Metadata = {
87
73
  template: APP_TITLE_TEMPLATE,
88
74
  },
89
75
  },
90
- };
76
+ }
91
77
 
92
78
  export const viewport: Viewport = {
93
79
  colorScheme: "normal",
94
80
  themeColor: "#000000",
95
- };
81
+ }
96
82
 
97
83
  export default async function Layout({ children }: PropsWithChildren) {
98
84
  return (
99
85
  <html
100
86
  lang="en"
101
87
  dir="ltr"
102
- className={cn(mono.variable, geist.className)}
88
+ className={cn(fontsVariable, geist.className)}
103
89
  // NOTE: This is due to the data-theme attribute being set which causes hydration errors
104
90
  suppressHydrationWarning
105
91
  >
@@ -130,5 +116,5 @@ export default async function Layout({ children }: PropsWithChildren) {
130
116
  {children}
131
117
  </body>
132
118
  </html>
133
- );
119
+ )
134
120
  }