@byscott-io/pagelet 0.2.0 → 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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/document.js","../src/PageletPage.jsx","../src/icons.jsx","../src/safeUrl.js","../src/theme.js","../src/blocks/content.jsx","../src/style.js","../src/blocks/layout.jsx","../src/blocks/media.jsx","../src/blocks/index.js","../src/ThemeRoot.jsx","../src/palette.jsx","../src/client.js","../src/PageletMenu.jsx","../src/PageletLayout.jsx"],"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\n// A page's own settings (title, background), for the app to use outside the\n// page body, e.g. the browser title.\nexport function pageSettings(document) {\n const props = upgradeDocument(document)?.data?.root?.props ?? {};\n return { title: props.title || '', background: props.background ?? 'site' };\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","// A small built-in icon set, drawn as inline SVG so pages need no icon font and\n// render identically on the server. Each is a 24x24 outline that takes the\n// surrounding text color.\n//\n// Names are stored in saved pages (Icon list items, menu items), so never\n// rename one; add new names instead.\n\nconst outline = { fill: 'none', stroke: 'currentColor', strokeWidth: 2, strokeLinecap: 'round', strokeLinejoin: 'round' };\n\nconst PATHS = {\n location: (\n <>\n <path d=\"M12 22s7-6.2 7-12a7 7 0 1 0-14 0c0 5.8 7 12 7 12z\" />\n <circle cx=\"12\" cy=\"10\" r=\"2.5\" />\n </>\n ),\n phone: <path d=\"M6.5 3h3l1.5 4.5-2 1.5a12 12 0 0 0 6 6l1.5-2L21 14.5v3a2 2 0 0 1-2 2A16 16 0 0 1 4.5 5a2 2 0 0 1 2-2z\" />,\n email: (\n <>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <path d=\"M3 7l9 6 9-6\" />\n </>\n ),\n video: (\n <>\n <rect x=\"2.5\" y=\"6\" width=\"13\" height=\"12\" rx=\"2\" />\n <path d=\"M15.5 10.5 21.5 7v10l-6-3.5z\" />\n </>\n ),\n calendar: (\n <>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M3 10h18M8 3v4M16 3v4\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n ),\n link: (\n <>\n <path d=\"M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1\" />\n <path d=\"M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1\" />\n </>\n ),\n facebook: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"3\" />\n <path d=\"M15.5 8H14a2 2 0 0 0-2 2v11M9.5 13h5\" />\n </>\n ),\n youtube: (\n <>\n <rect x=\"2.5\" y=\"5.5\" width=\"19\" height=\"13\" rx=\"4\" />\n <path d=\"M10.5 9.5v5l4-2.5z\" />\n </>\n ),\n};\n\nexport const iconNames = Object.keys(PATHS);\n\nexport const iconOptions = [{ label: 'None', value: '' }].concat(\n iconNames.map((name) => ({ label: name[0].toUpperCase() + name.slice(1), value: name })),\n);\n\nexport function Icon({ name, size = '1.1em', style }) {\n const glyph = PATHS[name];\n if (!glyph) return null;\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n aria-hidden=\"true\"\n focusable=\"false\"\n style={{ ...outline, verticalAlign: '-0.15em', flexShrink: 0, ...style }}\n >\n {glyph}\n </svg>\n );\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 { Icon, iconOptions } from '../icons.jsx';\nimport { safeImageUrl, safeUrl } from '../safeUrl.js';\nimport { tokenVar } from '../theme.js';\n\n// Field values are stored in saved pages: add options, never rename them.\nconst alignOptions = [\n { label: 'Left', value: 'left' },\n { label: 'Center', value: 'center' },\n { label: 'Right', value: 'right' },\n];\n\n// Keeps a narrow column of text next to the side it is aligned to.\nconst blockMargin = (align) =>\n align === 'center' ? { marginInline: 'auto' } : align === 'right' ? { marginLeft: 'auto' } : {};\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', ...blockMargin(align) }}>\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\n// A quotation and where it is from: scripture, a hymn, a speaker.\nexport const Quote = {\n label: 'Quote',\n category: 'content',\n fields: {\n text: { type: 'textarea' },\n citation: { type: 'text', label: 'Citation (e.g. Matthew 28:19-20 ESV)' },\n citationAlign: { type: 'radio', label: 'Citation alignment', options: alignOptions },\n },\n defaultProps: { text: 'Quotation', citation: '', citationAlign: 'right' },\n render: ({ text, citation, citationAlign }) => (\n <figure style={{ margin: '0 0 1em', maxWidth: '68ch' }}>\n <blockquote style={{ margin: 0, fontStyle: 'italic' }}>\n <Paragraphs text={text} style={{ margin: '0 0 0.5em' }} />\n </blockquote>\n {citation && (\n <figcaption style={{ textAlign: citationAlign ?? 'right' }}>{citation}</figcaption>\n )}\n </figure>\n ),\n};\n\n// Lines with an icon and an optional link: a phone number, an address with a\n// map link, an email, social pages.\nexport const IconList = {\n label: 'Icon list',\n category: 'content',\n fields: {\n items: {\n type: 'array',\n getItemSummary: (item) => item.text?.split('\\n')[0] || 'Item',\n arrayFields: {\n icon: { type: 'select', options: iconOptions },\n text: { type: 'textarea', label: 'Text (line breaks are kept)' },\n href: { type: 'text', label: 'Link (optional): https://, tel:, mailto:' },\n },\n defaultItemProps: { icon: 'link', text: '', href: '' },\n },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { items: [{ icon: 'phone', text: '(555) 555-0100', href: 'tel:+15555550100' }], align: 'left' },\n render: ({ items = [], align }) => (\n <ul style={{ listStyle: 'none', padding: 0, margin: '0 0 1em', textAlign: align }}>\n {items.map((item, index) => {\n const href = safeUrl(item.href);\n const content = (\n <>\n <Icon name={item.icon} style={{ marginRight: '0.4em' }} />\n <span style={{ whiteSpace: 'pre-line' }}>{item.text}</span>\n </>\n );\n return (\n <li key={index} style={{ margin: '0.35em 0' }}>\n {href ? <a href={href} style={{ color: tokenVar('colorAccent') }}>{content}</a> : content}\n </li>\n );\n })}\n </ul>\n ),\n};\n\n// Service times, office hours, an event's order: rows of day, time and what.\nexport const Schedule = {\n label: 'Schedule',\n category: 'content',\n fields: {\n rows: {\n type: 'array',\n getItemSummary: (row) => [row.day, row.time, row.what].filter(Boolean).join(' ') || 'Row',\n arrayFields: { day: { type: 'text' }, time: { type: 'text' }, what: { type: 'text' } },\n defaultItemProps: { day: 'Sunday', time: '10:00', what: 'Worship' },\n },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { rows: [{ day: 'Sunday', time: '10:00', what: 'Worship' }], align: 'center' },\n render: ({ rows = [], align }) => (\n <table style={{ borderCollapse: 'collapse', margin: '0 0 1em', ...blockMargin(align ?? 'center') }}>\n <tbody>\n {rows.map((row, index) => (\n <tr key={index}>\n <td style={{ padding: '4px 12px', textAlign: 'right', fontWeight: 600 }}>{row.day}</td>\n <td style={{ padding: '4px 12px', textAlign: 'right', fontVariantNumeric: 'tabular-nums' }}>{row.time}</td>\n <td style={{ padding: '4px 12px' }}>{row.what}</td>\n </tr>\n ))}\n </tbody>\n </table>\n ),\n};\n","import { safeImageUrl } from './safeUrl.js';\n\n// \"#ffffff\" + 85 -> \"rgba(255, 255, 255, 0.85)\". Opacity is a percentage,\n// clamped to 0-100. Anything that is not a 3- or 6-digit hex color falls back to\n// white, so a bad value can never inject CSS.\nexport function overlayColor(hex, opacityPercent) {\n let value = String(hex ?? '').trim().replace(/^#/, '');\n if (/^[0-9a-f]{3}$/i.test(value)) value = value.split('').map((c) => c + c).join('');\n if (!/^[0-9a-f]{6}$/i.test(value)) value = 'ffffff';\n const [r, g, b] = [0, 2, 4].map((i) => parseInt(value.slice(i, i + 2), 16));\n const opacity = Math.min(100, Math.max(0, Number(opacityPercent) || 0)) / 100;\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n}\n\n// A CSS background-image value for a user-entered URL, or undefined when the\n// URL is unsafe. encodeURI escapes the quote that would otherwise close url(\"\").\nexport function cssImage(url) {\n const safe = safeImageUrl(url);\n return safe ? `url(\"${encodeURI(safe)}\")` : undefined;\n}\n\nexport const percentField = (label) => ({ type: 'number', label, min: 0, max: 100 });\n","import { cssImage, overlayColor, percentField } from '../style.js';\nimport { 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 backgroundImage: { type: 'text', label: 'Background image URL (optional)' },\n overlayColor: { type: 'text', label: 'Overlay color over the image (hex, e.g. #ffffff)' },\n overlayOpacity: percentField('Overlay opacity %'),\n padding: { type: 'select', options: spacingOptions },\n content: { type: 'slot' },\n },\n defaultProps: { background: 'none', backgroundImage: '', overlayColor: '#ffffff', overlayOpacity: 85, padding: 'medium' },\n render: ({ background, backgroundImage, overlayColor: color, overlayOpacity, padding, content: Content }) => {\n const image = cssImage(backgroundImage);\n const inner = (\n <div style={{ maxWidth: tokenVar('maxWidth'), margin: '0 auto', paddingInline: '16px' }}>\n <Content />\n </div>\n );\n return (\n <section\n style={{\n background: image ? `${image} center / cover` : BACKGROUNDS[background] ?? BACKGROUNDS.none,\n color: !image && background === 'accent' ? tokenVar('colorAccentText') : undefined,\n }}\n >\n {/* Over an image, the content sits on a panel of the chosen color and\n opacity, so text stays readable whatever the photo. */}\n <div style={{ paddingBlock: SPACING[padding] ?? SPACING.medium, background: image ? overlayColor(color, overlayOpacity ?? 85) : undefined }}>\n {inner}\n </div>\n </section>\n );\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 { percentField } from '../style.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 align: {\n type: 'radio',\n options: [\n { label: 'Left', value: 'left' },\n { label: 'Center', value: 'center' },\n { label: 'Right', value: 'right' },\n ],\n },\n width: { ...percentField('Width (% of the column)'), min: 10 },\n },\n defaultProps: { url: '', alt: '', caption: '', align: 'left', width: 100 },\n render: ({ url, alt, caption, align, width }) => {\n const src = safeImageUrl(url);\n if (!src) return null;\n // A missing width means full width; any number, 0 included, is clamped.\n const requested = Number.isFinite(Number(width)) && width !== '' && width !== null ? Number(width) : 100;\n const percent = Math.min(100, Math.max(10, requested));\n const side = align === 'center' ? { marginInline: 'auto' } : align === 'right' ? { marginLeft: 'auto' } : {};\n return (\n <figure style={{ margin: '0 0 1em', width: `${percent}%`, maxWidth: '100%', ...side }}>\n <img src={src} alt={alt ?? ''} style={{ width: '100%', height: 'auto', display: 'block', borderRadius: tokenVar('radius') }} />\n {caption && <figcaption style={{ fontSize: '0.9em', opacity: 0.75, marginTop: '6px', textAlign: align }}>{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\n// An embedded page from another site, such as a statement of faith hosted\n// elsewhere. Only offered when the app names the hosts it trusts\n// (createPalette({ embedHosts })): framing an arbitrary page is how a site ends\n// up showing something its owner never chose.\nexport function embedAllowed(value, hosts) {\n let url;\n try {\n url = new URL(String(value ?? '').trim());\n } catch {\n return undefined;\n }\n if (url.protocol !== 'https:') return undefined;\n const host = url.hostname.toLowerCase();\n const ok = hosts.some((allowed) => {\n const name = String(allowed).toLowerCase();\n return host === name || host.endsWith(`.${name}`);\n });\n return ok ? url.href : undefined;\n}\n\nexport function makeEmbed(hosts) {\n return {\n label: 'Embedded page',\n category: 'media',\n fields: {\n url: { type: 'text', label: `Page address (https, from: ${hosts.join(', ')})` },\n title: { type: 'text', label: 'Title (for screen readers)' },\n height: { type: 'number', label: 'Height (pixels)', min: 200, max: 4000 },\n },\n defaultProps: { url: '', title: 'Embedded page', height: 800 },\n render: ({ url, title, height }) => {\n const src = embedAllowed(url, hosts);\n if (!src) return null;\n return (\n <iframe\n src={src}\n title={title || 'Embedded page'}\n loading=\"lazy\"\n sandbox=\"allow-scripts allow-same-origin allow-popups\"\n referrerPolicy=\"no-referrer\"\n style={{ width: '100%', height: `${Math.min(4000, Math.max(200, Number(height) || 800))}px`, border: 0, borderRadius: tokenVar('radius'), background: '#fff' }}\n />\n );\n },\n };\n}\n","import { CallToAction, Button, Cards, Faq, Heading, Hero, IconList, Quote, Schedule, 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 Quote,\n IconList,\n Schedule,\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 { safeImageUrl } from './safeUrl.js';\nimport { cssImage, overlayColor } from './style.js';\nimport { themeToStyle } from './theme.js';\n\n// The root of every page: theme tokens as CSS variables, then the page's\n// background. The background is either the site's (theme.background), the\n// page's own, or none, with the content on a panel of a chosen color and\n// opacity so text stays readable over any photo.\n//\n// It is also the root of the editor's preview frame, so editing shows the\n// same background a visitor sees.\n// fit: 'cover' crops the photo to fill the page area; 'photo' shows the whole\n// photo at its own proportions, growing only if the content is taller.\n// frame: 'none', or 'card' for a bordered, rounded, padded frame around it.\nconst SITE_BACKGROUND_DEFAULTS = { image: '', overlayColor: '#ffffff', overlayOpacity: 85, rounded: true, fit: 'cover', frame: 'none' };\n\nexport function resolveBackground(theme = {}, page = {}) {\n const site = { ...SITE_BACKGROUND_DEFAULTS, ...(theme.background ?? {}) };\n const mode = page.background ?? 'site';\n if (mode === 'none') return null;\n const chosen =\n mode === 'custom'\n ? {\n image: page.backgroundImage,\n overlayColor: page.overlayColor ?? site.overlayColor,\n overlayOpacity: page.overlayOpacity ?? site.overlayOpacity,\n rounded: site.rounded,\n fit: site.fit,\n frame: site.frame,\n }\n : {\n ...site,\n // A page may keep the site's photo but change how much shows through.\n overlayOpacity: page.overlayOpacity ?? site.overlayOpacity,\n };\n // Both forms, so nothing has to parse one back out of the other.\n const image = cssImage(chosen.image);\n return image ? { ...chosen, image, imageUrl: safeImageUrl(chosen.image) } : null;\n}\n\nexport function ThemeRoot({ theme, page, children }) {\n const background = resolveBackground(theme ?? {}, page ?? {});\n if (!background) {\n return (\n <div className=\"pagelet\" style={themeToStyle(theme)}>\n {children}\n </div>\n );\n }\n\n const radius = background.rounded ? 'var(--pagelet-radius)' : 0;\n const panel = { background: overlayColor(background.overlayColor, background.overlayOpacity), padding: 'calc(var(--pagelet-space) * 2)' };\n\n // 'photo': the image and the panel share one grid cell, so the area is as\n // tall as the photo, or as the content when that is taller (the photo then\n // fills by cropping). 'cover': the photo is simply the area's background.\n const area =\n background.fit === 'photo' ? (\n <div className=\"pagelet-background\" style={{ display: 'grid', borderRadius: radius, overflow: 'hidden' }}>\n <img src={background.imageUrl} alt=\"\" aria-hidden=\"true\" style={{ gridArea: '1 / 1', width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n <div className=\"pagelet-panel\" style={{ gridArea: '1 / 1', ...panel }}>\n {children}\n </div>\n </div>\n ) : (\n <div className=\"pagelet-background\" style={{ background: `${background.image} center / cover`, borderRadius: radius, overflow: 'hidden' }}>\n <div className=\"pagelet-panel\" style={{ ...panel, minHeight: '60vh' }}>\n {children}\n </div>\n </div>\n );\n\n return (\n <div className=\"pagelet\" style={themeToStyle(theme)}>\n {background.frame === 'card' ? (\n <div className=\"pagelet-frame\" style={{ border: '1px solid rgba(0, 0, 0, 0.15)', borderRadius: radius, padding: 'var(--pagelet-space)', background: 'var(--pagelet-color-background)' }}>\n {area}\n </div>\n ) : (\n area\n )}\n </div>\n );\n}\n","import { builtInBlocks, builtInCategories } from './blocks/index.js';\nimport { makeEmbed } from './blocks/media.jsx';\nimport { percentField } from './style.js';\nimport { ThemeRoot } from './ThemeRoot.jsx';\n\n// Settings for the whole page (Puck's root fields). Stored in every saved page:\n// add fields freely, never rename one.\nexport const pageFields = {\n title: { type: 'text', label: 'Page title (browser tab)' },\n background: {\n type: 'radio',\n label: 'Background',\n options: [\n { label: \"Site's\", value: 'site' },\n { label: 'Custom', value: 'custom' },\n { label: 'None', value: 'none' },\n ],\n },\n backgroundImage: { type: 'text', label: 'Custom background image URL' },\n overlayColor: { type: 'text', label: 'Custom overlay color (hex)' },\n overlayOpacity: percentField('Overlay opacity % (blank uses the site setting)'),\n};\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.\n// embedHosts: ['bfm.sbc.net'] offers the Embedded page block, limited to those\n// hosts (and their subdomains). Without it the block is not offered at all.\nexport function createPalette({ blocks = {}, hide = [], categories = {}, root = {}, embedHosts = [] } = {}) {\n const builtIns = embedHosts.length ? { ...builtInBlocks, Embed: makeEmbed(embedHosts) } : builtInBlocks;\n const hidden = new Set(hide);\n for (const name of hidden) {\n if (!(name in builtIns) && !(name in blocks)) {\n throw new Error(`pagelet: cannot hide unknown block \"${name}\"`);\n }\n }\n\n const all = { ...builtIns, ...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 defaultProps: { title: '', background: 'site', backgroundImage: '', overlayColor: '#ffffff' },\n ...root,\n fields: { ...pageFields, ...(root.fields ?? {}) },\n // The page's root render applies the theme and the background. It is\n // the root of the editor's preview iframe as well as of a rendered\n // page, so both reach the editor. The site theme arrives through\n // Puck's metadata; the page's own settings are this render's props.\n render: ({ children, puck, title, background, backgroundImage, overlayColor, overlayOpacity }) => (\n <ThemeRoot\n theme={puck?.metadata?.pageletTheme}\n page={{ title, background, backgroundImage, overlayColor, overlayOpacity: blankToUndefined(overlayOpacity) }}\n >\n {children}\n </ThemeRoot>\n ),\n },\n },\n };\n}\n\n// A cleared number field arrives as '' or null: treat it as \"use the site's\".\nfunction blankToUndefined(value) {\n return value === '' || value === null || value === undefined ? undefined : value;\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 async function getPublishedPage(path) {\n try {\n const data = await request('GET', `/published?path=${encodeURIComponent(path)}`);\n return { document: data.document, pagePath: data.page_path, rest: data.rest ?? '' };\n } catch (error) {\n if (error instanceof PageletApiError && error.status === 404) return null;\n throw error;\n }\n }\n\n return {\n listPages: () => request('GET', '/pages'),\n getPage: (id) => request('GET', pagePath(id)),\n createPage: ({ path, title, matchesSubpaths }) =>\n request('POST', '/pages', { page: { path, title, matches_subpaths: matchesSubpaths } }),\n updatePage: (id, { path, title, matchesSubpaths }) =>\n request('PATCH', pagePath(id), { page: { path, title, matches_subpaths: matchesSubpaths } }),\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) => (await getPublishedPage(path))?.document ?? null,\n // Public: { document, pagePath, rest } for a path, or null. rest is what\n // follows a page that answers for sub-paths: /messages/43 -> \"43\".\n getPublishedPage,\n // Public: the site's theme and menu.\n getSite: async () => (await request('GET', '/site')).settings,\n // Needs publish permission: changes are live at once.\n updateSite: async (settings) => (await request('PATCH', '/site', { settings })).settings,\n };\n}\n","import { useState } from 'react';\nimport { Icon } from './icons.jsx';\nimport { safeImageUrl, safeUrl } from './safeUrl.js';\nimport { tokenVar } from './theme.js';\n\n// A site's menu, from its settings:\n// { style: 'bar' | 'centered',\n// brand: { logo, href, label },\n// items: [{ label, href, icon, highlight, group: 'left' | 'right' }] }\n//\n// linkComponent draws internal links, so an app's router can handle them\n// without a page reload: pass React Router's Link (it takes `to`). External\n// links (http/https) are plain anchors opening in a new tab.\n//\n// On narrow screens the items fold behind a menu button. The breakpoint is in\n// a small scoped stylesheet, because inline styles cannot hold a media query.\nconst CSS = `\n.pagelet-menu{display:flex;align-items:center;flex-wrap:wrap;gap:4px 16px;padding:8px 16px;background:var(--pagelet-menu-background,#f8f9fa)}\n.pagelet-menu--centered{flex-direction:column}\n.pagelet-menu__groups{display:flex;flex:1;align-items:center;gap:4px 16px;flex-wrap:wrap}\n.pagelet-menu--centered .pagelet-menu__groups{justify-content:center;flex:none}\n.pagelet-menu__group{display:flex;gap:4px 16px;flex-wrap:wrap;align-items:center}\n.pagelet-menu__group--right{margin-left:auto}\n.pagelet-menu--centered .pagelet-menu__group--right{margin-left:0}\n.pagelet-menu__link{text-decoration:none;color:rgba(0,0,0,.65);padding:6px 0;display:inline-flex;align-items:center;gap:6px}\n.pagelet-menu__link:hover{color:rgba(0,0,0,.9)}\n.pagelet-menu__link--current{color:rgba(0,0,0,.9)}\n.pagelet-menu__toggle{display:none;margin-left:auto;background:none;border:1px solid rgba(0,0,0,.2);border-radius:6px;padding:6px 10px;cursor:pointer;font:inherit}\n@media (max-width: 767px){\n .pagelet-menu__toggle{display:inline-block}\n .pagelet-menu__groups{display:none;flex-basis:100%;flex-direction:column;align-items:flex-start}\n .pagelet-menu__groups--open{display:flex}\n .pagelet-menu__group{flex-direction:column;align-items:flex-start}\n .pagelet-menu__group--right{margin-left:0}\n}`;\n\nfunction isExternal(href) {\n return /^https?:\\/\\//i.test(href);\n}\n\n// Links the app's router cannot handle: other sites, phone numbers, email.\nfunction needsPlainAnchor(href, LinkComponent) {\n return !LinkComponent || isExternal(href) || /^(mailto|tel):/i.test(href);\n}\n\nfunction MenuLink({ item, linkComponent: LinkComponent, currentPath, onNavigate }) {\n const href = safeUrl(item.href);\n if (!href) return null;\n const current = !isExternal(href) && currentPath === href;\n const className = `pagelet-menu__link${current ? ' pagelet-menu__link--current' : ''}`;\n const style = item.highlight ? { color: tokenVar('colorAccent') } : undefined;\n const body = (\n <>\n {item.label}\n {item.icon && <Icon name={item.icon} />}\n </>\n );\n\n if (needsPlainAnchor(href, LinkComponent)) {\n const external = isExternal(href) ? { target: '_blank', rel: 'noopener noreferrer' } : {};\n return <a className={className} style={style} href={href} {...external}>{body}</a>;\n }\n return (\n <LinkComponent className={className} style={style} to={href} onClick={onNavigate} aria-current={current ? 'page' : undefined}>\n {body}\n </LinkComponent>\n );\n}\n\nexport function PageletMenu({ menu = {}, linkComponent, currentPath }) {\n const [open, setOpen] = useState(false);\n const items = Array.isArray(menu.items) ? menu.items : [];\n const brand = menu.brand ?? {};\n const logo = safeImageUrl(brand.logo);\n const brandHref = safeUrl(brand.href) ?? '/';\n const close = () => setOpen(false);\n const group = (name) => items.filter((item) => (item.group ?? 'left') === name);\n const linkProps = { linkComponent, currentPath, onNavigate: close };\n const BrandLink = needsPlainAnchor(brandHref, linkComponent) ? 'a' : linkComponent;\n const brandTarget = BrandLink === 'a' ? { href: brandHref } : { to: brandHref, onClick: close };\n\n return (\n <nav className={`pagelet-menu${menu.style === 'centered' ? ' pagelet-menu--centered' : ''}`} aria-label=\"Site\">\n <style>{CSS}</style>\n {(logo || brand.label) && (\n <BrandLink className=\"pagelet-menu__brand\" {...brandTarget} style={{ display: 'inline-flex', alignItems: 'center', gap: '8px', textDecoration: 'none', color: 'inherit' }}>\n {logo && <img src={logo} alt={brand.label || 'Home'} style={{ height: '40px', width: 'auto', display: 'block' }} />}\n {!logo && brand.label}\n </BrandLink>\n )}\n <button type=\"button\" className=\"pagelet-menu__toggle\" aria-expanded={open} onClick={() => setOpen((value) => !value)}>\n Menu\n </button>\n <div className={`pagelet-menu__groups${open ? ' pagelet-menu__groups--open' : ''}`}>\n <div className=\"pagelet-menu__group\">{group('left').map((item, i) => <MenuLink key={i} item={item} {...linkProps} />)}</div>\n <div className=\"pagelet-menu__group pagelet-menu__group--right\">{group('right').map((item, i) => <MenuLink key={i} item={item} {...linkProps} />)}</div>\n </div>\n </nav>\n );\n}\n","import { PageletMenu } from './PageletMenu.jsx';\nimport { themeToStyle, tokenVar } from './theme.js';\n\n// A site's frame around a page: the menu from the site settings, then the page\n// itself (usually a <PageletPage>, which draws the page's background).\n//\n// <PageletLayout site={settings} linkComponent={Link} currentPath={pathname}>\n// <PageletPage document={doc} palette={palette} theme={settings.theme} />\n// </PageletLayout>\nexport function PageletLayout({ site = {}, linkComponent, currentPath, children }) {\n return (\n <div className=\"pagelet-layout\" style={{ ...themeToStyle(site.theme), maxWidth: tokenVar('maxWidth'), margin: '0 auto' }}>\n <PageletMenu menu={site.menu} linkComponent={linkComponent} currentPath={currentPath} />\n <main style={{ marginTop: 'var(--pagelet-space)' }}>{children}</main>\n </div>\n );\n}\n"],"names":["document"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/document.js","../src/render.jsx","../src/PageletPage.jsx","../src/icons.jsx","../src/safeUrl.js","../src/theme.js","../src/blocks/content.jsx","../src/style.js","../src/blocks/layout.jsx","../src/blocks/media.jsx","../src/blocks/index.js","../src/ThemeRoot.jsx","../src/palette.jsx","../src/client.js","../src/PageletMenu.jsx","../src/PageletLayout.jsx"],"sourcesContent":["// 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. Imports nothing from Puck, because the public renderer uses this: an\n// old root shape (fields beside \"props\") is converted here, and DropZone zones,\n// which pagelet never wrote, are converted by the editor (needsPuckMigration).\nexport function upgradeDocument(document) {\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({ ...data, root: upgradeRoot(data.root) });\n}\n\n// Puck once kept root fields beside \"props\" ({ title } rather than\n// { props: { title } }). Move any such fields into props.\nfunction upgradeRoot(root = {}) {\n const { props = {}, readOnly, ...legacy } = root;\n if (Object.keys(legacy).length === 0) return root;\n return { ...(readOnly ? { readOnly } : {}), props: { ...legacy, ...props } };\n}\n\n// Data in an older Puck shape: DropZone zones holding content, or a root whose\n// fields sit outside props. The editor runs Puck's migrate() only then, because\n// migrate() logs to the console every time it is called.\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\n// A page's own settings (title, background), for the app to use outside the\n// page body, e.g. the browser title.\nexport function pageSettings(document) {\n const props = upgradeDocument(document)?.data?.root?.props ?? {};\n return { title: props.title || '', background: props.background ?? 'site' };\n}\n","import { Fragment } from 'react';\n\n// pagelet's own page renderer: walks a saved page and draws each block with the\n// component its palette registered. It mirrors what Puck's Render passes to a\n// block (its saved props, slots as components, a `puck` object with isEditing\n// false, the metadata and renderDropZone), and imports nothing from Puck.\n//\n// Why not Puck's own renderer: @puckeditor/core/rsc pulls in Tiptap and\n// ProseMirror (about 350 KB minified) even for pages with no rich text, and the\n// renderer is what every visitor downloads. The editor still uses Puck.\n//\n// Supports blocks, slot fields (Section, Columns), and DropZones (older Puck\n// data: a block calls puck.renderDropZone({ zone }) and the blocks come from\n// data.zones[\"<block id>:<zone>\"]). render.parity.test.jsx holds the output to\n// Puck's, byte for byte.\nconst ROOT_ZONE = 'root:default-zone';\n\nfunction slotNames(component) {\n return Object.entries(component.fields ?? {})\n .filter(([, field]) => field?.type === 'slot')\n .map(([name]) => name);\n}\n\nfunction renderItems(items, context) {\n return (Array.isArray(items) ? items : []).map((item, index) => (\n <Fragment key={item?.props?.id ?? index}>{renderItem(item, context)}</Fragment>\n ));\n}\n\n// The `puck` prop for one area (a block, or the root). Its renderDropZone draws\n// that area's zones, as Puck's does: no wrapper, just the blocks.\nfunction puckFor(areaId, context) {\n return {\n isEditing: false,\n metadata: context.metadata,\n dragRef: null,\n renderDropZone: ({ zone }) => {\n const compound = `${areaId}:${zone}`;\n const items = compound === ROOT_ZONE ? context.data.content : context.data.zones?.[compound];\n return <>{renderItems(items, context)}</>;\n },\n };\n}\n\nfunction renderItem(item, context) {\n const component = item && context.config.components[item.type];\n if (!component) return null; // a block this palette does not have draws nothing\n\n const props = { ...item.props, puck: puckFor(item.props?.id, context) };\n for (const name of slotNames(component)) {\n const children = item.props?.[name];\n // A slot reaches the block as a component, as in Puck: <Content />. Like\n // Puck's, it draws a <div> around its blocks, taking any className and\n // style the block passes.\n props[name] = function Slot({ className, style }) {\n return (\n <div className={className} style={style}>\n {renderItems(children, context)}\n </div>\n );\n };\n }\n const Render = component.render;\n return <Render {...props} />;\n}\n\nexport function renderPage({ config, data, metadata = {} }) {\n const context = { config, data: data ?? {}, metadata };\n const puck = puckFor('root', context);\n const rootProps = data?.root?.props ?? {};\n const content = renderItems(data?.content, context);\n const RootRender = config.root?.render;\n if (!RootRender) return <>{content}</>;\n return (\n <RootRender {...rootProps} title={rootProps.title || ''} editMode={false} id=\"puck-root\" puck={puck}>\n {content}\n </RootRender>\n );\n}\n","import { upgradeDocument } from './document.js';\nimport { renderPage } from './render.jsx';\n\n// Draw a saved page. Imports nothing from Puck or the editor, so public pages\n// stay 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);\n return renderPage({ config: palette.config, data, metadata: { pageletTheme: theme } });\n}\n","// A small built-in icon set, drawn as inline SVG so pages need no icon font and\n// render identically on the server. Each is a 24x24 outline that takes the\n// surrounding text color.\n//\n// Names are stored in saved pages (Icon list items, menu items), so never\n// rename one; add new names instead.\n\nconst outline = { fill: 'none', stroke: 'currentColor', strokeWidth: 2, strokeLinecap: 'round', strokeLinejoin: 'round' };\n\nconst PATHS = {\n location: (\n <>\n <path d=\"M12 22s7-6.2 7-12a7 7 0 1 0-14 0c0 5.8 7 12 7 12z\" />\n <circle cx=\"12\" cy=\"10\" r=\"2.5\" />\n </>\n ),\n phone: <path d=\"M6.5 3h3l1.5 4.5-2 1.5a12 12 0 0 0 6 6l1.5-2L21 14.5v3a2 2 0 0 1-2 2A16 16 0 0 1 4.5 5a2 2 0 0 1 2-2z\" />,\n email: (\n <>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <path d=\"M3 7l9 6 9-6\" />\n </>\n ),\n video: (\n <>\n <rect x=\"2.5\" y=\"6\" width=\"13\" height=\"12\" rx=\"2\" />\n <path d=\"M15.5 10.5 21.5 7v10l-6-3.5z\" />\n </>\n ),\n calendar: (\n <>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M3 10h18M8 3v4M16 3v4\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </>\n ),\n link: (\n <>\n <path d=\"M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1\" />\n <path d=\"M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1\" />\n </>\n ),\n facebook: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"3\" />\n <path d=\"M15.5 8H14a2 2 0 0 0-2 2v11M9.5 13h5\" />\n </>\n ),\n youtube: (\n <>\n <rect x=\"2.5\" y=\"5.5\" width=\"19\" height=\"13\" rx=\"4\" />\n <path d=\"M10.5 9.5v5l4-2.5z\" />\n </>\n ),\n};\n\nexport const iconNames = Object.keys(PATHS);\n\nexport const iconOptions = [{ label: 'None', value: '' }].concat(\n iconNames.map((name) => ({ label: name[0].toUpperCase() + name.slice(1), value: name })),\n);\n\nexport function Icon({ name, size = '1.1em', style }) {\n const glyph = PATHS[name];\n if (!glyph) return null;\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n aria-hidden=\"true\"\n focusable=\"false\"\n style={{ ...outline, verticalAlign: '-0.15em', flexShrink: 0, ...style }}\n >\n {glyph}\n </svg>\n );\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 { Icon, iconOptions } from '../icons.jsx';\nimport { safeImageUrl, safeUrl } from '../safeUrl.js';\nimport { tokenVar } from '../theme.js';\n\n// Field values are stored in saved pages: add options, never rename them.\nconst alignOptions = [\n { label: 'Left', value: 'left' },\n { label: 'Center', value: 'center' },\n { label: 'Right', value: 'right' },\n];\n\n// Keeps a narrow column of text next to the side it is aligned to.\nconst blockMargin = (align) =>\n align === 'center' ? { marginInline: 'auto' } : align === 'right' ? { marginLeft: 'auto' } : {};\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', ...blockMargin(align) }}>\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\n// A quotation and where it is from: scripture, a hymn, a speaker.\nexport const Quote = {\n label: 'Quote',\n category: 'content',\n fields: {\n text: { type: 'textarea' },\n citation: { type: 'text', label: 'Citation (e.g. Matthew 28:19-20 ESV)' },\n citationAlign: { type: 'radio', label: 'Citation alignment', options: alignOptions },\n },\n defaultProps: { text: 'Quotation', citation: '', citationAlign: 'right' },\n render: ({ text, citation, citationAlign }) => (\n <figure style={{ margin: '0 0 1em', maxWidth: '68ch' }}>\n <blockquote style={{ margin: 0, fontStyle: 'italic' }}>\n <Paragraphs text={text} style={{ margin: '0 0 0.5em' }} />\n </blockquote>\n {citation && (\n <figcaption style={{ textAlign: citationAlign ?? 'right' }}>{citation}</figcaption>\n )}\n </figure>\n ),\n};\n\n// Lines with an icon and an optional link: a phone number, an address with a\n// map link, an email, social pages.\nexport const IconList = {\n label: 'Icon list',\n category: 'content',\n fields: {\n items: {\n type: 'array',\n getItemSummary: (item) => item.text?.split('\\n')[0] || 'Item',\n arrayFields: {\n icon: { type: 'select', options: iconOptions },\n text: { type: 'textarea', label: 'Text (line breaks are kept)' },\n href: { type: 'text', label: 'Link (optional): https://, tel:, mailto:' },\n },\n defaultItemProps: { icon: 'link', text: '', href: '' },\n },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { items: [{ icon: 'phone', text: '(555) 555-0100', href: 'tel:+15555550100' }], align: 'left' },\n render: ({ items = [], align }) => (\n <ul style={{ listStyle: 'none', padding: 0, margin: '0 0 1em', textAlign: align }}>\n {items.map((item, index) => {\n const href = safeUrl(item.href);\n const content = (\n <>\n <Icon name={item.icon} style={{ marginRight: '0.4em' }} />\n <span style={{ whiteSpace: 'pre-line' }}>{item.text}</span>\n </>\n );\n return (\n <li key={index} style={{ margin: '0.35em 0' }}>\n {href ? <a href={href} style={{ color: tokenVar('colorAccent') }}>{content}</a> : content}\n </li>\n );\n })}\n </ul>\n ),\n};\n\n// Service times, office hours, an event's order: rows of day, time and what.\nexport const Schedule = {\n label: 'Schedule',\n category: 'content',\n fields: {\n rows: {\n type: 'array',\n getItemSummary: (row) => [row.day, row.time, row.what].filter(Boolean).join(' ') || 'Row',\n arrayFields: { day: { type: 'text' }, time: { type: 'text' }, what: { type: 'text' } },\n defaultItemProps: { day: 'Sunday', time: '10:00', what: 'Worship' },\n },\n align: { type: 'radio', options: alignOptions },\n },\n defaultProps: { rows: [{ day: 'Sunday', time: '10:00', what: 'Worship' }], align: 'center' },\n render: ({ rows = [], align }) => (\n <table style={{ borderCollapse: 'collapse', margin: '0 0 1em', ...blockMargin(align ?? 'center') }}>\n <tbody>\n {rows.map((row, index) => (\n <tr key={index}>\n <td style={{ padding: '4px 12px', textAlign: 'right', fontWeight: 600 }}>{row.day}</td>\n <td style={{ padding: '4px 12px', textAlign: 'right', fontVariantNumeric: 'tabular-nums' }}>{row.time}</td>\n <td style={{ padding: '4px 12px' }}>{row.what}</td>\n </tr>\n ))}\n </tbody>\n </table>\n ),\n};\n","import { safeImageUrl } from './safeUrl.js';\n\n// \"#ffffff\" + 85 -> \"rgba(255, 255, 255, 0.85)\". Opacity is a percentage,\n// clamped to 0-100. Anything that is not a 3- or 6-digit hex color falls back to\n// white, so a bad value can never inject CSS.\nexport function overlayColor(hex, opacityPercent) {\n let value = String(hex ?? '').trim().replace(/^#/, '');\n if (/^[0-9a-f]{3}$/i.test(value)) value = value.split('').map((c) => c + c).join('');\n if (!/^[0-9a-f]{6}$/i.test(value)) value = 'ffffff';\n const [r, g, b] = [0, 2, 4].map((i) => parseInt(value.slice(i, i + 2), 16));\n const opacity = Math.min(100, Math.max(0, Number(opacityPercent) || 0)) / 100;\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n}\n\n// A CSS background-image value for a user-entered URL, or undefined when the\n// URL is unsafe. encodeURI escapes the quote that would otherwise close url(\"\").\nexport function cssImage(url) {\n const safe = safeImageUrl(url);\n return safe ? `url(\"${encodeURI(safe)}\")` : undefined;\n}\n\nexport const percentField = (label) => ({ type: 'number', label, min: 0, max: 100 });\n","import { cssImage, overlayColor, percentField } from '../style.js';\nimport { 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 backgroundImage: { type: 'text', label: 'Background image URL (optional)' },\n overlayColor: { type: 'text', label: 'Overlay color over the image (hex, e.g. #ffffff)' },\n overlayOpacity: percentField('Overlay opacity %'),\n padding: { type: 'select', options: spacingOptions },\n content: { type: 'slot' },\n },\n defaultProps: { background: 'none', backgroundImage: '', overlayColor: '#ffffff', overlayOpacity: 85, padding: 'medium' },\n render: ({ background, backgroundImage, overlayColor: color, overlayOpacity, padding, content: Content }) => {\n const image = cssImage(backgroundImage);\n const inner = (\n <div style={{ maxWidth: tokenVar('maxWidth'), margin: '0 auto', paddingInline: '16px' }}>\n <Content />\n </div>\n );\n return (\n <section\n style={{\n background: image ? `${image} center / cover` : BACKGROUNDS[background] ?? BACKGROUNDS.none,\n color: !image && background === 'accent' ? tokenVar('colorAccentText') : undefined,\n }}\n >\n {/* Over an image, the content sits on a panel of the chosen color and\n opacity, so text stays readable whatever the photo. */}\n <div style={{ paddingBlock: SPACING[padding] ?? SPACING.medium, background: image ? overlayColor(color, overlayOpacity ?? 85) : undefined }}>\n {inner}\n </div>\n </section>\n );\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 { percentField } from '../style.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 align: {\n type: 'radio',\n options: [\n { label: 'Left', value: 'left' },\n { label: 'Center', value: 'center' },\n { label: 'Right', value: 'right' },\n ],\n },\n width: { ...percentField('Width (% of the column)'), min: 10 },\n },\n defaultProps: { url: '', alt: '', caption: '', align: 'left', width: 100 },\n render: ({ url, alt, caption, align, width }) => {\n const src = safeImageUrl(url);\n if (!src) return null;\n // A missing width means full width; any number, 0 included, is clamped.\n const requested = Number.isFinite(Number(width)) && width !== '' && width !== null ? Number(width) : 100;\n const percent = Math.min(100, Math.max(10, requested));\n const side = align === 'center' ? { marginInline: 'auto' } : align === 'right' ? { marginLeft: 'auto' } : {};\n return (\n <figure style={{ margin: '0 0 1em', width: `${percent}%`, maxWidth: '100%', ...side }}>\n <img src={src} alt={alt ?? ''} style={{ width: '100%', height: 'auto', display: 'block', borderRadius: tokenVar('radius') }} />\n {caption && <figcaption style={{ fontSize: '0.9em', opacity: 0.75, marginTop: '6px', textAlign: align }}>{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\n// An embedded page from another site, such as a statement of faith hosted\n// elsewhere. Only offered when the app names the hosts it trusts\n// (createPalette({ embedHosts })): framing an arbitrary page is how a site ends\n// up showing something its owner never chose.\nexport function embedAllowed(value, hosts) {\n let url;\n try {\n url = new URL(String(value ?? '').trim());\n } catch {\n return undefined;\n }\n if (url.protocol !== 'https:') return undefined;\n const host = url.hostname.toLowerCase();\n const ok = hosts.some((allowed) => {\n const name = String(allowed).toLowerCase();\n return host === name || host.endsWith(`.${name}`);\n });\n return ok ? url.href : undefined;\n}\n\nexport function makeEmbed(hosts) {\n return {\n label: 'Embedded page',\n category: 'media',\n fields: {\n url: { type: 'text', label: `Page address (https, from: ${hosts.join(', ')})` },\n title: { type: 'text', label: 'Title (for screen readers)' },\n height: { type: 'number', label: 'Height (pixels)', min: 200, max: 4000 },\n },\n defaultProps: { url: '', title: 'Embedded page', height: 800 },\n render: ({ url, title, height }) => {\n const src = embedAllowed(url, hosts);\n if (!src) return null;\n return (\n <iframe\n src={src}\n title={title || 'Embedded page'}\n loading=\"lazy\"\n sandbox=\"allow-scripts allow-same-origin allow-popups\"\n referrerPolicy=\"no-referrer\"\n style={{ width: '100%', height: `${Math.min(4000, Math.max(200, Number(height) || 800))}px`, border: 0, borderRadius: tokenVar('radius'), background: '#fff' }}\n />\n );\n },\n };\n}\n","import { CallToAction, Button, Cards, Faq, Heading, Hero, IconList, Quote, Schedule, 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 Quote,\n IconList,\n Schedule,\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 { safeImageUrl } from './safeUrl.js';\nimport { cssImage, overlayColor } from './style.js';\nimport { themeToStyle } from './theme.js';\n\n// The root of every page: theme tokens as CSS variables, then the page's\n// background. The background is either the site's (theme.background), the\n// page's own, or none, with the content on a panel of a chosen color and\n// opacity so text stays readable over any photo.\n//\n// It is also the root of the editor's preview frame, so editing shows the\n// same background a visitor sees.\n// fit: 'cover' crops the photo to fill the page area; 'photo' shows the whole\n// photo at its own proportions, growing only if the content is taller.\n// frame: 'none', or 'card' for a bordered, rounded, padded frame around it.\nconst SITE_BACKGROUND_DEFAULTS = { image: '', overlayColor: '#ffffff', overlayOpacity: 85, rounded: true, fit: 'cover', frame: 'none' };\n\nexport function resolveBackground(theme = {}, page = {}) {\n const site = { ...SITE_BACKGROUND_DEFAULTS, ...(theme.background ?? {}) };\n const mode = page.background ?? 'site';\n if (mode === 'none') return null;\n const chosen =\n mode === 'custom'\n ? {\n image: page.backgroundImage,\n overlayColor: page.overlayColor ?? site.overlayColor,\n overlayOpacity: page.overlayOpacity ?? site.overlayOpacity,\n rounded: site.rounded,\n fit: site.fit,\n frame: site.frame,\n }\n : {\n ...site,\n // A page may keep the site's photo but change how much shows through.\n overlayOpacity: page.overlayOpacity ?? site.overlayOpacity,\n };\n // Both forms, so nothing has to parse one back out of the other.\n const image = cssImage(chosen.image);\n return image ? { ...chosen, image, imageUrl: safeImageUrl(chosen.image) } : null;\n}\n\nexport function ThemeRoot({ theme, page, children }) {\n const background = resolveBackground(theme ?? {}, page ?? {});\n if (!background) {\n return (\n <div className=\"pagelet\" style={themeToStyle(theme)}>\n {children}\n </div>\n );\n }\n\n const radius = background.rounded ? 'var(--pagelet-radius)' : 0;\n const panel = { background: overlayColor(background.overlayColor, background.overlayOpacity), padding: 'calc(var(--pagelet-space) * 2)' };\n\n // 'photo': the image and the panel share one grid cell, so the area is as\n // tall as the photo, or as the content when that is taller (the photo then\n // fills by cropping). 'cover': the photo is simply the area's background.\n const area =\n background.fit === 'photo' ? (\n <div className=\"pagelet-background\" style={{ display: 'grid', borderRadius: radius, overflow: 'hidden' }}>\n <img src={background.imageUrl} alt=\"\" aria-hidden=\"true\" style={{ gridArea: '1 / 1', width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n <div className=\"pagelet-panel\" style={{ gridArea: '1 / 1', ...panel }}>\n {children}\n </div>\n </div>\n ) : (\n <div className=\"pagelet-background\" style={{ background: `${background.image} center / cover`, borderRadius: radius, overflow: 'hidden' }}>\n <div className=\"pagelet-panel\" style={{ ...panel, minHeight: '60vh' }}>\n {children}\n </div>\n </div>\n );\n\n return (\n <div className=\"pagelet\" style={themeToStyle(theme)}>\n {background.frame === 'card' ? (\n <div className=\"pagelet-frame\" style={{ border: '1px solid rgba(0, 0, 0, 0.15)', borderRadius: radius, padding: 'var(--pagelet-space)', background: 'var(--pagelet-color-background)' }}>\n {area}\n </div>\n ) : (\n area\n )}\n </div>\n );\n}\n","import { builtInBlocks, builtInCategories } from './blocks/index.js';\nimport { makeEmbed } from './blocks/media.jsx';\nimport { percentField } from './style.js';\nimport { ThemeRoot } from './ThemeRoot.jsx';\n\n// Settings for the whole page (Puck's root fields). Stored in every saved page:\n// add fields freely, never rename one.\nexport const pageFields = {\n title: { type: 'text', label: 'Page title (browser tab)' },\n background: {\n type: 'radio',\n label: 'Background',\n options: [\n { label: \"Site's\", value: 'site' },\n { label: 'Custom', value: 'custom' },\n { label: 'None', value: 'none' },\n ],\n },\n backgroundImage: { type: 'text', label: 'Custom background image URL' },\n overlayColor: { type: 'text', label: 'Custom overlay color (hex)' },\n overlayOpacity: percentField('Overlay opacity % (blank uses the site setting)'),\n};\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.\n// embedHosts: ['bfm.sbc.net'] offers the Embedded page block, limited to those\n// hosts (and their subdomains). Without it the block is not offered at all.\nexport function createPalette({ blocks = {}, hide = [], categories = {}, root = {}, embedHosts = [] } = {}) {\n const builtIns = embedHosts.length ? { ...builtInBlocks, Embed: makeEmbed(embedHosts) } : builtInBlocks;\n const hidden = new Set(hide);\n for (const name of hidden) {\n if (!(name in builtIns) && !(name in blocks)) {\n throw new Error(`pagelet: cannot hide unknown block \"${name}\"`);\n }\n }\n\n const all = { ...builtIns, ...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 defaultProps: { title: '', background: 'site', backgroundImage: '', overlayColor: '#ffffff' },\n ...root,\n fields: { ...pageFields, ...(root.fields ?? {}) },\n // The page's root render applies the theme and the background. It is\n // the root of the editor's preview iframe as well as of a rendered\n // page, so both reach the editor. The site theme arrives through\n // Puck's metadata; the page's own settings are this render's props.\n render: ({ children, puck, title, background, backgroundImage, overlayColor, overlayOpacity }) => (\n <ThemeRoot\n theme={puck?.metadata?.pageletTheme}\n page={{ title, background, backgroundImage, overlayColor, overlayOpacity: blankToUndefined(overlayOpacity) }}\n >\n {children}\n </ThemeRoot>\n ),\n },\n },\n };\n}\n\n// A cleared number field arrives as '' or null: treat it as \"use the site's\".\nfunction blankToUndefined(value) {\n return value === '' || value === null || value === undefined ? undefined : value;\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 async function getPublishedPage(path) {\n try {\n const data = await request('GET', `/published?path=${encodeURIComponent(path)}`);\n return { document: data.document, pagePath: data.page_path, rest: data.rest ?? '' };\n } catch (error) {\n if (error instanceof PageletApiError && error.status === 404) return null;\n throw error;\n }\n }\n\n return {\n listPages: () => request('GET', '/pages'),\n getPage: (id) => request('GET', pagePath(id)),\n createPage: ({ path, title, matchesSubpaths }) =>\n request('POST', '/pages', { page: { path, title, matches_subpaths: matchesSubpaths } }),\n updatePage: (id, { path, title, matchesSubpaths }) =>\n request('PATCH', pagePath(id), { page: { path, title, matches_subpaths: matchesSubpaths } }),\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) => (await getPublishedPage(path))?.document ?? null,\n // Public: { document, pagePath, rest } for a path, or null. rest is what\n // follows a page that answers for sub-paths: /messages/43 -> \"43\".\n getPublishedPage,\n // Public: the site's theme and menu.\n getSite: async () => (await request('GET', '/site')).settings,\n // Needs publish permission: changes are live at once.\n updateSite: async (settings) => (await request('PATCH', '/site', { settings })).settings,\n };\n}\n","import { useState } from 'react';\nimport { Icon } from './icons.jsx';\nimport { safeImageUrl, safeUrl } from './safeUrl.js';\nimport { tokenVar } from './theme.js';\n\n// A site's menu, from its settings:\n// { style: 'bar' | 'centered',\n// brand: { logo, href, label },\n// items: [{ label, href, icon, highlight, group: 'left' | 'right' }] }\n//\n// linkComponent draws internal links, so an app's router can handle them\n// without a page reload: pass React Router's Link (it takes `to`). External\n// links (http/https) are plain anchors opening in a new tab.\n//\n// On narrow screens the items fold behind a menu button. The breakpoint is in\n// a small scoped stylesheet, because inline styles cannot hold a media query.\nconst CSS = `\n.pagelet-menu{display:flex;align-items:center;flex-wrap:wrap;gap:4px 16px;padding:8px 16px;background:var(--pagelet-menu-background,#f8f9fa)}\n.pagelet-menu--centered{flex-direction:column}\n.pagelet-menu__groups{display:flex;flex:1;align-items:center;gap:4px 16px;flex-wrap:wrap}\n.pagelet-menu--centered .pagelet-menu__groups{justify-content:center;flex:none}\n.pagelet-menu__group{display:flex;gap:4px 16px;flex-wrap:wrap;align-items:center}\n.pagelet-menu__group--right{margin-left:auto}\n.pagelet-menu--centered .pagelet-menu__group--right{margin-left:0}\n.pagelet-menu__link{text-decoration:none;color:rgba(0,0,0,.65);padding:6px 0;display:inline-flex;align-items:center;gap:6px}\n.pagelet-menu__link:hover{color:rgba(0,0,0,.9)}\n.pagelet-menu__link--current{color:rgba(0,0,0,.9)}\n.pagelet-menu__toggle{display:none;margin-left:auto;background:none;border:1px solid rgba(0,0,0,.2);border-radius:6px;padding:6px 10px;cursor:pointer;font:inherit}\n@media (max-width: 767px){\n .pagelet-menu__toggle{display:inline-block}\n .pagelet-menu__groups{display:none;flex-basis:100%;flex-direction:column;align-items:flex-start}\n .pagelet-menu__groups--open{display:flex}\n .pagelet-menu__group{flex-direction:column;align-items:flex-start}\n .pagelet-menu__group--right{margin-left:0}\n}`;\n\nfunction isExternal(href) {\n return /^https?:\\/\\//i.test(href);\n}\n\n// Links the app's router cannot handle: other sites, phone numbers, email.\nfunction needsPlainAnchor(href, LinkComponent) {\n return !LinkComponent || isExternal(href) || /^(mailto|tel):/i.test(href);\n}\n\nfunction MenuLink({ item, linkComponent: LinkComponent, currentPath, onNavigate }) {\n const href = safeUrl(item.href);\n if (!href) return null;\n const current = !isExternal(href) && currentPath === href;\n const className = `pagelet-menu__link${current ? ' pagelet-menu__link--current' : ''}`;\n const style = item.highlight ? { color: tokenVar('colorAccent') } : undefined;\n const body = (\n <>\n {item.label}\n {item.icon && <Icon name={item.icon} />}\n </>\n );\n\n if (needsPlainAnchor(href, LinkComponent)) {\n const external = isExternal(href) ? { target: '_blank', rel: 'noopener noreferrer' } : {};\n return <a className={className} style={style} href={href} {...external}>{body}</a>;\n }\n return (\n <LinkComponent className={className} style={style} to={href} onClick={onNavigate} aria-current={current ? 'page' : undefined}>\n {body}\n </LinkComponent>\n );\n}\n\nexport function PageletMenu({ menu = {}, linkComponent, currentPath }) {\n const [open, setOpen] = useState(false);\n const items = Array.isArray(menu.items) ? menu.items : [];\n const brand = menu.brand ?? {};\n const logo = safeImageUrl(brand.logo);\n const brandHref = safeUrl(brand.href) ?? '/';\n const close = () => setOpen(false);\n const group = (name) => items.filter((item) => (item.group ?? 'left') === name);\n const linkProps = { linkComponent, currentPath, onNavigate: close };\n const BrandLink = needsPlainAnchor(brandHref, linkComponent) ? 'a' : linkComponent;\n const brandTarget = BrandLink === 'a' ? { href: brandHref } : { to: brandHref, onClick: close };\n\n return (\n <nav className={`pagelet-menu${menu.style === 'centered' ? ' pagelet-menu--centered' : ''}`} aria-label=\"Site\">\n <style>{CSS}</style>\n {(logo || brand.label) && (\n <BrandLink className=\"pagelet-menu__brand\" {...brandTarget} style={{ display: 'inline-flex', alignItems: 'center', gap: '8px', textDecoration: 'none', color: 'inherit' }}>\n {logo && <img src={logo} alt={brand.label || 'Home'} style={{ height: '40px', width: 'auto', display: 'block' }} />}\n {!logo && brand.label}\n </BrandLink>\n )}\n <button type=\"button\" className=\"pagelet-menu__toggle\" aria-expanded={open} onClick={() => setOpen((value) => !value)}>\n Menu\n </button>\n <div className={`pagelet-menu__groups${open ? ' pagelet-menu__groups--open' : ''}`}>\n <div className=\"pagelet-menu__group\">{group('left').map((item, i) => <MenuLink key={i} item={item} {...linkProps} />)}</div>\n <div className=\"pagelet-menu__group pagelet-menu__group--right\">{group('right').map((item, i) => <MenuLink key={i} item={item} {...linkProps} />)}</div>\n </div>\n </nav>\n );\n}\n","import { PageletMenu } from './PageletMenu.jsx';\nimport { themeToStyle, tokenVar } from './theme.js';\n\n// A site's frame around a page: the menu from the site settings, then the page\n// itself (usually a <PageletPage>, which draws the page's background).\n//\n// <PageletLayout site={settings} linkComponent={Link} currentPath={pathname}>\n// <PageletPage document={doc} palette={palette} theme={settings.theme} />\n// </PageletLayout>\nexport function PageletLayout({ site = {}, linkComponent, currentPath, children }) {\n return (\n <div className=\"pagelet-layout\" style={{ ...themeToStyle(site.theme), maxWidth: tokenVar('maxWidth'), margin: '0 auto' }}>\n <PageletMenu menu={site.menu} linkComponent={linkComponent} currentPath={currentPath} />\n <main style={{ marginTop: 'var(--pagelet-space)' }}>{children}</main>\n </div>\n );\n}\n"],"names":["Fragment","document"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@byscott-io/pagelet",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Page builder for React: a visual editor and a renderer that draw saved pages with your own components (built on Puck)",
5
5
  "license": "MIT",
6
6
  "type": "module",