@byscott-io/pagelet 0.0.0-stage → 0.1.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 +30 -0
- package/LICENSE +21 -0
- package/README.md +140 -2
- package/dist/editor.cjs +59 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.css +3214 -0
- package/dist/editor.js +57 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.cjs +599 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +582 -0
- package/dist/index.js.map +1 -0
- package/package.json +76 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/document.js","../src/PageletPage.jsx","../src/safeUrl.js","../src/theme.js","../src/blocks/content.jsx","../src/blocks/layout.jsx","../src/blocks/media.jsx","../src/blocks/index.js","../src/ThemeRoot.jsx","../src/palette.jsx","../src/client.js"],"sourcesContent":["import { migrate } from '@puckeditor/core/rsc';\n\n// What an app stores for a page: Puck's data inside an envelope that carries\n// pagelet's own format version. The version lets a stored page be upgraded when\n// pagelet or Puck changes shape, so apps never hold raw Puck data whose format\n// they do not control.\nexport const DOCUMENT_VERSION = 1;\n\nexport function emptyData() {\n return { root: { props: {} }, content: [] };\n}\n\nexport function createDocument(data = emptyData()) {\n return { pagelet: DOCUMENT_VERSION, data };\n}\n\n// Bring a stored document up to the current format.\n//\n// Accepts bare Puck data too, since an app adopting pagelet may already hold\n// some. Passing the palette also runs Puck's own migrate(), which converts\n// older Puck structures (DropZone zones) into the current one (slots).\nexport function upgradeDocument(document, palette) {\n if (document == null) return createDocument();\n if (typeof document !== 'object') {\n throw new TypeError('pagelet: a page document must be an object');\n }\n\n let doc = document;\n if (!('pagelet' in doc)) {\n if (!('content' in doc) && !('root' in doc)) {\n throw new TypeError('pagelet: not a page document (no \"pagelet\" version and no Puck data)');\n }\n doc = createDocument(doc);\n }\n\n if (doc.pagelet > DOCUMENT_VERSION) {\n throw new Error(\n `pagelet: this page was saved by a newer pagelet (format ${doc.pagelet}); ` +\n `this version reads up to format ${DOCUMENT_VERSION}. Upgrade @byscott-io/pagelet.`,\n );\n }\n\n // Format migrations go here, one step per version:\n // if (doc.pagelet === 1) doc = migrateV1toV2(doc);\n\n const data = { ...emptyData(), ...doc.data };\n return createDocument(palette && needsPuckMigration(data) ? migrate(data, palette.config) : data);\n}\n\n// Puck's migrate() logs to the console every time it is given a config, even\n// when there is nothing to convert. On a public page that would be a log line\n// per page view, so only call it for data in an older Puck shape: DropZone\n// zones holding content, or a root whose fields sit outside `props`.\nexport function needsPuckMigration(data) {\n const zones = data.zones ?? {};\n if (Object.values(zones).some((content) => Array.isArray(content) && content.length > 0)) return true;\n const root = data.root ?? {};\n return Object.keys(root).some((key) => key !== 'props' && key !== 'readOnly');\n}\n","import { Render } from '@puckeditor/core/rsc';\nimport { upgradeDocument } from './document.js';\n\n// Draw a saved page. Imports nothing from the editor, so public pages stay\n// small, and uses no browser-only API, so it runs in server-side rendering.\nexport function PageletPage({ document, palette, theme }) {\n if (!palette) throw new Error('pagelet: <PageletPage> needs a palette (see createPalette)');\n const { data } = upgradeDocument(document, palette);\n return <Render config={palette.config} data={data} metadata={{ pageletTheme: theme }} />;\n}\n","// Page content is written by an app's users, so every URL a block puts into an\n// href or src goes through here. A javascript: or data: URL in a link is script\n// injection; this allows only the schemes a page legitimately links to.\n\nconst SAFE_SCHEMES = ['http:', 'https:', 'mailto:', 'tel:'];\n\nexport function safeUrl(value) {\n if (typeof value !== 'string') return undefined;\n const url = value.trim();\n if (url === '') return undefined;\n\n // Relative and fragment links carry no scheme and are safe.\n if (url.startsWith('/') && !url.startsWith('//')) return url;\n if (url.startsWith('#') || url.startsWith('?')) return url;\n\n // Browsers ignore embedded whitespace and control characters in a scheme\n // (\"java\\tscript:\"), so strip them before deciding.\n // eslint-disable-next-line no-control-regex -- matching control characters is the point\n const normalized = url.replace(/[\\u0000- ]/g, '').toLowerCase();\n const scheme = normalized.match(/^([a-z][a-z0-9+.-]*):/);\n if (!scheme) return undefined;\n\n return SAFE_SCHEMES.includes(`${scheme[1]}:`) ? url : undefined;\n}\n\n// Images: http(s) and relative only.\nexport function safeImageUrl(value) {\n const url = safeUrl(value);\n if (!url) return undefined;\n return /^(mailto|tel):/i.test(url) ? undefined : url;\n}\n","// Theme tokens become CSS custom properties on the page wrapper, and every\n// built-in block styles itself with var(--pagelet-*). A host app passes its own\n// theme object; anything it leaves out falls back to these defaults.\n//\n// CSS variables rather than a stylesheet because they cross into Puck's editor\n// preview iframe with the page itself (the wrapper is the page's root render),\n// and they need nothing loaded to work during server-side rendering.\n\nexport const defaultTheme = {\n colorText: '#1f2933',\n colorBackground: '#ffffff',\n colorMuted: '#f3f4f6',\n colorAccent: '#2457a6',\n colorAccentText: '#ffffff',\n fontBody: 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n fontHeading: 'inherit',\n radius: '8px',\n maxWidth: '1100px',\n space: '24px',\n};\n\nconst TOKEN_NAMES = Object.keys(defaultTheme);\n\n// colorAccentText -> --pagelet-color-accent-text\nfunction cssVariableName(token) {\n return `--pagelet-${token.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`;\n}\n\nexport function themeToStyle(theme = {}) {\n const merged = { ...defaultTheme, ...theme };\n const style = {};\n for (const token of TOKEN_NAMES) {\n style[cssVariableName(token)] = String(merged[token]);\n }\n style.color = 'var(--pagelet-color-text)';\n style.background = 'var(--pagelet-color-background)';\n style.fontFamily = 'var(--pagelet-font-body)';\n return style;\n}\n\nexport function tokenVar(token) {\n return `var(${cssVariableName(token)})`;\n}\n","import { safeImageUrl, safeUrl } from '../safeUrl.js';\nimport { tokenVar } from '../theme.js';\n\nconst alignOptions = [\n { label: 'Left', value: 'left' },\n { label: 'Center', value: 'center' },\n];\n\n// Plain text with blank lines between paragraphs. Rendered as text, never as\n// HTML, so nothing a user types can inject markup.\nfunction paragraphs(text) {\n return String(text ?? '')\n .split(/\\n\\s*\\n/)\n .map((paragraph) => paragraph.trim())\n .filter(Boolean);\n}\n\nfunction Paragraphs({ text, style }) {\n return paragraphs(text).map((paragraph, index) => (\n <p key={index} style={{ margin: '0 0 1em', whiteSpace: 'pre-line', ...style }}>\n {paragraph}\n </p>\n ));\n}\n\nfunction ButtonLink({ label, href, variant = 'primary' }) {\n const url = safeUrl(href);\n if (!label) return null;\n const primary = variant !== 'outline';\n return (\n <a\n href={url}\n style={{\n display: 'inline-block',\n padding: '10px 20px',\n borderRadius: tokenVar('radius'),\n border: `2px solid ${tokenVar('colorAccent')}`,\n background: primary ? tokenVar('colorAccent') : 'transparent',\n color: primary ? tokenVar('colorAccentText') : tokenVar('colorAccent'),\n fontWeight: 600,\n textDecoration: 'none',\n }}\n >\n {label}\n </a>\n );\n}\n\nconst buttonFields = {\n buttonLabel: { type: 'text', label: 'Button label' },\n buttonHref: { type: 'text', label: 'Button link' },\n};\n\nexport const Heading = {\n label: 'Heading',\n category: 'content',\n fields: {\n text: { type: 'text' },\n level: {\n type: 'select',\n options: [\n { label: 'Large (H1)', value: 'h1' },\n { label: 'Medium (H2)', value: 'h2' },\n { label: 'Small (H3)', value: 'h3' },\n ],\n },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { text: 'Heading', level: 'h2', align: 'left' },\n render: ({ text, level, align }) => {\n const Tag = ['h1', 'h2', 'h3'].includes(level) ? level : 'h2';\n return (\n <Tag style={{ fontFamily: tokenVar('fontHeading'), textAlign: align, margin: '0 0 0.5em', textWrap: 'balance' }}>\n {text}\n </Tag>\n );\n },\n};\n\nexport const Text = {\n label: 'Text',\n category: 'content',\n fields: {\n text: { type: 'textarea' },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { text: 'Write something here.', align: 'left' },\n render: ({ text, align }) => (\n <div style={{ textAlign: align, maxWidth: '68ch', marginInline: align === 'center' ? 'auto' : undefined }}>\n <Paragraphs text={text} />\n </div>\n ),\n};\n\nexport const Button = {\n label: 'Button',\n category: 'content',\n fields: {\n label: { type: 'text' },\n href: { type: 'text', label: 'Link' },\n variant: {\n type: 'radio',\n options: [\n { label: 'Filled', value: 'primary' },\n { label: 'Outline', value: 'outline' },\n ],\n },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { label: 'Learn more', href: '#', variant: 'primary', align: 'left' },\n render: ({ label, href, variant, align }) => (\n <div style={{ textAlign: align, margin: '0 0 1em' }}>\n <ButtonLink label={label} href={href} variant={variant} />\n </div>\n ),\n};\n\nexport const Hero = {\n label: 'Hero',\n category: 'content',\n fields: {\n heading: { type: 'text' },\n subheading: { type: 'textarea' },\n imageUrl: { type: 'text', label: 'Background image URL' },\n ...buttonFields,\n },\n defaultProps: { heading: 'Welcome', subheading: '', imageUrl: '', buttonLabel: '', buttonHref: '' },\n render: ({ heading, subheading, imageUrl, buttonLabel, buttonHref }) => {\n const image = safeImageUrl(imageUrl);\n return (\n <header\n style={{\n padding: '96px 16px',\n textAlign: 'center',\n color: image ? '#ffffff' : tokenVar('colorAccentText'),\n background: image\n ? `linear-gradient(rgba(0,0,0,0.45), rgba(0,0,0,0.45)), url(\"${encodeURI(image)}\") center / cover`\n : tokenVar('colorAccent'),\n }}\n >\n <div style={{ maxWidth: '760px', margin: '0 auto' }}>\n <h1 style={{ fontFamily: tokenVar('fontHeading'), fontSize: 'clamp(2rem, 5vw, 3.25rem)', margin: '0 0 0.4em', textWrap: 'balance' }}>\n {heading}\n </h1>\n <Paragraphs text={subheading} style={{ fontSize: '1.15rem' }} />\n <ButtonLink label={buttonLabel} href={buttonHref} variant=\"outline\" />\n </div>\n </header>\n );\n },\n};\n\nexport const CallToAction = {\n label: 'Call to action',\n category: 'content',\n fields: {\n heading: { type: 'text' },\n text: { type: 'textarea' },\n ...buttonFields,\n },\n defaultProps: { heading: 'Join us', text: '', buttonLabel: 'Get in touch', buttonHref: '#' },\n render: ({ heading, text, buttonLabel, buttonHref }) => (\n <div style={{ background: tokenVar('colorMuted'), borderRadius: tokenVar('radius'), padding: '40px 24px', textAlign: 'center' }}>\n <h2 style={{ fontFamily: tokenVar('fontHeading'), margin: '0 0 0.5em' }}>{heading}</h2>\n <Paragraphs text={text} />\n <ButtonLink label={buttonLabel} href={buttonHref} />\n </div>\n ),\n};\n\nexport const Cards = {\n label: 'Cards',\n category: 'content',\n fields: {\n items: {\n type: 'array',\n getItemSummary: (item) => item.title || 'Card',\n arrayFields: {\n title: { type: 'text' },\n text: { type: 'textarea' },\n imageUrl: { type: 'text', label: 'Image URL' },\n href: { type: 'text', label: 'Link (optional)' },\n },\n defaultItemProps: { title: 'Card title', text: '', imageUrl: '', href: '' },\n },\n },\n defaultProps: { items: [{ title: 'Card title', text: 'A short description.', imageUrl: '', href: '' }] },\n render: ({ items = [] }) => (\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(min(100%, 240px), 1fr))', gap: tokenVar('space') }}>\n {items.map((item, index) => {\n const image = safeImageUrl(item.imageUrl);\n const href = safeUrl(item.href);\n const body = (\n <>\n {image && <img src={image} alt=\"\" style={{ width: '100%', aspectRatio: '16 / 9', objectFit: 'cover', display: 'block' }} />}\n <div style={{ padding: '16px' }}>\n <h3 style={{ fontFamily: tokenVar('fontHeading'), margin: '0 0 0.4em' }}>{item.title}</h3>\n <Paragraphs text={item.text} />\n </div>\n </>\n );\n const cardStyle = { display: 'block', background: tokenVar('colorMuted'), borderRadius: tokenVar('radius'), overflow: 'hidden', color: 'inherit', textDecoration: 'none' };\n return href ? (\n <a key={index} href={href} style={cardStyle}>{body}</a>\n ) : (\n <div key={index} style={cardStyle}>{body}</div>\n );\n })}\n </div>\n ),\n};\n\n// <details>/<summary>: opens and closes with no JavaScript, so it works the\n// same in server-rendered HTML as in the browser.\nexport const Faq = {\n label: 'FAQ',\n category: 'content',\n fields: {\n items: {\n type: 'array',\n getItemSummary: (item) => item.question || 'Question',\n arrayFields: { question: { type: 'text' }, answer: { type: 'textarea' } },\n defaultItemProps: { question: 'Question?', answer: '' },\n },\n },\n defaultProps: { items: [{ question: 'Question?', answer: 'Answer.' }] },\n render: ({ items = [] }) => (\n <div>\n {items.map((item, index) => (\n <details key={index} style={{ borderBottom: `1px solid ${tokenVar('colorMuted')}`, padding: '12px 0' }}>\n <summary style={{ fontWeight: 600, cursor: 'pointer' }}>{item.question}</summary>\n <div style={{ paddingTop: '8px' }}>\n <Paragraphs text={item.answer} />\n </div>\n </details>\n ))}\n </div>\n ),\n};\n","import { tokenVar } from '../theme.js';\n\nconst SPACING = { none: '0', small: '16px', medium: '40px', large: '80px' };\nconst spacingOptions = Object.keys(SPACING).map((value) => ({ label: value, value }));\n\nconst BACKGROUNDS = {\n none: 'transparent',\n muted: tokenVar('colorMuted'),\n accent: tokenVar('colorAccent'),\n};\n\nexport const Section = {\n label: 'Section',\n category: 'layout',\n fields: {\n background: {\n type: 'select',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Muted', value: 'muted' },\n { label: 'Accent', value: 'accent' },\n ],\n },\n padding: { type: 'select', options: spacingOptions },\n content: { type: 'slot' },\n },\n defaultProps: { background: 'none', padding: 'medium' },\n render: ({ background, padding, content: Content }) => (\n <section\n style={{\n background: BACKGROUNDS[background] ?? BACKGROUNDS.none,\n color: background === 'accent' ? tokenVar('colorAccentText') : undefined,\n paddingBlock: SPACING[padding] ?? SPACING.medium,\n }}\n >\n <div style={{ maxWidth: tokenVar('maxWidth'), margin: '0 auto', paddingInline: '16px' }}>\n <Content />\n </div>\n </section>\n ),\n};\n\nexport const Columns = {\n label: 'Columns',\n category: 'layout',\n fields: {\n count: {\n type: 'radio',\n options: [\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n ],\n },\n first: { type: 'slot' },\n second: { type: 'slot' },\n third: { type: 'slot' },\n },\n defaultProps: { count: 2 },\n render: ({ count, first: First, second: Second, third: Third }) => {\n const columns = count === 3 ? [First, Second, Third] : [First, Second];\n return (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${count === 3 ? 240 : 320}px), 1fr))`,\n gap: tokenVar('space'),\n }}\n >\n {columns.map((Column, index) => (\n <div key={index} style={{ minWidth: 0 }}>\n <Column />\n </div>\n ))}\n </div>\n );\n },\n};\n\nexport const Spacer = {\n label: 'Spacer',\n category: 'layout',\n fields: { size: { type: 'select', options: spacingOptions.slice(1) } },\n defaultProps: { size: 'medium' },\n render: ({ size }) => <div aria-hidden=\"true\" style={{ height: SPACING[size] ?? SPACING.medium }} />,\n};\n\nexport const Divider = {\n label: 'Divider',\n category: 'layout',\n fields: {},\n render: () => (\n <hr style={{ border: 0, borderTop: `1px solid ${tokenVar('colorMuted')}`, margin: `${tokenVar('space')} 0` }} />\n ),\n};\n","import { safeImageUrl } from '../safeUrl.js';\nimport { tokenVar } from '../theme.js';\n\nexport const Image = {\n label: 'Image',\n category: 'media',\n fields: {\n url: { type: 'text', label: 'Image URL' },\n alt: { type: 'text', label: 'Description (for screen readers)' },\n caption: { type: 'text' },\n },\n defaultProps: { url: '', alt: '', caption: '' },\n render: ({ url, alt, caption }) => {\n const src = safeImageUrl(url);\n if (!src) return null;\n return (\n <figure style={{ margin: '0 0 1em' }}>\n <img src={src} alt={alt ?? ''} style={{ maxWidth: '100%', height: 'auto', display: 'block', borderRadius: tokenVar('radius') }} />\n {caption && <figcaption style={{ fontSize: '0.9em', opacity: 0.75, marginTop: '6px' }}>{caption}</figcaption>}\n </figure>\n );\n },\n};\n\nexport const ImageText = {\n label: 'Image with text',\n category: 'media',\n fields: {\n url: { type: 'text', label: 'Image URL' },\n alt: { type: 'text', label: 'Image description' },\n heading: { type: 'text' },\n text: { type: 'textarea' },\n imageSide: {\n type: 'radio',\n options: [\n { label: 'Left', value: 'left' },\n { label: 'Right', value: 'right' },\n ],\n },\n },\n defaultProps: { url: '', alt: '', heading: 'Heading', text: '', imageSide: 'left' },\n render: ({ url, alt, heading, text, imageSide }) => {\n const src = safeImageUrl(url);\n // CSS order rather than reordering children, so the reading order stays\n // the same for screen readers whichever side the image is drawn on.\n const image = src ? (\n <img src={src} alt={alt ?? ''} style={{ width: '100%', height: 'auto', display: 'block', borderRadius: tokenVar('radius'), order: imageSide === 'right' ? 2 : 0 }} />\n ) : null;\n const words = (\n <div style={{ minWidth: 0, order: 1 }}>\n <h2 style={{ fontFamily: tokenVar('fontHeading'), margin: '0 0 0.5em' }}>{heading}</h2>\n {String(text ?? '')\n .split(/\\n\\s*\\n/)\n .filter((paragraph) => paragraph.trim())\n .map((paragraph, index) => (\n <p key={index} style={{ margin: '0 0 1em' }}>{paragraph.trim()}</p>\n ))}\n </div>\n );\n return (\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 300px), 1fr))', gap: tokenVar('space'), alignItems: 'center' }}>\n {image}\n {words}\n </div>\n );\n },\n};\n\n// Only these hosts are embedded. Anything else renders as a plain link, so a\n// page cannot be made to frame an arbitrary site.\nexport function embedUrl(value) {\n let url;\n try {\n url = new URL(String(value ?? '').trim());\n } catch {\n return undefined;\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return undefined;\n const host = url.hostname.replace(/^www\\./, '').replace(/^m\\./, '');\n\n let id;\n if (host === 'youtube.com') {\n id = url.pathname === '/watch' ? url.searchParams.get('v') : url.pathname.match(/^\\/(?:embed|shorts|live)\\/([^/]+)/)?.[1];\n return id && /^[\\w-]{6,}$/.test(id) ? `https://www.youtube-nocookie.com/embed/${id}` : undefined;\n }\n if (host === 'youtu.be') {\n id = url.pathname.slice(1);\n return /^[\\w-]{6,}$/.test(id) ? `https://www.youtube-nocookie.com/embed/${id}` : undefined;\n }\n if (host === 'vimeo.com') {\n id = url.pathname.match(/^\\/(\\d+)/)?.[1];\n return id ? `https://player.vimeo.com/video/${id}` : undefined;\n }\n return undefined;\n}\n\nexport const VideoEmbed = {\n label: 'Video (YouTube or Vimeo)',\n category: 'media',\n fields: {\n url: { type: 'text', label: 'Video link' },\n title: { type: 'text', label: 'Title (for screen readers)' },\n },\n defaultProps: { url: '', title: 'Video' },\n render: ({ url, title }) => {\n const src = embedUrl(url);\n if (!src) return null;\n return (\n <div style={{ position: 'relative', aspectRatio: '16 / 9', maxWidth: '100%', margin: '0 0 1em' }}>\n <iframe\n src={src}\n title={title || 'Video'}\n loading=\"lazy\"\n allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture; fullscreen\"\n allowFullScreen\n style={{ position: 'absolute', inset: 0, width: '100%', height: '100%', border: 0, borderRadius: tokenVar('radius') }}\n />\n </div>\n );\n },\n};\n","import { CallToAction, Button, Cards, Faq, Heading, Hero, Text } from './content.jsx';\nimport { Columns, Divider, Section, Spacer } from './layout.jsx';\nimport { Image, ImageText, VideoEmbed } from './media.jsx';\n\n// The standard palette every app gets. An app adds its own blocks beside these,\n// and may hide any of them (see createPalette).\nexport const builtInBlocks = {\n Section,\n Columns,\n Spacer,\n Divider,\n Hero,\n Heading,\n Text,\n Button,\n CallToAction,\n Cards,\n Faq,\n Image,\n ImageText,\n VideoEmbed,\n};\n\nexport const builtInCategories = {\n layout: { title: 'Layout' },\n content: { title: 'Content' },\n media: { title: 'Media' },\n};\n","import { themeToStyle } from './theme.js';\n\nexport function ThemeRoot({ theme, children }) {\n return (\n <div className=\"pagelet\" style={themeToStyle(theme)}>\n {children}\n </div>\n );\n}\n","import { builtInBlocks, builtInCategories } from './blocks/index.js';\nimport { ThemeRoot } from './ThemeRoot.jsx';\n\n// Build the palette an app uses for both editing and rendering.\n//\n// createPalette({\n// blocks: { SermonPlayer: { label, category: 'media', fields, render } },\n// hide: ['Faq'],\n// categories: { sermons: { title: 'Sermons' } },\n// })\n//\n// A block is a Puck component config plus an optional `category`. App blocks\n// sit beside the built-in ones; an app block with a built-in block's name\n// replaces it, which is how an app restyles a standard block.\nexport function createPalette({ blocks = {}, hide = [], categories = {}, root = {} } = {}) {\n const hidden = new Set(hide);\n for (const name of hidden) {\n if (!(name in builtInBlocks) && !(name in blocks)) {\n throw new Error(`pagelet: cannot hide unknown block \"${name}\"`);\n }\n }\n\n const all = { ...builtInBlocks, ...blocks };\n const components = {};\n const membership = {};\n\n for (const [name, block] of Object.entries(all)) {\n if (hidden.has(name)) continue;\n if (typeof block?.render !== 'function') {\n throw new Error(`pagelet: block \"${name}\" needs a render function`);\n }\n const { category = 'other', ...component } = block;\n components[name] = component;\n (membership[category] ??= []).push(name);\n }\n\n const categoryInfo = { ...builtInCategories, ...categories };\n const puckCategories = {};\n // Categories the app declared come first, in declaration order, then the rest.\n const order = [...new Set([...Object.keys(categories), ...Object.keys(builtInCategories), ...Object.keys(membership)])];\n for (const category of order) {\n if (!membership[category]) continue;\n puckCategories[category] = { title: categoryInfo[category]?.title ?? category, components: membership[category] };\n }\n\n return {\n blocks: Object.keys(components),\n config: {\n components,\n categories: puckCategories,\n root: {\n ...root,\n // The page's root render applies the theme. It is the root of the\n // editor's preview iframe as well as of a rendered page, so the theme\n // reaches both. Pages receive it through Puck's metadata.\n render: ({ children, puck }) => <ThemeRoot theme={puck?.metadata?.pageletTheme}>{children}</ThemeRoot>,\n },\n },\n };\n}\n","// Talks to the pagelet Rails engine's API (mounted at /pagelet by default).\n//\n// const pages = createPageletClient(); // same-origin, /pagelet\n// const { page } = await pages.getPage(id);\n// await pages.saveDraft(id, document);\n// await pages.publish(id);\n//\n// Requests carry the app's session cookie and its CSRF token, because the\n// engine's controllers inherit the app's own sign-in and CSRF protection.\n\nexport class PageletApiError extends Error {\n constructor(message, { status, errors } = {}) {\n super(message);\n this.name = 'PageletApiError';\n this.status = status;\n // Field errors from a 422, e.g. { path: ['Path has already been taken'] }.\n this.errors = errors ?? {};\n }\n}\n\n// The token Rails puts in the layout with csrf_meta_tags.\nfunction csrfFromPage() {\n if (typeof document === 'undefined') return undefined;\n return document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content') ?? undefined;\n}\n\nexport function createPageletClient({ baseUrl = '/pagelet', csrfToken, headers = {}, fetch: fetchImpl } = {}) {\n const doFetch = fetchImpl ?? globalThis.fetch;\n if (typeof doFetch !== 'function') throw new Error('pagelet: no fetch available; pass one to createPageletClient');\n // A loop rather than /\\/+$/: that regex is slow on long runs of slashes.\n let root = String(baseUrl);\n while (root.endsWith('/')) root = root.slice(0, -1);\n\n async function request(method, path, body) {\n const token = typeof csrfToken === 'function' ? csrfToken() : (csrfToken ?? csrfFromPage());\n const response = await doFetch(`${root}${path}`, {\n method,\n credentials: 'same-origin',\n headers: {\n Accept: 'application/json',\n ...(body === undefined ? {} : { 'Content-Type': 'application/json' }),\n ...(token && method !== 'GET' ? { 'X-CSRF-Token': token } : {}),\n ...headers,\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n\n if (response.status === 204) return null;\n const payload = await response.json().catch(() => ({}));\n if (response.ok) return payload;\n\n const messages = Object.values(payload.errors ?? {}).flat();\n const detail = messages.length ? messages.join('; ') : (payload.error ?? response.statusText);\n throw new PageletApiError(`pagelet: ${method} ${path} failed (${response.status}): ${detail}`, {\n status: response.status,\n errors: payload.errors,\n });\n }\n\n const pagePath = (id) => `/pages/${encodeURIComponent(id)}`;\n\n return {\n listPages: () => request('GET', '/pages'),\n getPage: (id) => request('GET', pagePath(id)),\n createPage: ({ path, title }) => request('POST', '/pages', { page: { path, title } }),\n updatePage: (id, { path, title }) => request('PATCH', pagePath(id), { page: { path, title } }),\n saveDraft: (id, document) => request('PATCH', pagePath(id), { page: { draft_document: document } }),\n deletePage: (id) => request('DELETE', pagePath(id)),\n publish: (id, { publishedBy } = {}) =>\n request('POST', `${pagePath(id)}/publish`, publishedBy ? { published_by: publishedBy } : {}),\n listVersions: (id) => request('GET', `${pagePath(id)}/versions`),\n restoreVersion: (id, number) => request('POST', `${pagePath(id)}/versions/${encodeURIComponent(number)}/restore`, {}),\n // Public: the published document at a path, or null when there is none.\n getPublished: async (path) => {\n try {\n const { document } = await request('GET', `/published?path=${encodeURIComponent(path)}`);\n return document;\n } catch (error) {\n if (error instanceof PageletApiError && error.status === 404) return null;\n throw error;\n }\n },\n };\n}\n"],"names":["migrate","jsx","Render","jsxs","Fragment","document"],"mappings":"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"}
|