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
@@ -4,13 +4,13 @@
4
4
  * Next.js Image wrapper with optimized defaults and error handling.
5
5
  * Always use this component instead of next/image directly.
6
6
  */
7
- "use client";
7
+ "use client"
8
8
 
9
- import cn from "clsx";
10
- import NextImage, { type ImageProps as NextImageProps } from "next/image";
11
- import type { CSSProperties, Ref } from "react";
9
+ import cn from "clsx"
10
+ import NextImage, { type ImageProps as NextImageProps } from "next/image"
11
+ import type { CSSProperties, Ref } from "react"
12
12
 
13
- const DESKTOP_BREAKPOINT = 1440;
13
+ const DESKTOP_BREAKPOINT = 1440
14
14
 
15
15
  /**
16
16
  * Enhanced Image component props extending Next.js Image.
@@ -20,26 +20,26 @@ const DESKTOP_BREAKPOINT = 1440;
20
20
  */
21
21
  export type ImageProps = Omit<NextImageProps, "objectFit" | "alt"> & {
22
22
  /** CSS object-fit property for image positioning */
23
- objectFit?: CSSProperties["objectFit"];
23
+ objectFit?: CSSProperties["objectFit"]
24
24
  /** Display as block element (adds display: block) */
25
- block?: boolean;
25
+ block?: boolean
26
26
  /** Size on mobile devices (e.g., "100vw", "50vw") */
27
- mobileSize?: `${number}vw`;
27
+ mobileSize?: `${number}vw`
28
28
  /** Size on desktop devices (e.g., "33vw", "25vw") */
29
- desktopSize?: `${number}vw`;
29
+ desktopSize?: `${number}vw`
30
30
  /** Ref for accessing the underlying img element */
31
- ref?: Ref<HTMLImageElement>;
31
+ ref?: Ref<HTMLImageElement>
32
32
  /** Alt text for accessibility (required for meaningful images) */
33
- alt?: string;
33
+ alt?: string
34
34
  /** Aspect ratio for automatic placeholder and layout stability */
35
- aspectRatio?: number;
36
- };
35
+ aspectRatio?: number
36
+ }
37
37
 
38
38
  // Memoize helper functions to avoid recreation
39
39
  const toBase64 = (str: string) =>
40
40
  typeof window === "undefined"
41
41
  ? Buffer.from(str).toString("base64")
42
- : window.btoa(str);
42
+ : window.btoa(str)
43
43
 
44
44
  // Helper to generate blur placeholder with transparent background by default
45
45
  const generateShimmer = (w: number, h: number) => `
@@ -54,7 +54,7 @@ const generateShimmer = (w: number, h: number) => `
54
54
  <rect width="${w}" height="${h}" fill="rgba(0,0,0,0)" />
55
55
  <rect id="r" width="${w}" height="${h}" fill="url(#g)" />
56
56
  <animate xlink:href="#r" attributeName="x" from="-${w}" to="${w}" dur="1s" repeatCount="indefinite" />
57
- </svg>`;
57
+ </svg>`
58
58
 
59
59
  // Helper to determine if blur placeholder should be used
60
60
  const shouldUseBlurPlaceholder = (
@@ -62,10 +62,10 @@ const shouldUseBlurPlaceholder = (
62
62
  placeholder: string,
63
63
  blurDataURL: string | undefined
64
64
  ): boolean => {
65
- if (!src) return false;
66
- const isSvg = typeof src === "string" && src.includes(".svg");
67
- return !isSvg && placeholder === "blur" && !blurDataURL;
68
- };
65
+ if (!src) return false
66
+ const isSvg = typeof src === "string" && src.includes(".svg")
67
+ return !isSvg && placeholder === "blur" && !blurDataURL
68
+ }
69
69
 
70
70
  // Helper to generate blur data URL
71
71
  const generateBlurDataURL = (
@@ -73,11 +73,11 @@ const generateBlurDataURL = (
73
73
  aspectRatio: number | undefined,
74
74
  existingBlurDataURL: string | undefined
75
75
  ): string | undefined => {
76
- if (!(shouldUse && aspectRatio)) return existingBlurDataURL;
76
+ if (!(shouldUse && aspectRatio)) return existingBlurDataURL
77
77
 
78
- const shimmerSvg = generateShimmer(700, Math.round(700 / aspectRatio));
79
- return `data:image/svg+xml;base64,${toBase64(shimmerSvg)}`;
80
- };
78
+ const shimmerSvg = generateShimmer(700, Math.round(700 / aspectRatio))
79
+ return `data:image/svg+xml;base64,${toBase64(shimmerSvg)}`
80
+ }
81
81
 
82
82
  // Helper to determine final placeholder value
83
83
  const getFinalPlaceholder = (
@@ -89,11 +89,11 @@ const getFinalPlaceholder = (
89
89
  if (!shouldUse) {
90
90
  return originalPlaceholder === "blur" && !blurDataURL
91
91
  ? "empty"
92
- : originalPlaceholder;
92
+ : originalPlaceholder
93
93
  }
94
94
 
95
- return aspectRatio || blurDataURL ? "blur" : "empty";
96
- };
95
+ return aspectRatio || blurDataURL ? "blur" : "empty"
96
+ }
97
97
 
98
98
  /**
99
99
  * Enhanced Image component with responsive sizing and automatic optimizations.
@@ -168,29 +168,29 @@ export function Image({
168
168
  // Generate responsive sizes if not provided
169
169
  const finalSizes =
170
170
  sizes ||
171
- `(max-width: ${DESKTOP_BREAKPOINT}px) ${mobileSize}, ${desktopSize}`;
171
+ `(max-width: ${DESKTOP_BREAKPOINT}px) ${mobileSize}, ${desktopSize}`
172
172
 
173
173
  // Early return after hooks
174
- if (!src) return null;
174
+ if (!src) return null
175
175
 
176
176
  // Determine SVG status and placeholder logic
177
- const isSvg = typeof src === "string" && src.includes(".svg");
177
+ const isSvg = typeof src === "string" && src.includes(".svg")
178
178
  const shouldUsePlaceholder = shouldUseBlurPlaceholder(
179
179
  src,
180
180
  placeholder,
181
181
  props.blurDataURL
182
- );
182
+ )
183
183
  const blurDataURL = generateBlurDataURL(
184
184
  shouldUsePlaceholder,
185
185
  aspectRatio,
186
186
  props.blurDataURL
187
- );
187
+ )
188
188
  const finalPlaceholder = getFinalPlaceholder(
189
189
  shouldUsePlaceholder,
190
190
  aspectRatio,
191
191
  props.blurDataURL,
192
192
  placeholder
193
- );
193
+ )
194
194
 
195
195
  return (
196
196
  <NextImage
@@ -215,5 +215,5 @@ export function Image({
215
215
  {...(blurDataURL && { blurDataURL })}
216
216
  {...props}
217
217
  />
218
- );
218
+ )
219
219
  }
@@ -7,8 +7,12 @@ Non-UI code: hooks, integrations, styles, and utilities.
7
7
  ## Quick Imports
8
8
 
9
9
  ```tsx
10
- import { generatePageMetadata } from '@/lib/utils/metadata'
11
- import { createJsonLd, serializeJsonLd } from '@/lib/utils/json-ld'
10
+ // Utilities - explicit imports for better tree-shaking
11
+ import { clamp, lerp } from '@/lib/utils/math'
12
+ import { slugify } from '@/lib/utils/strings'
13
+
14
+ // Styles
15
+ import { colors, themes, breakpoints } from '@/lib/styles/config'
12
16
  ```
13
17
 
14
18
  ## Directories
@@ -16,8 +20,8 @@ import { createJsonLd, serializeJsonLd } from '@/lib/utils/json-ld'
16
20
  | Directory | Purpose | Optional? |
17
21
  |-----------|---------|-----------|
18
22
  | [hooks/](hooks/README.md) | React hooks + Zustand store | ❌ Core |
19
- | `styles/` | Global styles and class utilities | ❌ Core |
20
- | `utils/` | Metadata and content serialization helpers | ❌ Core |
23
+ | [styles/](styles/README.md) | CSS & Tailwind config | ❌ Core |
24
+ | [utils/](utils/README.md) | Pure utility functions | ❌ Core |
21
25
 
22
26
  ## Scripts
23
27
 
@@ -1,12 +1,14 @@
1
1
  import { useEffect, useState } from "react"
2
2
 
3
3
  export function useMedia(mediaQuery: string, initialValue?: boolean) {
4
- const [isVerified, setIsVerified] = useState<boolean | undefined>(initialValue)
4
+ const [isVerified, setIsVerified] = useState<boolean | undefined>(
5
+ initialValue
6
+ )
5
7
 
6
8
  useEffect(() => {
7
9
  if (typeof window === "undefined" || !("matchMedia" in window)) {
8
10
  console.warn("matchMedia is not supported by your current browser")
9
- return undefined
11
+ return
10
12
  }
11
13
  const mediaQueryList = window.matchMedia(mediaQuery)
12
14
  const changeHandler = () => setIsVerified(!!mediaQueryList.matches)
@@ -17,7 +19,8 @@ export function useMedia(mediaQuery: string, initialValue?: boolean) {
17
19
  return () => {
18
20
  mediaQueryList.removeEventListener("change", changeHandler)
19
21
  }
20
- } else if (typeof mediaQueryList.addListener === "function") {
22
+ }
23
+ if (typeof mediaQueryList.addListener === "function") {
21
24
  mediaQueryList.addListener(changeHandler)
22
25
  return () => {
23
26
  mediaQueryList.removeListener(changeHandler)
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Cross-platform Next.js dev launcher.
3
+ */
4
+
5
+ import { bunExecutable, colorEnv } from "./utils"
6
+
7
+ const isHttps = process.argv.includes("--https")
8
+ const isInspect = process.argv.includes("--inspect")
9
+
10
+ // Build next dev command args
11
+ const nextDevArgs = [bunExecutable, "next", "dev"]
12
+ if (isHttps) nextDevArgs.push("--experimental-https")
13
+ if (isInspect) nextDevArgs.push("--inspect")
14
+
15
+ const devEnv = colorEnv()
16
+
17
+ const nextDevProcess = Bun.spawn(nextDevArgs, {
18
+ stdout: "inherit",
19
+ stderr: "inherit",
20
+ env: devEnv,
21
+ })
22
+
23
+ const cleanup = () => {
24
+ nextDevProcess.kill()
25
+ process.exit(0)
26
+ }
27
+
28
+ process.on("SIGINT", cleanup)
29
+ process.on("SIGTERM", cleanup)
30
+
31
+ await nextDevProcess.exited
32
+ cleanup()
@@ -0,0 +1,13 @@
1
+ # Styles
2
+
3
+ Minimal Tailwind setup for the starter.
4
+
5
+ ## Files
6
+
7
+ | File | Purpose |
8
+ |------|---------|
9
+ | `index.css` | Single stylesheet entrypoint imported by `app/layout.tsx` |
10
+ | `tokens.css` | Theme variables, breakpoints, and custom Tailwind utilities |
11
+ | `global.css` | Reset and global app styles |
12
+ | `fonts.ts` | Font variable setup |
13
+ | `cn.ts` | Tailwind class merging helper |
@@ -0,0 +1,20 @@
1
+ import { Geist_Mono } from "next/font/google"
2
+
3
+ const mono = Geist_Mono({
4
+ subsets: ["latin"],
5
+ display: "swap",
6
+ variable: "--geist-mono",
7
+ fallback: [
8
+ "ui-monospace",
9
+ "SFMono-Regular",
10
+ "Consolas",
11
+ "Liberation Mono",
12
+ "Menlo",
13
+ "monospace",
14
+ ],
15
+ })
16
+
17
+ const fonts = [mono]
18
+ const fontsVariable = fonts.map((font) => font.variable).join(" ")
19
+
20
+ export { fontsVariable }
@@ -1,205 +1,23 @@
1
- @import "tailwindcss/utilities.css";
2
-
3
- @custom-media --hover (hover: hover);
4
- @custom-media --reduced-motion (prefers-reduced-motion: reduce);
5
- @custom-media --mobile-only (width < 768px);
6
- @custom-media --tablet (width >= 768px);
7
- @custom-media --tablet-lg (width >= 1024px);
8
- @custom-media --desktop (width >= 1440px);
9
- @custom-media --desktop-large (width >= 1920px);
10
-
11
- :root {
12
- --device-width: 640;
13
- --device-height: 650;
14
- --columns: 4;
15
- --gap: 16px;
16
- --safe: 16px;
17
- --header-height: 58px;
18
- --layout-width: calc(100vw - (2 * var(--safe)));
19
- --column-width: calc(
20
- (var(--layout-width) - (var(--columns) - 1) * var(--gap)) / var(--columns)
21
- );
22
- --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
23
- --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
24
- --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
25
- --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
26
- --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
27
- --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
28
- --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
29
- --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
30
- --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
31
- --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
32
- --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
33
- --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
34
- --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
35
- --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
36
- --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
37
- --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
38
- --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
39
- --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
40
- --ease-gleasing: cubic-bezier(0.4, 0, 0, 1);
41
- --color-black: #000000;
42
- --color-white: #ffffff;
43
- --color-orange: #ff4d00;
44
- --color-blue: #487cff;
45
- --color-green: #00ff9b;
46
- --color-violet: #f101a5;
47
- --color-pink: #ff73a6;
48
- --color-gray: #666666;
49
-
50
- @variant desktop {
51
- --device-width: 1440;
52
- --device-height: 816;
53
- --columns: 12;
54
- --header-height: 98px;
55
- }
56
- }
57
-
58
- @theme {
59
- --breakpoint-*: initial;
60
- --breakpoint-desktop-large: 1920px;
61
- --breakpoint-desktop: 1440px;
62
- --breakpoint-tablet-lg: 1024px;
63
- --breakpoint-tablet: 768px;
64
- --breakpoint-mobile: 640px;
65
-
66
- --color-*: initial;
67
- --color-primary: #ffffff;
68
- --color-secondary: #000000;
69
- --color-contrast: #ff4d00;
70
- --color-black: #000000;
71
- --color-white: #ffffff;
72
- --color-orange: #ff4d00;
73
- --color-blue: #487cff;
74
- --color-green: #00ff9b;
75
- --color-violet: #f101a5;
76
- --color-pink: #ff73a6;
77
- --color-gray: #666666;
78
- --color-gray-50: #f5f5f5;
79
- --color-gray-100: #e0e0e0;
80
- --color-gray-200: #c2c2c2;
81
- --color-gray-300: #a3a3a3;
82
- --color-gray-400: #858585;
83
- --color-gray-500: #666666;
84
- --color-gray-600: #4d4d4d;
85
- --color-gray-700: #333333;
86
- --color-gray-800: #1a1a1a;
87
-
88
- --spacing: 0.25rem;
89
- --spacing-0: 0;
90
- --spacing-safe: var(--safe);
91
- --spacing-gap: var(--gap);
92
- --spacing-header-height: var(--header-height);
93
-
94
- --font-*: initial;
95
- --font-mono: var(--geist-mono);
96
-
97
- --ease-*: initial;
98
- --ease-in-quad: var(--ease-in-quad);
99
- --ease-in-cubic: var(--ease-in-cubic);
100
- --ease-in-quart: var(--ease-in-quart);
101
- --ease-in-quint: var(--ease-in-quint);
102
- --ease-in-expo: var(--ease-in-expo);
103
- --ease-in-circ: var(--ease-in-circ);
104
- --ease-out-quad: var(--ease-out-quad);
105
- --ease-out-cubic: var(--ease-out-cubic);
106
- --ease-out-quart: var(--ease-out-quart);
107
- --ease-out-quint: var(--ease-out-quint);
108
- --ease-out-expo: var(--ease-out-expo);
109
- --ease-out-circ: var(--ease-out-circ);
110
- --ease-in-out-quad: var(--ease-in-out-quad);
111
- --ease-in-out-cubic: var(--ease-in-out-cubic);
112
- --ease-in-out-quart: var(--ease-in-out-quart);
113
- --ease-in-out-quint: var(--ease-in-out-quint);
114
- --ease-in-out-expo: var(--ease-in-out-expo);
115
- --ease-in-out-circ: var(--ease-in-out-circ);
116
- --ease-gleasing: var(--ease-gleasing);
117
- }
118
-
119
- [data-theme="light"] {
120
- --color-primary: #ffffff;
121
- --color-secondary: #000000;
122
- --color-contrast: #ff4d00;
123
- }
124
-
125
- [data-theme="dark"] {
126
- --color-primary: #000000;
127
- --color-secondary: #ffffff;
128
- --color-contrast: #ff4d00;
129
- }
130
-
131
- @utility test-mono {
132
- font-family: var(--geist-mono);
133
- font-size: 20px;
134
- font-style: normal;
135
- font-weight: 400;
136
- letter-spacing: 0;
137
- line-height: 90%;
138
-
139
- @variant desktop {
140
- font-size: 24px;
141
- }
142
- }
143
-
144
- @utility desktop-only {
145
- @media (--mobile-only) {
146
- display: none !important;
147
- }
148
- }
149
-
150
- @utility mobile-only {
151
- @media (--tablet) {
152
- display: none !important;
153
- }
154
- }
155
-
156
- @utility b-grid {
157
- column-gap: var(--gap);
158
- display: grid;
159
- grid-template-columns: repeat(var(--columns), minmax(0, 1fr));
160
- }
161
-
162
- @utility b-layout-block {
163
- margin-inline: auto;
164
- width: calc(100% - 2 * var(--safe));
165
- }
166
-
167
- @utility b-layout-block-inner {
168
- padding-inline: var(--safe);
169
- width: 100%;
170
- }
171
-
172
- @utility b-layout-grid {
173
- @apply b-layout-block b-grid;
174
- }
175
-
176
- @utility b-layout-grid-inner {
177
- @apply b-layout-block-inner b-grid;
178
- }
179
-
180
- @custom-variant light (&:where([data-theme="light"], [data-theme="light"] *));
181
- @custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
182
-
183
1
  /***
184
2
  The new CSS reset - version 1.11.3 (last updated 25.08.2024)
185
3
  GitHub page: https://github.com/elad2412/the-new-css-reset
186
4
  ***/
187
5
 
188
6
  *:where(
189
- :not(
190
- html,
191
- iframe,
192
- canvas,
193
- img,
194
- svg,
195
- video,
196
- audio,
197
- dialog,
198
- vercel-live-feedback,
199
- nextjs-portal,
200
- :where(select, option)
201
- ):not(svg *, symbol *)
202
- ) {
7
+ :not(
8
+ html,
9
+ iframe,
10
+ canvas,
11
+ img,
12
+ svg,
13
+ video,
14
+ audio,
15
+ dialog,
16
+ vercel-live-feedback,
17
+ nextjs-portal,
18
+ :where(select, option)
19
+ ):not(svg *, symbol *)
20
+ ) {
203
21
  all: unset;
204
22
  display: revert;
205
23
  }
@@ -375,6 +193,8 @@ button {
375
193
 
376
194
  html.screenshot {
377
195
  *:not(:has(canvas), canvas, :has(#orchestra), #orchestra, #orchestra *) {
196
+ /* biome-ignore lint/complexity/noImportantStyles: needs to override any inline
197
+ opacity for screenshot mode */
378
198
  opacity: 0 !important;
379
199
  }
380
200
  }
@@ -0,0 +1,3 @@
1
+ @import "tailwindcss/utilities.css";
2
+ @import "./tokens.css";
3
+ @import "./global.css";
@@ -0,0 +1,182 @@
1
+ @custom-media --hover (hover: hover);
2
+ @custom-media --reduced-motion (prefers-reduced-motion: reduce);
3
+ @custom-media --mobile-only (width < 768px);
4
+ @custom-media --tablet (width >= 768px);
5
+ @custom-media --tablet-lg (width >= 1024px);
6
+ @custom-media --desktop (width >= 1440px);
7
+ @custom-media --desktop-large (width >= 1920px);
8
+
9
+ :root {
10
+ --device-width: 640;
11
+ --device-height: 650;
12
+ --columns: 4;
13
+ --gap: 16px;
14
+ --safe: 16px;
15
+ --header-height: 58px;
16
+ --layout-width: calc(100vw - (2 * var(--safe)));
17
+ --column-width: calc(
18
+ (var(--layout-width) - (var(--columns) - 1) * var(--gap)) /
19
+ var(--columns)
20
+ );
21
+ --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
22
+ --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
23
+ --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
24
+ --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
25
+ --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
26
+ --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
27
+ --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
28
+ --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
29
+ --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
30
+ --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
31
+ --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
32
+ --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
33
+ --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
34
+ --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
35
+ --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
36
+ --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
37
+ --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
38
+ --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
39
+ --ease-gleasing: cubic-bezier(0.4, 0, 0, 1);
40
+ --color-black: #000000;
41
+ --color-white: #ffffff;
42
+ --color-orange: #ff4d00;
43
+ --color-blue: #487cff;
44
+ --color-green: #00ff9b;
45
+ --color-violet: #f101a5;
46
+ --color-pink: #ff73a6;
47
+ --color-gray: #666666;
48
+
49
+ @variant desktop {
50
+ --device-width: 1440;
51
+ --device-height: 816;
52
+ --columns: 12;
53
+ --header-height: 98px;
54
+ }
55
+ }
56
+
57
+ @theme {
58
+ --breakpoint-*: initial;
59
+ --breakpoint-desktop-large: 1920px;
60
+ --breakpoint-desktop: 1440px;
61
+ --breakpoint-tablet-lg: 1024px;
62
+ --breakpoint-tablet: 768px;
63
+ --breakpoint-mobile: 640px;
64
+
65
+ --color-*: initial;
66
+ --color-primary: #ffffff;
67
+ --color-secondary: #000000;
68
+ --color-contrast: #ff4d00;
69
+ --color-black: #000000;
70
+ --color-white: #ffffff;
71
+ --color-orange: #ff4d00;
72
+ --color-blue: #487cff;
73
+ --color-green: #00ff9b;
74
+ --color-violet: #f101a5;
75
+ --color-pink: #ff73a6;
76
+ --color-gray: #666666;
77
+ --color-gray-50: #f5f5f5;
78
+ --color-gray-100: #e0e0e0;
79
+ --color-gray-200: #c2c2c2;
80
+ --color-gray-300: #a3a3a3;
81
+ --color-gray-400: #858585;
82
+ --color-gray-500: #666666;
83
+ --color-gray-600: #4d4d4d;
84
+ --color-gray-700: #333333;
85
+ --color-gray-800: #1a1a1a;
86
+
87
+ --spacing: 0.25rem;
88
+ --spacing-0: 0;
89
+ --spacing-safe: var(--safe);
90
+ --spacing-gap: var(--gap);
91
+ --spacing-header-height: var(--header-height);
92
+
93
+ --font-*: initial;
94
+ --font-mono: var(--geist-mono);
95
+
96
+ --ease-*: initial;
97
+ --ease-in-quad: var(--ease-in-quad);
98
+ --ease-in-cubic: var(--ease-in-cubic);
99
+ --ease-in-quart: var(--ease-in-quart);
100
+ --ease-in-quint: var(--ease-in-quint);
101
+ --ease-in-expo: var(--ease-in-expo);
102
+ --ease-in-circ: var(--ease-in-circ);
103
+ --ease-out-quad: var(--ease-out-quad);
104
+ --ease-out-cubic: var(--ease-out-cubic);
105
+ --ease-out-quart: var(--ease-out-quart);
106
+ --ease-out-quint: var(--ease-out-quint);
107
+ --ease-out-expo: var(--ease-out-expo);
108
+ --ease-out-circ: var(--ease-out-circ);
109
+ --ease-in-out-quad: var(--ease-in-out-quad);
110
+ --ease-in-out-cubic: var(--ease-in-out-cubic);
111
+ --ease-in-out-quart: var(--ease-in-out-quart);
112
+ --ease-in-out-quint: var(--ease-in-out-quint);
113
+ --ease-in-out-expo: var(--ease-in-out-expo);
114
+ --ease-in-out-circ: var(--ease-in-out-circ);
115
+ --ease-gleasing: var(--ease-gleasing);
116
+ }
117
+
118
+ [data-theme="light"] {
119
+ --color-primary: #ffffff;
120
+ --color-secondary: #000000;
121
+ --color-contrast: #ff4d00;
122
+ }
123
+
124
+ [data-theme="dark"] {
125
+ --color-primary: #000000;
126
+ --color-secondary: #ffffff;
127
+ --color-contrast: #ff4d00;
128
+ }
129
+
130
+ @utility test-mono {
131
+ font-family: var(--geist-mono);
132
+ font-size: 20px;
133
+ font-style: normal;
134
+ font-weight: 400;
135
+ letter-spacing: 0;
136
+ line-height: 90%;
137
+
138
+ @variant desktop {
139
+ font-size: 24px;
140
+ }
141
+ }
142
+
143
+ @utility desktop-only {
144
+ @media (--mobile-only) {
145
+ /* biome-ignore lint/complexity/noImportantStyles: utility class must override inline/component styles */
146
+ display: none !important;
147
+ }
148
+ }
149
+
150
+ @utility mobile-only {
151
+ @media (--tablet) {
152
+ /* biome-ignore lint/complexity/noImportantStyles: utility class must override inline/component styles */
153
+ display: none !important;
154
+ }
155
+ }
156
+
157
+ @utility b-grid {
158
+ column-gap: var(--gap);
159
+ display: grid;
160
+ grid-template-columns: repeat(var(--columns), minmax(0, 1fr));
161
+ }
162
+
163
+ @utility b-layout-block {
164
+ margin-inline: auto;
165
+ width: calc(100% - 2 * var(--safe));
166
+ }
167
+
168
+ @utility b-layout-block-inner {
169
+ padding-inline: var(--safe);
170
+ width: 100%;
171
+ }
172
+
173
+ @utility b-layout-grid {
174
+ @apply b-layout-block b-grid;
175
+ }
176
+
177
+ @utility b-layout-grid-inner {
178
+ @apply b-layout-block-inner b-grid;
179
+ }
180
+
181
+ @custom-variant light (&:where([data-theme="light"], [data-theme="light"] *));
182
+ @custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));