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,45 +0,0 @@
1
- /**
2
- * Wrapper around `sanity schema extract && sanity typegen generate`
3
- * that gracefully skips when Sanity is not configured.
4
- */
5
- import { execSync } from "node:child_process"
6
- import { existsSync } from "node:fs"
7
- import { resolve } from "node:path"
8
-
9
- const sanityDir = resolve(import.meta.dir, "../integrations/sanity")
10
- const envFile = resolve(import.meta.dir, "../../.env.local")
11
-
12
- // Check if Sanity project ID is configured
13
- const hasEnvFile = existsSync(envFile)
14
-
15
- if (!hasEnvFile) {
16
- console.log(" Skipping sanity:typegen — .env.local not found")
17
- process.exit(0)
18
- }
19
-
20
- // Read .env.local to check for project ID
21
- const envContent = Bun.file(envFile)
22
- const text = await envContent.text()
23
- const hasProjectId = text
24
- .split("\n")
25
- .some(
26
- (line) =>
27
- line.startsWith("NEXT_PUBLIC_SANITY_PROJECT_ID=") &&
28
- line.split("=")[1]?.trim() !== "",
29
- )
30
-
31
- if (!hasProjectId) {
32
- console.log(
33
- " Skipping sanity:typegen — NEXT_PUBLIC_SANITY_PROJECT_ID not set",
34
- )
35
- process.exit(0)
36
- }
37
-
38
- try {
39
- execSync(
40
- `cd ${sanityDir} && bun --env-file ../../../.env.local sanity schema extract && bun --env-file ../../../.env.local sanity typegen generate && bun biome check --write --unsafe`,
41
- { stdio: "inherit" },
42
- )
43
- } catch {
44
- console.warn(" sanity:typegen failed — continuing anyway")
45
- }
@@ -1,213 +0,0 @@
1
- import type {
2
- Article,
3
- BreadcrumbList,
4
- Organization,
5
- Thing,
6
- WebPage,
7
- WebSite,
8
- WithContext,
9
- } from "schema-dts"
10
- import { getBaseUrl } from "./base-url"
11
-
12
- const BASE_URL = getBaseUrl()
13
-
14
- interface JsonLdProps<T extends Thing> {
15
- data: WithContext<T>
16
- }
17
-
18
- const serializeJsonLd = <T extends Thing>(data: WithContext<T>) =>
19
- JSON.stringify(data).replace(/</g, "\\u003c")
20
-
21
- export const JsonLd = <T extends Thing>({ data }: JsonLdProps<T>) => (
22
- <script
23
- type="application/ld+json"
24
- // biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD must be emitted as raw script text, and the payload is serialized and `<`-escaped first.
25
- dangerouslySetInnerHTML={{ __html: serializeJsonLd(data) }}
26
- />
27
- )
28
-
29
- interface WebSiteJsonLdOptions {
30
- name: string
31
- url?: string
32
- description?: string
33
- }
34
-
35
- export const generateWebSiteJsonLd = (
36
- options: WebSiteJsonLdOptions
37
- ): WithContext<WebSite> => {
38
- const { name, url = BASE_URL, description } = options
39
- return {
40
- "@context": "https://schema.org",
41
- "@type": "WebSite",
42
- name,
43
- ...(url ? { url } : {}),
44
- ...(description && { description }),
45
- }
46
- }
47
-
48
- interface OrganizationJsonLdOptions {
49
- name: string
50
- url?: string
51
- logo?: string
52
- description?: string
53
- sameAs?: string[]
54
- }
55
-
56
- export const generateOrganizationJsonLd = (
57
- options: OrganizationJsonLdOptions
58
- ): WithContext<Organization> => {
59
- const { name, url = BASE_URL, logo, description, sameAs } = options
60
-
61
- return {
62
- "@context": "https://schema.org",
63
- "@type": "Organization",
64
- name,
65
- ...(url ? { url } : {}),
66
- ...(logo && { logo: `${BASE_URL}${logo}` }),
67
- ...(description && { description }),
68
- ...(sameAs && { sameAs }),
69
- }
70
- }
71
-
72
- interface WebPageJsonLdOptions {
73
- title: string
74
- url?: string
75
- description?: string
76
- image?: string
77
- datePublished?: string
78
- dateModified?: string
79
- }
80
-
81
- export const generateWebPageJsonLd = (
82
- options: WebPageJsonLdOptions
83
- ): WithContext<WebPage> => {
84
- const { title, url, description, image, datePublished, dateModified } =
85
- options
86
- const fullUrl = url ? `${BASE_URL}${url}` : BASE_URL
87
-
88
- return {
89
- "@context": "https://schema.org",
90
- "@type": "WebPage",
91
- name: title,
92
- ...(fullUrl ? { url: fullUrl } : {}),
93
- ...(description && { description }),
94
- ...(image && { image }),
95
- ...(datePublished && { datePublished }),
96
- ...(dateModified && { dateModified }),
97
- }
98
- }
99
-
100
- interface ArticleJsonLdOptions {
101
- title: string
102
- url?: string
103
- description?: string
104
- image?: string
105
- datePublished?: string
106
- dateModified?: string
107
- authorName?: string
108
- authorUrl?: string
109
- }
110
-
111
- export function generateArticleJsonLd(
112
- options: ArticleJsonLdOptions
113
- ): WithContext<Article> {
114
- const {
115
- title,
116
- url,
117
- description,
118
- image,
119
- datePublished,
120
- dateModified,
121
- authorName,
122
- authorUrl,
123
- } = options
124
- const fullUrl = url ? `${BASE_URL}${url}` : BASE_URL
125
- return {
126
- "@context": "https://schema.org",
127
- "@type": "Article",
128
- headline: title,
129
- ...(fullUrl ? { url: fullUrl } : {}),
130
- ...(description && { description }),
131
- ...(image && { image }),
132
- ...(datePublished && { datePublished }),
133
- ...(dateModified && { dateModified }),
134
- ...(authorName && {
135
- author: {
136
- "@type": "Person",
137
- name: authorName,
138
- ...(authorUrl && { url: authorUrl }),
139
- },
140
- }),
141
- }
142
- }
143
-
144
- interface BreadcrumbItem {
145
- name: string
146
- url: string
147
- }
148
-
149
- export function generateBreadcrumbJsonLd(
150
- items: BreadcrumbItem[]
151
- ): WithContext<BreadcrumbList> {
152
- return {
153
- "@context": "https://schema.org",
154
- "@type": "BreadcrumbList",
155
- itemListElement: items.map((item, index) => ({
156
- "@type": "ListItem" as const,
157
- position: index + 1,
158
- name: item.name,
159
- item: `${BASE_URL}${item.url}`,
160
- })),
161
- }
162
- }
163
-
164
- /* ——————————————————————————————————————————————————————————
165
- * Sanity helpers
166
- *
167
- * Accept flat options instead of a document shape so they
168
- * work with any Sanity type without interface mismatches.
169
- * —————————————————————————————————————————————————————————— */
170
-
171
- interface SanityArticleJsonLdOptions {
172
- title: string
173
- url: string
174
- description?: string | null | undefined
175
- image?: string | null | undefined
176
- datePublished?: string | null | undefined
177
- dateModified?: string
178
- authorName?: string | null | undefined
179
- authorUrl?: string | null | undefined
180
- }
181
-
182
- export function generateSanityArticleJsonLd(
183
- options: SanityArticleJsonLdOptions
184
- ): WithContext<Article> {
185
- const opts: ArticleJsonLdOptions = { title: options.title, url: options.url }
186
- if (options.description) opts.description = options.description
187
- if (options.image) opts.image = options.image
188
- if (options.datePublished) opts.datePublished = options.datePublished
189
- if (options.dateModified) opts.dateModified = options.dateModified
190
- if (options.authorName) opts.authorName = options.authorName
191
- if (options.authorUrl) opts.authorUrl = options.authorUrl
192
- return generateArticleJsonLd(opts)
193
- }
194
-
195
- interface SanityWebPageJsonLdOptions {
196
- title: string
197
- url: string
198
- description?: string | null | undefined
199
- image?: string | null | undefined
200
- datePublished?: string | null | undefined
201
- dateModified?: string
202
- }
203
-
204
- export function generateSanityWebPageJsonLd(
205
- options: SanityWebPageJsonLdOptions
206
- ): WithContext<WebPage> {
207
- const opts: WebPageJsonLdOptions = { title: options.title, url: options.url }
208
- if (options.description) opts.description = options.description
209
- if (options.image) opts.image = options.image
210
- if (options.datePublished) opts.datePublished = options.datePublished
211
- if (options.dateModified) opts.dateModified = options.dateModified
212
- return generateWebPageJsonLd(opts)
213
- }
@@ -1,167 +0,0 @@
1
- import type { Metadata } from "next"
2
- import { urlForImage } from "@/lib/integrations/sanity/utils/image"
3
- import { getBaseUrl } from "./base-url"
4
-
5
- interface GenerateMetadataOptions {
6
- title?: string | undefined
7
- description?: string | undefined
8
- keywords?: string[] | undefined
9
- image?:
10
- | {
11
- url?: string | undefined
12
- width?: number | undefined
13
- height?: number | undefined
14
- }
15
- | undefined
16
- url?: string | undefined
17
- siteName?: string | undefined
18
- index?: boolean | undefined
19
- noIndex?: boolean | undefined
20
- type?: "website" | "article"
21
- publishedTime?: string | undefined
22
- modifiedTime?: string | undefined
23
- authors?: string[] | undefined
24
- }
25
-
26
- interface SanityMetadataImage {
27
- asset?: {
28
- _ref?: string
29
- _type?: "reference"
30
- }
31
- }
32
-
33
- interface SanityPageMetadata {
34
- metaTitle?: string | null
35
- metaDescription?: string | null
36
- og?: {
37
- image?: SanityMetadataImage | null
38
- } | null
39
- index?: boolean | null
40
- title?: string | null
41
- description?: string | null
42
- image?: SanityMetadataImage | null
43
- noIndex?: boolean | null
44
- }
45
-
46
- interface SanityMetadataDocument {
47
- title?: string | null
48
- subtitle?: string | null
49
- metadata?: SanityPageMetadata | null
50
- }
51
-
52
- interface GenerateSanityMetadataOptions {
53
- document: SanityMetadataDocument
54
- url?: string
55
- siteName?: string
56
- type?: "website" | "article"
57
- }
58
-
59
- const APP_BASE_URL = getBaseUrl()
60
-
61
- /**
62
- * Generate complete metadata object for pages
63
- *
64
- * @example
65
- * ```ts
66
- * export async function generateMetadata({ params }) {
67
- * const page = await fetchPage(params.slug)
68
- *
69
- * return generatePageMetadata({
70
- * title: page.metadata?.title || page.title,
71
- * description: page.metadata?.description,
72
- * image: { url: page.metadata?.image?.asset?.url },
73
- * url: `/page/${params.slug}`,
74
- * noIndex: page.metadata?.noIndex,
75
- * })
76
- * }
77
- * ```
78
- */
79
- const generatePageMetadata = (options: GenerateMetadataOptions): Metadata => {
80
- const {
81
- title,
82
- description,
83
- keywords,
84
- image,
85
- url,
86
- siteName = "Basement",
87
- index,
88
- noIndex = false,
89
- type = "website",
90
- publishedTime,
91
- modifiedTime,
92
- authors,
93
- } = options
94
-
95
- const shouldIndex = index ?? !noIndex
96
- const fullUrl = url ? `${APP_BASE_URL}${url}` : APP_BASE_URL
97
- const imageUrl = image?.url || "/opengraph-image.jpg"
98
- const width = image?.width || 1200
99
- const height = image?.height || 630
100
-
101
- const metadata: Metadata = {
102
- metadataBase: new URL(APP_BASE_URL),
103
- title,
104
- description,
105
- keywords,
106
- alternates: { canonical: url || "/" },
107
- openGraph: {
108
- title,
109
- description,
110
- url: fullUrl,
111
- siteName,
112
- locale: "en_US",
113
- type,
114
- images: [{ url: imageUrl, width, height }],
115
- ...(publishedTime && { publishedTime }),
116
- ...(modifiedTime && { modifiedTime }),
117
- ...(authors && { authors }),
118
- },
119
- twitter: {
120
- card: "summary_large_image",
121
- title,
122
- description,
123
- images: [{ url: imageUrl, width, height }],
124
- },
125
- other: { "fb:app_id": process.env.NEXT_PUBLIC_FACEBOOK_APP_ID || "" },
126
- }
127
-
128
- if (!shouldIndex) metadata.robots = { index: false, follow: false }
129
-
130
- return metadata
131
- }
132
-
133
- export const generateSanityMetadata = ({
134
- document,
135
- url,
136
- siteName,
137
- type = "website",
138
- }: GenerateSanityMetadataOptions): Metadata => {
139
- const pageMetadata = document.metadata
140
- const title =
141
- pageMetadata?.metaTitle ||
142
- pageMetadata?.title ||
143
- document.title ||
144
- undefined
145
- const description =
146
- pageMetadata?.metaDescription ||
147
- pageMetadata?.description ||
148
- document.subtitle ||
149
- undefined
150
- const socialImageSource = pageMetadata?.image || pageMetadata?.og?.image
151
- const imageUrl = socialImageSource
152
- ? urlForImage(socialImageSource).width(1200).height(630).url()
153
- : undefined
154
- const index =
155
- pageMetadata?.index ??
156
- (pageMetadata?.noIndex != null ? !pageMetadata.noIndex : true)
157
-
158
- return generatePageMetadata({
159
- title,
160
- description,
161
- image: imageUrl ? { url: imageUrl, width: 1200, height: 630 } : undefined,
162
- url,
163
- siteName,
164
- index,
165
- type,
166
- })
167
- }
@@ -1,37 +0,0 @@
1
- import { PAGE_SITEMAP_QUERY } from "@/lib/integrations/sanity/queries"
2
- import type { PAGE_SITEMAP_QUERY_RESULT } from "@/lib/integrations/sanity/sanity.types"
3
- import { getBaseUrl } from "./base-url"
4
-
5
- export const getSitemapBaseUrl = getBaseUrl
6
-
7
- const getNormalizedPageSlug = (slug: string | null) => {
8
- if (!slug || slug === "/") return ""
9
- return slug.replace(/^\/+|\/+$/g, "")
10
- }
11
-
12
- export const getPagePath = (slug: string | null) => {
13
- const normalizedSlug = getNormalizedPageSlug(slug)
14
- return normalizedSlug ? `/${normalizedSlug}` : "/"
15
- }
16
-
17
- export const getPageUrl = (baseUrl: string, slug: string | null) =>
18
- new URL(getPagePath(slug), baseUrl).toString()
19
-
20
- export const getMarkdownPath = (baseUrl: string, slug: string | null) => {
21
- const normalizedSlug = getNormalizedPageSlug(slug)
22
-
23
- return normalizedSlug
24
- ? `${baseUrl}/${normalizedSlug}.md`
25
- : `${baseUrl}/index.md`
26
- }
27
-
28
- export const getSitemap = async () => {
29
- const sanityModule = await import("@/lib/integrations/sanity/client")
30
- const client = sanityModule?.client
31
-
32
- if (!client) return null
33
-
34
- const p = await client.fetch<PAGE_SITEMAP_QUERY_RESULT>(PAGE_SITEMAP_QUERY)
35
-
36
- return p
37
- }
@@ -1,81 +0,0 @@
1
- import type { NextRequest } from "next/server"
2
- import { NextResponse } from "next/server"
3
- import {
4
- acceptHeaderRoutes,
5
- ignoredPaths,
6
- mdExtensionRoutes,
7
- } from "@/lib/integrations/sanity/markdown-proxy.config"
8
-
9
- export function proxy(request: NextRequest) {
10
- const { pathname } = request.nextUrl
11
- const acceptHeader = request.headers.get("accept") || ""
12
-
13
- if (ignoredPaths.some((p) => pathname.startsWith(p))) {
14
- return NextResponse.next()
15
- }
16
-
17
- if (pathname === "/" && acceptHeader.includes("text/markdown")) {
18
- const url = request.nextUrl.clone()
19
- url.pathname = "/api/index.md"
20
- return NextResponse.rewrite(url)
21
- }
22
-
23
- // 1. Rewrite .md extension URLs to API routes
24
- // e.g. /about.md → /api/about.md
25
- for (const route of mdExtensionRoutes) {
26
- const match = route.regex.exec(pathname)
27
- if (match) {
28
- const slug = match[1]
29
- const url = request.nextUrl.clone()
30
- url.pathname = route.apiPath.replace("[slug]", slug!)
31
- return NextResponse.rewrite(url)
32
- }
33
- }
34
-
35
- // 2. Accept: text/markdown — rewrite to markdown API route
36
- if (acceptHeader.includes("text/markdown")) {
37
- for (const route of acceptHeaderRoutes) {
38
- const match = route.regex.exec(pathname)
39
- if (match) {
40
- const slug = match[1]
41
- const url = request.nextUrl.clone()
42
- url.pathname = route.apiPath.replace("[slug]", slug!)
43
- return NextResponse.rewrite(url)
44
- }
45
- }
46
- }
47
-
48
- // 3. Add Link header for markdown discoverability on HTML page requests
49
- const response = NextResponse.next()
50
-
51
- if (pathname === "/") {
52
- response.headers.set(
53
- "Link",
54
- '</index.md>; rel="alternate"; type="text/markdown"'
55
- )
56
- response.headers.set("Vary", "Accept")
57
- return response
58
- }
59
-
60
- for (const route of acceptHeaderRoutes) {
61
- const match = route.regex.exec(pathname)
62
- if (match) {
63
- const slug = match[1]
64
- const mdUrl = route.publicPath.replace("[slug]", slug!)
65
- response.headers.set(
66
- "Link",
67
- `<${mdUrl}>; rel="alternate"; type="text/markdown"`
68
- )
69
- response.headers.set("Vary", "Accept")
70
- break
71
- }
72
- }
73
-
74
- return response
75
- }
76
-
77
- export const config = {
78
- matcher: [
79
- "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|sitemap.md|robots.txt).*)",
80
- ],
81
- }
@@ -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,5 +1,5 @@
1
- import { defineLive } from "next-sanity/live";
2
1
  import { NextResponse } from "next/server";
2
+ import { defineLive } from "next-sanity/live";
3
3
  import { isSanityConfigured } from "@/lib/integrations/check-integration";
4
4
  import { client } from "../client";
5
5
  import { sanityToken } from "../env";