bsmnt 0.4.0 → 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 (536) 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 +17 -8
  315. package/src/templates/next-pagebuilder/app/(content)/layout.tsx +18 -7
  316. package/src/templates/next-pagebuilder/app/actions/refresh.ts +5 -0
  317. package/src/templates/next-pagebuilder/app/robots.ts +3 -4
  318. package/src/templates/next-pagebuilder/biome.json +17 -0
  319. package/src/templates/next-pagebuilder/components/layout/footer/index.tsx +17 -22
  320. package/src/templates/next-pagebuilder/components/layout/header/index.tsx +3 -5
  321. package/src/templates/next-pagebuilder/components/layout/json-ld/index.tsx +11 -10
  322. package/src/templates/next-pagebuilder/components/layout/wrapper/index.tsx +14 -4
  323. package/src/templates/next-pagebuilder/components/page-builder/components/article-content/index.tsx +4 -9
  324. package/src/templates/next-pagebuilder/components/page-builder/components/article-content/related-post-item.tsx +4 -4
  325. package/src/templates/next-pagebuilder/components/page-builder/components/{post-collection → content-collection}/content-card.tsx +2 -2
  326. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/content-filters.tsx +93 -0
  327. package/src/templates/next-pagebuilder/components/page-builder/components/{post-collection → content-collection}/content-grid.tsx +7 -9
  328. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/content-pagination-nav.tsx +71 -0
  329. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/index.tsx +219 -0
  330. package/src/templates/next-pagebuilder/components/page-builder/components/{post-collection → content-collection}/types.ts +7 -4
  331. package/src/templates/next-pagebuilder/components/page-builder/renderer.tsx +17 -5
  332. package/src/templates/next-pagebuilder/components/page-builder/types.ts +9 -7
  333. package/src/templates/next-pagebuilder/components/page-document/index.tsx +19 -4
  334. package/src/templates/next-pagebuilder/lefthook.yml +25 -0
  335. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.types.ts +208 -0
  336. package/src/templates/next-pagebuilder/lib/styles/global.css +0 -1
  337. package/src/templates/next-pagebuilder/next.config.ts +1 -0
  338. package/src/templates/next-pagebuilder/package.json +13 -26
  339. package/src/templates/next-pagebuilder/postcss.config.mjs +27 -1
  340. package/src/templates/next-pagebuilder/svg.d.ts +1 -0
  341. package/src/templates/next-webgl/.env.example +3 -3
  342. package/src/templates/next-webgl/.vscode/extensions.json +1 -5
  343. package/src/templates/next-webgl/.vscode/settings.json +1 -1
  344. package/src/templates/next-webgl/.zed/settings.json +47 -0
  345. package/src/templates/next-webgl/README.md +7 -6
  346. package/src/templates/next-webgl/_gitignore +1 -3
  347. package/src/templates/next-webgl/app/layout.tsx +21 -35
  348. package/src/templates/next-webgl/app/robots.ts +3 -4
  349. package/src/templates/next-webgl/app/sitemap.xml/route.ts +29 -29
  350. package/src/templates/next-webgl/biome.json +9 -2
  351. package/src/templates/next-webgl/components/ui/image/index.tsx +2 -1
  352. package/src/templates/next-webgl/components/webgl/components/scene/index.tsx +0 -2
  353. package/src/templates/next-webgl/lefthook.yml +25 -0
  354. package/src/templates/next-webgl/lib/README.md +8 -4
  355. package/src/templates/next-webgl/lib/hooks/use-media.ts +6 -3
  356. package/src/templates/next-webgl/lib/scripts/dev.ts +32 -0
  357. package/src/templates/next-webgl/lib/styles/README.md +13 -0
  358. package/src/templates/next-webgl/lib/styles/fonts.ts +20 -0
  359. package/src/templates/next-webgl/lib/styles/global.css +16 -196
  360. package/src/templates/next-webgl/lib/styles/index.css +3 -0
  361. package/src/templates/next-webgl/lib/styles/tokens.css +182 -0
  362. package/src/templates/next-webgl/lib/utils/README.md +40 -0
  363. package/src/templates/next-webgl/lib/utils/easings.ts +240 -0
  364. package/src/templates/next-webgl/lib/utils/fetch.ts +84 -0
  365. package/src/templates/next-webgl/lib/utils/global-css.d.ts +1 -0
  366. package/src/templates/next-webgl/lib/utils/json-ld.tsx +70 -68
  367. package/src/templates/next-webgl/lib/utils/math.ts +236 -0
  368. package/src/templates/next-webgl/lib/utils/metadata.ts +26 -27
  369. package/src/templates/next-webgl/lib/utils/strings.ts +246 -0
  370. package/src/templates/next-webgl/lib/utils/types.d.ts +15 -0
  371. package/src/templates/next-webgl/lib/utils/url.ts +8 -5
  372. package/src/templates/next-webgl/lib/utils/viewport.ts +199 -0
  373. package/src/templates/next-webgl/package.json +13 -8
  374. package/src/templates/next-webgl/svg.d.ts +1 -0
  375. package/src/templates/next-webgl/tsconfig.tsbuildinfo +1 -1
  376. package/dist/configs/animations.d.ts.map +0 -1
  377. package/dist/configs/animations.js.map +0 -1
  378. package/dist/configs/skills.d.ts +0 -27
  379. package/dist/configs/skills.d.ts.map +0 -1
  380. package/dist/configs/skills.js +0 -18
  381. package/dist/configs/skills.js.map +0 -1
  382. package/dist/configs/skills.json +0 -26
  383. package/dist/helpers/add/hooks-config.d.ts +0 -22
  384. package/dist/helpers/add/hooks-config.d.ts.map +0 -1
  385. package/dist/helpers/add/hooks-config.js +0 -31
  386. package/dist/helpers/add/hooks-config.js.map +0 -1
  387. package/dist/helpers/add/index.d.ts.map +0 -1
  388. package/dist/helpers/add/index.js.map +0 -1
  389. package/dist/helpers/create/copy-template.d.ts +0 -11
  390. package/dist/helpers/create/copy-template.d.ts.map +0 -1
  391. package/dist/helpers/create/copy-template.js.map +0 -1
  392. package/dist/helpers/create/index.d.ts +0 -24
  393. package/dist/helpers/create/index.d.ts.map +0 -1
  394. package/dist/helpers/create/index.js +0 -99
  395. package/dist/helpers/create/index.js.map +0 -1
  396. package/dist/helpers/create/init-git.d.ts.map +0 -1
  397. package/dist/helpers/create/init-git.js.map +0 -1
  398. package/dist/helpers/create/install.d.ts.map +0 -1
  399. package/dist/helpers/create/install.js.map +0 -1
  400. package/dist/helpers/create/rename-files.d.ts.map +0 -1
  401. package/dist/helpers/create/rename-files.js.map +0 -1
  402. package/dist/helpers/create/setup-agent.d.ts.map +0 -1
  403. package/dist/helpers/create/setup-agent.js +0 -91
  404. package/dist/helpers/create/setup-agent.js.map +0 -1
  405. package/dist/helpers/create/setup-sanity.d.ts.map +0 -1
  406. package/dist/helpers/create/setup-sanity.js.map +0 -1
  407. package/dist/helpers/create/update-package.d.ts +0 -20
  408. package/dist/helpers/create/update-package.d.ts.map +0 -1
  409. package/dist/helpers/create/update-package.js +0 -97
  410. package/dist/helpers/create/update-package.js.map +0 -1
  411. package/dist/helpers/integrate/index.d.ts.map +0 -1
  412. package/dist/helpers/integrate/index.js.map +0 -1
  413. package/dist/helpers/integrate/merge-config.d.ts +0 -21
  414. package/dist/helpers/integrate/merge-config.d.ts.map +0 -1
  415. package/dist/helpers/integrate/merge-config.js +0 -42
  416. package/dist/helpers/integrate/merge-config.js.map +0 -1
  417. package/dist/helpers/integrate/merge-orchestrator.d.ts +0 -10
  418. package/dist/helpers/integrate/merge-orchestrator.d.ts.map +0 -1
  419. package/dist/helpers/integrate/merge-orchestrator.js.map +0 -1
  420. package/dist/helpers/integrate/sanity/config.d.ts.map +0 -1
  421. package/dist/helpers/integrate/sanity/config.js.map +0 -1
  422. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +0 -1
  423. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +0 -1
  424. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +0 -1
  425. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +0 -1
  426. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +0 -11
  427. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +0 -1
  428. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js +0 -133
  429. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +0 -1
  430. package/dist/helpers/skills/index.d.ts.map +0 -1
  431. package/dist/helpers/skills/index.js.map +0 -1
  432. package/dist/utils/detect-project.d.ts.map +0 -1
  433. package/dist/utils/detect-project.js.map +0 -1
  434. package/dist/utils/format-results.d.ts.map +0 -1
  435. package/dist/utils/format-results.js.map +0 -1
  436. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/WEBHOOK-SETUP.md +0 -74
  437. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/sitemap.ts +0 -90
  438. package/src/template-hooks/config.js +0 -32
  439. package/src/templates/next-default/css.d.ts +0 -1
  440. package/src/templates/next-default/lib/utils/portable-text-to-markdown.ts +0 -83
  441. package/src/templates/next-default/tsconfig.tsbuildinfo +0 -1
  442. package/src/templates/next-experiments/css.d.ts +0 -1
  443. package/src/templates/next-experiments/lib/utils/portable-text-to-markdown.ts +0 -83
  444. package/src/templates/next-pagebuilder/app/api/[[...slug]]/route.ts +0 -100
  445. package/src/templates/next-pagebuilder/app/api/draft-mode/disable/route.ts +0 -7
  446. package/src/templates/next-pagebuilder/app/api/draft-mode/enable/route.ts +0 -20
  447. package/src/templates/next-pagebuilder/app/api/revalidate/route.ts +0 -121
  448. package/src/templates/next-pagebuilder/app/sitemap.md/route.ts +0 -124
  449. package/src/templates/next-pagebuilder/app/studio/[[...tool]]/page.tsx +0 -8
  450. package/src/templates/next-pagebuilder/components/page-builder/components/post-collection/index.tsx +0 -28
  451. package/src/templates/next-pagebuilder/components/sanity/draft-mode-toggle.tsx +0 -27
  452. package/src/templates/next-pagebuilder/components/sanity/rich-text.tsx +0 -87
  453. package/src/templates/next-pagebuilder/components/sanity/visual-editing.tsx +0 -27
  454. package/src/templates/next-pagebuilder/components/ui/sanity-image/index.tsx +0 -41
  455. package/src/templates/next-pagebuilder/lib/integrations/check-integration.ts +0 -5
  456. package/src/templates/next-pagebuilder/lib/integrations/sanity/client.ts +0 -27
  457. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -23
  458. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-builder-input.tsx +0 -36
  459. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-category-input.tsx +0 -50
  460. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/rich-text.tsx +0 -84
  461. package/src/templates/next-pagebuilder/lib/integrations/sanity/confirm-publish-action.ts +0 -40
  462. package/src/templates/next-pagebuilder/lib/integrations/sanity/env.ts +0 -34
  463. package/src/templates/next-pagebuilder/lib/integrations/sanity/fetchers/layout.ts +0 -35
  464. package/src/templates/next-pagebuilder/lib/integrations/sanity/icons.ts +0 -58
  465. package/src/templates/next-pagebuilder/lib/integrations/sanity/live/index.tsx +0 -61
  466. package/src/templates/next-pagebuilder/lib/integrations/sanity/markdown-proxy.config.ts +0 -50
  467. package/src/templates/next-pagebuilder/lib/integrations/sanity/page-builder-config.ts +0 -132
  468. package/src/templates/next-pagebuilder/lib/integrations/sanity/page-category.ts +0 -28
  469. package/src/templates/next-pagebuilder/lib/integrations/sanity/queries.ts +0 -281
  470. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.cli.ts +0 -29
  471. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.config.ts +0 -211
  472. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/index.ts +0 -4
  473. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/blog-content.ts +0 -89
  474. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/description.ts +0 -29
  475. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/hero.ts +0 -28
  476. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/singleton/content-collection.ts +0 -45
  477. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/author.ts +0 -70
  478. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/blog-category.ts +0 -55
  479. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/index.ts +0 -96
  480. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/company-data.ts +0 -62
  481. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/footer.ts +0 -79
  482. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/navbar.ts +0 -74
  483. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/link.ts +0 -125
  484. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/logo-field.ts +0 -9
  485. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/metadata.ts +0 -68
  486. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/nav-objects.ts +0 -192
  487. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-builder.ts +0 -39
  488. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-folder.ts +0 -124
  489. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page.ts +0 -232
  490. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/richText.ts +0 -63
  491. package/src/templates/next-pagebuilder/lib/integrations/sanity/singletons.ts +0 -44
  492. package/src/templates/next-pagebuilder/lib/integrations/sanity/structure.ts +0 -453
  493. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/image.ts +0 -8
  494. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/link.ts +0 -137
  495. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/page-builder-markdown.ts +0 -81
  496. package/src/templates/next-pagebuilder/lib/scripts/sanity-typegen.ts +0 -45
  497. package/src/templates/next-pagebuilder/lib/utils/json-ld.tsx +0 -213
  498. package/src/templates/next-pagebuilder/lib/utils/metadata.ts +0 -167
  499. package/src/templates/next-pagebuilder/lib/utils/sitemap.ts +0 -37
  500. package/src/templates/next-pagebuilder/proxy.ts +0 -81
  501. package/src/templates/next-webgl/css.d.ts +0 -1
  502. package/src/templates/next-webgl/lib/utils/portable-text-to-markdown.ts +0 -83
  503. package/dist/{helpers → infrastructure}/create/copy-template.js +0 -0
  504. package/dist/{helpers → infrastructure}/create/rename-files.d.ts +0 -0
  505. package/dist/{helpers → infrastructure}/create/rename-files.js +0 -0
  506. package/dist/{helpers → infrastructure}/create/setup-sanity.d.ts +0 -0
  507. package/dist/{helpers/integrate → modules/features/cms}/sanity/config.d.ts +0 -0
  508. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/disable/route.ts +0 -0
  509. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/enable/route.ts +0 -0
  510. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/[[...tool]]/page.tsx +0 -0
  511. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/layout.tsx +0 -0
  512. package/src/{helpers/integrate → modules/features/cms}/sanity/files/components/ui/sanity-image/index.tsx +0 -0
  513. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/README.md +0 -0
  514. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/check-integration.ts +0 -0
  515. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/MARKDOWN-PROXY.md +0 -0
  516. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/README.md +0 -0
  517. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/client.ts +0 -0
  518. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
  519. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -0
  520. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/confirm-publish-action.ts +0 -0
  521. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/live/index.tsx +1 -1
  522. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/markdown-proxy.config.ts +0 -0
  523. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -0
  524. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.config.ts +1 -1
  525. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -0
  526. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schema.json +0 -0
  527. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -0
  528. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -0
  529. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -0
  530. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -0
  531. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -0
  532. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -0
  533. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/structure.ts +0 -0
  534. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/image.ts +0 -0
  535. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/link.ts +0 -0
  536. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/portable-text-to-markdown.ts +0 -0
@@ -1 +0,0 @@
1
- declare module "*.css"
@@ -1,83 +0,0 @@
1
- export interface PortableTextMarkDefinition {
2
- _key?: string;
3
- _type?: string;
4
- href?: string;
5
- }
6
-
7
- export interface PortableTextSpan {
8
- _type?: string;
9
- text?: string;
10
- marks?: string[];
11
- }
12
-
13
- export interface PortableTextBlock {
14
- _type?: string;
15
- style?: string;
16
- listItem?: "bullet" | "number";
17
- level?: number;
18
- children?: PortableTextSpan[];
19
- markDefs?: PortableTextMarkDefinition[];
20
- }
21
-
22
- const headingStyles: Record<string, string> = {
23
- h1: "#",
24
- h2: "##",
25
- h3: "###",
26
- h4: "####",
27
- h5: "#####",
28
- h6: "######",
29
- }
30
-
31
- function applyMarks(
32
- text: string,
33
- marks: string[] | undefined,
34
- markDefs: PortableTextMarkDefinition[]
35
- ) {
36
- return (marks ?? []).reduce((result, mark) => {
37
- if (mark === "strong") return `**${result}**`
38
- if (mark === "em") return `*${result}*`
39
- if (mark === "code") return `\`${result}\``
40
-
41
- const link = markDefs.find((definition) => definition._key === mark)
42
- if (link?._type === "link" && link.href) {
43
- return `[${result}](${link.href})`
44
- }
45
-
46
- return result
47
- }, text)
48
- }
49
-
50
- function serializeBlock(block: PortableTextBlock) {
51
- const text = (block.children ?? [])
52
- .map((child) =>
53
- applyMarks(child.text ?? "", child.marks, block.markDefs ?? [])
54
- )
55
- .join("")
56
- .trim()
57
-
58
- if (!text) return ""
59
-
60
- if (block.listItem) {
61
- const level = Math.max((block.level ?? 1) - 1, 0)
62
- const indent = " ".repeat(level)
63
- const marker = block.listItem === "number" ? "1." : "-"
64
- return `${indent}${marker} ${text}`
65
- }
66
-
67
- if (block.style === "blockquote") {
68
- return `> ${text}`
69
- }
70
-
71
- const headingPrefix = headingStyles[block.style ?? ""]
72
- if (headingPrefix) {
73
- return `${headingPrefix} ${text}`
74
- }
75
-
76
- return text
77
- }
78
-
79
- export function portableTextToMarkdown(
80
- value: PortableTextBlock[] | null | undefined
81
- ) {
82
- return (value ?? []).map(serializeBlock).filter(Boolean).join("\n\n")
83
- }
@@ -1,100 +0,0 @@
1
- import { NextResponse } from "next/server"
2
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
3
- import { sanityFetch } from "@/lib/integrations/sanity/live"
4
- import { PAGE_QUERY } from "@/lib/integrations/sanity/queries"
5
- import type { PAGE_QUERY_RESULT } from "@/lib/integrations/sanity/sanity.types"
6
- import { renderPageBuilderMarkdown } from "@/lib/integrations/sanity/utils/page-builder-markdown"
7
- import { getBaseUrl } from "@/lib/utils/base-url"
8
-
9
- type PageResult = NonNullable<PAGE_QUERY_RESULT>
10
-
11
- const getSlugPath = (slugParts?: string[]) => {
12
- if (!slugParts?.length) return null
13
-
14
- const lastSegment = slugParts.at(-1)
15
-
16
- if (!lastSegment?.endsWith(".md")) return null
17
-
18
- const pathSegments = [...slugParts]
19
- pathSegments[pathSegments.length - 1] = lastSegment.slice(0, -3)
20
-
21
- const slug = pathSegments.filter(Boolean).join("/")
22
- if (!slug) return null
23
-
24
- return slug === "index" ? null : slug
25
- }
26
-
27
- export async function GET(
28
- _request: Request,
29
- props: { params: Promise<{ slug?: string[] }> }
30
- ) {
31
- const { slug: rawSlugParts } = await props.params
32
- const slug = getSlugPath(rawSlugParts)
33
-
34
- if (
35
- rawSlugParts?.length &&
36
- slug === null &&
37
- rawSlugParts.join("/") !== "index.md"
38
- ) {
39
- return new NextResponse(null, { status: 404 })
40
- }
41
-
42
- if (!rawSlugParts?.length) {
43
- return new NextResponse(null, { status: 404 })
44
- }
45
-
46
- if (!isSanityConfigured()) {
47
- return new NextResponse("# 404 Not Found\n\nCMS not configured.", {
48
- status: 404,
49
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
50
- })
51
- }
52
-
53
- const { data } = await sanityFetch({
54
- query: PAGE_QUERY,
55
- params: { slug },
56
- })
57
-
58
- const page = data as PageResult | null
59
-
60
- const baseUrl = getBaseUrl()
61
-
62
- if (!page) {
63
- return new NextResponse("# 404 Not Found\n\nPage not found.", {
64
- status: 404,
65
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
66
- })
67
- }
68
-
69
- const body = renderPageBuilderMarkdown(page.pageBuilder)
70
- const canonicalPath = slug ? `/${slug}` : "/"
71
-
72
- return new NextResponse(
73
- [
74
- `# ${page.title}`,
75
- "",
76
- page._updatedAt
77
- ? `**Updated:** ${new Date(page._updatedAt).toLocaleDateString()}`
78
- : null,
79
- "",
80
- `Canonical URL: ${baseUrl}${canonicalPath}`,
81
- "",
82
- "---",
83
- "",
84
- body || "No page builder content yet.",
85
- "",
86
- "---",
87
- "",
88
- `[View all content](${baseUrl}/sitemap.md)`,
89
- ]
90
- .filter((part): part is string => part !== null)
91
- .join("\n"),
92
- {
93
- headers: {
94
- "Content-Type": "text/markdown; charset=utf-8",
95
- Vary: "Accept",
96
- "X-Content-Type-Options": "nosniff",
97
- },
98
- }
99
- )
100
- }
@@ -1,7 +0,0 @@
1
- import { draftMode } from "next/headers"
2
- import { type NextRequest, NextResponse } from "next/server"
3
-
4
- export async function GET(request: NextRequest) {
5
- ;(await draftMode()).disable()
6
- return NextResponse.redirect(new URL("/", request.url))
7
- }
@@ -1,20 +0,0 @@
1
- import { NextResponse } from "next/server"
2
- import { defineEnableDraftMode } from "next-sanity/draft-mode"
3
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
4
- import { client } from "@/lib/integrations/sanity/client"
5
- import { sanityToken } from "@/lib/integrations/sanity/env"
6
-
7
- const draftModeHandler =
8
- isSanityConfigured() && client
9
- ? defineEnableDraftMode({
10
- client: client.withConfig({ token: sanityToken }),
11
- })
12
- : {
13
- GET: () =>
14
- NextResponse.json(
15
- { error: "Sanity is not configured" },
16
- { status: 503 }
17
- ),
18
- }
19
-
20
- export const { GET } = draftModeHandler
@@ -1,121 +0,0 @@
1
- import { revalidatePath, revalidateTag } from "next/cache"
2
- import { type NextRequest, NextResponse } from "next/server"
3
- import { parseBody } from "next-sanity/webhook"
4
- import { client } from "@/lib/integrations/sanity/client"
5
- import { SANITY_LAYOUT_TAGS } from "@/lib/integrations/sanity/fetchers/layout"
6
- import { pageBuilderReferenceMembers as pbrm } from "@/lib/integrations/sanity/page-builder-config"
7
- import {
8
- P_REF_PB_COMP_QUERY,
9
- P_REV_SLUGS_QUERY,
10
- } from "@/lib/integrations/sanity/queries"
11
- import type { P_REF_PB_COMP_QUERY_RESULT } from "@/lib/integrations/sanity/sanity.types"
12
- import { getPagePath } from "@/lib/utils/sitemap"
13
-
14
- const ERRORS = {
15
- BAD_REQ: ["Bad Request", { status: 400 }],
16
- INVALID_SIG: ["Invalid signature", { status: 401 }],
17
- } as const
18
-
19
- type WebhookSlug = {
20
- current?: string | null
21
- }
22
-
23
- type WebhookDocument = {
24
- _id: string
25
- _type: string
26
- resolvedSlug?: string | null
27
- slug?: WebhookSlug | null
28
- }
29
-
30
- type MutationOperation = "create" | "update" | "delete"
31
-
32
- type RevalidateWebhookBody = WebhookDocument & {
33
- operation?: MutationOperation
34
- before?: Partial<WebhookDocument> | null
35
- after?: Partial<WebhookDocument> | null
36
- }
37
-
38
- const pageBuilderComponent = new Set<string>(pbrm.map((m) => m.documentType))
39
-
40
- const normalizeRevalidationSlug = (slug: string | null | undefined) => {
41
- if (slug === undefined) return null
42
- if (slug === null) return "/"
43
- return `/${slug}`
44
- }
45
-
46
- const getCanonicalPageSlug = async (documentId: string) => {
47
- if (!client) return null
48
-
49
- const pageSlugs = await client.fetch<Array<{ slug: string | null }>>(
50
- P_REV_SLUGS_QUERY,
51
- { documentIds: [documentId] }
52
- )
53
-
54
- return normalizeRevalidationSlug(
55
- pageSlugs.find((page) => page.slug !== undefined)?.slug
56
- )
57
- }
58
-
59
- const getPagesThatReferenceComp = async (documentId: string) => {
60
- if (!client) return []
61
-
62
- const pages = await client.fetch<P_REF_PB_COMP_QUERY_RESULT>(
63
- P_REF_PB_COMP_QUERY,
64
- {
65
- documentId,
66
- }
67
- )
68
-
69
- return (pages ?? []).map((page) => normalizeRevalidationSlug(page.slug))
70
- }
71
-
72
- const getAffectedPageSlugsForWebhook = async (body: RevalidateWebhookBody) => {
73
- const pages: Array<string | null> = []
74
-
75
- if (body.operation === "delete" && body?.before?.slug?.current) {
76
- revalidateTag(body.before.slug.current, "max")
77
- }
78
-
79
- // If the document is a page, get its slug
80
- if (body._type === "page") {
81
- const data = await getCanonicalPageSlug(body._id)
82
- if (data !== null) pages.push(data)
83
- }
84
-
85
- // If the document is a page builder component, get the page slugs that reference it
86
- if (pageBuilderComponent.has(body._type)) {
87
- const data = await getPagesThatReferenceComp(body._id)
88
- pages.push(...data)
89
- }
90
-
91
- return pages.filter((page): page is string => page !== null)
92
- }
93
-
94
- export async function POST(request: NextRequest) {
95
- try {
96
- const { body, isValidSignature } = await parseBody<RevalidateWebhookBody>(
97
- request,
98
- process.env.SANITY_REVALIDATE_SECRET
99
- )
100
-
101
- if (!isValidSignature) return new Response(...ERRORS.INVALID_SIG)
102
- if (!(body?._type && body._id)) return new Response(...ERRORS.BAD_REQ)
103
- if (body._id.startsWith("drafts."))
104
- return NextResponse.json({ status: 200, now: Date.now(), skipped: true })
105
-
106
- const affectedPageSlugs = await getAffectedPageSlugsForWebhook(body)
107
-
108
- for (const slug of affectedPageSlugs) {
109
- revalidatePath(getPagePath(slug))
110
- }
111
-
112
- if (SANITY_LAYOUT_TAGS.includes(body?._type)) {
113
- revalidateTag(body._type, "max")
114
- }
115
-
116
- return NextResponse.json({ status: 200, now: Date.now() })
117
- } catch (error) {
118
- console.error("Revalidation error:", error)
119
- return new Response("Internal Server Error", { status: 500 })
120
- }
121
- }
@@ -1,124 +0,0 @@
1
- import { NextResponse } from "next/server"
2
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
3
- import type { PAGE_SITEMAP_QUERY_RESULT } from "@/lib/integrations/sanity/sanity.types"
4
- import {
5
- getMarkdownPath,
6
- getSitemap,
7
- getSitemapBaseUrl,
8
- } from "@/lib/utils/sitemap"
9
-
10
- export const dynamic = "force-dynamic"
11
-
12
- type PageDoc = PAGE_SITEMAP_QUERY_RESULT[number]
13
-
14
- const ROOT_GROUP = "__root__"
15
-
16
- const getFolderGroup = (slug: string | null) => {
17
- if (!slug) return ROOT_GROUP
18
-
19
- const segments = slug.split("/").filter(Boolean)
20
-
21
- if (segments.length <= 1) return ROOT_GROUP
22
-
23
- return segments.slice(0, -1).join("/")
24
- }
25
-
26
- const getGroupHeading = (group: string) => {
27
- if (group === ROOT_GROUP) return "### Root Pages"
28
-
29
- return `### /${group}`
30
- }
31
-
32
- const sortPages = (left: PageDoc, right: PageDoc) => {
33
- const leftLabel = left.title || left.slug || "Homepage"
34
- const rightLabel = right.title || right.slug || "Homepage"
35
-
36
- return leftLabel.localeCompare(rightLabel)
37
- }
38
-
39
- export const GET = async () => {
40
- const baseUrl = getSitemapBaseUrl()
41
-
42
- if (!isSanityConfigured()) {
43
- return new NextResponse(
44
- [
45
- "# Sitemap",
46
- "",
47
- "## Pages",
48
- "",
49
- `- [Homepage](${baseUrl}/index.md)`,
50
- "",
51
- "CMS not configured. No additional content available.",
52
- ].join("\n"),
53
- {
54
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
55
- }
56
- )
57
- }
58
-
59
- try {
60
- const allPages = await getSitemap()
61
-
62
- if (!allPages) {
63
- return new NextResponse("# Sitemap\n\nUnable to connect to CMS.", {
64
- status: 503,
65
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
66
- })
67
- }
68
-
69
- const pages = (allPages ?? []).filter((page) => !page.noIndex)
70
- const pageGroups = new Map<string, PageDoc[]>()
71
-
72
- for (const page of pages) {
73
- const group = getFolderGroup(page.slug ?? null)
74
- const groupedPages = pageGroups.get(group) ?? []
75
-
76
- groupedPages.push(page)
77
- pageGroups.set(group, groupedPages)
78
- }
79
-
80
- const sortedGroupNames = [...pageGroups.keys()].sort((left, right) => {
81
- if (left === ROOT_GROUP) return -1
82
- if (right === ROOT_GROUP) return 1
83
-
84
- return left.localeCompare(right)
85
- })
86
-
87
- const parts = [
88
- `# ${new URL(baseUrl).hostname} - Content Sitemap`,
89
- "",
90
- "> This sitemap lists all available markdown content for AI agents.",
91
- "",
92
- "## Pages",
93
- "",
94
- ]
95
-
96
- if (pages.length > 0) {
97
- for (const groupName of sortedGroupNames) {
98
- const groupedPages = (pageGroups.get(groupName) ?? []).sort(sortPages)
99
-
100
- if (groupedPages.length === 0) continue
101
-
102
- parts.push(getGroupHeading(groupName), "")
103
-
104
- for (const page of groupedPages) {
105
- parts.push(
106
- `- [${page.title || page.slug || "Homepage"}](${getMarkdownPath(baseUrl, page.slug ?? null)})`
107
- )
108
- }
109
-
110
- parts.push("")
111
- }
112
- }
113
-
114
- if (pages.length === 0) parts.push("No content published yet.", "")
115
-
116
- return new NextResponse(parts.join("\n"))
117
- } catch (error) {
118
- console.error("Error generating sitemap.md:", error)
119
- return new NextResponse("# Sitemap\n\nError fetching content.", {
120
- status: 500,
121
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
122
- })
123
- }
124
- }
@@ -1,8 +0,0 @@
1
- "use client"
2
-
3
- import { NextStudio } from "next-sanity/studio"
4
- import config from "@/lib/integrations/sanity/sanity.config"
5
-
6
- const StudioPage = () => <NextStudio config={config} />
7
-
8
- export default StudioPage
@@ -1,28 +0,0 @@
1
- import { sanityFetch } from "@/lib/integrations/sanity/live"
2
- import { ALL_BLOG_ARTICLES_QUERY } from "@/lib/integrations/sanity/queries"
3
- import { ContentGrid } from "./content-grid"
4
- import type { ContentCollectionBlock } from "./types"
5
-
6
- type ContentCollectionProps = {
7
- block: ContentCollectionBlock
8
- }
9
-
10
- export async function ContentCollection({ block }: ContentCollectionProps) {
11
- const { data: articles } = await sanityFetch({
12
- query: ALL_BLOG_ARTICLES_QUERY,
13
- })
14
-
15
- // @ts-ignore
16
- if (!articles?.length) return null
17
-
18
- return (
19
- <section className="flex flex-col gap-8 py-8">
20
- {block.subtitle ? (
21
- <h2 className="font-medium text-2xl leading-tight">
22
- {block.subtitle}
23
- </h2>
24
- ) : null}
25
- <ContentGrid articles={articles} />
26
- </section>
27
- )
28
- }
@@ -1,27 +0,0 @@
1
- "use client"
2
-
3
- import { useRouter } from "next/navigation"
4
- import { useTransition } from "react"
5
-
6
- export function DraftModeToggle() {
7
- const router = useRouter()
8
- const [isPending, startTransition] = useTransition()
9
-
10
- const handleDisable = () => {
11
- startTransition(async () => {
12
- await fetch("/api/draft-mode/disable")
13
- router.refresh()
14
- })
15
- }
16
-
17
- return (
18
- <button
19
- type="button"
20
- onClick={handleDisable}
21
- disabled={isPending}
22
- className="fixed bottom-4 left-1/2 z-50 -translate-x-1/2 rounded-full border border-white/10 bg-black/80 px-2 py-1 font-medium text-sm text-white shadow-lg backdrop-blur-sm transition-colors hover:bg-black/90 disabled:opacity-50"
23
- >
24
- {isPending ? "Disabling..." : "Disable Draft Mode"}
25
- </button>
26
- )
27
- }
@@ -1,87 +0,0 @@
1
- import { PortableText, type PortableTextProps } from "@portabletext/react"
2
- import { Link } from "@/components/ui/link"
3
- import { SanityImage } from "@/components/ui/sanity-image"
4
- import {
5
- getLinkAttributes,
6
- urlForReference,
7
- } from "../../lib/integrations/sanity/utils/link"
8
-
9
- interface RichTextProps {
10
- content: PortableTextProps["value"]
11
- }
12
-
13
- type LinkMarkProps = {
14
- children: React.ReactNode
15
- value?: unknown
16
- }
17
-
18
- const LinkMark = ({ children, value }: LinkMarkProps) => {
19
- const href = urlForReference(value as Parameters<typeof urlForReference>[0])
20
- const attrs = getLinkAttributes(
21
- value as Parameters<typeof getLinkAttributes>[0]
22
- )
23
-
24
- return (
25
- <Link
26
- href={href}
27
- target={attrs.target}
28
- rel={attrs.rel}
29
- data-sanity-edit-target
30
- >
31
- {children}
32
- </Link>
33
- )
34
- }
35
-
36
- export const RichText = ({ content }: RichTextProps) => {
37
- if (!content) return null
38
-
39
- return (
40
- <PortableText
41
- value={content}
42
- components={{
43
- types: {
44
- image: ({ value }) => <SanityImage image={value} maxWidth={1920} />,
45
- table: ({ value }) => {
46
- const rows = value?.rows as
47
- | Array<{ _key?: string; cells?: string[] }>
48
- | undefined
49
- if (!rows?.length) return null
50
- return (
51
- <table>
52
- <tbody>
53
- {rows.map((row, i) => (
54
- <tr key={row._key ?? `row-${i}`}>
55
- {row.cells?.map((cell) => {
56
- const cellKey = `${row._key}-${cell}`
57
- return i === 0 ? (
58
- <th key={cellKey}>{cell}</th>
59
- ) : (
60
- <td key={cellKey}>{cell}</td>
61
- )
62
- })}
63
- </tr>
64
- ))}
65
- </tbody>
66
- </table>
67
- )
68
- },
69
- },
70
- marks: {
71
- link: LinkMark,
72
- pageReference: LinkMark,
73
- externalLink: LinkMark,
74
- },
75
- block: {
76
- h1: ({ children }) => <h1 className="h1">{children}</h1>,
77
- h2: ({ children }) => <h2 className="h2">{children}</h2>,
78
- h3: ({ children }) => <h3 className="h3">{children}</h3>,
79
- h4: ({ children }) => <h4 className="h4">{children}</h4>,
80
- h5: ({ children }) => <h5 className="h5">{children}</h5>,
81
- h6: ({ children }) => <h6 className="h6">{children}</h6>,
82
- normal: ({ children }) => <p className="p">{children}</p>,
83
- },
84
- }}
85
- />
86
- )
87
- }
@@ -1,27 +0,0 @@
1
- import { draftMode } from "next/headers"
2
- import { VisualEditing } from "next-sanity/visual-editing"
3
- import { Suspense } from "react"
4
- import { DraftModeToggle } from "@/components/sanity/draft-mode-toggle"
5
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
6
- import { SanityLive } from "@/lib/integrations/sanity/live"
7
-
8
- async function VisualEditingInner() {
9
- const { isEnabled: isDraftMode } = await draftMode()
10
- const sanityConfigured = isSanityConfigured()
11
-
12
- if (!(sanityConfigured && isDraftMode)) return null
13
-
14
- return (
15
- <>
16
- <DraftModeToggle />
17
- <VisualEditing />
18
- <SanityLive />
19
- </>
20
- )
21
- }
22
-
23
- export const SanityVisualEditing = () => (
24
- <Suspense fallback={null}>
25
- <VisualEditingInner />
26
- </Suspense>
27
- )
@@ -1,41 +0,0 @@
1
- import { getImageDimensions } from "@sanity/asset-utils"
2
- import { Image, type ImageProps } from "@/components/ui/image"
3
- import { urlForImage } from "@/lib/integrations/sanity/utils/image"
4
-
5
- interface SanityImageProps extends Omit<ImageProps, "src" | "aspectRatio"> {
6
- image: {
7
- asset?: {
8
- _ref: string
9
- _type: "reference"
10
- }
11
- alt?: string
12
- hotspot?: object
13
- crop?: object
14
- }
15
- maxWidth?: number
16
- }
17
-
18
- export function SanityImage({
19
- image,
20
- maxWidth = 1920,
21
- alt,
22
- fill,
23
- ...props
24
- }: SanityImageProps) {
25
- if (!image?.asset) return null
26
-
27
- const { width, height } = getImageDimensions(image.asset)
28
- const aspectRatio = width / height
29
-
30
- const imageProps = fill ? { fill: true } : { width, height }
31
-
32
- return (
33
- <Image
34
- src={urlForImage(image).width(maxWidth).url()}
35
- alt={alt || image.alt || ""}
36
- aspectRatio={aspectRatio}
37
- {...imageProps}
38
- {...props}
39
- />
40
- )
41
- }
@@ -1,5 +0,0 @@
1
- export const isSanityConfigured = () =>
2
- Boolean(
3
- process.env.NEXT_PUBLIC_SANITY_PROJECT_ID &&
4
- process.env.NEXT_PUBLIC_SANITY_DATASET
5
- )