create-nextblock 0.15.9 → 0.16.1
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/package.json +1 -1
- package/templates/nextblock-template/app/api/ai/seo/alt-text/route.ts +221 -0
- package/templates/nextblock-template/app/api/ai/seo/metadata/route.ts +186 -0
- package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +193 -1
- package/templates/nextblock-template/app/cms/CmsClientLayout.tsx +7 -1
- package/templates/nextblock-template/app/cms/blocks/components/BlockEditorArea.tsx +27 -0
- package/templates/nextblock-template/app/cms/blocks/editors/ImageBlockEditor.tsx +406 -229
- package/templates/nextblock-template/app/cms/blocks/editors/TextBlockEditor.tsx +171 -6
- package/templates/nextblock-template/app/cms/components/FeatureImageField.tsx +254 -245
- package/templates/nextblock-template/app/cms/media/components/MediaEditForm.tsx +177 -2
- package/templates/nextblock-template/app/cms/pages/[id]/edit/EditPageClient.tsx +28 -0
- package/templates/nextblock-template/app/cms/pages/components/PageForm.tsx +649 -406
- package/templates/nextblock-template/app/cms/posts/[id]/edit/page.tsx +33 -0
- package/templates/nextblock-template/app/cms/posts/components/PostForm.tsx +618 -383
- package/templates/nextblock-template/app/cms/settings/seo/RedirectsCard.tsx +514 -0
- package/templates/nextblock-template/app/cms/settings/seo/RobotsCard.tsx +529 -0
- package/templates/nextblock-template/app/cms/settings/seo/SeoSettingsClient.tsx +57 -0
- package/templates/nextblock-template/app/cms/settings/seo/actions.ts +448 -0
- package/templates/nextblock-template/app/cms/settings/seo/mappers.ts +93 -0
- package/templates/nextblock-template/app/cms/settings/seo/page.tsx +46 -0
- package/templates/nextblock-template/app/cms/settings/seo/require-admin.ts +47 -0
- package/templates/nextblock-template/app/layout.tsx +1 -1
- package/templates/nextblock-template/app/robots.ts +123 -0
- package/templates/nextblock-template/app/sitemap.ts +1 -1
- package/templates/nextblock-template/components/seo/GenerateMetaButton.tsx +137 -0
- package/templates/nextblock-template/components/seo/PageSeoAuditSection.tsx +244 -0
- package/templates/nextblock-template/components/seo/SeoAuditPanel.tsx +749 -0
- package/templates/nextblock-template/components/seo/SeoIssueList.tsx +195 -0
- package/templates/nextblock-template/components/seo/SeoScoreDial.tsx +144 -0
- package/templates/nextblock-template/components/seo/SocialPreview.tsx +243 -0
- package/templates/nextblock-template/components/seo/SocialPreviewDialog.tsx +110 -0
- package/templates/nextblock-template/lib/cortex-ai/alt-text-request.ts +86 -0
- package/templates/nextblock-template/lib/cortex-ai/sandbox-headers.ts +60 -0
- package/templates/nextblock-template/lib/seo/alt-text-write-back.test.ts +154 -0
- package/templates/nextblock-template/lib/seo/alt-text-write-back.ts +109 -0
- package/templates/nextblock-template/lib/seo/block-content.ts +123 -0
- package/templates/nextblock-template/lib/seo/fix-prompts.test.ts +242 -0
- package/templates/nextblock-template/lib/seo/fix-prompts.ts +204 -0
- package/templates/nextblock-template/lib/seo/page-audit-context.tsx +140 -0
- package/templates/nextblock-template/lib/seo/page-document.test.ts +350 -0
- package/templates/nextblock-template/lib/seo/page-document.ts +412 -0
- package/templates/nextblock-template/lib/seo/redirect-store.test.ts +479 -0
- package/templates/nextblock-template/lib/seo/redirect-store.ts +466 -0
- package/templates/nextblock-template/lib/seo/robots-settings-signature.test.ts +102 -0
- package/templates/nextblock-template/lib/seo/robots-settings-signature.ts +41 -0
- package/templates/nextblock-template/lib/seo/robots-txt.test.ts +370 -0
- package/templates/nextblock-template/lib/seo/robots-txt.ts +510 -0
- package/templates/nextblock-template/lib/setup/migrations-bundle.ts +10 -0
- package/templates/nextblock-template/next-env.d.ts +2 -2
- package/templates/nextblock-template/package.json +1 -1
- package/templates/nextblock-template/proxy.ts +240 -20
- package/templates/nextblock-template/app/robots.txt/route.ts +0 -32
|
@@ -10,6 +10,7 @@ import { BlockType } from '../../../../lib/blocks/blockRegistry';
|
|
|
10
10
|
|
|
11
11
|
type Block = Database["public"]["Tables"]["blocks"]["Row"];
|
|
12
12
|
import { blockHasEditableContent, getBlockDefinition, SectionBlockContent } from '../../../../lib/blocks/blockRegistry';
|
|
13
|
+
import { usePageSeo } from '../../../../lib/seo/page-audit-context';
|
|
13
14
|
import { Button } from "@nextblock-cms/ui";
|
|
14
15
|
import { PlusCircle } from "lucide-react";
|
|
15
16
|
import {
|
|
@@ -125,6 +126,32 @@ export default function BlockEditorArea({ parentId, parentType, initialBlocks, l
|
|
|
125
126
|
lastSavedBlocks.current = sortedBlocks;
|
|
126
127
|
}, [initialBlocks]);
|
|
127
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Publish the live block list to the page-level SEO audit.
|
|
131
|
+
*
|
|
132
|
+
* This component is the only client component that holds every block on the
|
|
133
|
+
* page, which makes it the only place the page-wide checks — one H1, the total
|
|
134
|
+
* word count, alt text across the whole document — can be fed from. It
|
|
135
|
+
* deliberately does no analysis of its own: the panel debounces and grades,
|
|
136
|
+
* this only hands over state.
|
|
137
|
+
*
|
|
138
|
+
* Publishing is kept out of the save path on purpose. `debouncedSave` builds a
|
|
139
|
+
* fresh `debounce` on every call, so it never actually coalesces and already
|
|
140
|
+
* fires once per keystroke; hanging document analysis off that would multiply
|
|
141
|
+
* an existing problem rather than inherit a solution. Copying a reference into
|
|
142
|
+
* a context, by contrast, costs nothing per keystroke, and the provider's own
|
|
143
|
+
* setter bails when the array is unchanged.
|
|
144
|
+
*
|
|
145
|
+
* `usePageSeo()` returns null on any surface with no page-level panel above —
|
|
146
|
+
* the product editor is the live example — so the publish is optional-chained
|
|
147
|
+
* rather than guarded by a second code path.
|
|
148
|
+
*/
|
|
149
|
+
const pageSeo = usePageSeo();
|
|
150
|
+
const publishBlocksToPageSeo = pageSeo?.setBlocks;
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
publishBlocksToPageSeo?.(blocks);
|
|
153
|
+
}, [blocks, publishBlocksToPageSeo]);
|
|
154
|
+
|
|
128
155
|
const saveBlock = useCallback(async (blockToSave: Block) => {
|
|
129
156
|
const result = await updateBlock(
|
|
130
157
|
blockToSave.id,
|