bsmnt 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/dist/{helpers/add → application/add-hooks}/index.d.ts +4 -4
  2. package/dist/application/add-hooks/index.d.ts.map +1 -0
  3. package/dist/{helpers/add → application/add-hooks}/index.js +22 -35
  4. package/dist/application/add-hooks/index.js.map +1 -0
  5. package/dist/{utils → application/add-integration}/format-results.d.ts +1 -6
  6. package/dist/application/add-integration/format-results.d.ts.map +1 -0
  7. package/dist/{utils → application/add-integration}/format-results.js +1 -6
  8. package/dist/application/add-integration/format-results.js.map +1 -0
  9. package/dist/{helpers/integrate → application/add-integration}/index.d.ts +2 -1
  10. package/dist/application/add-integration/index.d.ts.map +1 -0
  11. package/dist/{helpers/integrate → application/add-integration}/index.js +46 -41
  12. package/dist/application/add-integration/index.js.map +1 -0
  13. package/dist/application/create-project/build-context.d.ts +9 -0
  14. package/dist/application/create-project/build-context.d.ts.map +1 -0
  15. package/dist/application/create-project/build-context.js +13 -0
  16. package/dist/application/create-project/build-context.js.map +1 -0
  17. package/dist/application/create-project/index.d.ts +44 -0
  18. package/dist/application/create-project/index.d.ts.map +1 -0
  19. package/dist/application/create-project/index.js +70 -0
  20. package/dist/application/create-project/index.js.map +1 -0
  21. package/dist/application/create-project/map-selection-to-registry.d.ts +3 -0
  22. package/dist/application/create-project/map-selection-to-registry.d.ts.map +1 -0
  23. package/dist/application/create-project/map-selection-to-registry.js +30 -0
  24. package/dist/application/create-project/map-selection-to-registry.js.map +1 -0
  25. package/dist/application/create-project/resolve-selection.d.ts +15 -0
  26. package/dist/application/create-project/resolve-selection.d.ts.map +1 -0
  27. package/dist/application/create-project/resolve-selection.js +11 -0
  28. package/dist/application/create-project/resolve-selection.js.map +1 -0
  29. package/dist/{helpers/skills → application/install-skills}/index.d.ts +1 -1
  30. package/dist/application/install-skills/index.d.ts.map +1 -0
  31. package/dist/{helpers/skills → application/install-skills}/index.js +31 -44
  32. package/dist/application/install-skills/index.js.map +1 -0
  33. package/dist/{utils/detect-project.d.ts → application/shared/project-detection.d.ts} +8 -15
  34. package/dist/application/shared/project-detection.d.ts.map +1 -0
  35. package/dist/{utils/detect-project.js → application/shared/project-detection.js} +8 -24
  36. package/dist/application/shared/project-detection.js.map +1 -0
  37. package/dist/core/create/build-plan.d.ts +8 -0
  38. package/dist/core/create/build-plan.d.ts.map +1 -0
  39. package/dist/core/create/build-plan.js +89 -0
  40. package/dist/core/create/build-plan.js.map +1 -0
  41. package/dist/core/create/execute-plan.d.ts +23 -0
  42. package/dist/core/create/execute-plan.d.ts.map +1 -0
  43. package/dist/core/create/execute-plan.js +23 -0
  44. package/dist/core/create/execute-plan.js.map +1 -0
  45. package/dist/core/create/internal-ids.d.ts +23 -0
  46. package/dist/core/create/internal-ids.d.ts.map +1 -0
  47. package/dist/core/create/internal-ids.js +36 -0
  48. package/dist/core/create/internal-ids.js.map +1 -0
  49. package/dist/core/create/registry.d.ts +12 -0
  50. package/dist/core/create/registry.d.ts.map +1 -0
  51. package/dist/core/create/registry.js +33 -0
  52. package/dist/core/create/registry.js.map +1 -0
  53. package/dist/core/create/types.d.ts +96 -0
  54. package/dist/core/create/types.d.ts.map +1 -0
  55. package/dist/core/create/types.js +2 -0
  56. package/dist/core/create/types.js.map +1 -0
  57. package/dist/domain/agents.d.ts +61 -0
  58. package/dist/domain/agents.d.ts.map +1 -0
  59. package/dist/domain/agents.js +35 -0
  60. package/dist/domain/agents.js.map +1 -0
  61. package/dist/domain/animations.d.ts +20 -0
  62. package/dist/domain/animations.d.ts.map +1 -0
  63. package/dist/domain/animations.js +13 -0
  64. package/dist/domain/animations.js.map +1 -0
  65. package/dist/domain/cms.d.ts +24 -0
  66. package/dist/domain/cms.d.ts.map +1 -0
  67. package/dist/domain/cms.js +13 -0
  68. package/dist/domain/cms.js.map +1 -0
  69. package/dist/domain/hooks.d.ts +67 -0
  70. package/dist/domain/hooks.d.ts.map +1 -0
  71. package/dist/domain/hooks.js +52 -0
  72. package/dist/domain/hooks.js.map +1 -0
  73. package/dist/domain/skills.d.ts +70 -0
  74. package/dist/domain/skills.d.ts.map +1 -0
  75. package/dist/domain/skills.js +84 -0
  76. package/dist/domain/skills.js.map +1 -0
  77. package/dist/domain/templates.d.ts +51 -0
  78. package/dist/domain/templates.d.ts.map +1 -0
  79. package/dist/domain/templates.js +27 -0
  80. package/dist/domain/templates.js.map +1 -0
  81. package/dist/index.js +124 -115
  82. package/dist/index.js.map +1 -1
  83. package/dist/infrastructure/agents/register-sanity-mcp.d.ts +12 -0
  84. package/dist/infrastructure/agents/register-sanity-mcp.d.ts.map +1 -0
  85. package/dist/infrastructure/agents/register-sanity-mcp.js +153 -0
  86. package/dist/infrastructure/agents/register-sanity-mcp.js.map +1 -0
  87. package/dist/infrastructure/create/apply-copy-paths.d.ts +3 -0
  88. package/dist/infrastructure/create/apply-copy-paths.d.ts.map +1 -0
  89. package/dist/infrastructure/create/apply-copy-paths.js +12 -0
  90. package/dist/infrastructure/create/apply-copy-paths.js.map +1 -0
  91. package/dist/infrastructure/create/apply-merge-paths.d.ts +3 -0
  92. package/dist/infrastructure/create/apply-merge-paths.d.ts.map +1 -0
  93. package/dist/infrastructure/create/apply-merge-paths.js +17 -0
  94. package/dist/infrastructure/create/apply-merge-paths.js.map +1 -0
  95. package/dist/infrastructure/create/apply-package-json.d.ts +8 -0
  96. package/dist/infrastructure/create/apply-package-json.d.ts.map +1 -0
  97. package/dist/infrastructure/create/apply-package-json.js +46 -0
  98. package/dist/infrastructure/create/apply-package-json.js.map +1 -0
  99. package/dist/infrastructure/create/copy-template.d.ts +10 -0
  100. package/dist/infrastructure/create/copy-template.d.ts.map +1 -0
  101. package/dist/infrastructure/create/copy-template.js.map +1 -0
  102. package/dist/infrastructure/create/executor.d.ts +3 -0
  103. package/dist/infrastructure/create/executor.d.ts.map +1 -0
  104. package/dist/infrastructure/create/executor.js +21 -0
  105. package/dist/infrastructure/create/executor.js.map +1 -0
  106. package/dist/{helpers/create/init-git.d.ts → infrastructure/create/init-git-repo.d.ts} +2 -3
  107. package/dist/infrastructure/create/init-git-repo.d.ts.map +1 -0
  108. package/dist/{helpers/create/init-git.js → infrastructure/create/init-git-repo.js} +1 -4
  109. package/dist/infrastructure/create/init-git-repo.js.map +1 -0
  110. package/dist/{helpers/create/install.d.ts → infrastructure/create/install-dependencies.d.ts} +1 -1
  111. package/dist/infrastructure/create/install-dependencies.d.ts.map +1 -0
  112. package/dist/{helpers/create/install.js → infrastructure/create/install-dependencies.js} +1 -1
  113. package/dist/infrastructure/create/install-dependencies.js.map +1 -0
  114. package/dist/infrastructure/create/lifecycle-registry.d.ts +3 -0
  115. package/dist/infrastructure/create/lifecycle-registry.d.ts.map +1 -0
  116. package/dist/infrastructure/create/lifecycle-registry.js +38 -0
  117. package/dist/infrastructure/create/lifecycle-registry.js.map +1 -0
  118. package/dist/infrastructure/create/merge-registry.d.ts +3 -0
  119. package/dist/infrastructure/create/merge-registry.d.ts.map +1 -0
  120. package/dist/infrastructure/create/merge-registry.js +27 -0
  121. package/dist/infrastructure/create/merge-registry.js.map +1 -0
  122. package/dist/infrastructure/create/rename-files.d.ts.map +1 -0
  123. package/dist/infrastructure/create/rename-files.js.map +1 -0
  124. package/dist/{helpers → infrastructure}/create/setup-agent.d.ts +9 -7
  125. package/dist/infrastructure/create/setup-agent.d.ts.map +1 -0
  126. package/dist/infrastructure/create/setup-agent.js +77 -0
  127. package/dist/infrastructure/create/setup-agent.js.map +1 -0
  128. package/dist/infrastructure/create/setup-sanity.d.ts.map +1 -0
  129. package/dist/{helpers → infrastructure}/create/setup-sanity.js +1 -19
  130. package/dist/infrastructure/create/setup-sanity.js.map +1 -0
  131. package/dist/infrastructure/integrations/inject-integration.d.ts +9 -0
  132. package/dist/infrastructure/integrations/inject-integration.d.ts.map +1 -0
  133. package/dist/{helpers/integrate/merge-orchestrator.js → infrastructure/integrations/inject-integration.js} +26 -38
  134. package/dist/infrastructure/integrations/inject-integration.js.map +1 -0
  135. package/dist/modules/features/agents/index.d.ts +3 -0
  136. package/dist/modules/features/agents/index.d.ts.map +1 -0
  137. package/dist/modules/features/agents/index.js +4 -0
  138. package/dist/modules/features/agents/index.js.map +1 -0
  139. package/dist/modules/features/agents/shared.d.ts +4 -0
  140. package/dist/modules/features/agents/shared.d.ts.map +1 -0
  141. package/dist/modules/features/agents/shared.js +21 -0
  142. package/dist/modules/features/agents/shared.js.map +1 -0
  143. package/dist/{configs/animations.d.ts → modules/features/animation/config.d.ts} +1 -1
  144. package/dist/modules/features/animation/config.d.ts.map +1 -0
  145. package/dist/{configs/animations.js → modules/features/animation/config.js} +1 -1
  146. package/dist/modules/features/animation/config.js.map +1 -0
  147. package/dist/modules/features/animation/gsap.d.ts +3 -0
  148. package/dist/modules/features/animation/gsap.d.ts.map +1 -0
  149. package/dist/modules/features/animation/gsap.js +16 -0
  150. package/dist/modules/features/animation/gsap.js.map +1 -0
  151. package/dist/modules/features/animation/index.d.ts +3 -0
  152. package/dist/modules/features/animation/index.d.ts.map +1 -0
  153. package/dist/modules/features/animation/index.js +4 -0
  154. package/dist/modules/features/animation/index.js.map +1 -0
  155. package/dist/modules/features/animation/motion.d.ts +3 -0
  156. package/dist/modules/features/animation/motion.d.ts.map +1 -0
  157. package/dist/modules/features/animation/motion.js +16 -0
  158. package/dist/modules/features/animation/motion.js.map +1 -0
  159. package/dist/modules/features/cms/index.d.ts +3 -0
  160. package/dist/modules/features/cms/index.d.ts.map +1 -0
  161. package/dist/modules/features/cms/index.js +7 -0
  162. package/dist/modules/features/cms/index.js.map +1 -0
  163. package/dist/modules/features/cms/sanity/config.d.ts.map +1 -0
  164. package/dist/{helpers/integrate → modules/features/cms}/sanity/config.js +3 -2
  165. package/dist/modules/features/cms/sanity/config.js.map +1 -0
  166. package/dist/modules/features/cms/sanity/index.d.ts +3 -0
  167. package/dist/modules/features/cms/sanity/index.d.ts.map +1 -0
  168. package/dist/modules/features/cms/sanity/index.js +61 -0
  169. package/dist/modules/features/cms/sanity/index.js.map +1 -0
  170. package/dist/{helpers/integrate/sanity/mergers/check-integration-merger.d.ts → modules/features/cms/sanity/mergers/check-integration.d.ts} +1 -1
  171. package/dist/modules/features/cms/sanity/mergers/check-integration.d.ts.map +1 -0
  172. package/dist/{helpers/integrate/sanity/mergers/check-integration-merger.js → modules/features/cms/sanity/mergers/check-integration.js} +1 -1
  173. package/dist/modules/features/cms/sanity/mergers/check-integration.js.map +1 -0
  174. package/dist/{helpers/integrate/sanity/mergers/layout-merger.d.ts → modules/features/cms/sanity/mergers/layout.d.ts} +1 -1
  175. package/dist/modules/features/cms/sanity/mergers/layout.d.ts.map +1 -0
  176. package/dist/{helpers/integrate/sanity/mergers/layout-merger.js → modules/features/cms/sanity/mergers/layout.js} +1 -1
  177. package/dist/modules/features/cms/sanity/mergers/layout.js.map +1 -0
  178. package/dist/modules/features/cms/sanity/mergers/sitemap.d.ts +13 -0
  179. package/dist/modules/features/cms/sanity/mergers/sitemap.d.ts.map +1 -0
  180. package/dist/modules/features/cms/sanity/mergers/sitemap.js +92 -0
  181. package/dist/modules/features/cms/sanity/mergers/sitemap.js.map +1 -0
  182. package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts +14 -0
  183. package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts.map +1 -0
  184. package/dist/modules/features/cms/sanity-pagebuilder/config.js +44 -0
  185. package/dist/modules/features/cms/sanity-pagebuilder/config.js.map +1 -0
  186. package/dist/modules/features/cms/sanity-pagebuilder/index.d.ts +3 -0
  187. package/dist/modules/features/cms/sanity-pagebuilder/index.d.ts.map +1 -0
  188. package/dist/modules/features/cms/sanity-pagebuilder/index.js +46 -0
  189. package/dist/modules/features/cms/sanity-pagebuilder/index.js.map +1 -0
  190. package/dist/modules/features/hooks/factory.d.ts +4 -0
  191. package/dist/modules/features/hooks/factory.d.ts.map +1 -0
  192. package/dist/modules/features/hooks/factory.js +26 -0
  193. package/dist/modules/features/hooks/factory.js.map +1 -0
  194. package/dist/modules/features/hooks/index.d.ts +3 -0
  195. package/dist/modules/features/hooks/index.d.ts.map +1 -0
  196. package/dist/modules/features/hooks/index.js +4 -0
  197. package/dist/modules/features/hooks/index.js.map +1 -0
  198. package/dist/modules/presets/index.d.ts +3 -0
  199. package/dist/modules/presets/index.d.ts.map +1 -0
  200. package/dist/modules/presets/index.js +11 -0
  201. package/dist/modules/presets/index.js.map +1 -0
  202. package/dist/modules/presets/next-default.d.ts +3 -0
  203. package/dist/modules/presets/next-default.d.ts.map +1 -0
  204. package/dist/modules/presets/next-default.js +9 -0
  205. package/dist/modules/presets/next-default.js.map +1 -0
  206. package/dist/modules/presets/next-experiments.d.ts +3 -0
  207. package/dist/modules/presets/next-experiments.d.ts.map +1 -0
  208. package/dist/modules/presets/next-experiments.js +9 -0
  209. package/dist/modules/presets/next-experiments.js.map +1 -0
  210. package/dist/modules/presets/next-pagebuilder.d.ts +3 -0
  211. package/dist/modules/presets/next-pagebuilder.d.ts.map +1 -0
  212. package/dist/modules/presets/next-pagebuilder.js +10 -0
  213. package/dist/modules/presets/next-pagebuilder.js.map +1 -0
  214. package/dist/modules/presets/next-webgl.d.ts +3 -0
  215. package/dist/modules/presets/next-webgl.d.ts.map +1 -0
  216. package/dist/modules/presets/next-webgl.js +9 -0
  217. package/dist/modules/presets/next-webgl.js.map +1 -0
  218. package/dist/paths.d.ts +7 -1
  219. package/dist/paths.d.ts.map +1 -1
  220. package/dist/paths.js +8 -2
  221. package/dist/paths.js.map +1 -1
  222. package/index.js +2 -2
  223. package/package.json +11 -4
  224. package/src/modules/features/cms/sanity/files/.knip.json +8 -0
  225. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/blog/[slug]/route.ts +3 -4
  226. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/revalidate/route.ts +1 -4
  227. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/blog/[slug]/page.tsx +8 -9
  228. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/layout.tsx +2 -2
  229. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/sitemap.md/route.ts +18 -29
  230. package/src/modules/features/cms/sanity/files/app/sitemap.xml/route.ts +51 -0
  231. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/env.ts +2 -4
  232. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/queries.ts +0 -42
  233. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/index.ts +1 -1
  234. package/src/modules/features/cms/sanity/files/lib/scripts/copy-sanity-mcp.ts +23 -0
  235. package/src/modules/features/cms/sanity/files/lib/scripts/generate-page.ts +297 -0
  236. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/json-ld.tsx +1 -6
  237. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/metadata.ts +2 -2
  238. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/url.ts +4 -2
  239. package/src/{helpers/integrate → modules/features/cms}/sanity/files/proxy.ts +11 -11
  240. package/src/template-hooks/use-device-perf.ts +27 -17
  241. package/src/templates/next-default/.env.example +3 -3
  242. package/src/templates/next-default/.vscode/extensions.json +1 -5
  243. package/src/templates/next-default/.vscode/settings.json +1 -1
  244. package/src/templates/next-default/.zed/settings.json +47 -0
  245. package/src/templates/next-default/README.md +7 -6
  246. package/src/templates/next-default/_gitignore +1 -3
  247. package/src/templates/next-default/app/layout.tsx +21 -35
  248. package/src/templates/next-default/app/robots.ts +3 -4
  249. package/src/templates/next-default/app/sitemap.xml/route.ts +29 -29
  250. package/src/templates/next-default/biome.json +9 -2
  251. package/src/templates/next-default/components/ui/image/index.tsx +2 -1
  252. package/src/templates/next-default/components/ui/link/index.tsx +35 -35
  253. package/src/templates/next-default/lefthook.yml +25 -0
  254. package/src/templates/next-default/lib/README.md +8 -4
  255. package/src/templates/next-default/lib/hooks/use-media.ts +6 -3
  256. package/src/templates/next-default/lib/scripts/dev.ts +32 -0
  257. package/src/templates/next-default/lib/styles/README.md +13 -0
  258. package/src/templates/next-default/lib/styles/fonts.ts +20 -0
  259. package/src/templates/next-default/lib/styles/global.css +15 -196
  260. package/src/templates/next-default/lib/styles/index.css +3 -0
  261. package/src/templates/next-default/lib/styles/tokens.css +182 -0
  262. package/src/templates/next-default/lib/utils/README.md +40 -0
  263. package/src/templates/next-default/lib/utils/easings.ts +240 -0
  264. package/src/templates/next-default/lib/utils/fetch.ts +84 -0
  265. package/src/templates/next-default/lib/utils/global-css.d.ts +1 -0
  266. package/src/templates/next-default/lib/utils/json-ld.tsx +70 -68
  267. package/src/templates/next-default/lib/utils/math.ts +236 -0
  268. package/src/templates/next-default/lib/utils/metadata.ts +26 -27
  269. package/src/templates/next-default/lib/utils/strings.ts +246 -0
  270. package/src/templates/next-default/lib/utils/types.d.ts +15 -0
  271. package/src/templates/next-default/lib/utils/url.ts +8 -5
  272. package/src/templates/next-default/lib/utils/viewport.ts +199 -0
  273. package/src/templates/next-default/package.json +12 -7
  274. package/src/templates/next-default/svg.d.ts +1 -0
  275. package/src/templates/next-experiments/.env.example +3 -3
  276. package/src/templates/next-experiments/.knip.json +3 -0
  277. package/src/templates/next-experiments/.vscode/extensions.json +1 -5
  278. package/src/templates/next-experiments/.vscode/settings.json +1 -1
  279. package/src/templates/next-experiments/.zed/settings.json +47 -0
  280. package/src/templates/next-experiments/README.md +7 -6
  281. package/src/templates/next-experiments/_gitignore +1 -3
  282. package/src/templates/next-experiments/app/layout.tsx +21 -35
  283. package/src/templates/next-experiments/app/robots.ts +5 -2
  284. package/src/templates/next-experiments/app/sitemap.xml/route.ts +51 -0
  285. package/src/templates/next-experiments/biome.json +4 -2
  286. package/src/templates/next-experiments/components/layout/navigation-menu.tsx +1 -1
  287. package/src/templates/next-experiments/components/layout/wrapper/index.tsx +6 -6
  288. package/src/templates/next-experiments/components/ui/image/index.tsx +33 -33
  289. package/src/templates/next-experiments/lib/README.md +8 -4
  290. package/src/templates/next-experiments/lib/hooks/use-media.ts +6 -3
  291. package/src/templates/next-experiments/lib/scripts/dev.ts +32 -0
  292. package/src/templates/next-experiments/lib/styles/README.md +13 -0
  293. package/src/templates/next-experiments/lib/styles/fonts.ts +20 -0
  294. package/src/templates/next-experiments/lib/styles/global.css +16 -196
  295. package/src/templates/next-experiments/lib/styles/index.css +3 -0
  296. package/src/templates/next-experiments/lib/styles/tokens.css +182 -0
  297. package/src/templates/next-experiments/lib/utils/README.md +40 -0
  298. package/src/templates/next-experiments/lib/utils/easings.ts +240 -0
  299. package/src/templates/next-experiments/lib/utils/fetch.ts +84 -0
  300. package/src/templates/next-experiments/lib/utils/global-css.d.ts +1 -0
  301. package/src/templates/next-experiments/lib/utils/json-ld.tsx +70 -68
  302. package/src/templates/next-experiments/lib/utils/math.ts +236 -0
  303. package/src/templates/next-experiments/lib/utils/metadata.ts +26 -27
  304. package/src/templates/next-experiments/lib/utils/strings.ts +246 -0
  305. package/src/templates/next-experiments/lib/utils/types.d.ts +15 -0
  306. package/src/templates/next-experiments/lib/utils/url.ts +8 -5
  307. package/src/templates/next-experiments/lib/utils/viewport.ts +199 -0
  308. package/src/templates/next-experiments/package.json +6 -6
  309. package/src/templates/next-experiments/svg.d.ts +1 -0
  310. package/src/templates/next-pagebuilder/.vscode/extensions.json +16 -0
  311. package/src/templates/next-pagebuilder/.vscode/settings.json +105 -0
  312. package/src/templates/next-pagebuilder/.zed/settings.json +47 -0
  313. package/src/templates/next-pagebuilder/_gitignore +1 -3
  314. package/src/templates/next-pagebuilder/app/(content)/[[...slug]]/page.tsx +1 -1
  315. package/src/templates/next-pagebuilder/app/(content)/layout.tsx +0 -1
  316. package/src/templates/next-pagebuilder/app/robots.ts +3 -4
  317. package/src/templates/next-pagebuilder/biome.json +17 -0
  318. package/src/templates/next-pagebuilder/components/layout/footer/index.tsx +4 -5
  319. package/src/templates/next-pagebuilder/components/layout/header/index.tsx +1 -1
  320. package/src/templates/next-pagebuilder/components/page-builder/components/article-content/index.tsx +4 -9
  321. package/src/templates/next-pagebuilder/components/page-builder/components/article-content/related-post-item.tsx +4 -4
  322. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/content-card.tsx +3 -1
  323. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/index.tsx +12 -5
  324. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/types.ts +3 -1
  325. package/src/templates/next-pagebuilder/components/page-builder/renderer.tsx +6 -2
  326. package/src/templates/next-pagebuilder/components/page-builder/types.ts +9 -7
  327. package/src/templates/next-pagebuilder/components/page-document/index.tsx +12 -2
  328. package/src/templates/next-pagebuilder/lefthook.yml +25 -0
  329. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.types.ts +208 -0
  330. package/src/templates/next-pagebuilder/lib/styles/global.css +0 -1
  331. package/src/templates/next-pagebuilder/next.config.ts +0 -2
  332. package/src/templates/next-pagebuilder/package.json +13 -25
  333. package/src/templates/next-pagebuilder/postcss.config.mjs +27 -1
  334. package/src/templates/next-pagebuilder/svg.d.ts +1 -0
  335. package/src/templates/next-webgl/.env.example +3 -3
  336. package/src/templates/next-webgl/.vscode/extensions.json +1 -5
  337. package/src/templates/next-webgl/.vscode/settings.json +1 -1
  338. package/src/templates/next-webgl/.zed/settings.json +47 -0
  339. package/src/templates/next-webgl/README.md +7 -6
  340. package/src/templates/next-webgl/_gitignore +1 -3
  341. package/src/templates/next-webgl/app/layout.tsx +21 -35
  342. package/src/templates/next-webgl/app/robots.ts +3 -4
  343. package/src/templates/next-webgl/app/sitemap.xml/route.ts +29 -29
  344. package/src/templates/next-webgl/biome.json +9 -2
  345. package/src/templates/next-webgl/components/ui/image/index.tsx +2 -1
  346. package/src/templates/next-webgl/components/webgl/components/scene/index.tsx +0 -2
  347. package/src/templates/next-webgl/lefthook.yml +25 -0
  348. package/src/templates/next-webgl/lib/README.md +8 -4
  349. package/src/templates/next-webgl/lib/hooks/use-media.ts +6 -3
  350. package/src/templates/next-webgl/lib/scripts/dev.ts +32 -0
  351. package/src/templates/next-webgl/lib/styles/README.md +13 -0
  352. package/src/templates/next-webgl/lib/styles/fonts.ts +20 -0
  353. package/src/templates/next-webgl/lib/styles/global.css +16 -196
  354. package/src/templates/next-webgl/lib/styles/index.css +3 -0
  355. package/src/templates/next-webgl/lib/styles/tokens.css +182 -0
  356. package/src/templates/next-webgl/lib/utils/README.md +40 -0
  357. package/src/templates/next-webgl/lib/utils/easings.ts +240 -0
  358. package/src/templates/next-webgl/lib/utils/fetch.ts +84 -0
  359. package/src/templates/next-webgl/lib/utils/global-css.d.ts +1 -0
  360. package/src/templates/next-webgl/lib/utils/json-ld.tsx +70 -68
  361. package/src/templates/next-webgl/lib/utils/math.ts +236 -0
  362. package/src/templates/next-webgl/lib/utils/metadata.ts +26 -27
  363. package/src/templates/next-webgl/lib/utils/strings.ts +246 -0
  364. package/src/templates/next-webgl/lib/utils/types.d.ts +15 -0
  365. package/src/templates/next-webgl/lib/utils/url.ts +8 -5
  366. package/src/templates/next-webgl/lib/utils/viewport.ts +199 -0
  367. package/src/templates/next-webgl/package.json +13 -8
  368. package/src/templates/next-webgl/svg.d.ts +1 -0
  369. package/src/templates/next-webgl/tsconfig.tsbuildinfo +1 -1
  370. package/dist/configs/animations.d.ts.map +0 -1
  371. package/dist/configs/animations.js.map +0 -1
  372. package/dist/configs/skills.d.ts +0 -27
  373. package/dist/configs/skills.d.ts.map +0 -1
  374. package/dist/configs/skills.js +0 -18
  375. package/dist/configs/skills.js.map +0 -1
  376. package/dist/configs/skills.json +0 -26
  377. package/dist/helpers/add/hooks-config.d.ts +0 -22
  378. package/dist/helpers/add/hooks-config.d.ts.map +0 -1
  379. package/dist/helpers/add/hooks-config.js +0 -31
  380. package/dist/helpers/add/hooks-config.js.map +0 -1
  381. package/dist/helpers/add/index.d.ts.map +0 -1
  382. package/dist/helpers/add/index.js.map +0 -1
  383. package/dist/helpers/create/copy-template.d.ts +0 -11
  384. package/dist/helpers/create/copy-template.d.ts.map +0 -1
  385. package/dist/helpers/create/copy-template.js.map +0 -1
  386. package/dist/helpers/create/index.d.ts +0 -24
  387. package/dist/helpers/create/index.d.ts.map +0 -1
  388. package/dist/helpers/create/index.js +0 -99
  389. package/dist/helpers/create/index.js.map +0 -1
  390. package/dist/helpers/create/init-git.d.ts.map +0 -1
  391. package/dist/helpers/create/init-git.js.map +0 -1
  392. package/dist/helpers/create/install.d.ts.map +0 -1
  393. package/dist/helpers/create/install.js.map +0 -1
  394. package/dist/helpers/create/rename-files.d.ts.map +0 -1
  395. package/dist/helpers/create/rename-files.js.map +0 -1
  396. package/dist/helpers/create/setup-agent.d.ts.map +0 -1
  397. package/dist/helpers/create/setup-agent.js +0 -91
  398. package/dist/helpers/create/setup-agent.js.map +0 -1
  399. package/dist/helpers/create/setup-sanity.d.ts.map +0 -1
  400. package/dist/helpers/create/setup-sanity.js.map +0 -1
  401. package/dist/helpers/create/update-package.d.ts +0 -20
  402. package/dist/helpers/create/update-package.d.ts.map +0 -1
  403. package/dist/helpers/create/update-package.js +0 -97
  404. package/dist/helpers/create/update-package.js.map +0 -1
  405. package/dist/helpers/integrate/index.d.ts.map +0 -1
  406. package/dist/helpers/integrate/index.js.map +0 -1
  407. package/dist/helpers/integrate/merge-config.d.ts +0 -21
  408. package/dist/helpers/integrate/merge-config.d.ts.map +0 -1
  409. package/dist/helpers/integrate/merge-config.js +0 -42
  410. package/dist/helpers/integrate/merge-config.js.map +0 -1
  411. package/dist/helpers/integrate/merge-orchestrator.d.ts +0 -10
  412. package/dist/helpers/integrate/merge-orchestrator.d.ts.map +0 -1
  413. package/dist/helpers/integrate/merge-orchestrator.js.map +0 -1
  414. package/dist/helpers/integrate/sanity/config.d.ts.map +0 -1
  415. package/dist/helpers/integrate/sanity/config.js.map +0 -1
  416. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +0 -1
  417. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +0 -1
  418. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +0 -1
  419. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +0 -1
  420. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +0 -11
  421. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +0 -1
  422. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js +0 -133
  423. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +0 -1
  424. package/dist/helpers/skills/index.d.ts.map +0 -1
  425. package/dist/helpers/skills/index.js.map +0 -1
  426. package/dist/utils/detect-project.d.ts.map +0 -1
  427. package/dist/utils/detect-project.js.map +0 -1
  428. package/dist/utils/format-results.d.ts.map +0 -1
  429. package/dist/utils/format-results.js.map +0 -1
  430. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/WEBHOOK-SETUP.md +0 -74
  431. package/src/helpers/integrate/sanity/files/lib/integrations/sanity/sitemap.ts +0 -90
  432. package/src/template-hooks/config.js +0 -32
  433. package/src/templates/next-default/css.d.ts +0 -1
  434. package/src/templates/next-default/lib/utils/portable-text-to-markdown.ts +0 -83
  435. package/src/templates/next-default/tsconfig.tsbuildinfo +0 -1
  436. package/src/templates/next-experiments/css.d.ts +0 -1
  437. package/src/templates/next-experiments/lib/utils/portable-text-to-markdown.ts +0 -83
  438. package/src/templates/next-pagebuilder/app/api/[[...slug]]/route.ts +0 -100
  439. package/src/templates/next-pagebuilder/app/api/draft-mode/disable/route.ts +0 -7
  440. package/src/templates/next-pagebuilder/app/api/draft-mode/enable/route.ts +0 -20
  441. package/src/templates/next-pagebuilder/app/api/revalidate/route.ts +0 -121
  442. package/src/templates/next-pagebuilder/app/sitemap.md/route.ts +0 -124
  443. package/src/templates/next-pagebuilder/app/studio/[[...tool]]/page.tsx +0 -8
  444. package/src/templates/next-pagebuilder/components/sanity/draft-mode-toggle.tsx +0 -27
  445. package/src/templates/next-pagebuilder/components/sanity/rich-text.tsx +0 -87
  446. package/src/templates/next-pagebuilder/components/sanity/visual-editing.tsx +0 -28
  447. package/src/templates/next-pagebuilder/components/ui/sanity-image/index.tsx +0 -41
  448. package/src/templates/next-pagebuilder/lib/integrations/check-integration.ts +0 -5
  449. package/src/templates/next-pagebuilder/lib/integrations/sanity/client.ts +0 -27
  450. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -23
  451. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-builder-input.tsx +0 -36
  452. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-category-input.tsx +0 -50
  453. package/src/templates/next-pagebuilder/lib/integrations/sanity/components/rich-text.tsx +0 -84
  454. package/src/templates/next-pagebuilder/lib/integrations/sanity/confirm-publish-action.ts +0 -40
  455. package/src/templates/next-pagebuilder/lib/integrations/sanity/constants.ts +0 -1
  456. package/src/templates/next-pagebuilder/lib/integrations/sanity/env.ts +0 -34
  457. package/src/templates/next-pagebuilder/lib/integrations/sanity/fetchers/layout.ts +0 -34
  458. package/src/templates/next-pagebuilder/lib/integrations/sanity/icons.ts +0 -58
  459. package/src/templates/next-pagebuilder/lib/integrations/sanity/live/index.tsx +0 -88
  460. package/src/templates/next-pagebuilder/lib/integrations/sanity/markdown-proxy.config.ts +0 -50
  461. package/src/templates/next-pagebuilder/lib/integrations/sanity/page-builder-config.ts +0 -132
  462. package/src/templates/next-pagebuilder/lib/integrations/sanity/page-category.ts +0 -28
  463. package/src/templates/next-pagebuilder/lib/integrations/sanity/presentation.ts +0 -118
  464. package/src/templates/next-pagebuilder/lib/integrations/sanity/queries.ts +0 -394
  465. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.cli.ts +0 -29
  466. package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.config.ts +0 -116
  467. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/index.ts +0 -4
  468. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/blog-content.ts +0 -89
  469. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/description.ts +0 -29
  470. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/hero.ts +0 -28
  471. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/singleton/content-collection.ts +0 -45
  472. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/author.ts +0 -70
  473. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/blog-category.ts +0 -55
  474. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/index.ts +0 -96
  475. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/company-data.ts +0 -62
  476. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/footer.ts +0 -79
  477. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/navbar.ts +0 -74
  478. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/link.ts +0 -125
  479. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/logo-field.ts +0 -9
  480. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/metadata.ts +0 -68
  481. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/nav-objects.ts +0 -192
  482. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-builder.ts +0 -39
  483. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-folder.ts +0 -124
  484. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page.ts +0 -232
  485. package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/richText.ts +0 -63
  486. package/src/templates/next-pagebuilder/lib/integrations/sanity/singletons.ts +0 -44
  487. package/src/templates/next-pagebuilder/lib/integrations/sanity/structure.ts +0 -453
  488. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/image.ts +0 -8
  489. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/link.ts +0 -137
  490. package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/page-builder-markdown.ts +0 -81
  491. package/src/templates/next-pagebuilder/lib/scripts/sanity-typegen.ts +0 -45
  492. package/src/templates/next-pagebuilder/lib/utils/json-ld.tsx +0 -213
  493. package/src/templates/next-pagebuilder/lib/utils/metadata.ts +0 -167
  494. package/src/templates/next-pagebuilder/lib/utils/sitemap.ts +0 -37
  495. package/src/templates/next-pagebuilder/proxy.ts +0 -81
  496. package/src/templates/next-webgl/css.d.ts +0 -1
  497. package/src/templates/next-webgl/lib/utils/portable-text-to-markdown.ts +0 -83
  498. package/dist/{helpers → infrastructure}/create/copy-template.js +0 -0
  499. package/dist/{helpers → infrastructure}/create/rename-files.d.ts +0 -0
  500. package/dist/{helpers → infrastructure}/create/rename-files.js +0 -0
  501. package/dist/{helpers → infrastructure}/create/setup-sanity.d.ts +0 -0
  502. package/dist/{helpers/integrate → modules/features/cms}/sanity/config.d.ts +0 -0
  503. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/disable/route.ts +0 -0
  504. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/enable/route.ts +0 -0
  505. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/[[...tool]]/page.tsx +0 -0
  506. package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/layout.tsx +0 -0
  507. package/src/{helpers/integrate → modules/features/cms}/sanity/files/components/ui/sanity-image/index.tsx +0 -0
  508. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/README.md +0 -0
  509. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/check-integration.ts +0 -0
  510. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/MARKDOWN-PROXY.md +0 -0
  511. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/README.md +0 -0
  512. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/client.ts +0 -0
  513. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
  514. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -0
  515. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/confirm-publish-action.ts +0 -0
  516. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/live/index.tsx +1 -1
  517. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/markdown-proxy.config.ts +0 -0
  518. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -0
  519. package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.config.ts +1 -1
  520. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -0
  521. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schema.json +0 -0
  522. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -0
  523. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -0
  524. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -0
  525. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -0
  526. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -0
  527. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -0
  528. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/structure.ts +0 -0
  529. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/image.ts +0 -0
  530. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/link.ts +0 -0
  531. /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/portable-text-to-markdown.ts +0 -0
@@ -1,453 +0,0 @@
1
- import type {
2
- ListBuilder,
3
- ListItemBuilder,
4
- StructureBuilder,
5
- StructureResolver,
6
- StructureResolverContext,
7
- } from "sanity/structure"
8
- import { apiVersion } from "./env"
9
- import {
10
- authorIcon,
11
- blogCategoryIcon,
12
- componentsFolderIcon,
13
- contentFolderIcon,
14
- contentIcon,
15
- descriptionIcon,
16
- heroIcon,
17
- layoutFolderIcon,
18
- pageFolderIcon,
19
- pageIcon,
20
- pagesFolderIcon,
21
- } from "./icons"
22
- import {
23
- getPageCategoryIcon,
24
- type PageBuilderGroupName,
25
- } from "./page-builder-config"
26
- import { pageCategoryExpression } from "./page-category"
27
- import { singletonComponents, singletonLayout } from "./singletons"
28
-
29
- type PageTreeItem = {
30
- _id: string
31
- _type: "page" | "pageFolder"
32
- title?: string | null
33
- slug?: string | null
34
- pageType?: PageBuilderGroupName | null
35
- }
36
-
37
- const PAGE_TREE_ITEM_ID_PREFIX = {
38
- page: "page-tree-",
39
- pageFolder: "page-folder-tree-",
40
- } as const
41
-
42
- const PAGE_TREE_QUERY = `
43
- *[
44
- (
45
- _type == "pageFolder" &&
46
- (
47
- ($folderId == null && !defined(parentFolder._ref)) ||
48
- parentFolder._ref == $folderId
49
- )
50
- ) ||
51
- (
52
- _type == "page" &&
53
- (
54
- ($folderId == null && !defined(pageFolder._ref)) ||
55
- pageFolder._ref == $folderId
56
- )
57
- )
58
- ]{
59
- _id,
60
- _type,
61
- title,
62
- "slug": slug.current,
63
- "pageType": ${pageCategoryExpression}
64
- }
65
- `
66
-
67
- const normalizeDocumentId = (documentId: string) =>
68
- documentId.replace(/^drafts\./, "")
69
-
70
- const getPageTreeItemId = (item: Pick<PageTreeItem, "_id" | "_type">) => {
71
- const normalizedId = normalizeDocumentId(item._id)
72
-
73
- return `${PAGE_TREE_ITEM_ID_PREFIX[item._type]}${normalizedId}`
74
- }
75
-
76
- export const getDocumentIdFromPageTreeItemId = (itemId: string) =>
77
- normalizeDocumentId(
78
- itemId
79
- .replace(PAGE_TREE_ITEM_ID_PREFIX.page, "")
80
- .replace(PAGE_TREE_ITEM_ID_PREFIX.pageFolder, "")
81
- )
82
-
83
- const getPageTreeTemplateIds = (folderId: string | null) =>
84
- folderId === null
85
- ? ["page", "pageFolder"]
86
- : ["page-with-folder", "page-folder-with-parent"]
87
-
88
- const buildPageTreeCreateChild = (
89
- S: StructureBuilder,
90
- documentId: string,
91
- folderId: string | null,
92
- templateId: string
93
- ) => {
94
- if (templateId === "page") {
95
- return S.documentWithInitialValueTemplate("page").documentId(documentId)
96
- }
97
-
98
- if (templateId === "pageFolder") {
99
- return S.documentWithInitialValueTemplate("pageFolder").documentId(
100
- documentId
101
- )
102
- }
103
-
104
- if (templateId === "page-with-folder") {
105
- return S.documentWithInitialValueTemplate("page-with-folder", {
106
- pageFolderId: folderId,
107
- }).documentId(documentId)
108
- }
109
-
110
- if (templateId === "page-folder-with-parent") {
111
- return S.documentWithInitialValueTemplate("page-folder-with-parent", {
112
- parentFolderId: folderId,
113
- }).documentId(documentId)
114
- }
115
-
116
- return undefined
117
- }
118
-
119
- const getPageTreeClient = (context: StructureResolverContext) =>
120
- context
121
- .getClient({ apiVersion })
122
- .withConfig({ perspective: context.perspectiveStack })
123
-
124
- const getPageItemTitle = (page: PageTreeItem) => {
125
- return `${page.title || "Untitled Page"} (${`/${page.slug || ""}`})`
126
- }
127
-
128
- const getFolderItemTitle = (folder: PageTreeItem) =>
129
- folder.slug
130
- ? `${folder.title || "Untitled Folder"} (${`/${folder.slug}`})`
131
- : folder.title || "Untitled Folder"
132
-
133
- const sortPageTreeItems = (items: PageTreeItem[]) =>
134
- [...items].sort((left, right) => {
135
- if (left._type !== right._type) {
136
- return left._type === "page" ? -1 : 1
137
- }
138
-
139
- const leftLabel =
140
- left._type === "page" ? getPageItemTitle(left) : getFolderItemTitle(left)
141
- const rightLabel =
142
- right._type === "page"
143
- ? getPageItemTitle(right)
144
- : getFolderItemTitle(right)
145
-
146
- if (leftLabel === "/") return -1
147
- if (rightLabel === "/") return 1
148
-
149
- return leftLabel.localeCompare(rightLabel)
150
- })
151
-
152
- async function fetchPageTreeItems(
153
- context: StructureResolverContext,
154
- folderId: string | null
155
- ) {
156
- return getPageTreeClient(context).fetch<PageTreeItem[]>(PAGE_TREE_QUERY, {
157
- folderId,
158
- })
159
- }
160
-
161
- function buildPageTreeList(
162
- S: StructureBuilder,
163
- context: StructureResolverContext,
164
- folderId: string | null,
165
- title: string
166
- ): Promise<ListBuilder> {
167
- return fetchPageTreeItems(context, folderId).then((items) => {
168
- const currentFolderId = folderId
169
- const sortedItems = sortPageTreeItems(items)
170
- const allowedTemplateIds = getPageTreeTemplateIds(currentFolderId)
171
- const childItems: ListItemBuilder[] = sortedItems.map((item) => {
172
- const normalizedId = normalizeDocumentId(item._id)
173
-
174
- if (item._type === "pageFolder") {
175
- return S.listItem()
176
- .id(getPageTreeItemId(item))
177
- .title(getFolderItemTitle(item))
178
- .icon(pageFolderIcon)
179
- .child(() =>
180
- buildPageTreeList(
181
- S,
182
- context,
183
- item._id,
184
- item.title || "Untitled Folder"
185
- )
186
- )
187
- }
188
-
189
- return S.listItem()
190
- .id(getPageTreeItemId(item))
191
- .title(getPageItemTitle(item))
192
- .icon(getPageCategoryIcon(item.pageType))
193
- .child(S.document().schemaType("page").documentId(normalizedId))
194
- })
195
-
196
- const initialValueTemplates =
197
- currentFolderId === null
198
- ? [
199
- S.initialValueTemplateItem("page"),
200
- S.initialValueTemplateItem("pageFolder"),
201
- ]
202
- : [
203
- S.initialValueTemplateItem("page-with-folder", {
204
- pageFolderId: currentFolderId,
205
- }),
206
- S.initialValueTemplateItem("page-folder-with-parent", {
207
- parentFolderId: currentFolderId,
208
- }),
209
- ]
210
-
211
- const createMenuItems =
212
- currentFolderId === null
213
- ? [
214
- S.menuItem()
215
- .title("Create Page")
216
- .icon(pageIcon)
217
- .intent({
218
- type: "create",
219
- params: {
220
- type: "page",
221
- template: "page",
222
- },
223
- }),
224
- S.menuItem()
225
- .title("Create Folder")
226
- .icon(pageFolderIcon)
227
- .intent({
228
- type: "create",
229
- params: {
230
- type: "pageFolder",
231
- template: "pageFolder",
232
- },
233
- }),
234
- ]
235
- : [
236
- S.menuItem()
237
- .title("Create Page")
238
- .icon(pageIcon)
239
- .intent({
240
- type: "create",
241
- params: [
242
- {
243
- type: "page",
244
- template: "page-with-folder",
245
- },
246
- {
247
- pageFolderId: currentFolderId,
248
- },
249
- ],
250
- }),
251
- S.menuItem()
252
- .title("Create Folder")
253
- .icon(pageFolderIcon)
254
- .intent({
255
- type: "create",
256
- params: [
257
- {
258
- type: "pageFolder",
259
- template: "page-folder-with-parent",
260
- },
261
- {
262
- parentFolderId: currentFolderId,
263
- },
264
- ],
265
- }),
266
- ]
267
-
268
- const folderMenuItems =
269
- currentFolderId === null
270
- ? []
271
- : [
272
- S.menuItem()
273
- .title("Folder Settings")
274
- .icon(pageFolderIcon)
275
- .intent({
276
- type: "edit",
277
- params: {
278
- id: currentFolderId,
279
- type: "pageFolder",
280
- },
281
- }),
282
- ]
283
-
284
- return S.list()
285
- .title(title)
286
- .canHandleIntent((intentName, params) => {
287
- if (intentName === "create") {
288
- return (
289
- typeof params.template === "string" &&
290
- allowedTemplateIds.includes(params.template)
291
- )
292
- }
293
-
294
- if (intentName !== "edit") {
295
- return false
296
- }
297
-
298
- const normalizedId =
299
- typeof params.id === "string" ? normalizeDocumentId(params.id) : null
300
-
301
- if (!normalizedId || typeof params.type !== "string") {
302
- return false
303
- }
304
-
305
- if (
306
- params.type === "pageFolder" &&
307
- currentFolderId !== null &&
308
- normalizedId === normalizeDocumentId(currentFolderId)
309
- ) {
310
- return true
311
- }
312
-
313
- return sortedItems.some(
314
- (item) =>
315
- normalizeDocumentId(item._id) === normalizedId &&
316
- item._type === params.type
317
- )
318
- })
319
- .child((itemId, options) => {
320
- const normalizedId = getDocumentIdFromPageTreeItemId(itemId)
321
- const matchedItem = sortedItems.find(
322
- (item) => normalizeDocumentId(item._id) === normalizedId
323
- )
324
-
325
- if (matchedItem?._type === "pageFolder") {
326
- return buildPageTreeList(
327
- S,
328
- context,
329
- matchedItem._id,
330
- matchedItem.title || "Untitled Folder"
331
- )
332
- }
333
-
334
- if (matchedItem?._type === "page") {
335
- return S.document().schemaType("page").documentId(normalizedId)
336
- }
337
-
338
- if (
339
- currentFolderId !== null &&
340
- normalizedId === normalizeDocumentId(currentFolderId)
341
- ) {
342
- return S.document().schemaType("pageFolder").documentId(normalizedId)
343
- }
344
-
345
- const templateId =
346
- typeof options.params?.template === "string"
347
- ? options.params.template
348
- : null
349
-
350
- if (!templateId) {
351
- return undefined
352
- }
353
-
354
- return buildPageTreeCreateChild(
355
- S,
356
- normalizedId,
357
- currentFolderId,
358
- templateId
359
- )
360
- })
361
- .menuItems([...folderMenuItems, ...createMenuItems])
362
- .initialValueTemplates(initialValueTemplates)
363
- .items(childItems)
364
- })
365
- }
366
-
367
- // https://www.sanity.io/docs/structure-builder-cheat-sheet
368
- export const structure: StructureResolver = (S, context) =>
369
- S.list()
370
- .title("Content")
371
- .items([
372
- // GROUP 1: Pages -- root page tree with page/folder creation
373
- S.listItem()
374
- .title("Pages")
375
- .icon(pagesFolderIcon)
376
- .child(() => buildPageTreeList(S, context, null, "Pages")),
377
-
378
- S.divider(),
379
-
380
- // GROUP 2: Content -- authors, blog categories
381
- S.listItem()
382
- .title("Content")
383
- .icon(contentFolderIcon)
384
- .child(
385
- S.list()
386
- .title("Content")
387
- .items([
388
- S.documentTypeListItem("author")
389
- .title("Authors")
390
- .icon(authorIcon),
391
- S.documentTypeListItem("blogCategory")
392
- .title("Blog Categories")
393
- .icon(blogCategoryIcon),
394
- ])
395
- ),
396
-
397
- S.divider(),
398
-
399
- // GROUP 3: Components -- singleton and reusable components
400
- S.listItem()
401
- .title("Components")
402
- .icon(componentsFolderIcon)
403
- .child(
404
- S.list()
405
- .title("Components")
406
- .items([
407
- S.divider().title("Singleton Components"),
408
- ...singletonComponents.map((item) =>
409
- S.listItem()
410
- .title(item.title)
411
- .id(item.documentId)
412
- .icon(item.icon)
413
- .child(
414
- S.document()
415
- .schemaType(item.schemaType)
416
- .documentId(item.documentId)
417
- )
418
- ),
419
- S.divider().title("Reusable Components"),
420
- S.documentTypeListItem("hero").title("Headings").icon(heroIcon),
421
- S.documentTypeListItem("description")
422
- .title("Descriptions")
423
- .icon(descriptionIcon),
424
- S.documentTypeListItem("blogContent")
425
- .title("Blog Content")
426
- .icon(contentIcon),
427
- ])
428
- ),
429
-
430
- S.divider(),
431
-
432
- // GROUP 4: Layout -- global layout singletons
433
- S.listItem()
434
- .title("Layout")
435
- .icon(layoutFolderIcon)
436
- .child(
437
- S.list()
438
- .title("Layout")
439
- .items([
440
- ...singletonLayout.map((item) =>
441
- S.listItem()
442
- .title(item.title)
443
- .id(item.documentId)
444
- .icon(item.icon)
445
- .child(
446
- S.document()
447
- .schemaType(item.schemaType)
448
- .documentId(item.documentId)
449
- )
450
- ),
451
- ])
452
- ),
453
- ])
@@ -1,8 +0,0 @@
1
- import { createImageUrlBuilder } from "@sanity/image-url"
2
- import { dataset, projectId } from "../env"
3
-
4
- const builder = createImageUrlBuilder({ projectId, dataset })
5
-
6
- export const urlForImage = (source: Parameters<typeof builder.image>[0]) => {
7
- return builder.image(source)
8
- }
@@ -1,137 +0,0 @@
1
- type PageReference = {
2
- _id?: string
3
- _ref?: string
4
- _type?: string
5
- slug?: { current?: string | null } | null
6
- resolvedSlug?: string | null
7
- title?: string | null
8
- }
9
-
10
- type PageReferenceLink = {
11
- _type: "pageReference"
12
- page?: PageReference | null
13
- text?: string | null
14
- openInNewTab?: boolean | null
15
- }
16
-
17
- type ExternalLinkItem = {
18
- _type: "externalLink"
19
- href?: string | null
20
- text?: string | null
21
- openInNewTab?: boolean | null
22
- }
23
-
24
- type LinkItem = PageReferenceLink | ExternalLinkItem
25
-
26
- // Backward-compatible shape (old data without _type)
27
- type LegacyLink = {
28
- page?: PageReference | null
29
- href?: string | null
30
- text?: string | null
31
- openInNewTab?: boolean | null
32
- }
33
-
34
- type LinkLike = LinkItem | LegacyLink
35
-
36
- type InternalReference = {
37
- _id?: string
38
- _type: string
39
- slug?: { current?: string | null } | null
40
- resolvedSlug?: string | null
41
- title?: string
42
- }
43
-
44
- /**
45
- * Resolves a link object to a URL string.
46
- *
47
- * Supports both the new discriminated union shape (_type: "pageReference" | "externalLink")
48
- * and the legacy flat shape (page + href without _type).
49
- */
50
- export const urlForReference = (link: LinkLike | null): string => {
51
- if (!link) return "#"
52
-
53
- // New discriminated union
54
- if ("_type" in link && link._type === "pageReference") {
55
- if (
56
- link.page &&
57
- typeof link.page === "object" &&
58
- ("slug" in link.page || "_id" in link.page)
59
- ) {
60
- const ref = link.page as InternalReference
61
- return resolveDocumentUrl(
62
- ref._type,
63
- ref.resolvedSlug ?? undefined,
64
- ref.slug?.current ?? undefined,
65
- ref._id
66
- )
67
- }
68
- return "#"
69
- }
70
-
71
- if ("_type" in link && link._type === "externalLink") {
72
- return link.href || "#"
73
- }
74
-
75
- // Legacy fallback (flat shape without _type)
76
- if (
77
- "page" in link &&
78
- link.page &&
79
- typeof link.page === "object" &&
80
- ("slug" in link.page || "_id" in link.page)
81
- ) {
82
- const ref = link.page as InternalReference
83
- return resolveDocumentUrl(
84
- ref._type,
85
- ref.resolvedSlug ?? undefined,
86
- ref.slug?.current ?? undefined,
87
- ref._id
88
- )
89
- }
90
-
91
- if ("href" in link && link.href) {
92
- return link.href
93
- }
94
-
95
- return "#"
96
- }
97
-
98
- function resolveDocumentUrl(
99
- documentType: string,
100
- resolvedSlug?: string,
101
- slug?: string,
102
- documentId?: string
103
- ): string {
104
- if (documentType === "page") {
105
- if (documentId === "page-homepage") return "/"
106
- if (resolvedSlug) return `/${resolvedSlug}`
107
- if (slug) return `/${slug}`
108
- return "#"
109
- }
110
-
111
- if (!slug) return "#"
112
-
113
- console.warn("Unknown document type for URL resolution:", documentType)
114
- return "#"
115
- }
116
-
117
- /**
118
- * Returns href, target, and rel attributes for a link object.
119
- *
120
- * External detection: externalLink type, or URLs starting with "http".
121
- */
122
- export const getLinkAttributes = (link: LinkLike | null) => {
123
- if (!link) return { href: "#", target: undefined, rel: undefined }
124
-
125
- const href = urlForReference(link)
126
- const isExternal =
127
- ("_type" in link && link._type === "externalLink") ||
128
- href.startsWith("http")
129
-
130
- const shouldOpenNewTab = link.openInNewTab || isExternal
131
-
132
- return {
133
- href,
134
- target: shouldOpenNewTab ? "_blank" : undefined,
135
- rel: shouldOpenNewTab ? "noopener noreferrer" : undefined,
136
- }
137
- }
@@ -1,81 +0,0 @@
1
- import { portableTextToMarkdown } from "@portabletext/markdown"
2
- import type { PAGE_QUERY_RESULT } from "../sanity.types"
3
-
4
- const markdownOptions = {
5
- types: {
6
- table: ({ value }: { value: { rows?: Array<{ cells?: string[] }> } }) => {
7
- const rows = value?.rows
8
- if (!rows?.length) return ""
9
- return rows
10
- .map((row) => `| ${(row.cells ?? []).join(" | ")} |`)
11
- .join("\n")
12
- },
13
- },
14
- } satisfies Parameters<typeof portableTextToMarkdown>[1]
15
-
16
- type PageBuilderBlock = NonNullable<
17
- NonNullable<PAGE_QUERY_RESULT>["pageBuilder"]
18
- >[number]
19
-
20
- export const renderPageBuilderMarkdown = (
21
- blocks: PageBuilderBlock[] | null | undefined
22
- ) => {
23
- if (!blocks?.length) return ""
24
-
25
- return blocks
26
- .flatMap((block) => {
27
- switch (block._type) {
28
- case "hero":
29
- return block.headline ? [`## ${block.headline}`, ""] : []
30
- case "description":
31
- return block.description ? [block.description, ""] : []
32
- case "blogContent": {
33
- const lines: (string | null)[] = []
34
- const categories =
35
- "categories" in block ? block.categories : undefined
36
- const relatedPosts =
37
- "relatedPosts" in block ? block.relatedPosts : undefined
38
-
39
- if (categories?.length) {
40
- lines.push(
41
- categories
42
- .map((c) => c.title)
43
- .filter(Boolean)
44
- .join(", ")
45
- )
46
- }
47
- if (block.author?.name) {
48
- const authorParts = [block.author.name, block.author.role]
49
- .filter(Boolean)
50
- .join(", ")
51
- lines.push(`**Author:** ${authorParts}`)
52
- }
53
- if (block.date) {
54
- lines.push(`**Date:** ${block.date}`)
55
- }
56
- lines.push("")
57
- if (block.body) {
58
- lines.push(
59
- portableTextToMarkdown(
60
- block.body as Parameters<typeof portableTextToMarkdown>[0],
61
- markdownOptions
62
- )
63
- )
64
- }
65
- if (relatedPosts?.length) {
66
- lines.push("", "## Related Articles", "")
67
- for (const post of relatedPosts) {
68
- if (post.title && post.resolvedSlug) {
69
- lines.push(`- [${post.title}](/${post.resolvedSlug}.md)`)
70
- }
71
- }
72
- }
73
- lines.push("")
74
- return lines.filter((l) => l !== null)
75
- }
76
- default:
77
- return []
78
- }
79
- })
80
- .join("\n")
81
- }