@actuate-media/cms-admin 0.49.4 → 0.50.0
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/CHANGELOG.md +50 -0
- package/dist/__tests__/components/seo-char-count.test.d.ts +2 -0
- package/dist/__tests__/components/seo-char-count.test.d.ts.map +1 -0
- package/dist/__tests__/components/seo-char-count.test.js +25 -0
- package/dist/__tests__/components/seo-char-count.test.js.map +1 -0
- package/dist/__tests__/lib/page-editor-service.test.js +12 -0
- package/dist/__tests__/lib/page-editor-service.test.js.map +1 -1
- package/dist/__tests__/lib/post-editor-service.test.js +4 -0
- package/dist/__tests__/lib/post-editor-service.test.js.map +1 -1
- package/dist/__tests__/views/seo-settings.render.test.js +1 -1
- package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/MediaPickerModal.d.ts.map +1 -1
- package/dist/components/MediaPickerModal.js +3 -1
- package/dist/components/MediaPickerModal.js.map +1 -1
- package/dist/components/SEOPanel.d.ts +1 -0
- package/dist/components/SEOPanel.d.ts.map +1 -1
- package/dist/components/SEOPanel.js +1 -1
- package/dist/components/SEOPanel.js.map +1 -1
- package/dist/components/seo/SeoCharCount.d.ts +15 -0
- package/dist/components/seo/SeoCharCount.d.ts.map +1 -0
- package/dist/components/seo/SeoCharCount.js +25 -0
- package/dist/components/seo/SeoCharCount.js.map +1 -0
- package/dist/components/seo/SeoEditorDrawer.d.ts.map +1 -1
- package/dist/components/seo/SeoEditorDrawer.js +3 -1
- package/dist/components/seo/SeoEditorDrawer.js.map +1 -1
- package/dist/fields/SlugField.d.ts.map +1 -1
- package/dist/fields/SlugField.js +6 -2
- package/dist/fields/SlugField.js.map +1 -1
- package/dist/lib/page-editor-service.d.ts.map +1 -1
- package/dist/lib/page-editor-service.js +6 -0
- package/dist/lib/page-editor-service.js.map +1 -1
- package/dist/lib/post-editor-service.d.ts.map +1 -1
- package/dist/lib/post-editor-service.js +6 -0
- package/dist/lib/post-editor-service.js.map +1 -1
- package/dist/lib/seo-service.d.ts +3 -1
- package/dist/lib/seo-service.d.ts.map +1 -1
- package/dist/lib/seo-service.js.map +1 -1
- package/dist/views/DocumentEdit.d.ts.map +1 -1
- package/dist/views/DocumentEdit.js +1 -0
- package/dist/views/DocumentEdit.js.map +1 -1
- package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
- package/dist/views/page-editor/PageSettingsModal.js +12 -9
- package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
- package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -1
- package/dist/views/post-editor/PostFieldsModal.js +12 -9
- package/dist/views/post-editor/PostFieldsModal.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/components/seo-char-count.test.tsx +27 -0
- package/src/__tests__/lib/page-editor-service.test.ts +14 -0
- package/src/__tests__/lib/post-editor-service.test.ts +9 -0
- package/src/__tests__/views/seo-settings.render.test.tsx +1 -1
- package/src/components/MediaPickerModal.tsx +5 -1
- package/src/components/SEOPanel.tsx +9 -0
- package/src/components/seo/SeoCharCount.tsx +44 -0
- package/src/components/seo/SeoEditorDrawer.tsx +27 -1
- package/src/fields/SlugField.tsx +6 -2
- package/src/lib/page-editor-service.ts +6 -0
- package/src/lib/post-editor-service.ts +6 -0
- package/src/lib/seo-service.ts +9 -1
- package/src/views/DocumentEdit.tsx +1 -0
- package/src/views/page-editor/PageSettingsModal.tsx +33 -14
- package/src/views/post-editor/PostFieldsModal.tsx +33 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAOlE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAC7C;AAQD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,GACP,EAAE,sBAAsB,2CAyIxB"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
|
+
import { normalizeSlug, validateSlug } from '@actuate-media/cms-core/client';
|
|
4
5
|
import { Modal } from '../../components/ui/Modal.js';
|
|
5
6
|
import { Button } from '../../components/ui/Button.js';
|
|
7
|
+
import { SeoCharCount } from '../../components/seo/SeoCharCount.js';
|
|
8
|
+
const SEO_TITLE_MIN = 30;
|
|
9
|
+
const SEO_TITLE_MAX = 60;
|
|
10
|
+
const SEO_DESC_MIN = 120;
|
|
11
|
+
const SEO_DESC_MAX = 160;
|
|
6
12
|
const LABEL = 'text-foreground mb-1 block text-xs font-medium';
|
|
7
13
|
const INPUT = 'border-input bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none';
|
|
8
|
-
|
|
9
|
-
return value
|
|
10
|
-
.toLowerCase()
|
|
11
|
-
.trim()
|
|
12
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
13
|
-
.replace(/^-+|-+$/g, '');
|
|
14
|
-
}
|
|
14
|
+
const slugify = normalizeSlug;
|
|
15
15
|
/** Edits page-level fields: title, slug, path, and SEO. */
|
|
16
16
|
export function PageSettingsModal({ open, page, canEdit, onClose, onSave, }) {
|
|
17
17
|
const [title, setTitle] = useState(page.title);
|
|
@@ -40,13 +40,16 @@ export function PageSettingsModal({ open, page, canEdit, onClose, onSave, }) {
|
|
|
40
40
|
setPath(s ? `/${s}` : '');
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
const slugError = validateSlug(slug);
|
|
43
44
|
function handleSave() {
|
|
45
|
+
if (slugError)
|
|
46
|
+
return;
|
|
44
47
|
onSave({ title, slug, path: path || (slug ? `/${slug}` : '/'), seoTitle, seoDescription });
|
|
45
48
|
onClose();
|
|
46
49
|
}
|
|
47
|
-
return (_jsx(Modal, { open: open, onClose: onClose, title: "Page settings", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit, children: "Done" })] }), children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "ps-slug", children: "Slug" }), _jsx("input", { id: "ps-slug", className: INPUT, value: slug, disabled: !canEdit, onChange: (e) => {
|
|
50
|
+
return (_jsx(Modal, { open: open, onClose: onClose, title: "Page settings", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit || Boolean(slugError), children: "Done" })] }), children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "ps-slug", children: "Slug" }), _jsx("input", { id: "ps-slug", className: INPUT, value: slug, disabled: !canEdit, "aria-invalid": Boolean(slugError), "aria-describedby": slugError ? 'ps-slug-error' : undefined, onChange: (e) => {
|
|
48
51
|
setSlugTouched(true);
|
|
49
52
|
setSlug(slugify(e.target.value));
|
|
50
|
-
} })] }), _jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-path", children: ["Path ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-path", className: INPUT, value: path, disabled: !canEdit, placeholder: "/about/story", onChange: (e) => setPath(e.target.value) })] })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL
|
|
53
|
+
} }), slugError && (_jsx("p", { id: "ps-slug-error", className: "text-destructive mt-1 text-xs", children: slugError }))] }), _jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-path", children: ["Path ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-path", className: INPUT, value: path, disabled: !canEdit, placeholder: "/about/story", onChange: (e) => setPath(e.target.value) })] })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "ps-seo-title", children: "SEO title" }), _jsx(SeoCharCount, { value: seoTitle, min: SEO_TITLE_MIN, max: SEO_TITLE_MAX })] }), _jsx("input", { id: "ps-seo-title", className: INPUT, value: seoTitle, disabled: !canEdit, placeholder: title || 'Defaults to the page title', onChange: (e) => setSeoTitle(e.target.value) })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "ps-seo-desc", children: "SEO description" }), _jsx(SeoCharCount, { value: seoDescription, min: SEO_DESC_MIN, max: SEO_DESC_MAX })] }), _jsx("textarea", { id: "ps-seo-desc", className: `${INPUT} min-h-[64px] resize-y`, value: seoDescription, disabled: !canEdit, placeholder: "Summarize the page for search results (120\u2013160 characters)", onChange: (e) => setSeoDescription(e.target.value) })] })] }) }));
|
|
51
54
|
}
|
|
52
55
|
//# sourceMappingURL=PageSettingsModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageSettingsModal.js","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"PageSettingsModal.js","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostFieldsModal.d.ts","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostFieldsModal.d.ts","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAOlE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,CAAA;IACpD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAC7C;AAQD,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE,oBAAoB,2CAsPtB"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
|
+
import { normalizeSlug, validateSlug } from '@actuate-media/cms-core/client';
|
|
4
5
|
import { Modal } from '../../components/ui/Modal.js';
|
|
5
6
|
import { Button } from '../../components/ui/Button.js';
|
|
6
7
|
import { MediaPickerModal } from '../../components/MediaPickerModal.js';
|
|
7
8
|
import { TagInput } from '../../components/TagInput.js';
|
|
8
9
|
import { RichTextField } from '../../fields/RichTextField.js';
|
|
10
|
+
import { SeoCharCount } from '../../components/seo/SeoCharCount.js';
|
|
11
|
+
const SEO_TITLE_MIN = 30;
|
|
12
|
+
const SEO_TITLE_MAX = 60;
|
|
13
|
+
const SEO_DESC_MIN = 120;
|
|
14
|
+
const SEO_DESC_MAX = 160;
|
|
9
15
|
const LABEL = 'text-foreground mb-1 block text-xs font-medium';
|
|
10
16
|
const INPUT = 'border-input bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none';
|
|
11
|
-
|
|
12
|
-
return value
|
|
13
|
-
.toLowerCase()
|
|
14
|
-
.trim()
|
|
15
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
16
|
-
.replace(/^-+|-+$/g, '');
|
|
17
|
-
}
|
|
17
|
+
const slugify = normalizeSlug;
|
|
18
18
|
/** Edits post-level fields: title, slug, excerpt, featured image, category, tags, body, SEO. */
|
|
19
19
|
export function PostFieldsModal({ open, post, canEdit, fields, onClose, onSave, }) {
|
|
20
20
|
const [title, setTitle] = useState(post.title);
|
|
@@ -53,14 +53,17 @@ export function PostFieldsModal({ open, post, canEdit, fields, onClose, onSave,
|
|
|
53
53
|
if (!slugTouched)
|
|
54
54
|
setSlug(slugify(next));
|
|
55
55
|
}
|
|
56
|
+
const slugError = validateSlug(slug);
|
|
56
57
|
function handleSave() {
|
|
58
|
+
if (slugError)
|
|
59
|
+
return;
|
|
57
60
|
onSave({ title, slug, excerpt, featuredImage, category, tags, body, seoTitle, seoDescription });
|
|
58
61
|
onClose();
|
|
59
62
|
}
|
|
60
|
-
return (_jsxs(Modal, { open: open, onClose: onClose, title: "Post details", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit, children: "Done" })] }), children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-slug", children: ["Slug ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-slug", className: INPUT, value: slug, disabled: !canEdit, onChange: (e) => {
|
|
63
|
+
return (_jsxs(Modal, { open: open, onClose: onClose, title: "Post details", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit || Boolean(slugError), children: "Done" })] }), children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-slug", children: ["Slug ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-slug", className: INPUT, value: slug, disabled: !canEdit, "aria-invalid": Boolean(slugError), "aria-describedby": slugError ? 'pf-slug-error' : undefined, onChange: (e) => {
|
|
61
64
|
setSlugTouched(true);
|
|
62
65
|
setSlug(slugify(e.target.value));
|
|
63
|
-
} })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-category", children: "Category" }), categoryOptions ? (_jsxs("select", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, onChange: (e) => setCategory(e.target.value), children: [_jsx("option", { value: "", children: "No category" }), categoryOptions.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))), category && !categoryOptions.some((o) => o.value === category) && (_jsx("option", { value: category, children: category }))] })) : (_jsx("input", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, placeholder: "e.g. Product", onChange: (e) => setCategory(e.target.value) }))] })] }), hasTags && (_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-tags", children: "Tags" }), _jsx(TagInput, { id: "pf-tags", value: tags, onChange: setTags, collection: post.postType, field: "tags", disabled: !canEdit, maxTags: tagsField?.maxRows })] })), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-excerpt", children: "Excerpt" }), _jsx("textarea", { id: "pf-excerpt", className: `${INPUT} min-h-[60px] resize-y`, value: excerpt, disabled: !canEdit, placeholder: "A short summary shown in listings and the header.", onChange: (e) => setExcerpt(e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-image", children: "Featured image" }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { id: "pf-image", className: `${INPUT} flex-1`, value: featuredImage, disabled: !canEdit, placeholder: "https://\u2026 or pick from the media library", onChange: (e) => setFeaturedImage(e.target.value) }), _jsx("button", { type: "button", disabled: !canEdit, onClick: () => setMediaOpen(true), className: "bg-accent text-foreground border-border hover:bg-accent/80 shrink-0 rounded-md border px-3 py-1.5 text-xs font-medium disabled:opacity-50", children: "Browse" })] }), featuredImage && (_jsx("div", { className: "border-border bg-muted mt-2 overflow-hidden rounded-md border", children: _jsx("img", { src: featuredImage, alt: "", className: "h-28 w-full object-cover" }) }))] }), _jsx("div", { children: _jsx(RichTextField, { label: "Body", value: body, onChange: canEdit ? setBody : () => { }, helpText: "Rendered by the Article Body section when its source is set to the post Body field." }) }), _jsxs("div", { children: [_jsx("label", { className: LABEL
|
|
66
|
+
} }), slugError && (_jsx("p", { id: "pf-slug-error", className: "text-destructive mt-1 text-xs", children: slugError }))] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-category", children: "Category" }), categoryOptions ? (_jsxs("select", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, onChange: (e) => setCategory(e.target.value), children: [_jsx("option", { value: "", children: "No category" }), categoryOptions.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))), category && !categoryOptions.some((o) => o.value === category) && (_jsx("option", { value: category, children: category }))] })) : (_jsx("input", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, placeholder: "e.g. Product", onChange: (e) => setCategory(e.target.value) }))] })] }), hasTags && (_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-tags", children: "Tags" }), _jsx(TagInput, { id: "pf-tags", value: tags, onChange: setTags, collection: post.postType, field: "tags", disabled: !canEdit, maxTags: tagsField?.maxRows })] })), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-excerpt", children: "Excerpt" }), _jsx("textarea", { id: "pf-excerpt", className: `${INPUT} min-h-[60px] resize-y`, value: excerpt, disabled: !canEdit, placeholder: "A short summary shown in listings and the header.", onChange: (e) => setExcerpt(e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-image", children: "Featured image" }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { id: "pf-image", className: `${INPUT} flex-1`, value: featuredImage, disabled: !canEdit, placeholder: "https://\u2026 or pick from the media library", onChange: (e) => setFeaturedImage(e.target.value) }), _jsx("button", { type: "button", disabled: !canEdit, onClick: () => setMediaOpen(true), className: "bg-accent text-foreground border-border hover:bg-accent/80 shrink-0 rounded-md border px-3 py-1.5 text-xs font-medium disabled:opacity-50", children: "Browse" })] }), featuredImage && (_jsx("div", { className: "border-border bg-muted mt-2 overflow-hidden rounded-md border", children: _jsx("img", { src: featuredImage, alt: "", className: "h-28 w-full object-cover" }) }))] }), _jsx("div", { children: _jsx(RichTextField, { label: "Body", value: body, onChange: canEdit ? setBody : () => { }, helpText: "Rendered by the Article Body section when its source is set to the post Body field." }) }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "pf-seo-title", children: "SEO title" }), _jsx(SeoCharCount, { value: seoTitle, min: SEO_TITLE_MIN, max: SEO_TITLE_MAX })] }), _jsx("input", { id: "pf-seo-title", className: INPUT, value: seoTitle, disabled: !canEdit, placeholder: title || 'Defaults to the post title', onChange: (e) => setSeoTitle(e.target.value) })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "pf-seo-desc", children: "SEO description" }), _jsx(SeoCharCount, { value: seoDescription, min: SEO_DESC_MIN, max: SEO_DESC_MAX })] }), _jsx("textarea", { id: "pf-seo-desc", className: `${INPUT} min-h-[60px] resize-y`, value: seoDescription, disabled: !canEdit, placeholder: excerpt || 'Summarize the post for search results (120–160 characters)', onChange: (e) => setSeoDescription(e.target.value) })] })] }), _jsx(MediaPickerModal, { open: mediaOpen, onClose: () => setMediaOpen(false), onSelect: (url) => {
|
|
64
67
|
setFeaturedImage(url);
|
|
65
68
|
setMediaOpen(false);
|
|
66
69
|
}, accept: "image/*" })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostFieldsModal.js","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"PostFieldsModal.js","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuate-media/cms-admin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/actuate-media/actuatecms.git",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"tailwindcss": "^4.0.0",
|
|
90
90
|
"typescript": "^5.7.0",
|
|
91
91
|
"vitest": "^4.1.0",
|
|
92
|
-
"@actuate-media/cms-core": "0.
|
|
92
|
+
"@actuate-media/cms-core": "0.67.0",
|
|
93
93
|
"@actuate-media/component-blocks": "0.2.1"
|
|
94
94
|
},
|
|
95
95
|
"scripts": {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { describe, expect, it } from 'vitest'
|
|
3
|
+
import { render, screen } from '@testing-library/react'
|
|
4
|
+
import { SeoCharCount } from '../../components/seo/SeoCharCount.js'
|
|
5
|
+
|
|
6
|
+
describe('SeoCharCount', () => {
|
|
7
|
+
it('shows a neutral empty state', () => {
|
|
8
|
+
render(<SeoCharCount value="" min={30} max={60} />)
|
|
9
|
+
expect(screen.getByText('0/60')).toBeTruthy()
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('marks a value within the ideal range as good', () => {
|
|
13
|
+
render(<SeoCharCount value={'x'.repeat(40)} min={30} max={60} />)
|
|
14
|
+
expect(screen.getByText(/40\/60 · good/)).toBeTruthy()
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('flags a value over the max as too long (destructive)', () => {
|
|
18
|
+
const { container } = render(<SeoCharCount value={'x'.repeat(70)} min={30} max={60} />)
|
|
19
|
+
expect(screen.getByText(/70\/60 · too long/)).toBeTruthy()
|
|
20
|
+
expect(container.querySelector('.text-destructive')).toBeTruthy()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('hints to aim for the range when below min', () => {
|
|
24
|
+
render(<SeoCharCount value={'x'.repeat(10)} min={30} max={60} />)
|
|
25
|
+
expect(screen.getByText(/aim for 30–60/)).toBeTruthy()
|
|
26
|
+
})
|
|
27
|
+
})
|
|
@@ -146,6 +146,20 @@ describe('validatePage', () => {
|
|
|
146
146
|
const { errors } = validatePage(basePage([]), false)
|
|
147
147
|
expect(errors.some((e) => e.includes('visible section'))).toBe(false)
|
|
148
148
|
})
|
|
149
|
+
|
|
150
|
+
it('rejects an invalid slug (mirrors the server publish gate)', () => {
|
|
151
|
+
const page = basePage([])
|
|
152
|
+
page.slug = 'About Us!'
|
|
153
|
+
const { errors } = validatePage(page, false)
|
|
154
|
+
expect(errors.some((e) => /slug/i.test(e))).toBe(true)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
it('rejects a reserved slug', () => {
|
|
158
|
+
const page = basePage([])
|
|
159
|
+
page.slug = 'admin'
|
|
160
|
+
const { errors } = validatePage(page, false)
|
|
161
|
+
expect(errors.some((e) => /reserved/i.test(e))).toBe(true)
|
|
162
|
+
})
|
|
149
163
|
})
|
|
150
164
|
|
|
151
165
|
describe('section type registry', () => {
|
|
@@ -52,6 +52,15 @@ describe('validatePost', () => {
|
|
|
52
52
|
expect(r.errors).toContain('Post slug is required.')
|
|
53
53
|
})
|
|
54
54
|
|
|
55
|
+
it('rejects an invalid or reserved slug (mirrors the server publish gate)', () => {
|
|
56
|
+
expect(
|
|
57
|
+
validatePost(basePost({ slug: 'Hello World' }), false).errors.some((e) => /slug/i.test(e)),
|
|
58
|
+
).toBe(true)
|
|
59
|
+
expect(
|
|
60
|
+
validatePost(basePost({ slug: 'api' }), false).errors.some((e) => /reserved/i.test(e)),
|
|
61
|
+
).toBe(true)
|
|
62
|
+
})
|
|
63
|
+
|
|
55
64
|
it('does not run section validation for draft saves', () => {
|
|
56
65
|
const r = validatePost(
|
|
57
66
|
basePost({
|
|
@@ -39,7 +39,7 @@ const cmsApi = vi.fn(async (endpoint: string, options?: { method?: string }) =>
|
|
|
39
39
|
if (endpoint === '/seo/sitemap/status' && method === 'GET') {
|
|
40
40
|
return {
|
|
41
41
|
data: {
|
|
42
|
-
sitemapUrl: 'https://acme.test/
|
|
42
|
+
sitemapUrl: 'https://acme.test/sitemap.xml',
|
|
43
43
|
lastGeneratedAt: '2026-01-02T03:04:05.000Z',
|
|
44
44
|
pagesIncluded: 12,
|
|
45
45
|
pagesExcluded: 1,
|
|
@@ -14,6 +14,8 @@ interface MediaItem {
|
|
|
14
14
|
storageKey: string
|
|
15
15
|
/** Normalized public URL from the media list endpoint (preferred for display). */
|
|
16
16
|
url?: string
|
|
17
|
+
/** Curated alt text from the media library (normalized as `altTag`). */
|
|
18
|
+
altTag?: string
|
|
17
19
|
mimeType: string
|
|
18
20
|
fileSize: number
|
|
19
21
|
width?: number
|
|
@@ -118,7 +120,9 @@ export function MediaPickerModal({
|
|
|
118
120
|
width: item.width,
|
|
119
121
|
height: item.height,
|
|
120
122
|
})
|
|
121
|
-
|
|
123
|
+
// Prefer the asset's curated alt text from the library so inserted images
|
|
124
|
+
// carry meaningful alt instead of a filename. Callers can still override.
|
|
125
|
+
onSelect(url, item.altTag?.trim() || item.filename)
|
|
122
126
|
onClose()
|
|
123
127
|
}
|
|
124
128
|
|
|
@@ -26,6 +26,7 @@ export interface SEOData {
|
|
|
26
26
|
metaTitle?: string
|
|
27
27
|
metaDescription?: string
|
|
28
28
|
focusKeyphrase?: string
|
|
29
|
+
keyTakeaway?: string
|
|
29
30
|
canonical?: string
|
|
30
31
|
robotsPolicy?:
|
|
31
32
|
| 'inherit'
|
|
@@ -762,6 +763,14 @@ export function SEOPanel({
|
|
|
762
763
|
onChange={(v) => update({ focusKeyphrase: v })}
|
|
763
764
|
placeholder="Primary keyword or phrase"
|
|
764
765
|
/>
|
|
766
|
+
<TextareaField
|
|
767
|
+
label="Key Takeaway"
|
|
768
|
+
value={seoData.keyTakeaway ?? ''}
|
|
769
|
+
onChange={(v) => update({ keyTakeaway: v })}
|
|
770
|
+
placeholder="One or two sentences AI answer engines can quote"
|
|
771
|
+
charCount={(seoData.keyTakeaway ?? '').length}
|
|
772
|
+
charTarget="(ideal: under 240)"
|
|
773
|
+
/>
|
|
765
774
|
<InputField
|
|
766
775
|
label="Canonical URL"
|
|
767
776
|
value={seoData.canonical ?? ''}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { Check, AlertTriangle } from 'lucide-react'
|
|
4
|
+
|
|
5
|
+
export interface SeoCharCountProps {
|
|
6
|
+
value: string
|
|
7
|
+
/** Recommended minimum length (inclusive). */
|
|
8
|
+
min: number
|
|
9
|
+
/** Recommended/hard maximum length (inclusive). */
|
|
10
|
+
max: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A length counter with an accessible quality band for SEO fields. Color is
|
|
15
|
+
* always paired with an icon + label so meaning is never conveyed by color
|
|
16
|
+
* alone (WCAG). "Good" = within [min, max]; "long" (over max) is the only
|
|
17
|
+
* destructive state; below min is a neutral hint.
|
|
18
|
+
*/
|
|
19
|
+
export function SeoCharCount({ value, min, max }: SeoCharCountProps) {
|
|
20
|
+
const len = value.trim().length
|
|
21
|
+
const empty = len === 0
|
|
22
|
+
const long = len > max
|
|
23
|
+
const good = !empty && len >= min && len <= max
|
|
24
|
+
|
|
25
|
+
const tone = long ? 'text-destructive' : 'text-muted-foreground'
|
|
26
|
+
const label = empty
|
|
27
|
+
? `0/${max}`
|
|
28
|
+
: long
|
|
29
|
+
? `${len}/${max} · too long`
|
|
30
|
+
: good
|
|
31
|
+
? `${len}/${max} · good`
|
|
32
|
+
: `${len}/${max} · aim for ${min}–${max}`
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<span className={`inline-flex items-center gap-1 text-xs ${tone}`}>
|
|
36
|
+
{long ? (
|
|
37
|
+
<AlertTriangle size={12} aria-hidden="true" />
|
|
38
|
+
) : good ? (
|
|
39
|
+
<Check size={12} aria-hidden="true" />
|
|
40
|
+
) : null}
|
|
41
|
+
{label}
|
|
42
|
+
</span>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
@@ -16,7 +16,15 @@ import { SeoLoading, SeoErrorState, btnPrimary, btnSecondary, gradeMeta } from '
|
|
|
16
16
|
const META_TITLE_MAX = 60
|
|
17
17
|
const META_DESC_MAX = 160
|
|
18
18
|
|
|
19
|
-
type AiField =
|
|
19
|
+
type AiField =
|
|
20
|
+
| 'metaTitle'
|
|
21
|
+
| 'metaDescription'
|
|
22
|
+
| 'ogTitle'
|
|
23
|
+
| 'ogDescription'
|
|
24
|
+
| 'focusKeyword'
|
|
25
|
+
| 'keyTakeaway'
|
|
26
|
+
|
|
27
|
+
const KEY_TAKEAWAY_MAX = 240
|
|
20
28
|
|
|
21
29
|
function CharCount({ value, max }: { value: string; max: number }) {
|
|
22
30
|
const over = value.length > max
|
|
@@ -100,6 +108,7 @@ export function SeoEditorDrawer({
|
|
|
100
108
|
metaDescription: rec.metaDescription ?? '',
|
|
101
109
|
canonicalUrl: rec.canonicalUrl ?? '',
|
|
102
110
|
focusKeyword: rec.focusKeyword ?? '',
|
|
111
|
+
keyTakeaway: rec.keyTakeaway ?? '',
|
|
103
112
|
ogTitle: rec.ogTitle ?? '',
|
|
104
113
|
ogDescription: rec.ogDescription ?? '',
|
|
105
114
|
noindex: rec.noindex,
|
|
@@ -248,6 +257,23 @@ export function SeoEditorDrawer({
|
|
|
248
257
|
/>
|
|
249
258
|
</Field>
|
|
250
259
|
|
|
260
|
+
<Field
|
|
261
|
+
label="Key takeaway"
|
|
262
|
+
hint={
|
|
263
|
+
<span className="flex items-center gap-2">
|
|
264
|
+
<CharCount value={form.keyTakeaway ?? ''} max={KEY_TAKEAWAY_MAX} />
|
|
265
|
+
{aiButton('keyTakeaway')}
|
|
266
|
+
</span>
|
|
267
|
+
}
|
|
268
|
+
>
|
|
269
|
+
<textarea
|
|
270
|
+
className={`${inputCls} min-h-16 resize-y`}
|
|
271
|
+
value={form.keyTakeaway ?? ''}
|
|
272
|
+
onChange={(e) => update({ keyTakeaway: e.target.value })}
|
|
273
|
+
placeholder="One or two sentences AI answer engines can quote — what is this page about?"
|
|
274
|
+
/>
|
|
275
|
+
</Field>
|
|
276
|
+
|
|
251
277
|
<Field label="Canonical URL">
|
|
252
278
|
<input
|
|
253
279
|
className={inputCls}
|
package/src/fields/SlugField.tsx
CHANGED
|
@@ -11,11 +11,15 @@ export interface SlugFieldProps {
|
|
|
11
11
|
helpText?: string
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
// Mirrors `normalizeSlug` in @actuate-media/cms-core so the live-edited value
|
|
15
|
+
// matches what the server will accept (lowercase alphanumerics + single
|
|
16
|
+
// hyphens; underscores and other punctuation are collapsed to hyphens).
|
|
14
17
|
function toSlug(text: string): string {
|
|
15
18
|
return text
|
|
16
19
|
.toLowerCase()
|
|
17
|
-
.
|
|
18
|
-
.replace(/[\
|
|
20
|
+
.normalize('NFKD')
|
|
21
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
22
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
19
23
|
.replace(/^-+|-+$/g, '')
|
|
20
24
|
}
|
|
21
25
|
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
validateSectionContent,
|
|
34
34
|
type PageSection,
|
|
35
35
|
} from '@actuate-media/cms-core/page-sections'
|
|
36
|
+
import { validateSlug } from '@actuate-media/cms-core/client'
|
|
36
37
|
|
|
37
38
|
import { missingCollectionFields } from './collection-schema.js'
|
|
38
39
|
|
|
@@ -108,6 +109,11 @@ export function validatePage(page: EditorPage, forPublish = false): ValidationRe
|
|
|
108
109
|
if (isBlank(page.title)) errors.push('Page title is required.')
|
|
109
110
|
if (isBlank(page.path)) errors.push('Page path is required.')
|
|
110
111
|
|
|
112
|
+
// Mirror the server publish gate so an invalid/reserved slug surfaces in the
|
|
113
|
+
// validation summary rather than only as a toast after the publish attempt.
|
|
114
|
+
const slugError = validateSlug(page.slug)
|
|
115
|
+
if (slugError) errors.push(slugError)
|
|
116
|
+
|
|
111
117
|
if (forPublish) {
|
|
112
118
|
const visible = page.sections.filter((s) => s.visible)
|
|
113
119
|
if (visible.length === 0) {
|
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
type PageSection,
|
|
42
42
|
type PostHeaderConfig,
|
|
43
43
|
} from '@actuate-media/cms-core/page-sections'
|
|
44
|
+
import { validateSlug } from '@actuate-media/cms-core/client'
|
|
44
45
|
|
|
45
46
|
export type { PageSection, PostHeaderConfig } from '@actuate-media/cms-core/page-sections'
|
|
46
47
|
|
|
@@ -139,6 +140,11 @@ export function validatePost(post: EditorPost, forPublish = false): ValidationRe
|
|
|
139
140
|
if (isBlank(post.title)) errors.push('Post title is required.')
|
|
140
141
|
if (isBlank(post.slug)) errors.push('Post slug is required.')
|
|
141
142
|
|
|
143
|
+
// Mirror the server publish gate so an invalid/reserved slug surfaces in the
|
|
144
|
+
// validation summary rather than only as a toast after the publish attempt.
|
|
145
|
+
const slugError = validateSlug(post.slug)
|
|
146
|
+
if (slugError) errors.push(slugError)
|
|
147
|
+
|
|
142
148
|
if (forPublish) {
|
|
143
149
|
const visible = post.sections.filter((s) => s.visible)
|
|
144
150
|
// Unmanaged (externally-managed) sections have no registered field schema,
|
package/src/lib/seo-service.ts
CHANGED
|
@@ -150,6 +150,7 @@ export interface SeoContentRecord {
|
|
|
150
150
|
metaTitle: string | null
|
|
151
151
|
metaDescription: string | null
|
|
152
152
|
focusKeyword: string | null
|
|
153
|
+
keyTakeaway: string | null
|
|
153
154
|
ogTitle: string | null
|
|
154
155
|
ogDescription: string | null
|
|
155
156
|
ogImageId: string | null
|
|
@@ -190,6 +191,7 @@ export interface SeoFieldPayload {
|
|
|
190
191
|
metaDescription?: string
|
|
191
192
|
canonicalUrl?: string
|
|
192
193
|
focusKeyword?: string
|
|
194
|
+
keyTakeaway?: string
|
|
193
195
|
ogTitle?: string
|
|
194
196
|
ogDescription?: string
|
|
195
197
|
ogImage?: string
|
|
@@ -620,7 +622,13 @@ function isAiUnavailable(status?: number): boolean {
|
|
|
620
622
|
}
|
|
621
623
|
|
|
622
624
|
export async function generateSeoField(
|
|
623
|
-
field:
|
|
625
|
+
field:
|
|
626
|
+
| 'metaTitle'
|
|
627
|
+
| 'metaDescription'
|
|
628
|
+
| 'ogTitle'
|
|
629
|
+
| 'ogDescription'
|
|
630
|
+
| 'focusKeyword'
|
|
631
|
+
| 'keyTakeaway',
|
|
624
632
|
context: { entityType: string; entityId: string },
|
|
625
633
|
): Promise<SeoAiResult> {
|
|
626
634
|
const res = await cmsApi<SeoAiResult>('/ai/seo/generate-field', {
|