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,27 +0,0 @@
1
- import { createClient, type SanityClient } from "next-sanity"
2
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
3
- import { apiVersion, dataset, projectId, sanityToken, studioUrl } from "./env"
4
-
5
- /**
6
- * Sanity client instance
7
- *
8
- * Returns null if Sanity is not configured (missing env vars).
9
- * Always check with isSanityConfigured() before using.
10
- */
11
- export const client: SanityClient | null = isSanityConfigured()
12
- ? createClient({
13
- projectId,
14
- dataset,
15
- apiVersion,
16
- useCdn: true,
17
- perspective: "published",
18
- token: sanityToken,
19
- stega: {
20
- studioUrl,
21
- filter: (props) => {
22
- if (props.sourcePath.at(-1) === "title") return true
23
- return props.filterDefault(props)
24
- },
25
- },
26
- })
27
- : null
@@ -1,23 +0,0 @@
1
- "use client"
2
-
3
- import Link from "next/link"
4
- import { usePathname } from "next/navigation"
5
- import { useDraftModeEnvironment } from "next-sanity/hooks"
6
-
7
- export function DisableDraftMode() {
8
- const environment = useDraftModeEnvironment()
9
- const pathname = usePathname()
10
-
11
- if (environment !== "live" && environment !== "unknown") return null
12
- if (pathname.startsWith("/studio")) return null
13
-
14
- return (
15
- <Link
16
- href="/api/draft-mode/disable"
17
- scroll={false}
18
- className="dr-p-4 fixed top-safe right-safe z-50 bg-red font-mono text-primary text-sm uppercase"
19
- >
20
- Disable Draft Mode
21
- </Link>
22
- )
23
- }
@@ -1,36 +0,0 @@
1
- import { type ArrayOfObjectsInputProps, useFormValue } from "sanity"
2
- import {
3
- getVisiblePageBuilderInsertMenuGroups,
4
- getVisiblePageBuilderReferenceMembers,
5
- type PageBuilderGroupName,
6
- } from "@/lib/integrations/sanity/page-builder-config"
7
-
8
- export function PageBuilderInput(props: ArrayOfObjectsInputProps) {
9
- const pageTypeValue = useFormValue(["type"])
10
- const pageType =
11
- typeof pageTypeValue === "string"
12
- ? (pageTypeValue as PageBuilderGroupName)
13
- : undefined
14
-
15
- const visibleMemberNames = new Set(
16
- getVisiblePageBuilderReferenceMembers(pageType).map((member) => member.name)
17
- )
18
-
19
- return props.renderDefault({
20
- ...props,
21
- schemaType: {
22
- ...props.schemaType,
23
- of: props.schemaType.of.filter(
24
- (member) =>
25
- typeof member.name === "string" && visibleMemberNames.has(member.name)
26
- ),
27
- options: {
28
- ...props.schemaType.options,
29
- insertMenu: {
30
- ...props.schemaType.options?.insertMenu,
31
- groups: getVisiblePageBuilderInsertMenuGroups(pageType),
32
- },
33
- },
34
- },
35
- })
36
- }
@@ -1,50 +0,0 @@
1
- import { Select } from "@sanity/ui"
2
- import { useEffect } from "react"
3
- import { type StringInputProps, set, setIfMissing } from "sanity"
4
-
5
- type PageCategoryOption = {
6
- title: string
7
- value: string
8
- }
9
-
10
- const isPageCategoryOption = (option: unknown): option is PageCategoryOption =>
11
- typeof option === "object" &&
12
- option !== null &&
13
- "title" in option &&
14
- "value" in option &&
15
- typeof option.title === "string" &&
16
- typeof option.value === "string"
17
-
18
- export function PageCategoryInput(props: StringInputProps) {
19
- useEffect(() => {
20
- if (props.value === undefined) {
21
- props.onChange(setIfMissing("generic"))
22
- }
23
- }, [props.onChange, props.value])
24
-
25
- const options = Array.isArray(props.schemaType.options?.list)
26
- ? props.schemaType.options.list.filter(isPageCategoryOption)
27
- : []
28
-
29
- if (options.length === 0) {
30
- return props.renderDefault({ ...props, value: props.value ?? "generic" })
31
- }
32
-
33
- return (
34
- <Select
35
- {...props.elementProps}
36
- disabled={props.readOnly}
37
- onChange={(event) => props.onChange(set(event.currentTarget.value))}
38
- value={props.value ?? "generic"}
39
- {...(props.validationError
40
- ? { customValidity: props.validationError }
41
- : {})}
42
- >
43
- {options.map((option) => (
44
- <option key={option.value} value={option.value}>
45
- {option.title}
46
- </option>
47
- ))}
48
- </Select>
49
- )
50
- }
@@ -1,84 +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 { getLinkAttributes, urlForReference } from "../utils/link"
5
-
6
- interface RichTextProps {
7
- content: PortableTextProps["value"]
8
- }
9
-
10
- type LinkMarkProps = {
11
- children: React.ReactNode
12
- value?: unknown
13
- }
14
-
15
- const LinkMark = ({ children, value }: LinkMarkProps) => {
16
- const href = urlForReference(value as Parameters<typeof urlForReference>[0])
17
- const attrs = getLinkAttributes(
18
- value as Parameters<typeof getLinkAttributes>[0]
19
- )
20
-
21
- return (
22
- <Link
23
- href={href}
24
- target={attrs.target}
25
- rel={attrs.rel}
26
- data-sanity-edit-target
27
- >
28
- {children}
29
- </Link>
30
- )
31
- }
32
-
33
- export const RichText = ({ content }: RichTextProps) => {
34
- if (!content) return null
35
-
36
- return (
37
- <PortableText
38
- value={content}
39
- components={{
40
- types: {
41
- image: ({ value }) => <SanityImage image={value} maxWidth={1920} />,
42
- table: ({ value }) => {
43
- const rows = value?.rows as
44
- | Array<{ _key?: string; cells?: string[] }>
45
- | undefined
46
- if (!rows?.length) return null
47
- return (
48
- <table>
49
- <tbody>
50
- {rows.map((row, i) => (
51
- <tr key={row._key ?? `row-${i}`}>
52
- {row.cells?.map((cell) => {
53
- const cellKey = `${row._key}-${cell}`
54
- return i === 0 ? (
55
- <th key={cellKey}>{cell}</th>
56
- ) : (
57
- <td key={cellKey}>{cell}</td>
58
- )
59
- })}
60
- </tr>
61
- ))}
62
- </tbody>
63
- </table>
64
- )
65
- },
66
- },
67
- marks: {
68
- link: LinkMark,
69
- pageReference: LinkMark,
70
- externalLink: LinkMark,
71
- },
72
- block: {
73
- h1: ({ children }) => <h1 className="h1">{children}</h1>,
74
- h2: ({ children }) => <h2 className="h2">{children}</h2>,
75
- h3: ({ children }) => <h3 className="h3">{children}</h3>,
76
- h4: ({ children }) => <h4 className="h4">{children}</h4>,
77
- h5: ({ children }) => <h5 className="h5">{children}</h5>,
78
- h6: ({ children }) => <h6 className="h6">{children}</h6>,
79
- normal: ({ children }) => <p className="p">{children}</p>,
80
- },
81
- }}
82
- />
83
- )
84
- }
@@ -1,40 +0,0 @@
1
- import { useState } from "react";
2
- import type {
3
- DocumentActionComponent,
4
- DocumentActionDialogProps,
5
- DocumentActionProps,
6
- } from "sanity";
7
-
8
- export function createConfirmPublishAction(
9
- originalPublishAction: DocumentActionComponent,
10
- ): DocumentActionComponent {
11
- const ConfirmPublishAction = (props: DocumentActionProps) => {
12
- const original = originalPublishAction(props);
13
- const [dialogOpen, setDialogOpen] = useState(false);
14
-
15
- if (!original) return null;
16
-
17
- const { dialog: _originalDialog, ...originalWithoutDialog } = original;
18
- const dialog: DocumentActionDialogProps | false = dialogOpen
19
- ? {
20
- type: "confirm",
21
- tone: "critical",
22
- message:
23
- "This will make these changes live on the production site immediately. Continue?",
24
- onCancel: () => setDialogOpen(false),
25
- onConfirm: () => {
26
- setDialogOpen(false);
27
- original.onHandle?.();
28
- },
29
- }
30
- : false;
31
-
32
- return {
33
- ...originalWithoutDialog,
34
- onHandle: () => setDialogOpen(true),
35
- dialog,
36
- };
37
- };
38
-
39
- return ConfirmPublishAction;
40
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * Sanity Environment Configuration
3
- *
4
- * All values have safe defaults to allow the app to build and run
5
- * without Sanity configured. Use isSanityConfigured() to check
6
- * if Sanity is properly set up before making API calls.
7
- */
8
-
9
- /** Sanity API version - defaults to latest stable */
10
- export const apiVersion =
11
- process.env.NEXT_PUBLIC_SANITY_API_VERSION || "2024-03-15"
12
-
13
- /** Sanity dataset name - defaults to 'production' */
14
- export const dataset = process.env.NEXT_PUBLIC_SANITY_DATASET || "production"
15
-
16
- /** Sanity project ID - empty string if not configured */
17
- export const projectId =
18
- process.env.NEXT_PUBLIC_SANITY_PROJECT_ID ||
19
- process.env.SANITY_STUDIO_PROJECT_ID ||
20
- ""
21
-
22
- /** Sanity Studio URL for visual editing */
23
- export const studioUrl =
24
- process.env.NODE_ENV === "development"
25
- ? "http://localhost:3000/studio"
26
- : `${process.env.NEXT_PUBLIC_BASE_URL || ""}/studio`
27
-
28
- export const sanityToken = process.env.SANITY_API_READ_TOKEN || ""
29
-
30
- /** Preview URL for draft mode */
31
- export const previewURL =
32
- process.env.NODE_ENV === "development"
33
- ? "http://localhost:3000"
34
- : process.env.NEXT_PUBLIC_BASE_URL || ""
@@ -1,35 +0,0 @@
1
- import { sanityFetch } from "@/lib/integrations/sanity/live"
2
- import {
3
- COMPANY_DATA_QUERY,
4
- FOOTER_QUERY,
5
- NAVBAR_QUERY,
6
- } from "@/lib/integrations/sanity/queries"
7
- import type {
8
- COMPANY_DATA_QUERY_RESULT,
9
- FOOTER_QUERY_RESULT,
10
- NAVBAR_QUERY_RESULT,
11
- } from "@/lib/integrations/sanity/sanity.types"
12
-
13
- export type NavbarData = NonNullable<NAVBAR_QUERY_RESULT>
14
- export type FooterData = NonNullable<FOOTER_QUERY_RESULT>
15
- export type CompanyData = NonNullable<COMPANY_DATA_QUERY_RESULT>
16
-
17
- export const SANITY_LAYOUT_TAGS = ["navbar", "footer", "companyData"]
18
-
19
- export const getNavbar = async (): Promise<NavbarData | null> => {
20
- const { data } = await sanityFetch({ query: NAVBAR_QUERY, tags: ["navbar"] })
21
- return data
22
- }
23
-
24
- export const getFooter = async (): Promise<FooterData | null> => {
25
- const { data } = await sanityFetch({ query: FOOTER_QUERY, tags: ["footer"] })
26
- return data
27
- }
28
-
29
- export const getCompanyData = async (): Promise<CompanyData | null> => {
30
- const { data } = await sanityFetch({
31
- query: COMPANY_DATA_QUERY,
32
- tags: ["companyData"],
33
- })
34
- return data
35
- }
@@ -1,58 +0,0 @@
1
- import type { Icon, IconProps } from "@phosphor-icons/react"
2
- import {
3
- ArticleNyTimesIcon,
4
- BrowsersIcon,
5
- BuildingsIcon,
6
- FileTextIcon,
7
- FolderOpenIcon,
8
- FootprintsIcon,
9
- LayoutIcon,
10
- ListBulletsIcon,
11
- ListIcon,
12
- PackageIcon,
13
- RocketIcon,
14
- ShapesIcon,
15
- ShareNetworkIcon,
16
- TagIcon,
17
- TextAlignLeftIcon,
18
- UserCircleIcon,
19
- } from "@phosphor-icons/react/dist/ssr"
20
- import { createElement, forwardRef } from "react"
21
-
22
- export type SanityStudioIcon = Icon
23
-
24
- const asDuotoneIcon = (IconComponent: Icon): SanityStudioIcon => {
25
- const DuotoneIcon = forwardRef<SVGSVGElement, IconProps>((props, ref) =>
26
- createElement(IconComponent, { ...props, ref, weight: "duotone" })
27
- )
28
-
29
- DuotoneIcon.displayName = `${IconComponent.displayName ?? "Phosphor"}Duotone`
30
-
31
- return DuotoneIcon
32
- }
33
-
34
- export const pageBuilderCardIcon = asDuotoneIcon(PackageIcon)
35
- export const pageBuilderCardListIcon = asDuotoneIcon(ListIcon)
36
-
37
- export const authorIcon = asDuotoneIcon(UserCircleIcon)
38
-
39
- export const pageListIcon = asDuotoneIcon(ListBulletsIcon)
40
-
41
- export const blogCategoryIcon = asDuotoneIcon(TagIcon)
42
-
43
- export const componentsFolderIcon = asDuotoneIcon(ShapesIcon)
44
-
45
- export const companyDataIcon = asDuotoneIcon(BuildingsIcon)
46
- export const socialLinksIcon = asDuotoneIcon(ShareNetworkIcon)
47
- export const navbarIcon = asDuotoneIcon(ListIcon)
48
- export const footerIcon = asDuotoneIcon(FootprintsIcon)
49
- export const layoutFolderIcon = asDuotoneIcon(LayoutIcon)
50
-
51
- export const heroIcon = asDuotoneIcon(RocketIcon)
52
- export const descriptionIcon = asDuotoneIcon(TextAlignLeftIcon)
53
- export const contentIcon = asDuotoneIcon(ArticleNyTimesIcon)
54
-
55
- export const pageIcon = asDuotoneIcon(FileTextIcon)
56
- export const pagesFolderIcon = asDuotoneIcon(BrowsersIcon)
57
- export const pageFolderIcon = asDuotoneIcon(FolderOpenIcon)
58
- export const contentFolderIcon = asDuotoneIcon(FolderOpenIcon)
@@ -1,61 +0,0 @@
1
- import { NextResponse } from "next/server"
2
- import { defineLive } from "next-sanity/live"
3
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
4
- import { client } from "../client"
5
- import { sanityToken } from "../env"
6
-
7
- const isConfigured = isSanityConfigured() && client
8
-
9
- const liveExports =
10
- isConfigured && client
11
- ? defineLive({
12
- client,
13
- browserToken: sanityToken,
14
- serverToken: sanityToken,
15
- })
16
- : null
17
-
18
- export const sanityFetch =
19
- liveExports?.sanityFetch ?? (async () => ({ data: null }))
20
-
21
- export const SanityLive = liveExports?.SanityLive ?? (() => null)
22
-
23
- export const SanityFetch = async <T,>(
24
- slug: string,
25
- query: string,
26
- label = "Content"
27
- ): Promise<T | NextResponse> => {
28
- if (!client) {
29
- return new NextResponse(`# 503 Unavailable\n\nCMS client unavailable.`, {
30
- status: 503,
31
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
32
- })
33
- }
34
-
35
- try {
36
- const { data } = await sanityFetch({
37
- query,
38
- params: { slug },
39
- })
40
-
41
- const result = data as T | null
42
-
43
- if (!result) {
44
- return new NextResponse(`# 404 Not Found\n\nPage not found.`, {
45
- status: 404,
46
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
47
- })
48
- }
49
-
50
- return result
51
- } catch (error) {
52
- console.error(`Error fetching ${label.toLowerCase()}:`, error)
53
- return new NextResponse(
54
- `# 500 Error\n\nFailed to fetch ${label.toLowerCase()}.`,
55
- {
56
- status: 500,
57
- headers: { "Content-Type": "text/markdown; charset=utf-8" },
58
- }
59
- )
60
- }
61
- }
@@ -1,50 +0,0 @@
1
- export interface MarkdownRoute {
2
- /** Regex to match the public-facing URL */
3
- regex: RegExp
4
- /** API route path template (under /api/) */
5
- apiPath: string
6
- /** Public markdown URL template (for Link headers) */
7
- publicPath: string
8
- }
9
-
10
- /**
11
- * Routes that serve markdown versions for AI agents.
12
- * All pages are backed by the shared `page` document type and resolved
13
- * through the catch-all route handlers.
14
- *
15
- * How it works:
16
- * - `regex`: match the public-facing URL (e.g. /about.md or /about)
17
- * - `apiPath`: the internal API route that serves the markdown (e.g. /api/about.md)
18
- * - Proxy rewrites .md URLs and Accept: text/markdown requests to the API route
19
- * - Route handlers live under /api/ so page.tsx can coexist at the public path
20
- */
21
-
22
- /** .md extension routes -- rewrite to API endpoints */
23
- export const mdExtensionRoutes: MarkdownRoute[] = [
24
- {
25
- regex: /^\/(.+)\.md$/,
26
- apiPath: "/api/[slug].md",
27
- publicPath: "/[slug].md",
28
- },
29
- ]
30
-
31
- /** Accept: text/markdown routes -- content negotiation for HTML pages */
32
- export const acceptHeaderRoutes: MarkdownRoute[] = [
33
- {
34
- regex: /^\/(.+)$/,
35
- apiPath: "/api/[slug].md",
36
- publicPath: "/[slug].md",
37
- },
38
- ]
39
-
40
- /**
41
- * Paths the proxy should never process.
42
- * Studio, static files, Next.js internals.
43
- */
44
- export const ignoredPaths = [
45
- "/studio",
46
- "/api/",
47
- "/_next/",
48
- "/favicon.ico",
49
- "/sitemap.md",
50
- ]
@@ -1,132 +0,0 @@
1
- import { contentIcon, pageIcon, type SanityStudioIcon } from "./icons"
2
- import { singletonComponents } from "./singletons"
3
-
4
- export type PageBuilderDocumentType =
5
- | "hero"
6
- | "description"
7
- | "blogContent"
8
- | (typeof singletonComponents)[number]["schemaType"]
9
-
10
- type PageBuilderReferenceMember = {
11
- documentType: PageBuilderDocumentType
12
- name: string
13
- title: string
14
- documentId?: string
15
- groups: PageBuilderGroupName[]
16
- }
17
-
18
- export type PageBuilderGroupName =
19
- | "generic"
20
- | "blogEntry"
21
-
22
- export const pageBuilderPageTypes: Array<{
23
- title: string
24
- value: PageBuilderGroupName
25
- }> = [
26
- { title: "Generic", value: "generic" },
27
- { title: "Blog Entry", value: "blogEntry" },
28
- ]
29
-
30
- const pageCategoryIcons: Record<PageBuilderGroupName, SanityStudioIcon> = {
31
- generic: pageIcon,
32
- blogEntry: contentIcon,
33
- }
34
-
35
- export const getPageCategoryIcon = (
36
- pageType: PageBuilderGroupName | undefined | null
37
- ) => pageCategoryIcons[pageType ?? "generic"]
38
-
39
- const reusablePageBuilderReferenceMembers: PageBuilderReferenceMember[] = [
40
- {
41
- documentType: "hero",
42
- name: "heroReference",
43
- title: "Heading",
44
- groups: ["generic"],
45
- },
46
- {
47
- documentType: "description",
48
- name: "descriptionReference",
49
- title: "Description",
50
- groups: ["generic"],
51
- },
52
- {
53
- documentType: "blogContent",
54
- name: "blogContentReference",
55
- title: "Blog Content",
56
- groups: ["blogEntry"],
57
- },
58
- ]
59
-
60
- const singletonPageBuilderReferenceMembers: PageBuilderReferenceMember[] =
61
- singletonComponents.map((component) => ({
62
- documentType: component.schemaType,
63
- name: `${component.schemaType}Reference`,
64
- title: component.title,
65
- documentId: component.documentId,
66
- groups: ["generic"],
67
- }))
68
-
69
- export const pageBuilderReferenceMembers: PageBuilderReferenceMember[] = [
70
- ...reusablePageBuilderReferenceMembers,
71
- ...singletonPageBuilderReferenceMembers,
72
- ]
73
-
74
- export const getPageBuilderReferenceMember = (name: string) =>
75
- pageBuilderReferenceMembers.find((member) => member.name === name)
76
-
77
- export const getPageBuilderReferenceMemberByDocumentType = (
78
- documentType: PageBuilderDocumentType
79
- ) =>
80
- pageBuilderReferenceMembers.find(
81
- (member) => member.documentType === documentType
82
- )
83
-
84
- const isPageBuilderGroupVisible = (
85
- pageType: PageBuilderGroupName | undefined,
86
- group: PageBuilderGroupName
87
- ) => (pageType ?? "generic") === group
88
-
89
- export const getVisiblePageBuilderReferenceMembers = (
90
- pageType: PageBuilderGroupName | undefined
91
- ) =>
92
- pageBuilderReferenceMembers.filter((member) =>
93
- member.groups.some((group) => isPageBuilderGroupVisible(pageType, group))
94
- )
95
-
96
- export const getVisiblePageBuilderInsertMenuGroups = (
97
- pageType: PageBuilderGroupName | undefined
98
- ) =>
99
- pageBuilderInsertMenuGroups.filter(
100
- (group) => group.name === (pageType ?? "generic")
101
- )
102
-
103
- export const getInvalidPageBuilderDocumentTypes = (
104
- pageType: PageBuilderGroupName | undefined,
105
- documentTypes: PageBuilderDocumentType[]
106
- ) =>
107
- documentTypes.filter((documentType) => {
108
- const member = getPageBuilderReferenceMemberByDocumentType(documentType)
109
-
110
- if (!member) return false
111
-
112
- return !member.groups.some((group) =>
113
- isPageBuilderGroupVisible(pageType, group)
114
- )
115
- })
116
-
117
- export const pageBuilderInsertMenuGroups = [
118
- {
119
- name: "generic",
120
- title: "Generic",
121
- of: pageBuilderReferenceMembers
122
- .filter((member) => member.groups.includes("generic"))
123
- .map((member) => member.name),
124
- },
125
- {
126
- name: "blogEntry",
127
- title: "Blog Entry",
128
- of: pageBuilderReferenceMembers
129
- .filter((member) => member.groups.includes("blogEntry"))
130
- .map((member) => member.name),
131
- },
132
- ]
@@ -1,28 +0,0 @@
1
- import type { PageBuilderGroupName } from "@/lib/integrations/sanity/page-builder-config"
2
-
3
- type PageCategoryParams = {
4
- slug?: string | null
5
- folder?: string | null
6
- }
7
-
8
- export const isEmptyPageSlug = (slug?: string | null) =>
9
- slug == null || slug === "" || slug === "/"
10
-
11
- export const getGeneratedPageCategory = ({
12
- slug,
13
- folder,
14
- }: PageCategoryParams): PageBuilderGroupName => {
15
- if (!isEmptyPageSlug(slug) && folder === "blog") return "blogEntry"
16
-
17
- return "generic"
18
- }
19
-
20
- export const pageCategoryExpression = `
21
- select(
22
- defined(slug.current) &&
23
- slug.current != "" &&
24
- slug.current != "/" &&
25
- pageFolder->slug.current == "blog" => "blogEntry",
26
- "generic"
27
- )
28
- `