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.
- package/dist/{helpers/add → application/add-hooks}/index.d.ts +4 -4
- package/dist/application/add-hooks/index.d.ts.map +1 -0
- package/dist/{helpers/add → application/add-hooks}/index.js +22 -35
- package/dist/application/add-hooks/index.js.map +1 -0
- package/dist/{utils → application/add-integration}/format-results.d.ts +1 -6
- package/dist/application/add-integration/format-results.d.ts.map +1 -0
- package/dist/{utils → application/add-integration}/format-results.js +1 -6
- package/dist/application/add-integration/format-results.js.map +1 -0
- package/dist/{helpers/integrate → application/add-integration}/index.d.ts +2 -1
- package/dist/application/add-integration/index.d.ts.map +1 -0
- package/dist/{helpers/integrate → application/add-integration}/index.js +46 -41
- package/dist/application/add-integration/index.js.map +1 -0
- package/dist/application/create-project/build-context.d.ts +9 -0
- package/dist/application/create-project/build-context.d.ts.map +1 -0
- package/dist/application/create-project/build-context.js +13 -0
- package/dist/application/create-project/build-context.js.map +1 -0
- package/dist/application/create-project/index.d.ts +44 -0
- package/dist/application/create-project/index.d.ts.map +1 -0
- package/dist/application/create-project/index.js +70 -0
- package/dist/application/create-project/index.js.map +1 -0
- package/dist/application/create-project/map-selection-to-registry.d.ts +3 -0
- package/dist/application/create-project/map-selection-to-registry.d.ts.map +1 -0
- package/dist/application/create-project/map-selection-to-registry.js +30 -0
- package/dist/application/create-project/map-selection-to-registry.js.map +1 -0
- package/dist/application/create-project/resolve-selection.d.ts +15 -0
- package/dist/application/create-project/resolve-selection.d.ts.map +1 -0
- package/dist/application/create-project/resolve-selection.js +11 -0
- package/dist/application/create-project/resolve-selection.js.map +1 -0
- package/dist/{helpers/skills → application/install-skills}/index.d.ts +1 -1
- package/dist/application/install-skills/index.d.ts.map +1 -0
- package/dist/{helpers/skills → application/install-skills}/index.js +31 -44
- package/dist/application/install-skills/index.js.map +1 -0
- package/dist/{utils/detect-project.d.ts → application/shared/project-detection.d.ts} +8 -15
- package/dist/application/shared/project-detection.d.ts.map +1 -0
- package/dist/{utils/detect-project.js → application/shared/project-detection.js} +8 -24
- package/dist/application/shared/project-detection.js.map +1 -0
- package/dist/core/create/build-plan.d.ts +8 -0
- package/dist/core/create/build-plan.d.ts.map +1 -0
- package/dist/core/create/build-plan.js +89 -0
- package/dist/core/create/build-plan.js.map +1 -0
- package/dist/core/create/execute-plan.d.ts +23 -0
- package/dist/core/create/execute-plan.d.ts.map +1 -0
- package/dist/core/create/execute-plan.js +23 -0
- package/dist/core/create/execute-plan.js.map +1 -0
- package/dist/core/create/internal-ids.d.ts +23 -0
- package/dist/core/create/internal-ids.d.ts.map +1 -0
- package/dist/core/create/internal-ids.js +36 -0
- package/dist/core/create/internal-ids.js.map +1 -0
- package/dist/core/create/registry.d.ts +12 -0
- package/dist/core/create/registry.d.ts.map +1 -0
- package/dist/core/create/registry.js +33 -0
- package/dist/core/create/registry.js.map +1 -0
- package/dist/core/create/types.d.ts +96 -0
- package/dist/core/create/types.d.ts.map +1 -0
- package/dist/core/create/types.js +2 -0
- package/dist/core/create/types.js.map +1 -0
- package/dist/domain/agents.d.ts +61 -0
- package/dist/domain/agents.d.ts.map +1 -0
- package/dist/domain/agents.js +35 -0
- package/dist/domain/agents.js.map +1 -0
- package/dist/domain/animations.d.ts +20 -0
- package/dist/domain/animations.d.ts.map +1 -0
- package/dist/domain/animations.js +13 -0
- package/dist/domain/animations.js.map +1 -0
- package/dist/domain/cms.d.ts +24 -0
- package/dist/domain/cms.d.ts.map +1 -0
- package/dist/domain/cms.js +13 -0
- package/dist/domain/cms.js.map +1 -0
- package/dist/domain/hooks.d.ts +67 -0
- package/dist/domain/hooks.d.ts.map +1 -0
- package/dist/domain/hooks.js +52 -0
- package/dist/domain/hooks.js.map +1 -0
- package/dist/domain/skills.d.ts +70 -0
- package/dist/domain/skills.d.ts.map +1 -0
- package/dist/domain/skills.js +84 -0
- package/dist/domain/skills.js.map +1 -0
- package/dist/domain/templates.d.ts +51 -0
- package/dist/domain/templates.d.ts.map +1 -0
- package/dist/domain/templates.js +27 -0
- package/dist/domain/templates.js.map +1 -0
- package/dist/index.js +124 -115
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/agents/register-sanity-mcp.d.ts +12 -0
- package/dist/infrastructure/agents/register-sanity-mcp.d.ts.map +1 -0
- package/dist/infrastructure/agents/register-sanity-mcp.js +153 -0
- package/dist/infrastructure/agents/register-sanity-mcp.js.map +1 -0
- package/dist/infrastructure/create/apply-copy-paths.d.ts +3 -0
- package/dist/infrastructure/create/apply-copy-paths.d.ts.map +1 -0
- package/dist/infrastructure/create/apply-copy-paths.js +12 -0
- package/dist/infrastructure/create/apply-copy-paths.js.map +1 -0
- package/dist/infrastructure/create/apply-merge-paths.d.ts +3 -0
- package/dist/infrastructure/create/apply-merge-paths.d.ts.map +1 -0
- package/dist/infrastructure/create/apply-merge-paths.js +17 -0
- package/dist/infrastructure/create/apply-merge-paths.js.map +1 -0
- package/dist/infrastructure/create/apply-package-json.d.ts +8 -0
- package/dist/infrastructure/create/apply-package-json.d.ts.map +1 -0
- package/dist/infrastructure/create/apply-package-json.js +46 -0
- package/dist/infrastructure/create/apply-package-json.js.map +1 -0
- package/dist/infrastructure/create/copy-template.d.ts +10 -0
- package/dist/infrastructure/create/copy-template.d.ts.map +1 -0
- package/dist/infrastructure/create/copy-template.js.map +1 -0
- package/dist/infrastructure/create/executor.d.ts +3 -0
- package/dist/infrastructure/create/executor.d.ts.map +1 -0
- package/dist/infrastructure/create/executor.js +21 -0
- package/dist/infrastructure/create/executor.js.map +1 -0
- package/dist/{helpers/create/init-git.d.ts → infrastructure/create/init-git-repo.d.ts} +2 -3
- package/dist/infrastructure/create/init-git-repo.d.ts.map +1 -0
- package/dist/{helpers/create/init-git.js → infrastructure/create/init-git-repo.js} +1 -4
- package/dist/infrastructure/create/init-git-repo.js.map +1 -0
- package/dist/{helpers/create/install.d.ts → infrastructure/create/install-dependencies.d.ts} +1 -1
- package/dist/infrastructure/create/install-dependencies.d.ts.map +1 -0
- package/dist/{helpers/create/install.js → infrastructure/create/install-dependencies.js} +1 -1
- package/dist/infrastructure/create/install-dependencies.js.map +1 -0
- package/dist/infrastructure/create/lifecycle-registry.d.ts +3 -0
- package/dist/infrastructure/create/lifecycle-registry.d.ts.map +1 -0
- package/dist/infrastructure/create/lifecycle-registry.js +38 -0
- package/dist/infrastructure/create/lifecycle-registry.js.map +1 -0
- package/dist/infrastructure/create/merge-registry.d.ts +3 -0
- package/dist/infrastructure/create/merge-registry.d.ts.map +1 -0
- package/dist/infrastructure/create/merge-registry.js +27 -0
- package/dist/infrastructure/create/merge-registry.js.map +1 -0
- package/dist/infrastructure/create/rename-files.d.ts.map +1 -0
- package/dist/infrastructure/create/rename-files.js.map +1 -0
- package/dist/{helpers → infrastructure}/create/setup-agent.d.ts +9 -7
- package/dist/infrastructure/create/setup-agent.d.ts.map +1 -0
- package/dist/infrastructure/create/setup-agent.js +77 -0
- package/dist/infrastructure/create/setup-agent.js.map +1 -0
- package/dist/infrastructure/create/setup-sanity.d.ts.map +1 -0
- package/dist/{helpers → infrastructure}/create/setup-sanity.js +1 -19
- package/dist/infrastructure/create/setup-sanity.js.map +1 -0
- package/dist/infrastructure/integrations/inject-integration.d.ts +9 -0
- package/dist/infrastructure/integrations/inject-integration.d.ts.map +1 -0
- package/dist/{helpers/integrate/merge-orchestrator.js → infrastructure/integrations/inject-integration.js} +26 -38
- package/dist/infrastructure/integrations/inject-integration.js.map +1 -0
- package/dist/modules/features/agents/index.d.ts +3 -0
- package/dist/modules/features/agents/index.d.ts.map +1 -0
- package/dist/modules/features/agents/index.js +4 -0
- package/dist/modules/features/agents/index.js.map +1 -0
- package/dist/modules/features/agents/shared.d.ts +4 -0
- package/dist/modules/features/agents/shared.d.ts.map +1 -0
- package/dist/modules/features/agents/shared.js +21 -0
- package/dist/modules/features/agents/shared.js.map +1 -0
- package/dist/{configs/animations.d.ts → modules/features/animation/config.d.ts} +1 -1
- package/dist/modules/features/animation/config.d.ts.map +1 -0
- package/dist/{configs/animations.js → modules/features/animation/config.js} +1 -1
- package/dist/modules/features/animation/config.js.map +1 -0
- package/dist/modules/features/animation/gsap.d.ts +3 -0
- package/dist/modules/features/animation/gsap.d.ts.map +1 -0
- package/dist/modules/features/animation/gsap.js +16 -0
- package/dist/modules/features/animation/gsap.js.map +1 -0
- package/dist/modules/features/animation/index.d.ts +3 -0
- package/dist/modules/features/animation/index.d.ts.map +1 -0
- package/dist/modules/features/animation/index.js +4 -0
- package/dist/modules/features/animation/index.js.map +1 -0
- package/dist/modules/features/animation/motion.d.ts +3 -0
- package/dist/modules/features/animation/motion.d.ts.map +1 -0
- package/dist/modules/features/animation/motion.js +16 -0
- package/dist/modules/features/animation/motion.js.map +1 -0
- package/dist/modules/features/cms/index.d.ts +3 -0
- package/dist/modules/features/cms/index.d.ts.map +1 -0
- package/dist/modules/features/cms/index.js +7 -0
- package/dist/modules/features/cms/index.js.map +1 -0
- package/dist/modules/features/cms/sanity/config.d.ts.map +1 -0
- package/dist/{helpers/integrate → modules/features/cms}/sanity/config.js +3 -2
- package/dist/modules/features/cms/sanity/config.js.map +1 -0
- package/dist/modules/features/cms/sanity/index.d.ts +3 -0
- package/dist/modules/features/cms/sanity/index.d.ts.map +1 -0
- package/dist/modules/features/cms/sanity/index.js +61 -0
- package/dist/modules/features/cms/sanity/index.js.map +1 -0
- package/dist/{helpers/integrate/sanity/mergers/check-integration-merger.d.ts → modules/features/cms/sanity/mergers/check-integration.d.ts} +1 -1
- package/dist/modules/features/cms/sanity/mergers/check-integration.d.ts.map +1 -0
- package/dist/{helpers/integrate/sanity/mergers/check-integration-merger.js → modules/features/cms/sanity/mergers/check-integration.js} +1 -1
- package/dist/modules/features/cms/sanity/mergers/check-integration.js.map +1 -0
- package/dist/{helpers/integrate/sanity/mergers/layout-merger.d.ts → modules/features/cms/sanity/mergers/layout.d.ts} +1 -1
- package/dist/modules/features/cms/sanity/mergers/layout.d.ts.map +1 -0
- package/dist/{helpers/integrate/sanity/mergers/layout-merger.js → modules/features/cms/sanity/mergers/layout.js} +1 -1
- package/dist/modules/features/cms/sanity/mergers/layout.js.map +1 -0
- package/dist/modules/features/cms/sanity/mergers/sitemap.d.ts +13 -0
- package/dist/modules/features/cms/sanity/mergers/sitemap.d.ts.map +1 -0
- package/dist/modules/features/cms/sanity/mergers/sitemap.js +92 -0
- package/dist/modules/features/cms/sanity/mergers/sitemap.js.map +1 -0
- package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts +14 -0
- package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts.map +1 -0
- package/dist/modules/features/cms/sanity-pagebuilder/config.js +44 -0
- package/dist/modules/features/cms/sanity-pagebuilder/config.js.map +1 -0
- package/dist/modules/features/cms/sanity-pagebuilder/index.d.ts +3 -0
- package/dist/modules/features/cms/sanity-pagebuilder/index.d.ts.map +1 -0
- package/dist/modules/features/cms/sanity-pagebuilder/index.js +46 -0
- package/dist/modules/features/cms/sanity-pagebuilder/index.js.map +1 -0
- package/dist/modules/features/hooks/factory.d.ts +4 -0
- package/dist/modules/features/hooks/factory.d.ts.map +1 -0
- package/dist/modules/features/hooks/factory.js +26 -0
- package/dist/modules/features/hooks/factory.js.map +1 -0
- package/dist/modules/features/hooks/index.d.ts +3 -0
- package/dist/modules/features/hooks/index.d.ts.map +1 -0
- package/dist/modules/features/hooks/index.js +4 -0
- package/dist/modules/features/hooks/index.js.map +1 -0
- package/dist/modules/presets/index.d.ts +3 -0
- package/dist/modules/presets/index.d.ts.map +1 -0
- package/dist/modules/presets/index.js +11 -0
- package/dist/modules/presets/index.js.map +1 -0
- package/dist/modules/presets/next-default.d.ts +3 -0
- package/dist/modules/presets/next-default.d.ts.map +1 -0
- package/dist/modules/presets/next-default.js +9 -0
- package/dist/modules/presets/next-default.js.map +1 -0
- package/dist/modules/presets/next-experiments.d.ts +3 -0
- package/dist/modules/presets/next-experiments.d.ts.map +1 -0
- package/dist/modules/presets/next-experiments.js +9 -0
- package/dist/modules/presets/next-experiments.js.map +1 -0
- package/dist/modules/presets/next-pagebuilder.d.ts +3 -0
- package/dist/modules/presets/next-pagebuilder.d.ts.map +1 -0
- package/dist/modules/presets/next-pagebuilder.js +10 -0
- package/dist/modules/presets/next-pagebuilder.js.map +1 -0
- package/dist/modules/presets/next-webgl.d.ts +3 -0
- package/dist/modules/presets/next-webgl.d.ts.map +1 -0
- package/dist/modules/presets/next-webgl.js +9 -0
- package/dist/modules/presets/next-webgl.js.map +1 -0
- package/dist/paths.d.ts +7 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +8 -2
- package/dist/paths.js.map +1 -1
- package/index.js +2 -2
- package/package.json +11 -4
- package/src/modules/features/cms/sanity/files/.knip.json +8 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/blog/[slug]/route.ts +3 -4
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/revalidate/route.ts +1 -4
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/blog/[slug]/page.tsx +8 -9
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/layout.tsx +2 -2
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/sitemap.md/route.ts +18 -29
- package/src/modules/features/cms/sanity/files/app/sitemap.xml/route.ts +51 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/env.ts +2 -4
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/queries.ts +0 -42
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/index.ts +1 -1
- package/src/modules/features/cms/sanity/files/lib/scripts/copy-sanity-mcp.ts +23 -0
- package/src/modules/features/cms/sanity/files/lib/scripts/generate-page.ts +297 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/json-ld.tsx +1 -6
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/metadata.ts +2 -2
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/url.ts +4 -2
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/proxy.ts +11 -11
- package/src/template-hooks/use-device-perf.ts +27 -17
- package/src/templates/next-default/.env.example +3 -3
- package/src/templates/next-default/.vscode/extensions.json +1 -5
- package/src/templates/next-default/.vscode/settings.json +1 -1
- package/src/templates/next-default/.zed/settings.json +47 -0
- package/src/templates/next-default/README.md +7 -6
- package/src/templates/next-default/_gitignore +1 -3
- package/src/templates/next-default/app/layout.tsx +21 -35
- package/src/templates/next-default/app/robots.ts +3 -4
- package/src/templates/next-default/app/sitemap.xml/route.ts +29 -29
- package/src/templates/next-default/biome.json +9 -2
- package/src/templates/next-default/components/ui/image/index.tsx +2 -1
- package/src/templates/next-default/components/ui/link/index.tsx +35 -35
- package/src/templates/next-default/lefthook.yml +25 -0
- package/src/templates/next-default/lib/README.md +8 -4
- package/src/templates/next-default/lib/hooks/use-media.ts +6 -3
- package/src/templates/next-default/lib/scripts/dev.ts +32 -0
- package/src/templates/next-default/lib/styles/README.md +13 -0
- package/src/templates/next-default/lib/styles/fonts.ts +20 -0
- package/src/templates/next-default/lib/styles/global.css +15 -196
- package/src/templates/next-default/lib/styles/index.css +3 -0
- package/src/templates/next-default/lib/styles/tokens.css +182 -0
- package/src/templates/next-default/lib/utils/README.md +40 -0
- package/src/templates/next-default/lib/utils/easings.ts +240 -0
- package/src/templates/next-default/lib/utils/fetch.ts +84 -0
- package/src/templates/next-default/lib/utils/global-css.d.ts +1 -0
- package/src/templates/next-default/lib/utils/json-ld.tsx +70 -68
- package/src/templates/next-default/lib/utils/math.ts +236 -0
- package/src/templates/next-default/lib/utils/metadata.ts +26 -27
- package/src/templates/next-default/lib/utils/strings.ts +246 -0
- package/src/templates/next-default/lib/utils/types.d.ts +15 -0
- package/src/templates/next-default/lib/utils/url.ts +8 -5
- package/src/templates/next-default/lib/utils/viewport.ts +199 -0
- package/src/templates/next-default/package.json +12 -7
- package/src/templates/next-default/svg.d.ts +1 -0
- package/src/templates/next-experiments/.env.example +3 -3
- package/src/templates/next-experiments/.knip.json +3 -0
- package/src/templates/next-experiments/.vscode/extensions.json +1 -5
- package/src/templates/next-experiments/.vscode/settings.json +1 -1
- package/src/templates/next-experiments/.zed/settings.json +47 -0
- package/src/templates/next-experiments/README.md +7 -6
- package/src/templates/next-experiments/_gitignore +1 -3
- package/src/templates/next-experiments/app/layout.tsx +21 -35
- package/src/templates/next-experiments/app/robots.ts +5 -2
- package/src/templates/next-experiments/app/sitemap.xml/route.ts +51 -0
- package/src/templates/next-experiments/biome.json +4 -2
- package/src/templates/next-experiments/components/layout/navigation-menu.tsx +1 -1
- package/src/templates/next-experiments/components/layout/wrapper/index.tsx +6 -6
- package/src/templates/next-experiments/components/ui/image/index.tsx +33 -33
- package/src/templates/next-experiments/lib/README.md +8 -4
- package/src/templates/next-experiments/lib/hooks/use-media.ts +6 -3
- package/src/templates/next-experiments/lib/scripts/dev.ts +32 -0
- package/src/templates/next-experiments/lib/styles/README.md +13 -0
- package/src/templates/next-experiments/lib/styles/fonts.ts +20 -0
- package/src/templates/next-experiments/lib/styles/global.css +16 -196
- package/src/templates/next-experiments/lib/styles/index.css +3 -0
- package/src/templates/next-experiments/lib/styles/tokens.css +182 -0
- package/src/templates/next-experiments/lib/utils/README.md +40 -0
- package/src/templates/next-experiments/lib/utils/easings.ts +240 -0
- package/src/templates/next-experiments/lib/utils/fetch.ts +84 -0
- package/src/templates/next-experiments/lib/utils/global-css.d.ts +1 -0
- package/src/templates/next-experiments/lib/utils/json-ld.tsx +70 -68
- package/src/templates/next-experiments/lib/utils/math.ts +236 -0
- package/src/templates/next-experiments/lib/utils/metadata.ts +26 -27
- package/src/templates/next-experiments/lib/utils/strings.ts +246 -0
- package/src/templates/next-experiments/lib/utils/types.d.ts +15 -0
- package/src/templates/next-experiments/lib/utils/url.ts +8 -5
- package/src/templates/next-experiments/lib/utils/viewport.ts +199 -0
- package/src/templates/next-experiments/package.json +6 -6
- package/src/templates/next-experiments/svg.d.ts +1 -0
- package/src/templates/next-pagebuilder/.vscode/extensions.json +16 -0
- package/src/templates/next-pagebuilder/.vscode/settings.json +105 -0
- package/src/templates/next-pagebuilder/.zed/settings.json +47 -0
- package/src/templates/next-pagebuilder/_gitignore +1 -3
- package/src/templates/next-pagebuilder/app/(content)/[[...slug]]/page.tsx +17 -8
- package/src/templates/next-pagebuilder/app/(content)/layout.tsx +18 -7
- package/src/templates/next-pagebuilder/app/actions/refresh.ts +5 -0
- package/src/templates/next-pagebuilder/app/robots.ts +3 -4
- package/src/templates/next-pagebuilder/biome.json +17 -0
- package/src/templates/next-pagebuilder/components/layout/footer/index.tsx +17 -22
- package/src/templates/next-pagebuilder/components/layout/header/index.tsx +3 -5
- package/src/templates/next-pagebuilder/components/layout/json-ld/index.tsx +11 -10
- package/src/templates/next-pagebuilder/components/layout/wrapper/index.tsx +14 -4
- package/src/templates/next-pagebuilder/components/page-builder/components/article-content/index.tsx +4 -9
- package/src/templates/next-pagebuilder/components/page-builder/components/article-content/related-post-item.tsx +4 -4
- package/src/templates/next-pagebuilder/components/page-builder/components/{post-collection → content-collection}/content-card.tsx +2 -2
- package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/content-filters.tsx +93 -0
- package/src/templates/next-pagebuilder/components/page-builder/components/{post-collection → content-collection}/content-grid.tsx +7 -9
- package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/content-pagination-nav.tsx +71 -0
- package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/index.tsx +219 -0
- package/src/templates/next-pagebuilder/components/page-builder/components/{post-collection → content-collection}/types.ts +7 -4
- package/src/templates/next-pagebuilder/components/page-builder/renderer.tsx +17 -5
- package/src/templates/next-pagebuilder/components/page-builder/types.ts +9 -7
- package/src/templates/next-pagebuilder/components/page-document/index.tsx +19 -4
- package/src/templates/next-pagebuilder/lefthook.yml +25 -0
- package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.types.ts +208 -0
- package/src/templates/next-pagebuilder/lib/styles/global.css +0 -1
- package/src/templates/next-pagebuilder/next.config.ts +1 -0
- package/src/templates/next-pagebuilder/package.json +13 -26
- package/src/templates/next-pagebuilder/postcss.config.mjs +27 -1
- package/src/templates/next-pagebuilder/svg.d.ts +1 -0
- package/src/templates/next-webgl/.env.example +3 -3
- package/src/templates/next-webgl/.vscode/extensions.json +1 -5
- package/src/templates/next-webgl/.vscode/settings.json +1 -1
- package/src/templates/next-webgl/.zed/settings.json +47 -0
- package/src/templates/next-webgl/README.md +7 -6
- package/src/templates/next-webgl/_gitignore +1 -3
- package/src/templates/next-webgl/app/layout.tsx +21 -35
- package/src/templates/next-webgl/app/robots.ts +3 -4
- package/src/templates/next-webgl/app/sitemap.xml/route.ts +29 -29
- package/src/templates/next-webgl/biome.json +9 -2
- package/src/templates/next-webgl/components/ui/image/index.tsx +2 -1
- package/src/templates/next-webgl/components/webgl/components/scene/index.tsx +0 -2
- package/src/templates/next-webgl/lefthook.yml +25 -0
- package/src/templates/next-webgl/lib/README.md +8 -4
- package/src/templates/next-webgl/lib/hooks/use-media.ts +6 -3
- package/src/templates/next-webgl/lib/scripts/dev.ts +32 -0
- package/src/templates/next-webgl/lib/styles/README.md +13 -0
- package/src/templates/next-webgl/lib/styles/fonts.ts +20 -0
- package/src/templates/next-webgl/lib/styles/global.css +16 -196
- package/src/templates/next-webgl/lib/styles/index.css +3 -0
- package/src/templates/next-webgl/lib/styles/tokens.css +182 -0
- package/src/templates/next-webgl/lib/utils/README.md +40 -0
- package/src/templates/next-webgl/lib/utils/easings.ts +240 -0
- package/src/templates/next-webgl/lib/utils/fetch.ts +84 -0
- package/src/templates/next-webgl/lib/utils/global-css.d.ts +1 -0
- package/src/templates/next-webgl/lib/utils/json-ld.tsx +70 -68
- package/src/templates/next-webgl/lib/utils/math.ts +236 -0
- package/src/templates/next-webgl/lib/utils/metadata.ts +26 -27
- package/src/templates/next-webgl/lib/utils/strings.ts +246 -0
- package/src/templates/next-webgl/lib/utils/types.d.ts +15 -0
- package/src/templates/next-webgl/lib/utils/url.ts +8 -5
- package/src/templates/next-webgl/lib/utils/viewport.ts +199 -0
- package/src/templates/next-webgl/package.json +13 -8
- package/src/templates/next-webgl/svg.d.ts +1 -0
- package/src/templates/next-webgl/tsconfig.tsbuildinfo +1 -1
- package/dist/configs/animations.d.ts.map +0 -1
- package/dist/configs/animations.js.map +0 -1
- package/dist/configs/skills.d.ts +0 -27
- package/dist/configs/skills.d.ts.map +0 -1
- package/dist/configs/skills.js +0 -18
- package/dist/configs/skills.js.map +0 -1
- package/dist/configs/skills.json +0 -26
- package/dist/helpers/add/hooks-config.d.ts +0 -22
- package/dist/helpers/add/hooks-config.d.ts.map +0 -1
- package/dist/helpers/add/hooks-config.js +0 -31
- package/dist/helpers/add/hooks-config.js.map +0 -1
- package/dist/helpers/add/index.d.ts.map +0 -1
- package/dist/helpers/add/index.js.map +0 -1
- package/dist/helpers/create/copy-template.d.ts +0 -11
- package/dist/helpers/create/copy-template.d.ts.map +0 -1
- package/dist/helpers/create/copy-template.js.map +0 -1
- package/dist/helpers/create/index.d.ts +0 -24
- package/dist/helpers/create/index.d.ts.map +0 -1
- package/dist/helpers/create/index.js +0 -99
- package/dist/helpers/create/index.js.map +0 -1
- package/dist/helpers/create/init-git.d.ts.map +0 -1
- package/dist/helpers/create/init-git.js.map +0 -1
- package/dist/helpers/create/install.d.ts.map +0 -1
- package/dist/helpers/create/install.js.map +0 -1
- package/dist/helpers/create/rename-files.d.ts.map +0 -1
- package/dist/helpers/create/rename-files.js.map +0 -1
- package/dist/helpers/create/setup-agent.d.ts.map +0 -1
- package/dist/helpers/create/setup-agent.js +0 -91
- package/dist/helpers/create/setup-agent.js.map +0 -1
- package/dist/helpers/create/setup-sanity.d.ts.map +0 -1
- package/dist/helpers/create/setup-sanity.js.map +0 -1
- package/dist/helpers/create/update-package.d.ts +0 -20
- package/dist/helpers/create/update-package.d.ts.map +0 -1
- package/dist/helpers/create/update-package.js +0 -97
- package/dist/helpers/create/update-package.js.map +0 -1
- package/dist/helpers/integrate/index.d.ts.map +0 -1
- package/dist/helpers/integrate/index.js.map +0 -1
- package/dist/helpers/integrate/merge-config.d.ts +0 -21
- package/dist/helpers/integrate/merge-config.d.ts.map +0 -1
- package/dist/helpers/integrate/merge-config.js +0 -42
- package/dist/helpers/integrate/merge-config.js.map +0 -1
- package/dist/helpers/integrate/merge-orchestrator.d.ts +0 -10
- package/dist/helpers/integrate/merge-orchestrator.d.ts.map +0 -1
- package/dist/helpers/integrate/merge-orchestrator.js.map +0 -1
- package/dist/helpers/integrate/sanity/config.d.ts.map +0 -1
- package/dist/helpers/integrate/sanity/config.js.map +0 -1
- package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +0 -1
- package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +0 -1
- package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +0 -1
- package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +0 -1
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +0 -11
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +0 -1
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js +0 -133
- package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +0 -1
- package/dist/helpers/skills/index.d.ts.map +0 -1
- package/dist/helpers/skills/index.js.map +0 -1
- package/dist/utils/detect-project.d.ts.map +0 -1
- package/dist/utils/detect-project.js.map +0 -1
- package/dist/utils/format-results.d.ts.map +0 -1
- package/dist/utils/format-results.js.map +0 -1
- package/src/helpers/integrate/sanity/files/lib/integrations/sanity/WEBHOOK-SETUP.md +0 -74
- package/src/helpers/integrate/sanity/files/lib/integrations/sanity/sitemap.ts +0 -90
- package/src/template-hooks/config.js +0 -32
- package/src/templates/next-default/css.d.ts +0 -1
- package/src/templates/next-default/lib/utils/portable-text-to-markdown.ts +0 -83
- package/src/templates/next-default/tsconfig.tsbuildinfo +0 -1
- package/src/templates/next-experiments/css.d.ts +0 -1
- package/src/templates/next-experiments/lib/utils/portable-text-to-markdown.ts +0 -83
- package/src/templates/next-pagebuilder/app/api/[[...slug]]/route.ts +0 -100
- package/src/templates/next-pagebuilder/app/api/draft-mode/disable/route.ts +0 -7
- package/src/templates/next-pagebuilder/app/api/draft-mode/enable/route.ts +0 -20
- package/src/templates/next-pagebuilder/app/api/revalidate/route.ts +0 -121
- package/src/templates/next-pagebuilder/app/sitemap.md/route.ts +0 -124
- package/src/templates/next-pagebuilder/app/studio/[[...tool]]/page.tsx +0 -8
- package/src/templates/next-pagebuilder/components/page-builder/components/post-collection/index.tsx +0 -28
- package/src/templates/next-pagebuilder/components/sanity/draft-mode-toggle.tsx +0 -27
- package/src/templates/next-pagebuilder/components/sanity/rich-text.tsx +0 -87
- package/src/templates/next-pagebuilder/components/sanity/visual-editing.tsx +0 -27
- package/src/templates/next-pagebuilder/components/ui/sanity-image/index.tsx +0 -41
- package/src/templates/next-pagebuilder/lib/integrations/check-integration.ts +0 -5
- package/src/templates/next-pagebuilder/lib/integrations/sanity/client.ts +0 -27
- package/src/templates/next-pagebuilder/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -23
- package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-builder-input.tsx +0 -36
- package/src/templates/next-pagebuilder/lib/integrations/sanity/components/page-category-input.tsx +0 -50
- package/src/templates/next-pagebuilder/lib/integrations/sanity/components/rich-text.tsx +0 -84
- package/src/templates/next-pagebuilder/lib/integrations/sanity/confirm-publish-action.ts +0 -40
- package/src/templates/next-pagebuilder/lib/integrations/sanity/env.ts +0 -34
- package/src/templates/next-pagebuilder/lib/integrations/sanity/fetchers/layout.ts +0 -35
- package/src/templates/next-pagebuilder/lib/integrations/sanity/icons.ts +0 -58
- package/src/templates/next-pagebuilder/lib/integrations/sanity/live/index.tsx +0 -61
- package/src/templates/next-pagebuilder/lib/integrations/sanity/markdown-proxy.config.ts +0 -50
- package/src/templates/next-pagebuilder/lib/integrations/sanity/page-builder-config.ts +0 -132
- package/src/templates/next-pagebuilder/lib/integrations/sanity/page-category.ts +0 -28
- package/src/templates/next-pagebuilder/lib/integrations/sanity/queries.ts +0 -281
- package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.cli.ts +0 -29
- package/src/templates/next-pagebuilder/lib/integrations/sanity/sanity.config.ts +0 -211
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/index.ts +0 -4
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/blog-content.ts +0 -89
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/description.ts +0 -29
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/reusable/hero.ts +0 -28
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/components/singleton/content-collection.ts +0 -45
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/author.ts +0 -70
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/content/blog-category.ts +0 -55
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/index.ts +0 -96
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/company-data.ts +0 -62
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/footer.ts +0 -79
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/layout/navbar.ts +0 -74
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/link.ts +0 -125
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/logo-field.ts +0 -9
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/metadata.ts +0 -68
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/nav-objects.ts +0 -192
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-builder.ts +0 -39
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page-folder.ts +0 -124
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/page.ts +0 -232
- package/src/templates/next-pagebuilder/lib/integrations/sanity/schemas/shared/richText.ts +0 -63
- package/src/templates/next-pagebuilder/lib/integrations/sanity/singletons.ts +0 -44
- package/src/templates/next-pagebuilder/lib/integrations/sanity/structure.ts +0 -453
- package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/image.ts +0 -8
- package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/link.ts +0 -137
- package/src/templates/next-pagebuilder/lib/integrations/sanity/utils/page-builder-markdown.ts +0 -81
- package/src/templates/next-pagebuilder/lib/scripts/sanity-typegen.ts +0 -45
- package/src/templates/next-pagebuilder/lib/utils/json-ld.tsx +0 -213
- package/src/templates/next-pagebuilder/lib/utils/metadata.ts +0 -167
- package/src/templates/next-pagebuilder/lib/utils/sitemap.ts +0 -37
- package/src/templates/next-pagebuilder/proxy.ts +0 -81
- package/src/templates/next-webgl/css.d.ts +0 -1
- package/src/templates/next-webgl/lib/utils/portable-text-to-markdown.ts +0 -83
- package/dist/{helpers → infrastructure}/create/copy-template.js +0 -0
- package/dist/{helpers → infrastructure}/create/rename-files.d.ts +0 -0
- package/dist/{helpers → infrastructure}/create/rename-files.js +0 -0
- package/dist/{helpers → infrastructure}/create/setup-sanity.d.ts +0 -0
- package/dist/{helpers/integrate → modules/features/cms}/sanity/config.d.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/disable/route.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/api/draft-mode/enable/route.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/[[...tool]]/page.tsx +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/app/studio/layout.tsx +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/components/ui/sanity-image/index.tsx +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/README.md +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/check-integration.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/MARKDOWN-PROXY.md +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/README.md +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/client.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/confirm-publish-action.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/live/index.tsx +1 -1
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/markdown-proxy.config.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -0
- package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.config.ts +1 -1
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schema.json +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/structure.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/image.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/integrations/sanity/utils/link.ts +0 -0
- /package/src/{helpers/integrate → modules/features/cms}/sanity/files/lib/utils/portable-text-to-markdown.ts +0 -0
|
@@ -5,10 +5,20 @@ import { memo, useEffect } from "react";
|
|
|
5
5
|
import { create } from "zustand";
|
|
6
6
|
import { useShallow } from "zustand/react/shallow";
|
|
7
7
|
|
|
8
|
-
import { Quality, useAppStore } from "@/stores/use-app-store";
|
|
9
|
-
|
|
10
8
|
import { useBattery } from "./use-battery";
|
|
11
9
|
|
|
10
|
+
export const Quality = {
|
|
11
|
+
LOW: 1,
|
|
12
|
+
MEDIUM: 2,
|
|
13
|
+
HIGH: 3,
|
|
14
|
+
} as const;
|
|
15
|
+
|
|
16
|
+
export type Quality = 1 | 2 | 3;
|
|
17
|
+
|
|
18
|
+
function minQuality(left: Quality, right: Quality): Quality {
|
|
19
|
+
return Math.min(left, right) as Quality;
|
|
20
|
+
}
|
|
21
|
+
|
|
12
22
|
export interface DeviceType {
|
|
13
23
|
browserName: string;
|
|
14
24
|
browserVersion: string;
|
|
@@ -64,12 +74,14 @@ interface UseDeviceStore {
|
|
|
64
74
|
device: DeviceType | null;
|
|
65
75
|
gpu: TierResult | null;
|
|
66
76
|
battery: Battery | null;
|
|
77
|
+
quality: Quality;
|
|
67
78
|
}
|
|
68
79
|
|
|
69
80
|
export const useDevice = create<UseDeviceStore>(() => ({
|
|
70
81
|
device: null,
|
|
71
82
|
gpu: null,
|
|
72
83
|
battery: null,
|
|
84
|
+
quality: Quality.HIGH,
|
|
73
85
|
}));
|
|
74
86
|
|
|
75
87
|
function useSyncDeviceScore(): void {
|
|
@@ -78,55 +90,53 @@ function useSyncDeviceScore(): void {
|
|
|
78
90
|
const batteryData = useDevice(useShallow((state) => state.battery));
|
|
79
91
|
|
|
80
92
|
useEffect(() => {
|
|
81
|
-
let score = Quality.HIGH;
|
|
93
|
+
let score: Quality = Quality.HIGH;
|
|
82
94
|
|
|
83
95
|
if (deviceData) {
|
|
84
96
|
if (deviceData.isMobile) {
|
|
85
|
-
score =
|
|
97
|
+
score = minQuality(score, Quality.LOW);
|
|
86
98
|
} else if (deviceData.isTablet) {
|
|
87
|
-
score =
|
|
99
|
+
score = minQuality(score, Quality.MEDIUM);
|
|
88
100
|
} else if (deviceData.isDesktop) {
|
|
89
|
-
score =
|
|
101
|
+
score = minQuality(score, Quality.HIGH);
|
|
90
102
|
}
|
|
91
103
|
}
|
|
92
104
|
|
|
93
105
|
if (!batteryData) {
|
|
94
106
|
// not battery
|
|
95
|
-
score =
|
|
107
|
+
score = minQuality(score, Quality.HIGH);
|
|
96
108
|
} else {
|
|
97
109
|
// has battery
|
|
98
110
|
if (batteryData.charging) {
|
|
99
111
|
if (batteryData.level > 0.3) {
|
|
100
112
|
// charging and high
|
|
101
|
-
score =
|
|
113
|
+
score = minQuality(score, Quality.HIGH);
|
|
102
114
|
} else {
|
|
103
115
|
// charging but low
|
|
104
|
-
score =
|
|
116
|
+
score = minQuality(score, Quality.LOW);
|
|
105
117
|
}
|
|
106
118
|
} else {
|
|
107
119
|
if (batteryData.level > 0.5) {
|
|
108
120
|
// not charging but high
|
|
109
|
-
score =
|
|
121
|
+
score = minQuality(score, Quality.HIGH);
|
|
110
122
|
} else {
|
|
111
123
|
// not charging and low
|
|
112
|
-
score =
|
|
124
|
+
score = minQuality(score, Quality.LOW);
|
|
113
125
|
}
|
|
114
126
|
}
|
|
115
127
|
}
|
|
116
128
|
|
|
117
129
|
if (gpuData) {
|
|
118
130
|
if (gpuData.tier === 3) {
|
|
119
|
-
score =
|
|
131
|
+
score = minQuality(score, Quality.HIGH);
|
|
120
132
|
} else if (gpuData.tier === 2) {
|
|
121
|
-
score =
|
|
133
|
+
score = minQuality(score, Quality.MEDIUM);
|
|
122
134
|
} else if (gpuData.tier === 1) {
|
|
123
|
-
score =
|
|
135
|
+
score = minQuality(score, Quality.LOW);
|
|
124
136
|
}
|
|
125
137
|
}
|
|
126
138
|
|
|
127
|
-
|
|
128
|
-
qualityConfig: score,
|
|
129
|
-
});
|
|
139
|
+
useDevice.setState({ quality: score });
|
|
130
140
|
}, [deviceData, gpuData, batteryData]);
|
|
131
141
|
}
|
|
132
142
|
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
# CORE (Recommended)
|
|
14
14
|
# ============================================
|
|
15
15
|
|
|
16
|
-
# Base URL (
|
|
17
|
-
#
|
|
18
|
-
#
|
|
16
|
+
# Base URL for your site (used for SEO, canonical URLs, etc.)
|
|
17
|
+
# Development: http://localhost:3000
|
|
18
|
+
# Production: https://your-domain.com
|
|
19
19
|
NEXT_PUBLIC_BASE_URL="http://localhost:3000"
|
|
20
20
|
|
|
21
21
|
# Draft mode secret for preview functionality
|
|
@@ -7,14 +7,10 @@
|
|
|
7
7
|
"bradlc.vscode-tailwindcss",
|
|
8
8
|
"csstools.postcss",
|
|
9
9
|
|
|
10
|
-
// GraphQL (Shopify, etc.)
|
|
11
|
-
"graphql.vscode-graphql-syntax",
|
|
12
|
-
|
|
13
10
|
// Sanity CMS (GROQ syntax + validation)
|
|
14
11
|
"sanity-io.vscode-sanity",
|
|
15
12
|
|
|
16
13
|
// DX Enhancements
|
|
17
|
-
"yoavbls.pretty-ts-errors"
|
|
18
|
-
"waderyan.gitblame"
|
|
14
|
+
"yoavbls.pretty-ts-errors"
|
|
19
15
|
]
|
|
20
16
|
}
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
["cn\\(([^)]*)\\)", "(?:'|\"|`)([^\"'`]*)(?:'|\"|`)"],
|
|
83
83
|
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]
|
|
84
84
|
],
|
|
85
|
-
"tailwindCSS.experimental.configFile": "./lib/styles/
|
|
85
|
+
"tailwindCSS.experimental.configFile": "./lib/styles/css/tailwind.css",
|
|
86
86
|
"tailwindCSS.includeLanguages": {
|
|
87
87
|
"typescriptreact": "html"
|
|
88
88
|
},
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format_on_save": "on",
|
|
3
|
+
"lsp": {
|
|
4
|
+
"vscode-css-language-server": {
|
|
5
|
+
"settings": {
|
|
6
|
+
"css": {
|
|
7
|
+
"lint": {
|
|
8
|
+
"unknownAtRules": "ignore"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"languages": {
|
|
15
|
+
"JavaScript": {
|
|
16
|
+
"language_servers": ["biome", "..."],
|
|
17
|
+
"formatter": { "language_server": { "name": "biome" } },
|
|
18
|
+
"code_actions_on_format": {
|
|
19
|
+
"source.fixAll.biome": true,
|
|
20
|
+
"source.organizeImports.biome": true
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"TypeScript": {
|
|
24
|
+
"formatter": { "language_server": { "name": "biome" } },
|
|
25
|
+
"code_actions_on_format": {
|
|
26
|
+
"source.fixAll.biome": true,
|
|
27
|
+
"source.organizeImports.biome": true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"TSX": {
|
|
31
|
+
"formatter": { "language_server": { "name": "biome" } },
|
|
32
|
+
"code_actions_on_format": {
|
|
33
|
+
"source.fixAll.biome": true,
|
|
34
|
+
"source.organizeImports.biome": true
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"CSS": {
|
|
38
|
+
"formatter": { "language_server": { "name": "biome" } }
|
|
39
|
+
},
|
|
40
|
+
"JSON": {
|
|
41
|
+
"formatter": { "language_server": { "name": "biome" } }
|
|
42
|
+
},
|
|
43
|
+
"JSONC": {
|
|
44
|
+
"formatter": { "language_server": { "name": "biome" } }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -34,16 +34,17 @@ lib/
|
|
|
34
34
|
scripts/
|
|
35
35
|
store/
|
|
36
36
|
styles/
|
|
37
|
+
index.css
|
|
38
|
+
tokens.css
|
|
37
39
|
global.css
|
|
40
|
+
fonts.ts
|
|
38
41
|
cn.ts
|
|
39
42
|
utils/
|
|
40
|
-
metadata.ts
|
|
41
|
-
portable-text-to-markdown.ts
|
|
42
|
-
json-ld.ts
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
## Styling
|
|
46
46
|
|
|
47
|
-
- Import `@/lib/styles/
|
|
48
|
-
- `lib/styles/
|
|
49
|
-
- `lib/styles/
|
|
47
|
+
- Import `@/lib/styles/index.css` once in `app/layout.tsx`.
|
|
48
|
+
- Edit `lib/styles/tokens.css` for theme variables, breakpoints, and custom Tailwind utilities.
|
|
49
|
+
- Edit `lib/styles/global.css` for reset rules and app-wide global styles.
|
|
50
|
+
- `lib/styles/fonts.ts` handles font variables.
|
|
@@ -1,40 +1,26 @@
|
|
|
1
|
-
import type { Metadata, Viewport } from "next"
|
|
2
|
-
import { Geist
|
|
3
|
-
import { type PropsWithChildren, Suspense } from "react"
|
|
4
|
-
import { Link } from "@/components/ui/link"
|
|
5
|
-
import
|
|
6
|
-
import "@/
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
1
|
+
import type { Metadata, Viewport } from "next"
|
|
2
|
+
import { Geist } from "next/font/google"
|
|
3
|
+
import { type PropsWithChildren, Suspense } from "react"
|
|
4
|
+
import { Link } from "@/components/ui/link"
|
|
5
|
+
import { fontsVariable } from "@/lib/styles/fonts"
|
|
6
|
+
import AppData from "@/package.json"
|
|
7
|
+
import "@/lib/styles/index.css"
|
|
8
|
+
import { cn } from "@/lib/styles/cn"
|
|
9
9
|
import {
|
|
10
|
-
JsonLd,
|
|
11
|
-
generateWebSiteJsonLd,
|
|
12
10
|
generateOrganizationJsonLd,
|
|
13
|
-
|
|
11
|
+
generateWebSiteJsonLd,
|
|
12
|
+
JsonLd,
|
|
13
|
+
} from "@/lib/utils/json-ld"
|
|
14
14
|
|
|
15
|
-
const APP_NAME = AppData.name
|
|
16
|
-
const APP_DEFAULT_TITLE = "Basement Starter"
|
|
17
|
-
const APP_TITLE_TEMPLATE = "%s - Basement Starter"
|
|
18
|
-
const APP_DESCRIPTION = AppData.description
|
|
19
|
-
const APP_BASE_URL =
|
|
15
|
+
const APP_NAME = AppData.name
|
|
16
|
+
const APP_DEFAULT_TITLE = "Basement Starter"
|
|
17
|
+
const APP_TITLE_TEMPLATE = "%s - Basement Starter"
|
|
18
|
+
const APP_DESCRIPTION = AppData.description
|
|
19
|
+
const APP_BASE_URL = process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000"
|
|
20
20
|
|
|
21
21
|
const geist = Geist({
|
|
22
22
|
subsets: ["latin"],
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
const mono = Geist_Mono({
|
|
26
|
-
subsets: ["latin"],
|
|
27
|
-
display: "swap",
|
|
28
|
-
variable: "--geist-mono",
|
|
29
|
-
fallback: [
|
|
30
|
-
"ui-monospace",
|
|
31
|
-
"SFMono-Regular",
|
|
32
|
-
"Consolas",
|
|
33
|
-
"Liberation Mono",
|
|
34
|
-
"Menlo",
|
|
35
|
-
"monospace",
|
|
36
|
-
],
|
|
37
|
-
});
|
|
23
|
+
})
|
|
38
24
|
|
|
39
25
|
export const metadata: Metadata = {
|
|
40
26
|
alternates: {
|
|
@@ -87,19 +73,19 @@ export const metadata: Metadata = {
|
|
|
87
73
|
template: APP_TITLE_TEMPLATE,
|
|
88
74
|
},
|
|
89
75
|
},
|
|
90
|
-
}
|
|
76
|
+
}
|
|
91
77
|
|
|
92
78
|
export const viewport: Viewport = {
|
|
93
79
|
colorScheme: "normal",
|
|
94
80
|
themeColor: "#000000",
|
|
95
|
-
}
|
|
81
|
+
}
|
|
96
82
|
|
|
97
83
|
export default async function Layout({ children }: PropsWithChildren) {
|
|
98
84
|
return (
|
|
99
85
|
<html
|
|
100
86
|
lang="en"
|
|
101
87
|
dir="ltr"
|
|
102
|
-
className={cn(
|
|
88
|
+
className={cn(fontsVariable, geist.className)}
|
|
103
89
|
// NOTE: This is due to the data-theme attribute being set which causes hydration errors
|
|
104
90
|
suppressHydrationWarning
|
|
105
91
|
>
|
|
@@ -130,5 +116,5 @@ export default async function Layout({ children }: PropsWithChildren) {
|
|
|
130
116
|
{children}
|
|
131
117
|
</body>
|
|
132
118
|
</html>
|
|
133
|
-
)
|
|
119
|
+
)
|
|
134
120
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { MetadataRoute } from "next"
|
|
2
|
-
import { getBaseUrl } from "@/lib/utils/url";
|
|
1
|
+
import type { MetadataRoute } from "next"
|
|
3
2
|
|
|
4
|
-
const APP_BASE_URL =
|
|
3
|
+
const APP_BASE_URL = process.env.NEXT_PUBLIC_BASE_URL ?? "http://localhost:3000"
|
|
5
4
|
|
|
6
5
|
export default function robots(): MetadataRoute.Robots {
|
|
7
6
|
return {
|
|
@@ -11,5 +10,5 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
11
10
|
disallow: [],
|
|
12
11
|
},
|
|
13
12
|
sitemap: `${APP_BASE_URL}/sitemap.xml`,
|
|
14
|
-
}
|
|
13
|
+
}
|
|
15
14
|
}
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { getBaseUrl } from "@/lib/utils/url"
|
|
1
|
+
import { getBaseUrl } from "@/lib/utils/url"
|
|
2
2
|
|
|
3
|
-
const BASE_URL = getBaseUrl()
|
|
3
|
+
const BASE_URL = getBaseUrl()
|
|
4
4
|
|
|
5
|
-
export const dynamic = "force-dynamic"
|
|
5
|
+
export const dynamic = "force-dynamic"
|
|
6
6
|
|
|
7
7
|
interface SitemapEntry {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
loc: string
|
|
9
|
+
lastmod: string
|
|
10
|
+
changefreq: string
|
|
11
|
+
priority: number
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
function toXml(entries: SitemapEntry[]): string {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const urls = entries
|
|
16
|
+
.map(
|
|
17
|
+
(entry) => `
|
|
18
18
|
<url>
|
|
19
19
|
<loc>${entry.loc}</loc>
|
|
20
20
|
<lastmod>${entry.lastmod}</lastmod>
|
|
21
21
|
<changefreq>${entry.changefreq}</changefreq>
|
|
22
22
|
<priority>${entry.priority}</priority>
|
|
23
|
-
</url
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
</url>`
|
|
24
|
+
)
|
|
25
|
+
.join("")
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
28
28
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">${urls}
|
|
29
|
-
</urlset
|
|
29
|
+
</urlset>`
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
function getStaticEntries(): SitemapEntry[] {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
return [
|
|
34
|
+
{
|
|
35
|
+
loc: BASE_URL,
|
|
36
|
+
lastmod: new Date().toISOString(),
|
|
37
|
+
changefreq: "daily",
|
|
38
|
+
priority: 1,
|
|
39
|
+
},
|
|
40
|
+
]
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export async function GET() {
|
|
44
|
-
|
|
44
|
+
const entries: SitemapEntry[] = getStaticEntries()
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
return new Response(toXml(entries), {
|
|
47
|
+
headers: {
|
|
48
|
+
"Content-Type": "application/xml",
|
|
49
|
+
},
|
|
50
|
+
})
|
|
51
51
|
}
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
},
|
|
96
96
|
"nursery": {
|
|
97
97
|
"useSortedClasses": {
|
|
98
|
+
"fix": "safe",
|
|
98
99
|
"level": "warn",
|
|
99
100
|
"options": {
|
|
100
101
|
"attributes": ["class", "className"],
|
|
@@ -140,6 +141,11 @@
|
|
|
140
141
|
"useTemplate": "warn"
|
|
141
142
|
},
|
|
142
143
|
"suspicious": {
|
|
144
|
+
"noConsole": {
|
|
145
|
+
"fix": "none",
|
|
146
|
+
"level": "warn",
|
|
147
|
+
"options": { "allow": ["warn", "error", "info"] }
|
|
148
|
+
},
|
|
143
149
|
"noDebugger": "warn",
|
|
144
150
|
"noDoubleEquals": "error",
|
|
145
151
|
"noEmptyBlockStatements": "warn",
|
|
@@ -214,11 +220,12 @@
|
|
|
214
220
|
}
|
|
215
221
|
},
|
|
216
222
|
{
|
|
217
|
-
"includes": ["lib/styles/
|
|
223
|
+
"includes": ["lib/styles/tokens.css"],
|
|
218
224
|
"linter": {
|
|
219
225
|
"rules": {
|
|
220
226
|
"suspicious": {
|
|
221
|
-
"noDuplicateCustomProperties": "off"
|
|
227
|
+
"noDuplicateCustomProperties": "off",
|
|
228
|
+
"noUnknownAtRules": "off"
|
|
222
229
|
}
|
|
223
230
|
}
|
|
224
231
|
}
|
|
@@ -167,7 +167,8 @@ export function Image({
|
|
|
167
167
|
}: ImageProps) {
|
|
168
168
|
// Generate responsive sizes if not provided
|
|
169
169
|
const finalSizes =
|
|
170
|
-
sizes ||
|
|
170
|
+
sizes ||
|
|
171
|
+
`(max-width: ${DESKTOP_BREAKPOINT}px) ${mobileSize}, ${desktopSize}`
|
|
171
172
|
|
|
172
173
|
// Early return after hooks
|
|
173
174
|
if (!src) return null
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use client"
|
|
1
|
+
"use client"
|
|
2
2
|
|
|
3
|
-
import NextLink from "next/link"
|
|
4
|
-
import { usePathname } from "next/navigation"
|
|
3
|
+
import NextLink from "next/link"
|
|
4
|
+
import { usePathname } from "next/navigation"
|
|
5
5
|
import {
|
|
6
6
|
type AnchorHTMLAttributes,
|
|
7
7
|
type ComponentProps,
|
|
8
8
|
type MouseEvent,
|
|
9
9
|
useEffect,
|
|
10
10
|
useState,
|
|
11
|
-
} from "react"
|
|
11
|
+
} from "react"
|
|
12
12
|
|
|
13
13
|
// Helper to extract props safe for button elements
|
|
14
14
|
function getButtonProps(props: Record<string, unknown>) {
|
|
@@ -18,8 +18,8 @@ function getButtonProps(props: Record<string, unknown>) {
|
|
|
18
18
|
rel,
|
|
19
19
|
"data-external": _dataExternal,
|
|
20
20
|
...buttonProps
|
|
21
|
-
} = props
|
|
22
|
-
return buttonProps
|
|
21
|
+
} = props
|
|
22
|
+
return buttonProps
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
// Helper to extract props safe for div elements
|
|
@@ -31,8 +31,8 @@ function getDivProps(props: Record<string, unknown>) {
|
|
|
31
31
|
onClick,
|
|
32
32
|
"data-external": _dataExternal,
|
|
33
33
|
...divProps
|
|
34
|
-
} = props
|
|
35
|
-
return divProps
|
|
34
|
+
} = props
|
|
35
|
+
return divProps
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
type CustomLinkProps = Omit<
|
|
@@ -40,10 +40,10 @@ type CustomLinkProps = Omit<
|
|
|
40
40
|
keyof ComponentProps<typeof NextLink> | "href"
|
|
41
41
|
> &
|
|
42
42
|
Omit<ComponentProps<typeof NextLink>, "href"> & {
|
|
43
|
-
href?: string
|
|
44
|
-
onClick?: (e: MouseEvent<HTMLElement>) => void
|
|
45
|
-
scroll?: boolean
|
|
46
|
-
}
|
|
43
|
+
href?: string
|
|
44
|
+
onClick?: (e: MouseEvent<HTMLElement>) => void
|
|
45
|
+
scroll?: boolean
|
|
46
|
+
}
|
|
47
47
|
|
|
48
48
|
export function Link({
|
|
49
49
|
href,
|
|
@@ -52,47 +52,47 @@ export function Link({
|
|
|
52
52
|
scroll = false, // Default to false to prevent scroll restoration warnings with fixed/sticky elements
|
|
53
53
|
...props
|
|
54
54
|
}: CustomLinkProps) {
|
|
55
|
-
const [shouldPrefetch, setShouldPrefetch] = useState(false)
|
|
56
|
-
const [isExternal, setIsExternal] = useState(false)
|
|
57
|
-
const [isActive, setIsActive] = useState(false)
|
|
55
|
+
const [shouldPrefetch, setShouldPrefetch] = useState(false)
|
|
56
|
+
const [isExternal, setIsExternal] = useState(false)
|
|
57
|
+
const [isActive, setIsActive] = useState(false)
|
|
58
58
|
|
|
59
59
|
// Get pathname - deferred to avoid blocking static generation
|
|
60
60
|
// usePathname is safe to call but we defer the active check to useEffect
|
|
61
|
-
const pathname = usePathname()
|
|
61
|
+
const pathname = usePathname()
|
|
62
62
|
|
|
63
63
|
useEffect(() => {
|
|
64
64
|
// Check if this link is active (current page)
|
|
65
65
|
if (href && pathname) {
|
|
66
|
-
setIsActive(pathname === href)
|
|
66
|
+
setIsActive(pathname === href)
|
|
67
67
|
}
|
|
68
|
-
}, [href, pathname])
|
|
68
|
+
}, [href, pathname])
|
|
69
69
|
|
|
70
70
|
useEffect(() => {
|
|
71
71
|
// Skip if no href
|
|
72
|
-
if (!href) return
|
|
72
|
+
if (!href) return
|
|
73
73
|
|
|
74
74
|
// Check if external link
|
|
75
75
|
try {
|
|
76
|
-
const url = new URL(href, window.location.href)
|
|
77
|
-
setIsExternal(url.host !== window.location.host)
|
|
76
|
+
const url = new URL(href, window.location.href)
|
|
77
|
+
setIsExternal(url.host !== window.location.host)
|
|
78
78
|
} catch {
|
|
79
|
-
setIsExternal(false)
|
|
79
|
+
setIsExternal(false)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
// Only prefetch on good connections
|
|
83
83
|
const connection = (
|
|
84
84
|
navigator as Navigator & {
|
|
85
|
-
connection?: { effectiveType: string; saveData: boolean }
|
|
85
|
+
connection?: { effectiveType: string; saveData: boolean }
|
|
86
86
|
}
|
|
87
|
-
).connection
|
|
87
|
+
).connection
|
|
88
88
|
if (connection) {
|
|
89
|
-
const { effectiveType, saveData } = connection
|
|
90
|
-
setShouldPrefetch(effectiveType === "4g" && !saveData)
|
|
89
|
+
const { effectiveType, saveData } = connection
|
|
90
|
+
setShouldPrefetch(effectiveType === "4g" && !saveData)
|
|
91
91
|
} else {
|
|
92
92
|
// Default to prefetching if API not available
|
|
93
|
-
setShouldPrefetch(true)
|
|
93
|
+
setShouldPrefetch(true)
|
|
94
94
|
}
|
|
95
|
-
}, [href])
|
|
95
|
+
}, [href])
|
|
96
96
|
|
|
97
97
|
// If no href is provided but there's an onClick, render a button
|
|
98
98
|
if (!href && onClick) {
|
|
@@ -104,23 +104,23 @@ export function Link({
|
|
|
104
104
|
>
|
|
105
105
|
{children}
|
|
106
106
|
</button>
|
|
107
|
-
)
|
|
107
|
+
)
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
// If no href and no onClick, render a div
|
|
111
111
|
if (!href) {
|
|
112
|
-
return <div {...getDivProps(props)}>{children}</div
|
|
112
|
+
return <div {...getDivProps(props)}>{children}</div>
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
// Block dangerous URIs (javascript:, data:, vbscript:)
|
|
116
|
-
const isDangerousHref = /^(javascript|data|vbscript):/i.test(href)
|
|
116
|
+
const isDangerousHref = /^(javascript|data|vbscript):/i.test(href)
|
|
117
117
|
if (isDangerousHref) {
|
|
118
|
-
return <span {...getDivProps(props)}>{children}</span
|
|
118
|
+
return <span {...getDivProps(props)}>{children}</span>
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
// For SSR, check if it's external based on the href pattern
|
|
122
122
|
const isExternalSSR =
|
|
123
|
-
href.startsWith("http://") || href.startsWith("https://")
|
|
123
|
+
href.startsWith("http://") || href.startsWith("https://")
|
|
124
124
|
|
|
125
125
|
if (isExternalSSR || isExternal) {
|
|
126
126
|
return (
|
|
@@ -134,7 +134,7 @@ export function Link({
|
|
|
134
134
|
>
|
|
135
135
|
{children}
|
|
136
136
|
</a>
|
|
137
|
-
)
|
|
137
|
+
)
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
return (
|
|
@@ -148,5 +148,5 @@ export function Link({
|
|
|
148
148
|
>
|
|
149
149
|
{children}
|
|
150
150
|
</NextLink>
|
|
151
|
-
)
|
|
151
|
+
)
|
|
152
152
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Lefthook configuration for git hooks
|
|
2
|
+
# Cross-platform compatible (Windows, macOS, Linux)
|
|
3
|
+
# https://github.com/evilmartians/lefthook
|
|
4
|
+
|
|
5
|
+
pre-commit:
|
|
6
|
+
parallel: true
|
|
7
|
+
commands:
|
|
8
|
+
biome:
|
|
9
|
+
glob: '*.{js,mjs,ts,jsx,tsx,css,scss}'
|
|
10
|
+
run: bun biome check --max-diagnostics=200 --write --unsafe {staged_files}
|
|
11
|
+
stage_fixed: true
|
|
12
|
+
typecheck:
|
|
13
|
+
glob: '*.{ts,tsx}'
|
|
14
|
+
run: bunx tsgo --noEmit --incremental false
|
|
15
|
+
stage_fixed: false
|
|
16
|
+
|
|
17
|
+
post-merge:
|
|
18
|
+
commands:
|
|
19
|
+
install-deps:
|
|
20
|
+
run: bun i
|
|
21
|
+
|
|
22
|
+
post-checkout:
|
|
23
|
+
commands:
|
|
24
|
+
install-deps:
|
|
25
|
+
run: '[ "{3}" = "1" ] && bun i || true'
|