@actuate-media/sections-react 0.1.2 → 0.2.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/dist/ActuateForm.d.ts +22 -0
- package/dist/ActuateForm.d.ts.map +1 -0
- package/dist/ActuateForm.js +153 -0
- package/dist/ActuateForm.js.map +1 -0
- package/dist/Sections.d.ts +3 -1
- package/dist/Sections.d.ts.map +1 -1
- package/dist/Sections.js +20 -4
- package/dist/Sections.js.map +1 -1
- package/dist/SiteNav.d.ts +38 -0
- package/dist/SiteNav.d.ts.map +1 -0
- package/dist/SiteNav.js +38 -0
- package/dist/SiteNav.js.map +1 -0
- package/dist/components/defaults.d.ts +7 -0
- package/dist/components/defaults.d.ts.map +1 -1
- package/dist/components/defaults.js +32 -7
- package/dist/components/defaults.js.map +1 -1
- package/dist/forms.d.ts +78 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +157 -0
- package/dist/forms.js.map +1 -0
- package/dist/image.d.ts +17 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +11 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +5 -0
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type PublicForm } from './forms.js';
|
|
3
|
+
export interface ActuateFormProps {
|
|
4
|
+
/** Form slug to fetch (ignored when `form` is provided). */
|
|
5
|
+
slug?: string;
|
|
6
|
+
/** A pre-fetched public form schema. Skips the network fetch when set. */
|
|
7
|
+
form?: PublicForm;
|
|
8
|
+
/**
|
|
9
|
+
* Origin of the CMS API, e.g. `https://cms.example.com`. Defaults to `''`
|
|
10
|
+
* (same-origin relative URLs), which is correct for a Next.js app that mounts
|
|
11
|
+
* the Actuate API at `/api/cms`.
|
|
12
|
+
*/
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
/** Optional captcha token, when the form requires one (consumer-supplied). */
|
|
15
|
+
captchaToken?: string;
|
|
16
|
+
/** Extra class names for the form wrapper. */
|
|
17
|
+
className?: string;
|
|
18
|
+
/** Called with the API result after a successful submission. */
|
|
19
|
+
onSubmitted?: (result: unknown) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function ActuateForm({ slug, form: initialForm, baseUrl, captchaToken, className, onSubmitted, }: ActuateFormProps): ReactNode;
|
|
22
|
+
//# sourceMappingURL=ActuateForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActuateForm.d.ts","sourceRoot":"","sources":["../src/ActuateForm.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,EAOL,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;CACxC;AAOD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,IAAI,EAAE,WAAW,EACjB,OAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,EAAE,gBAAgB,GAAG,SAAS,CAuM9B"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `<ActuateForm>` — a drop-in public form renderer for Actuate CMS.
|
|
5
|
+
*
|
|
6
|
+
* Give it a form `slug` and it fetches the published schema from
|
|
7
|
+
* `GET {baseUrl}/api/cms/public/forms/:slug`, renders the fields, and submits
|
|
8
|
+
* to the schema's `submitPath`. Spam protections are wired automatically:
|
|
9
|
+
* - a hidden honeypot field (key from `spam.honeypotFieldKey`),
|
|
10
|
+
* - an `elapsedMs` timer (cheap "too fast" bot signal),
|
|
11
|
+
* - an optional captcha token (pass via `captchaToken` — the consumer owns
|
|
12
|
+
* the provider widget; nothing is auto-loaded).
|
|
13
|
+
*
|
|
14
|
+
* It is a Client Component (it fetches + holds form state). Render it directly,
|
|
15
|
+
* or let the `form` section type render it for you via `@actuate-media/sections-react`.
|
|
16
|
+
*
|
|
17
|
+
* Pass a pre-fetched `form` schema to skip the network round-trip (useful for
|
|
18
|
+
* SSR/streaming or tests).
|
|
19
|
+
*/
|
|
20
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
21
|
+
import { buildSubmitBody, coercePublicForm, fieldControl, firstMissingRequired, htmlInputType, initialValues, } from './forms.js';
|
|
22
|
+
const FIELD_BASE = 'w-full rounded-lg border border-zinc-300 bg-white px-3 py-2 text-sm text-zinc-900 shadow-sm placeholder:text-zinc-400 focus:border-violet-500 focus:ring-2 focus:ring-violet-500/40 focus:outline-none disabled:cursor-not-allowed disabled:opacity-60';
|
|
23
|
+
export function ActuateForm({ slug, form: initialForm, baseUrl = '', captchaToken, className, onSubmitted, }) {
|
|
24
|
+
const [form, setForm] = useState(initialForm ?? null);
|
|
25
|
+
const [status, setStatus] = useState(initialForm ? 'ready' : 'loading');
|
|
26
|
+
const [message, setMessage] = useState('');
|
|
27
|
+
const [values, setValues] = useState(() => initialForm ? initialValues(initialForm) : {});
|
|
28
|
+
const honeypotRef = useRef('');
|
|
29
|
+
const startedAtRef = useRef(null);
|
|
30
|
+
// Fetch the schema when only a slug is supplied.
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (initialForm || !slug)
|
|
33
|
+
return;
|
|
34
|
+
let cancelled = false;
|
|
35
|
+
const controller = new AbortController();
|
|
36
|
+
setStatus('loading');
|
|
37
|
+
fetch(`${baseUrl}/api/cms/public/forms/${encodeURIComponent(slug)}`, {
|
|
38
|
+
headers: { accept: 'application/json' },
|
|
39
|
+
signal: controller.signal,
|
|
40
|
+
})
|
|
41
|
+
.then(async (res) => {
|
|
42
|
+
if (!res.ok)
|
|
43
|
+
throw new Error(`Form not available (${res.status})`);
|
|
44
|
+
return res.json();
|
|
45
|
+
})
|
|
46
|
+
.then((json) => {
|
|
47
|
+
if (cancelled)
|
|
48
|
+
return;
|
|
49
|
+
const parsed = coercePublicForm(json);
|
|
50
|
+
if (!parsed)
|
|
51
|
+
throw new Error('Form schema was malformed');
|
|
52
|
+
setForm(parsed);
|
|
53
|
+
setValues(initialValues(parsed));
|
|
54
|
+
setStatus('ready');
|
|
55
|
+
})
|
|
56
|
+
.catch((err) => {
|
|
57
|
+
if (cancelled || (err instanceof DOMException && err.name === 'AbortError'))
|
|
58
|
+
return;
|
|
59
|
+
setMessage(err instanceof Error ? err.message : 'Failed to load form');
|
|
60
|
+
setStatus('error');
|
|
61
|
+
});
|
|
62
|
+
return () => {
|
|
63
|
+
cancelled = true;
|
|
64
|
+
controller.abort();
|
|
65
|
+
};
|
|
66
|
+
}, [slug, baseUrl, initialForm]);
|
|
67
|
+
// Start the "time to submit" clock once the form is interactive.
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (form && startedAtRef.current === null)
|
|
70
|
+
startedAtRef.current = Date.now();
|
|
71
|
+
}, [form]);
|
|
72
|
+
const setValue = (key, value) => setValues((prev) => ({ ...prev, [key]: value }));
|
|
73
|
+
async function handleSubmit(e) {
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
if (!form || status === 'submitting')
|
|
76
|
+
return;
|
|
77
|
+
const missing = firstMissingRequired(form, values);
|
|
78
|
+
if (missing) {
|
|
79
|
+
setMessage(`Please complete the “${missing}” field.`);
|
|
80
|
+
setStatus('error');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
setStatus('submitting');
|
|
84
|
+
setMessage('');
|
|
85
|
+
const startedAt = startedAtRef.current;
|
|
86
|
+
const body = buildSubmitBody({
|
|
87
|
+
values,
|
|
88
|
+
honeypotKey: form.spam.honeypotFieldKey,
|
|
89
|
+
honeypotValue: honeypotRef.current,
|
|
90
|
+
elapsedMs: startedAt !== null ? Date.now() - startedAt : null,
|
|
91
|
+
pageUrl: typeof window !== 'undefined' ? window.location.href : null,
|
|
92
|
+
captchaToken: captchaToken ?? null,
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
const res = await fetch(`${baseUrl}${form.submitPath}`, {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers: { 'content-type': 'application/json', accept: 'application/json' },
|
|
98
|
+
body: JSON.stringify(body),
|
|
99
|
+
});
|
|
100
|
+
const json = (await res.json().catch(() => null));
|
|
101
|
+
if (!res.ok) {
|
|
102
|
+
throw new Error(json?.error || `Submission failed (${res.status})`);
|
|
103
|
+
}
|
|
104
|
+
onSubmitted?.(json);
|
|
105
|
+
if (form.redirectUrl && typeof window !== 'undefined') {
|
|
106
|
+
window.location.assign(form.redirectUrl);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
setStatus('success');
|
|
110
|
+
setMessage(json?.data?.confirmation || form.successMessage || 'Thanks — your response was sent.');
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
setMessage(err instanceof Error ? err.message : 'Something went wrong. Please try again.');
|
|
114
|
+
setStatus('error');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const honeypotKey = form?.spam.honeypotFieldKey;
|
|
118
|
+
const captchaNote = useMemo(() => {
|
|
119
|
+
if (!form?.captcha || form.captcha.provider === 'none')
|
|
120
|
+
return null;
|
|
121
|
+
if (captchaToken)
|
|
122
|
+
return null;
|
|
123
|
+
return `This form is protected by ${form.captcha.provider}. Pass a captcha token to submit.`;
|
|
124
|
+
}, [form?.captcha, captchaToken]);
|
|
125
|
+
if (status === 'loading') {
|
|
126
|
+
return (_jsx("div", { className: className, "aria-busy": "true", children: _jsx("p", { className: "text-sm text-zinc-500", children: "Loading form\u2026" }) }));
|
|
127
|
+
}
|
|
128
|
+
if (!form) {
|
|
129
|
+
return (_jsx("div", { className: className, role: "alert", children: _jsx("p", { className: "text-sm text-red-600", children: message || 'This form is unavailable.' }) }));
|
|
130
|
+
}
|
|
131
|
+
if (status === 'success') {
|
|
132
|
+
return (_jsx("div", { className: className, role: "status", "aria-live": "polite", children: _jsx("p", { className: "rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-800", children: message }) }));
|
|
133
|
+
}
|
|
134
|
+
const busy = status === 'submitting';
|
|
135
|
+
return (_jsxs("form", { className: `flex flex-col gap-5 ${className ?? ''}`.trim(), onSubmit: handleSubmit, noValidate: true, children: [form.fields.map((field) => (_jsx(Field, { field: field, value: values[field.key], disabled: busy, onChange: (v) => setValue(field.key, v) }, field.id || field.key))), honeypotKey && (_jsxs("div", { "aria-hidden": "true", className: "pointer-events-none absolute -left-[9999px] h-0 w-0 overflow-hidden", children: [_jsx("label", { htmlFor: `actuate-hp-${honeypotKey}`, children: "Leave this field empty" }), _jsx("input", { id: `actuate-hp-${honeypotKey}`, type: "text", tabIndex: -1, autoComplete: "off", name: honeypotKey, defaultValue: "", onChange: (e) => {
|
|
136
|
+
honeypotRef.current = e.target.value;
|
|
137
|
+
} })] })), captchaNote && _jsx("p", { className: "text-xs text-zinc-500", children: captchaNote }), status === 'error' && message && (_jsx("p", { role: "alert", className: "text-sm text-red-600", children: message })), _jsx("div", { children: _jsx("button", { type: "submit", disabled: busy || !!captchaNote, className: "inline-flex items-center justify-center rounded-lg bg-violet-600 px-5 py-2.5 text-sm font-medium text-white transition-colors hover:bg-violet-700 disabled:cursor-not-allowed disabled:opacity-60", children: busy ? 'Sending…' : 'Submit' }) }), _jsx("span", { className: "sr-only", "aria-live": "polite", children: busy ? 'Submitting your response' : '' })] }));
|
|
138
|
+
}
|
|
139
|
+
function Field({ field, value, disabled, onChange, }) {
|
|
140
|
+
const control = fieldControl(field.type);
|
|
141
|
+
const id = `actuate-field-${field.key}`;
|
|
142
|
+
const describedBy = field.helpText ? `${id}-help` : undefined;
|
|
143
|
+
const help = field.helpText ? (_jsx("p", { id: `${id}-help`, className: "text-xs text-zinc-500", children: field.helpText })) : null;
|
|
144
|
+
// Radio + checkbox use a group label rather than a single bound <label>.
|
|
145
|
+
if (control === 'radio') {
|
|
146
|
+
return (_jsxs("fieldset", { className: "flex flex-col gap-2", children: [_jsxs("legend", { className: "text-sm font-medium text-zinc-700", children: [field.label, field.required && _jsx("span", { className: "text-red-500", children: " *" })] }), (field.options ?? []).map((opt) => (_jsxs("label", { className: "flex items-center gap-2 text-sm text-zinc-700", children: [_jsx("input", { type: "radio", name: field.key, value: opt.value, checked: value === opt.value, required: field.required, disabled: disabled, onChange: () => onChange(opt.value), className: "h-4 w-4 text-violet-600" }), opt.label] }, opt.value))), help] }));
|
|
147
|
+
}
|
|
148
|
+
if (control === 'checkbox') {
|
|
149
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm text-zinc-700", children: [_jsx("input", { id: id, type: "checkbox", checked: value === true, required: field.required, disabled: disabled, "aria-describedby": describedBy, onChange: (e) => onChange(e.target.checked), className: "h-4 w-4 rounded border-zinc-300 text-violet-600" }), field.label, field.required && _jsx("span", { className: "text-red-500", children: " *" })] }), help] }));
|
|
150
|
+
}
|
|
151
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("label", { htmlFor: id, className: "text-sm font-medium text-zinc-700", children: [field.label, field.required && _jsx("span", { className: "text-red-500", children: " *" })] }), control === 'textarea' ? (_jsx("textarea", { id: id, name: field.key, required: field.required, disabled: disabled, placeholder: field.placeholder, "aria-describedby": describedBy, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value), rows: 5, className: `${FIELD_BASE} resize-y` })) : control === 'select' ? (_jsxs("select", { id: id, name: field.key, required: field.required, disabled: disabled, "aria-describedby": describedBy, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value), className: FIELD_BASE, children: [_jsx("option", { value: "", children: field.placeholder || 'Select…' }), (field.options ?? []).map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] })) : (_jsx("input", { id: id, name: field.key, type: htmlInputType(field.type), required: field.required, disabled: disabled, placeholder: field.placeholder, "aria-describedby": describedBy, value: typeof value === 'string' || typeof value === 'number' ? String(value) : '', onChange: (e) => onChange(e.target.value), className: FIELD_BASE })), help] }));
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=ActuateForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActuateForm.js","sourceRoot":"","sources":["../src/ActuateForm.tsx"],"names":[],"mappings":"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"}
|
package/dist/Sections.d.ts
CHANGED
|
@@ -29,10 +29,12 @@ export declare function Sections({ sections, ctx, renderers, options }: Sections
|
|
|
29
29
|
export interface PostHeaderProps {
|
|
30
30
|
config: PostHeaderConfig;
|
|
31
31
|
ctx: PostContext;
|
|
32
|
+
/** Rendering options (e.g. a `next/image`-backed image renderer). */
|
|
33
|
+
options?: RenderOptions;
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Public post header, driven by the post type's template `header` config
|
|
35
37
|
* (layout + which fields to show) plus the post's own field values.
|
|
36
38
|
*/
|
|
37
|
-
export declare function PostHeader({ config, ctx }: PostHeaderProps): ReactNode;
|
|
39
|
+
export declare function PostHeader({ config, ctx, options }: PostHeaderProps): ReactNode;
|
|
38
40
|
//# sourceMappingURL=Sections.d.ts.map
|
package/dist/Sections.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sections.d.ts","sourceRoot":"","sources":["../src/Sections.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"Sections.d.ts","sourceRoot":"","sources":["../src/Sections.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAGjG,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,aAAa,EAEb,kBAAkB,EACnB,MAAM,YAAY,CAAA;AA2BnB,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAA;IAC9B,kDAAkD;IAClD,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,SAAS,CA2BxF;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAA;IACxB,GAAG,EAAE,WAAW,CAAA;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,eAAe,GAAG,SAAS,CAqE/E"}
|
package/dist/Sections.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { computeReadingTime } from '@actuate-media/cms-core/page-sections';
|
|
3
3
|
import { getSectionRenderer } from './registry.js';
|
|
4
|
+
import { defaultRenderImage } from './image.js';
|
|
4
5
|
import { backgroundClass, formatHeaderDate, paddingClass } from './utils.js';
|
|
5
6
|
const identity = (html) => html;
|
|
6
7
|
function resolveOptions(options) {
|
|
7
|
-
return {
|
|
8
|
+
return {
|
|
9
|
+
sanitizeHtml: options?.sanitizeHtml ?? identity,
|
|
10
|
+
baseUrl: options?.baseUrl ?? '',
|
|
11
|
+
renderImage: options?.renderImage ?? defaultRenderImage,
|
|
12
|
+
};
|
|
8
13
|
}
|
|
9
14
|
/** Dev-only: warn at most once per unknown section type. */
|
|
10
15
|
const warnedTypes = new Set();
|
|
@@ -39,7 +44,8 @@ export function Sections({ sections, ctx, renderers, options }) {
|
|
|
39
44
|
* Public post header, driven by the post type's template `header` config
|
|
40
45
|
* (layout + which fields to show) plus the post's own field values.
|
|
41
46
|
*/
|
|
42
|
-
export function PostHeader({ config, ctx }) {
|
|
47
|
+
export function PostHeader({ config, ctx, options }) {
|
|
48
|
+
const resolved = resolveOptions(options);
|
|
43
49
|
const title = ctx.title || 'Untitled';
|
|
44
50
|
const date = config.showDate ? formatHeaderDate(ctx.publishDate) : '';
|
|
45
51
|
const overlay = config.layout === 'overlay' && config.showFeaturedImage && !!ctx.featuredImageUrl;
|
|
@@ -47,8 +53,18 @@ export function PostHeader({ config, ctx }) {
|
|
|
47
53
|
const align = centered ? 'mx-auto items-center text-center' : 'text-left';
|
|
48
54
|
const meta = (_jsxs("div", { className: `mt-4 flex flex-wrap gap-x-3 gap-y-1 text-sm ${centered ? 'justify-center' : ''} ${overlay ? 'text-white/80' : 'text-zinc-500'}`, children: [config.showCategory && ctx.category && (_jsx("span", { className: "font-medium text-violet-500", children: ctx.category })), config.showAuthor && ctx.author?.name && _jsx("span", { children: ctx.author.name }), date && _jsx("span", { children: date }), config.showReadingTime && _jsxs("span", { children: [computeReadingTime(ctx.body), " min read"] })] }));
|
|
49
55
|
if (overlay) {
|
|
50
|
-
return (_jsxs("header", { className: "relative", children: [
|
|
56
|
+
return (_jsxs("header", { className: "relative", children: [resolved.renderImage({
|
|
57
|
+
src: ctx.featuredImageUrl,
|
|
58
|
+
alt: '',
|
|
59
|
+
priority: true,
|
|
60
|
+
className: 'h-[360px] w-full object-cover sm:h-[440px]',
|
|
61
|
+
}), _jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/70 to-black/10", "aria-hidden": true }), _jsx("div", { className: "absolute inset-x-0 bottom-0 px-6 pb-10", children: _jsxs("div", { className: `mx-auto flex max-w-3xl flex-col ${align}`, children: [_jsx("h1", { className: "text-3xl font-bold tracking-tight text-white sm:text-5xl", children: title }), config.showExcerpt && ctx.excerpt && (_jsx("p", { className: "mt-3 max-w-2xl text-lg text-white/90", children: ctx.excerpt })), meta] }) })] }));
|
|
51
62
|
}
|
|
52
|
-
return (_jsxs("header", { className: "border-b border-zinc-100 bg-zinc-50 py-16", children: [_jsxs("div", { className: `mx-auto flex max-w-3xl flex-col px-6 ${align}`, children: [_jsx("h1", { className: "text-4xl font-bold tracking-tight text-zinc-900 sm:text-5xl", children: title }), config.showExcerpt && ctx.excerpt && (_jsx("p", { className: `mt-4 max-w-2xl text-lg text-zinc-600 ${centered ? 'mx-auto' : ''}`, children: ctx.excerpt })), meta] }), config.showFeaturedImage && ctx.featuredImageUrl && (_jsx("div", { className: "mx-auto mt-8 max-w-4xl px-6", children:
|
|
63
|
+
return (_jsxs("header", { className: "border-b border-zinc-100 bg-zinc-50 py-16", children: [_jsxs("div", { className: `mx-auto flex max-w-3xl flex-col px-6 ${align}`, children: [_jsx("h1", { className: "text-4xl font-bold tracking-tight text-zinc-900 sm:text-5xl", children: title }), config.showExcerpt && ctx.excerpt && (_jsx("p", { className: `mt-4 max-w-2xl text-lg text-zinc-600 ${centered ? 'mx-auto' : ''}`, children: ctx.excerpt })), meta] }), config.showFeaturedImage && ctx.featuredImageUrl && (_jsx("div", { className: "mx-auto mt-8 max-w-4xl px-6", children: resolved.renderImage({
|
|
64
|
+
src: ctx.featuredImageUrl,
|
|
65
|
+
alt: title,
|
|
66
|
+
priority: true,
|
|
67
|
+
className: 'aspect-video w-full rounded-xl object-cover shadow-sm',
|
|
68
|
+
}) }))] }));
|
|
53
69
|
}
|
|
54
70
|
//# sourceMappingURL=Sections.js.map
|
package/dist/Sections.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sections.js","sourceRoot":"","sources":["../src/Sections.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,uCAAuC,CAAA;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Sections.js","sourceRoot":"","sources":["../src/Sections.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A single navigation item. Mirrors `PublicNavItem` returned by the cms-core
|
|
4
|
+
* `/public/navigations/:slug` endpoint — duplicated here so `sections-react`
|
|
5
|
+
* has no runtime dependency on `cms-core`.
|
|
6
|
+
*/
|
|
7
|
+
export interface SiteNavItem {
|
|
8
|
+
label: string;
|
|
9
|
+
url: string;
|
|
10
|
+
target?: '_blank' | '_self';
|
|
11
|
+
children?: SiteNavItem[];
|
|
12
|
+
}
|
|
13
|
+
export interface SiteNavProps {
|
|
14
|
+
/** Top-level navigation items (typically `navigation.items`). */
|
|
15
|
+
items: SiteNavItem[];
|
|
16
|
+
/**
|
|
17
|
+
* Accessible label for the `<nav>` landmark. Defaults to `"Primary"`.
|
|
18
|
+
* Set a distinct value when rendering more than one nav (e.g. `"Footer"`).
|
|
19
|
+
*/
|
|
20
|
+
ariaLabel?: string;
|
|
21
|
+
/** Extra classes appended to the `<nav>` element. */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Renders a public navigation menu as an accessible `<nav>` landmark.
|
|
26
|
+
*
|
|
27
|
+
* Presentational and SSR-safe — no client hooks. Submenus use native
|
|
28
|
+
* `<details>` disclosure so they work without JavaScript and remain
|
|
29
|
+
* keyboard-operable. Styling uses neutral Tailwind utilities; consumers can
|
|
30
|
+
* override via `className` or by mapping the menu themselves.
|
|
31
|
+
*
|
|
32
|
+
* ```tsx
|
|
33
|
+
* const nav = await cms.getNavigation('main')
|
|
34
|
+
* {nav && <SiteNav items={nav.items} />}
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function SiteNav({ items, ariaLabel, className }: SiteNavProps): ReactNode;
|
|
38
|
+
//# sourceMappingURL=SiteNav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteNav.d.ts","sourceRoot":"","sources":["../src/SiteNav.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC3B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA8DD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,SAAqB,EAAE,SAAS,EAAE,EAAE,YAAY,GAAG,SAAS,CAW5F"}
|
package/dist/SiteNav.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
function relFor(target) {
|
|
3
|
+
return target === '_blank' ? 'noopener noreferrer' : undefined;
|
|
4
|
+
}
|
|
5
|
+
function NavLink({ item }) {
|
|
6
|
+
return (_jsx("a", { href: item.url || '#', target: item.target, rel: relFor(item.target), className: "rounded-md px-3 py-2 text-sm font-medium text-zinc-700 transition-colors hover:bg-zinc-100 hover:text-zinc-900", children: item.label }));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Render one top-level item. Items with children become a native
|
|
10
|
+
* `<details>`/`<summary>` disclosure — keyboard-operable and SSR-safe with no
|
|
11
|
+
* client JavaScript. Leaf items render a plain link.
|
|
12
|
+
*/
|
|
13
|
+
function TopLevelItem({ item }) {
|
|
14
|
+
const children = item.children ?? [];
|
|
15
|
+
if (children.length === 0) {
|
|
16
|
+
return (_jsx("li", { children: _jsx(NavLink, { item: item }) }));
|
|
17
|
+
}
|
|
18
|
+
return (_jsx("li", { className: "relative", children: _jsxs("details", { className: "group", children: [_jsxs("summary", { className: "flex cursor-pointer list-none items-center gap-1 rounded-md px-3 py-2 text-sm font-medium text-zinc-700 transition-colors hover:bg-zinc-100 hover:text-zinc-900", children: [item.label, _jsx("span", { "aria-hidden": true, className: "text-zinc-400 transition-transform group-open:rotate-180", children: "\u25BE" })] }), _jsx("ul", { className: "mt-1 min-w-48 rounded-lg border border-zinc-200 bg-white p-1 shadow-sm md:absolute md:left-0 md:z-10", children: children.map((child, i) => (_jsx("li", { children: _jsx("a", { href: child.url || '#', target: child.target, rel: relFor(child.target), className: "block rounded-md px-3 py-2 text-sm text-zinc-700 transition-colors hover:bg-zinc-100 hover:text-zinc-900", children: child.label }) }, `${child.url}-${i}`))) })] }) }));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Renders a public navigation menu as an accessible `<nav>` landmark.
|
|
22
|
+
*
|
|
23
|
+
* Presentational and SSR-safe — no client hooks. Submenus use native
|
|
24
|
+
* `<details>` disclosure so they work without JavaScript and remain
|
|
25
|
+
* keyboard-operable. Styling uses neutral Tailwind utilities; consumers can
|
|
26
|
+
* override via `className` or by mapping the menu themselves.
|
|
27
|
+
*
|
|
28
|
+
* ```tsx
|
|
29
|
+
* const nav = await cms.getNavigation('main')
|
|
30
|
+
* {nav && <SiteNav items={nav.items} />}
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function SiteNav({ items, ariaLabel = 'Primary', className }) {
|
|
34
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
35
|
+
return null;
|
|
36
|
+
return (_jsx("nav", { "aria-label": ariaLabel, className: className, children: _jsx("ul", { className: "flex flex-wrap items-center gap-1", children: items.map((item, i) => (_jsx(TopLevelItem, { item: item }, `${item.url}-${i}`))) }) }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=SiteNav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteNav.js","sourceRoot":"","sources":["../src/SiteNav.tsx"],"names":[],"mappings":";AA0BA,SAAS,MAAM,CAAC,MAA6B;IAC3C,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAA;AAChE,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,IAAI,EAAyB;IAC9C,OAAO,CACL,YACE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,EACrB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EACxB,SAAS,EAAC,gHAAgH,YAEzH,IAAI,CAAC,KAAK,GACT,CACL,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,EAAE,IAAI,EAAyB;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,uBACE,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,GAAI,GACpB,CACN,CAAA;IACH,CAAC;IAED,OAAO,CACL,aAAI,SAAS,EAAC,UAAU,YACtB,mBAAS,SAAS,EAAC,OAAO,aACxB,mBAAS,SAAS,EAAC,iKAAiK,aACjL,IAAI,CAAC,KAAK,EACX,oCAAkB,SAAS,EAAC,0DAA0D,uBAE/E,IACC,EACV,aAAI,SAAS,EAAC,sGAAsG,YACjH,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,uBACE,YACE,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,EACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,SAAS,EAAC,0GAA0G,YAEnH,KAAK,CAAC,KAAK,GACV,IARG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CASvB,CACN,CAAC,GACC,IACG,GACP,CACN,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAgB;IAC/E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5D,OAAO,CACL,4BAAiB,SAAS,EAAE,SAAS,EAAE,SAAS,YAC9C,aAAI,SAAS,EAAC,mCAAmC,YAC9C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,YAAY,IAA0B,IAAI,EAAE,IAAI,IAA9B,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAgB,CACtD,CAAC,GACC,GACD,CACP,CAAA;AACH,CAAC"}
|
|
@@ -9,6 +9,13 @@ export declare const QuoteSection: SectionRenderer;
|
|
|
9
9
|
export declare const AuthorBioSection: SectionRenderer;
|
|
10
10
|
export declare const RelatedPostsSection: SectionRenderer;
|
|
11
11
|
export declare const GallerySection: SectionRenderer;
|
|
12
|
+
/**
|
|
13
|
+
* Renderer for the `form` section: a heading/intro plus an embedded
|
|
14
|
+
* `<ActuateForm>` that fetches and submits the form named by `content.formSlug`.
|
|
15
|
+
* `<ActuateForm>` is a Client Component; rendering it here creates a client
|
|
16
|
+
* island inside the otherwise-static section tree.
|
|
17
|
+
*/
|
|
18
|
+
export declare const FormSection: SectionRenderer;
|
|
12
19
|
/**
|
|
13
20
|
* The built-in renderer map. Keys are the canonical `sectionType` ids from
|
|
14
21
|
* `@actuate-media/cms-core/page-sections`. A drift guard (see registry tests)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/components/defaults.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAwB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/components/defaults.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAwB,MAAM,aAAa,CAAA;AAK5F,eAAO,MAAM,WAAW,EAAE,eA4BzB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,eAWzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,eAoC5B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,eAuB1B,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,eAkBxB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,eAqBhC,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,eAe1B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,eAiC9B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,eA2BjC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,eA+B5B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,eAqBzB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,kBAYvC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ActuateForm } from '../ActuateForm.js';
|
|
2
3
|
import { Button } from '../primitives.js';
|
|
3
|
-
import { bool, isDark, rows, str } from '../utils.js';
|
|
4
|
+
import { bool, isDark, num, rows, str } from '../utils.js';
|
|
4
5
|
export const HeroSection = ({ section }) => {
|
|
5
6
|
const c = section.content;
|
|
6
7
|
const dark = isDark(section.settings);
|
|
@@ -11,13 +12,17 @@ export const TextSection = ({ section }) => {
|
|
|
11
12
|
const align = str(c, 'alignment', 'center') === 'left' ? 'text-left' : 'mx-auto text-center';
|
|
12
13
|
return (_jsxs("div", { className: `max-w-3xl px-6 ${align}`, children: [_jsx("h2", { className: "text-3xl font-bold tracking-tight", children: str(c, 'heading') }), str(c, 'body') && (_jsx("p", { className: "mt-4 text-lg whitespace-pre-line opacity-80", children: str(c, 'body') }))] }));
|
|
13
14
|
};
|
|
14
|
-
export const FeatureSection = ({ section }) => {
|
|
15
|
+
export const FeatureSection = ({ section, options, }) => {
|
|
15
16
|
const c = section.content;
|
|
16
17
|
const left = str(c, 'imagePosition', 'right') === 'left';
|
|
17
18
|
const img = str(c, 'imageUrl');
|
|
18
|
-
return (_jsxs("div", { className: "mx-auto grid max-w-5xl items-center gap-10 px-6 md:grid-cols-2", children: [_jsxs("div", { className: left ? 'md:order-2' : '', children: [str(c, 'label') && (_jsx("p", { className: "mb-2 text-sm font-medium tracking-wide text-violet-600 uppercase", children: str(c, 'label') })), _jsx("h2", { className: "text-3xl font-bold tracking-tight", children: str(c, 'heading') }), str(c, 'body') && _jsx("p", { className: "mt-3 text-lg opacity-80", children: str(c, 'body') }), _jsx("div", { className: "mt-5", children: _jsx(Button, { label: str(c, 'buttonLabel'), href: str(c, 'buttonUrl') }) })] }), _jsx("div", { className: left ? 'md:order-1' : '', children: img ? (
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
return (_jsxs("div", { className: "mx-auto grid max-w-5xl items-center gap-10 px-6 md:grid-cols-2", children: [_jsxs("div", { className: left ? 'md:order-2' : '', children: [str(c, 'label') && (_jsx("p", { className: "mb-2 text-sm font-medium tracking-wide text-violet-600 uppercase", children: str(c, 'label') })), _jsx("h2", { className: "text-3xl font-bold tracking-tight", children: str(c, 'heading') }), str(c, 'body') && _jsx("p", { className: "mt-3 text-lg opacity-80", children: str(c, 'body') }), _jsx("div", { className: "mt-5", children: _jsx(Button, { label: str(c, 'buttonLabel'), href: str(c, 'buttonUrl') }) })] }), _jsx("div", { className: left ? 'md:order-1' : '', children: img ? (options.renderImage({
|
|
20
|
+
src: img,
|
|
21
|
+
alt: str(c, 'imageAlt'),
|
|
22
|
+
width: num(c, 'imageWidth'),
|
|
23
|
+
height: num(c, 'imageHeight'),
|
|
24
|
+
className: 'w-full rounded-xl object-cover shadow-sm',
|
|
25
|
+
})) : (_jsx("div", { className: "aspect-video w-full rounded-xl bg-zinc-100", "aria-hidden": true })) })] }));
|
|
21
26
|
};
|
|
22
27
|
export const StatsSection = ({ section }) => {
|
|
23
28
|
const c = section.content;
|
|
@@ -58,11 +63,30 @@ export const RelatedPostsSection = ({ section, ctx, }) => {
|
|
|
58
63
|
const placeholders = related.length ? related : [null, null, null];
|
|
59
64
|
return (_jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [str(c, 'heading') && (_jsx("h2", { className: "mb-6 text-2xl font-bold tracking-tight", children: str(c, 'heading') })), _jsx("div", { className: "grid grid-cols-1 gap-6 sm:grid-cols-3", children: placeholders.map((p, i) => (_jsxs("a", { href: p?.url ?? '#', className: "block rounded-xl border border-zinc-200 p-5 transition-colors hover:border-violet-300 hover:bg-zinc-50", children: [_jsx("p", { className: "font-medium text-zinc-900", children: p?.title ?? 'Related post' }), p?.excerpt && _jsx("p", { className: "mt-2 text-sm text-zinc-600", children: p.excerpt })] }, i))) })] }));
|
|
60
65
|
};
|
|
61
|
-
export const GallerySection = ({ section }) => {
|
|
66
|
+
export const GallerySection = ({ section, options, }) => {
|
|
62
67
|
const c = section.content;
|
|
63
68
|
const cols = str(c, 'columns', '3');
|
|
64
69
|
const colClass = cols === '2' ? 'sm:grid-cols-2' : cols === '4' ? 'sm:grid-cols-4' : 'sm:grid-cols-3';
|
|
65
|
-
return (_jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [str(c, 'heading') && (_jsx("h2", { className: "mb-6 text-2xl font-bold tracking-tight", children: str(c, 'heading') })), _jsx("div", { className: `grid grid-cols-1 gap-4 ${colClass}`, children: rows(c, 'images').map((img, i) => (_jsxs("figure", { children: [
|
|
70
|
+
return (_jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [str(c, 'heading') && (_jsx("h2", { className: "mb-6 text-2xl font-bold tracking-tight", children: str(c, 'heading') })), _jsx("div", { className: `grid grid-cols-1 gap-4 ${colClass}`, children: rows(c, 'images').map((img, i) => (_jsxs("figure", { children: [options.renderImage({
|
|
71
|
+
src: str(img, 'url'),
|
|
72
|
+
alt: str(img, 'alt'),
|
|
73
|
+
width: num(img, 'width'),
|
|
74
|
+
height: num(img, 'height'),
|
|
75
|
+
className: 'aspect-square w-full rounded-lg object-cover',
|
|
76
|
+
}), str(img, 'caption') && (_jsx("figcaption", { className: "mt-1 text-xs text-zinc-500", children: str(img, 'caption') }))] }, i))) })] }));
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Renderer for the `form` section: a heading/intro plus an embedded
|
|
80
|
+
* `<ActuateForm>` that fetches and submits the form named by `content.formSlug`.
|
|
81
|
+
* `<ActuateForm>` is a Client Component; rendering it here creates a client
|
|
82
|
+
* island inside the otherwise-static section tree.
|
|
83
|
+
*/
|
|
84
|
+
export const FormSection = ({ section, options, }) => {
|
|
85
|
+
const c = section.content;
|
|
86
|
+
const formSlug = str(c, 'formSlug');
|
|
87
|
+
const heading = str(c, 'heading');
|
|
88
|
+
const description = str(c, 'description');
|
|
89
|
+
return (_jsxs("div", { className: "mx-auto max-w-xl px-6", children: [heading && _jsx("h2", { className: "text-2xl font-bold tracking-tight", children: heading }), description && _jsx("p", { className: "mt-3 text-zinc-600", children: description }), formSlug ? (_jsx("div", { className: heading || description ? 'mt-6' : '', children: _jsx(ActuateForm, { slug: formSlug, baseUrl: options.baseUrl }) })) : (_jsx("p", { className: "mt-4 text-sm text-zinc-400", children: "No form selected." }))] }));
|
|
66
90
|
};
|
|
67
91
|
/**
|
|
68
92
|
* The built-in renderer map. Keys are the canonical `sectionType` ids from
|
|
@@ -76,6 +100,7 @@ export const DEFAULT_SECTION_RENDERERS = {
|
|
|
76
100
|
feature: FeatureSection,
|
|
77
101
|
stats: StatsSection,
|
|
78
102
|
cta: CtaSection,
|
|
103
|
+
form: FormSection,
|
|
79
104
|
'article-body': ArticleBodySection,
|
|
80
105
|
quote: QuoteSection,
|
|
81
106
|
'author-bio': AuthorBioSection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/components/defaults.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/components/defaults.tsx"],"names":[],"mappings":"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"}
|
package/dist/forms.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, SSR-safe helpers + wire types for the public form renderer.
|
|
3
|
+
*
|
|
4
|
+
* These mirror the `GET /api/cms/public/forms/:slug` response shape produced by
|
|
5
|
+
* cms-core's `buildPublicForm`. They are intentionally permissive (the data
|
|
6
|
+
* arrives off the network as JSON) and contain NO browser APIs so they can be
|
|
7
|
+
* unit-tested in a Node environment and imported by server components.
|
|
8
|
+
*/
|
|
9
|
+
/** A single renderable field, as delivered by the public form schema. */
|
|
10
|
+
export interface PublicFormField {
|
|
11
|
+
id: string;
|
|
12
|
+
key: string;
|
|
13
|
+
label: string;
|
|
14
|
+
type: string;
|
|
15
|
+
required: boolean;
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
helpText?: string;
|
|
18
|
+
defaultValue?: unknown;
|
|
19
|
+
options?: Array<{
|
|
20
|
+
label: string;
|
|
21
|
+
value: string;
|
|
22
|
+
}>;
|
|
23
|
+
width?: string;
|
|
24
|
+
sortOrder?: number;
|
|
25
|
+
}
|
|
26
|
+
/** The public form schema (honeypot field is stripped from `fields`). */
|
|
27
|
+
export interface PublicForm {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
slug: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
fields: PublicFormField[];
|
|
33
|
+
/** Relative path to POST the submission to (e.g. `/api/cms/public/forms/contact/submit`). */
|
|
34
|
+
submitPath: string;
|
|
35
|
+
successMessage?: string;
|
|
36
|
+
redirectUrl?: string;
|
|
37
|
+
spam: {
|
|
38
|
+
honeypotFieldKey?: string;
|
|
39
|
+
minSubmitSeconds?: number;
|
|
40
|
+
};
|
|
41
|
+
captcha?: {
|
|
42
|
+
provider: string;
|
|
43
|
+
siteKey: string;
|
|
44
|
+
};
|
|
45
|
+
schemaVersionId?: string | null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Coerce a raw JSON value into a {@link PublicForm}, or `null` when it is not a
|
|
49
|
+
* usable form schema. Accepts either the bare form object or the API's
|
|
50
|
+
* `{ data: form }` envelope.
|
|
51
|
+
*/
|
|
52
|
+
export declare function coercePublicForm(raw: unknown): PublicForm | null;
|
|
53
|
+
/** How a public field type renders. */
|
|
54
|
+
export type FieldControl = 'input' | 'textarea' | 'select' | 'checkbox' | 'radio';
|
|
55
|
+
/** Decide which control a field type maps to. */
|
|
56
|
+
export declare function fieldControl(type: string): FieldControl;
|
|
57
|
+
/** Map a field type to an `<input type="...">` value (control === 'input' only). */
|
|
58
|
+
export declare function htmlInputType(type: string): string;
|
|
59
|
+
/** The initial value map for a form (honeypot excluded — it is a hidden field). */
|
|
60
|
+
export declare function initialValues(form: Pick<PublicForm, 'fields'>): Record<string, unknown>;
|
|
61
|
+
/** Label of the first required field left empty, or `null` when all are filled. */
|
|
62
|
+
export declare function firstMissingRequired(form: Pick<PublicForm, 'fields'>, values: Record<string, unknown>): string | null;
|
|
63
|
+
export interface SubmitBodyArgs {
|
|
64
|
+
values: Record<string, unknown>;
|
|
65
|
+
honeypotKey?: string;
|
|
66
|
+
honeypotValue?: string;
|
|
67
|
+
elapsedMs?: number | null;
|
|
68
|
+
pageUrl?: string | null;
|
|
69
|
+
captchaToken?: string | null;
|
|
70
|
+
attribution?: Record<string, unknown> | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Build the JSON body for `POST {submitPath}`. The honeypot value is merged
|
|
74
|
+
* into `fields` under its key (it must NOT be a top-level property), matching
|
|
75
|
+
* `parseSubmissionRequest` in cms-core.
|
|
76
|
+
*/
|
|
77
|
+
export declare function buildSubmitBody(args: SubmitBodyArgs): Record<string, unknown>;
|
|
78
|
+
//# sourceMappingURL=forms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../src/forms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE;QACJ,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;IACD,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAqDhE;AAED,uCAAuC;AACvC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAA;AAEjF,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAiBvD;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBlD;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQvF;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,GAAG,IAAI,CAaf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC7C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc7E"}
|
package/dist/forms.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, SSR-safe helpers + wire types for the public form renderer.
|
|
3
|
+
*
|
|
4
|
+
* These mirror the `GET /api/cms/public/forms/:slug` response shape produced by
|
|
5
|
+
* cms-core's `buildPublicForm`. They are intentionally permissive (the data
|
|
6
|
+
* arrives off the network as JSON) and contain NO browser APIs so they can be
|
|
7
|
+
* unit-tested in a Node environment and imported by server components.
|
|
8
|
+
*/
|
|
9
|
+
function isObj(v) {
|
|
10
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Coerce a raw JSON value into a {@link PublicForm}, or `null` when it is not a
|
|
14
|
+
* usable form schema. Accepts either the bare form object or the API's
|
|
15
|
+
* `{ data: form }` envelope.
|
|
16
|
+
*/
|
|
17
|
+
export function coercePublicForm(raw) {
|
|
18
|
+
const root = isObj(raw) && isObj(raw.data) ? raw.data : raw;
|
|
19
|
+
if (!isObj(root))
|
|
20
|
+
return null;
|
|
21
|
+
if (typeof root.slug !== 'string' || typeof root.submitPath !== 'string')
|
|
22
|
+
return null;
|
|
23
|
+
if (!Array.isArray(root.fields))
|
|
24
|
+
return null;
|
|
25
|
+
const fields = root.fields.filter(isObj).map((f) => ({
|
|
26
|
+
id: typeof f.id === 'string' ? f.id : '',
|
|
27
|
+
key: typeof f.key === 'string' ? f.key : '',
|
|
28
|
+
label: typeof f.label === 'string' ? f.label : '',
|
|
29
|
+
type: typeof f.type === 'string' ? f.type : 'text',
|
|
30
|
+
required: f.required === true,
|
|
31
|
+
placeholder: typeof f.placeholder === 'string' ? f.placeholder : undefined,
|
|
32
|
+
helpText: typeof f.helpText === 'string' ? f.helpText : undefined,
|
|
33
|
+
defaultValue: f.defaultValue,
|
|
34
|
+
options: Array.isArray(f.options)
|
|
35
|
+
? f.options
|
|
36
|
+
.filter(isObj)
|
|
37
|
+
.map((o) => ({ label: String(o.label ?? o.value ?? ''), value: String(o.value ?? '') }))
|
|
38
|
+
: undefined,
|
|
39
|
+
width: typeof f.width === 'string' ? f.width : undefined,
|
|
40
|
+
sortOrder: typeof f.sortOrder === 'number' ? f.sortOrder : undefined,
|
|
41
|
+
}));
|
|
42
|
+
const spam = isObj(root.spam) ? root.spam : {};
|
|
43
|
+
const captcha = isObj(root.captcha) &&
|
|
44
|
+
typeof root.captcha.provider === 'string' &&
|
|
45
|
+
typeof root.captcha.siteKey === 'string'
|
|
46
|
+
? { provider: root.captcha.provider, siteKey: root.captcha.siteKey }
|
|
47
|
+
: undefined;
|
|
48
|
+
return {
|
|
49
|
+
id: typeof root.id === 'string' ? root.id : '',
|
|
50
|
+
name: typeof root.name === 'string' ? root.name : '',
|
|
51
|
+
slug: root.slug,
|
|
52
|
+
description: typeof root.description === 'string' ? root.description : undefined,
|
|
53
|
+
fields: fields.filter((f) => f.key),
|
|
54
|
+
submitPath: root.submitPath,
|
|
55
|
+
successMessage: typeof root.successMessage === 'string' ? root.successMessage : undefined,
|
|
56
|
+
redirectUrl: typeof root.redirectUrl === 'string' ? root.redirectUrl : undefined,
|
|
57
|
+
spam: {
|
|
58
|
+
honeypotFieldKey: typeof spam.honeypotFieldKey === 'string' ? spam.honeypotFieldKey : undefined,
|
|
59
|
+
minSubmitSeconds: typeof spam.minSubmitSeconds === 'number' ? spam.minSubmitSeconds : undefined,
|
|
60
|
+
},
|
|
61
|
+
captcha,
|
|
62
|
+
schemaVersionId: typeof root.schemaVersionId === 'string' || root.schemaVersionId === null
|
|
63
|
+
? root.schemaVersionId
|
|
64
|
+
: undefined,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Decide which control a field type maps to. */
|
|
68
|
+
export function fieldControl(type) {
|
|
69
|
+
switch (type) {
|
|
70
|
+
case 'textarea':
|
|
71
|
+
case 'richtext':
|
|
72
|
+
case 'richText':
|
|
73
|
+
return 'textarea';
|
|
74
|
+
case 'select':
|
|
75
|
+
case 'dropdown':
|
|
76
|
+
return 'select';
|
|
77
|
+
case 'checkbox':
|
|
78
|
+
case 'boolean':
|
|
79
|
+
return 'checkbox';
|
|
80
|
+
case 'radio':
|
|
81
|
+
return 'radio';
|
|
82
|
+
default:
|
|
83
|
+
return 'input';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Map a field type to an `<input type="...">` value (control === 'input' only). */
|
|
87
|
+
export function htmlInputType(type) {
|
|
88
|
+
switch (type) {
|
|
89
|
+
case 'email':
|
|
90
|
+
return 'email';
|
|
91
|
+
case 'url':
|
|
92
|
+
return 'url';
|
|
93
|
+
case 'tel':
|
|
94
|
+
case 'phone':
|
|
95
|
+
return 'tel';
|
|
96
|
+
case 'number':
|
|
97
|
+
return 'number';
|
|
98
|
+
case 'date':
|
|
99
|
+
return 'date';
|
|
100
|
+
case 'time':
|
|
101
|
+
return 'time';
|
|
102
|
+
default:
|
|
103
|
+
return 'text';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** The initial value map for a form (honeypot excluded — it is a hidden field). */
|
|
107
|
+
export function initialValues(form) {
|
|
108
|
+
const out = {};
|
|
109
|
+
for (const f of form.fields) {
|
|
110
|
+
if (f.defaultValue !== undefined)
|
|
111
|
+
out[f.key] = f.defaultValue;
|
|
112
|
+
else if (fieldControl(f.type) === 'checkbox')
|
|
113
|
+
out[f.key] = false;
|
|
114
|
+
else
|
|
115
|
+
out[f.key] = '';
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
/** Label of the first required field left empty, or `null` when all are filled. */
|
|
120
|
+
export function firstMissingRequired(form, values) {
|
|
121
|
+
for (const f of form.fields) {
|
|
122
|
+
if (!f.required)
|
|
123
|
+
continue;
|
|
124
|
+
const v = values[f.key];
|
|
125
|
+
const empty = v === undefined ||
|
|
126
|
+
v === null ||
|
|
127
|
+
v === '' ||
|
|
128
|
+
v === false ||
|
|
129
|
+
(Array.isArray(v) && v.length === 0);
|
|
130
|
+
if (empty)
|
|
131
|
+
return f.label || f.key;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Build the JSON body for `POST {submitPath}`. The honeypot value is merged
|
|
137
|
+
* into `fields` under its key (it must NOT be a top-level property), matching
|
|
138
|
+
* `parseSubmissionRequest` in cms-core.
|
|
139
|
+
*/
|
|
140
|
+
export function buildSubmitBody(args) {
|
|
141
|
+
const fields = { ...args.values };
|
|
142
|
+
if (args.honeypotKey)
|
|
143
|
+
fields[args.honeypotKey] = args.honeypotValue ?? '';
|
|
144
|
+
const body = { fields };
|
|
145
|
+
if (typeof args.elapsedMs === 'number' && Number.isFinite(args.elapsedMs)) {
|
|
146
|
+
body.elapsedMs = args.elapsedMs;
|
|
147
|
+
}
|
|
148
|
+
if (args.pageUrl)
|
|
149
|
+
body.pageUrl = args.pageUrl;
|
|
150
|
+
if (args.captchaToken)
|
|
151
|
+
body.captchaToken = args.captchaToken;
|
|
152
|
+
if (args.attribution && typeof args.attribution === 'object') {
|
|
153
|
+
body.attribution = args.attribution;
|
|
154
|
+
}
|
|
155
|
+
return body;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../src/forms.ts"],"names":[],"mappings":"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"}
|
package/dist/image.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default image renderer + a thin `<Img>` wrapper the built-in section
|
|
3
|
+
* renderers use. The default emits a plain `<img>` with native lazy-loading and
|
|
4
|
+
* `decoding="async"`, forwarding intrinsic `width`/`height` when the CMS knows
|
|
5
|
+
* them (set by the `/resolve` media enrichment) to reduce layout shift.
|
|
6
|
+
*
|
|
7
|
+
* Consumers swap in an optimized renderer (e.g. `next/image`) via the
|
|
8
|
+
* `renderImage` option on `<Sections>` — this package stays React-only.
|
|
9
|
+
*/
|
|
10
|
+
import type { ReactNode } from 'react';
|
|
11
|
+
import type { RenderImage, RenderImageProps, ResolvedRenderOptions } from './types.js';
|
|
12
|
+
export declare const defaultRenderImage: RenderImage;
|
|
13
|
+
/** Render an image through the resolved options' image renderer. */
|
|
14
|
+
export declare function Img({ options, ...props }: RenderImageProps & {
|
|
15
|
+
options: ResolvedRenderOptions;
|
|
16
|
+
}): ReactNode;
|
|
17
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEtF,eAAO,MAAM,kBAAkB,EAAE,WAoBhC,CAAA;AAED,oEAAoE;AACpE,wBAAgB,GAAG,CAAC,EAClB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAAE,GAAG,SAAS,CAEnE"}
|
package/dist/image.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export const defaultRenderImage = ({ src, alt, width, height, className, priority, }) => {
|
|
3
|
+
return (
|
|
4
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
5
|
+
_jsx("img", { src: src, alt: alt, width: typeof width === 'number' ? width : undefined, height: typeof height === 'number' ? height : undefined, loading: priority ? 'eager' : 'lazy', decoding: "async", className: className }));
|
|
6
|
+
};
|
|
7
|
+
/** Render an image through the resolved options' image renderer. */
|
|
8
|
+
export function Img({ options, ...props }) {
|
|
9
|
+
return options.renderImage(props);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.tsx"],"names":[],"mappings":";AAYA,MAAM,CAAC,MAAM,kBAAkB,GAAgB,CAAC,EAC9C,GAAG,EACH,GAAG,EACH,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAQ,GACS,EAAa,EAAE;IAChC,OAAO;IACL,qDAAqD;IACrD,cACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACpD,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACvD,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EACpC,QAAQ,EAAC,OAAO,EAChB,SAAS,EAAE,SAAS,GACpB,CACH,CAAA;AACH,CAAC,CAAA;AAED,oEAAoE;AACpE,MAAM,UAAU,GAAG,CAAC,EAClB,OAAO,EACP,GAAG,KAAK,EAC8C;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACnC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,7 +30,14 @@
|
|
|
30
30
|
export { Sections, PostHeader } from './Sections.js';
|
|
31
31
|
export type { SectionsProps, PostHeaderProps } from './Sections.js';
|
|
32
32
|
export { registerSectionRenderer, registerSectionRenderers, unregisterSectionRenderer, resetSectionRenderers, getSectionRenderer, registeredSectionTypes, DEFAULT_SECTION_RENDERERS, } from './registry.js';
|
|
33
|
-
export { HeroSection, TextSection, FeatureSection, StatsSection, CtaSection, ArticleBodySection, QuoteSection, AuthorBioSection, RelatedPostsSection, GallerySection, } from './components/defaults.js';
|
|
33
|
+
export { HeroSection, TextSection, FeatureSection, StatsSection, CtaSection, FormSection, ArticleBodySection, QuoteSection, AuthorBioSection, RelatedPostsSection, GallerySection, } from './components/defaults.js';
|
|
34
|
+
export { ActuateForm } from './ActuateForm.js';
|
|
35
|
+
export type { ActuateFormProps } from './ActuateForm.js';
|
|
36
|
+
export { SiteNav } from './SiteNav.js';
|
|
37
|
+
export type { SiteNavProps, SiteNavItem } from './SiteNav.js';
|
|
38
|
+
export { coercePublicForm, fieldControl, htmlInputType, initialValues, firstMissingRequired, buildSubmitBody, } from './forms.js';
|
|
39
|
+
export type { PublicForm, PublicFormField, FieldControl, SubmitBodyArgs } from './forms.js';
|
|
34
40
|
export { Button } from './primitives.js';
|
|
35
|
-
export
|
|
41
|
+
export { defaultRenderImage } from './image.js';
|
|
42
|
+
export type { PublicSection, PostContext, RenderOptions, ResolvedRenderOptions, RenderImage, RenderImageProps, SectionRenderer, SectionRendererProps, SectionRendererMap, } from './types.js';
|
|
36
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpD,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE7D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3F,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,10 @@
|
|
|
29
29
|
*/
|
|
30
30
|
export { Sections, PostHeader } from './Sections.js';
|
|
31
31
|
export { registerSectionRenderer, registerSectionRenderers, unregisterSectionRenderer, resetSectionRenderers, getSectionRenderer, registeredSectionTypes, DEFAULT_SECTION_RENDERERS, } from './registry.js';
|
|
32
|
-
export { HeroSection, TextSection, FeatureSection, StatsSection, CtaSection, ArticleBodySection, QuoteSection, AuthorBioSection, RelatedPostsSection, GallerySection, } from './components/defaults.js';
|
|
32
|
+
export { HeroSection, TextSection, FeatureSection, StatsSection, CtaSection, FormSection, ArticleBodySection, QuoteSection, AuthorBioSection, RelatedPostsSection, GallerySection, } from './components/defaults.js';
|
|
33
|
+
export { ActuateForm } from './ActuateForm.js';
|
|
34
|
+
export { SiteNav } from './SiteNav.js';
|
|
35
|
+
export { coercePublicForm, fieldControl, htmlInputType, initialValues, firstMissingRequired, buildSubmitBody, } from './forms.js';
|
|
33
36
|
export { Button } from './primitives.js';
|
|
37
|
+
export { defaultRenderImage } from './image.js';
|
|
34
38
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGpD,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGpD,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -58,12 +58,41 @@ export interface PostContext {
|
|
|
58
58
|
* `import { sanitizeHtml } from '@actuate-media/cms-core'` in a server
|
|
59
59
|
* component, or any DOMPurify-style function.
|
|
60
60
|
*/
|
|
61
|
+
/** Props passed to a {@link RenderImage} renderer. */
|
|
62
|
+
export interface RenderImageProps {
|
|
63
|
+
src: string;
|
|
64
|
+
alt: string;
|
|
65
|
+
/** Intrinsic dimensions from the media library, when known (helps avoid CLS). */
|
|
66
|
+
width?: number | null;
|
|
67
|
+
height?: number | null;
|
|
68
|
+
className?: string;
|
|
69
|
+
/** Above-the-fold images opt out of lazy-loading. */
|
|
70
|
+
priority?: boolean;
|
|
71
|
+
/** Responsive `sizes` hint, forwarded to image components that support it. */
|
|
72
|
+
sizes?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Pluggable image renderer. The default emits a plain `<img>` with native
|
|
76
|
+
* lazy-loading; a Next.js consumer can pass a `next/image`-backed renderer to
|
|
77
|
+
* get responsive `srcset` + optimization without coupling this package to Next.
|
|
78
|
+
*/
|
|
79
|
+
export type RenderImage = (props: RenderImageProps) => ReactNode;
|
|
61
80
|
export interface RenderOptions {
|
|
62
81
|
sanitizeHtml?: (html: string) => string;
|
|
82
|
+
/**
|
|
83
|
+
* Origin of the CMS API used by data-driven sections (e.g. the `form`
|
|
84
|
+
* section's `<ActuateForm>`). Defaults to `''` (same-origin relative URLs),
|
|
85
|
+
* correct for a Next.js app mounting the Actuate API at `/api/cms`.
|
|
86
|
+
*/
|
|
87
|
+
baseUrl?: string;
|
|
88
|
+
/** Custom image renderer (e.g. `next/image`). Defaults to a lazy `<img>`. */
|
|
89
|
+
renderImage?: RenderImage;
|
|
63
90
|
}
|
|
64
91
|
/** Internal: options with all defaults resolved. */
|
|
65
92
|
export interface ResolvedRenderOptions {
|
|
66
93
|
sanitizeHtml: (html: string) => string;
|
|
94
|
+
baseUrl: string;
|
|
95
|
+
renderImage: RenderImage;
|
|
67
96
|
}
|
|
68
97
|
/** Props every section renderer receives. */
|
|
69
98
|
export interface SectionRendererProps {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACxE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACxE;AAED;;;;;;;;;;;;GAYG;AACH,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAA;AAEhE,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,WAAW,CAAA;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAA;IACtB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,qBAAqB,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,SAAS,CAAA;AAExE,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
export declare function str(content: Record<string, unknown> | undefined, key: string, fallback?: string): string;
|
|
7
7
|
/** Read a boolean field from a section's content, with a fallback. */
|
|
8
8
|
export declare function bool(content: Record<string, unknown> | undefined, key: string, fallback?: boolean): boolean;
|
|
9
|
+
/** Read a finite number field from a section's content, else `null`. */
|
|
10
|
+
export declare function num(content: Record<string, unknown> | undefined, key: string): number | null;
|
|
9
11
|
/** Read an array-of-records field (e.g. `stats`, `images`) defensively. */
|
|
10
12
|
export declare function rows(content: Record<string, unknown> | undefined, key: string): Array<Record<string, unknown>>;
|
|
11
13
|
/** Vertical padding utility class from a section's `paddingY` setting. */
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qEAAqE;AACrE,wBAAgB,GAAG,CACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,SAAK,GACZ,MAAM,CAGR;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,UAAQ,GACf,OAAO,CAGT;AAED,2EAA2E;AAC3E,wBAAgB,IAAI,CAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,GACV,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAGhC;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAWlF;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CASrF;AAED,gFAAgF;AAChF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,CAK7E;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAK9D"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qEAAqE;AACrE,wBAAgB,GAAG,CACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,SAAK,GACZ,MAAM,CAGR;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,UAAQ,GACf,OAAO,CAGT;AAED,wEAAwE;AACxE,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5F;AAED,2EAA2E;AAC3E,wBAAgB,IAAI,CAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,GACV,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAGhC;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAWlF;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CASrF;AAED,gFAAgF;AAChF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,CAK7E;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAK9D"}
|
package/dist/utils.js
CHANGED
|
@@ -12,6 +12,11 @@ export function bool(content, key, fallback = false) {
|
|
|
12
12
|
const v = content?.[key];
|
|
13
13
|
return typeof v === 'boolean' ? v : fallback;
|
|
14
14
|
}
|
|
15
|
+
/** Read a finite number field from a section's content, else `null`. */
|
|
16
|
+
export function num(content, key) {
|
|
17
|
+
const v = content?.[key];
|
|
18
|
+
return typeof v === 'number' && Number.isFinite(v) ? v : null;
|
|
19
|
+
}
|
|
15
20
|
/** Read an array-of-records field (e.g. `stats`, `images`) defensively. */
|
|
16
21
|
export function rows(content, key) {
|
|
17
22
|
const v = content?.[key];
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qEAAqE;AACrE,MAAM,UAAU,GAAG,CACjB,OAA4C,EAC5C,GAAW,EACX,QAAQ,GAAG,EAAE;IAEb,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC7C,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAClB,OAA4C,EAC5C,GAAW,EACX,QAAQ,GAAG,KAAK;IAEhB,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC9C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,IAAI,CAClB,OAA4C,EAC5C,GAAW;IAEX,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAoC,CAAC,CAAC,CAAC,EAAE,CAAA;AACtE,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,QAA6C;IACxE,QAAQ,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC3B,KAAK,IAAI;YACP,OAAO,MAAM,CAAA;QACf,KAAK,IAAI;YACP,OAAO,OAAO,CAAA;QAChB,KAAK,IAAI;YACP,OAAO,gBAAgB,CAAA;QACzB;YACE,OAAO,gBAAgB,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,QAA6C;IAC3E,MAAM,IAAI,GAAG,QAAQ,EAAE,cAAc,CAAA;IACrC,MAAM,KAAK,GAAG,QAAQ,EAAE,eAAe,CAAA;IACvC,IAAI,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,4DAA4D,CAAA;IACrE,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,0BAA0B,CAAA;IAC7E,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,0BAA0B,CAAA;IAC5E,OAAO,wBAAwB,CAAA;AACjC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,MAAM,CAAC,QAA6C;IAClE,OAAO,CACL,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,IAAI,QAAQ,EAAE,cAAc,KAAK,UAAU,CAAC;QACjF,QAAQ,EAAE,eAAe,KAAK,QAAQ,CACvC,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;AAC5F,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actuate-media/sections-react",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Public React renderer for Actuate CMS page sections — the canonical PageSection[] contract — with a consumer-controlled renderer registry.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dist"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@actuate-media/cms-core": "0.
|
|
28
|
+
"@actuate-media/cms-core": "0.51.1"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"react": ">=18.0.0"
|