@riverbankcms/sdk 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.js +1 -1
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +1 -1
- package/dist/client/client.mjs.map +1 -1
- package/dist/server/{chunk-L5EA4FXU.mjs → chunk-2HXHFSMI.mjs} +2 -2
- package/dist/server/{chunk-ZSKOHNE7.js → chunk-EOWGKCUZ.js} +2 -2
- package/dist/server/{chunk-ZSKOHNE7.js.map → chunk-EOWGKCUZ.js.map} +1 -1
- package/dist/server/{chunk-VSFQRHYZ.js → chunk-PHS2KWJX.js} +4 -4
- package/dist/server/{chunk-VSFQRHYZ.js.map → chunk-PHS2KWJX.js.map} +1 -1
- package/dist/server/{chunk-KFLZGNPO.mjs → chunk-PMHLZ3FW.mjs} +128 -1
- package/dist/server/chunk-PMHLZ3FW.mjs.map +1 -0
- package/dist/server/{chunk-X4STRF2V.mjs → chunk-SQMGHEJM.mjs} +2 -2
- package/dist/server/{chunk-X4STRF2V.mjs.map → chunk-SQMGHEJM.mjs.map} +1 -1
- package/dist/server/{chunk-5STV4MWD.js → chunk-SSS7CCRR.js} +130 -3
- package/dist/server/chunk-SSS7CCRR.js.map +1 -0
- package/dist/server/components.js +3 -3
- package/dist/server/components.mjs +2 -2
- package/dist/server/index.js +2 -2
- package/dist/server/index.mjs +1 -1
- package/dist/server/navigation.d.mts +147 -1
- package/dist/server/navigation.d.ts +147 -1
- package/dist/server/navigation.js +14 -2
- package/dist/server/navigation.js.map +1 -1
- package/dist/server/navigation.mjs +15 -3
- package/dist/server/rendering/server.js +3 -3
- package/dist/server/rendering/server.mjs +2 -2
- package/dist/server/rendering.js +3 -3
- package/dist/server/rendering.mjs +2 -2
- package/dist/server/server.js +2 -2
- package/dist/server/server.mjs +1 -1
- package/package.json +1 -1
- package/dist/server/chunk-5STV4MWD.js.map +0 -1
- package/dist/server/chunk-KFLZGNPO.mjs.map +0 -1
- /package/dist/server/{chunk-L5EA4FXU.mjs.map → chunk-2HXHFSMI.mjs.map} +0 -0
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/load-config.ts","../../../blocks/src/system/manifest/augmentManifest.ts","../../../blocks/src/system/manifest/registry.ts","../../../blocks/src/system/node/schema.ts","../../../blocks/src/system/node/typeBasedLayout.ts","../../../blocks/src/system/manifest/schema.ts","../../../blocks/src/utils/env.ts","../../../blocks/src/system/node/types.ts","../../../blocks/src/system/node/builder.ts","../../../blocks/src/system/node/fragments/backgroundLayer.ts","../../../blocks/src/theme/utils/colorStyles.ts","../../../blocks/src/system/node/fragments/headingGroup.ts","../../../blocks/src/system/node/fragments/sectionContainer.ts","../../../blocks/src/system/spacing.ts","../../../blocks/src/system/node/fragments/styledSection.ts","../../../blocks/src/system/node/fragments/ctaButton.ts","../../../blocks/src/system/node/fragments/ctaRow.ts","../../../blocks/src/system/node/fragments/navRow.ts","../../../blocks/src/system/fragments/types.ts","../../../blocks/src/system/fragments/builder.ts","../../../blocks/src/system/fragments/library/bodyCopy.ts","../../../blocks/src/system/fragments/library/heroCopy.ts","../../../blocks/src/system/fields/button.ts","../../../blocks/src/system/fields/ctas.ts","../../../blocks/src/system/fragments/library/ctaRow.ts","../../../blocks/src/system/fragments/library/ctaCopy.ts","../../../blocks/src/system/fragments/library/testimonialsHeading.ts","../../../blocks/src/system/fragments/library/testimonialsCarousel.ts","../../../blocks/src/system/fragments/library/formCopy.ts","../../../blocks/src/system/fragments/library/formEmbed.ts","../../../blocks/src/system/fragments/library/footerBottomText.ts","../../../blocks/src/system/fragments/library/footerLinkGroups.ts","../../../blocks/src/system/fragments/library/blogFeaturedPost.ts","../../../blocks/src/system/fragments/library/blogListGrid.ts","../../../blocks/src/system/fragments/library/blogListStack.ts","../../../blocks/src/system/fragments/library/faqHeading.ts","../../../blocks/src/system/fragments/library/faqAccordion.ts","../../../blocks/src/system/fragments/library/card.ts","../../../blocks/src/system/fragments/library/heading.ts","../../../blocks/src/system/fragments/library/richText.ts","../../../blocks/src/system/fragments/utils/toRepeaterSchema.ts","../../../blocks/src/system/fragments/library/image.ts","../../../blocks/src/system/fragments/library/columnContent.ts","../../../blocks/src/system/constants/background.ts","../../../blocks/src/system/fields/background.ts","../../../blocks/src/system/fields/boxStyles.ts","../../../blocks/src/system/defineBlock.ts","../../../blocks/src/system/blocks/hero.ts","../../../blocks/src/system/blocks/body-text.ts","../../../blocks/src/system/blocks/blog-post.tsx","../../../blocks/src/system/blocks/blog-placeholder.ts","../../../blocks/src/system/blocks/blog-listing.ts","../../../blocks/src/system/blocks/cta-full.ts","../../../blocks/src/system/blocks/form.tsx","../../../blocks/src/system/blocks/faq.ts","../../../blocks/src/system/transforms/typed.ts","../../../blocks/src/system/blocks/site-header.ts","../../../blocks/src/system/blocks/site-footer.ts","../../../blocks/src/system/blocks/testimonials.tsx","../../../blocks/src/system/blocks/columns.ts","../../../blocks/src/system/blocks/appointment-booking.tsx","../../../blocks/src/system/blocks/events/shared/schemas.ts","../../../blocks/src/system/blocks/events/shared/fields.ts","../../../blocks/src/system/blocks/event-registration.ts","../../../blocks/src/system/blocks/events/event-spotlight.ts","../../../blocks/src/system/blocks/events/event-listing.ts","../../../blocks/src/system/blocks/events/event-calendar.ts","../../../blocks/src/system/blocks/embed.ts","../../../blocks/src/system/blocks/index.ts","../../../blocks/src/system/registry.ts","../../../blocks/src/system/constants/blockKinds.ts","../../src/config/content-validation.ts","../../src/data/prefetchBlockData.ts","../../src/config/validation.ts","../../src/cli/push-config.ts","../../src/client/management/http.ts","../../src/client/management/entries.ts","../../src/client/management/pages.ts","../../src/client/management/blocks.ts","../../src/client/management/navigation.ts","../../src/client/management/settings.ts","../../src/client/management/pull.ts","../../src/client/management/preview.ts","../../src/client/management/identifiers.ts","../../src/client/management/index.ts","../../src/cli/env.ts","../../src/cli/output.ts","../../src/cli/errors.ts","../../src/cli/helpers.ts","../../src/cli/sync/mapper.ts","../../src/cli/content/writer.ts","../../src/cli/content/reader.ts","../../src/cli/commands/pull.ts","../../src/cli/config-loader.ts","../../src/cli/sync/diff.ts","../../src/cli/sync/executor.ts","../../src/cli/commands/push.ts","../../src/cli/commands/entry.ts","../../src/cli/commands/page.ts","../../src/cli/commands/block.ts","../../src/cli/commands/navigation.ts","../../src/cli/commands/delete.ts","../../src/cli/preview/template.ts","../../src/cli/preview/playwright.config.ts","../../src/cli/preview/screenshot.ts","../../src/cli/preview/utils.ts","../../src/cli/commands/preview.ts","../../src/cli/init-docs/templates.ts","../../src/cli/init-docs/index.ts","../../src/cli/commands/init-docs.ts","../../src/cli/commands/identifiers.ts","../../src/cli/index.ts"],"names":["existsSync","jiti","createJiti","config","resolve","z","props","path","fields","repeat","composition","grid","classicLayout","dataLoaders","REGISTRY_SYMBOL","globalScope","Command","fs","readline","fs2","path2","fs3","path3","path4","prompts","equal","identifier","change","path5","upsertCommand","publishCommand","unpublishCommand","getCommand","listCommand","path6","fs4","path7","os","spawn","path8","readFile","path9","ensureDir","loadConfigFile","fs5","section","path10"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Config file loader for riverbank.config.ts\n *\n * Uses jiti to load TypeScript config files at runtime without\n * requiring a build step.\n */\n\nimport { createJiti } from 'jiti';\nimport { resolve } from 'path';\nimport { existsSync } from 'fs';\n\nconst DEFAULT_CONFIG_FILENAME = 'riverbank.config.ts';\n\n/**\n * Load builder config from a TypeScript file.\n *\n * @param configPath - Path to config file, or directory containing riverbank.config.ts\n * @returns The loaded config object\n * @throws Error if config file not found or invalid\n */\nexport async function loadConfigFile(configPath?: string): Promise<unknown> {\n // Resolve the config file path\n const resolvedPath = resolveConfigPath(configPath);\n\n if (!existsSync(resolvedPath)) {\n throw new Error(\n `Config file not found: ${resolvedPath}\\n` +\n `Create a riverbank.config.ts file or specify a path with --config`\n );\n }\n\n console.log(`Loading config from ${resolvedPath}...`);\n\n // Create jiti instance for loading TypeScript files\n const jiti = createJiti(import.meta.url, {\n // Disable caching for CLI tool\n fsCache: false,\n moduleCache: false,\n });\n\n try {\n // Load the config file\n const configModule = await jiti.import(resolvedPath);\n\n // Support both default export and named 'config' export\n const config = (configModule as Record<string, unknown>).default\n ?? (configModule as Record<string, unknown>).config\n ?? configModule;\n\n if (!config || typeof config !== 'object') {\n throw new Error('Config file must export a configuration object');\n }\n\n return config;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load config: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Resolve config path from user input.\n *\n * If no path provided, looks for riverbank.config.ts in cwd.\n * If path is a directory, looks for riverbank.config.ts in that directory.\n * If path is a file, uses it directly.\n */\nfunction resolveConfigPath(configPath?: string): string {\n if (!configPath) {\n // Default: look in current directory\n return resolve(process.cwd(), DEFAULT_CONFIG_FILENAME);\n }\n\n const resolved = resolve(configPath);\n\n // If it's a directory, append the default filename\n if (existsSync(resolved) && !resolved.endsWith('.ts') && !resolved.endsWith('.js')) {\n return resolve(resolved, DEFAULT_CONFIG_FILENAME);\n }\n\n // Otherwise use as-is (could be a specific file)\n return resolved;\n}\n","import type { BlockManifest, FieldDefinition } from './schema';\n\n/**\n * Augments a block manifest with synthetic fields and other transformations.\n * This should be called at the block definition level, not at runtime.\n *\n * Current augmentations:\n * - Adds a variant select field if the manifest has multiple variants\n *\n * Future augmentations might include:\n * - Theme field injection\n * - Spacing/layout presets\n * - Animation controls\n */\nexport function augmentManifest(manifest: BlockManifest): BlockManifest {\n let augmentedFields = manifest.fields ?? [];\n\n // Add variant field if block has multiple variants\n const variantField = createVariantField(manifest);\n if (variantField) {\n augmentedFields = [variantField, ...augmentedFields];\n }\n\n return {\n ...manifest,\n fields: augmentedFields,\n };\n}\n\n/**\n * Creates a synthetic variant field definition when a manifest has variants.\n */\nfunction createVariantField(manifest: BlockManifest): FieldDefinition | null {\n if (!manifest.variants || Object.keys(manifest.variants).length <= 1) {\n return null;\n }\n\n const variantKeys = Object.keys(manifest.variants);\n\n const field: FieldDefinition = {\n id: 'variant',\n type: 'select',\n label: 'Variant',\n description: 'Choose a layout variant for this block',\n required: false,\n defaultValue: manifest.defaultVariant ?? variantKeys[0],\n options: variantKeys.map((key) => ({\n value: key,\n label: formatVariantLabel(key),\n })),\n multiple: false,\n };\n\n return field;\n}\n\nfunction formatVariantLabel(variantKey: string): string {\n // Convert camelCase or snake_case to Title Case\n // Examples: \"splitReverse\" → \"Split Reverse\", \"classic\" → \"Classic\"\n return variantKey\n .replace(/([A-Z])/g, ' $1') // Add space before capitals\n .replace(/_/g, ' ') // Replace underscores with spaces\n .trim()\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n","import type { BlockManifest } from \"./schema\";\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@riverbankcms/blocks/manifest-registry\");\n\ntype ManifestRegistryStore = Map<string, BlockManifest>;\n\ninterface ManifestRegistryGlobal extends Record<PropertyKey, unknown> {\n [REGISTRY_SYMBOL]?: ManifestRegistryStore;\n}\n\nconst globalScope = globalThis as ManifestRegistryGlobal;\n\nif (!globalScope[REGISTRY_SYMBOL]) {\n globalScope[REGISTRY_SYMBOL] = new Map();\n}\n\nconst manifestStore = globalScope[REGISTRY_SYMBOL]!;\n\nexport function registerManifest(manifest: BlockManifest): BlockManifest {\n manifestStore.set(manifest.name, manifest);\n return manifest;\n}\n\nexport function getManifestByName(name: string): BlockManifest | undefined {\n return manifestStore.get(name);\n}\n\nexport function hasManifest(name: string): boolean {\n return manifestStore.has(name);\n}\n\nexport function listManifests(): BlockManifest[] {\n return Array.from(manifestStore.values());\n}\n\nexport function clearManifestRegistry(): void {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env === \"production\") {\n return;\n }\n\n manifestStore.clear();\n}\n","import { z } from \"zod\";\n\nconst transformStepSchema = z.object({\n id: z.string().min(1, \"Transform requires an identifier\"),\n options: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const bindingPathSchema = z\n .string()\n .min(1, \"Binding path is required\")\n .regex(/[A-Za-z0-9_\\.$\\[\\]/-]+/, \"Binding path contains invalid characters\");\n\nexport const bindingSchema = z.object({\n from: bindingPathSchema,\n fallback: z.unknown().optional(),\n transforms: transformStepSchema.array().default([]),\n pick: z.enum([\"value\", \"collection\", \"context\"]).default(\"value\"),\n});\n\nexport type Binding = z.infer<typeof bindingSchema>;\n\nexport const repeatSchema = z.object({\n collection: bindingSchema,\n itemName: z.string().min(1).default(\"item\"),\n indexName: z.string().min(1).default(\"index\"),\n limit: z.number().int().positive().optional(),\n sortBy: z\n .object({\n path: bindingPathSchema,\n direction: z.enum([\"asc\", \"desc\"]).default(\"asc\"),\n })\n .optional(),\n});\n\nexport type RepeatConfig = z.infer<typeof repeatSchema>;\n\nexport const conditionSchema = z.object({\n when: bindingSchema,\n equals: z.unknown().optional(),\n not: z.boolean().default(false),\n});\n\nexport type ConditionConfig = z.infer<typeof conditionSchema>;\n\nexport const dataScopeSchema = z.object({\n name: z.string().min(1),\n from: bindingSchema,\n});\n\nexport type DataScope = z.infer<typeof dataScopeSchema>;\n\nexport const nodePropsSchema = z.record(z.string(), z.unknown()).default({});\n\nexport const nodeSchema: z.ZodType<any> = z.object({\n type: z.string().min(1, \"Node type is required\"),\n key: z.string().optional(),\n props: nodePropsSchema.optional(),\n children: z.lazy(() => nodeSchema.array().default([])).optional(),\n $bind: bindingSchema.optional(),\n $repeat: repeatSchema.optional(),\n $when: conditionSchema.optional(),\n $scopes: dataScopeSchema.array().optional(),\n});\n\nexport type NodeDefinition = z.infer<typeof nodeSchema>;\n\nexport const nodeTreeSchema = nodeSchema.array().or(nodeSchema);\n\nexport type NodeTree = z.infer<typeof nodeTreeSchema>;\n\nexport const NodeSchema = nodeSchema;\nexport const NodeTreeSchema = nodeTreeSchema;\n","import type { NodeDefinition } from './schema';\n\n/**\n * Creates conditional layout branches based on item type.\n * Used for polymorphic repeaters where each item type has a different layout.\n *\n * @param itemTypesMap - Map of type IDs to their layout definitions\n * @param options - Configuration options\n * @returns Array of conditional node definitions\n *\n * @example\n * ```typescript\n * // In a repeater with items: [{_type: 'card', ...}, {_type: 'quote', ...}]\n * const children = typeBasedLayout({\n * card: stack({}, [\n * text({ as: 'h3' }, bind('item.title')),\n * richText({}, bind('item.body'))\n * ]),\n * quote: stack({}, [\n * richText({}, bind('item.text')),\n * text({ className: 'author' }, bind('item.author'))\n * ])\n * }, { itemName: 'item' });\n * ```\n */\nexport function typeBasedLayout(\n itemTypesMap: Record<string, NodeDefinition>,\n options?: {\n /**\n * Name of the repeater item variable (default: 'item')\n */\n itemName?: string;\n }\n): NodeDefinition[] {\n const itemName = options?.itemName ?? 'item';\n\n const result = Object.entries(itemTypesMap).map(([typeId, layout]) => {\n // Unwrap single-element arrays (fragments return [NodeDefinition])\n const node = Array.isArray(layout) && layout.length === 1 ? layout[0] : layout;\n\n return {\n ...node,\n $when: {\n when: { from: `${itemName}._type` },\n equals: typeId\n }\n };\n });\n\n return result;\n}\n","import { z } from \"zod\";\nimport { NodeSchema } from \"../node\";\n\n/**\n * Visibility levels gate editor access to fields/slots.\n */\nexport const visibilityLevels = [\"admin\", \"designer\", \"author\"] as const;\nexport type VisibilityLevel = (typeof visibilityLevels)[number];\n\n// metadata has been removed from BlockManifest. Use manifest.title/description\n// directly for any display purposes.\n\nconst uiSchema = z\n .object({\n widget: z.string().optional(),\n flattenInRepeater: z.boolean().optional(),\n hidden: z.boolean().optional(),\n hideLabel: z.boolean().optional(),\n hideDescription: z.boolean().optional(),\n showCharCount: z\n .union([z.number().int().positive(), z.object({ max: z.number().int().positive() })])\n .optional(),\n showSlugPreview: z.boolean().optional(),\n variant: z.enum(['full', 'inline', 'limited', 'media']).optional(),\n richTextVariant: z.enum(['full', 'inline', 'limited', 'media']).optional(),\n // Optional input hints for validators/widgets\n inputType: z.enum(['text', 'email', 'tel', 'number']).optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n pattern: z.string().optional(),\n placeholder: z.string().optional(),\n visibleWhen: z\n .object({\n field: z.string().min(1),\n equals: z.any().optional(),\n notEquals: z.any().optional(),\n oneOf: z.array(z.any()).optional(),\n notIn: z.array(z.any()).optional(),\n })\n .optional(),\n // Modal configuration for modal and group fields\n modalConfig: z\n .object({\n buttonLabel: z.string().optional(),\n description: z.string().optional(),\n buttonVariant: z.enum(['default', 'outline']).optional(),\n showCustomizedIndicator: z.boolean().optional(),\n maxWidth: z.string().optional(),\n })\n .optional(),\n // Background field configuration\n allowedTypes: z.array(z.enum(['color', 'gradient', 'image'])).optional(),\n // Tab group configuration\n fullWidth: z.boolean().optional(),\n // Field layout configuration\n row: z.string().optional(),\n colSpan: z.number().int().min(1).max(4).optional(),\n // Group layout configuration\n layout: z.enum(['stack', 'grid']).optional(),\n columns: z.number().int().min(2).max(4).optional(),\n // Entry picker configuration\n contentTypeField: z.string().optional(),\n })\n .partial();\n\nconst baseFieldSchema = z.object({\n id: z.string().min(1, \"Field id is required\"),\n label: z.string().min(1, \"Field label is required\"),\n description: z.string().optional(),\n visibleRoles: z.array(z.enum(visibilityLevels)).optional(),\n defaultValue: z.any().optional(),\n required: z.boolean().default(false),\n ui: uiSchema.optional(),\n});\n\nconst textFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"text\"),\n multiline: z.boolean().default(false),\n maxLength: z.number().int().positive().optional(),\n});\n\nconst richTextFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"richText\"),\n format: z.enum([\"markdown\", \"html\"]).default(\"markdown\"),\n});\n\nconst mediaFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"media\"),\n mediaKinds: z.array(z.enum([\"image\", \"video\"])).default([\"image\"]),\n aspectRatio: z.string().optional(),\n});\n\nconst booleanFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"boolean\"),\n});\n\nconst dateFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"date\"),\n});\n\nconst timeFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"time\"),\n});\n\nconst dateTimeFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"datetime\"),\n});\n\nconst slugFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"slug\"),\n sourceFieldId: z.string().min(1).optional(),\n statusFieldId: z.string().min(1).optional(),\n maxLength: z.number().int().positive().optional(),\n});\n\nconst urlFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"url\"),\n allowRelative: z.boolean().default(false),\n});\n\nconst linkFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"link\"),\n});\n\nconst selectFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"select\"),\n options: z.array(z.object({\n value: z.string(),\n label: z.string(),\n })).min(1),\n multiple: z.boolean().default(false),\n});\n\nconst referenceFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"reference\"),\n referenceKind: z.string().min(1),\n allowManualEntry: z.boolean().default(false),\n});\n\n/**\n * Item type schema for polymorphic repeaters.\n * Each type has a label, optional icon, and its own field schema.\n */\nconst itemTypeSchema = z.object({\n label: z.string().min(1),\n icon: z.string().optional(),\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Item type requires at least one field\")),\n});\n\n/**\n * Repeater fields allow nesting of other fields within them.\n * This enables complex layouts and structures by repeating a set of fields.\n *\n * Supports two modes:\n * 1. Monomorphic (default): All items have the same schema\n * 2. Polymorphic: Items can be different types (e.g., card, quote, stat)\n *\n * Uses z.lazy() to allow mutual recursion.\n */\nconst repeaterFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"repeater\"),\n itemLabel: z.string().default(\"Item\"),\n itemLabelSource: z.string().optional(),\n minItems: z.number().int().min(0).default(0),\n maxItems: z.number().int().positive().optional(),\n\n // Monomorphic mode\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Repeater requires at least one field\")),\n }).optional(),\n\n // Polymorphic mode\n polymorphic: z.boolean().optional(),\n itemTypes: z.record(z.string(), itemTypeSchema).optional(),\n allowConversion: z.boolean().default(true),\n}).refine(\n (data) => {\n // Either schema OR (polymorphic + itemTypes) must be present\n const hasSchema = data.schema !== undefined;\n const hasPolymorphic = data.polymorphic === true && data.itemTypes !== undefined;\n return hasSchema !== hasPolymorphic; // XOR: exactly one must be true\n },\n {\n message: \"Repeater must have either 'schema' (monomorphic) or 'polymorphic: true' with 'itemTypes' (polymorphic)\",\n }\n);\n\nconst groupFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"group\"),\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Group requires at least one field\")),\n }),\n});\n\nconst modalFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"modal\"),\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Modal requires at least one field\")),\n }),\n});\n\nconst numberFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"number\"),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n});\n\nconst tabDefinitionSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n icon: z.string().optional(),\n description: z.string().optional(),\n fields: z.lazy(() => getFieldSchemaInternal().array()),\n /** SDK section option that controls tab visibility based on site config */\n sdkSectionOption: z.enum(['backgroundColor', 'backgroundGradient', 'backgroundImage']).optional(),\n});\n\nconst tabGroupFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"tabGroup\"),\n tabs: z.array(tabDefinitionSchema).min(1, \"TabGroup requires at least one tab\"),\n activeTabField: z.string().optional(),\n});\n\nconst presetOptionSchema = z.object({\n value: z.string(),\n label: z.string(),\n});\n\nconst presetOrCustomFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"presetOrCustom\"),\n presets: z.array(presetOptionSchema).min(1, \"PresetOrCustom requires at least one preset\"),\n customInput: z.object({\n placeholder: z.string().optional(),\n pattern: z.string().optional(),\n helpText: z.string().optional(),\n }).optional(),\n});\n\nconst contentTypeSelectFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"contentTypeSelect\"),\n /** Filter: all, routable (hasPages=true), nonRoutable (hasPages=false) */\n filter: z.enum([\"all\", \"routable\", \"nonRoutable\"]).default(\"all\"),\n});\n\nconst entryPickerFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"entryPicker\"),\n});\n\ntype FieldSchemaMembers = readonly [\n typeof textFieldSchema,\n typeof richTextFieldSchema,\n typeof mediaFieldSchema,\n typeof booleanFieldSchema,\n typeof numberFieldSchema,\n typeof dateFieldSchema,\n typeof timeFieldSchema,\n typeof dateTimeFieldSchema,\n typeof slugFieldSchema,\n typeof urlFieldSchema,\n typeof linkFieldSchema,\n typeof selectFieldSchema,\n typeof referenceFieldSchema,\n typeof repeaterFieldSchema,\n typeof groupFieldSchema,\n typeof modalFieldSchema,\n typeof tabGroupFieldSchema,\n typeof presetOrCustomFieldSchema,\n typeof contentTypeSelectFieldSchema,\n typeof entryPickerFieldSchema,\n];\n\ntype FieldSchemaUnion = z.ZodDiscriminatedUnion<FieldSchemaMembers, \"type\">;\n\n// Cached instance for lazy initialization\nlet _fieldSchemaInternal: FieldSchemaUnion | null = null;\n\nfunction getFieldSchemaInternal(): FieldSchemaUnion {\n // Lazy initialization to avoid module-level circular reference issues\n // when bundled into a single file\n if (_fieldSchemaInternal) {\n return _fieldSchemaInternal;\n }\n\n _fieldSchemaInternal = z.discriminatedUnion(\"type\", [\n textFieldSchema,\n richTextFieldSchema,\n mediaFieldSchema,\n booleanFieldSchema,\n numberFieldSchema,\n dateFieldSchema,\n timeFieldSchema,\n dateTimeFieldSchema,\n slugFieldSchema,\n urlFieldSchema,\n linkFieldSchema,\n selectFieldSchema,\n referenceFieldSchema,\n repeaterFieldSchema,\n groupFieldSchema,\n modalFieldSchema,\n tabGroupFieldSchema,\n presetOrCustomFieldSchema,\n contentTypeSelectFieldSchema,\n entryPickerFieldSchema,\n ]) as unknown as FieldSchemaUnion;\n\n return _fieldSchemaInternal;\n}\n\n// Getter function for programmatic access\nexport function getFieldSchema(): FieldSchemaUnion {\n return getFieldSchemaInternal();\n}\n\n// Lazy proxy that forwards all method calls to getFieldSchemaInternal()\n// This allows backward compatibility with code using fieldSchema.array(), .parse(), etc.\n// The actual schema is only created when a method is first called\nexport const fieldSchema: FieldSchemaUnion = new Proxy({} as FieldSchemaUnion, {\n get(_, prop: keyof FieldSchemaUnion) {\n const schema = getFieldSchemaInternal();\n const value = schema[prop];\n // Bind functions to the schema so `this` works correctly\n return typeof value === 'function' ? value.bind(schema) : value;\n },\n // Forward has checks to the real schema\n has(_, prop) {\n return prop in getFieldSchemaInternal();\n },\n});\n\nexport type FieldSchema = FieldSchemaUnion;\n\nexport type TextFieldDefinition = z.output<typeof textFieldSchema>;\nexport type RichTextFieldDefinition = z.output<typeof richTextFieldSchema>;\nexport type MediaFieldDefinition = z.output<typeof mediaFieldSchema>;\nexport type BooleanFieldDefinition = z.output<typeof booleanFieldSchema>;\nexport type NumberFieldDefinition = z.output<typeof numberFieldSchema>;\nexport type DateFieldDefinition = z.output<typeof dateFieldSchema>;\nexport type TimeFieldDefinition = z.output<typeof timeFieldSchema>;\nexport type DateTimeFieldDefinition = z.output<typeof dateTimeFieldSchema>;\nexport type SlugFieldDefinition = z.output<typeof slugFieldSchema>;\nexport type UrlFieldDefinition = z.output<typeof urlFieldSchema>;\nexport type LinkFieldDefinition = z.output<typeof linkFieldSchema>;\nexport type SelectFieldDefinition = z.output<typeof selectFieldSchema>;\nexport type ReferenceFieldDefinition = z.output<typeof referenceFieldSchema>;\nexport type ItemTypeDefinition = {\n label: string;\n icon?: string;\n fields: FieldDefinition[];\n};\n\nexport type RepeaterFieldDefinition = Omit<z.output<typeof repeaterFieldSchema>, \"schema\" | \"itemTypes\"> & {\n schema?: {\n fields: FieldDefinition[];\n };\n itemTypes?: Record<string, ItemTypeDefinition>;\n};\n\nexport type GroupFieldDefinition = Omit<z.output<typeof groupFieldSchema>, \"schema\"> & {\n schema: {\n fields: FieldDefinition[];\n };\n};\n\nexport type ModalFieldDefinition = Omit<z.output<typeof modalFieldSchema>, \"schema\"> & {\n schema: {\n fields: FieldDefinition[];\n };\n};\n\nexport type TabDefinition = {\n id: string;\n label: string;\n icon?: string;\n description?: string;\n fields: FieldDefinition[];\n /**\n * Optional SDK section option that controls tab visibility.\n * When set, the tab is only shown when the SDK sectionOptions[key] is not false.\n */\n sdkSectionOption?: 'backgroundColor' | 'backgroundGradient' | 'backgroundImage';\n};\n\nexport type TabGroupFieldDefinition = Omit<z.output<typeof tabGroupFieldSchema>, \"tabs\"> & {\n tabs: TabDefinition[];\n};\n\nexport type PresetOption = {\n value: string;\n label: string;\n};\n\nexport type PresetOrCustomFieldDefinition = z.output<typeof presetOrCustomFieldSchema>;\n\nexport type ContentTypeSelectFieldDefinition = z.output<typeof contentTypeSelectFieldSchema>;\n\nexport type EntryPickerFieldDefinition = z.output<typeof entryPickerFieldSchema>;\n\nexport type FieldDefinition =\n | TextFieldDefinition\n | RichTextFieldDefinition\n | MediaFieldDefinition\n | BooleanFieldDefinition\n | NumberFieldDefinition\n | DateFieldDefinition\n | TimeFieldDefinition\n | DateTimeFieldDefinition\n | SlugFieldDefinition\n | UrlFieldDefinition\n | LinkFieldDefinition\n | SelectFieldDefinition\n | ReferenceFieldDefinition\n | RepeaterFieldDefinition\n | GroupFieldDefinition\n | ModalFieldDefinition\n | TabGroupFieldDefinition\n | PresetOrCustomFieldDefinition\n | ContentTypeSelectFieldDefinition\n | EntryPickerFieldDefinition;\n\n/**\n * Union type of all possible block field types.\n * Extracted from FieldDefinition for use in type compatibility checks.\n */\nexport type BlockFieldType = FieldDefinition['type'];\n\nexport const slotSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n allowedKinds: z.array(z.string()).default([]),\n min: z.number().int().min(0).default(0),\n max: z.number().int().positive().optional(),\n help: z.string().optional(),\n visibleRoles: z.array(z.enum(visibilityLevels)).optional(),\n});\n\nexport type SlotDefinition = z.infer<typeof slotSchema>;\n\nconst typographyTokens = [\"display\", \"heading\", \"subheading\", \"body\", \"caption\"] as const;\nconst colorTokens = [\"background\", \"surface\", \"foreground\", \"accent\", \"muted\"] as const;\nconst spacingTokens = [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\nconst radiusTokens = [\"none\", \"sm\", \"md\", \"lg\", \"full\"] as const;\n\nexport const styleTokenSchema = z.object({\n background: z.enum(colorTokens).optional(),\n foreground: z.enum(colorTokens).optional(),\n border: z.enum(colorTokens).optional(),\n typography: z.enum(typographyTokens).optional(),\n spacing: z.enum(spacingTokens).optional(),\n radius: z.enum(radiusTokens).optional(),\n});\n\nexport type StyleTokenConfig = z.infer<typeof styleTokenSchema>;\n\nexport const behaviourSchema = z.object({\n supportsThemeSwitching: z.boolean().default(true),\n inlineEditing: z.boolean().default(false),\n animation: z.boolean().default(false),\n // Hide from block picker palettes (e.g., header/footer system blocks)\n paletteHidden: z.boolean().default(false),\n});\n\nexport type BehaviourConfig = z.infer<typeof behaviourSchema>;\n\n// Block discovery and organization metadata\nexport const blockCategoryEnum = z.enum(['marketing', 'content', 'blog', 'media', 'layout', 'interactive']);\nexport type BlockCategory = z.infer<typeof blockCategoryEnum>;\n\nexport const manifestSchema = z.object({\n name: z.string().min(1),\n version: z.string().min(1),\n title: z.string().min(1),\n titleSource: z.string().optional(),\n description: z.string().optional(),\n component: z.string().min(1),\n fields: fieldSchema.array().default([]),\n slots: slotSchema.array().default([]),\n styleTokens: styleTokenSchema.optional(),\n behaviours: behaviourSchema.optional(),\n layout: NodeSchema.optional(),\n // Block variants system\n variants: z.record(z.string(), NodeSchema).optional(),\n defaultVariant: z.string().optional(),\n // Discovery metadata\n category: blockCategoryEnum.optional(),\n contentTypes: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n icon: z.string().optional(),\n});\n\nexport type BlockManifest = z.infer<typeof manifestSchema>;\n\n// ============================================================================\n// SDK Custom Block Types\n// ============================================================================\n\n/**\n * Whitelisted CMS loader endpoints for SDK custom blocks.\n *\n * The canonical list is SUPPORTED_LOADER_ENDPOINTS in @riverbankcms/sdk/data.\n * This type must remain in sync. The SDK validation derives its Zod schema\n * from that constant, ensuring runtime and compile-time consistency.\n *\n * Supported endpoints:\n * - listPublishedEntries: Fetch published content entries\n * - getPublishedEntryPreview: Fetch a single entry by slug\n * - listPublicEvents: Fetch public calendar events\n * - getPublicFormById: Fetch a form configuration\n * - getPublicBookingServices: Fetch booking services\n */\nexport type SdkLoaderEndpoint =\n | 'listPublishedEntries'\n | 'getPublishedEntryPreview'\n | 'listPublicEvents'\n | 'getPublicFormById'\n | 'getPublicBookingServices';\n\n/**\n * A binding expression for dynamic loader params.\n *\n * Bindings resolve at runtime from block content or page context:\n * - `content.fieldName` - Value from block's content field\n * - `$root.siteId` - Site ID from page context\n * - `$root.pageId` - Page ID from page context\n * - `$root.previewStage` - 'published' or 'preview'\n */\nexport type ParamBinding = {\n $bind: {\n /** Path to bind from (e.g., 'content.categoryId', '$root.siteId') */\n from: string;\n /** Fallback value if binding resolves to undefined */\n fallback?: string;\n };\n};\n\n/**\n * A loader param value can be static or a binding expression.\n */\nexport type LoaderParamValue = string | number | boolean | ParamBinding;\n\n/**\n * Config-based data loader for SDK custom blocks.\n *\n * Config loaders are declarative and restricted to whitelisted CMS endpoints.\n * They execute server-side during loadPage().\n */\nexport interface SdkConfigLoader {\n /** Whitelisted CMS endpoint to call */\n endpoint: SdkLoaderEndpoint;\n\n /**\n * Parameters to pass to the endpoint.\n * Values can be static or use bindings for dynamic resolution.\n */\n params: Record<string, LoaderParamValue>;\n\n /**\n * Execution mode.\n * Currently only 'server' is implemented - loaders run during loadPage().\n * 'client' is reserved for future client-side refresh functionality.\n * @default 'server'\n */\n mode?: 'server' | 'client';\n}\n\n/**\n * SDK Custom Block Definition\n *\n * Used by SDK sites to define entirely new blocks in their riverbank.config.ts.\n * These blocks:\n * - Have their own field schemas (using standard FieldDefinition format)\n * - Appear in the CMS block picker alongside system blocks\n * - Are edited using CMS-generated forms (existing infrastructure)\n * - MUST be rendered via blockOverrides on the SDK site\n *\n * Block IDs must start with 'custom.' to distinguish from system blocks.\n */\nexport interface SdkCustomBlock {\n /** Block ID - MUST start with 'custom.' (e.g., 'custom.team-member') */\n id: `custom.${string}`;\n\n /** Display title in block picker */\n title: string;\n\n /** Field ID to use as block title in lists (must match a field id) */\n titleSource?: string;\n\n /** Description shown in block picker */\n description?: string;\n\n /** Category for block picker organization */\n category: BlockCategory;\n\n /** Lucide icon name */\n icon?: string;\n\n /** Search tags for block discovery */\n tags?: string[];\n\n /** Field definitions - uses same type as system blocks */\n fields: FieldDefinition[];\n\n /**\n * Config-based data loaders for CMS endpoints.\n *\n * Keys are loader names (e.g., 'posts', 'events').\n * Data is available in the component as `data.{key}`.\n *\n * @example\n * ```typescript\n * dataLoaders: {\n * events: {\n * endpoint: 'listPublicEvents',\n * params: {\n * siteId: { $bind: { from: '$root.siteId' } },\n * limit: { $bind: { from: 'content.limit', fallback: '5' } },\n * },\n * },\n * }\n * ```\n */\n dataLoaders?: Record<string, SdkConfigLoader>;\n}\n","/**\n * Environment detection utilities\n *\n * Provides type-safe environment detection without relying on 'as any' casts.\n */\n\n/**\n * Check if the current environment is development.\n *\n * Returns true if NODE_ENV is not 'production', or if NODE_ENV cannot be determined\n * (which is the safe default for validation and warnings).\n *\n * @returns true if in development mode, false if in production\n */\nexport function isDevEnvironment(): boolean {\n try {\n // Try to access process.env.NODE_ENV safely\n if (typeof process !== 'undefined' && process.env?.NODE_ENV !== undefined) {\n return process.env.NODE_ENV !== 'production'\n }\n // If process.env is unavailable (e.g., browser context), assume dev (safe default)\n return true\n } catch {\n // If accessing process throws (strict browser context), assume dev (safe default)\n return true\n }\n}\n","/**\n * Type-safe node builder types\n *\n * These types prevent common mistakes like putting 'children' in props\n * by explicitly excluding reserved keys at compile time.\n */\n\nimport type { NodeDefinition } from './schema'\nimport { isDevEnvironment } from '../../utils/env'\n\n/**\n * Reserved keys that should NEVER appear in node props.\n * These are top-level NodeDefinition properties that would conflict if placed in props.\n *\n * Note: 'type' is NOT included because components may legitimately need a 'type' prop\n * (e.g., Accordion needs type=\"single\"). The NodeDefinition.type is separate from props.type.\n */\ntype ReservedNodeKeys =\n | 'children'\n | 'key'\n | '$bind'\n | '$when'\n | '$repeat'\n | '$scopes'\n\n/**\n * List of reserved keys (for runtime validation).\n * Kept in sync with the ReservedNodeKeys type above.\n */\nconst RESERVED_KEYS: readonly ReservedNodeKeys[] = [\n 'children',\n 'key',\n '$bind',\n '$when',\n '$repeat',\n '$scopes',\n] as const\n\n/**\n * Props type that explicitly excludes reserved keys.\n * This makes it a compile-time error to pass children, $bind, etc. in props.\n *\n * @example\n * // ✅ OK\n * const props: NodeProps = { className: 'foo', gap: 'md' }\n *\n * // ❌ Type error - 'children' is not allowed in props\n * const props: NodeProps = { className: 'foo', children: [...] }\n */\nexport type NodeProps = Record<string, unknown> & {\n [K in ReservedNodeKeys]?: never\n}\n\n/**\n * Type-safe version of the el() function signature.\n * Ensures props cannot contain reserved keys.\n */\nexport type ElementBuilder = (\n type: string,\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: Array<(node: NodeDefinition) => NodeDefinition>\n) => NodeDefinition\n\n/**\n * Type guard to check if props contain reserved keys at runtime.\n * Use this in development mode to catch bugs early.\n *\n * @param props - Props object to validate\n * @returns Array of reserved keys found in props, or empty array if none\n */\nexport function findReservedKeysInProps(props: Record<string, unknown> | null | undefined): ReservedNodeKeys[] {\n if (!props) return []\n\n return RESERVED_KEYS.filter(key => key in props) as ReservedNodeKeys[]\n}\n\n/**\n * Validates that props don't contain reserved keys.\n * Throws in development, warns in production.\n *\n * @param props - Props to validate\n * @param context - Context for error message (e.g., \"el('grid', ...)\")\n */\nexport function validateProps(\n props: Record<string, unknown> | null | undefined,\n context: string = 'node builder'\n): void {\n const reserved = findReservedKeysInProps(props)\n\n if (reserved.length === 0) return\n\n const message = `[blocks:${context}] Reserved keys found in props: ${reserved.join(', ')}. ` +\n `These should be passed as separate parameters or modifiers, not in props. ` +\n `For example, 'children' should be the 3rd parameter to el(), not in the props object.`\n\n if (isDevEnvironment()) {\n throw new TypeError(message)\n } else {\n console.error(message)\n }\n}\n\n/**\n * Helper type to infer proper props for specific node types.\n * Can be extended to provide type-specific prop validation.\n */\nexport type NodeTypeProps<T extends string> = T extends 'grid'\n ? NodeProps & {\n cols?: unknown\n gap?: unknown\n }\n : T extends 'stack' | 'inline'\n ? NodeProps & {\n gap?: unknown\n align?: unknown\n justify?: unknown\n className?: unknown\n }\n : T extends 'text' | 'richText'\n ? NodeProps & {\n as?: string\n className?: unknown\n }\n : NodeProps\n","import { NodeSchema, type NodeDefinition } from './schema'\nimport { validateProps, type NodeProps } from './types'\nimport { isDevEnvironment } from '../../utils/env'\n\n// Modifier function that mutates or augments a node definition\nexport type NodeModifier = (node: NodeDefinition) => NodeDefinition\n\nfunction normalizeChildren(children?: Array<NodeDefinition | null | undefined>): NodeDefinition[] | undefined {\n if (!children) return undefined\n const flat = children.flat().filter(Boolean) as NodeDefinition[]\n return flat.length > 0 ? flat : undefined\n}\n\nexport function el(\n type: string,\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n): NodeDefinition {\n // Validate that reserved keys aren't in props (throws in dev, warns in prod)\n validateProps(props, `el('${type}', ...)`)\n\n const node: NodeDefinition = {\n type,\n ...(props && Object.keys(props).length > 0 ? { props } : {}),\n ...(children && children.length ? { children: normalizeChildren(children) } : {}),\n }\n\n if (mods && mods.length > 0) {\n // Filter out any non-function values (e.g., undefined, null)\n const validMods = mods.filter((mod): mod is NodeModifier => typeof mod === 'function')\n if (validMods.length > 0) {\n const modified = validMods.reduce((acc, fn) => fn(acc), node)\n return devValidate(modified)\n }\n }\n return devValidate(node)\n}\n\n// Convenience element helpers for common primitives\nexport const section = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('section', props, children, ...mods)\n\nexport const headerSection = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('headerSection', props, children, ...mods)\n\nexport const stack = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('stack', props, children, ...mods)\n\nexport const inline = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('inline', props, children, ...mods)\n\nexport const accordion = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('accordion', props, children, ...mods)\n\nexport const accordionItem = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('accordionItem', props, children, ...mods)\n\nexport const carousel = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('carousel', props, children, ...mods)\n\nexport const text = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('text', props, undefined, ...mods)\n\nexport const richText = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('richText', props, undefined, ...mods)\n\nexport const media = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('media', props, undefined, ...mods)\n\nexport const button = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('button', props, children, ...mods)\n\nexport const link = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('link', props, children, ...mods)\n\nexport const form = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('form', props, children, ...mods)\n\nexport const bookingForm = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('booking-form', props, children, ...mods)\n\nexport const eventList = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('event-list', props, children, ...mods)\n\nexport const eventRegistration = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('event-registration', props, children, ...mods)\n\n// Modifiers\nexport function bind(from: string, options?: { fallback?: unknown; transforms?: Array<{ id: string; options?: Record<string, unknown> }>; pick?: 'value' | 'collection' | 'context' }): NodeModifier {\n return (node) => ({\n ...node,\n $bind: {\n from,\n ...(options?.fallback !== undefined ? { fallback: options.fallback } : {}),\n ...(options?.transforms ? { transforms: options.transforms } : {}),\n ...(options?.pick ? { pick: options.pick } : {}),\n },\n })\n}\n\nexport function when(path: string, options?: { equals?: unknown; not?: boolean }): NodeModifier {\n return (node) => ({\n ...node,\n $when: {\n when: { from: path },\n ...(options?.equals !== undefined ? { equals: options.equals } : {}),\n ...(options?.not ? { not: true } : {}),\n },\n })\n}\n\nexport function repeat(\n collectionPath: string,\n itemName: string = 'item',\n options?: { indexName?: string; limit?: number; sortBy?: { path: string; direction?: 'asc' | 'desc' } },\n): NodeModifier {\n return (node) => ({\n ...node,\n $repeat: {\n collection: { from: collectionPath, pick: 'collection' },\n itemName,\n ...(options?.indexName ? { indexName: options.indexName } : {}),\n ...(options?.limit ? { limit: options.limit } : {}),\n ...(options?.sortBy\n ? { sortBy: { path: options.sortBy.path, direction: options.sortBy.direction ?? 'asc' } }\n : {}),\n },\n })\n}\n\nexport function props(extra: Record<string, unknown>): NodeModifier {\n // Validate that reserved keys aren't being injected via the modifier\n validateProps(extra, 'props() modifier')\n\n return (node) => ({\n ...node,\n props: { ...(node.props ?? {}), ...extra },\n })\n}\n\ntype AccordionListOptions = {\n collection: string\n itemName?: string\n indexName?: string\n accordionProps?: NodeProps | null\n itemProps?: NodeProps | null\n triggerFrom: string\n contentFrom?: string\n valueFrom?: string | null\n}\n\nexport function accordionList(\n {\n collection,\n itemName = 'item',\n indexName,\n accordionProps = null,\n itemProps = null,\n triggerFrom,\n contentFrom,\n valueFrom,\n }: AccordionListOptions,\n ...mods: NodeModifier[]\n) {\n const resolvedIndexName = indexName ?? `${itemName}Index`\n const resolvedValuePath = valueFrom === null ? null : (valueFrom ?? resolvedIndexName)\n\n const baseItemProps: Record<string, unknown> = {\n ...(itemProps ?? {}),\n trigger: { $bind: { from: triggerFrom } },\n }\n\n if (contentFrom) {\n baseItemProps.content = { $bind: { from: contentFrom } }\n }\n\n if (resolvedValuePath) {\n baseItemProps.value = { $bind: { from: resolvedValuePath } }\n }\n\n return accordion(\n accordionProps ?? undefined,\n [\n accordionItem(\n baseItemProps,\n undefined,\n repeat(collection, itemName, { indexName: resolvedIndexName }),\n ),\n ],\n ...mods,\n )\n}\n\n// Dev-time validation against NodeSchema\nfunction devValidate(node: NodeDefinition): NodeDefinition {\n try {\n if (isDevEnvironment()) {\n const res = NodeSchema.safeParse(node)\n if (!res.success) {\n console.warn('[blocks:builder] Invalid node produced by builder', res.error.format())\n }\n }\n } catch {\n // noop: avoid crashing if zod or env is unavailable in certain runtimes\n }\n return node\n}\n","import { el, media, when, bind } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n/**\n * Options for customizing the appearance of background layers.\n */\nexport type BackgroundLayerOptions = {\n /**\n * CSS class applied to the color/gradient layer container.\n * This layer renders solid colors and gradients.\n *\n * @default 'absolute inset-0 -z-10 h-full w-full pointer-events-none'\n */\n styleClassName?: string\n\n /**\n * Base CSS classes applied to the background image element.\n * This layer renders background images with dynamic positioning based on scale.\n *\n * Note: Do NOT include positioning (inset-0), sizing (h-full w-full), object-fit, or opacity.\n * Those properties are applied dynamically via transforms:\n * - Positioning/sizing: background.resolveImageClassName (based on scale)\n * - Visual properties: background.resolveImageStyle (object-fit, opacity, width/height)\n *\n * @default 'absolute -z-10'\n */\n imageClassName?: string\n}\n\n/**\n * Creates a pair of background layer nodes for rendering backgrounds from field data.\n *\n * This helper generates two nodes:\n * 1. A style layer (div) that renders solid colors and gradients\n * 2. An image layer that conditionally renders background images\n *\n * The layers are designed to be placed behind content (z-index -10) and work\n * with data from `sectionStylesField`, `containerStylesField`, or `cardStylesField`.\n *\n * @param path - The data path to the background field (e.g., '_sectionStyles.background')\n * @param options - Optional customization for layer appearance\n * @returns Array of two NodeDefinition objects: [styleLayer, imageLayer]\n *\n * @example\n * // Basic usage in a block\n * const heroBackgroundNodes = backgroundLayer('_sectionStyles.background')\n *\n * @example\n * // Custom styling\n * const customBackgroundNodes = backgroundLayer('_sectionStyles.background', {\n * imageClassName: 'absolute inset-0 -z-10 h-full w-full object-cover opacity-30'\n * })\n *\n * @example\n * // In a block layout\n * const layout = section(\n * { background: 'background/base' },\n * [\n * ...backgroundLayer('_sectionStyles.background'),\n * sectionContainer([])\n * ]\n * )\n */\nexport function backgroundLayer(\n path: string,\n options: BackgroundLayerOptions = {},\n): NodeDefinition[] {\n const {\n styleClassName = 'absolute inset-0 -z-10 h-full w-full pointer-events-none',\n imageClassName,\n } = options\n\n const styleLayer = el('div', {\n className: { $bind: { from: path, transforms: [{ id: 'background.resolveClass', options: { baseClass: styleClassName } }] } },\n style: { $bind: { from: path, transforms: [{ id: 'background.resolveStyle' }] } },\n })\n\n const imageLayer = createBackgroundImageNode(path, imageClassName)\n\n return [styleLayer, imageLayer]\n}\n\n/**\n * Creates a media node for rendering a background image with conditional rendering.\n *\n * This helper creates a media element that:\n * - Only renders when the image path has a value (via `when` modifier)\n * - Binds to the image data at the specified path (via `bind` modifier)\n * - Applies the provided CSS class for positioning and styling\n * - Applies advanced image options (object-fit, object-position, opacity) via transform\n *\n * Used internally by `backgroundLayer()` but can be used independently for custom layouts.\n *\n * @param path - The data path to the background field (e.g., '_sectionStyles.background')\n * @param className - CSS class for the image element\n * @returns A media NodeDefinition with conditional rendering and data binding\n *\n * @example\n * // Standalone usage\n * const imageNode = createBackgroundImageNode('_sectionStyles.background')\n *\n * @example\n * // Custom styling\n * const imageNode = createBackgroundImageNode(\n * '_sectionStyles.background',\n * 'absolute inset-0 h-full w-full'\n * )\n */\nexport function createBackgroundImageNode(\n path: string,\n baseClassName: string = 'absolute -z-10',\n): NodeDefinition {\n const imagePath = `${path}.image`\n\n // Note: Visual properties (object-fit, opacity, scale) are applied dynamically.\n // className: Resolved via background.resolveImageClassName based on scale\n // style: Resolved via background.resolveImageStyle for object-fit, opacity, width/height\n return media(\n {\n className: {\n $bind: {\n from: path,\n transforms: [{\n id: 'background.resolveImageClassName',\n options: { baseClass: `background-image ${baseClassName}` }\n }]\n }\n },\n style: {\n $bind: {\n from: path,\n transforms: [{ id: 'background.resolveImageStyle' }],\n },\n },\n },\n when(imagePath),\n bind(imagePath),\n )\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * Theme color tokens support three formats:\n *\n * 1. Semantic/palette tokens: 'text', 'surface', 'primary', 'mutedText', 'neutral-900', etc.\n * These resolve to CSS variables like `var(--tb-primary)`\n *\n * 2. Tokens with opacity: 'surface/95', 'primary/50', 'border/20'\n * Format: `{token}/{opacity%}`\n * These resolve to rgba with the specified opacity (e.g., `rgba(var(--tb-surface), 0.95)`)\n *\n * 3. Raw CSS values: 'raw:transparent', 'raw:#ffffff', 'raw:rgba(255, 0, 0, 0.5)'\n * Format: `raw:{css-value}`\n * These bypass the CSS variable system and output the literal value\n *\n * @example\n * // Semantic token\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n *\n * @example\n * // Token with opacity\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n *\n * @example\n * // Raw value\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\ntype ThemeColorToken = string;\n\ntype ParsedToken = {\n token: string;\n alpha?: number;\n raw?: string;\n};\n\nconst COLOR_VAR_PREFIX = '--tb-';\n\nfunction parseToken(source: ThemeColorToken): ParsedToken {\n if (source.startsWith('raw:')) {\n return { token: source, raw: source.slice(4) };\n }\n if (source.includes('/')) {\n const [token, opacity] = source.split('/');\n const alpha = Number(opacity) / 100;\n if (!Number.isNaN(alpha) && token) {\n return { token, alpha };\n }\n return { token: source };\n }\n return { token: source };\n}\n\n/**\n * Converts a theme color token to a CSS rgb/rgba value.\n * This is the primary function for applying theme colors to CSS properties.\n *\n * @param token - Theme color token (semantic, with opacity, or raw)\n * @returns CSS color value (rgb, rgba, or raw CSS value)\n *\n * @example\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\nexport function rgbColorValue(token: ThemeColorToken): string {\n const { token: baseToken, alpha, raw } = parseToken(token);\n if (raw) {\n return raw;\n }\n const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;\n if (alpha === undefined) {\n return `rgb(var(${cssVar}))`;\n }\n return `rgba(var(${cssVar}), ${alpha})`;\n}\n\n/**\n * Converts a theme color token to a CSS variable reference.\n * Note: This returns the base variable without rgb() wrapper, ignoring opacity.\n *\n * @param token - Theme color token\n * @returns CSS variable reference\n *\n * @example\n * cssVarValue('primary') // => 'var(--tb-primary)'\n * cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)\n */\nexport function cssVarValue(token: ThemeColorToken): string {\n const { token: baseToken } = parseToken(token);\n return `var(${COLOR_VAR_PREFIX}${baseToken})`;\n}\n\n/**\n * Creates a backgroundColor style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with backgroundColor\n */\nexport function backgroundColorStyle(token: ThemeColorToken): CSSProperties {\n return { backgroundColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a text color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with color\n */\nexport function textColorStyle(token: ThemeColorToken): CSSProperties {\n return { color: rgbColorValue(token) };\n}\n\n/**\n * Creates a border color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with borderColor\n */\nexport function borderColorStyle(token: ThemeColorToken): CSSProperties {\n return { borderColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a linear gradient background from theme tokens.\n *\n * @param tokens - Array of theme color tokens for gradient stops\n * @param direction - CSS gradient direction (default: 'to bottom')\n * @returns CSSProperties with backgroundImage\n *\n * @example\n * gradientBackgroundStyle(['primary', 'secondary'])\n * // => { backgroundImage: 'linear-gradient(to bottom, rgb(var(--tb-primary)), rgb(var(--tb-secondary)))' }\n *\n * @example\n * gradientBackgroundStyle(['primary/80', 'secondary/60'], '45deg')\n * // => { backgroundImage: 'linear-gradient(45deg, rgba(var(--tb-primary), 0.8), rgba(var(--tb-secondary), 0.6))' }\n */\nexport function gradientBackgroundStyle(\n tokens: ThemeColorToken[],\n direction: string = 'to bottom',\n): CSSProperties {\n const stops = tokens.map((stop) => rgbColorValue(stop)).join(', ');\n return { backgroundImage: `linear-gradient(${direction}, ${stops})` };\n}\n\n/**\n * Creates a Tailwind ring color style object from a theme token.\n * Used for focus ring styling with Tailwind's ring utilities.\n *\n * @param token - Theme color token\n * @returns CSSProperties with --tw-ring-color CSS variable\n */\nexport function ringColorStyle(token: ThemeColorToken): CSSProperties {\n return { '--tw-ring-color': rgbColorValue(token) } as CSSProperties;\n}\n\n/**\n * Merges multiple CSSProperties objects into a single object.\n * Later styles override earlier ones. Undefined values are filtered out.\n * Returns undefined if the merged result is empty.\n *\n * @param styles - Variable number of CSSProperties objects (can be undefined)\n * @returns Merged CSSProperties object, or undefined if empty\n *\n * @example\n * mergeStyles(\n * backgroundColorStyle('surface'),\n * textColorStyle('text'),\n * borderColorStyle('border')\n * )\n * // => { backgroundColor: '...', color: '...', borderColor: '...' }\n */\nexport function mergeStyles(...styles: Array<CSSProperties | undefined>): CSSProperties | undefined {\n const merged = styles.filter(Boolean).reduce<CSSProperties>((acc, style) => Object.assign(acc, style!), {});\n return Object.keys(merged).length ? merged : undefined;\n}\n\n","import { stack, text, when, bind } from '../builder'\nimport type { NodeDefinition } from '../schema'\nimport { textColorStyle } from '../../../theme/utils/colorStyles'\n\nexport function headingGroup(opts: {\n eyebrowPath?: string\n titlePath: string\n containerClass?: string\n className?: string\n eyebrowClass?: string\n titleClass?: string\n eyebrowStyle?: Record<string, unknown>\n titleStyle?: Record<string, unknown>\n}): NodeDefinition {\n const {\n eyebrowPath,\n titlePath,\n containerClass = 'text-center',\n className,\n eyebrowClass = 'heading-eyebrow text-sm font-semibold tracking-wide',\n // h2 now gets size/weight from theme typography CSS\n titleClass = 'heading-title',\n eyebrowStyle = textColorStyle('neutral-500'),\n titleStyle = textColorStyle('neutral-900'),\n } = opts\n\n const finalContainerClass = className ? `${containerClass} ${className}` : containerClass\n\n return stack({ gap: 'sm', className: finalContainerClass }, [\n eyebrowPath ? text({ as: 'p', className: eyebrowClass, style: eyebrowStyle }, when(eyebrowPath), bind(eyebrowPath)) : null,\n text({ as: 'h2', className: titleClass, style: titleStyle }, bind(titlePath)),\n ])\n}\n","import { stack } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n/**\n * Creates a centered container with responsive max-width.\n *\n * By default, uses Tailwind's responsive `container` class which provides:\n * - sm: max-w-640px\n * - md: max-w-768px\n * - lg: max-w-1024px\n * - xl: max-w-1280px\n * - 2xl: max-w-1536px\n *\n * When `bindFrom` points to _containerStyles with fullWidth=true, switches to `w-full`\n * for edge-to-edge content without horizontal constraints.\n *\n * @param children - Child nodes to render inside container\n * @param opts - Configuration options\n * @param opts.gap - Vertical spacing between children (default: 'md')\n * @param opts.align - Horizontal alignment (default: undefined)\n * @param opts.className - Additional static classes\n * @param opts.bindFrom - Data path for container styles (default: '_containerStyles')\n * @returns A stack NodeDefinition configured as a responsive container\n */\nexport function sectionContainer(\n children: Array<NodeDefinition | null | undefined>,\n opts?: {\n gap?: 'sm' | 'md' | 'lg' | 'xl'\n align?: 'start' | 'center' | 'end'\n className?: string\n bindFrom?: string\n },\n): NodeDefinition {\n const gap = opts?.gap ?? 'md'\n const align = opts?.align\n const bindFrom = opts?.bindFrom ?? '_containerStyles'\n const additionalClasses = opts?.className ?? ''\n\n return stack(\n {\n gap,\n className: {\n $bind: {\n from: bindFrom,\n transforms: [\n {\n id: 'containerStyles.resolveClassName',\n options: { baseClass: additionalClasses },\n },\n ],\n fallback: additionalClasses ? `container mx-auto ${additionalClasses}` : 'container mx-auto',\n },\n },\n ...(align ? { align } : {}),\n },\n children,\n )\n}\n\n","/**\n * Type-safe spacing system for sections and containers.\n *\n * This module provides:\n * - Semantic spacing values (none, compact, cozy, medium, comfortable, spacious)\n * - Type-safe mappings to Tailwind CSS classes\n * - Runtime validation via type guards\n * - Separate handling for section (vertical) vs container (all-sides) spacing\n *\n * Type Safety Guarantees:\n * - Type is derived from data (single source of truth)\n * - Maps are validated for completeness at compile time\n * - Runtime validation available via isSemanticSpacing()\n */\n\n/**\n * Single source of truth for semantic spacing values.\n * The SemanticSpacing type is derived from this array to ensure they stay in sync.\n *\n * Adding a new spacing value:\n * 1. Add it to this array\n * 2. TypeScript will error until you update both spacing maps\n * 3. No way to get out of sync\n */\nconst SEMANTIC_SPACING_VALUES = [\n 'none', // No padding\n 'compact', // Minimal padding\n 'cozy', // Small but comfortable\n 'medium', // Standard spacing (default for most blocks)\n 'comfortable', // Generous spacing\n 'spacious', // Maximum spacing\n] as const;\n\n/**\n * Semantic spacing values used across the block system.\n * These abstract away the specific CSS classes and provide a consistent vocabulary.\n *\n * This type is derived from SEMANTIC_SPACING_VALUES to ensure compile-time safety.\n */\nexport type SemanticSpacing = typeof SEMANTIC_SPACING_VALUES[number];\n\n/**\n * Runtime type guard for validating spacing values.\n * Use this at system boundaries where data enters from external sources.\n *\n * @param value - Unknown value to validate\n * @returns true if value is a valid SemanticSpacing, with type narrowing\n *\n * @example\n * const userInput = 'medium';\n * if (isSemanticSpacing(userInput)) {\n * // TypeScript knows userInput is SemanticSpacing here\n * const classes = resolveSpacing(userInput, 'y');\n * }\n */\nexport function isSemanticSpacing(value: unknown): value is SemanticSpacing {\n return typeof value === 'string' &&\n (SEMANTIC_SPACING_VALUES as readonly string[]).includes(value);\n}\n\n/**\n * Spacing axis determines which sides receive padding.\n * - 'y': Vertical only (py-*) - used for sections\n * - 'all': All sides (p-*) - used for containers/cards\n */\nexport type SpacingAxis = 'y' | 'all';\n\n/**\n * Type-safe mapping from semantic spacing to Tailwind classes for sections (y-axis).\n *\n * Sections use vertical padding only to control spacing between blocks.\n * Horizontal padding (px-6) is handled separately via baseClass.\n *\n * The `satisfies` operator ensures all SemanticSpacing values are present at compile time.\n * TypeScript will error if any spacing value is missing or if extra keys exist.\n */\nexport const SECTION_SPACING_MAP = {\n none: 'py-0',\n compact: 'py-6 sm:py-8',\n cozy: 'py-10 sm:py-14',\n medium: 'py-12 sm:py-16',\n comfortable: 'py-16 sm:py-20',\n spacious: 'py-20 sm:py-28',\n} as const satisfies Record<SemanticSpacing, string>;\n\n/**\n * Type-safe mapping from semantic spacing to Tailwind classes for containers (all sides).\n *\n * Containers use padding on all sides for internal content spacing.\n *\n * The `satisfies` operator ensures all SemanticSpacing values are present at compile time.\n */\nexport const CONTAINER_SPACING_MAP = {\n none: 'p-0',\n compact: 'p-4 sm:p-6',\n cozy: 'p-6 sm:p-8',\n medium: 'p-6 sm:p-8',\n comfortable: 'p-8 sm:p-10',\n spacious: 'p-10 sm:p-14',\n} as const satisfies Record<SemanticSpacing, string>;\n\n/**\n * Resolve semantic spacing to CSS classes based on axis.\n *\n * This function guarantees that valid SemanticSpacing values always return a result.\n * Since spacing is typed, there's no need for fallback logic.\n *\n * @param spacing - Semantic spacing value (validated at compile time)\n * @param axis - Which axis to apply padding ('y' for sections, 'all' for containers)\n * @returns Tailwind CSS class string\n *\n * @example\n * resolveSpacing('medium', 'y') // => 'py-12 sm:py-16'\n * resolveSpacing('medium', 'all') // => 'p-6 sm:p-8'\n * resolveSpacing('compact') // => 'py-6 sm:py-8' (defaults to 'y' axis)\n */\nexport function resolveSpacing(spacing: SemanticSpacing, axis: SpacingAxis = 'y'): string {\n const map = axis === 'y' ? SECTION_SPACING_MAP : CONTAINER_SPACING_MAP;\n return map[spacing];\n}\n\n/**\n * Resolve semantic spacing to section CSS classes (vertical padding only).\n * More explicit alternative to resolveSpacing(spacing, 'y').\n *\n * @param spacing - Semantic spacing value\n * @returns Tailwind CSS class string for vertical padding (py-*)\n *\n * @example\n * resolveSectionSpacing('medium') // => 'py-12 sm:py-16'\n */\nexport function resolveSectionSpacing(spacing: SemanticSpacing): string {\n return SECTION_SPACING_MAP[spacing];\n}\n\n/**\n * Resolve semantic spacing to container CSS classes (all-sides padding).\n * More explicit alternative to resolveSpacing(spacing, 'all').\n *\n * @param spacing - Semantic spacing value\n * @returns Tailwind CSS class string for all-sides padding (p-*)\n *\n * @example\n * resolveContainerSpacing('medium') // => 'p-6 sm:p-8'\n */\nexport function resolveContainerSpacing(spacing: SemanticSpacing): string {\n return CONTAINER_SPACING_MAP[spacing];\n}\n\n/**\n * Default spacing value for sections when not explicitly configured.\n */\nexport const DEFAULT_SECTION_SPACING: SemanticSpacing = 'medium';\n\n/**\n * Default spacing value for containers when not explicitly configured.\n */\nexport const DEFAULT_CONTAINER_SPACING: SemanticSpacing = 'medium';\n","import type { NodeDefinition } from '../schema';\nimport { section } from '../builder';\nimport { backgroundLayer } from './backgroundLayer';\nimport type { SemanticSpacing } from '../../spacing';\nimport { DEFAULT_SECTION_SPACING } from '../../spacing';\n\n/**\n * Configuration for creating a styled section with background support.\n */\nexport type StyledSectionConfig = {\n /**\n * Content nodes to render inside the section.\n * Can be a single node, array of nodes, or empty array.\n */\n children: NodeDefinition | NodeDefinition[];\n\n /**\n * Base horizontal padding class (e.g., 'px-6', 'px-8').\n * This provides consistent horizontal constraints across sections.\n * Removed when fullWidth is enabled in _containerStyles.\n * @default 'px-6'\n */\n baseClass?: string;\n\n /**\n * Semantic vertical spacing value for the section.\n * Uses semantic values (none, compact, cozy, medium, comfortable, spacious)\n * which are transformed to responsive Tailwind classes.\n *\n * @default 'medium' (resolves to 'py-12 sm:py-16')\n */\n spacing?: SemanticSpacing;\n\n /**\n * Theme background token to apply.\n * @default 'background/base'\n */\n background?: string;\n\n /**\n * Path to the section styles data in the content (e.g., '_sectionStyles').\n * This path is used for binding className, allowOverflow, and background layers.\n * @default '_sectionStyles'\n */\n bindFrom?: string;\n\n /**\n * CSS class to apply to background image layer.\n * @default 'absolute -z-10'\n */\n imageClassName?: string;\n};\n\n/**\n * Create a styled section with automatic background layer and spacing bindings.\n *\n * This helper encapsulates the common pattern of:\n * - Creating a section wrapper with background theme\n * - Adding background color/gradient/image layers\n * - Binding className to section styles with transform\n * - Binding allowOverflow for background positioning\n * - Wrapping content children\n *\n * Use this helper to eliminate 25+ lines of boilerplate section setup code.\n *\n * @example\n * // Basic usage with default spacing\n * const layout = styledSection({\n * children: sectionContainer(contentNodes, { gap: 'md' }),\n * });\n *\n * @example\n * // Custom spacing and base padding\n * const compactLayout = styledSection({\n * children: sectionContainer(contentNodes, { gap: 'sm' }),\n * baseClass: 'px-8',\n * spacing: 'py-6 sm:py-8',\n * });\n *\n * @example\n * // Multiple children\n * const layout = styledSection({\n * children: [\n * heading({ text: 'Title' }),\n * sectionContainer(contentNodes, { gap: 'md' }),\n * ],\n * });\n *\n * @example\n * // Custom binding path (for nested sections)\n * const nestedSection = styledSection({\n * children: content,\n * bindFrom: 'container.styles',\n * });\n */\nexport function styledSection(config: StyledSectionConfig): NodeDefinition {\n const {\n children,\n baseClass = 'px-6',\n spacing = DEFAULT_SECTION_SPACING,\n background = 'background/base',\n bindFrom = '_sectionStyles',\n imageClassName = 'absolute -z-10',\n } = config;\n\n // Create background layers (color/gradient + image)\n const backgroundNodes = backgroundLayer(`${bindFrom}.background`, {\n imageClassName,\n });\n\n // Normalize children to array\n const childrenArray = Array.isArray(children) ? children : [children];\n\n // Create section with background, className binding, and allowOverflow binding\n return section(\n {\n background,\n className: {\n $bind: {\n from: bindFrom,\n transforms: [\n {\n id: 'sectionStyles.resolveClassName',\n options: { baseClass, defaultSpacing: spacing },\n },\n ],\n // No fallback needed - transform handles all cases via defaultSpacing\n },\n },\n allowOverflow: {\n $bind: {\n from: `${bindFrom}.background.overflow`,\n fallback: false,\n },\n },\n },\n [\n ...backgroundNodes,\n ...childrenArray,\n ],\n );\n}\n","import { button, media, text, bind, when, repeat } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n// Single CTA button primitive.\n// - Uses ui.buttonClass transform to resolve classes from `variant`\n// - Accepts optional icons and when-path\n// - Can optionally repeat over a collection when `repeatFrom` is provided\nexport function ctaButton(opts?: {\n basePath?: string\n linkPath?: string\n labelPath?: string\n variantPath?: string\n iconLeftPath?: string\n iconRightPath?: string\n whenPath?: string\n repeatFrom?: { collectionPath: string; itemName?: string }\n className?: string\n}): NodeDefinition {\n const base = opts?.basePath ?? 'cta'\n const linkPath = opts?.linkPath ?? `${base}.link`\n const labelPath = opts?.labelPath ?? `${base}.label`\n const variantPath = opts?.variantPath ?? `${base}.variant`\n const iconLeftPath = opts?.iconLeftPath ?? `${base}.iconLeft`\n const iconRightPath = opts?.iconRightPath ?? `${base}.iconRight`\n const whenPath = opts?.whenPath ?? labelPath\n\n const leftIcon = media({ className: 'mr-2 h-4 w-4 inline-block' }, when(iconLeftPath), bind(iconLeftPath))\n const rightIcon = media({ className: 'ml-2 h-4 w-4 inline-block' }, when(iconRightPath), bind(iconRightPath))\n const label = text({ as: 'span' }, bind(labelPath))\n\n // Build className object with $bind and $prepend, optionally $append\n const classNameObj: any = {\n $bind: {\n from: variantPath,\n fallback: 'primary',\n },\n $prepend: 'button-',\n };\n\n if (opts?.className) {\n classNameObj.$append = ` ${opts.className}`;\n }\n\n const node = button(\n {\n className: classNameObj,\n href: { $bind: { from: linkPath, transforms: [{ id: 'links.resolve' }], fallback: '#' } },\n },\n [leftIcon, label, rightIcon],\n )\n\n // Apply repeat to the node if requested\n if (opts?.repeatFrom) {\n return button(\n node.props ?? {},\n node.children as any,\n repeat(opts.repeatFrom.collectionPath, opts.repeatFrom.itemName ?? base),\n )\n }\n return button(node.props ?? {}, node.children as any, when(whenPath))\n}\n","import { inline, when } from '../builder'\nimport type { NodeDefinition } from '../schema'\nimport { ctaButton } from './ctaButton'\n\n// Renders a single inline container whose children are the repeated CTA buttons.\n// Button styling uses theme-friendly Tailwind utility classes (mapped to CSS vars),\n// selected by a simple transform keyed by `variant`.\nexport function ctaRow(opts?: {\n collectionPath?: string\n itemName?: string\n gap?: 'sm' | 'md' | 'lg'\n justify?: 'start' | 'center' | 'end'\n containerClassName?: string\n}): NodeDefinition {\n const collectionPath = opts?.collectionPath ?? 'content.ctas'\n const item = opts?.itemName ?? 'cta'\n const gap = opts?.gap ?? 'sm'\n const justify = opts?.justify ?? 'center'\n const containerClassName = ['cta-row flex-wrap', opts?.containerClassName].filter(Boolean).join(' ')\n\n return inline(\n { gap, justify, className: containerClassName },\n [\n ctaButton({ basePath: item, repeatFrom: { collectionPath, itemName: item } }),\n ],\n when(collectionPath),\n )\n}\n","import { bind, inline, link, repeat, text, when } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\nexport function navRow(opts?: {\n collectionPath?: string\n itemName?: string\n gap?: 'sm' | 'md' | 'lg'\n align?: 'start' | 'center' | 'end'\n className?: string\n linkClassName?: string | Record<string, unknown>\n}): NodeDefinition {\n const collectionPath = opts?.collectionPath ?? 'menu.items'\n const itemName = opts?.itemName ?? 'navItem'\n const gap = opts?.gap ?? 'md'\n const align = opts?.align ?? 'end'\n const className = ['items-center flex-wrap', opts?.className].filter(Boolean).join(' ').trim()\n\n const linkClassName = opts?.linkClassName ?? 'header-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard'\n\n const links = link(\n {\n className: linkClassName,\n href: { $bind: { from: `${itemName}.link`, transforms: [{ id: 'links.resolve' }], fallback: '#' } },\n target: { $bind: { from: `${itemName}.target` } },\n rel: { $bind: { from: `${itemName}.rel` } },\n 'data-active': { $bind: { from: `${itemName}.active` } },\n },\n [text({ as: 'span' }, bind(`${itemName}.label`))],\n repeat(collectionPath, itemName),\n )\n\n return inline(\n { gap, align, className },\n [links],\n when(collectionPath),\n )\n}\n","import { z } from \"zod\";\n\nimport { fieldSchema, type FieldDefinition } from \"../manifest/schema\";\nimport {\n NodeSchema,\n type NodeDefinition,\n type Binding,\n type RepeatConfig,\n type ConditionConfig,\n type DataScope,\n} from \"../node\";\n\nconst FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;\nconst FIELD_ID_PATTERN = /^[a-z][a-zA-Z0-9_-]*$/;\n\nconst dataLoaderSchema = z.object({\n endpoint: z.string().min(1, \"Fragment data loader requires an endpoint\"),\n params: z.record(z.string(), z.unknown()).default({}),\n mode: z.enum([\"server\", \"client\"]).default(\"server\"),\n});\n\nconst fragmentDataSchema = z.object({\n key: z.string().min(1, \"Fragment data key is required\"),\n loader: dataLoaderSchema.optional(),\n});\n\nexport type FragmentDataConfig = z.output<typeof fragmentDataSchema>;\n\nconst fragmentConfigSchema = z.object({\n id: z\n .string()\n .min(1, \"Fragment id is required\")\n .regex(FRAGMENT_ID_PATTERN, \"Fragment id must be alphanumeric with optional . _ - separators\"),\n title: z.string().optional(),\n description: z.string().optional(),\n category: z.enum([\"content\", \"media\", \"interactive\", \"layout\"]).optional(),\n icon: z.string().optional(),\n fields: fieldSchema.array().default([]),\n layout: z\n .union([NodeSchema, NodeSchema.array()])\n .transform((value): NodeDefinition[] => (Array.isArray(value) ? value : [value])),\n data: fragmentDataSchema.optional(),\n}) as any;\n\nexport type FragmentConfig = z.input<typeof fragmentConfigSchema>;\nexport type FragmentDefinition = z.output<typeof fragmentConfigSchema>;\n\nexport class FragmentConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FragmentConfigError\";\n }\n}\n\nexport function defineFragment(config: FragmentConfig): FragmentDefinition {\n const parsed = fragmentConfigSchema.parse(config);\n\n validateFieldDefinitions(parsed.fields as FieldDefinition[], parsed.id);\n\n return {\n ...parsed,\n fields: (parsed.fields as FieldDefinition[]).map(cloneFieldDefinition as (field: any) => FieldDefinition),\n layout: parsed.layout.map((node: any) => ({ ...node })),\n };\n}\n\nexport function scopeFragmentFields(fragment: FragmentDefinition, scope: string): FieldDefinition[] {\n const normalizedScope = scope.trim();\n if (!normalizedScope) {\n return fragment.fields.map(cloneFieldDefinition as (field: any) => FieldDefinition);\n }\n return fragment.fields.map((field: any) => prefixFieldId(field, normalizedScope));\n}\n\nexport function scopeFragmentLayout(fragment: FragmentDefinition, scope: string): NodeDefinition[] {\n const normalizedScope = scope.trim();\n return fragment.layout.map((node: any) => cloneAndScopeNode(node, normalizedScope));\n}\n\nfunction validateFieldDefinitions(fields: FieldDefinition[], fragmentId: string): void {\n const seen = new Set<string>();\n\n for (const field of fields) {\n if (field.id.includes(\".\")) {\n throw new FragmentConfigError(\n `Field \"${field.id}\" in fragment \"${fragmentId}\" should not include dot notation; the builder scopes fields automatically.`,\n );\n }\n if (!FIELD_ID_PATTERN.test(field.id)) {\n throw new FragmentConfigError(\n `Field \"${field.id}\" in fragment \"${fragmentId}\" must start with a letter and contain only alphanumeric, \"_\", or \"-\".`,\n );\n }\n if (seen.has(field.id)) {\n throw new FragmentConfigError(\n `Duplicate field id \"${field.id}\" found in fragment \"${fragmentId}\". Field ids must be unique per fragment.`,\n );\n }\n seen.add(field.id);\n }\n}\n\nfunction prefixFieldId(field: FieldDefinition, scope: string): FieldDefinition {\n const cloned = cloneFieldDefinition(field);\n cloned.id = `${scope}.${field.id}`;\n\n cloned.defaultValue = cloneUnknown(cloned.defaultValue);\n cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : undefined;\n cloned.ui = cloneUnknown(cloned.ui);\n\n return cloned;\n}\n\nfunction cloneFieldDefinition(field: FieldDefinition): FieldDefinition {\n switch (field.type) {\n case \"repeater\":\n if (field.polymorphic && field.itemTypes) {\n // Polymorphic repeater: clone itemTypes\n return {\n ...field,\n polymorphic: true as const,\n itemTypes: Object.fromEntries(\n Object.entries(field.itemTypes).map(([key, itemType]) => [\n key,\n {\n ...itemType,\n fields: itemType.fields.map(cloneFieldDefinition),\n },\n ])\n ),\n } as FieldDefinition;\n } else if (field.schema) {\n // Monomorphic repeater: clone schema\n return {\n ...field,\n schema: {\n fields: field.schema.fields.map(cloneFieldDefinition),\n },\n } as FieldDefinition;\n }\n // Fallback (shouldn't happen due to XOR validation)\n return { ...field } as FieldDefinition;\n case \"group\":\n return {\n ...field,\n schema: {\n fields: field.schema.fields.map(cloneFieldDefinition),\n },\n };\n default:\n return { ...field };\n }\n}\n\nfunction cloneUnknown<T>(value: T): T {\n if (value == null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((entry: unknown) => cloneUnknown(entry)) as T;\n }\n return { ...(value as Record<string, unknown>) } as T;\n}\n\nfunction cloneAndScopeNode(node: NodeDefinition, scope: string): NodeDefinition {\n const cloned: NodeDefinition = {\n ...node,\n };\n\n if (node.children) {\n cloned.children = node.children.map((child: NodeDefinition) => cloneAndScopeNode(child, scope));\n }\n\n if (node.props) {\n cloned.props = scopePropBindings(node.props, scope);\n }\n\n if (node.$bind) {\n cloned.$bind = scopeBinding(node.$bind, scope);\n }\n\n if (node.$repeat) {\n cloned.$repeat = scopeRepeat(node.$repeat, scope);\n }\n\n if (node.$when) {\n cloned.$when = scopeCondition(node.$when, scope);\n }\n\n if (node.$scopes) {\n cloned.$scopes = node.$scopes.map((entry: DataScope) => ({\n name: entry.name,\n from: scopeBinding(entry.from, scope),\n }));\n }\n\n return cloned;\n}\n\nfunction scopeBinding(binding: Binding, scope: string): Binding {\n const cloned: Binding = {\n ...binding,\n transforms: binding.transforms?.map(\n (step: { id: string; options?: Record<string, unknown> }) => ({ ...step }),\n ) ?? [],\n };\n\n cloned.from = scopeContentPath(binding.from, scope);\n\n return cloned;\n}\n\nfunction scopeRepeat(repeat: RepeatConfig, scope: string): RepeatConfig {\n const cloned: RepeatConfig = {\n ...repeat,\n collection: scopeBinding(repeat.collection, scope),\n };\n\n if (repeat.sortBy) {\n cloned.sortBy = {\n ...repeat.sortBy,\n path: scopeContentPath(repeat.sortBy.path, scope),\n };\n }\n\n return cloned;\n}\n\nfunction scopeCondition(condition: ConditionConfig, scope: string): ConditionConfig {\n return {\n ...condition,\n when: scopeBinding(condition.when, scope),\n };\n}\n\nfunction scopePropBindings(input: Record<string, unknown>, scope: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = scopePropValue(value, scope);\n }\n return result;\n}\n\nfunction scopePropValue(value: unknown, scope: string): unknown {\n if (Array.isArray(value)) {\n return value.map((entry: unknown) => scopePropValue(entry, scope));\n }\n if (value && typeof value === \"object\") {\n if (\"$bind\" in (value as Record<string, unknown>)) {\n const bindingConfig = (value as { $bind: Binding }).$bind;\n return {\n $bind: scopeBinding(bindingConfig, scope),\n };\n }\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n result[key] = scopePropValue(entry, scope);\n }\n return result;\n }\n return value;\n}\n\nfunction scopeContentPath(path: string, scope: string): string {\n if (!scope || scope.length === 0) {\n return path;\n }\n if (path === \"content\") {\n return `content.${scope}`;\n }\n if (path.startsWith(\"content.\")) {\n const remainder = path.slice(\"content.\".length);\n return remainder.length > 0 ? `content.${scope}.${remainder}` : `content.${scope}`;\n }\n if (path.startsWith(\"content[\")) {\n return path.replace(/^content/, `content.${scope}`);\n }\n // Handle $root paths - don't scope them\n if (path.startsWith(\"$root.\")) {\n return path;\n }\n // Handle scope-qualified paths like \"item.label\" - don't rescope them\n // These are paths that reference other scopes (item, index, etc.)\n // We detect them by checking if they contain a dot (indicating scope.field pattern)\n // but don't start with content/$ root (which we handle above)\n if (path.includes('.')) {\n return path;\n }\n // Handle simple relative paths (field names without dots) - add content.scope prefix\n // e.g., \"media\" with scope \"background\" becomes \"content.background.media\"\n return `content.${scope}.${path}`;\n}\n","import type { BlockManifest } from \"../manifest\";\nimport type { FieldDefinition } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport {\n type FragmentDefinition,\n type FragmentDataConfig,\n scopeFragmentFields,\n scopeFragmentLayout,\n} from \"./types\";\n\ntype FragmentInstanceConfig = {\n fragment: FragmentDefinition;\n scope?: string;\n dataKey?: string;\n fieldPriority?: number;\n};\n\nexport type MaterializedFragment = {\n fragment: FragmentDefinition;\n scope: string;\n fields: FieldDefinition[];\n layout: NodeDefinition[];\n data?: FragmentDataConfig;\n fieldPriority: number;\n};\n\nexport type FragmentComposition = {\n fields: FieldDefinition[];\n layout: NodeDefinition[];\n data: MaterializedFragment[\"data\"][];\n scopes: string[];\n};\n\nexport type FragmentDataLoaders = Record<\n string,\n {\n endpoint: string;\n params: Record<string, unknown>;\n mode: \"server\" | \"client\";\n }\n>;\n\nexport class FragmentCompositionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FragmentCompositionError\";\n }\n}\n\nconst DOT_SCOPE_REGEX = /^[A-Za-z0-9_.-]*$/;\n\nexport function materializeFragment(config: FragmentInstanceConfig): MaterializedFragment {\n const scope = normalizeScope(config.scope);\n const fields = scopeFragmentFields(config.fragment, scope);\n const layout = scopeFragmentLayout(config.fragment, scope);\n const fieldPriority = config.fieldPriority ?? 0;\n\n let data: FragmentDataConfig | undefined;\n if (config.fragment.data) {\n const key = config.dataKey ?? config.fragment.data.key;\n if (!key || typeof key !== \"string\") {\n throw new FragmentCompositionError(\n `Fragment \"${config.fragment.id}\" requires a data key to compose.`,\n );\n }\n data = {\n key,\n loader: config.fragment.data.loader ? { ...config.fragment.data.loader } : undefined,\n };\n }\n\n return {\n fragment: config.fragment,\n scope,\n fields,\n layout,\n data,\n fieldPriority,\n };\n}\n\nexport function composeFragments(instances: FragmentInstanceConfig[]): FragmentComposition {\n type FieldEntry = {\n id: string;\n field: FieldDefinition;\n priority: number;\n order: number;\n };\n\n const fieldEntries: FieldEntry[] = [];\n const layouts: NodeDefinition[] = [];\n const dataEntries: FragmentDataConfig[] = [];\n const scopes: string[] = [];\n const seenFieldIds = new Set<string>();\n let fieldOrder = 0;\n\n for (const instance of instances) {\n const materialized = materializeFragment(instance);\n\n for (const field of materialized.fields) {\n if (seenFieldIds.has(field.id)) {\n throw new FragmentCompositionError(\n `Duplicate field id \"${field.id}\" when composing fragments.`,\n );\n }\n seenFieldIds.add(field.id);\n fieldEntries.push({\n id: field.id,\n field,\n priority: materialized.fieldPriority,\n order: fieldOrder++,\n });\n }\n\n scopes.push(materialized.scope);\n layouts.push(...materialized.layout);\n\n if (materialized.data) {\n if (dataEntries.find((entry) => entry.key === materialized.data?.key)) {\n throw new FragmentCompositionError(\n `Duplicate fragment data key \"${materialized.data.key}\" detected.`,\n );\n }\n dataEntries.push(materialized.data);\n }\n }\n\n return {\n fields: fieldEntries\n .sort((a, b) => {\n if (a.priority !== b.priority) {\n return a.priority - b.priority;\n }\n return a.order - b.order;\n })\n .map((entry) => entry.field),\n layout: layouts,\n data: dataEntries,\n scopes,\n };\n}\n\nexport function applyFragmentsToManifest(\n manifest: BlockManifest,\n composition: FragmentComposition,\n): BlockManifest {\n return {\n ...manifest,\n fields: [...composition.fields, ...(manifest.fields ?? [])],\n layout: manifest.layout ?? normalizeLayout(composition.layout),\n };\n}\n\nfunction normalizeScope(scope?: string): string {\n if (!scope) return \"\";\n const trimmed = scope.trim();\n if (!DOT_SCOPE_REGEX.test(trimmed)) {\n throw new FragmentCompositionError(\n `Fragment scope \"${scope}\" contains invalid characters. Use alphanumeric, \".\", \"-\", or \"_\".`,\n );\n }\n return trimmed;\n}\n\nfunction normalizeLayout(layout: NodeDefinition[]): NodeDefinition | NodeDefinition[] {\n if (layout.length === 0) {\n return [];\n }\n if (layout.length === 1) {\n return layout[0] as NodeDefinition;\n }\n return layout;\n}\n\nexport function buildFragmentDataLoaders(\n composition: FragmentComposition,\n): FragmentDataLoaders {\n const loaders: FragmentDataLoaders = {};\n for (const entry of composition.data) {\n if (!entry?.loader) continue;\n loaders[entry.key] = {\n endpoint: entry.loader.endpoint,\n params: { ...(entry.loader.params ?? {}) },\n mode: entry.loader.mode ?? \"server\",\n };\n }\n return loaders;\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const bodyCopyFragment: FragmentDefinition = defineFragment({\n id: \"bodyCopy\",\n title: \"Body Copy\",\n description: \"Heading, rich text body, and alignment controls.\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional heading displayed above the body copy.\",\n },\n {\n id: \"body\",\n type: \"richText\",\n label: \"Body\",\n required: true,\n },\n {\n id: \"alignment\",\n type: \"select\",\n label: \"Text alignment\",\n required: false,\n defaultValue: \"left\",\n options: [\n { value: \"left\", label: \"Left\" },\n { value: \"center\", label: \"Center\" },\n ],\n },\n ],\n layout: stack(\n {\n gap: \"md\",\n className: \"mx-auto max-w-3xl\",\n align: {\n $bind: {\n from: \"content.alignment\",\n transforms: [{ id: \"ui.stackAlignFromAlignment\" }],\n fallback: \"start\",\n },\n },\n },\n [\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n // Only dynamic class here is for text alignment\n className: {\n $bind: {\n from: \"content.alignment\",\n transforms: [\n {\n id: \"ui.headingClassFromAlignment\",\n options: {\n base: \"\",\n },\n },\n ],\n fallback: \"\",\n },\n },\n style: textColorStyle('neutral-900'),\n },\n when(\"content.heading\"),\n bind(\"content.heading\"),\n ),\n richText(\n {\n className: {\n $bind: {\n from: \"content.alignment\",\n transforms: [\n {\n id: \"ui.bodyClassFromAlignment\",\n options: {\n base: \"prose prose-lg max-w-none sm:prose-xl\",\n },\n },\n ],\n fallback:\n \"prose prose-lg max-w-none sm:prose-xl\",\n },\n style: textColorStyle('neutral-600'),\n },\n },\n bind(\"content.body\"),\n ),\n ],\n ),\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { text, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const heroCopyFragment: FragmentDefinition = defineFragment({\n id: \"heroCopy\",\n title: \"Hero Copy\",\n description: \"Eyebrow, headline, and subheadline copy for hero layouts.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Optional short line above the headline\",\n visibleRoles: [\"designer\", \"admin\"],\n },\n {\n id: \"headline\",\n type: \"text\",\n label: \"Headline\",\n required: true,\n maxLength: 120,\n },\n {\n id: \"subheadline\",\n type: \"text\",\n label: \"Subheadline\",\n multiline: true,\n maxLength: 280,\n },\n ],\n layout: [\n text(\n {\n as: \"p\",\n className: \"hero-eyebrow text-sm font-semibold tracking-wide\",\n style: textColorStyle('neutral-500'),\n },\n when(\"content.eyebrow\"),\n bind(\"content.eyebrow\"),\n ),\n text(\n {\n as: \"h1\",\n // heading-display: uses fluid typography from theme (--fs-h1-display-fluid)\n // Removes hardcoded text-4xl/5xl/6xl - size now controlled by theme\n className: \"hero-headline heading-display\",\n style: textColorStyle('neutral-900'),\n },\n bind(\"content.headline\"),\n ),\n text(\n {\n as: \"p\",\n className: \"hero-subheadline text-lg sm:text-xl\",\n style: textColorStyle('neutral-600'),\n },\n when(\"content.subheadline\"),\n bind(\"content.subheadline\"),\n ),\n ],\n});\n","import type { FieldDefinition } from '../manifest/schema'\n\ntype ButtonOptions = {\n variants?: { value: string; label: string }[]\n showGroupLabel?: boolean\n groupId?: string\n groupLabel?: string\n flattenInRepeater?: boolean\n}\n\nexport function createButtonGroup(options: ButtonOptions = {}): FieldDefinition {\n const {\n variants = [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n ],\n showGroupLabel = false,\n groupId = 'button',\n groupLabel = 'Button',\n flattenInRepeater = true,\n } = options\n\n // Main button fields: label, variant, link\n const mainFields: FieldDefinition[] = [\n {\n id: 'label',\n type: 'text',\n label: 'Label',\n required: true,\n multiline: false,\n maxLength: 40,\n ui: { row: 'primary' },\n },\n {\n id: 'variant',\n type: 'select',\n label: 'Style',\n options: variants,\n required: false,\n multiple: false,\n ui: { row: 'primary' },\n },\n {\n id: 'link',\n type: 'link',\n label: 'Link',\n required: true,\n ui: { colSpan: 2 },\n },\n ]\n\n // Icons in collapsible disclosure section\n const iconsGroup: FieldDefinition = {\n id: 'icons',\n type: 'group',\n label: 'Icons',\n required: false,\n ui: { preset: 'disclosure', colSpan: 2 },\n schema: {\n fields: [\n { id: 'iconLeft', type: 'media', label: 'Left icon', required: false, mediaKinds: ['image'] },\n { id: 'iconRight', type: 'media', label: 'Right icon', required: false, mediaKinds: ['image'] },\n ],\n },\n } as FieldDefinition\n\n return {\n id: groupId,\n type: 'group',\n label: groupLabel,\n ui: { layout: 'grid', columns: 2, flattenInRepeater, hideLabel: !showGroupLabel },\n schema: { fields: [...mainFields, iconsGroup] },\n required: false,\n } as FieldDefinition\n}\n","import type { FieldDefinition } from '../manifest/schema'\nimport { createButtonGroup } from './button'\n\ntype CtasOptions = {\n id?: string\n label?: string\n itemLabel?: string\n minItems?: number\n maxItems?: number\n}\n\nexport function createCtasRepeater(options: CtasOptions = {}): FieldDefinition {\n const {\n id = 'ctas',\n label = 'Calls to action',\n itemLabel = 'CTA',\n minItems = 0,\n maxItems,\n } = options\n\n return {\n id,\n type: 'repeater',\n label,\n itemLabel,\n itemLabelSource: 'label',\n minItems,\n maxItems,\n schema: {\n fields: [createButtonGroup({ showGroupLabel: false, flattenInRepeater: true })],\n },\n } as FieldDefinition\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { ctaRow } from \"../../node/fragments\";\nimport { createCtasRepeater } from \"../../fields/ctas\";\n\nexport const ctaRowFragment: FragmentDefinition = defineFragment({\n id: \"ctaRow\",\n title: \"CTA Row\",\n description: \"Repeatable calls to action rendered inline.\",\n fields: [createCtasRepeater({ label: \"Calls to action\", itemLabel: \"CTA\", maxItems: 3 })],\n layout: [\n ctaRow({ collectionPath: \"content.ctas\", itemName: \"cta\", justify: \"center\" }),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { headingGroup } from \"../../node/fragments\";\nimport { richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const ctaCopyFragment: FragmentDefinition = defineFragment({\n id: \"ctaCopy\",\n title: \"CTA Copy\",\n description: \"Eyebrow, title, and supporting rich text for CTA layouts.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Optional short line above the title\",\n visibleRoles: [\"designer\", \"admin\"],\n },\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: true,\n maxLength: 120,\n },\n {\n id: \"content\",\n type: \"richText\",\n label: \"Copy\",\n description: \"Short paragraph of supporting copy.\",\n },\n ],\n layout: [\n headingGroup({ eyebrowPath: \"content.eyebrow\", titlePath: \"content.title\", className: \"cta-heading\" }),\n richText(\n {\n className: \"cta-content prose prose-lg mx-auto max-w-none sm:prose-xl\",\n style: textColorStyle('neutral-700'),\n },\n when(\"content.content\"),\n bind(\"content.content\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const testimonialsHeadingFragment: FragmentDefinition = defineFragment({\n id: \"testimonialsHeading\",\n title: \"Testimonials Heading\",\n description: \"Heading and subheading copy for testimonials section.\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional block heading displayed above the testimonials.\",\n },\n {\n id: \"subheading\",\n type: \"text\",\n label: \"Description\",\n multiline: true,\n description: \"Optional supporting copy shown below the heading.\",\n },\n ],\n layout: [\n stack(\n { gap: \"md\", className: \"mx-auto max-w-2xl text-center\" },\n [\n text(\n // h2 now gets size/weight from theme typography CSS\n { as: \"h2\", style: textColorStyle('neutral-900') },\n when(\"content.heading\"),\n bind(\"content.heading\"),\n ),\n text(\n { as: \"p\", className: \"text-lg sm:text-xl\", style: textColorStyle('neutral-600') },\n when(\"content.subheading\"),\n bind(\"content.subheading\"),\n ),\n ],\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { carousel, stack, richText, bind, when, inline, media, repeat, text } from \"../../node/builder\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\nexport const testimonialsCarouselFragment: FragmentDefinition = defineFragment({\n id: \"testimonialsCarousel\",\n title: \"Testimonials Carousel\",\n description: \"Carousel layout for testimonial cards with data loader configuration.\",\n fields: [\n {\n id: \"slidesToShow\",\n type: \"select\",\n label: \"Testimonials per view\",\n defaultValue: \"1\",\n options: [\n { value: \"1\", label: \"One at a time\" },\n { value: \"2\", label: \"Two at a time\" },\n { value: \"3\", label: \"Three at a time\" },\n ],\n },\n {\n id: \"transition\",\n type: \"select\",\n label: \"Transition\",\n defaultValue: \"slide\",\n options: [\n { value: \"slide\", label: \"Slide\" },\n { value: \"fade\", label: \"Fade\" },\n ],\n },\n {\n id: \"maxEntries\",\n type: \"select\",\n label: \"Testimonials to load\",\n defaultValue: \"6\",\n options: [\n { value: \"3\", label: \"3 testimonials\" },\n { value: \"6\", label: \"6 testimonials\" },\n { value: \"9\", label: \"9 testimonials\" },\n ],\n },\n ],\n layout: [\n carousel(\n {\n className: \"mt-12\",\n slidesToShow: { $bind: { from: \"slidesToShow\", fallback: 1 } },\n transition: { $bind: { from: \"transition\", fallback: \"slide\" } },\n showControls: true,\n },\n [\n stack(\n {\n gap: \"lg\",\n className:\n \"h-full justify-between rounded-2xl border p-8 shadow-sm\",\n style: mergeStyles(\n borderColorStyle('neutral-200'),\n backgroundColorStyle('surface'),\n ),\n },\n [\n richText(\n {\n className:\n \"prose prose-lg max-w-none sm:prose-xl\",\n style: textColorStyle('neutral-700'),\n },\n bind(\"testimonial.content.body\"),\n when(\"testimonial.content.body\"),\n ),\n inline(\n { gap: \"md\", className: \"mt-6 items-center\" },\n [\n media(\n { className: \"h-12 w-12 shrink-0 rounded-full object-cover\" },\n bind(\"testimonial.content.headshot\", { transforms: [{ id: \"media.fromUrl\" }] }),\n when(\"testimonial.content.headshot\"),\n ),\n stack(\n { gap: \"xs\" },\n [\n text(\n { as: \"p\", className: \"font-semibold\", style: textColorStyle('neutral-900') },\n bind(\"testimonial.content.name\", { fallback: \"Anonymous\" }),\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle('neutral-500') },\n when(\"testimonial.content.jobTitle\"),\n bind(\"testimonial.content.jobTitle\"),\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle('neutral-500') },\n when(\"testimonial.content.company\"),\n bind(\"testimonial.content.company\"),\n ),\n ],\n ),\n ],\n ),\n ],\n repeat(\"data.entries\", \"testimonial\"),\n ),\n ],\n ),\n ],\n data: {\n key: \"entries\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"testimonial\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"maxEntries\", fallback: \"6\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const formCopyFragment: FragmentDefinition = defineFragment({\n id: \"formCopy\",\n title: \"Form Copy\",\n description: \"Optional title and introduction content for form blocks.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n },\n {\n id: \"intro\",\n type: \"richText\",\n label: \"Intro\",\n description: \"Optional introduction above the form.\",\n },\n ],\n layout: [\n text(\n {\n as: \"h2\",\n className: \"text-2xl font-semibold\",\n style: textColorStyle('text'),\n },\n when(\"content.title\"),\n bind(\"content.title\"),\n ),\n richText(\n {\n className: \"text-base\",\n style: textColorStyle('text'),\n },\n when(\"content.intro\"),\n bind(\"content.intro\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { form, bind } from \"../../node/builder\";\n\nexport const formEmbedFragment: FragmentDefinition = defineFragment({\n id: \"formEmbed\",\n title: \"Form Embed\",\n description: \"Embeds a saved form with configurable submit button copy.\",\n fields: [\n {\n id: \"formId\",\n type: \"reference\",\n label: \"Form\",\n description: \"Pick a saved form to render.\",\n required: true,\n referenceKind: \"form\",\n allowManualEntry: false,\n },\n {\n id: \"submitLabel\",\n type: \"text\",\n label: \"Submit button label\",\n defaultValue: \"Submit\",\n },\n {\n id: \"successMessage\",\n type: \"text\",\n label: \"Success message\",\n description: \"Shown after successful submit (handled by page or block).\",\n },\n ],\n layout: [\n form(\n {\n submitLabel: { $bind: { from: \"submitLabel\" } },\n successMessage: { $bind: { from: \"successMessage\" } },\n },\n [],\n bind(\"data.form\"),\n ),\n ],\n data: {\n key: \"form\",\n loader: {\n endpoint: \"getPublicFormById\",\n params: {\n formId: { $bind: { from: \"formId\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const footerBottomTextFragment: FragmentDefinition = defineFragment({\n id: \"footerBottomText\",\n title: \"Footer Bottom Text\",\n description: \"Rich text content displayed at the bottom of the footer.\",\n fields: [\n {\n id: \"bottomText\",\n type: \"richText\",\n label: \"Bottom text\",\n description: \"Appears at the very bottom of the footer.\",\n ui: { variant: \"limited\" },\n },\n ],\n layout: [\n richText(\n {\n className: \"prose prose-sm mx-auto max-w-3xl text-center\",\n style: textColorStyle('text/80'),\n },\n when(\"bottomText\"),\n bind(\"bottomText\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, link, repeat, when, bind } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const footerLinkGroupsFragment: FragmentDefinition = defineFragment({\n id: \"footerLinkGroups\",\n title: \"Footer Link Groups\",\n description: \"Repeating columns of grouped footer links.\",\n fields: [\n {\n id: \"linkGroups\",\n type: \"repeater\",\n label: \"Link groups\",\n description: \"Organize footer links into columns.\",\n schema: {\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Group title\",\n },\n {\n id: \"links\",\n type: \"repeater\",\n label: \"Links\",\n schema: {\n fields: [\n {\n id: \"label\",\n type: \"text\",\n label: \"Label\",\n required: true,\n },\n {\n id: \"link\",\n type: \"link\",\n label: \"Link\",\n required: true,\n },\n ],\n },\n },\n ],\n },\n },\n ],\n layout: [\n stack(\n {\n gap: \"lg\",\n align: \"start\",\n className: \"grid gap-8 md:grid-cols-3\",\n },\n [\n stack(\n { gap: \"md\", align: \"start\", className: \"text-left\" },\n [\n text(\n {\n as: \"h3\",\n className: \"text-xs font-semibold uppercase tracking-wide\",\n style: textColorStyle('text/70'),\n },\n when(\"group.title\"),\n bind(\"group.title\"),\n ),\n stack(\n { gap: \"sm\", align: \"start\", className: \"space-y-2\" },\n [\n link(\n {\n className: \"block text-sm transition-theme hover:opacity-80\",\n style: textColorStyle('text'),\n href: {\n $bind: {\n from: \"entry.link\",\n transforms: [{ id: \"links.resolve\" }],\n fallback: \"#\",\n },\n },\n target: { $bind: { from: \"entry.target\" } },\n rel: { $bind: { from: \"entry.rel\" } },\n },\n [text({ as: \"span\" }, bind(\"entry.label\"))],\n repeat(\"group.links\", \"entry\"),\n ),\n ],\n ),\n ],\n repeat(\"linkGroups\", \"group\"), // Relative path\n ),\n ],\n when(\"linkGroups\"), // Relative path\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport { stack, text, link, media, when, bind, props as withProps } from \"../../node/builder\";\nimport {\n borderColorStyle,\n backgroundColorStyle,\n textColorStyle,\n mergeStyles,\n} from \"../../../theme/utils/colorStyles\";\n\nexport const blogFeaturedPostFragment: FragmentDefinition = defineFragment({\n id: \"blogFeaturedPost\",\n title: \"Featured Blog Post\",\n description: \"Featured blog post card with title and preview content.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Block title\",\n description: \"Displayed above the featured blog post.\",\n defaultValue: \"Latest post\",\n maxLength: 120,\n },\n {\n id: \"postSlug\",\n type: \"reference\",\n label: \"Blog post\",\n description: \"Pick the blog post to feature in this block.\",\n required: true,\n referenceKind: \"post\",\n allowManualEntry: false,\n },\n ],\n layout: [\n sectionContainer(\n [\n stack({ gap: \"sm\", className: \"md:w-1/3\" }, [\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"title\", { fallback: \"Latest post\" }), // Relative path\n ),\n ]),\n stack({ gap: \"md\", className: \"flex-1\" }, [\n stack({\n gap: \"md\",\n className: \"rounded-2xl border bg-white p-6 shadow-sm\",\n style: borderColorStyle(\"neutral-200\"),\n }, [\n link(\n {\n className: \"block overflow-hidden rounded-xl border\",\n style: borderColorStyle(\"neutral-100\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [\n media(\n { className: \"h-56 w-full object-cover\" },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n ),\n stack({ gap: \"sm\" }, [\n link(\n {\n className: \"block text-2xl font-semibold hover:opacity-80\",\n style: textColorStyle(\"neutral-900\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [text({ as: \"span\" }, bind(\"post.title\"))],\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle(\"neutral-500\") },\n when(\"post.publishedAt\"),\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n ),\n text(\n { as: \"p\", className: \"text-base\", style: textColorStyle(\"neutral-600\") },\n bind(\"post.excerpt\", { fallback: \"Select a blog post to display its preview.\" }),\n ),\n link(\n {\n className: \"inline-flex items-center text-sm font-semibold hover:opacity-80\",\n style: textColorStyle(\"primary\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [text({ as: \"span\" }, withProps({ value: \"Read more →\" }))],\n ),\n ]),\n ], when(\"post\")),\n stack(\n {\n gap: \"sm\",\n className: \"rounded-xl border border-dashed p-6 text-sm\",\n style: mergeStyles(\n borderColorStyle(\"neutral-300\"),\n backgroundColorStyle(\"neutral-50\"),\n textColorStyle(\"neutral-500\"),\n ),\n },\n [text({ as: \"p\" }, withProps({ value: \"Select a blog post to display its preview.\" }))],\n when(\"post\", { not: true }),\n ),\n ]),\n ],\n { gap: \"lg\", className: \"w-full md:flex-row md:items-start md:gap-10\" },\n ),\n ],\n data: {\n key: \"post\",\n loader: {\n endpoint: \"getPublishedEntryPreview\",\n params: {\n type: \"post\",\n slug: { $bind: { from: \"postSlug\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, link, media, when, bind, el, repeat, button, type NodeModifier } from \"../../node/builder\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\n// Grid primitive helper\nconst grid = (\n props?: Record<string, unknown> | null,\n children?: Array<import(\"../../node\").NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el(\"grid\", props ?? undefined, children ?? undefined, ...mods);\n\nexport const blogListGridFragment: FragmentDefinition = defineFragment({\n id: \"blogListGrid\",\n title: \"Blog List Grid\",\n description: \"Grid layout for displaying blog posts as cards with images.\",\n fields: [\n {\n id: \"columns\",\n type: \"select\",\n label: \"Grid columns\",\n description: \"Number of columns in the grid layout.\",\n defaultValue: \"3\",\n options: [\n { value: \"2\", label: \"2 columns\" },\n { value: \"3\", label: \"3 columns\" },\n { value: \"4\", label: \"4 columns\" },\n ],\n },\n {\n id: \"showImages\",\n type: \"boolean\",\n label: \"Show images\",\n description: \"Display featured images for each post.\",\n defaultValue: true,\n },\n {\n id: \"showExcerpts\",\n type: \"boolean\",\n label: \"Show excerpts\",\n description: \"Display post preview text.\",\n defaultValue: true,\n },\n {\n id: \"showDates\",\n type: \"boolean\",\n label: \"Show dates\",\n description: \"Display publish dates.\",\n defaultValue: true,\n },\n ],\n layout: [\n // Grid container\n grid(\n {\n className: \"grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3\",\n },\n [\n // Individual post card\n stack(\n {\n gap: \"md\",\n className: \"flex flex-col overflow-hidden rounded-xl border shadow-sm transition-shadow hover:shadow-md\",\n style: mergeStyles(\n borderColorStyle('neutral-200'),\n backgroundColorStyle('surface'),\n ),\n },\n [\n // Featured image\n link(\n {\n className: \"block overflow-hidden\",\n href: { $bind: { from: \"post.path\" } },\n },\n [\n media(\n {\n className: \"h-56 w-full object-cover transition-transform hover:scale-105\",\n },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n when(\"showImages\"),\n ),\n\n // Post content\n stack({ gap: \"sm\", className: \"flex-1 p-6\" }, [\n // Title\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"block text-xl font-semibold transition-colors hover:opacity-80\",\n style: textColorStyle('neutral-900'),\n },\n [text({ as: \"h3\" }, bind(\"post.title\"))],\n ),\n\n // Date\n text(\n {\n as: \"time\",\n className: \"text-sm\",\n style: textColorStyle('neutral-500'),\n },\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n when(\"post.publishedAt\"),\n when(\"showDates\"),\n ),\n\n // Excerpt\n text(\n {\n as: \"p\",\n className: \"mt-2 text-base line-clamp-3\",\n style: textColorStyle('neutral-600'),\n },\n bind(\"post.excerpt\"),\n when(\"post.excerpt\"),\n when(\"showExcerpts\"),\n ),\n\n // Read more button\n button(\n {\n href: { $bind: { from: \"post.path\" } },\n className: {\n $bind: { from: \"readMoreVariant\", fallback: \"primary\" },\n $prepend: \"button-\",\n },\n },\n [text({ as: \"span\" }, bind(\"readMoreText\", { fallback: \"Read more →\" }))],\n ),\n ]),\n ],\n repeat(\"data.posts\", \"post\"),\n ),\n ],\n ),\n ],\n data: {\n key: \"posts\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"post\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"postsPerPage\", fallback: \"12\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { bind, inline, link, media, repeat, stack, text, when, button } from \"../../node/builder\";\nimport { defineFragment, type FragmentDefinition } from \"../types\";\nimport { borderColorStyle, textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const blogListStackFragment: FragmentDefinition = defineFragment({\n id: \"blogListStack\",\n title: \"Blog List Stack\",\n description: \"Vertical list layout for displaying blog posts with optional thumbnails.\",\n fields: [\n {\n id: \"showImages\",\n type: \"boolean\",\n label: \"Show images\",\n description: \"Display thumbnail images for each post.\",\n defaultValue: true,\n },\n {\n id: \"showExcerpts\",\n type: \"boolean\",\n label: \"Show excerpts\",\n description: \"Display post preview text.\",\n defaultValue: true,\n },\n {\n id: \"showDates\",\n type: \"boolean\",\n label: \"Show dates\",\n description: \"Display publish dates.\",\n defaultValue: true,\n },\n ],\n layout: [\n // Vertical stack container\n stack({ gap: \"lg\", className: \"mx-auto max-w-3xl\" }, [\n // Individual post row\n inline(\n {\n gap: \"md\",\n className: \"items-start border-b pb-6 last:border-b-0\",\n style: borderColorStyle('neutral-200'),\n },\n [\n // Optional thumbnail (left-aligned)\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"flex-shrink-0\",\n },\n [\n media(\n {\n className: \"h-24 w-24 rounded-lg object-cover transition-transform hover:scale-105\",\n },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n when(\"showImages\"),\n ),\n\n // Post content (grows to fill space)\n stack({ gap: \"sm\", className: \"flex-1 min-w-0\" }, [\n // Title\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"block text-xl font-semibold transition-colors hover:opacity-80\",\n style: textColorStyle('neutral-900'),\n },\n [text({ as: \"h3\" }, bind(\"post.title\"))],\n ),\n\n // Date\n text(\n {\n as: \"time\",\n className: \"text-sm\",\n style: textColorStyle('neutral-500'),\n },\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n when(\"post.publishedAt\"),\n when(\"showDates\"),\n ),\n\n // Excerpt\n text(\n {\n as: \"p\",\n className: \"text-sm line-clamp-2\",\n style: textColorStyle('neutral-600'),\n },\n bind(\"post.excerpt\"),\n when(\"post.excerpt\"),\n when(\"showExcerpts\"),\n ),\n\n // Read more button\n button(\n {\n href: { $bind: { from: \"post.path\" } },\n className: {\n $bind: { from: \"readMoreVariant\", fallback: \"primary\" },\n $prepend: \"button-\",\n },\n },\n [text({ as: \"span\" }, bind(\"readMoreText\", { fallback: \"Read more →\" }))],\n ),\n ]),\n ],\n repeat(\"data.posts\", \"post\"),\n ),\n ]),\n ],\n data: {\n key: \"posts\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"post\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"postsPerPage\", fallback: \"12\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const faqHeadingFragment: FragmentDefinition = defineFragment({\n id: \"faqHeading\",\n title: \"FAQ Heading\",\n description: \"Optional eyebrow, title, and description for FAQ sections.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Short label displayed above the title.\",\n visibleRoles: [\"designer\", \"admin\"],\n maxLength: 60,\n },\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: false,\n maxLength: 120,\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n required: false,\n ui: { variant: \"limited\" },\n },\n ],\n layout: stack(\n {\n gap: \"sm\",\n className: \"mx-auto max-w-3xl text-center mb-4\",\n },\n [\n text(\n {\n as: \"p\",\n className: \"faq-eyebrow text-sm font-semibold uppercase tracking-wide\",\n style: textColorStyle('primary'),\n },\n when(\"content.eyebrow\"),\n bind(\"content.eyebrow\"),\n ),\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n className: \"faq-title\",\n style: textColorStyle('neutral-900'),\n },\n when(\"content.title\"),\n bind(\"content.title\"),\n ),\n richText(\n {\n className:\n \"faq-description prose mx-auto max-w-none text-base sm:text-lg\",\n style: textColorStyle('neutral-600'),\n },\n when(\"content.description\"),\n bind(\"content.description\"),\n ),\n ],\n ),\n});\n","import { accordionList } from \"../../node/builder\";\nimport { defineFragment, type FragmentDefinition } from \"../types\";\n\nexport const faqAccordionFragment: FragmentDefinition = defineFragment({\n id: \"faqAccordion\",\n title: \"FAQ Accordion\",\n description: \"Expandable list of question and answer pairs.\",\n fields: [\n {\n id: \"items\",\n type: \"repeater\",\n label: \"FAQ items\",\n itemLabel: \"FAQ item\",\n itemLabelSource: \"question\",\n minItems: 1,\n maxItems: 30,\n schema: {\n fields: [\n {\n id: \"question\",\n type: \"text\",\n label: \"Question\",\n required: true,\n maxLength: 160,\n },\n {\n id: \"answer\",\n type: \"richText\",\n label: \"Answer\",\n required: true,\n ui: { variant: \"limited\" },\n },\n ],\n },\n },\n ],\n layout: accordionList({\n collection: \"content.items\",\n itemName: \"faqItem\",\n indexName: \"faqIndex\",\n accordionProps: {\n className: \"accordion-root\", // CSS-first: all styling handled by theme CSS\n type: \"single\",\n collapsible: true,\n },\n itemProps: {\n className: \"accordion-item\",\n iconStyle: { $bind: { from: \"theme.accordions.icon.style\" } }, // Pass icon style from theme\n },\n triggerFrom: \"faqItem.question\",\n contentFrom: \"faqItem.answer\",\n }),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack, text, richText, media, bind, when } from '../../node/builder';\nimport { createCtasRepeater } from '../../fields/ctas';\nimport { ctaRow } from '../../node/fragments/ctaRow';\nimport { textColorStyle } from '../../../theme/utils/colorStyles';\n\n/**\n * Card fragment - flexible content card with title, body, optional media, and action buttons\n *\n * Features:\n * - Featured media (image/video) with configurable aspect ratio\n * - Title and rich text body\n * - Call-to-action buttons (0-3)\n * - Variant-based styling from theme (background, spacing, elevation, rounded corners)\n *\n * Card styling is managed through CSS generation at build-time (generateCardCss).\n * Each card uses:\n * - .card-{variant} - Container styles (background, border, shadow, radius)\n * - .card-media - Media corners matching container\n * - .card-content - Padding based on variant spacing\n *\n * This CSS-first approach eliminates runtime transforms for styling.\n */\nexport const cardFragment: FragmentDefinition = defineFragment({\n id: 'card',\n title: 'Card',\n description: 'Content card with optional media, title, body, and action buttons',\n category: 'content',\n icon: 'LayoutCard',\n fields: [\n {\n id: 'media',\n type: 'media',\n label: 'Featured media',\n description: 'Image or video displayed at top of card',\n required: false,\n mediaKinds: ['image', 'video'],\n },\n {\n id: 'aspectRatio',\n type: 'select',\n label: 'Media aspect ratio',\n defaultValue: 'auto',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: '16/9', label: '16:9 (Landscape)' },\n { value: '4/3', label: '4:3 (Standard)' },\n { value: '1/1', label: '1:1 (Square)' },\n { value: '3/4', label: '3:4 (Portrait)' },\n ],\n condition: {\n field: 'media',\n operator: 'isNotEmpty',\n },\n },\n {\n id: 'title',\n type: 'text',\n label: 'Title',\n required: true,\n maxLength: 120,\n },\n {\n id: 'body',\n type: 'richText',\n label: 'Body',\n description: 'Main card content',\n format: 'markdown',\n },\n createCtasRepeater({\n id: 'ctas',\n label: 'Action buttons',\n itemLabel: 'Button',\n minItems: 0,\n maxItems: 3,\n }),\n {\n id: 'variant',\n type: 'select',\n label: 'Card variant',\n description: 'Choose a card style from your theme',\n required: false,\n defaultValue: 'default',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'variant1', label: 'Variant 1' },\n { value: 'variant2', label: 'Variant 2' },\n ],\n },\n ],\n layout: stack(\n {\n gap: 'none',\n className: {\n $bind: {\n from: 'variant',\n fallback: 'default',\n },\n $prepend: 'card-',\n },\n },\n [\n // Featured media at top (conditional) - full width, no padding\n // CSS handles corner radius via .card-{variant} .card-media selector\n media(\n {\n className: 'card-media w-full h-auto object-cover',\n style: {\n aspectRatio: { $bind: { from: 'aspectRatio' } },\n },\n },\n when('media'),\n bind('media')\n ),\n // Content wrapper with padding based on variant\n // CSS handles padding via .card-{variant} .card-content selector\n stack(\n {\n gap: 'sm',\n className: 'card-content',\n },\n [\n text(\n {\n as: 'h3',\n className: 'card-title text-xl font-semibold',\n },\n bind('title'),\n ),\n richText(\n {\n className: 'card-body text-base',\n style: textColorStyle('mutedText'),\n },\n when('body'),\n bind('body'),\n ),\n // Action buttons at bottom (conditional)\n ctaRow({\n collectionPath: 'ctas',\n itemName: 'cta',\n gap: 'sm',\n justify: 'start',\n containerClassName: 'mt-2',\n }),\n ]\n ),\n ],\n ),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { text, bind } from '../../node/builder';\n\n/**\n * Heading fragment - simple text heading with configurable level\n */\nexport const headingFragment: FragmentDefinition = defineFragment({\n id: 'heading',\n title: 'Heading',\n description: 'Text heading',\n category: 'content',\n icon: 'Heading',\n fields: [\n {\n id: 'text',\n type: 'text',\n label: 'Heading text',\n required: true,\n maxLength: 200,\n },\n {\n id: 'level',\n type: 'select',\n label: 'Heading level',\n defaultValue: 'h2',\n options: [\n { value: 'h1', label: 'H1 (Large)' },\n { value: 'h2', label: 'H2 (Medium)' },\n { value: 'h3', label: 'H3 (Small)' },\n ],\n },\n ],\n layout: text(\n {\n as: { $bind: { from: 'level' } }, // Relative path - resolves to current scope\n className: 'fragment-heading font-bold',\n },\n bind('text'), // Relative path - resolves to current scope\n ),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { richText, bind } from '../../node/builder';\n\n/**\n * Rich text fragment - formatted text content\n */\nexport const richTextFragment: FragmentDefinition = defineFragment({\n id: 'richText',\n title: 'Rich Text',\n description: 'Formatted text with markdown',\n category: 'content',\n icon: 'FileText',\n fields: [\n {\n id: 'content',\n type: 'richText',\n label: 'Content',\n required: true,\n format: 'markdown',\n },\n ],\n layout: richText(\n {\n className: 'fragment-richtext prose prose-neutral',\n },\n bind('content'), // Relative path - resolves to current scope\n ),\n});\n","import type { FragmentDefinition } from '../types';\nimport type { RepeaterFieldDefinition } from '../../manifest/schema';\n\n/**\n * Converts a record of fragments into a polymorphic repeater field definition.\n * This allows fragments to be used in blocks via repeaters with type selection.\n *\n * @example\n * ```typescript\n * const field = fragmentsToRepeaterField(\n * 'items',\n * 'Column content',\n * {\n * card: cardFragment,\n * quote: quoteFragment,\n * stat: statFragment\n * },\n * { minItems: 0, maxItems: 50 }\n * );\n * ```\n */\nexport function fragmentsToRepeaterField(\n id: string,\n label: string,\n fragments: Record<string, FragmentDefinition>,\n options: {\n minItems?: number;\n maxItems?: number;\n itemLabel?: string;\n description?: string;\n allowConversion?: boolean;\n } = {}\n): RepeaterFieldDefinition {\n return {\n id,\n type: 'repeater',\n label,\n description: options.description,\n polymorphic: true,\n itemLabel: options.itemLabel ?? 'Item',\n itemLabelSource: '_type',\n minItems: options.minItems ?? 0,\n maxItems: options.maxItems,\n allowConversion: options.allowConversion ?? true,\n required: false,\n itemTypes: Object.fromEntries(\n Object.entries(fragments).map(([typeId, fragment]) => [\n typeId,\n {\n label: fragment.title ?? typeId,\n icon: fragment.icon,\n fields: fragment.fields\n }\n ])\n )\n };\n}\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack, media, text, bind, when } from '../../node/builder';\nimport { textColorStyle } from '../../../theme/utils/colorStyles';\n\n/**\n * Image fragment - single image with optional caption and aspect ratio control\n */\nexport const imageFragment: FragmentDefinition = defineFragment({\n id: 'image',\n title: 'Image',\n description: 'Image with optional caption',\n category: 'content',\n icon: 'Image',\n fields: [\n {\n id: 'image',\n type: 'media',\n label: 'Image',\n required: true,\n mediaKinds: ['image'],\n },\n {\n id: 'caption',\n type: 'text',\n label: 'Caption',\n required: false,\n maxLength: 200,\n },\n {\n id: 'aspectRatio',\n type: 'select',\n label: 'Aspect ratio',\n defaultValue: 'auto',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: '16/9', label: '16:9 (Landscape)' },\n { value: '4/3', label: '4:3 (Standard)' },\n { value: '1/1', label: '1:1 (Square)' },\n { value: '3/4', label: '3:4 (Portrait)' },\n ],\n },\n ],\n layout: stack({ gap: 'sm' }, [\n media(\n {\n className: 'fragment-image w-full h-auto object-cover',\n style: {\n aspectRatio: { $bind: { from: 'aspectRatio' } },\n },\n },\n bind('image')\n ),\n text(\n {\n as: 'p',\n className: 'image-caption text-sm text-center',\n style: textColorStyle('mutedText'),\n },\n when('caption'),\n bind('caption')\n ),\n ]),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack } from '../../node/builder';\nimport { fragmentsToRepeaterField } from '../utils/toRepeaterSchema';\nimport { imageFragment } from './image';\nimport { headingFragment } from './heading';\nimport { richTextFragment } from './richText';\nimport { typeBasedLayout } from '../../node';\n\n/**\n * Column content fragment - represents a single column with nested items.\n * Each column can contain a flexible stack of images, headings, and rich text.\n */\nexport const columnContentFragment: FragmentDefinition = defineFragment({\n id: 'columnContent',\n title: 'Column',\n description: 'A single column with customizable content',\n category: 'layout',\n icon: 'RectangleVertical',\n fields: [\n fragmentsToRepeaterField(\n 'items',\n 'Column items',\n {\n image: imageFragment,\n heading: headingFragment,\n richText: richTextFragment,\n },\n {\n minItems: 0,\n maxItems: 20,\n itemLabel: 'Item',\n description: 'Add content to this column',\n }\n ),\n ],\n layout: stack(\n { gap: 'md', className: 'h-full' },\n [\n {\n type: 'stack',\n gap: 'md',\n children: typeBasedLayout(\n {\n image: imageFragment.layout,\n heading: headingFragment.layout,\n richText: richTextFragment.layout,\n },\n { itemName: 'item' }\n ),\n $repeat: {\n collection: { from: 'items' },\n itemName: 'item',\n },\n },\n ]\n ),\n});\n","/**\n * @file Defines constants for the background field, ensuring a single source of truth\n * for presets used in both the field definition and the style transforms.\n */\n\nexport const BACKGROUND_POSITION_PRESETS = [\n { value: 'center', label: 'Center' },\n { value: 'top', label: 'Top' },\n { value: 'top left', label: 'Top Left' },\n { value: 'top right', label: 'Top Right' },\n { value: 'bottom', label: 'Bottom' },\n { value: 'bottom left', label: 'Bottom Left' },\n { value: 'bottom right', label: 'Bottom Right' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' },\n // The following are valid keywords but are not included in the UI to reduce clutter.\n // They are included here to ensure the transform logic can correctly identify them as presets.\n { value: 'top center', label: 'Top Center' },\n { value: 'bottom center', label: 'Bottom Center' },\n { value: 'left center', label: 'Left Center' },\n { value: 'right center', label: 'Right Center' },\n { value: 'left top', label: 'Left Top' },\n { value: 'right top', label: 'Right Top' },\n { value: 'left bottom', label: 'Left Bottom' },\n { value: 'right bottom', label: 'Right Bottom' },\n] as const;\n\nexport const BACKGROUND_POSITION_PRESET_VALUES = BACKGROUND_POSITION_PRESETS.map((p) => p.value);\n\n/**\n * Maps position keywords to Tailwind anchor positioning classes.\n * Used for positioning scaled/overflow images within their containers.\n *\n * The keys are normalized (lowercase, trimmed) position keywords.\n * The values are Tailwind classes for position + translation.\n */\nexport const POSITION_TO_ANCHOR_CLASSES: Record<string, string> = {\n 'center': 'left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2',\n 'top': 'left-1/2 top-0 -translate-x-1/2',\n 'top center': 'left-1/2 top-0 -translate-x-1/2',\n 'bottom': 'left-1/2 bottom-0 -translate-x-1/2',\n 'bottom center': 'left-1/2 bottom-0 -translate-x-1/2',\n 'left': 'left-0 top-1/2 -translate-y-1/2',\n 'left center': 'left-0 top-1/2 -translate-y-1/2',\n 'right': 'right-0 top-1/2 -translate-y-1/2',\n 'right center': 'right-0 top-1/2 -translate-y-1/2',\n 'top left': 'left-0 top-0',\n 'left top': 'left-0 top-0',\n 'top right': 'right-0 top-0',\n 'right top': 'right-0 top-0',\n 'bottom left': 'left-0 bottom-0',\n 'left bottom': 'left-0 bottom-0',\n 'bottom right': 'right-0 bottom-0',\n 'right bottom': 'right-0 bottom-0',\n};\n\n/** Default anchor classes when position is null or unrecognized */\nexport const DEFAULT_ANCHOR_CLASSES = 'left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2';\n\n/**\n * Gets Tailwind anchor positioning classes for a position keyword.\n * Used for positioning scaled/overflow background images.\n *\n * @param position - Position keyword (e.g., \"center\", \"top\", \"bottom left\") or null\n * @returns Tailwind classes for positioning and translation\n */\nexport function getAnchorClasses(position: string | null): string {\n if (!position) return DEFAULT_ANCHOR_CLASSES;\n const normalized = position.toLowerCase().trim();\n return POSITION_TO_ANCHOR_CLASSES[normalized] ?? DEFAULT_ANCHOR_CLASSES;\n}\n","import { BACKGROUND_POSITION_PRESETS } from '../constants/background';\nimport type { FieldDefinition, TabDefinition, TabGroupFieldDefinition } from '../manifest/schema'\n\ntype BackgroundFieldOptions = {\n id?: string\n label?: string\n allowColor?: boolean\n allowGradient?: boolean\n allowImage?: boolean\n includeAdvanced?: boolean\n}\n\n/**\n * Creates a TabGroupField for background configuration\n * with Color/Gradient/Image tabs and advanced image options\n */\nexport function createBackgroundField(options: BackgroundFieldOptions = {}): TabGroupFieldDefinition {\n const {\n id = 'background',\n label = 'Background',\n allowColor = true,\n allowGradient = true,\n allowImage = true,\n includeAdvanced = false,\n } = options\n\n const tabs: TabDefinition[] = []\n\n // Color tab\n if (allowColor) {\n tabs.push({\n id: 'color',\n label: 'Color',\n description: 'Solid color background using theme tokens or custom colors',\n sdkSectionOption: 'backgroundColor',\n fields: [\n {\n id: 'color',\n type: 'text' as const,\n label: 'Color',\n description: 'Select a background color from the available options.',\n required: false,\n multiline: false,\n ui: {\n // Use BackgroundColorWidget via widget override\n widget: 'backgroundColor',\n },\n },\n ],\n })\n }\n\n // Gradient tab\n if (allowGradient) {\n tabs.push({\n id: 'gradient',\n label: 'Gradient',\n description: 'CSS gradient background',\n sdkSectionOption: 'backgroundGradient',\n fields: [\n {\n id: 'gradient',\n type: 'text' as const,\n label: 'Gradient',\n description: 'CSS gradient value (e.g., linear-gradient(to right, #ff0000, #00ff00)).',\n required: false,\n multiline: true,\n ui: {\n placeholder: 'linear-gradient(to right, #ff0000, #00ff00)',\n },\n },\n ],\n })\n }\n\n // Image tab\n if (allowImage) {\n const imageFields: FieldDefinition[] = [\n {\n id: 'image',\n type: 'media' as const,\n label: 'Image',\n description: 'Background image file',\n mediaKinds: ['image'],\n required: false,\n },\n ]\n\n // Advanced image options\n if (includeAdvanced) {\n const objectFitField: FieldDefinition = {\n id: 'objectFit',\n type: 'select',\n label: 'Image Sizing',\n description: 'How the image should be sized and positioned.',\n required: false,\n multiple: false,\n options: [\n { value: 'fill', label: 'Fill (cover)' },\n { value: 'fit', label: 'Fit (contain)' },\n { value: 'original', label: 'Original size' },\n { value: 'custom', label: 'Scale up' },\n ],\n }\n\n const scaleField: FieldDefinition = {\n id: 'scale',\n type: 'presetOrCustom',\n label: 'Scale',\n description: 'Image scale amount.',\n required: false,\n ui: {\n visibleWhen: {\n field: 'objectFit',\n equals: 'custom',\n },\n },\n presets: [\n { value: '125', label: '125%' },\n { value: '150', label: '150%' },\n { value: '175', label: '175%' },\n { value: '200', label: '200%' },\n ],\n customInput: {\n placeholder: 'e.g., 800px, 50vw, 175%',\n helpText: 'Enter a custom size using %, px, vh, vw, rem, or em units',\n },\n }\n\n const positionField: FieldDefinition = {\n id: 'position',\n type: 'presetOrCustom',\n label: 'Position',\n description: 'Anchor point for the image. Relevant for \"Fill\" and \"Custom size\" options.',\n required: false,\n presets: [...BACKGROUND_POSITION_PRESETS],\n customInput: {\n placeholder: 'e.g., 25% 75%, top 20px left 50px',\n helpText: 'Enter a custom CSS background-position value',\n },\n }\n\n const opacityField: FieldDefinition = {\n id: 'opacity',\n type: 'number',\n label: 'Opacity',\n description: 'Image opacity (0-100).',\n required: false,\n ui: {\n min: 0,\n max: 100,\n step: 5,\n },\n }\n\n imageFields.push(\n objectFitField,\n scaleField,\n positionField,\n opacityField\n )\n }\n\n tabs.push({\n id: 'image',\n label: 'Image',\n description: includeAdvanced\n ? 'Background image with advanced controls'\n : 'Background image',\n sdkSectionOption: 'backgroundImage',\n fields: imageFields,\n })\n }\n\n return {\n id,\n type: 'tabGroup' as const,\n label,\n required: false,\n tabs,\n activeTabField: 'type',\n ui: {\n hideLabel: false,\n },\n } satisfies TabGroupFieldDefinition\n}\n","import type { FieldDefinition } from '../manifest/schema'\nimport { createBackgroundField } from './background'\n\n/**\n * Options for customizing a section styles field.\n */\ntype SectionStylesOptions = {\n /** Field ID (default: '_sectionStyles') */\n id?: string\n /** Field label (default: 'Section styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Options for customizing a container styles field.\n */\ntype ContainerStylesOptions = {\n /** Field ID (default: '_containerStyles') */\n id?: string\n /** Field label (default: 'Container styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Options for customizing a card styles field.\n */\ntype CardStylesOptions = {\n /** Field ID (default: '_cardStyles') */\n id?: string\n /** Field label (default: 'Card styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Internal discriminator for box style types.\n * @internal\n */\ntype BoxStyleType = 'container' | 'card'\n\n/**\n * Internal helper to create box styles with depth (container or card).\n *\n * Both containers and cards support:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow)\n * - Rounded corners (border radius)\n *\n * This function is used internally by `containerStylesField()` and `cardStylesField()`\n * to avoid code duplication while maintaining separate public APIs.\n *\n * @internal\n * @param type - Box style type discriminator ('container' or 'card')\n * @param options - Customization options passed from public field helpers\n * @returns A modal FieldDefinition with depth-specific fields\n */\nfunction createBoxStylesFieldWithDepth(\n type: BoxStyleType,\n options: ContainerStylesOptions | CardStylesOptions = {}\n): FieldDefinition {\n const defaults = {\n container: {\n id: '_containerStyles',\n label: 'Container styles',\n contextName: 'container',\n },\n card: {\n id: '_cardStyles',\n label: 'Card styles',\n contextName: 'card',\n },\n }\n\n const {\n id = defaults[type].id,\n label = defaults[type].label,\n includeBackground = true,\n } = options\n\n const contextName = defaults[type].contextName\n const fields: FieldDefinition[] = []\n\n // Background (color/gradient/image with advanced options)\n if (includeBackground) {\n fields.push(\n createBackgroundField({\n id: 'background',\n label: 'Background',\n allowColor: true,\n allowGradient: true,\n allowImage: true,\n includeAdvanced: true,\n }),\n )\n }\n\n // Horizontal + vertical spacing\n fields.push({\n id: 'spacing',\n type: 'select',\n label: 'Inner spacing',\n description: `Padding for the ${contextName}.`,\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'compact', label: 'Compact' },\n { value: 'cozy', label: 'Cozy' },\n { value: 'medium', label: 'Medium' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ],\n })\n\n // Raised toggle (applies theme shadow)\n fields.push({\n id: 'raised',\n type: 'boolean',\n label: 'Raised',\n description: `Add shadow depth to the ${contextName}.`,\n required: false,\n })\n\n // Rounded corners\n fields.push({\n id: 'rounded',\n type: 'select',\n label: 'Rounded corners',\n description: 'Border radius size.',\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n { value: 'xl', label: 'Extra Large' },\n { value: '2xl', label: 'Extra Extra Large' },\n { value: 'full', label: 'Fully Rounded' },\n ],\n })\n\n // Full-width toggle (only for containers, not cards)\n if (type === 'container') {\n fields.push({\n id: 'fullWidth',\n type: 'boolean',\n label: 'Full width',\n description: 'Extend content edge-to-edge (removes container max-width and all horizontal padding).',\n required: false,\n defaultValue: false,\n })\n }\n\n return {\n id,\n type: 'modal',\n label,\n required: false,\n schema: { fields },\n ui: {\n modalConfig: {\n buttonLabel: label,\n description: `Configure background, spacing, elevation, and rounded corners for the ${contextName}.`,\n buttonVariant: 'outline' as const,\n showCustomizedIndicator: true,\n },\n },\n } as FieldDefinition\n}\n\n/**\n * Creates a modal field group for styling full-width sections.\n *\n * Section styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (vertical padding)\n *\n * Sections are full-width wrappers that span the entire viewport, so they don't\n * support rounded corners or elevation shadows (unlike containers and cards).\n *\n * Use with the `backgroundLayer()` helper to render backgrounds in the block layout.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_sectionStyles')\n * @param options.label - Field label (default: 'Section styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block's fields array\n *\n * @example\n * // Basic usage in a block\n * const fields = [\n * // ... other fields\n * sectionStylesField({\n * id: '_sectionStyles',\n * label: 'Section styles',\n * }),\n * ]\n *\n * @example\n * // In the layout, use backgroundLayer() to render\n * const layout = section(\n * { background: 'background/base' },\n * [\n * ...backgroundLayer('_sectionStyles.background'),\n * sectionContainer([])\n * ]\n * )\n *\n * @see {@link containerStylesField} for constrained-width containers with elevation\n * @see {@link cardStylesField} for repeater items with elevation\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function sectionStylesField(options: SectionStylesOptions = {}): FieldDefinition {\n const {\n id = '_sectionStyles',\n label = 'Section styles',\n includeBackground = true,\n } = options\n\n const fields: FieldDefinition[] = []\n\n // Background (color/gradient/image with advanced options)\n if (includeBackground) {\n fields.push(\n createBackgroundField({\n id: 'background',\n label: 'Background',\n allowColor: true,\n allowGradient: true,\n allowImage: true,\n includeAdvanced: true,\n }),\n )\n }\n\n // Vertical spacing (maps to theme spacing tokens)\n fields.push({\n id: 'spacing',\n type: 'select',\n label: 'Inner spacing',\n description: 'Vertical padding for the section.',\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'compact', label: 'Compact' },\n { value: 'cozy', label: 'Cozy' },\n { value: 'medium', label: 'Medium' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ],\n })\n\n return {\n id,\n type: 'modal',\n label,\n required: false,\n schema: { fields },\n ui: {\n modalConfig: {\n buttonLabel: label,\n description: 'Configure background and spacing for this section.',\n buttonVariant: 'outline' as const,\n showCustomizedIndicator: true,\n },\n },\n } as FieldDefinition\n}\n\n/**\n * Creates a modal field group for styling constrained-width containers.\n *\n * Container styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow for visual depth)\n * - Rounded corners (border radius)\n *\n * Containers have constrained width (max-w-*) and are centered within their parent.\n * Use for content areas that need visual separation or elevation from the page background.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_containerStyles')\n * @param options.label - Field label (default: 'Container styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block's fields array\n *\n * @example\n * // Basic usage in a block\n * const fields = [\n * // ... other fields\n * containerStylesField({\n * id: '_containerStyles',\n * label: 'Container styles',\n * }),\n * ]\n *\n * @see {@link sectionStylesField} for full-width sections\n * @see {@link cardStylesField} for repeater items with the same styling options\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function containerStylesField(options: ContainerStylesOptions = {}): FieldDefinition {\n return createBoxStylesFieldWithDepth('container', options)\n}\n\n/**\n * Creates a modal field group for styling individual cards in repeaters.\n *\n * Card styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow for visual depth)\n * - Rounded corners (border radius)\n *\n * Cards are used in repeaters (e.g., columns, grids, carousels) and have the same\n * styling options as containers. Each card instance can be styled independently.\n *\n * **Important:** When used in fragments (not blocks), the field ID must start with\n * a letter (e.g., 'styles', 'cardStyles') - do NOT use a leading underscore like '_cardStyles'.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_cardStyles' for blocks, 'styles' recommended for fragments)\n * @param options.label - Field label (default: 'Card styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block or fragment's fields array\n *\n * @example\n * // In a fragment (e.g., card.ts)\n * const cardFragment = defineFragment({\n * id: 'card',\n * fields: [\n * { id: 'title', type: 'text', label: 'Title' },\n * { id: 'body', type: 'richText', label: 'Body' },\n * cardStylesField({\n * id: 'styles', // No leading underscore for fragments!\n * label: 'Card styles',\n * }),\n * ],\n * layout: stack({ gap: 'md' }, [\n * text({ as: 'h3' }, bind('title')),\n * richText({}, bind('body')),\n * ]),\n * })\n *\n * @example\n * // In a block\n * const fields = [\n * // ... other fields\n * cardStylesField({\n * id: '_cardStyles', // Can use underscore in blocks\n * label: 'Card styles',\n * }),\n * ]\n *\n * @see {@link sectionStylesField} for full-width sections\n * @see {@link containerStylesField} for constrained-width containers\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function cardStylesField(options: CardStylesOptions = {}): FieldDefinition {\n return createBoxStylesFieldWithDepth('card', options)\n}\n","import type { BlockManifest, BlockCategory, FieldDefinition, StyleTokenConfig, BehaviourConfig } from './manifest/schema';\nimport { fieldSchema } from './manifest/schema';\nimport type { NodeDefinition } from './node';\nimport { composeFragments, type FragmentDefinition } from './fragments';\nimport { sectionStylesField } from './fields/boxStyles';\nimport { augmentManifest } from './manifest/augmentManifest';\n\n/**\n * Configuration for defining a block using the defineBlock helper.\n * Provides smart defaults and handles fragment composition automatically.\n */\nexport type BlockConfig = {\n // Required fields\n /** Block identifier (e.g., 'block.hero') */\n id: string;\n /** Human-readable title (e.g., 'Hero') */\n title: string;\n /** Block category for organization */\n category: BlockCategory;\n\n // Fragment composition (auto-handles field assembly)\n /** Fragments to compose into this block */\n fragments?: Array<{\n fragment: FragmentDefinition;\n fieldPriority?: number;\n scope?: string;\n dataKey?: string;\n }>;\n\n // Layout definition\n /** Block layout (NodeDefinition or array) */\n layout: NodeDefinition | NodeDefinition[];\n\n // Optional: variants\n /** Layout variants (e.g., { classic: layout1, minimal: layout2 }) */\n variants?: Record<string, NodeDefinition>;\n /** Default variant key */\n defaultVariant?: string;\n\n // Optional: additional fields beyond fragments\n /** Additional fields to include (fragments are added automatically) */\n additionalFields?: FieldDefinition[];\n\n // Optional: skip section styles field\n /** If true, don't automatically add sectionStylesField */\n skipSectionStyles?: boolean;\n\n // Optional: overrides for defaults\n /** Block description */\n description?: string;\n /** Field ID to use as block title in lists (e.g., 'headline') */\n titleSource?: string;\n /** Component name (auto-derived from id if not provided) */\n component?: string;\n /** Search/filter tags */\n tags?: string[];\n /** Icon name (Lucide icon) */\n icon?: string;\n /** Style token mappings */\n styleTokens?: StyleTokenConfig;\n /** Behavior flags */\n behaviours?: BehaviourConfig;\n /** Hide from block picker palettes */\n paletteHidden?: boolean;\n /** Content types this block is compatible with */\n contentTypes?: string[];\n};\n\n/**\n * Create a block manifest with smart defaults and automatic fragment composition.\n *\n * This helper reduces block definition boilerplate by:\n * - Composing fragments and managing field priorities automatically\n * - Adding section styles field by default\n * - Providing sensible defaults for manifest properties\n * - Auto-deriving component names from block IDs\n * - Handling manifest augmentation (variant selector, etc.)\n *\n * @example\n * ```typescript\n * export const heroManifest = createBlockManifest({\n * id: 'block.hero',\n * title: 'Hero',\n * category: 'layout',\n * fragments: [\n * { fragment: heroCopyFragment, priority: 0 },\n * { fragment: ctaRowFragment, priority: 2 },\n * ],\n * layout: styledSection({\n * children: sectionContainer(nodes, { gap: 'md' }),\n * }),\n * tags: ['header', 'banner', 'landing'],\n * icon: 'Sparkles',\n * });\n * ```\n */\nexport function createBlockManifest(config: BlockConfig): BlockManifest {\n // 1. Compose fragments + section styles\n const composition = config.fragments ? composeFragments(config.fragments) : { fields: [], layout: [], data: [], scopes: [] };\n\n const allFields: FieldDefinition[] = [\n ...composition.fields,\n ...(config.additionalFields ?? []),\n ];\n\n // Add section styles field unless explicitly skipped\n // This allows users to customize section spacing and background via the editor.\n // Even when auto-added, blocks get sensible defaults via the transform's defaultSpacing option.\n // The pattern:\n // 1. Block defines layout with styledSection({ spacing: 'medium' })\n // 2. createBlockManifest auto-adds _sectionStyles field (unless skipSectionStyles: true)\n // 3. Transform uses defaultSpacing when _sectionStyles.spacing is undefined\n // 4. Users can override spacing via the editor if needed\n if (!config.skipSectionStyles) {\n allFields.push(\n sectionStylesField({\n id: '_sectionStyles',\n label: 'Section styles',\n }),\n );\n }\n\n const fields = fieldSchema.array().parse(allFields);\n\n // 2. Build layout (with variants if provided)\n const layout = config.layout;\n const variants = config.variants;\n\n // 3. Build behaviours object (from explicit config or paletteHidden flag)\n let behaviours: BehaviourConfig | undefined = config.behaviours;\n if (!behaviours && config.paletteHidden !== undefined) {\n behaviours = {\n supportsThemeSwitching: true,\n inlineEditing: true,\n animation: true,\n paletteHidden: config.paletteHidden,\n };\n }\n\n // 4. Apply defaults and create manifest\n const manifest: BlockManifest = {\n name: config.id,\n version: '0.1.0',\n title: config.title,\n titleSource: config.titleSource,\n description: config.description ?? '',\n component: config.component ?? deriveComponentName(config.id),\n fields,\n slots: [], // Always empty\n styleTokens: config.styleTokens,\n behaviours,\n category: config.category,\n contentTypes: config.contentTypes,\n tags: config.tags ?? [],\n icon: config.icon ?? 'Box',\n layout,\n variants,\n defaultVariant: config.defaultVariant,\n };\n\n // 5. Augment manifest (adds variant selector field, etc.)\n return augmentManifest(manifest);\n}\n\n/**\n * Derive component name from block ID.\n *\n * Converts block IDs to component names by:\n * 1. Removing the 'block.' prefix\n * 2. Converting camelCase to dot.notation\n * 3. Adding '.default' suffix\n *\n * Examples:\n * - 'block.hero' → 'hero.default'\n * - 'block.ctaFull' → 'cta.full.default'\n * - 'block.siteHeader' → 'site.header.default'\n */\nfunction deriveComponentName(id: string): string {\n // Remove 'block.' prefix\n const base = id.replace(/^block\\./, '');\n\n // Convert camelCase to dot.separated\n // ctaFull → cta.full\n // siteHeader → site.header\n const dotSeparated = base\n .replace(/([a-z])([A-Z])/g, '$1.$2')\n .toLowerCase();\n\n // Always add .default suffix for consistency\n return `${dotSeparated}.default`;\n}\n","import type { Media } from \"../../lib/media\";\nimport type { GradientConfig } from \"../../theme/gradients\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport {\n composeFragments,\n heroCopyFragment,\n ctaRowFragment,\n} from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst heroCopyAndCta = composeFragments([\n { fragment: heroCopyFragment },\n { fragment: ctaRowFragment },\n]);\n\nconst heroContentNodes = heroCopyAndCta.layout;\n\n// Variant: Classic (centered, full padding - current default)\nconst classicLayout: NodeDefinition = styledSection({\n children: sectionContainer(heroContentNodes, {\n gap: \"md\",\n className: \"text-center\",\n }),\n});\n\n// Variant: Micro (compact with reduced padding)\nconst microLayout: NodeDefinition = styledSection({\n children: sectionContainer(heroContentNodes, {\n gap: \"sm\",\n className: \"text-center\",\n }),\n spacing: \"compact\",\n});\n\n/**\n * Shared split layout for both split and splitReverse variants.\n * Both variants use the same structure (two-column grid with text on left).\n * The background image is rendered as an absolute-positioned layer,\n * so there's no visual difference between split/splitReverse currently.\n */\nconst splitLayoutBase: NodeDefinition = styledSection({\n children: {\n type: \"grid\",\n cols: 1,\n colsSm: 2,\n gap: \"lg\",\n className: \"mx-auto max-w-7xl items-center\",\n children: [\n {\n type: \"stack\",\n gap: \"md\",\n className: \"text-left\",\n children: heroContentNodes,\n },\n ],\n },\n});\n\n// Variant: Split (two-column with text on left)\n// Note: Currently identical to splitReverse since media is absolute-positioned\nconst splitLayout: NodeDefinition = splitLayoutBase;\n\n// Variant: Split-reverse (two-column with text on left)\n// Note: Currently identical to split since media is absolute-positioned\nconst splitReverseLayout: NodeDefinition = splitLayoutBase;\n\nexport const heroManifest: BlockManifest = createBlockManifest({\n id: \"block.hero\",\n title: \"Hero\",\n titleSource: \"headline\",\n category: \"layout\",\n\n fragments: [\n { fragment: heroCopyFragment, fieldPriority: 0 },\n { fragment: ctaRowFragment, fieldPriority: 2 },\n ],\n\n layout: classicLayout,\n\n variants: {\n classic: classicLayout,\n micro: microLayout,\n split: splitLayout,\n splitReverse: splitReverseLayout,\n },\n defaultVariant: \"classic\",\n\n description: \"Hero section with headline, subtitle, and repeatable CTAs.\",\n tags: [\"header\", \"banner\", \"landing\", \"introduction\", \"welcome\", \"splash\", \"headline\"],\n icon: \"Sparkles\",\n styleTokens: {\n typography: \"display\",\n spacing: \"xl\",\n },\n});\n\nexport type HeroManifest = typeof heroManifest;\n\nexport type HeroCta = {\n label: string;\n href: string;\n variant?: 'primary' | 'secondary' | 'outline';\n iconLeft?: Media | null;\n iconRight?: Media | null;\n};\n\nexport type HeroCtaInput = Partial<HeroCta>;\n\nexport type HeroContent = {\n eyebrow?: string;\n headline: string;\n subheadline?: string;\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image';\n color?: string | null;\n gradient?: GradientConfig | null;\n image?: HeroMedia | null;\n textColor?: string | null;\n } | null;\n spacing?: string | null;\n } | null;\n ctas?: HeroCtaInput[];\n};\n\nexport type HeroMedia = Media;\n\nexport const heroBlockDefinition: SystemBlockDefinition<HeroContent> = {\n manifest: heroManifest,\n};\n","import type { BlockManifest } from \"../manifest\";\nimport type { TipTapNode } from \"../manifest/richTextSchema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { bodyCopyFragment, composeFragments } from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);\n\nexport const bodyTextManifest: BlockManifest = createBlockManifest({\n id: \"block.bodyText\",\n title: \"Body Text\",\n titleSource: \"heading\",\n category: \"content\",\n component: \"body.text.basic\",\n\n fragments: [\n { fragment: bodyCopyFragment, fieldPriority: 0 },\n ],\n\n layout: styledSection({\n children: bodyCopyComposition.layout,\n spacing: \"medium\",\n }),\n\n description: \"Simple text block with optional heading and alignment controls.\",\n tags: [\"text\", \"paragraph\", \"content\", \"copy\", \"article\", \"writing\", \"rich-text\"],\n icon: \"Type\",\n styleTokens: {\n spacing: \"md\",\n },\n});\n\nexport type BodyTextManifest = typeof bodyTextManifest;\n\nexport type BodyTextAlignment = \"left\" | \"center\";\n\nexport type BodyTextContent = {\n heading?: string | null;\n body: TipTapNode;\n alignment?: BodyTextAlignment | null;\n};\n\nexport const bodyTextBlockDefinition: SystemBlockDefinition<BodyTextContent> = {\n manifest: bodyTextManifest,\n};\n","import { z } from \"zod\";\n\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section } from \"../node/builder\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n blogFeaturedPostFragment,\n} from \"../fragments\";\n\nconst composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);\nconst fields = fieldSchema.array().parse(composition.fields);\n\nconst blogPostLayout: NodeDefinition = section(\n { background: \"background/base\", className: \"px-6 py-12\" },\n [...composition.layout],\n);\n\nexport const blogPostManifest: BlockManifest = {\n name: \"block.blogPost\",\n version: \"0.1.0\",\n title: \"Blog post\",\n description: \"Highlights a single blog post with title, image, and excerpt.\",\n component: \"blog.post.highlight\",\n fields,\n slots: [],\n styleTokens: {\n background: \"surface\",\n typography: \"body\",\n spacing: \"md\",\n },\n behaviours: {\n supportsThemeSwitching: true,\n inlineEditing: false,\n animation: false,\n paletteHidden: false,\n },\n category: \"blog\",\n contentTypes: [\"post\"],\n tags: [\"blog\", \"post\", \"featured\", \"highlight\", \"article\", \"single\"],\n icon: \"FileText\",\n layout: blogPostLayout,\n};\n\nexport type BlogPostContent = {\n title?: string | null;\n postSlug?: string | null;\n};\n\nexport const blogPostDataSchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string(),\n path: z.string(),\n excerpt: z.string().nullable().optional(),\n image: z\n .object({\n url: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n })\n .nullable()\n .optional(),\n publishedAt: z.string().nullable().optional(),\n});\n\nexport type BlogPostData = z.infer<typeof blogPostDataSchema>;\n\n// Component is provided by the default factory; view model is purely content + loader data\n\nexport const blogPostBlockDefinition: SystemBlockDefinition<BlogPostContent> = {\n manifest: blogPostManifest,\n dataSchemas: { post: blogPostDataSchema.optional() },\n dataLoaders: buildFragmentDataLoaders(composition),\n};\n","import { fieldSchema } from '../manifest/schema'\nimport type { BlockManifest } from '../manifest'\nimport type { NodeDefinition } from '../node'\nimport { el, section, stack, text, bind, repeat, type NodeModifier } from '../node/builder'\nimport type { SystemBlockDefinition } from '../registry'\nimport { createBlockManifest } from '../defineBlock'\nimport { backgroundColorStyle, borderColorStyle, textColorStyle, mergeStyles } from '../../theme/utils/colorStyles'\n\ntype BlogPlaceholderCard = {\n title: string\n summary: string\n}\n\nexport type BlogPlaceholderContent = {\n eyebrow?: string | null\n heading?: string | null\n description?: string | null\n cards?: BlogPlaceholderCard[]\n note?: string | null\n}\n\nconst grid = (\n props?: Record<string, unknown> | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('grid', props ?? undefined, children ?? undefined, ...mods)\n\nconst blogPlaceholderLayout: NodeDefinition = section(\n { background: 'surface', className: 'px-6 py-16 sm:py-20 md:py-24' }, // Semantic: comfortable + extra md padding\n [\n stack(\n { gap: 'sm', align: 'center', className: 'mx-auto max-w-3xl text-center' },\n [\n text(\n { as: 'p', className: 'text-sm font-semibold uppercase tracking-wide', style: textColorStyle('mutedText') },\n bind('content.eyebrow'),\n ),\n text(\n { as: 'h2', className: 'text-3xl font-semibold tracking-tight sm:text-4xl', style: textColorStyle('text') },\n bind('content.heading'),\n ),\n text(\n { className: 'text-base leading-relaxed', style: textColorStyle('mutedText') },\n bind('content.description'),\n ),\n ],\n ),\n grid(\n { className: 'mt-10 gap-6 sm:grid-cols-2 lg:grid-cols-3' },\n [\n stack(\n {\n gap: 'sm',\n className: 'rounded-xl border p-6 text-left shadow-sm',\n style: mergeStyles(borderColorStyle('border/60'), backgroundColorStyle('background')),\n },\n [\n text(\n { as: 'h3', className: 'text-lg font-semibold', style: textColorStyle('text') },\n bind('item.title'),\n ),\n text(\n { className: 'text-sm leading-relaxed', style: textColorStyle('mutedText') },\n bind('item.summary'),\n ),\n ],\n repeat('content.cards', 'item', { limit: 6 }),\n ),\n ],\n ),\n stack(\n { gap: 'xs', align: 'center', className: 'mt-10 text-center' },\n [\n text({ className: 'text-sm', style: textColorStyle('mutedText') }, bind('content.note')),\n ],\n ),\n ],\n)\n\nexport const blogPlaceholderManifest: BlockManifest = createBlockManifest({\n id: 'block.blogPlaceholder',\n title: 'Blog placeholder',\n category: 'blog',\n component: 'blog.placeholder',\n\n // Skip section styles - this block has custom layout with fixed styling\n skipSectionStyles: true,\n\n // Custom fields for blog placeholder content\n additionalFields: [\n fieldSchema.parse({\n id: 'eyebrow',\n type: 'text',\n label: 'Eyebrow',\n description: 'Short label displayed above the heading.',\n }),\n fieldSchema.parse({\n id: 'heading',\n type: 'text',\n label: 'Heading',\n required: true,\n }),\n fieldSchema.parse({\n id: 'description',\n type: 'text',\n label: 'Description',\n multiline: true,\n }),\n fieldSchema.parse({\n id: 'cards',\n type: 'repeater',\n label: 'Placeholder cards',\n itemLabel: 'Placeholder',\n schema: {\n fields: [\n { id: 'title', type: 'text', label: 'Title', required: true },\n { id: 'summary', type: 'text', label: 'Summary', multiline: true, required: true },\n ],\n },\n }),\n fieldSchema.parse({\n id: 'note',\n type: 'text',\n label: 'Footer note',\n description: 'Optional helper text displayed below the cards.',\n }),\n ],\n\n layout: blogPlaceholderLayout,\n\n description: 'Starter layout shown until real blog content replaces it.',\n styleTokens: {\n background: 'surface',\n spacing: 'lg',\n },\n paletteHidden: true,\n})\n\nexport const blogPlaceholderBlockDefinition: SystemBlockDefinition<BlogPlaceholderContent> = {\n manifest: blogPlaceholderManifest,\n}\n","import { z } from \"zod\";\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section, stack, text, bind, when } from \"../node/builder\";\nimport { backgroundColorStyle, borderColorStyle, textColorStyle, mergeStyles } from \"../../theme/utils/colorStyles\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n blogListGridFragment,\n blogListStackFragment,\n} from \"../fragments\";\nimport { createBlockManifest } from \"../defineBlock\";\n\n// Compose both layout fragments WITHOUT scopes\nconst gridComposition = composeFragments([{ fragment: blogListGridFragment }]);\nconst stackComposition = composeFragments([{ fragment: blogListStackFragment }]);\n\n// Build unified field list\n// Combine fields from both fragments, removing duplicates\nconst fragmentFields = [...gridComposition.fields, ...stackComposition.fields];\nconst uniqueFields = fragmentFields.filter((field, index, self) =>\n index === self.findIndex((f) => f.id === field.id)\n);\n\n// Build layout with conditional rendering\nconst blogListingLayout: NodeDefinition = section(\n { background: \"background/base\", className: \"px-6 py-12 sm:py-16 md:py-20\" }, // Semantic: medium + extra md padding\n [\n // Grid layout (conditionally shown)\n ...gridComposition.layout.map((node) => ({\n ...node,\n $when: {\n when: { from: \"content.layout\" },\n equals: \"grid\",\n },\n })),\n\n // Stack layout (conditionally shown)\n ...stackComposition.layout.map((node) => ({\n ...node,\n $when: {\n when: { from: \"content.layout\" },\n equals: \"stack\",\n },\n })),\n\n // Empty state (shown when no posts)\n stack(\n {\n gap: \"sm\",\n className: \"mx-auto max-w-3xl rounded-xl border border-dashed p-12 text-center\",\n style: mergeStyles(\n borderColorStyle(\"neutral-300\"),\n backgroundColorStyle(\"neutral-50\"),\n ),\n },\n [\n text(\n { as: \"p\", className: \"text-base\", style: textColorStyle(\"neutral-500\") },\n bind(\"content.emptyMessage\", { fallback: \"No posts published yet.\" }),\n ),\n ],\n when(\"data.posts\", { not: true }),\n ),\n ],\n);\n\nexport const blogListingManifest: BlockManifest = createBlockManifest({\n id: \"block.blogListing\",\n title: \"Blog listing\",\n category: \"blog\",\n component: \"blog.listing\",\n\n // Skip section styles - this block has layout-specific fields instead\n skipSectionStyles: true,\n\n // Custom fields for blog listing configuration\n additionalFields: [\n fieldSchema.parse({\n id: \"layout\",\n type: \"select\",\n label: \"Layout\",\n description: \"Choose how blog posts are displayed.\",\n defaultValue: \"grid\",\n options: [\n { value: \"grid\", label: \"Grid (cards)\" },\n { value: \"stack\", label: \"Stack (vertical list)\" },\n ],\n }),\n // Grid-specific column field (only visible when layout is grid)\n ...gridComposition.fields\n .filter((f) => f.id === \"columns\")\n .map((f) => ({\n ...f,\n ui: {\n ...f.ui,\n visibleWhen: { field: \"layout\", equals: \"grid\" },\n },\n })),\n fieldSchema.parse({\n id: \"postsPerPage\",\n type: \"select\",\n label: \"Posts to display\",\n description: \"Number of posts to show on this page.\",\n defaultValue: \"12\",\n options: [\n { value: \"6\", label: \"6 posts\" },\n { value: \"12\", label: \"12 posts\" },\n { value: \"24\", label: \"24 posts\" },\n { value: \"48\", label: \"48 posts\" },\n ],\n }),\n // Shared toggle fields from fragments (now unscoped)\n ...uniqueFields.filter((f) => ['showImages', 'showExcerpts', 'showDates'].includes(f.id)),\n fieldSchema.parse({\n id: \"readMoreText\",\n type: \"text\",\n label: \"Read more text\",\n description: \"Text for the read more button/link.\",\n defaultValue: \"Read more →\",\n maxLength: 40,\n }),\n fieldSchema.parse({\n id: \"readMoreVariant\",\n type: \"select\",\n label: \"Read more style\",\n description: \"Visual style for the read more button.\",\n defaultValue: \"link\",\n options: [\n { value: \"link\", label: \"Link (minimal)\" },\n { value: \"primary\", label: \"Primary button\" },\n { value: \"secondary\", label: \"Secondary button\" },\n { value: \"outline\", label: \"Outline button\" },\n ],\n }),\n fieldSchema.parse({\n id: \"emptyMessage\",\n type: \"text\",\n label: \"Empty state message\",\n description: \"Message shown when no posts are available.\",\n defaultValue: \"No posts published yet.\",\n maxLength: 200,\n }),\n ],\n\n layout: blogListingLayout,\n\n description: \"Display a collection of blog posts in grid or stack layout.\",\n contentTypes: [\"post\"],\n tags: [\"blog\", \"posts\", \"articles\", \"news\", \"archive\", \"listing\", \"feed\", \"index\"],\n icon: \"Newspaper\",\n styleTokens: {\n background: \"surface\",\n spacing: \"lg\",\n },\n});\n\nexport type BlogListingContent = {\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | \"4\" | null;\n postsPerPage?: \"6\" | \"12\" | \"24\" | \"48\" | null;\n showImages?: boolean | null;\n showExcerpts?: boolean | null;\n showDates?: boolean | null;\n readMoreText?: string | null;\n readMoreVariant?: \"link\" | \"primary\" | \"secondary\" | \"outline\" | null;\n emptyMessage?: string | null;\n};\n\nexport type BlogPostListEntry = {\n id: string;\n slug: string;\n path: string;\n title: string;\n excerpt: string | null;\n publishedAt: string | null;\n updatedAt: string;\n status: string;\n image?: {\n url: string;\n alt?: string;\n } | null;\n};\n\nconst blogPostListEntrySchema = z.object({\n id: z.string(),\n slug: z.string(),\n path: z.string(),\n title: z.string(),\n excerpt: z.string().nullable().optional(),\n publishedAt: z.string().nullable().optional(),\n updatedAt: z.string(),\n status: z.string(),\n image: z\n .object({\n url: z.string(),\n alt: z.string().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const blogListingBlockDefinition: SystemBlockDefinition<BlogListingContent> = {\n manifest: blogListingManifest,\n dataSchemas: {\n posts: z.array(blogPostListEntrySchema).optional(),\n },\n dataLoaders: buildFragmentDataLoaders(gridComposition), // Use grid composition for loader config (same for both)\n};\n","import type { SystemBlockDefinition } from \"../registry\";\nimport type { Media } from \"../../lib/media\";\nimport type { GradientConfig } from \"../../theme/gradients\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport {\n composeFragments,\n ctaCopyFragment,\n ctaRowFragment,\n} from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst ctaComposition = composeFragments([\n { fragment: ctaCopyFragment },\n { fragment: ctaRowFragment },\n]);\n\nexport const ctaFullManifest: BlockManifest = createBlockManifest({\n id: \"block.ctaFull\",\n title: \"Full-width CTA\",\n category: \"marketing\",\n\n fragments: [\n { fragment: ctaCopyFragment, fieldPriority: 0 },\n { fragment: ctaRowFragment, fieldPriority: 2 },\n ],\n\n layout: styledSection({\n children: sectionContainer(ctaComposition.layout, {\n gap: \"md\",\n className: \"relative text-center\",\n }),\n }),\n\n description: \"Centered call to action with optional background image.\",\n tags: [\"cta\", \"call-to-action\", \"button\", \"conversion\", \"action\", \"sign-up\", \"get-started\"],\n icon: \"Target\",\n});\n\nexport type CtaFullContent = {\n eyebrow?: string | null;\n title: string;\n content?: unknown;\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image';\n color?: string | null;\n gradient?: GradientConfig | null;\n image?: Media | null;\n textColor?: string | null;\n } | null;\n spacing?: string | null;\n } | null;\n ctas?: Array<{ label?: string | null; href?: string | null }>;\n};\n\nexport const ctaFullBlockDefinition: SystemBlockDefinition<CtaFullContent> = {\n manifest: ctaFullManifest,\n};\n","import { z } from \"zod\";\n\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section } from \"../node/builder\";\nimport { sectionContainer } from \"../node/fragments\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n formCopyFragment,\n formEmbedFragment,\n} from \"../fragments\";\n\nconst formComposition = composeFragments([\n { fragment: formCopyFragment },\n { fragment: formEmbedFragment },\n]);\n\nconst formLayout: NodeDefinition = section(\n { background: \"surface\", className: \"px-6 py-12\" },\n [sectionContainer(formComposition.layout, { gap: \"lg\" })],\n);\n\nconst fields = fieldSchema.array().parse(formComposition.fields);\nconst dataLoaders = buildFragmentDataLoaders(formComposition);\n\nexport const formManifest: BlockManifest = {\n name: \"block.form\",\n version: \"0.1.0\",\n title: \"Form\",\n titleSource: \"title\",\n description: \"Renders a saved form definition with server-side submit.\",\n component: \"form.block\",\n fields,\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"form\", \"contact\", \"input\", \"submit\", \"fields\", \"signup\", \"lead-capture\"],\n icon: \"FormInput\",\n layout: formLayout,\n};\n\n/**\n * Rich text document structure (ProseMirror format)\n */\nexport type RichTextDoc = {\n type: 'doc';\n content?: Array<{\n type: string;\n content?: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n [key: string]: unknown;\n }>;\n};\n\nexport type FormBlockContent = {\n title?: string | null;\n intro?: RichTextDoc | null;\n formId: string;\n submitLabel?: string | null;\n successMessage?: string | null;\n};\n\nexport const formDataSchema = z.object({\n id: z.string(),\n siteId: z.string(),\n userId: z.string(),\n name: z.string(),\n slug: z.string(),\n schemaJson: z.any(),\n settingsJson: z.any().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type FormData = z.infer<typeof formDataSchema>;\n\nexport const formBlockDefinition: SystemBlockDefinition<FormBlockContent> = {\n manifest: formManifest,\n dataSchemas: { form: formDataSchema.optional() },\n dataLoaders,\n};\n","import type { SystemBlockDefinition } from \"../registry\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { composeFragments, faqHeadingFragment, faqAccordionFragment } from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst faqComposition = composeFragments([\n { fragment: faqHeadingFragment, fieldPriority: 0 },\n { fragment: faqAccordionFragment, fieldPriority: 1 },\n]);\n\nexport const faqManifest: BlockManifest = createBlockManifest({\n id: \"block.faq\",\n title: \"FAQ\",\n titleSource: \"title\",\n category: \"content\",\n\n fragments: [\n { fragment: faqHeadingFragment, fieldPriority: 0 },\n { fragment: faqAccordionFragment, fieldPriority: 1 },\n ],\n\n layout: styledSection({\n children: sectionContainer(faqComposition.layout, {\n gap: \"xl\",\n className: \"w-full\",\n }),\n }),\n\n description: \"Accordion of frequently asked questions and answers.\",\n tags: [\"faq\", \"questions\", \"answers\", \"help\", \"support\", \"accordion\", \"q&a\"],\n icon: \"HelpCircle\",\n});\n\nexport type FaqItem = {\n question: string;\n answer: unknown;\n};\n\nexport type FaqContent = {\n eyebrow?: string | null;\n title?: string | null;\n description?: unknown;\n items?: FaqItem[] | null;\n};\n\nexport const faqBlockDefinition: SystemBlockDefinition<FaqContent> = {\n manifest: faqManifest,\n};\n","import type { TransformDefinition } from \"./registry/core\";\nimport { uppercaseTransform, fallbackTransform, dateFormatShort } from \"./registry/formatting\";\nimport {\n headerNavLinkClassTransform,\n headingClassFromAlignment,\n bodyClassFromAlignment,\n stackAlignFromAlignment,\n conditionalClassTransform,\n} from \"./registry/ui\";\nimport {\n maxWidthClassTransform,\n headerRootClassTransform,\n footerRootClassTransform,\n headerRootStyleTransform,\n footerRootStyleTransform,\n} from \"./registry/layout\";\nimport { mediaFromUrl } from \"./registry/media\";\n\n// Canonical map of built-in transforms. Keys are the literal IDs.\n// Note: ui.buttonClass removed - styling now handled by CSS generation at build time\nexport const transformDefinitions = {\n \"string.uppercase\": uppercaseTransform,\n \"value.fallback\": fallbackTransform,\n \"ui.headerNavLinkClass\": headerNavLinkClassTransform,\n \"layout.maxWidthClass\": maxWidthClassTransform,\n \"layout.headerRootClass\": headerRootClassTransform,\n \"layout.footerRootClass\": footerRootClassTransform,\n \"layout.headerRootStyle\": headerRootStyleTransform,\n \"layout.footerRootStyle\": footerRootStyleTransform,\n \"ui.headingClassFromAlignment\": headingClassFromAlignment,\n \"ui.bodyClassFromAlignment\": bodyClassFromAlignment,\n \"ui.stackAlignFromAlignment\": stackAlignFromAlignment,\n \"ui.conditionalClass\": conditionalClassTransform,\n \"media.fromUrl\": mediaFromUrl,\n \"date.formatShort\": dateFormatShort,\n} as const;\n\nexport type TransformId = keyof typeof transformDefinitions;\n\ntype OptionsOf<T> = T extends TransformDefinition<infer O> ? O : never;\n\nexport type TransformOptionsById = {\n [K in TransformId]: OptionsOf<(typeof transformDefinitions)[K]>;\n};\n\nexport type TransformStep<K extends TransformId = TransformId> = {\n id: K;\n options?: TransformOptionsById[K];\n};\n\n// Convenience helpers for declaring transform pipelines in a type‑safe way.\nexport function tx<K extends TransformId>(id: K, options?: TransformOptionsById[K]): TransformStep<K> {\n return { id, options };\n}\n\nexport function pipe<T extends readonly TransformStep[]>(...steps: T): T {\n return steps;\n}\n\nexport function bindProp(\n from: string,\n opts?: { transforms?: readonly TransformStep[] | TransformStep[]; fallback?: unknown; pick?: \"value\" | \"collection\" | \"context\" }\n) {\n return {\n $bind: {\n from,\n ...(opts?.transforms ? { transforms: [...opts.transforms] } : {}),\n ...(opts?.fallback !== undefined ? { fallback: opts.fallback } : {}),\n ...(opts?.pick ? { pick: opts.pick } : {}),\n },\n } as const;\n}\n","import type { BlockManifest } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { bind, headerSection, inline, link, media, stack, text, when, props as withProps } from '../node/builder'\nimport { navRow, ctaButton } from '../node/fragments'\nimport type { SystemBlockDefinition } from '../registry'\nimport { bindProp, pipe, tx } from '../transforms/typed'\nimport { createBlockManifest } from '../defineBlock'\nimport { backgroundColorStyle, borderColorStyle, mergeStyles, textColorStyle } from '../../theme/utils/colorStyles'\n\nconst logoRow = link(\n { href: '/', className: 'header-logo flex min-w-0 items-center gap-3 no-underline transition-opacity hover:opacity-80' },\n [\n media({ className: 'h-10 w-auto transition-all duration-300 [.header-scrolled_&]:h-8' }, when('content.logo'), bind('content.logo')),\n text({ as: 'span', className: 'header-logo-text truncate text-lg font-semibold' }, bind('site.title', { fallback: 'Your Site' })),\n ],\n)\n\nconst centeredLogoRow = link(\n { href: '/', className: 'header-logo flex items-center justify-center gap-3 text-center no-underline transition-opacity hover:opacity-80' },\n [\n media({ className: 'h-12 w-auto transition-all duration-300 [.header-scrolled_&]:h-10' }, when('content.logo'), bind('content.logo')),\n text({ as: 'span', className: 'header-logo-text text-xl font-semibold' }, bind('site.title', { fallback: 'Your Site' })),\n ],\n)\n\n// Shared nav row configuration\nconst createNavRow = (className: string, align: 'start' | 'center' | 'end' = 'end') =>\n navRow({\n className: `${className} header-nav-row`,\n align,\n linkClassName: 'header-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n })\n\nconst headerCta = ctaButton({\n basePath: 'menu.ctaItem',\n whenPath: 'menu.ctaItem.label',\n variantPath: 'menu.ctaItem.variant',\n linkPath: 'menu.ctaItem.link',\n className: 'header-cta btn-sm hidden md:inline-flex ml-6',\n})\n\n// Classic variant: logo left, nav right (horizontal inline layout)\nconst classicLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full items-center gap-6 py-4' })),\n fallback: 'container mx-auto flex w-full items-center gap-6 px-6 py-4',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'classic' }),\n)\n\n// Centered variant: logo centered, nav below (vertical stack layout)\nconst centeredLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full flex-col items-center gap-5 py-6 text-center' })),\n fallback: 'container mx-auto flex w-full flex-col items-center gap-5 px-6 py-6 text-center',\n }),\n },\n [\n centeredLogoRow,\n createNavRow('flex flex-wrap justify-center gap-x-6 gap-y-3', 'center'),\n ],\n when('$root.theme.header.variant', { equals: 'centered' }),\n)\n\n// Transparent variant: logo left, nav right (horizontal inline, transparent bg)\nconst transparentLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full items-center gap-6 py-4' })),\n fallback: 'container mx-auto flex w-full items-center gap-6 px-6 py-4',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'transparent' }),\n)\n\n// Floating variant: absolute positioned with padding + rounded container\nconst floatingLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'header-floating-container absolute left-1/2 top-4 flex w-[calc(100%-2rem)] max-w-7xl -translate-x-1/2 items-center gap-6 px-6 py-3' })),\n fallback: 'header-floating-container absolute left-1/2 top-4 flex w-[calc(100%-2rem)] max-w-7xl -translate-x-1/2 items-center gap-6 px-6 py-3',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'floating' }),\n)\n\n// Editorial variant: centered logo with nav split left/right or large centered logo with nav below\nconst editorialLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full flex-col items-center gap-6 py-6 text-center' })),\n fallback: 'container mx-auto flex w-full flex-col items-center gap-6 px-6 py-6 text-center',\n }),\n },\n [\n centeredLogoRow,\n createNavRow('flex flex-wrap justify-center gap-x-8 gap-y-3', 'center'),\n ],\n when('$root.theme.header.variant', { equals: 'editorial' }),\n)\n\n// Root section contains all variant layouts\nconst headerLayout: NodeDefinition = headerSection(\n {\n background: 'background/base',\n className: bindProp('$root.theme.header', {\n transforms: pipe(tx('layout.headerRootClass')),\n fallback: 'header-root z-40 w-full border-b transition-theme backdrop-blur',\n }),\n style: bindProp('$root.theme.header', {\n transforms: pipe(tx('layout.headerRootStyle')),\n fallback: mergeStyles(\n backgroundColorStyle('surface'),\n textColorStyle('text'),\n borderColorStyle('border'),\n ),\n }),\n },\n [\n classicLayout,\n centeredLayout,\n transparentLayout,\n floatingLayout,\n editorialLayout,\n ],\n withProps({\n 'data-site-header': 'true',\n }),\n)\n\nexport const siteHeaderManifest: BlockManifest = createBlockManifest({\n id: 'block.siteHeader',\n title: 'Site Header',\n category: 'layout',\n component: 'site.header.default',\n\n // Skip section styles - this block uses theme-based styling\n skipSectionStyles: true,\n\n layout: headerLayout,\n\n description: 'Site-wide header with logo, navigation, and optional CTA.',\n styleTokens: {\n spacing: 'sm',\n },\n paletteHidden: true,\n})\n\nexport type SiteHeaderManifest = typeof siteHeaderManifest\n\nexport type SiteHeaderVariant = 'classic' | 'centered' | 'transparent' | 'floating' | 'editorial'\n\n// Header has no content fields - variant comes from theme.header.variant\n// CTA is handled via navigation items with is_cta flag\nexport type SiteHeaderContent = Record<string, never>\n\nexport const siteHeaderBlockDefinition: SystemBlockDefinition<SiteHeaderContent> = {\n manifest: siteHeaderManifest,\n}\n","import { navRow } from '../node/fragments'\nimport type { BlockManifest } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { bind, inline, section, stack, text, when } from '../node/builder'\nimport type { SystemBlockDefinition } from '../registry'\nimport type { LinkValue } from '../types/link'\nimport {\n composeFragments,\n materializeFragment,\n footerBottomTextFragment,\n footerLinkGroupsFragment,\n} from '../fragments'\nimport { createBlockManifest } from '../defineBlock'\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../theme/utils/colorStyles'\n\nconst _footerFragments = composeFragments([\n { fragment: footerLinkGroupsFragment, fieldPriority: 0 },\n { fragment: footerBottomTextFragment, fieldPriority: 1 },\n])\n\nconst linkGroupsLayout = (): NodeDefinition[] =>\n materializeFragment({ fragment: footerLinkGroupsFragment }).layout\n\nconst bottomTextLayout = (): NodeDefinition[] =>\n materializeFragment({ fragment: footerBottomTextFragment }).layout\n\nconst simpleFooterLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: {\n $bind: {\n from: '$root.theme.footer.maxWidth',\n transforms: [\n {\n id: 'layout.maxWidthClass',\n options: { base: 'flex w-full flex-col items-center gap-4 py-10 text-center' },\n },\n ],\n fallback: 'container mx-auto flex w-full flex-col items-center gap-4 px-6 py-10 text-center',\n },\n },\n },\n [\n navRow({\n align: 'center',\n className: 'flex flex-wrap justify-center gap-x-6 gap-y-3',\n linkClassName: 'footer-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n }),\n ...bottomTextLayout(),\n ],\n when('$root.theme.footer.variant', { equals: 'simple' }),\n)\n\nconst columnsFooterLayout = stack(\n {\n gap: 'xl',\n align: 'start',\n className: {\n $bind: {\n from: '$root.theme.footer.maxWidth',\n transforms: [\n {\n id: 'layout.maxWidthClass',\n options: { base: 'flex w-full flex-col gap-10 py-12' },\n },\n ],\n fallback: 'container mx-auto flex w-full flex-col gap-10 px-6 py-12',\n },\n },\n },\n [\n ...linkGroupsLayout(),\n inline(\n { className: 'flex w-full flex-wrap items-center justify-between gap-4' },\n [\n text({ as: 'span', className: 'text-sm font-semibold', style: textColorStyle('text') }, bind('site.title', { fallback: 'Your Site' })),\n navRow({\n className: 'flex flex-wrap justify-end gap-x-6 gap-y-3',\n align: 'end',\n linkClassName: 'footer-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n }),\n ],\n ),\n ...bottomTextLayout(),\n ],\n when('$root.theme.footer.variant', { equals: 'columns' }),\n)\n\nconst footerLayout: NodeDefinition = section(\n {\n background: 'background/base',\n className: {\n $bind: {\n from: '$root.theme.footer',\n transforms: [\n {\n id: 'layout.footerRootClass',\n },\n ],\n fallback: 'w-full border-t transition-theme',\n },\n },\n style: {\n $bind: {\n from: '$root.theme.footer',\n transforms: [\n {\n id: 'layout.footerRootStyle',\n },\n ],\n fallback: mergeStyles(\n backgroundColorStyle('surface'),\n textColorStyle('text'),\n borderColorStyle('border'),\n ),\n },\n },\n },\n [\n simpleFooterLayout,\n columnsFooterLayout,\n ],\n)\n\nexport const siteFooterManifest: BlockManifest = createBlockManifest({\n id: 'block.siteFooter',\n title: 'Site Footer',\n category: 'layout',\n component: 'site.footer.default',\n\n // Use fragments for link groups and bottom text\n fragments: [\n { fragment: footerLinkGroupsFragment, fieldPriority: 0 },\n { fragment: footerBottomTextFragment, fieldPriority: 1 },\n ],\n\n // Skip section styles - this block uses theme-based styling\n skipSectionStyles: true,\n\n layout: footerLayout,\n\n description: 'Site-wide footer with navigation links and optional columns.',\n styleTokens: {\n spacing: 'md',\n },\n paletteHidden: true,\n})\n\nexport type SiteFooterVariant = 'simple' | 'columns'\n\nexport type SiteFooterLink = {\n label: string\n link: LinkValue | null\n target?: string | null\n rel?: string | null\n}\n\nexport type SiteFooterLinkGroup = {\n title?: string | null\n links: SiteFooterLink[]\n}\n\nexport type SiteFooterContent = {\n bottomText?: unknown\n linkGroups?: SiteFooterLinkGroup[]\n}\n\nexport const siteFooterBlockDefinition: SystemBlockDefinition<SiteFooterContent> = {\n manifest: siteFooterManifest,\n}\n","import type { Media } from '../../lib/media'\nimport type { BlockManifest } from '../manifest/schema'\nimport { fieldSchema } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { section } from '../node/builder'\nimport { sectionContainer } from '../node/fragments'\nimport { backgroundLayer } from '../node/fragments/backgroundLayer'\nimport { sectionStylesField } from '../fields/boxStyles'\nimport type { SystemBlockDefinition } from '../registry'\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n testimonialsHeadingFragment,\n testimonialsCarouselFragment,\n} from '../fragments'\n\n// Background layer nodes (replaces testimonialsBackgroundFragment)\nconst testimonialsBackgroundNodes = backgroundLayer(\"_sectionStyles.background\", {\n imageClassName: \"absolute inset-0 -z-10 h-full w-full object-cover opacity-50\",\n})\n\nconst testimonialsContent = composeFragments([\n { fragment: testimonialsHeadingFragment },\n { fragment: testimonialsCarouselFragment },\n])\n\nconst testimonialsLayout: NodeDefinition = section(\n { background: 'background/base', className: 'px-6 py-16 sm:py-20 md:py-24' }, // Semantic: comfortable + extra md padding\n [\n ...testimonialsBackgroundNodes,\n sectionContainer(\n [...testimonialsContent.layout],\n { gap: 'xl', className: 'relative' },\n ),\n ],\n)\n\nconst fields = fieldSchema.array().parse([\n ...testimonialsContent.fields.filter((field) => field.id === 'heading' || field.id === 'subheading'),\n ...testimonialsContent.fields.filter(\n (field) => field.id === 'slidesToShow' || field.id === 'transition' || field.id === 'maxEntries',\n ),\n sectionStylesField({\n id: '_sectionStyles',\n label: 'Section styles',\n }),\n])\n\nconst dataLoaders = buildFragmentDataLoaders(testimonialsContent)\n\nexport const testimonialsManifest: BlockManifest = {\n name: 'block.testimonials',\n version: '0.1.0',\n title: 'Testimonials',\n description: 'Carousel of customer testimonials with optional background styling.',\n component: 'testimonials.carousel',\n fields,\n slots: [],\n styleTokens: {\n background: 'surface',\n typography: 'body',\n spacing: 'lg',\n },\n behaviours: {\n supportsThemeSwitching: true,\n inlineEditing: false,\n animation: true,\n paletteHidden: false,\n },\n category: 'marketing',\n tags: ['testimonials', 'reviews', 'quotes', 'feedback', 'social-proof', 'customers', 'carousel'],\n icon: 'MessageSquareQuote',\n layout: testimonialsLayout,\n}\n\nexport type TestimonialsBlockContent = {\n heading?: string | null\n subheading?: string | null\n slidesToShow?: number | string | null\n transition?: 'slide' | 'fade' | null\n maxEntries?: number | string | null\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image'\n color?: string | null\n gradient?: import('../../theme/gradients').GradientConfig | null\n image?: Media | null\n textColor?: string | null\n } | null\n spacing?: string | null\n } | null\n}\n\nexport type TestimonialEntryContent = {\n name?: string | null\n jobTitle?: string | null\n company?: string | null\n headshot?: {\n url?: string | null\n alt?: string | null\n } | null\n body?: unknown\n}\n\nexport type TestimonialEntry = {\n id: string\n slug: string | null\n path: string\n publishedAt: string | null\n status: string\n excerpt: string\n routeId: string | null\n content: TestimonialEntryContent\n}\n\nexport const testimonialsBlockDefinition: SystemBlockDefinition<TestimonialsBlockContent> = {\n manifest: testimonialsManifest,\n dataLoaders,\n}\n","import { cardFragment, columnContentFragment, fragmentsToRepeaterField } from '../fragments';\nimport { fieldSchema, type BlockManifest } from '../manifest/schema';\nimport type { SystemBlockDefinition } from '../registry';\nimport { createBlockManifest } from '../defineBlock';\nimport { typeBasedLayout } from '../node';\nimport { el } from '../node/builder';\nimport { styledSection, sectionContainer } from '../node/fragments';\n\nconst columnsLayout = styledSection({\n children: sectionContainer(\n [\n el('grid',\n {\n cols: {\n $bind: {\n from: 'content.columns',\n transforms: [{ id: 'array.length' }],\n },\n },\n gap: { $bind: { from: 'content.gap' } },\n },\n [\n {\n type: 'stack',\n props: { gap: 'md', className: 'h-full' },\n children: typeBasedLayout(\n {\n card: cardFragment.layout,\n columnContent: columnContentFragment.layout,\n },\n { itemName: 'column' }\n ),\n $repeat: {\n collection: { from: 'content.columns' },\n itemName: 'column',\n },\n },\n ]\n ),\n ],\n { gap: 'md' }\n ),\n spacing: 'medium',\n});\n\nexport const columnsManifest: BlockManifest = createBlockManifest({\n id: 'block.columns',\n title: 'Columns',\n category: 'layout',\n component: 'columns',\n\n // Custom fields for columns configuration\n additionalFields: [\n fieldSchema.parse({\n id: 'gap',\n type: 'select',\n label: 'Gap between columns',\n defaultValue: 'lg',\n options: [\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n ],\n }),\n fragmentsToRepeaterField(\n 'columns',\n 'Columns',\n {\n card: cardFragment,\n columnContent: columnContentFragment,\n },\n {\n minItems: 0,\n maxItems: 4,\n itemLabel: 'Column',\n description: 'Add or remove columns (up to 4)',\n }\n ),\n ],\n\n layout: columnsLayout,\n\n description: 'Multi-column layout with customizable content per column',\n tags: ['columns', 'grid', 'layout', 'flexible', 'multi-column'],\n icon: 'Columns',\n styleTokens: {\n spacing: 'lg',\n },\n});\n\nexport type ColumnsContent = {\n gap?: 'sm' | 'md' | 'lg';\n columns: Array<\n | {\n _type: 'card';\n media?: unknown;\n aspectRatio?: '16/9' | '4/3' | '1/1' | '3/4' | 'auto';\n title: string;\n body?: unknown;\n ctas?: Array<unknown>;\n variant?: string;\n }\n | {\n _type: 'columnContent';\n items: Array<{ _type: string; [key: string]: unknown }>;\n }\n >;\n};\n\nexport const columnsBlockDefinition: SystemBlockDefinition<ColumnsContent> = {\n manifest: columnsManifest,\n};\n","import { z } from \"zod\";\n\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { text, richText, bookingForm } from \"../node/builder\";\nimport { bind, when } from \"../node/builder\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { sectionContainer } from \"../node/fragments\";\n\n/**\n * Appointment Booking Block (v2.0.0)\n *\n * This block creates a multi-step booking flow that references a booking form\n * for customer information fields. The booking form determines which services\n * can be booked and contains all field customization.\n *\n * Flow:\n * 1. Service/Resource Selection (if form allows multiple services)\n * 2. Date & Time Slot Picker (hardcoded, not customizable)\n * 3. Customer Information (from booking form fields)\n * 4. Confirmation\n *\n * The block no longer uses fragment composition - instead it dynamically\n * loads the booking form definition and renders its fields.\n */\nexport const appointmentBookingManifest: BlockManifest = {\n name: \"block.appointment-booking\",\n version: \"2.0.0\", // Major version bump - breaking change from v1\n title: \"Appointment Booking\",\n titleSource: \"heading\",\n description: \"Multi-step appointment booking with customizable form fields\",\n component: \"appointment-booking.block\",\n fields: [\n {\n id: \"formId\",\n type: \"reference\",\n label: \"Booking Form\",\n description: \"Select which booking form to use for collecting customer information\",\n required: true,\n referenceKind: \"bookingForm\",\n allowManualEntry: false,\n },\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Main heading shown at the top of the booking flow\",\n required: false,\n multiline: false,\n defaultValue: \"Book an Appointment\",\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n description: \"Optional description or instructions for users\",\n required: false,\n format: \"markdown\",\n },\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"booking\", \"appointment\", \"calendar\", \"scheduling\", \"reservation\"],\n icon: \"Calendar\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // The booking form component - loads booking form by ID and renders multi-step flow\n bookingForm({\n siteId: { $bind: { from: \"$root.siteId\" } },\n formId: { $bind: { from: \"content.formId\" } },\n form: { $bind: { from: \"data.form\" } },\n services: { $bind: { from: \"data.services\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type AppointmentBookingContent = {\n formId: string; // NEW - reference to booking form\n heading?: string | null;\n description?: unknown; // Rich text\n // REMOVED: serviceId, resourceId, submitLabel, successMessage, timezone\n // These now come from the booking form settings\n};\n\nexport const availabilityDataSchema = z.object({\n slots: z.array(z.object({\n startAt: z.string(),\n endAt: z.string(),\n resourceId: z.string(),\n })),\n});\n\nexport type AvailabilityData = z.infer<typeof availabilityDataSchema>;\n\nexport const appointmentBookingBlockDefinition: SystemBlockDefinition<AppointmentBookingContent> = {\n manifest: appointmentBookingManifest,\n dataSchemas: { availability: availabilityDataSchema.optional() },\n dataLoaders: {\n form: {\n endpoint: 'getPublicFormById',\n params: {\n formId: { $bind: { from: 'content.formId' } },\n },\n mode: 'server',\n },\n services: {\n endpoint: 'getPublicBookingServices',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from 'zod';\n\n/**\n * Zod schema for venue data\n */\nexport const eventVenueSchema = z.object({\n id: z.string(),\n name: z.string(),\n address: z.string().nullable(),\n});\n\n/**\n * Zod schema for public event data\n */\nexport const publicEventSchema = z.object({\n id: z.string(),\n seriesId: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n slug: z.string(),\n startsAt: z.string(),\n endsAt: z.string(),\n capacity: z.number().nullable(),\n registeredCount: z.number(),\n availableSpots: z.number().nullable(),\n venue: eventVenueSchema.nullable(),\n});\n\n/**\n * Schema for an array of public events\n */\nexport const publicEventsArraySchema = z.array(publicEventSchema);\n","import type { BlockManifest } from '../../../manifest/schema';\n\ntype ManifestField = BlockManifest['fields'][number];\n\n/**\n * Shared card styling fields for event blocks\n */\nexport const cardStylingFields: ManifestField[] = [\n {\n id: 'cardVariant',\n type: 'select',\n label: 'Card style',\n description: 'Choose a card style from your theme',\n required: false,\n multiple: false,\n defaultValue: 'default',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'variant1', label: 'Variant 1' },\n { value: 'variant2', label: 'Variant 2' },\n ],\n },\n {\n id: 'buttonVariant',\n type: 'select',\n label: 'Button style',\n description: 'Choose a button style from your theme',\n required: false,\n multiple: false,\n defaultValue: 'primary',\n options: [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n { value: 'link', label: 'Link' },\n ],\n },\n {\n id: 'buttonText',\n type: 'text',\n label: 'Button text',\n description: 'Text for the event action button',\n required: false,\n multiline: false,\n defaultValue: 'View event',\n maxLength: 40,\n },\n];\n\n/**\n * Shared event display option fields\n */\nexport const eventDisplayFields: ManifestField[] = [\n {\n id: 'showVenue',\n type: 'boolean',\n label: 'Show venue',\n description: 'Display venue name and address',\n required: false,\n defaultValue: true,\n },\n {\n id: 'showCapacity',\n type: 'boolean',\n label: 'Show available spots',\n description: 'Display remaining capacity',\n required: false,\n defaultValue: true,\n },\n];\n\n/**\n * Empty state field for when no events are available\n */\nexport const emptyStateField: ManifestField = {\n id: 'emptyMessage',\n type: 'text',\n label: 'Empty state message',\n description: 'Message when no upcoming events',\n required: false,\n multiline: false,\n defaultValue: 'No upcoming events scheduled.',\n maxLength: 200,\n};\n\n/**\n * Section heading and description fields\n */\nexport const sectionHeaderFields = (defaultHeading: string): ManifestField[] => [\n {\n id: 'heading',\n type: 'text',\n label: 'Heading',\n description: 'Main heading for the events section',\n required: false,\n multiline: false,\n defaultValue: defaultHeading,\n },\n {\n id: 'description',\n type: 'richText',\n label: 'Description',\n description: 'Optional introductory text',\n required: false,\n format: 'markdown',\n },\n];\n\n/**\n * Layout selection field with grid/stack options\n */\nexport const layoutField: ManifestField = {\n id: 'layout',\n type: 'select',\n label: 'Layout',\n description: 'Choose how events are displayed',\n required: false,\n multiple: false,\n defaultValue: 'grid',\n options: [\n { value: 'grid', label: 'Grid (cards)' },\n { value: 'stack', label: 'Stack (vertical list)' },\n ],\n};\n\n/**\n * Column count field for grid layouts (conditional on layout='grid')\n */\nexport const columnsField = (options: string[] = ['2', '3', '4']): ManifestField => ({\n id: 'columns',\n type: 'select',\n label: 'Columns',\n description: 'Number of columns in grid layout',\n required: false,\n multiple: false,\n defaultValue: '3',\n ui: {\n visibleWhen: { field: 'layout', equals: 'grid' },\n },\n options: options.map((n) => ({ value: n, label: `${n} columns` })),\n});\n","import { z } from \"zod\";\n\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { text, richText, eventRegistration } from \"../node/builder\";\nimport { bind, when } from \"../node/builder\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { sectionContainer } from \"../node/fragments\";\n// Import shared event types\nimport { publicEventSchema, type PublicEvent } from \"./events/shared\";\n\n/**\n * Event Registration Block\n *\n * Multi-step registration form for events. Can be placed on event content type\n * templates or standalone pages.\n *\n * Features:\n * - Occurrence selection (if not pre-selected via URL)\n * - Ticket quantity selection\n * - Attendee information form\n * - Confirmation display\n *\n * Context:\n * - When placed on an event template with occurrence URL (/events/yoga/2025-01-15),\n * the occurrence is pre-selected from route context\n * - When on event template without occurrence, shows occurrence picker\n * - When standalone, shows full event + occurrence picker\n */\nexport const eventRegistrationManifest: BlockManifest = {\n name: \"block.event-registration\",\n version: \"1.0.0\",\n title: \"Event Registration\",\n titleSource: \"heading\",\n description: \"Multi-step event registration form\",\n component: \"event-registration.block\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Main heading for the registration form\",\n required: false,\n multiline: false,\n defaultValue: \"Register for this event\",\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n description: \"Optional introductory text\",\n required: false,\n format: \"markdown\",\n },\n {\n id: \"maxTickets\",\n type: \"select\",\n label: \"Max tickets per registration\",\n description: \"Maximum tickets a person can register for\",\n required: false,\n multiple: false,\n defaultValue: \"5\",\n options: [\n { value: \"1\", label: \"1 ticket\" },\n { value: \"2\", label: \"2 tickets\" },\n { value: \"3\", label: \"3 tickets\" },\n { value: \"5\", label: \"5 tickets\" },\n { value: \"10\", label: \"10 tickets\" },\n ],\n },\n {\n id: \"showVenue\",\n type: \"boolean\",\n label: \"Show venue\",\n description: \"Display venue information\",\n required: false,\n defaultValue: true,\n },\n {\n id: \"showCapacity\",\n type: \"boolean\",\n label: \"Show available spots\",\n description: \"Display remaining capacity\",\n required: false,\n defaultValue: true,\n },\n {\n id: \"successMessage\",\n type: \"text\",\n label: \"Success message\",\n description: \"Message shown after successful registration\",\n required: false,\n multiline: true,\n defaultValue: \"Thank you for registering! Check your email for confirmation details.\",\n maxLength: 500,\n },\n {\n id: \"waitlistMessage\",\n type: \"text\",\n label: \"Waitlist message\",\n description: \"Message when added to waitlist\",\n required: false,\n multiline: true,\n defaultValue: \"You've been added to the waitlist. We'll notify you if a spot opens up.\",\n maxLength: 500,\n },\n {\n id: \"buttonText\",\n type: \"text\",\n label: \"Submit button text\",\n description: \"Text for the registration submit button\",\n required: false,\n multiline: false,\n defaultValue: \"Complete Registration\",\n maxLength: 40,\n },\n {\n id: \"buttonVariant\",\n type: \"select\",\n label: \"Button style\",\n description: \"Choose a button style from your theme\",\n required: false,\n multiple: false,\n defaultValue: \"primary\",\n options: [\n { value: \"primary\", label: \"Primary\" },\n { value: \"secondary\", label: \"Secondary\" },\n { value: \"outline\", label: \"Outline\" },\n ],\n },\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"registration\", \"booking\", \"form\", \"signup\"],\n icon: \"ClipboardList\",\n layout: [\n styledSection({\n spacing: \"spacious\",\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event registration form component\n eventRegistration({\n // Site context for API calls\n siteId: { $bind: { from: \"$root.siteId\" } },\n // Pre-selected occurrence from route context (if available)\n occurrenceContext: { $bind: { from: \"$root.occurrenceContext\" } },\n // Event data from content entry context (if on event template)\n contentEntry: { $bind: { from: \"$root.contentEntry\" } },\n // Content configuration\n maxTickets: { $bind: { from: \"content.maxTickets\", fallback: \"5\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n successMessage: { $bind: { from: \"content.successMessage\" } },\n waitlistMessage: { $bind: { from: \"content.waitlistMessage\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"Complete Registration\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n // Event data from loader\n events: { $bind: { from: \"data.events\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n }),\n ],\n};\n\nexport type EventRegistrationContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n maxTickets?: \"1\" | \"2\" | \"3\" | \"5\" | \"10\" | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n successMessage?: string | null;\n waitlistMessage?: string | null;\n buttonText?: string | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | null;\n};\n\n// Re-export PublicEvent type for convenience\nexport type { PublicEvent };\n\n/**\n * Schema for occurrence context from route resolver\n *\n * Flat structure passed from PageRenderer.$root.occurrenceContext\n */\nexport const occurrenceContextSchema = z.object({\n /** Unique identifier for this occurrence */\n id: z.string(),\n /** The event series this occurrence belongs to */\n seriesId: z.string(),\n /** ISO 8601 datetime when the occurrence starts */\n startsAt: z.string(),\n /** ISO 8601 datetime when the occurrence ends */\n endsAt: z.string(),\n /** Override capacity for this specific occurrence (null = use series default) */\n capacityOverride: z.number().nullable().optional(),\n /** Field-level overrides: { title?, description?, venueId?, etc. } */\n overrides: z.record(z.string(), z.unknown()).nullable().optional(),\n}).nullable();\n\nexport type OccurrenceContext = z.infer<typeof occurrenceContextSchema>;\n\nexport const eventRegistrationBlockDefinition: SystemBlockDefinition<EventRegistrationContent> = {\n manifest: eventRegistrationManifest,\n dataSchemas: {\n events: z.array(publicEventSchema).optional(),\n occurrenceContext: occurrenceContextSchema.optional(),\n },\n dataLoaders: {\n // Load events for occurrence selection\n // This is needed when block is on a standalone page or event template without occurrence in URL\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: '50', // Get more events for selection\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n layoutField,\n columnsField,\n cardStylingFields,\n eventDisplayFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Spotlight Block\n *\n * Displays a simple list of 1-6 featured upcoming events.\n * Ideal for homepages or landing pages to highlight upcoming events.\n *\n * Features:\n * - Server-side only (static, no interactivity)\n * - Grid or stack layout\n * - Configurable event count (1-6)\n * - Theme-aware card and button styling\n */\nexport const eventSpotlightManifest: BlockManifest = {\n name: \"block.event-spotlight\",\n version: \"1.0.0\",\n title: \"Event Spotlight\",\n titleSource: \"heading\",\n description: \"Feature a few upcoming events on your homepage\",\n component: \"event-spotlight.block\",\n fields: [\n ...sectionHeaderFields(\"Upcoming Events\"),\n {\n id: \"maxEvents\",\n type: \"select\",\n label: \"Events to display\",\n description: \"Number of events to show\",\n required: false,\n multiple: false,\n defaultValue: \"3\",\n options: [\n { value: \"1\", label: \"1 event\" },\n { value: \"2\", label: \"2 events\" },\n { value: \"3\", label: \"3 events\" },\n { value: \"4\", label: \"4 events\" },\n { value: \"5\", label: \"5 events\" },\n { value: \"6\", label: \"6 events\" },\n ],\n },\n layoutField,\n columnsField([\"2\", \"3\"]),\n ...cardStylingFields,\n ...eventDisplayFields,\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"featured\", \"homepage\", \"spotlight\", \"upcoming\"],\n icon: \"Star\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event spotlight component\n el(\"event-spotlight\", {\n events: { $bind: { from: \"data.events\" } },\n layout: { $bind: { from: \"content.layout\", fallback: \"grid\" } },\n columns: { $bind: { from: \"content.columns\", fallback: \"3\" } },\n cardVariant: { $bind: { from: \"content.cardVariant\", fallback: \"default\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"View event\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventSpotlightContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n maxEvents?: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | null;\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | null;\n cardVariant?: \"default\" | \"variant1\" | \"variant2\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n buttonText?: string | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n emptyMessage?: string | null;\n};\n\nexport const eventSpotlightBlockDefinition: SystemBlockDefinition<EventSpotlightContent> = {\n manifest: eventSpotlightManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: { $bind: { from: 'content.maxEvents', fallback: '3' } },\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n layoutField,\n columnsField,\n cardStylingFields,\n eventDisplayFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Listing Block\n *\n * Displays a paginated list of events with a \"load more\" button.\n * Ideal for dedicated events pages showing all upcoming events.\n *\n * Features:\n * - Server-side initial load\n * - Client-side \"load more\" pagination\n * - Grid or stack layout\n * - Configurable initial load and page sizes\n * - Theme-aware card and button styling\n */\nexport const eventListingManifest: BlockManifest = {\n name: \"block.event-listing\",\n version: \"1.0.0\",\n title: \"Event Listing\",\n titleSource: \"heading\",\n description: \"Paginated list of all upcoming events\",\n component: \"event-listing.block\",\n fields: [\n ...sectionHeaderFields(\"All Events\"),\n layoutField,\n columnsField([\"2\", \"3\", \"4\"]),\n {\n id: \"eventsPerPage\",\n type: \"select\",\n label: \"Events per page\",\n description: \"Number of events to load at a time\",\n required: false,\n multiple: false,\n defaultValue: \"12\",\n options: [\n { value: \"6\", label: \"6 events\" },\n { value: \"12\", label: \"12 events\" },\n { value: \"24\", label: \"24 events\" },\n ],\n },\n {\n id: \"loadMoreText\",\n type: \"text\",\n label: \"Load more button text\",\n description: \"Text for the pagination button\",\n required: false,\n multiline: false,\n defaultValue: \"Load more events\",\n maxLength: 40,\n },\n ...cardStylingFields,\n ...eventDisplayFields,\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"listing\", \"paginated\", \"archive\", \"all-events\"],\n icon: \"List\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event listing component with pagination\n el(\"event-listing\", {\n events: { $bind: { from: \"data.events\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n layout: { $bind: { from: \"content.layout\", fallback: \"grid\" } },\n columns: { $bind: { from: \"content.columns\", fallback: \"3\" } },\n eventsPerPage: { $bind: { from: \"content.eventsPerPage\", fallback: \"12\" } },\n loadMoreText: { $bind: { from: \"content.loadMoreText\", fallback: \"Load more events\" } },\n cardVariant: { $bind: { from: \"content.cardVariant\", fallback: \"default\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"View event\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventListingContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | \"4\" | null;\n eventsPerPage?: \"6\" | \"12\" | \"24\" | null;\n loadMoreText?: string | null;\n cardVariant?: \"default\" | \"variant1\" | \"variant2\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n buttonText?: string | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n emptyMessage?: string | null;\n};\n\nexport const eventListingBlockDefinition: SystemBlockDefinition<EventListingContent> = {\n manifest: eventListingManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: { $bind: { from: 'content.eventsPerPage', fallback: '12' } },\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n cardStylingFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Calendar Block\n *\n * Displays events in an interactive month or week calendar grid.\n * Users can navigate between time periods to view events.\n *\n * Features:\n * - Month and week calendar views\n * - Interactive navigation (prev/next/today)\n * - Pre-fetches 3 months for smooth navigation\n * - Configurable week start day\n * - Theme-aware styling\n */\nexport const eventCalendarManifest: BlockManifest = {\n name: \"block.event-calendar\",\n version: \"2.0.0\",\n title: \"Event Calendar\",\n titleSource: \"heading\",\n description: \"Interactive calendar showing events by month or week\",\n component: \"event-calendar.block\",\n fields: [\n ...sectionHeaderFields(\"Event Calendar\"),\n {\n id: \"calendarView\",\n type: \"select\",\n label: \"Default view\",\n description: \"Initial calendar view\",\n required: false,\n multiple: false,\n defaultValue: \"month\",\n options: [\n { value: \"month\", label: \"Month\" },\n { value: \"week\", label: \"Week\" },\n ],\n },\n {\n id: \"startOfWeek\",\n type: \"select\",\n label: \"Week starts on\",\n description: \"First day of the week\",\n required: false,\n multiple: false,\n defaultValue: \"monday\",\n options: [\n { value: \"sunday\", label: \"Sunday\" },\n { value: \"monday\", label: \"Monday\" },\n ],\n },\n ...cardStylingFields.filter(f => f.id === 'buttonVariant'), // Only button variant for calendar\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"calendar\", \"month\", \"week\", \"schedule\", \"interactive\"],\n icon: \"CalendarDays\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event calendar grid component\n el(\"event-calendar\", {\n events: { $bind: { from: \"data.events\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n calendarView: { $bind: { from: \"content.calendarView\", fallback: \"month\" } },\n startOfWeek: { $bind: { from: \"content.startOfWeek\", fallback: \"monday\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventCalendarContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n calendarView?: \"month\" | \"week\" | null;\n startOfWeek?: \"sunday\" | \"monday\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n emptyMessage?: string | null;\n};\n\nexport const eventCalendarBlockDefinition: SystemBlockDefinition<EventCalendarContent> = {\n manifest: eventCalendarManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n // Pre-fetch 3 months of events (server-side)\n // The client will use the same API to fetch more as user navigates\n limit: 100, // High limit for calendar view\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from \"zod\";\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest, FieldDefinition } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { stack, text, bind, when, repeat, el } from \"../node/builder\";\nimport { styledSection, sectionContainer } from \"../node/fragments\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { textColorStyle } from \"../../theme/utils/colorStyles\";\n\n/**\n * Embed block - enables embedding content entries from any content type.\n *\n * This block is designed to be overridden by SDK sites. The default layout\n * is a simple placeholder that shows basic entry information. Sites should\n * use blockOverrides to provide custom renderers based on content.layout.\n *\n * Example SDK usage:\n * ```tsx\n * <Page\n * {...pageData}\n * blockOverrides={{\n * embed: EmbedRenderer,\n * }}\n * />\n * ```\n *\n * The EmbedRenderer receives:\n * - content: EmbedContent with heading, layout, contentType, etc.\n * - data: { entries: ContentEntry[] }\n * - theme: Theme tokens\n */\n\n// Additional fields for the embed block\nconst embedFields: FieldDefinition[] = [\n // Section heading\n fieldSchema.parse({\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional section title displayed above the content.\",\n required: false,\n maxLength: 120,\n }),\n fieldSchema.parse({\n id: \"subheading\",\n type: \"richText\",\n label: \"Subheading\",\n description: \"Optional section description below the heading.\",\n required: false,\n format: \"markdown\",\n ui: { variant: \"limited\" },\n }),\n\n // Content source\n fieldSchema.parse({\n id: \"contentType\",\n type: \"contentTypeSelect\",\n label: \"Content type\",\n description: \"Select the content type to embed.\",\n required: true,\n filter: \"all\",\n }),\n fieldSchema.parse({\n id: \"mode\",\n type: \"select\",\n label: \"Selection mode\",\n description: \"How to select which entries to display.\",\n required: true,\n defaultValue: \"query\",\n options: [\n { value: \"query\", label: \"Query (automatic)\" },\n { value: \"manual\", label: \"Manual (pick entries)\" },\n ],\n }),\n\n // Query mode options\n fieldSchema.parse({\n id: \"limit\",\n type: \"select\",\n label: \"Limit\",\n description: \"Maximum number of entries to display.\",\n defaultValue: \"10\",\n options: [\n { value: \"3\", label: \"3 entries\" },\n { value: \"6\", label: \"6 entries\" },\n { value: \"10\", label: \"10 entries\" },\n { value: \"20\", label: \"20 entries\" },\n { value: \"50\", label: \"50 entries\" },\n ],\n ui: {\n visibleWhen: { field: \"mode\", equals: \"query\" },\n },\n }),\n fieldSchema.parse({\n id: \"orderBy\",\n type: \"select\",\n label: \"Order by\",\n description: \"How to sort the entries.\",\n defaultValue: \"order\",\n options: [\n { value: \"order\", label: \"Custom order field\" },\n { value: \"newest\", label: \"Newest first\" },\n { value: \"oldest\", label: \"Oldest first\" },\n { value: \"title\", label: \"Title (A-Z)\" },\n ],\n ui: {\n visibleWhen: { field: \"mode\", equals: \"query\" },\n },\n }),\n\n // Manual mode options - entry references\n fieldSchema.parse({\n id: \"entries\",\n type: \"repeater\",\n label: \"Entries\",\n description: \"Select specific entries to display.\",\n required: false,\n itemLabel: \"Entry\",\n minItems: 1,\n maxItems: 20,\n schema: {\n fields: [\n {\n id: \"entryId\",\n type: \"entryPicker\",\n label: \"Entry\",\n description: \"Select a content entry to embed.\",\n required: true,\n ui: {\n contentTypeField: \"contentType\",\n },\n },\n ],\n },\n ui: {\n visibleWhen: { field: \"mode\", equals: \"manual\" },\n },\n }),\n\n // Layout selection - SDK sites can provide custom options via blockFieldOptions\n fieldSchema.parse({\n id: \"layout\",\n type: \"select\",\n label: \"Layout\",\n description: \"Select a layout style for displaying the embedded content.\",\n defaultValue: \"list\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n { value: \"carousel\", label: \"Carousel\" },\n ],\n ui: {\n widget: \"sdkSelect\", // Use SDK-aware widget for site-specific options\n },\n }),\n\n // Empty state\n fieldSchema.parse({\n id: \"emptyMessage\",\n type: \"text\",\n label: \"Empty state message\",\n description: \"Message shown when no entries are available.\",\n defaultValue: \"No entries found.\",\n maxLength: 200,\n }),\n];\n\n// Default layout - a simple placeholder that sites should override\nconst embedLayout = styledSection({\n children: sectionContainer([\n // Heading\n text(\n {\n as: \"h2\",\n className: \"text-3xl font-bold\",\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"content.heading\"),\n when(\"content.heading\"),\n ),\n\n // Subheading\n el(\n \"richText\",\n {\n className: \"mt-2 text-lg\",\n style: textColorStyle(\"neutral-600\"),\n },\n undefined,\n bind(\"content.subheading\"),\n when(\"content.subheading\"),\n ),\n\n // Default entry rendering - a simple list\n // Sites should override this with custom layouts via blockOverrides\n // Outer stack provides gap between repeated entry cards\n stack(\n { gap: \"md\", className: \"mt-8\" },\n [\n // Entry card (repeated for each entry)\n stack(\n {\n gap: \"sm\",\n className: \"rounded-lg border border-neutral-200 bg-white p-4 shadow-sm\",\n },\n [\n text(\n {\n as: \"h3\",\n className: \"text-lg font-semibold\",\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"entry.title\"),\n ),\n text(\n {\n as: \"p\",\n className: \"text-sm\",\n style: textColorStyle(\"neutral-500\"),\n },\n bind(\"entry.slug\"),\n when(\"entry.slug\"),\n ),\n ],\n repeat(\"data.entries\", \"entry\"),\n ),\n ],\n when(\"data.entries\"),\n ),\n\n // Empty state\n stack(\n {\n gap: \"sm\",\n className: \"py-12 text-center\",\n },\n [\n text(\n {\n as: \"p\",\n className: \"text-base\",\n style: textColorStyle(\"neutral-400\"),\n },\n bind(\"content.emptyMessage\", { fallback: \"No entries found.\" }),\n ),\n ],\n when(\"data.entries\", { not: true }),\n ),\n ]),\n spacing: \"comfortable\",\n});\n\nexport const embedManifest: BlockManifest = createBlockManifest({\n id: \"block.embed\",\n title: \"Embed Content\",\n category: \"content\",\n titleSource: \"heading\",\n\n additionalFields: embedFields,\n layout: embedLayout,\n\n description:\n \"Embed content entries from any content type. Sites provide custom layouts via block overrides.\",\n tags: [\"embed\", \"content\", \"dynamic\", \"collection\", \"entries\", \"listing\"],\n icon: \"LayoutList\",\n styleTokens: {\n spacing: \"lg\",\n },\n});\n\nexport type EmbedContent = {\n // Section heading\n heading?: string | null;\n subheading?: unknown; // TipTap richText\n\n // Content source\n contentType: string;\n mode: \"query\" | \"manual\";\n\n // Query mode options\n limit?: string | null;\n orderBy?: \"order\" | \"newest\" | \"oldest\" | \"title\" | null;\n\n // Manual mode options\n entries?: Array<{ entryId: string }> | null;\n\n // Layout\n layout?: string | null;\n\n // Empty state\n emptyMessage?: string | null;\n};\n\nexport type EmbedEntry = {\n id: string;\n title: string;\n slug?: string | null;\n content?: Record<string, unknown>;\n publishedAt?: string | null;\n};\n\nconst embedEntrySchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string().nullable().optional(),\n content: z.record(z.string(), z.unknown()).optional(),\n publishedAt: z.string().nullable().optional(),\n});\n\nexport const embedBlockDefinition: SystemBlockDefinition<EmbedContent> = {\n manifest: embedManifest,\n dataSchemas: {\n entries: z.array(embedEntrySchema).optional(),\n },\n dataLoaders: {\n entries: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: { $bind: { from: \"contentType\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"limit\", fallback: \"10\" } },\n orderBy: { $bind: { from: \"orderBy\", fallback: \"order\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n // Manual mode entry IDs - loader should handle this\n entryIds: { $bind: { from: \"entries\" } },\n mode: { $bind: { from: \"mode\" } },\n },\n mode: \"server\",\n },\n },\n};\n","import { registerBlockDefinition, type SystemBlockDefinition } from \"../registry\";\nimport { heroBlockDefinition } from \"./hero\";\nimport { bodyTextBlockDefinition } from \"./body-text\";\nimport { blogPostBlockDefinition } from \"./blog-post\";\nimport { blogPlaceholderBlockDefinition } from \"./blog-placeholder\";\nimport { blogListingBlockDefinition } from \"./blog-listing\";\nimport { ctaFullBlockDefinition } from \"./cta-full\";\nimport { formBlockDefinition } from \"./form\";\nimport { faqBlockDefinition } from \"./faq\";\nimport { siteHeaderBlockDefinition } from \"./site-header\";\nimport { siteFooterBlockDefinition } from \"./site-footer\";\nimport { testimonialsBlockDefinition } from \"./testimonials\";\nimport { columnsBlockDefinition } from \"./columns\";\nimport { appointmentBookingBlockDefinition } from \"./appointment-booking\";\nimport { eventRegistrationBlockDefinition } from \"./event-registration\";\nimport {\n eventSpotlightBlockDefinition,\n eventListingBlockDefinition,\n eventCalendarBlockDefinition,\n} from \"./events\";\nimport { embedBlockDefinition } from \"./embed\";\n\nexport const systemBlockDefinitions: SystemBlockDefinition<any>[] = [\n heroBlockDefinition,\n bodyTextBlockDefinition,\n blogPostBlockDefinition,\n blogPlaceholderBlockDefinition,\n blogListingBlockDefinition,\n ctaFullBlockDefinition,\n formBlockDefinition,\n faqBlockDefinition,\n siteHeaderBlockDefinition,\n siteFooterBlockDefinition,\n testimonialsBlockDefinition,\n columnsBlockDefinition,\n appointmentBookingBlockDefinition,\n eventRegistrationBlockDefinition,\n // Event display blocks (3 specialized blocks)\n eventSpotlightBlockDefinition,\n eventListingBlockDefinition,\n eventCalendarBlockDefinition,\n // Content embedding\n embedBlockDefinition,\n];\n\nlet defaultsRegistered = false;\n\nexport function ensureSystemBlockDefinitionsRegistered(): void {\n if (defaultsRegistered) {\n return;\n }\n defaultsRegistered = true;\n for (const definition of systemBlockDefinitions) {\n registerBlockDefinition(definition);\n }\n}\n\nexport function resetSystemBlockDefinitionRegistration(): void {\n defaultsRegistered = false;\n}\n\nexport * from \"./hero\";\nexport * from \"./body-text\";\nexport * from \"./blog-post\";\nexport * from \"./blog-placeholder\";\nexport * from \"./blog-listing\";\nexport * from \"./cta-full\";\nexport * from \"./form\";\nexport * from \"./faq\";\nexport * from \"./site-header\";\nexport * from \"./site-footer\";\nexport * from \"./testimonials\";\nexport * from \"./columns\";\nexport * from \"./appointment-booking\";\nexport * from \"./event-registration\";\nexport * from \"./events\";\nexport * from \"./embed\";\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport type { BlockManifest } from \"./manifest\";\nimport { registerManifest } from \"./manifest\";\nimport { ensureSystemBlockDefinitionsRegistered, resetSystemBlockDefinitionRegistration } from \"./blocks\";\nimport type { ResolverContext } from \"./runtime\";\nimport type { ThemeTokens } from \"./theme\";\nimport type { TransformRegistry } from \"./transforms\";\nimport type { Theme } from \"../theme/schema\";\n\nexport type BlockRenderOptions = Omit<ResolverContext, \"viewModel\">;\n\n// Unified render options used by helpers (prefer this over per-block options)\nexport type RenderOptions = Partial<BlockRenderOptions> & {\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n themeConfig?: Theme;\n};\n\nexport type SystemBlockRenderer<TContent = Record<string, unknown>> = (\n content: TContent,\n options?: RenderOptions\n) => ReactNode;\n\n// Legacy loader cache types removed with new registry adoption\n\nexport type SystemBlockComponentProps<\n TContent = Record<string, unknown>\n> = {\n content: TContent;\n theme?: ThemeTokens;\n themeConfig?: Theme;\n registry?: ResolverContext[\"registry\"];\n transforms?: TransformRegistry;\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n // Optional base path for binding-derived editor paths, e.g., `blocks.<blockId>.`\n pathBase?: string;\n // Optional block metadata for editor-aware registries\n blockId?: string | null;\n blockKind?: string;\n // Optional template bindings for reverse field mapping (entry editing)\n blockBindings?: Record<string, unknown>;\n // Optional fragment registry for fragment renderer nodes\n fragmentRegistry?: ResolverContext[\"fragmentRegistry\"];\n};\n\nexport type SystemBlockComponent<\n TContent = Record<string, unknown>\n> = ComponentType<\n SystemBlockComponentProps<TContent>\n>;\n\nexport type BlockDataLoader = {\n endpoint: string;\n params: Record<string, unknown>;\n mode?: 'server' | 'client';\n};\n\nexport type SystemBlockDefinition<\n TContent = Record<string, unknown>\n> = {\n manifest: BlockManifest;\n normalizeContent?: (content: unknown) => TContent;\n dataSchemas?: Record<string, z.ZodTypeAny>;\n dataLoaders?: Record<string, BlockDataLoader>;\n};\n\ntype BlockDefinitionMap = Map<string, SystemBlockDefinition<any>>;\n\nexport type BlockDescriptor = {\n name: string;\n title: string;\n description?: string;\n category?: string;\n contentTypes?: string[];\n tags?: string[];\n icon?: string;\n definition: SystemBlockDefinition<any>;\n /** Where this block comes from: 'system' for built-in blocks, 'sdk' for custom SDK blocks */\n source?: 'system' | 'sdk';\n};\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@riverbankcms/blocks/system/definitions\");\n\ninterface BlockRegistryGlobal extends Record<PropertyKey, unknown> {\n [REGISTRY_SYMBOL]?: BlockDefinitionMap;\n}\n\nconst globalScope = globalThis as BlockRegistryGlobal;\n\nif (!globalScope[REGISTRY_SYMBOL]) {\n globalScope[REGISTRY_SYMBOL] = new Map();\n}\n\nconst blockStore = globalScope[REGISTRY_SYMBOL]!;\n\nfunction ensureDefaults(): void {\n ensureSystemBlockDefinitionsRegistered();\n}\n\nexport function registerBlockDefinition<TContent>(\n definition: SystemBlockDefinition<TContent>,\n): SystemBlockDefinition<TContent> {\n registerManifest(definition.manifest);\n blockStore.set(definition.manifest.name, definition);\n return definition;\n}\n\nexport function getBlockDefinition(name: string): SystemBlockDefinition<any> | undefined {\n ensureDefaults();\n return blockStore.get(name);\n}\n\nexport function hasBlockDefinition(name: string): boolean {\n ensureDefaults();\n return blockStore.has(name);\n}\n\nexport function listBlockDefinitions(): SystemBlockDefinition<any>[] {\n ensureDefaults();\n return Array.from(blockStore.values());\n}\n\nexport function listBlockDescriptors(): BlockDescriptor[] {\n return listBlockDefinitions()\n .filter((d) => d.manifest.behaviours?.paletteHidden !== true)\n .map((definition) => ({\n name: definition.manifest.name,\n title: definition.manifest.title,\n description: definition.manifest.description,\n category: definition.manifest.category,\n contentTypes: definition.manifest.contentTypes,\n tags: definition.manifest.tags,\n icon: definition.manifest.icon,\n definition,\n source: 'system' as const,\n }));\n}\n\nexport function clearBlockDefinitions(): void {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env === \"production\") {\n return;\n }\n blockStore.clear();\n resetSystemBlockDefinitionRegistration();\n}\n","/**\n * System block kind identifiers.\n * Single source of truth - derive types from this array.\n *\n * Note: Block IDs use mixed naming conventions (camelCase and kebab-case)\n * for historical reasons. New blocks should prefer camelCase.\n */\nexport const SYSTEM_BLOCK_KINDS = [\n // Layout blocks\n 'block.hero',\n 'block.columns',\n 'block.ctaFull',\n 'block.singleButton',\n // Content blocks\n 'block.bodyText',\n 'block.faq',\n 'block.testimonials',\n 'block.embed',\n // Blog blocks\n 'block.blogPost',\n 'block.blogPlaceholder',\n 'block.blogListing',\n // Site structure blocks\n 'block.siteHeader',\n 'block.siteFooter',\n // Form/booking blocks\n 'block.form',\n 'block.appointment-booking',\n 'block.event-registration',\n // Event display blocks\n 'block.event-spotlight',\n 'block.event-listing',\n 'block.event-calendar',\n] as const;\n\n/** System block kind type derived from the const array */\nexport type SystemBlockKind = (typeof SYSTEM_BLOCK_KINDS)[number];\n\n/** Custom block kinds follow the `custom.${string}` pattern */\nexport type CustomBlockKind = `custom.${string}`;\n\n/** Union of all valid block kinds */\nexport type BlockKind = SystemBlockKind | CustomBlockKind;\n","/**\n * SDK Content Config Validation\n *\n * Zod schemas for validating SDK content configuration.\n */\n\nimport { z } from 'zod';\nimport { SYSTEM_BLOCK_KINDS } from '../types';\nimport type { ContentConfig, ContentTypeConfig } from './content-types';\n\n// Use looseObject for data fields that can contain arbitrary values\nconst jsonDataSchema = z.record(z.string(), z.any());\n\n// ============================================================================\n// Content Type Schema\n// ============================================================================\n\n/**\n * Content type key validation.\n * Must be lowercase, start with a letter, and contain only letters, numbers, and hyphens.\n */\nconst contentTypeKeySchema = z\n .string()\n .min(1)\n .regex(\n /^[a-z][a-z0-9-]*$/,\n 'Key must be lowercase, start with a letter, and contain only letters, numbers, and hyphens'\n );\n\n/**\n * Content type config schema.\n */\nexport const contentTypeConfigSchema: z.ZodType<ContentTypeConfig> = z\n .object({\n key: contentTypeKeySchema,\n name: z.string().min(1),\n description: z.string().optional(),\n hasPages: z.boolean(),\n routePattern: z.string().optional(),\n // Fields are validated as any[] here - deep field validation happens in @riverbankcms/blocks\n fields: z.array(z.any()).min(1, 'At least one field is required'),\n titleField: z.string().optional(),\n isSingleton: z.boolean().optional().default(false),\n })\n .refine(\n (data) => {\n // If hasPages is true, routePattern must be provided\n // For non-singletons, routePattern must contain {slug}\n // For singletons, routePattern can be a fixed path (no {slug} required)\n if (data.hasPages) {\n if (!data.routePattern) {\n return false;\n }\n // Non-singleton routable types require {slug} placeholder\n if (!data.isSingleton && !data.routePattern.includes('{slug}')) {\n return false;\n }\n }\n return true;\n },\n {\n message:\n 'routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder.',\n }\n )\n .refine(\n (data) => {\n // If hasPages is false, routePattern must NOT be defined\n if (!data.hasPages && data.routePattern) {\n return false;\n }\n return true;\n },\n { message: 'routePattern must not be defined when hasPages is false' }\n ) as z.ZodType<ContentTypeConfig>;\n\n// ============================================================================\n// Block Config Schema\n// ============================================================================\n\n/**\n * Block kind validation.\n * Must be either a system block kind (e.g., 'block.hero') or a custom block kind (e.g., 'custom.myBlock').\n */\nconst blockKindSchema = z.string().refine(\n (kind) => {\n // Check if it's a system block kind\n if ((SYSTEM_BLOCK_KINDS as readonly string[]).includes(kind)) {\n return true;\n }\n // Check if it's a custom block kind (custom.${string})\n if (kind.startsWith('custom.') && kind.length > 7) {\n return true;\n }\n return false;\n },\n {\n message:\n 'Block kind must be a system block (e.g., \"block.hero\") or a custom block (e.g., \"custom.myBlock\")',\n }\n);\n\nexport const blockConfigSchema = z.object({\n kind: blockKindSchema,\n content: jsonDataSchema,\n orderIndex: z.number().optional(),\n});\n\n// ============================================================================\n// Page Config Schema\n// ============================================================================\n\nexport const pageConfigSchema = z.object({\n identifier: z.string().min(1, 'Identifier is required'),\n title: z.string().min(1, 'Title is required'),\n path: z.string().regex(/^\\//, 'Path must start with /'),\n purpose: z.string().default('content'),\n blocks: z.array(blockConfigSchema).optional(),\n status: z.enum(['draft', 'published']).default('draft'),\n metaTitle: z.string().optional(),\n metaDescription: z.string().optional(),\n});\n\n// ============================================================================\n// Entry Config Schema\n// ============================================================================\n\nexport const entryConfigSchema = z.object({\n identifier: z.string().min(1, 'Identifier is required'),\n contentType: z.string().min(1, 'Content type is required'),\n data: jsonDataSchema,\n status: z.enum(['draft', 'published']).default('draft'),\n slug: z.string().optional(),\n title: z.string().optional(),\n summary: z.string().optional(),\n metaTitle: z.string().optional(),\n metaDescription: z.string().optional(),\n});\n\n// ============================================================================\n// Navigation Config Schema\n// ============================================================================\n\nconst pageLinkSchema = z.object({\n kind: z.literal('page'),\n identifier: z.string().min(1),\n});\n\nconst entryLinkSchema = z.object({\n kind: z.literal('entry'),\n identifier: z.string().min(1),\n});\n\nconst externalLinkSchema = z.object({\n kind: z.literal('external'),\n href: z.string().url('Invalid URL'),\n});\n\nconst dropdownLinkSchema = z.object({\n kind: z.literal('dropdown'),\n});\n\nconst navigationLinkSchema = z.discriminatedUnion('kind', [\n pageLinkSchema,\n entryLinkSchema,\n externalLinkSchema,\n dropdownLinkSchema,\n]);\n\n// Navigation item with recursive children support\nconst baseNavigationItemSchema = z.object({\n label: z.string().min(1, 'Label is required'),\n link: navigationLinkSchema,\n isCta: z.boolean().optional(),\n});\n\n// Using z.lazy for recursive type\nexport const navigationItemConfigSchema: z.ZodType<{\n label: string;\n link:\n | { kind: 'page'; identifier: string }\n | { kind: 'entry'; identifier: string }\n | { kind: 'external'; href: string }\n | { kind: 'dropdown' };\n isCta?: boolean;\n children?: Array<{\n label: string;\n link:\n | { kind: 'page'; identifier: string }\n | { kind: 'entry'; identifier: string }\n | { kind: 'external'; href: string }\n | { kind: 'dropdown' };\n isCta?: boolean;\n children?: unknown[];\n }>;\n}> = baseNavigationItemSchema.extend({\n children: z.lazy(() => z.array(navigationItemConfigSchema)).optional(),\n});\n\nexport const navigationMenuConfigSchema = z.object({\n identifier: z.string().min(1, 'Identifier is required'),\n name: z.string().min(1, 'Name is required'),\n isPrimary: z.boolean().optional(),\n items: z.array(navigationItemConfigSchema),\n});\n\n// ============================================================================\n// Site Settings Schema\n// ============================================================================\n\nexport const siteSettingsConfigSchema = z.object({\n homepagePath: z.string().optional(),\n siteTitle: z.string().optional(),\n siteDescription: z.string().optional(),\n defaultTemplates: z.record(z.string(), z.string()).optional(),\n});\n\n// ============================================================================\n// Complete Content Config Schema\n// ============================================================================\n\nconst contentConfigBaseSchema = z.object({\n contentTypes: z.array(contentTypeConfigSchema).optional(),\n entries: z.array(entryConfigSchema).optional(),\n pages: z.array(pageConfigSchema).optional(),\n navigationMenus: z.array(navigationMenuConfigSchema).optional(),\n settings: siteSettingsConfigSchema.optional(),\n});\n\nexport const contentConfigSchema: z.ZodType<ContentConfig> = contentConfigBaseSchema\n .superRefine((data, ctx) => {\n // Validate unique content type keys\n if (data.contentTypes && data.contentTypes.length > 1) {\n const keys = data.contentTypes.map((ct) => ct.key);\n const duplicateKeys = keys.filter((key, i) => keys.indexOf(key) !== i);\n if (duplicateKeys.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Content type keys must be unique. Duplicates: ${duplicateKeys.join(', ')}`,\n path: ['contentTypes'],\n });\n }\n }\n\n // Validate unique page identifiers\n if (data.pages && data.pages.length > 1) {\n const identifiers = data.pages.map((p) => p.identifier);\n const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);\n if (duplicateIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Page identifiers must be unique. Duplicates: ${duplicateIds.join(', ')}`,\n path: ['pages'],\n });\n }\n\n // Validate unique page paths\n const paths = data.pages.map((p) => p.path);\n const duplicatePaths = paths.filter((path, i) => paths.indexOf(path) !== i);\n if (duplicatePaths.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Page paths must be unique. Duplicates: ${duplicatePaths.join(', ')}`,\n path: ['pages'],\n });\n }\n }\n\n // Validate unique entry identifiers\n if (data.entries && data.entries.length > 1) {\n const identifiers = data.entries.map((e) => e.identifier);\n const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);\n if (duplicateIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Entry identifiers must be unique. Duplicates: ${duplicateIds.join(', ')}`,\n path: ['entries'],\n });\n }\n }\n\n // Validate unique navigation menu identifiers\n if (data.navigationMenus && data.navigationMenus.length > 1) {\n const identifiers = data.navigationMenus.map((m) => m.identifier);\n const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);\n if (duplicateIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Navigation menu identifiers must be unique. Duplicates: ${duplicateIds.join(', ')}`,\n path: ['navigationMenus'],\n });\n }\n }\n\n // Validate singleton content types have at most one entry\n if (data.contentTypes && data.entries) {\n const singletonKeys = new Set(\n data.contentTypes.filter((ct) => ct.isSingleton).map((ct) => ct.key)\n );\n\n for (const singletonKey of singletonKeys) {\n const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);\n if (entriesForType.length > 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Singleton content type \"${singletonKey}\" cannot have more than one entry. Found ${entriesForType.length} entries.`,\n path: ['entries'],\n });\n }\n }\n }\n }) as z.ZodType<ContentConfig>;\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type ContentTypeConfigInput = z.input<typeof contentTypeConfigSchema>;\nexport type ContentTypeConfigOutput = z.output<typeof contentTypeConfigSchema>;\n\nexport type PageConfigInput = z.input<typeof pageConfigSchema>;\nexport type PageConfigOutput = z.output<typeof pageConfigSchema>;\n\nexport type EntryConfigInput = z.input<typeof entryConfigSchema>;\nexport type EntryConfigOutput = z.output<typeof entryConfigSchema>;\n\nexport type NavigationMenuConfigInput = z.input<typeof navigationMenuConfigSchema>;\nexport type NavigationMenuConfigOutput = z.output<typeof navigationMenuConfigSchema>;\n\nexport type ContentConfigInput = z.input<typeof contentConfigSchema>;\nexport type ContentConfigOutput = z.output<typeof contentConfigSchema>;\n","/**\n * SDK wrapper for block data prefetching.\n * Uses the shared core implementation from @riverbankcms/blocks with the SDK client.\n */\n\nimport type { BlockDataLoader, PageOutline, SdkCustomBlock } from '@riverbankcms/blocks';\nimport { prefetchBlockData as prefetchBlockDataCore } from '@riverbankcms/blocks/system/data';\nimport type { PrefetchContext, ResolvedBlockData } from '@riverbankcms/blocks/system/data';\nimport type { RiverbankClient } from '../client/types';\n\nexport type { PrefetchContext, ResolvedBlockData };\n\n/**\n * Supported loader endpoints for SDK data fetching.\n * Only these endpoints can be used in block data loaders when using the SDK.\n *\n * This is the SINGLE SOURCE OF TRUTH for whitelisted endpoints.\n * - Zod validation schema derives from this array\n * - TypeScript types derive from this array\n * - Runtime validation uses this array\n */\nexport const SUPPORTED_LOADER_ENDPOINTS = [\n 'listPublishedEntries',\n 'getPublishedEntryPreview',\n 'listPublicEvents',\n 'getPublicFormById',\n 'getPublicBookingServices',\n] as const;\n\n/**\n * Union type of all supported loader endpoints.\n * Derived from SUPPORTED_LOADER_ENDPOINTS array.\n */\nexport type SupportedLoaderEndpoint = typeof SUPPORTED_LOADER_ENDPOINTS[number];\n\n/**\n * Options for SDK block data prefetching.\n */\nexport type SdkPrefetchOptions = {\n /**\n * SDK custom blocks from site config.\n * Used to look up data loaders for custom.* blocks.\n */\n customBlocks?: SdkCustomBlock[];\n};\n\n/**\n * Prefetch block data for SDK-based applications.\n * Maps loader endpoints to corresponding SDK client methods.\n *\n * Supports both system blocks and SDK custom blocks with data loaders.\n *\n * @example\n * ```typescript\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n * import { prefetchBlockData } from '@riverbankcms/sdk/data';\n *\n * const client = createRiverbankClient({ apiKey, baseUrl });\n * const page = await client.getPage({ siteId, path: '/' });\n *\n * // Basic usage (system blocks only)\n * const blockData = await prefetchBlockData(page.outline, {\n * siteId: page.siteId,\n * pageId: page.id,\n * }, client);\n *\n * // With custom blocks from SDK config\n * const blockData = await prefetchBlockData(page.outline, context, client, {\n * customBlocks: site.sdkConfig?.customBlocks,\n * });\n * ```\n */\nexport async function prefetchBlockData(\n page: PageOutline,\n context: PrefetchContext,\n client: RiverbankClient,\n options?: SdkPrefetchOptions,\n): Promise<ResolvedBlockData> {\n const { customBlocks } = options ?? {};\n\n // Build lookup map for custom block loaders\n // Key is string (blockKind from page) matching block.id (custom.xxx)\n const customBlockMap = new Map<string, SdkCustomBlock>(\n (customBlocks ?? []).map((block) => [block.id as string, block])\n );\n\n return prefetchBlockDataCore(page, context, {\n apiClient: async ({ endpoint, params }) => {\n // Only support whitelisted loader endpoints\n if (!isSupportedEndpoint(endpoint)) {\n throw new Error(\n `Unsupported loader endpoint: ${endpoint}. ` +\n `SDK only supports: ${SUPPORTED_LOADER_ENDPOINTS.join(', ')}`\n );\n }\n\n // Map endpoint to SDK client method\n switch (endpoint) {\n case 'listPublishedEntries': {\n const { siteId, type, orderBy, limit, stage, mode, entryIds } = params ?? {};\n if (!siteId || !type) {\n throw new Error('listPublishedEntries requires siteId and type params');\n }\n\n // Parse limit if provided (can come as string from bindings)\n const parsedLimit = typeof limit === 'string'\n ? Number.parseInt(limit, 10)\n : typeof limit === 'number'\n ? limit\n : undefined;\n\n // Map orderBy to order param (matching embed block field values)\n const order = (orderBy === 'newest' || orderBy === 'oldest' || orderBy === 'title' || orderBy === 'order')\n ? orderBy as 'newest' | 'oldest' | 'title' | 'order'\n : undefined;\n\n // Extract entry IDs for manual mode\n // entryIds comes from binding to entries field which contains { entryId: \"uuid\" } objects\n let parsedEntryIds: string[] | undefined;\n if (mode === 'manual' && Array.isArray(entryIds)) {\n parsedEntryIds = entryIds\n .map((item: unknown) => {\n if (typeof item === 'object' && item !== null && 'entryId' in item) {\n return (item as { entryId: string }).entryId;\n }\n // Also support direct string IDs\n if (typeof item === 'string') {\n return item;\n }\n return null;\n })\n .filter((id): id is string => id !== null);\n }\n\n return await client.getEntries({\n siteId,\n contentType: type,\n limit: parsedLimit,\n order,\n preview: stage === 'preview',\n // Manual mode - pass entry IDs for hydration\n mode: mode === 'manual' ? 'manual' : undefined,\n entryIds: parsedEntryIds,\n });\n }\n\n case 'getPublishedEntryPreview': {\n const { siteId, type, slug } = params ?? {};\n if (!siteId || !type || !slug) {\n throw new Error('getPublishedEntryPreview requires siteId, type, and slug params');\n }\n return await client.getEntry({ siteId, contentType: type, slug });\n }\n case 'listPublicEvents': {\n const { siteId, limit, from, to, stage } = params ?? {};\n if (!siteId) {\n throw new Error('listPublicEvents requires siteId param');\n }\n const parsedLimit =\n typeof limit === 'string'\n ? Number.parseInt(limit, 10)\n : typeof limit === 'number'\n ? limit\n : undefined;\n return await client.listPublicEvents({ siteId, limit: parsedLimit, from, to, stage });\n }\n case 'getPublicFormById': {\n const { formId } = params ?? {};\n if (!formId) {\n throw new Error('getPublicFormById requires formId param');\n }\n return await client.getPublicFormById({ formId });\n }\n case 'getPublicBookingServices': {\n const { siteId, ids } = params ?? {};\n if (!siteId) {\n throw new Error('getPublicBookingServices requires siteId param');\n }\n return await client.getPublicBookingServices({ siteId, ids });\n }\n\n default: {\n // TypeScript should never reach here due to isSupportedEndpoint check\n const _exhaustive: never = endpoint;\n throw new Error(`Unhandled endpoint: ${_exhaustive}`);\n }\n }\n },\n isValidEndpoint: isSupportedEndpoint,\n onError: (error, { block, loader }) => {\n console.warn('[prefetchBlockData] failed to prefetch block data', {\n block,\n loader,\n error,\n });\n },\n // Provide custom block loader lookup for SDK custom blocks\n getCustomBlockLoaders: (blockKind): Record<string, BlockDataLoader> | undefined => {\n const customBlock = customBlockMap.get(blockKind);\n if (!customBlock?.dataLoaders) return undefined;\n\n // Convert SdkConfigLoader to BlockDataLoader\n // SdkConfigLoader.endpoint is SdkLoaderEndpoint (string union) -> string\n // SdkConfigLoader.params is Record<string, LoaderParamValue> -> Record<string, unknown>\n // Both are structurally compatible via covariance\n const loaders: Record<string, BlockDataLoader> = {};\n for (const [key, loader] of Object.entries(customBlock.dataLoaders)) {\n loaders[key] = {\n endpoint: loader.endpoint,\n params: loader.params,\n mode: loader.mode,\n };\n }\n return loaders;\n },\n });\n}\n\n/**\n * Type guard for supported loader endpoints\n */\nfunction isSupportedEndpoint(endpoint: string): endpoint is SupportedLoaderEndpoint {\n return SUPPORTED_LOADER_ENDPOINTS.includes(endpoint as SupportedLoaderEndpoint);\n}\n","/**\n * Zod validation schemas for SDK site configuration.\n *\n * These schemas are used to validate configuration fetched from\n * SDK sites before storing in the database.\n */\n\nimport { z } from 'zod';\nimport { blockCategoryEnum, fieldSchema, getBlockDefinition, type SdkCustomBlock, type FieldDefinition } from '@riverbankcms/blocks';\nimport type { RiverbankSiteConfig, BlockFieldOptionsMap, BlockFieldExtensionsMap, BlockFieldExtension, SyncConfig } from './types';\nimport { contentConfigSchema } from './content-validation';\n\n// Re-export content schemas for convenience\nexport { contentConfigSchema } from './content-validation';\nexport type { ContentConfigInput, ContentConfigOutput } from './content-validation';\n\n/**\n * Schema for SDK theme palette.\n * Maps token names to CSS color values.\n */\nexport const sdkThemePaletteSchema = z.record(z.string(), z.string());\n\n/**\n * Schema for SDK theme configuration.\n */\nexport const sdkThemeConfigSchema = z.object({\n palette: sdkThemePaletteSchema,\n});\n\n/**\n * Schema for SDK site URLs (previewUrl, liveUrl).\n * - Must be valid URL format\n * - Production URLs must use HTTPS (HTTP allowed for localhost/dev)\n * - Trailing slashes are stripped\n */\nexport const sdkSiteUrlSchema = z.string()\n .url('Must be a valid URL')\n .refine((url) => {\n try {\n const parsed = new URL(url);\n const isLocal = ['localhost', 'lvh.me'].includes(parsed.hostname)\n || parsed.hostname.endsWith('.local')\n || parsed.hostname.endsWith('.test')\n || parsed.hostname.endsWith('.lvh.me');\n return parsed.protocol === 'https:' || isLocal;\n } catch {\n return false;\n }\n }, { message: 'Production URLs must use HTTPS' })\n .transform((url) => url.replace(/\\/$/, '')); // Strip trailing slash\n\n/**\n * Schema for section background color options.\n */\nexport const sectionBackgroundSchema = z.object({\n id: z.string(),\n label: z.string(),\n token: z.string(), // Reference to theme palette token\n});\n\n/**\n * Schema for section spacing values.\n */\nexport const sectionSpacingSchema = z.enum(['compact', 'default', 'spacious']);\n\n/**\n * Schema for container max-width values.\n */\nexport const containerMaxWidthSchema = z.enum(['narrow', 'default', 'wide', 'full']);\n\n/**\n * Schema for container alignment values.\n */\nexport const containerAlignmentSchema = z.enum(['left', 'center', 'right']);\n\n/**\n * Schema for section options configuration.\n */\nexport const sectionOptionsSchema = z.object({\n backgroundColor: z.boolean().optional(),\n backgroundImage: z.boolean().optional(),\n backgroundGradient: z.boolean().optional(),\n spacing: z.union([\n z.array(sectionSpacingSchema),\n z.boolean(),\n ]).optional(),\n textColor: z.boolean().optional(),\n}).optional();\n\n/**\n * Schema for container options configuration.\n */\nexport const containerOptionsSchema = z.object({\n maxWidth: z.union([\n z.array(containerMaxWidthSchema),\n z.boolean(),\n ]).optional(),\n alignment: z.union([\n z.array(containerAlignmentSchema),\n z.boolean(),\n ]).optional(),\n}).optional();\n\n/**\n * Schema for site style configuration.\n */\nexport const siteStyleConfigSchema = z.object({\n sectionBackgrounds: z.array(sectionBackgroundSchema).optional(),\n sectionOptions: sectionOptionsSchema,\n containerOptions: containerOptionsSchema,\n}).optional();\n\n// ============================================================================\n// Data Loader Schemas\n// ============================================================================\n\nimport { SUPPORTED_LOADER_ENDPOINTS } from '../data/prefetchBlockData';\n\n/**\n * Whitelisted endpoints for SDK data loaders.\n *\n * These are the only CMS endpoints that can be called from config-based loaders.\n * This ensures SDK sites can only access safe, read-only public endpoints.\n *\n * Derived from SUPPORTED_LOADER_ENDPOINTS - the single source of truth.\n */\nexport const sdkLoaderEndpointSchema = z.enum(SUPPORTED_LOADER_ENDPOINTS);\n\n/**\n * A binding expression for dynamic loader params.\n *\n * @example\n * ```typescript\n * { $bind: { from: 'content.categoryId' } }\n * { $bind: { from: '$root.siteId' } }\n * { $bind: { from: 'content.limit', fallback: '10' } }\n * ```\n */\nexport const loaderParamBindingSchema = z.object({\n $bind: z.object({\n from: z.string().min(1, \"Binding path is required\"),\n fallback: z.string().optional(),\n }),\n});\n\n/**\n * A loader param value can be static or a binding expression.\n */\nexport const loaderParamValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n loaderParamBindingSchema,\n]);\n\n/**\n * Schema for config-based data loader.\n *\n * Config loaders execute server-side during loadPage() and are\n * restricted to whitelisted CMS endpoints.\n */\nexport const sdkConfigLoaderSchema = z.object({\n endpoint: sdkLoaderEndpointSchema,\n params: z.record(z.string(), loaderParamValueSchema),\n mode: z.enum(['server', 'client']).default('server'),\n});\n\n/**\n * Schema for the dataLoaders field on custom blocks.\n * Validates the loader configuration and limits the number of loaders.\n */\nexport const sdkDataLoadersSchema = z.record(z.string(), sdkConfigLoaderSchema)\n .refine(\n (loaders) => Object.keys(loaders).length <= 5,\n { message: \"Maximum 5 data loaders per block\" }\n )\n .optional();\n\n// ============================================================================\n// Custom Block Schema\n// ============================================================================\n\n/**\n * Schema for field select option.\n */\nexport const fieldSelectOptionSchema = z.object({\n value: z.string().min(1, \"Option value is required\"),\n label: z.string().min(1, \"Option label is required\"),\n});\n\n/**\n * Schema for per-field configuration within a block.\n */\nexport const blockFieldConfigSchema = z.object({\n options: z.array(fieldSelectOptionSchema).min(1, \"At least one option is required\").optional(),\n});\n\n/**\n * Schema for per-block field options.\n *\n * Block IDs must be either 'block.*' (system blocks) or 'custom.*' (custom blocks).\n * Field IDs can be any valid identifier string.\n */\nexport const blockFieldOptionsSchema: z.ZodType<BlockFieldOptionsMap> = z.record(\n z.string().regex(/^(block\\.|custom\\.)[a-z][a-z0-9-]*$/, {\n message: \"Block ID must be 'block.*' or 'custom.*' format\",\n }),\n z.record(\n z.string().min(1, \"Field ID is required\"),\n blockFieldConfigSchema\n )\n).optional() as z.ZodType<BlockFieldOptionsMap>;\n\n// ============================================================================\n// Block Field Extensions Schema\n// ============================================================================\n\n/**\n * Schema for block field extension configuration.\n *\n * Validates additional fields to be appended to a built-in block.\n * Includes refinement to ensure required fields have defaultValue.\n *\n * Note: Explicit type annotation required due to recursive fieldSchema complexity.\n */\nexport const blockFieldExtensionSchema: z.ZodType<BlockFieldExtension> = z.object({\n fields: fieldSchema.array().min(1, \"At least one field is required\"),\n}).refine(\n (data) => {\n // All required fields must have a defaultValue\n return data.fields.every((field: FieldDefinition) => {\n if (!field.required) return true;\n return field.defaultValue !== undefined;\n });\n },\n {\n message: \"Required fields must have a defaultValue to support existing blocks\",\n }\n) as z.ZodType<BlockFieldExtension>;\n\n/**\n * Schema for block field extensions map.\n *\n * Block IDs must be system blocks (e.g., 'block.bodyText', 'block.hero').\n * Custom blocks ('custom.*') should define their fields directly, not via extensions.\n */\nexport const blockFieldExtensionsSchema: z.ZodType<BlockFieldExtensionsMap | undefined> = z.record(\n z.string().regex(/^block\\.[a-z][a-zA-Z0-9]*$/, {\n message: \"Block ID must be 'block.*' format (system blocks only)\",\n }),\n blockFieldExtensionSchema\n).optional() as z.ZodType<BlockFieldExtensionsMap | undefined>;\n\n/**\n * Validates that extended field IDs don't conflict with existing block fields.\n *\n * This validation should be called during config push to provide clear error messages.\n * Returns an array of conflict errors, or empty array if valid.\n *\n * @example\n * ```typescript\n * const conflicts = validateFieldIdConflicts(config.blockFieldExtensions);\n * if (conflicts.length > 0) {\n * throw new Error(conflicts.map(c => c.message).join('\\n'));\n * }\n * ```\n */\nexport function validateFieldIdConflicts(\n blockFieldExtensions?: BlockFieldExtensionsMap | null\n): { blockId: string; fieldId: string; message: string }[] {\n if (!blockFieldExtensions) return [];\n\n const conflicts: { blockId: string; fieldId: string; message: string }[] = [];\n\n for (const [blockId, extension] of Object.entries(blockFieldExtensions)) {\n const definition = getBlockDefinition(blockId);\n if (!definition) {\n conflicts.push({\n blockId,\n fieldId: '',\n message: `Unknown block type: ${blockId}`,\n });\n continue;\n }\n\n // Get all existing field IDs from the block manifest\n const existingFieldIds = new Set<string>();\n const collectFieldIds = (fields: FieldDefinition[] | undefined) => {\n if (!fields) return;\n for (const field of fields) {\n existingFieldIds.add(field.id);\n // Also collect nested field IDs from groups, modals, repeaters, tab groups\n if (field.type === 'group' || field.type === 'modal') {\n collectFieldIds(field.schema?.fields);\n } else if (field.type === 'repeater' && field.schema?.fields) {\n collectFieldIds(field.schema.fields);\n } else if (field.type === 'tabGroup') {\n for (const tab of field.tabs ?? []) {\n collectFieldIds(tab.fields);\n }\n }\n }\n };\n collectFieldIds(definition.manifest.fields);\n\n // Check for conflicts\n for (const field of extension.fields) {\n if (existingFieldIds.has(field.id)) {\n conflicts.push({\n blockId,\n fieldId: field.id,\n message: `Field ID \"${field.id}\" conflicts with existing field in ${blockId}`,\n });\n }\n }\n }\n\n return conflicts;\n}\n\n// ============================================================================\n// Sync Config Schema\n// ============================================================================\n\n/**\n * Schema for sync configuration.\n *\n * Controls how CLI push operations handle content synchronization.\n */\nexport const syncConfigSchema: z.ZodType<SyncConfig> = z.object({\n existingEntries: z.enum(['skip', 'update']).optional(),\n contentTarget: z.enum(['draft', 'publish']).optional(),\n}).optional() as z.ZodType<SyncConfig>;\n\n/**\n * Schema for SDK custom block definitions.\n *\n * Validates custom blocks defined in riverbank.config.ts.\n * Reuses fieldSchema from @riverbankcms/blocks for field validation.\n *\n * Note: Explicit type annotation required due to recursive fieldSchema complexity.\n */\nexport const sdkCustomBlockSchema: z.ZodType<SdkCustomBlock> = z.object({\n // Block ID must start with 'custom.'\n id: z.string()\n .min(8) // 'custom.' + at least 1 char\n .regex(/^custom\\.[a-z][a-z0-9-]*$/, {\n message: \"Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens\",\n }),\n title: z.string().min(1, \"Title is required\"),\n titleSource: z.string().optional(),\n description: z.string().optional(),\n category: blockCategoryEnum,\n icon: z.string().optional(),\n tags: z.array(z.string()).optional(),\n // Reuse the exact field schema from @riverbankcms/blocks - all field types supported\n fields: fieldSchema.array().min(1, \"Custom blocks must have at least one field\"),\n // Data loaders for CMS endpoints\n dataLoaders: sdkDataLoadersSchema,\n}).refine(\n // Validate titleSource references a valid field if provided\n (data) => {\n if (!data.titleSource) return true;\n return data.fields.some(f => f.id === data.titleSource);\n },\n {\n message: \"titleSource must reference a valid field ID\",\n path: [\"titleSource\"],\n }\n) as z.ZodType<SdkCustomBlock>;\n\n/**\n * Schema for the complete SDK site configuration.\n *\n * Use this schema to validate configuration fetched from SDK sites\n * before storing in the database.\n *\n * @example\n * ```typescript\n * import { riverbankSiteConfigSchema } from '@riverbankcms/sdk/config/validation';\n *\n * const rawConfig = await response.json();\n * const config = riverbankSiteConfigSchema.parse(rawConfig);\n * ```\n */\nexport const riverbankSiteConfigSchema: z.ZodType<RiverbankSiteConfig> = z.object({\n siteId: z.string().uuid(),\n previewUrl: sdkSiteUrlSchema.optional(),\n liveUrl: sdkSiteUrlSchema.optional(),\n theme: sdkThemeConfigSchema.optional(),\n styles: siteStyleConfigSchema,\n customBlocks: z.array(sdkCustomBlockSchema)\n .max(20, \"Maximum 20 custom blocks per site\")\n .refine(\n // Ensure unique block IDs\n (blocks) => {\n const ids = blocks.map(b => b.id);\n return ids.length === new Set(ids).size;\n },\n { message: \"Block IDs must be unique\" }\n )\n .optional(),\n blockFieldOptions: blockFieldOptionsSchema,\n blockFieldExtensions: blockFieldExtensionsSchema,\n content: contentConfigSchema.optional(),\n // CLI-related configuration (Phase 4)\n contentDir: z.string().optional(),\n sync: syncConfigSchema,\n}).strict() as z.ZodType<RiverbankSiteConfig>;\n\n/**\n * Type inferred from the validation schema.\n * This should match the RiverbankSiteConfig type from ./types.ts\n */\nexport type ValidatedRiverbankSiteConfig = z.infer<typeof riverbankSiteConfigSchema>;\n\n/**\n * Type for a validated SDK custom block.\n */\nexport type ValidatedSdkCustomBlock = z.infer<typeof sdkCustomBlockSchema>;\n\n// ============================================================================\n// Compile-time type assertions\n//\n// These assertions ensure the Zod schemas stay in sync with the TypeScript types.\n// If the schema output diverges from the expected type, TypeScript will error here.\n// ============================================================================\n\n/** Asserts sdkCustomBlockSchema output matches SdkCustomBlock */\ntype _AssertSdkCustomBlockSchema = z.infer<typeof sdkCustomBlockSchema> extends SdkCustomBlock\n ? SdkCustomBlock extends z.infer<typeof sdkCustomBlockSchema>\n ? true\n : never\n : never;\n\n/** Asserts riverbankSiteConfigSchema output matches RiverbankSiteConfig */\ntype _AssertRiverbankSiteConfigSchema = z.infer<typeof riverbankSiteConfigSchema> extends RiverbankSiteConfig\n ? RiverbankSiteConfig extends z.infer<typeof riverbankSiteConfigSchema>\n ? true\n : never\n : never;\n\n// These assignments will fail to compile if the types don't match\nconst _checkSdkCustomBlock: _AssertSdkCustomBlockSchema = true;\nconst _checkRiverbankSiteConfig: _AssertRiverbankSiteConfigSchema = true;\n\n// Prevent unused variable warnings\nvoid _checkSdkCustomBlock;\nvoid _checkRiverbankSiteConfig;\n","/**\n * push-config CLI command\n *\n * Pushes SDK site configuration from a riverbank.config.ts file to the dashboard API.\n */\n\nimport { Command } from 'commander';\nimport { riverbankSiteConfigSchema, validateFieldIdConflicts } from '../config/validation';\nimport { loadConfigFile } from './load-config';\n\ninterface PushConfigOptions {\n config?: string;\n apiKey?: string;\n dashboard: string;\n}\n\n/**\n * Push config to dashboard API\n */\nasync function pushToDashboard(\n dashboardUrl: string,\n siteId: string,\n apiKey: string,\n config: unknown\n): Promise<void> {\n const pushUrl = `${dashboardUrl}/api/sites/${siteId}/sdk-config`;\n console.log(`Pushing config to ${pushUrl}...`);\n\n let response: Response;\n try {\n response = await fetch(pushUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ config }),\n signal: AbortSignal.timeout(30000),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(`Failed to connect to dashboard: ${message}`);\n }\n\n if (!response.ok) {\n let errorMessage = `Dashboard returned ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody.error) {\n errorMessage = errorBody.error;\n if (errorBody.details) {\n errorMessage += ':\\n' + errorBody.details\n .map((d: { path: string; message: string }) => ` - ${d.path}: ${d.message}`)\n .join('\\n');\n }\n }\n } catch {\n // Use default error message if JSON parsing fails\n }\n throw new Error(errorMessage);\n }\n}\n\n/**\n * Main push-config action\n */\nasync function pushConfigAction(options: PushConfigOptions & { isRemote: boolean }): Promise<void> {\n try {\n // 1. Load config from file\n const rawConfig = await loadConfigFile(options.config);\n\n // 2. Validate config\n console.log('Validating config...');\n const parseResult = riverbankSiteConfigSchema.safeParse(rawConfig);\n if (!parseResult.success) {\n console.error('Invalid config:');\n for (const issue of parseResult.error.issues) {\n console.error(` - ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n\n // 2b. Validate field ID conflicts for blockFieldExtensions\n const conflicts = validateFieldIdConflicts(parseResult.data.blockFieldExtensions);\n if (conflicts.length > 0) {\n console.error('Field ID conflicts detected in blockFieldExtensions:');\n for (const conflict of conflicts) {\n console.error(` - ${conflict.message}`);\n }\n process.exit(1);\n }\n\n const { siteId } = parseResult.data;\n\n // 3. Push to dashboard (send full config, dashboard will verify siteId matches)\n const apiKey = resolveManagementApiKey(options.apiKey, options.isRemote);\n\n await pushToDashboard(options.dashboard, siteId, apiKey, parseResult.data);\n\n console.log('Config pushed successfully!');\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\n/**\n * Resolve dashboard URL from CLI option or environment variable.\n * Requires one of them to be set.\n */\nfunction resolveDashboardUrl(cliOption: string | undefined, isRemote: boolean): string {\n const envVar = isRemote ? 'RIVERBANK_REMOTE_DASHBOARD_URL' : 'RIVERBANK_LOCAL_DASHBOARD_URL';\n const url = cliOption || process.env[envVar];\n if (!url) {\n console.error('Error: Dashboard URL is required.');\n console.error(`Provide --dashboard <url> or set ${envVar} environment variable.`);\n process.exit(1);\n }\n return url;\n}\n\n/**\n * Resolve management API key from CLI option or environment variable.\n */\nfunction resolveManagementApiKey(cliOption: string | undefined, isRemote: boolean): string {\n const envVar = isRemote ? 'RIVERBANK_REMOTE_MGMT_API_KEY' : 'RIVERBANK_LOCAL_MGMT_API_KEY';\n const apiKey = cliOption || process.env[envVar];\n\n if (!apiKey) {\n console.error('Error: Management API key is required.');\n console.error(`Provide --api-key <key> or set ${envVar} environment variable.`);\n process.exit(1);\n }\n\n if (!apiKey.startsWith('bld_mgmt_sk_')) {\n console.error(`Error: Invalid management API key format for ${envVar}.`);\n console.error('Expected key starting with bld_mgmt_sk_.');\n process.exit(1);\n }\n\n return apiKey;\n}\n\n/**\n * push-config command definition\n */\nexport const pushConfigCommand = new Command('push-config')\n .description('Push SDK config to dashboard')\n .option('--api-key <key>', 'Management API key (or set RIVERBANK_*_MGMT_API_KEY)')\n .option('--dashboard <url>', 'Dashboard URL (or set RIVERBANK_*_DASHBOARD_URL env var)')\n .option('--config <path>', 'Path to config file (default: ./riverbank.config.ts)')\n .addHelpText('after', `\nDescription:\n Syncs your local riverbank.config.ts to the CMS dashboard, including:\n - Custom blocks\n - Block field extensions\n - Block field options\n - Content types, pages, entries, and navigation\n\nExamples:\n $ npx riverbankcms push-config\n $ npx riverbankcms push-config --api-key bld_mgmt_sk_... --dashboard https://www.riverbankcms.com\n $ npx riverbankcms push-config --config ./src/riverbank.config.ts\n`)\n .action((options: Omit<PushConfigOptions, 'dashboard'> & { dashboard?: string }, command) => {\n const globalOpts = command.optsWithGlobals<{ remote?: boolean }>();\n const isRemote = globalOpts.remote ?? false;\n const dashboard = resolveDashboardUrl(options.dashboard, isRemote);\n return pushConfigAction({ ...options, dashboard, isRemote });\n });\n","/**\n * HTTP Client for Management Operations\n *\n * Provides typed HTTP client for SDK management endpoints.\n */\n\nimport type { ManagementClientConfig, ApiResponse } from './types';\n\n/**\n * Error thrown when management API request fails\n */\nexport class ManagementApiError extends Error {\n readonly code: string;\n readonly details?: unknown;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n code: string,\n details?: unknown,\n statusCode?: number\n ) {\n super(message);\n this.name = 'ManagementApiError';\n this.code = code;\n this.details = details;\n this.statusCode = statusCode;\n }\n}\n\n/**\n * HTTP client interface for management operations\n */\nexport interface HttpClient {\n get<T>(path: string, params?: Record<string, string>): Promise<T>;\n post<T>(path: string, body?: unknown): Promise<T>;\n patch<T>(path: string, body?: unknown): Promise<T>;\n delete(path: string, body?: unknown): Promise<void>;\n}\n\n/**\n * Create HTTP client for management API\n */\nexport function createHttpClient(config: ManagementClientConfig): HttpClient {\n const baseUrl = `${config.dashboardUrl}/api/sdk/${config.siteId}`;\n const timeout = config.timeout ?? 30000;\n\n /**\n * Make HTTP request to management API\n */\n async function request<T>(\n method: 'GET' | 'POST' | 'PATCH' | 'DELETE',\n path: string,\n options?: {\n params?: Record<string, string>;\n body?: unknown;\n }\n ): Promise<T> {\n let url = `${baseUrl}${path}`;\n\n // Add query params for GET requests\n if (options?.params && Object.keys(options.params).length > 0) {\n const searchParams = new URLSearchParams(options.params);\n url = `${url}?${searchParams.toString()}`;\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${config.managementApiKey}`,\n 'Content-Type': 'application/json',\n };\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal: AbortSignal.timeout(timeout),\n };\n\n if (options?.body && method !== 'GET') {\n fetchOptions.body = JSON.stringify(options.body);\n }\n\n let response: Response;\n try {\n response = await fetch(url, fetchOptions);\n } catch (error) {\n if (error instanceof Error && error.name === 'TimeoutError') {\n throw new ManagementApiError(\n `Request timed out after ${timeout}ms`,\n 'sdk:timeout',\n undefined,\n undefined\n );\n }\n throw new ManagementApiError(\n error instanceof Error ? error.message : 'Network request failed',\n 'sdk:network-error',\n undefined,\n undefined\n );\n }\n\n // Handle non-JSON responses\n const contentType = response.headers.get('content-type');\n if (!contentType?.includes('application/json')) {\n if (!response.ok) {\n throw new ManagementApiError(\n `Request failed with status ${response.status}`,\n 'sdk:http-error',\n undefined,\n response.status\n );\n }\n // Return empty for successful non-JSON responses (like DELETE)\n return undefined as T;\n }\n\n const json = await response.json() as ApiResponse<T>;\n\n // Handle error responses\n if (!response.ok || !json.success) {\n if ('error' in json && json.error) {\n throw new ManagementApiError(\n json.error.message,\n json.error.code,\n json.error.details,\n response.status\n );\n }\n throw new ManagementApiError(\n `Request failed with status ${response.status}`,\n 'sdk:http-error',\n undefined,\n response.status\n );\n }\n\n return json.data;\n }\n\n return {\n async get<T>(path: string, params?: Record<string, string>): Promise<T> {\n return request<T>('GET', path, { params });\n },\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return request<T>('POST', path, { body });\n },\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return request<T>('PATCH', path, { body });\n },\n\n async delete(path: string, body?: unknown): Promise<void> {\n await request<void>('DELETE', path, { body });\n },\n };\n}\n","/**\n * Entry Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n EntryOperations,\n ManagementEntry,\n EntryUpsertInput,\n PaginatedResult,\n PaginationOptions,\n} from './types';\n\nexport function createEntryOperations(http: HttpClient): EntryOperations {\n return {\n async list(\n contentType: string,\n options?: PaginationOptions\n ): Promise<PaginatedResult<ManagementEntry>> {\n const params: Record<string, string> = {};\n if (options?.page) params.page = String(options.page);\n if (options?.limit) params.limit = String(options.limit);\n\n return http.get<PaginatedResult<ManagementEntry>>(\n `/entries/${encodeURIComponent(contentType)}`,\n params\n );\n },\n\n async get(\n contentType: string,\n identifier: string\n ): Promise<ManagementEntry | null> {\n try {\n return await http.get<ManagementEntry>(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(input: EntryUpsertInput): Promise<ManagementEntry> {\n return http.post<ManagementEntry>('/entries', input);\n },\n\n async publish(contentType: string, identifier: string): Promise<void> {\n await http.post<void>(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}/publish`\n );\n },\n\n async unpublish(contentType: string, identifier: string): Promise<void> {\n await http.post<void>(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}/unpublish`\n );\n },\n\n async delete(contentType: string, identifier: string): Promise<void> {\n await http.delete(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}`\n );\n },\n };\n}\n","/**\n * Page Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n PageOperations,\n ManagementPage,\n PageUpsertInput,\n PaginatedResult,\n PaginationOptions,\n} from './types';\n\nexport function createPageOperations(http: HttpClient): PageOperations {\n return {\n async list(options?: PaginationOptions): Promise<PaginatedResult<ManagementPage>> {\n const params: Record<string, string> = {};\n if (options?.page) params.page = String(options.page);\n if (options?.limit) params.limit = String(options.limit);\n\n return http.get<PaginatedResult<ManagementPage>>('/pages', params);\n },\n\n async get(identifier: string): Promise<ManagementPage | null> {\n try {\n return await http.get<ManagementPage>(\n `/pages/${encodeURIComponent(identifier)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(input: PageUpsertInput): Promise<ManagementPage> {\n return http.post<ManagementPage>('/pages', input);\n },\n\n async publish(identifier: string): Promise<void> {\n await http.post<void>(`/pages/${encodeURIComponent(identifier)}/publish`);\n },\n\n async unpublish(identifier: string): Promise<void> {\n await http.post<void>(`/pages/${encodeURIComponent(identifier)}/unpublish`);\n },\n };\n}\n","/**\n * Block Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n BlockOperations,\n ManagementBlock,\n BlockUpsertInput,\n} from './types';\n\nexport function createBlockOperations(http: HttpClient): BlockOperations {\n return {\n async list(pageIdentifier: string): Promise<ManagementBlock[]> {\n const result = await http.get<{ blocks: ManagementBlock[] }>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks`\n );\n return result.blocks;\n },\n\n async get(\n pageIdentifier: string,\n blockIdentifier: string\n ): Promise<ManagementBlock | null> {\n try {\n return await http.get<ManagementBlock>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks/${encodeURIComponent(blockIdentifier)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(\n pageIdentifier: string,\n input: BlockUpsertInput\n ): Promise<ManagementBlock> {\n return http.post<ManagementBlock>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks`,\n input\n );\n },\n\n async reorder(\n pageIdentifier: string,\n blockIdentifiers: string[]\n ): Promise<void> {\n await http.post<void>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks/reorder`,\n { order: blockIdentifiers }\n );\n },\n\n async delete(\n pageIdentifier: string,\n blockIdentifier: string\n ): Promise<void> {\n await http.delete(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks/${encodeURIComponent(blockIdentifier)}`\n );\n },\n };\n}\n","/**\n * Navigation Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n NavigationOperations,\n ManagementNavigationMenu,\n NavigationMenuUpsertInput,\n} from './types';\n\nexport function createNavigationOperations(http: HttpClient): NavigationOperations {\n return {\n async list(): Promise<ManagementNavigationMenu[]> {\n const result = await http.get<{ menus: ManagementNavigationMenu[] }>('/navigation');\n return result.menus;\n },\n\n async get(name: string): Promise<ManagementNavigationMenu | null> {\n try {\n return await http.get<ManagementNavigationMenu>(\n `/navigation/${encodeURIComponent(name)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(input: NavigationMenuUpsertInput): Promise<ManagementNavigationMenu> {\n return http.post<ManagementNavigationMenu>('/navigation', input);\n },\n };\n}\n","/**\n * Settings Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type { SettingsOperations, ManagementSettings, SettingsUpdateInput } from './types';\n\nexport function createSettingsOperations(http: HttpClient): SettingsOperations {\n return {\n async get(): Promise<ManagementSettings> {\n const result = await http.get<{ settings: ManagementSettings }>('/pull/settings');\n return result.settings;\n },\n\n async update(input: SettingsUpdateInput): Promise<ManagementSettings> {\n const result = await http.patch<{ settings: ManagementSettings }>('/settings', input);\n return result.settings;\n },\n };\n}\n","/**\n * Pull Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n PullOperations,\n PulledEntries,\n PulledPages,\n PulledNavigation,\n PulledSettings,\n PulledContent,\n PaginationOptions,\n} from './types';\n\nexport function createPullOperations(http: HttpClient): PullOperations {\n return {\n async entries(\n contentType?: string,\n options?: PaginationOptions\n ): Promise<PulledEntries> {\n const params: Record<string, string> = {};\n if (options?.page) params.page = String(options.page);\n if (options?.limit) params.limit = String(options.limit);\n\n if (contentType) {\n return http.get<PulledEntries>(\n `/pull/entries/${encodeURIComponent(contentType)}`,\n params\n );\n }\n\n // If no content type specified, return all entries aggregated\n // The API will return all content types in a single response\n return http.get<PulledEntries>('/pull/entries', params);\n },\n\n async pages(): Promise<PulledPages> {\n return http.get<PulledPages>('/pull/pages');\n },\n\n async navigation(): Promise<PulledNavigation> {\n return http.get<PulledNavigation>('/pull/navigation');\n },\n\n async settings(): Promise<PulledSettings> {\n return http.get<PulledSettings>('/pull/settings');\n },\n\n async all(): Promise<PulledContent> {\n // Fetch all content in parallel\n const [entriesResult, pagesResult, navigationResult, settingsResult] = await Promise.all([\n http.get<{ entries: Record<string, PulledEntries['entries']>; meta?: { entries?: Record<string, any>; truncated?: boolean; truncationMessage?: string } }>('/pull/entries/all'),\n http.get<PulledPages>('/pull/pages'),\n http.get<PulledNavigation>('/pull/navigation'),\n http.get<PulledSettings>('/pull/settings'),\n ]);\n\n return {\n entries: entriesResult?.entries || {},\n pages: pagesResult?.pages || [],\n navigation: navigationResult?.menus || [],\n settings: settingsResult?.settings || {},\n meta: {\n pulledAt: new Date().toISOString(),\n entries: entriesResult?.meta?.entries,\n truncated: entriesResult?.meta?.truncated,\n truncationMessage: entriesResult?.meta?.truncationMessage,\n },\n };\n },\n };\n}\n","/**\n * Preview Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type { PreviewOperations, BlockPreviewRequest, BlockPreviewResponse } from './types';\n\nexport function createPreviewOperations(http: HttpClient): PreviewOperations {\n return {\n async block(input: BlockPreviewRequest): Promise<BlockPreviewResponse> {\n return http.post<BlockPreviewResponse>('/preview/block', input);\n },\n };\n}\n","/**\n * Identifiers Operations\n *\n * Operations for managing SDK identifiers on pages, blocks, and entries.\n */\n\nimport type { HttpClient } from './http';\nimport type { IdentifiersOperations, BackfillResult } from './types';\n\n/**\n * Create identifiers operations\n */\nexport function createIdentifiersOperations(http: HttpClient): IdentifiersOperations {\n return {\n async backfill(): Promise<BackfillResult> {\n // http.post already unwraps json.data, so we return directly\n return http.post<BackfillResult>('/identifiers/backfill');\n },\n };\n}\n","/**\n * Management Client Factory\n *\n * Creates a typed SDK client for management operations (pull/push content).\n *\n * @example\n * ```typescript\n * import { createManagementClient } from '@riverbankcms/sdk/client/management';\n *\n * const client = createManagementClient({\n * dashboardUrl: 'http://localhost:4000',\n * managementApiKey: 'bld_mgmt_sk_...',\n * siteId: 'your-site-id',\n * });\n *\n * // Pull content\n * const entries = await client.pull.entries('blog-post');\n *\n * // Upsert entry\n * await client.entries.upsert({\n * identifier: 'my-post',\n * contentType: 'blog-post',\n * data: { title: 'Hello World' },\n * });\n *\n * // Publish entry\n * await client.entries.publish('blog-post', 'my-post');\n * ```\n */\n\nimport type { ManagementClient, ManagementClientConfig } from './types';\nimport { createHttpClient } from './http';\nimport { createEntryOperations } from './entries';\nimport { createPageOperations } from './pages';\nimport { createBlockOperations } from './blocks';\nimport { createNavigationOperations } from './navigation';\nimport { createSettingsOperations } from './settings';\nimport { createPullOperations } from './pull';\nimport { createPreviewOperations } from './preview';\nimport { createIdentifiersOperations } from './identifiers';\n\n/**\n * Create a management client for SDK operations\n *\n * @param config - Client configuration\n * @returns ManagementClient instance\n */\nexport function createManagementClient(config: ManagementClientConfig): ManagementClient {\n // Validate configuration\n if (!config.dashboardUrl) {\n throw new Error(\n 'dashboardUrl is required when creating a management client. ' +\n 'Example: http://localhost:4000 or https://dashboard.riverbankcms.com'\n );\n }\n\n if (!config.managementApiKey) {\n throw new Error(\n 'managementApiKey is required when creating a management client. ' +\n 'A management API key starts with bld_mgmt_sk_'\n );\n }\n\n if (!config.managementApiKey.startsWith('bld_mgmt_sk_')) {\n throw new Error(\n 'Invalid management API key format. ' +\n 'A management API key must start with bld_mgmt_sk_'\n );\n }\n\n if (!config.siteId) {\n throw new Error(\n 'siteId is required when creating a management client.'\n );\n }\n\n // Create HTTP client\n const http = createHttpClient(config);\n\n // Create and return client with all operations\n return {\n entries: createEntryOperations(http),\n pages: createPageOperations(http),\n blocks: createBlockOperations(http),\n navigation: createNavigationOperations(http),\n settings: createSettingsOperations(http),\n pull: createPullOperations(http),\n preview: createPreviewOperations(http),\n identifiers: createIdentifiersOperations(http),\n };\n}\n\n// Re-export types\nexport type {\n ManagementClient,\n ManagementClientConfig,\n ManagementEntry,\n ManagementPage,\n ManagementBlock,\n ManagementNavigationMenu,\n ManagementNavigationItem,\n ManagementSettings,\n EntryUpsertInput,\n PageUpsertInput,\n BlockUpsertInput,\n NavigationMenuUpsertInput,\n NavigationItemInput,\n PulledEntries,\n PulledPages,\n PulledNavigation,\n PulledSettings,\n PulledContent,\n PaginationOptions,\n PaginatedResult,\n EntryOperations,\n PageOperations,\n BlockOperations,\n NavigationOperations,\n SettingsOperations,\n SettingsUpdateInput,\n PullOperations,\n PreviewOperations,\n BlockPreviewRequest,\n BlockPreviewResponse,\n BlockPreviewValidationIssue,\n IdentifiersOperations,\n BackfillResult,\n BackfillPageResult,\n BackfillBlockResult,\n BackfillEntryResult,\n} from './types';\n\n// Re-export error\nexport { ManagementApiError } from './http';\n","/**\n * CLI Environment Variable Loading\n *\n * Loads and validates environment variables for SDK CLI commands.\n */\n\n/**\n * SDK environment configuration\n */\nexport interface SdkEnvironment {\n /** Site ID to operate on */\n siteId: string;\n /** Dashboard URL (e.g., http://localhost:4000) */\n dashboardUrl: string;\n /** Management API key (bld_mgmt_sk_...) */\n managementApiKey: string;\n}\n\n/**\n * Environment variable prefix based on target\n */\nexport type EnvironmentTarget = 'local' | 'remote';\n\n/**\n * Get the prefix for environment variables based on target\n */\nfunction getEnvPrefix(target: EnvironmentTarget): string {\n return target === 'remote' ? 'RIVERBANK_REMOTE' : 'RIVERBANK_LOCAL';\n}\n\n/**\n * Require an environment variable, throwing if not set\n */\nfunction requireEnv(name: string): string {\n const value = process.env[name];\n if (!value) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n return value;\n}\n\n/**\n * Get an optional environment variable with a fallback\n */\nfunction getEnv(name: string, fallback?: string): string | undefined {\n return process.env[name] ?? fallback;\n}\n\n/**\n * Load SDK environment configuration\n *\n * @param remote - If true, load remote/production environment\n * @returns SDK environment configuration\n *\n * @example\n * ```typescript\n * // Load local environment\n * const env = loadEnvironment(false);\n *\n * // Load remote/production environment\n * const env = loadEnvironment(true);\n * ```\n */\nexport function loadEnvironment(remote: boolean): SdkEnvironment {\n const target: EnvironmentTarget = remote ? 'remote' : 'local';\n const prefix = getEnvPrefix(target);\n\n const siteId = requireEnv(`${prefix}_SITE_ID`);\n const dashboardUrl = requireEnv(`${prefix}_DASHBOARD_URL`);\n const managementApiKey = requireEnv(`${prefix}_MGMT_API_KEY`);\n\n // Validate management API key format\n if (!managementApiKey.startsWith('bld_mgmt_sk_')) {\n throw new Error(\n `Invalid management API key format for ${prefix}_MGMT_API_KEY. ` +\n 'Expected key starting with bld_mgmt_sk_'\n );\n }\n\n // Validate dashboard URL format\n try {\n new URL(dashboardUrl);\n } catch {\n throw new Error(\n `Invalid dashboard URL in ${prefix}_DASHBOARD_URL: ${dashboardUrl}. ` +\n 'Expected format: http://localhost:4000 or https://dashboard.example.com'\n );\n }\n\n return {\n siteId,\n dashboardUrl,\n managementApiKey,\n };\n}\n\n/**\n * Check if the remote environment is configured\n */\nexport function isRemoteConfigured(): boolean {\n const prefix = getEnvPrefix('remote');\n return !!(\n process.env[`${prefix}_SITE_ID`] &&\n process.env[`${prefix}_DASHBOARD_URL`] &&\n process.env[`${prefix}_MGMT_API_KEY`]\n );\n}\n\n/**\n * Check if the local environment is configured\n */\nexport function isLocalConfigured(): boolean {\n const prefix = getEnvPrefix('local');\n return !!(\n process.env[`${prefix}_SITE_ID`] &&\n process.env[`${prefix}_DASHBOARD_URL`] &&\n process.env[`${prefix}_MGMT_API_KEY`]\n );\n}\n\n/**\n * Get environment variables for debugging (masked)\n */\nexport function getEnvironmentDebugInfo(remote: boolean): Record<string, string> {\n const target: EnvironmentTarget = remote ? 'remote' : 'local';\n const prefix = getEnvPrefix(target);\n\n const mask = (value: string | undefined): string => {\n if (!value) return '(not set)';\n if (value.length <= 8) return '****';\n return value.substring(0, 8) + '...';\n };\n\n return {\n [`${prefix}_SITE_ID`]: process.env[`${prefix}_SITE_ID`] ?? '(not set)',\n [`${prefix}_DASHBOARD_URL`]: process.env[`${prefix}_DASHBOARD_URL`] ?? '(not set)',\n [`${prefix}_MGMT_API_KEY`]: mask(process.env[`${prefix}_MGMT_API_KEY`]),\n };\n}\n","/**\n * CLI Output Formatting\n *\n * Provides consistent output formatting for CLI commands.\n */\n\nexport interface OutputOptions {\n /** Output in JSON format for machine parsing */\n json?: boolean;\n /** Minimal output (suppress non-essential messages) */\n quiet?: boolean;\n}\n\nexport interface OutputContext {\n success(message: string, data?: unknown): void;\n error(message: string, details?: unknown): never;\n warn(message: string, data?: unknown): void;\n info(message: string, data?: unknown): void;\n table(headers: string[], rows: string[][]): void;\n json(data: unknown): void;\n progress(current: number, total: number, message: string): void;\n}\n\n/**\n * Create output context for CLI command\n *\n * @param options - Output options\n * @returns Output context with formatting methods\n */\nexport function createOutput(options: OutputOptions): OutputContext {\n const { json: jsonMode = false, quiet = false } = options;\n\n return {\n success(message: string, data?: unknown): void {\n if (jsonMode) {\n console.log(JSON.stringify({ success: true, message, data }, null, 2));\n } else if (!quiet) {\n console.log(`✓ ${message}`);\n if (data !== undefined) {\n console.log(JSON.stringify(data, null, 2));\n }\n }\n },\n\n error(message: string, details?: unknown): never {\n if (jsonMode) {\n console.error(JSON.stringify({ success: false, error: message, details }, null, 2));\n } else {\n console.error(`✗ ${message}`);\n if (details !== undefined) {\n if (typeof details === 'object' && details !== null) {\n console.error(JSON.stringify(details, null, 2));\n } else {\n console.error(String(details));\n }\n }\n }\n process.exit(1);\n },\n\n warn(message: string, data?: unknown): void {\n if (jsonMode) {\n console.error(JSON.stringify({ warning: message, data }, null, 2));\n } else if (!quiet) {\n console.warn(`⚠ ${message}`);\n if (data !== undefined) {\n console.warn(JSON.stringify(data, null, 2));\n }\n }\n },\n\n info(message: string, data?: unknown): void {\n if (!jsonMode && !quiet) {\n console.log(`ℹ ${message}`);\n if (data !== undefined) {\n console.log(JSON.stringify(data, null, 2));\n }\n }\n },\n\n table(headers: string[], rows: string[][]): void {\n if (jsonMode) {\n // Convert table to array of objects\n const objects = rows.map((row) => {\n const obj: Record<string, string> = {};\n headers.forEach((header, i) => {\n obj[header] = row[i] ?? '';\n });\n return obj;\n });\n console.log(JSON.stringify(objects, null, 2));\n } else if (!quiet) {\n // Calculate column widths\n const widths = headers.map((h, i) => {\n const maxRowWidth = Math.max(...rows.map((r) => (r[i] ?? '').length));\n return Math.max(h.length, maxRowWidth);\n });\n\n // Print header\n const headerRow = headers.map((h, i) => h.padEnd(widths[i]!)).join(' ');\n const separator = widths.map((w) => '-'.repeat(w)).join(' ');\n console.log(headerRow);\n console.log(separator);\n\n // Print rows\n for (const row of rows) {\n const formattedRow = row.map((cell, i) => (cell ?? '').padEnd(widths[i]!)).join(' ');\n console.log(formattedRow);\n }\n }\n },\n\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n },\n\n progress(current: number, total: number, message: string): void {\n if (!jsonMode && !quiet) {\n const percent = Math.round((current / total) * 100);\n const bar = '█'.repeat(Math.floor(percent / 5)) + '░'.repeat(20 - Math.floor(percent / 5));\n process.stdout.write(`\\r${bar} ${percent}% ${message}`);\n if (current === total) {\n console.log(); // New line when complete\n }\n }\n },\n };\n}\n\n/**\n * Format file size for display\n */\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Format duration for display\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${Math.floor(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;\n}\n","/**\n * CLI Error Handling\n *\n * Provides enhanced error formatting for CLI commands.\n */\n\nimport { ManagementApiError } from '../client/management';\n\n/**\n * SDK CLI error codes\n */\nexport const ErrorCodes = {\n // Configuration errors\n MISSING_ENV: 'sdk:missing-env',\n INVALID_CONFIG: 'sdk:invalid-config',\n\n // Network errors\n NETWORK_ERROR: 'sdk:network-error',\n TIMEOUT: 'sdk:timeout',\n\n // Auth errors\n UNAUTHORIZED: 'sdk:unauthorized',\n FORBIDDEN: 'sdk:forbidden',\n\n // Validation errors\n VALIDATION_ERROR: 'sdk:validation-error',\n MISSING_CONTENT_TYPE: 'sdk:missing-content-type',\n UNKNOWN_BLOCK_KIND: 'sdk:unknown-block-kind',\n\n // File system errors\n FILE_NOT_FOUND: 'sdk:file-not-found',\n FILE_WRITE_ERROR: 'sdk:file-write-error',\n\n // General errors\n UNKNOWN: 'sdk:unknown',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n\n/**\n * Format error for CLI display\n */\nexport interface FormattedError {\n code: string;\n message: string;\n details?: unknown;\n suggestion?: string;\n}\n\n/**\n * Error suggestions based on error code\n */\nconst errorSuggestions: Record<string, string> = {\n 'sdk:missing-env': 'Check your .env.local file and ensure all RIVERBANK_* variables are set.',\n 'sdk:unauthorized': 'Verify your management API key is correct and not expired.',\n 'sdk:forbidden': 'Ensure your API key has the correct permissions for this operation.',\n 'sdk:missing-content-type': 'Run `riverbankcms push-config` to sync your content type definitions.',\n 'sdk:unknown-block-kind': 'Run `riverbankcms push-config` to sync your custom block definitions.',\n 'sdk:network-error': 'Check your network connection and ensure the dashboard is accessible.',\n 'sdk:timeout': 'The request timed out. Try again or check if the dashboard is responding.',\n 'auth:forbidden': 'Your API key is not authorized for this site or operation.',\n 'auth:invalid': 'Invalid API key. Generate a new management key from the dashboard.',\n};\n\n/**\n * Format an error for CLI display\n */\nexport function formatError(error: unknown): FormattedError {\n if (error instanceof ManagementApiError) {\n return {\n code: error.code,\n message: error.message,\n details: error.details,\n suggestion: errorSuggestions[error.code],\n };\n }\n\n if (error instanceof Error) {\n // Check for common error patterns\n if (error.message.includes('ECONNREFUSED')) {\n return {\n code: ErrorCodes.NETWORK_ERROR,\n message: 'Could not connect to the dashboard',\n details: error.message,\n suggestion: errorSuggestions[ErrorCodes.NETWORK_ERROR],\n };\n }\n\n if (error.message.includes('fetch failed')) {\n return {\n code: ErrorCodes.NETWORK_ERROR,\n message: 'Network request failed',\n details: error.message,\n suggestion: errorSuggestions[ErrorCodes.NETWORK_ERROR],\n };\n }\n\n return {\n code: ErrorCodes.UNKNOWN,\n message: error.message,\n };\n }\n\n return {\n code: ErrorCodes.UNKNOWN,\n message: String(error),\n };\n}\n\n/**\n * Format validation errors for display\n */\nexport function formatValidationErrors(\n errors: Array<{ path: string; message: string }>\n): string {\n return errors.map((e) => ` - ${e.path}: ${e.message}`).join('\\n');\n}\n\n/**\n * Format push operation diff for display\n */\nexport interface DiffItem {\n type: 'add' | 'update' | 'delete';\n identifier: string;\n contentType?: string;\n}\n\nexport function formatDiff(items: DiffItem[]): string {\n const lines: string[] = [];\n\n const adds = items.filter((i) => i.type === 'add');\n const updates = items.filter((i) => i.type === 'update');\n const deletes = items.filter((i) => i.type === 'delete');\n\n if (adds.length > 0) {\n lines.push('New:');\n for (const item of adds) {\n const prefix = item.contentType ? `${item.contentType}/` : '';\n lines.push(` + ${prefix}${item.identifier}`);\n }\n }\n\n if (updates.length > 0) {\n lines.push('Updated:');\n for (const item of updates) {\n const prefix = item.contentType ? `${item.contentType}/` : '';\n lines.push(` ~ ${prefix}${item.identifier}`);\n }\n }\n\n if (deletes.length > 0) {\n lines.push('Deleted:');\n for (const item of deletes) {\n const prefix = item.contentType ? `${item.contentType}/` : '';\n lines.push(` - ${prefix}${item.identifier}`);\n }\n }\n\n if (lines.length === 0) {\n return 'No changes detected.';\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Get actionable message for SDK error\n */\nexport function getActionableMessage(code: string): string | undefined {\n return errorSuggestions[code];\n}\n","/**\n * Shared CLI Helpers\n *\n * Common utilities and types shared across CLI commands.\n * Reduces duplication and ensures consistent behavior.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as readline from 'readline';\n\nimport { createManagementClient } from '../client/management';\nimport type { ManagementClient } from '../client/management/types';\nimport { loadEnvironment } from './env';\nimport { createOutput, type OutputContext } from './output';\nimport { formatError } from './errors';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Global options available on all commands via --json, --quiet, --remote flags.\n */\nexport interface GlobalOptions {\n json?: boolean;\n quiet?: boolean;\n remote?: boolean;\n}\n\n/**\n * Options for commands that accept JSON data via --data or --file.\n */\nexport interface DataInputOptions {\n data?: string;\n file?: string;\n}\n\n/**\n * Options for commands that require confirmation.\n */\nexport interface ConfirmOptions {\n yes?: boolean;\n}\n\n/**\n * Context object provided to command handlers.\n */\nexport interface CommandContext {\n output: OutputContext;\n client: ManagementClient;\n isRemote: boolean;\n isJsonOutput: boolean;\n}\n\n/**\n * Pagination options for list commands.\n */\nexport interface PaginationOptions {\n limit?: string;\n page?: string;\n}\n\n/**\n * Parsed pagination values.\n */\nexport interface ParsedPagination {\n limit: number;\n page: number;\n}\n\n/**\n * Type for row formatter functions used in table display.\n * Each formatter takes an entity and returns an array of string values.\n *\n * @example\n * const formatEntryRow: RowFormatter<ManagementEntry> = (entry) => [\n * entry.identifier,\n * entry.status,\n * formatDateShort(entry.updatedAt),\n * ];\n */\nexport type RowFormatter<T> = (item: T) => string[];\n\n/**\n * Entry format for SDK pull operations.\n * Matches the server-side PulledEntry type.\n */\nexport interface PulledEntryOutput {\n identifier: string;\n data: Record<string, unknown>;\n status: 'draft' | 'published';\n hasUnpublishedChanges: boolean;\n /** Slug for URL routing - only present for routable content types */\n slug?: string;\n}\n\n/**\n * Map an entry from API response to pull output format.\n * Conditionally includes slug only for routable content (when slug is defined).\n */\nexport function mapEntryForOutput<T extends {\n identifier: string;\n data: Record<string, unknown>;\n status: 'draft' | 'published';\n hasUnpublishedChanges: boolean;\n slug?: string;\n}>(entry: T): PulledEntryOutput {\n const result: PulledEntryOutput = {\n identifier: entry.identifier,\n data: entry.data,\n status: entry.status,\n hasUnpublishedChanges: entry.hasUnpublishedChanges,\n };\n if (entry.slug !== undefined) {\n result.slug = entry.slug;\n }\n return result;\n}\n\n// ============================================================================\n// Utility Helpers\n// ============================================================================\n\n/**\n * Parse pagination options from command flags.\n *\n * @param options - Object containing optional limit and page strings\n * @returns Parsed pagination values with defaults\n *\n * @example\n * const { limit, page } = parsePaginationOptions({ limit: '10', page: '2' });\n */\nexport function parsePaginationOptions(options: PaginationOptions): ParsedPagination {\n return {\n limit: parseInt(options.limit ?? '20', 10),\n page: parseInt(options.page ?? '1', 10),\n };\n}\n\n/**\n * Format an ISO date string to a short date (YYYY-MM-DD).\n *\n * @param isoDate - ISO date string (e.g., \"2024-01-15T10:30:00Z\")\n * @returns Short date string (e.g., \"2024-01-15\")\n *\n * @example\n * formatDateShort(\"2024-01-15T10:30:00Z\") // \"2024-01-15\"\n */\nexport function formatDateShort(isoDate: string): string {\n return isoDate.split('T')[0] ?? '';\n}\n\n// ============================================================================\n// JSON Data Parsing\n// ============================================================================\n\n/**\n * Parse JSON data from --data flag or --file flag.\n *\n * @param options - Object containing optional data string or file path\n * @returns Parsed JSON object\n * @throws Error if neither data nor file is provided\n * @throws SyntaxError if JSON is invalid\n *\n * @example\n * const data = await parseJsonData({ data: '{\"title\": \"Hello\"}' });\n * const data = await parseJsonData({ file: './content.json' });\n */\nexport async function parseJsonData(\n options: DataInputOptions\n): Promise<Record<string, unknown>> {\n if (options.file) {\n const filePath = path.resolve(options.file);\n const content = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(content) as Record<string, unknown>;\n }\n\n if (options.data) {\n return JSON.parse(options.data) as Record<string, unknown>;\n }\n\n throw new Error('Either --data or --file is required');\n}\n\n/**\n * Parse JSON array from --data flag or --file flag.\n * Handles both direct array format and { items: [...] } wrapper format.\n *\n * @param options - Object containing optional data string or file path\n * @returns Parsed JSON array\n *\n * @example\n * const items = await parseJsonArray({ file: './items.json' });\n */\nexport async function parseJsonArray<T>(\n options: DataInputOptions\n): Promise<T[]> {\n const parsed = await parseJsonData(options);\n\n // Handle wrapper format: { items: [...] }\n if ('items' in parsed && Array.isArray(parsed.items)) {\n return parsed.items as T[];\n }\n\n // Handle direct array (stored as object with numeric keys from JSON.parse)\n if (Array.isArray(parsed)) {\n return parsed as T[];\n }\n\n throw new Error('Expected an array or an object with an \"items\" array');\n}\n\n// ============================================================================\n// Confirmation Prompts\n// ============================================================================\n\n/**\n * Prompt for confirmation unless --yes is provided.\n * Remote operations always require --yes for safety.\n *\n * @param message - Confirmation message to display\n * @param options - Object containing optional yes flag\n * @param isRemote - Whether this is a remote operation\n * @returns True if confirmed, false otherwise\n *\n * @example\n * const confirmed = await confirmAction('Delete entry \"post-1\"?', { yes: false }, true);\n * if (!confirmed) return;\n */\nexport async function confirmAction(\n message: string,\n options: ConfirmOptions,\n isRemote: boolean\n): Promise<boolean> {\n // Remote operations always require --yes\n if (isRemote && !options.yes) {\n console.error('Remote operations require --yes flag for safety');\n return false;\n }\n\n // Skip confirmation if --yes is provided\n if (options.yes) {\n return true;\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`${message} (y/N): `, (answer) => {\n rl.close();\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');\n });\n });\n}\n\n// ============================================================================\n// Command Context\n// ============================================================================\n\n/**\n * Create command context with output, client, and remote flag.\n *\n * @param command - Commander command instance\n * @returns Context object with output, client, and isRemote flag\n *\n * @example\n * const ctx = createCommandContext(command);\n * ctx.output.info('Starting...');\n * await ctx.client.entries.get('post', 'my-post');\n */\nexport function createCommandContext(command: Command): CommandContext {\n const globalOpts = command.optsWithGlobals<GlobalOptions>();\n const isRemote = globalOpts.remote ?? false;\n const isJsonOutput = globalOpts.json ?? false;\n\n const output = createOutput({\n json: globalOpts.json,\n quiet: globalOpts.quiet,\n });\n\n const env = loadEnvironment(isRemote);\n const client = createManagementClient({\n dashboardUrl: env.dashboardUrl,\n managementApiKey: env.managementApiKey,\n siteId: env.siteId,\n });\n\n return { output, client, isRemote, isJsonOutput };\n}\n\n/**\n * Get global options and output context without creating a client.\n * Useful when you need to check conditions before creating the client.\n *\n * @param command - Commander command instance\n * @returns Object with output, isRemote flag, and globalOpts\n */\nexport function getOutputContext(command: Command): {\n output: OutputContext;\n isRemote: boolean;\n globalOpts: GlobalOptions;\n} {\n const globalOpts = command.optsWithGlobals<GlobalOptions>();\n const isRemote = globalOpts.remote ?? false;\n\n const output = createOutput({\n json: globalOpts.json,\n quiet: globalOpts.quiet,\n });\n\n return { output, isRemote, globalOpts };\n}\n\n// ============================================================================\n// Error Handling\n// ============================================================================\n\n/**\n * Handle errors in a consistent way across all commands.\n *\n * @param error - The error that occurred\n * @param output - Output context for displaying errors\n *\n * @example\n * try {\n * await doSomething();\n * } catch (error) {\n * handleCommandError(error, output);\n * }\n */\nexport function handleCommandError(error: unknown, output: OutputContext): void {\n if (error instanceof SyntaxError) {\n output.error('Invalid JSON data', { suggestion: 'Check your JSON syntax' });\n return;\n }\n\n const formatted = formatError(error);\n output.error(formatted.message, {\n code: formatted.code,\n details: formatted.details,\n suggestion: formatted.suggestion,\n });\n}\n\n/**\n * Wrap an async command action with standard error handling.\n *\n * @param action - The async action to wrap\n * @returns Wrapped action that handles errors\n *\n * @example\n * .action(withErrorHandling(async (args, options, command) => {\n * const ctx = createCommandContext(command);\n * // ... command logic\n * }))\n */\nexport function withErrorHandling<TArgs extends unknown[]>(\n action: (...args: [...TArgs, Command]) => Promise<void>\n): (...args: [...TArgs, Command]) => Promise<void> {\n return async (...args) => {\n const command = args[args.length - 1] as Command;\n const { output } = getOutputContext(command);\n\n try {\n await action(...args);\n } catch (error) {\n handleCommandError(error, output);\n }\n };\n}\n\n/**\n * Wrap a destructive command action with confirmation prompt and error handling.\n *\n * @param getMessage - Function that builds the confirmation message from command args\n * @param action - The async action to perform after confirmation\n * @returns Wrapped action that confirms, then executes with error handling\n *\n * @example\n * .action(withConfirmation(\n * (type, identifier) => `Delete entry \"${type}/${identifier}\"?`,\n * async (ctx, type, identifier) => {\n * ctx.output.info(`Deleting entry: ${type}/${identifier}`);\n * await ctx.client.entries.delete(type, identifier);\n * ctx.output.success(`Entry deleted: ${identifier}`);\n * }\n * ))\n */\nexport function withConfirmation<TArgs extends unknown[]>(\n getMessage: (...args: TArgs) => string,\n action: (ctx: CommandContext, ...args: TArgs) => Promise<void>\n): (...args: [...TArgs, ConfirmOptions, Command]) => Promise<void> {\n return async (...allArgs) => {\n const command = allArgs[allArgs.length - 1] as Command;\n const options = allArgs[allArgs.length - 2] as ConfirmOptions;\n const args = allArgs.slice(0, -2) as unknown as TArgs;\n\n const ctx = createCommandContext(command);\n const { output, isRemote } = ctx;\n\n const confirmed = await confirmAction(getMessage(...args), options, isRemote);\n\n if (!confirmed) {\n output.info('Operation cancelled');\n process.exit(0);\n }\n\n try {\n await action(ctx, ...args);\n } catch (error) {\n handleCommandError(error, output);\n }\n };\n}\n\n// ============================================================================\n// Command Factory Functions\n// ============================================================================\n\n/**\n * Capitalize the first letter of a string.\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Configuration for publish/unpublish command factories.\n */\nexport interface PublishCommandConfig {\n /** Resource name for display (e.g., 'entry', 'page') */\n resourceName: string;\n /** Argument names (e.g., ['type', 'identifier'] or ['identifier']) */\n args: readonly string[];\n /** Function to call the appropriate client method */\n action: (client: ManagementClient, ...args: string[]) => Promise<void>;\n}\n\n/**\n * Create a publish command for a resource.\n *\n * @example\n * const publishCommand = createPublishCommand({\n * resourceName: 'entry',\n * args: ['type', 'identifier'],\n * action: (client, type, id) => client.entries.publish(type, id),\n * });\n */\nexport function createPublishCommand(config: PublishCommandConfig): Command {\n const cmd = new Command('publish').description(`Publish a ${config.resourceName}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client } = createCommandContext(command);\n\n const label = args.join('/');\n output.info(`Publishing ${config.resourceName}: ${label}`);\n await config.action(client, ...args);\n output.success(`${capitalize(config.resourceName)} published: ${label}`);\n })\n );\n}\n\n/**\n * Create an unpublish command for a resource.\n *\n * @example\n * const unpublishCommand = createUnpublishCommand({\n * resourceName: 'entry',\n * args: ['type', 'identifier'],\n * action: (client, type, id) => client.entries.unpublish(type, id),\n * });\n */\nexport function createUnpublishCommand(config: PublishCommandConfig): Command {\n const cmd = new Command('unpublish').description(`Unpublish a ${config.resourceName}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client } = createCommandContext(command);\n\n const label = args.join('/');\n output.info(`Unpublishing ${config.resourceName}: ${label}`);\n await config.action(client, ...args);\n output.success(`${capitalize(config.resourceName)} unpublished: ${label}`);\n })\n );\n}\n\n/**\n * Configuration for get command factory.\n */\nexport interface GetCommandConfig<T> {\n /** Resource name for display (e.g., 'entry', 'page') */\n resourceName: string;\n /** Argument names (e.g., ['type', 'identifier'] or ['identifier']) */\n args: readonly string[];\n /** Function to fetch the resource */\n get: (client: ManagementClient, ...args: string[]) => Promise<T | null>;\n /** Function to format the resource for non-JSON output */\n formatOutput: (item: T) => Record<string, unknown>;\n}\n\n/**\n * Create a get command for a resource.\n *\n * @example\n * const getCommand = createGetCommand({\n * resourceName: 'entry',\n * args: ['type', 'identifier'],\n * get: (client, type, id) => client.entries.get(type, id),\n * formatOutput: (entry) => ({\n * id: entry.id,\n * status: entry.status,\n * }),\n * });\n */\nexport function createGetCommand<T>(config: GetCommandConfig<T>): Command {\n const cmd = new Command('get').description(`Get a single ${config.resourceName}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client, isJsonOutput } = createCommandContext(command);\n\n const label = args.join('/');\n const item = await config.get(client, ...args);\n\n if (!item) {\n return output.error(`${capitalize(config.resourceName)} not found: ${label}`, {\n suggestion: `Check that the ${config.args.join(' and ')} ${config.args.length > 1 ? 'are' : 'is'} correct`,\n });\n }\n\n if (isJsonOutput) {\n output.json(item);\n } else {\n output.success(`${capitalize(config.resourceName)}: ${label}`, config.formatOutput(item));\n }\n })\n );\n}\n\n/**\n * Result type for list operations.\n */\nexport interface ListResult<T> {\n items: T[];\n pagination?: {\n page: number;\n limit: number;\n total: number;\n };\n}\n\n/**\n * Configuration for list command factory.\n */\nexport interface ListCommandConfig<T> {\n /** Resource name for display (e.g., 'entry', 'page') */\n resourceName: string;\n /** Plural resource name (e.g., 'entries', 'pages') */\n resourceNamePlural: string;\n /** Argument names (e.g., ['type'] for entries, [] for pages) */\n args: readonly string[];\n /** Whether this list supports pagination options */\n hasPagination: boolean;\n /** Function to fetch the list - receives args as array plus optional pagination */\n list: (\n client: ManagementClient,\n args: string[],\n pagination?: ParsedPagination\n ) => Promise<ListResult<T>>;\n /** Table column headers */\n tableHeaders: string[];\n /** Row formatter for table display */\n formatRow: RowFormatter<T>;\n}\n\n/**\n * Create a list command for a resource.\n *\n * @example\n * const listCommand = createListCommand({\n * resourceName: 'entry',\n * resourceNamePlural: 'entries',\n * args: ['type'],\n * hasPagination: true,\n * list: (client, [type], pagination) => client.entries.list(type, pagination),\n * tableHeaders: ['Identifier', 'Status', 'Updated'],\n * formatRow: (entry) => [entry.identifier, entry.status, entry.updatedAt],\n * });\n */\nexport function createListCommand<T>(config: ListCommandConfig<T>): Command {\n const cmd = new Command('list').description(`List ${config.resourceNamePlural}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n if (config.hasPagination) {\n cmd.option('--limit <n>', 'Number of items per page', '20');\n cmd.option('--page <n>', 'Page number', '1');\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const options = actionArgs[config.args.length] as PaginationOptions;\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client, isJsonOutput } = createCommandContext(command);\n\n const pagination = config.hasPagination ? parsePaginationOptions(options) : undefined;\n const result = await config.list(client, args, pagination);\n\n if (isJsonOutput) {\n output.json({\n [config.resourceNamePlural]: result.items,\n ...(result.pagination && { pagination: result.pagination }),\n });\n } else if (result.items.length === 0) {\n const context = args.length > 0 ? ` for ${args.join('/')}` : '';\n output.info(`No ${config.resourceNamePlural} found${context}`);\n } else {\n output.table(config.tableHeaders, result.items.map(config.formatRow));\n if (result.pagination) {\n output.info(\n `Showing ${result.items.length} of ${result.pagination.total} ${config.resourceNamePlural} (page ${result.pagination.page})`\n );\n } else {\n output.info(`${result.items.length} ${config.resourceNamePlural}`);\n }\n }\n })\n );\n}\n","/**\n * Content Mapper Utilities\n *\n * Converts pulled remote content to local format for comparison.\n * Strips metadata fields that don't exist in local files.\n */\n\nimport type {\n ManagementNavigationItem,\n ManagementNavigationMenu,\n PulledPages,\n PulledEntries,\n} from '../../client/management/types';\nimport type {\n LocalEntry,\n LocalPage,\n LocalBlock,\n LocalNavigation,\n LocalNavigationItem,\n LocalNavigationMenu,\n} from '../content/reader';\n\n// ============================================================================\n// Navigation Mapping\n// ============================================================================\n\n/**\n * Strip ID and position from remote navigation items for comparison.\n * Local navigation files don't include these server-generated fields.\n */\nexport function stripNavigationItemIds(\n items: ManagementNavigationItem[]\n): LocalNavigationItem[] {\n return items.map((item) => {\n const result: LocalNavigationItem = {\n label: item.label,\n url: item.url,\n };\n // Only include children if present (to match local format)\n if (item.children && item.children.length > 0) {\n result.children = stripNavigationItemIds(item.children);\n }\n return result;\n });\n}\n\n/**\n * Convert pulled navigation menus to local format for comparison.\n * Strips internal IDs and timestamps, keeps only sync-relevant fields.\n */\nexport function convertPulledNavigationToLocal(\n remoteMenus: ManagementNavigationMenu[]\n): LocalNavigation {\n return {\n menus: remoteMenus.map((menu): LocalNavigationMenu => ({\n identifier: menu.identifier,\n name: menu.name,\n items: stripNavigationItemIds(menu.items),\n })),\n };\n}\n\n// ============================================================================\n// Page Mapping\n// ============================================================================\n\n/**\n * Convert pulled pages to local format for comparison.\n * Strips server-side metadata like timestamps.\n */\nexport function convertPulledPagesToLocal(\n remotePages: PulledPages['pages']\n): LocalPage[] {\n return remotePages.map((page) => ({\n identifier: page.identifier,\n title: page.title,\n path: page.path,\n status: page.status,\n hasUnpublishedChanges: page.hasUnpublishedChanges,\n blocks: page.blocks.map((block): LocalBlock => ({\n identifier: block.identifier,\n kind: block.kind,\n position: block.position,\n data: block.data,\n })),\n }));\n}\n\n// ============================================================================\n// Entry Mapping\n// ============================================================================\n\n/**\n * Convert pulled entries to local format for comparison.\n * Strips server-side metadata like timestamps.\n */\nexport function convertPulledEntriesToLocal(\n remoteEntries: Record<string, PulledEntries['entries']>\n): Map<string, LocalEntry[]> {\n const result = new Map<string, LocalEntry[]>();\n\n for (const [contentType, entries] of Object.entries(remoteEntries)) {\n result.set(\n contentType,\n entries.map((entry) => ({\n identifier: entry.identifier,\n data: entry.data,\n status: entry.status,\n hasUnpublishedChanges: entry.hasUnpublishedChanges,\n slug: entry.slug,\n }))\n );\n }\n\n return result;\n}\n","/**\n * Content File Writer\n *\n * Writes pulled content to the file system in the appropriate JSON format.\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nimport type {\n PulledEntries,\n PulledPages,\n PulledNavigation,\n PulledSettings,\n} from '../../client/management/types';\nimport { mapEntryForOutput } from '../helpers';\nimport { convertPulledNavigationToLocal } from '../sync/mapper';\n\n/**\n * Ensure directory exists, creating it if necessary\n */\nasync function ensureDir(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (error) {\n // Ignore if directory already exists\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw error;\n }\n }\n}\n\n/**\n * Write JSON file with pretty formatting\n */\nasync function writeJsonFile(filePath: string, data: unknown): Promise<void> {\n const content = JSON.stringify(data, null, 2) + '\\n';\n await fs.writeFile(filePath, content, 'utf-8');\n}\n\n/**\n * Write entries to content directory\n *\n * Format: content/entries/{contentType}.json\n * Meta: content/.meta/{contentType}.json\n */\nexport async function writeEntries(\n contentDir: string,\n pulledEntries: PulledEntries\n): Promise<{ filePath: string; metaPath: string }> {\n const entriesDir = path.join(contentDir, 'entries');\n const metaDir = path.join(contentDir, '.meta');\n\n await ensureDir(entriesDir);\n await ensureDir(metaDir);\n\n const { contentType, entries, meta } = pulledEntries;\n\n // Write main entries file using shared helper for consistent slug handling\n const entriesFile = {\n contentType,\n entries: entries.map(mapEntryForOutput),\n };\n\n const filePath = path.join(entriesDir, `${contentType}.json`);\n await writeJsonFile(filePath, entriesFile);\n\n // Write metadata file\n const metaPath = path.join(metaDir, `${contentType}.json`);\n await writeJsonFile(metaPath, meta);\n\n return { filePath, metaPath };\n}\n\n/**\n * Write pages to content directory\n *\n * Format: content/pages/{identifier}.json\n * Meta: content/.meta/pages.json\n */\nexport async function writePages(\n contentDir: string,\n pulledPages: PulledPages\n): Promise<{ filePaths: string[]; metaPath: string }> {\n const pagesDir = path.join(contentDir, 'pages');\n const metaDir = path.join(contentDir, '.meta');\n await ensureDir(pagesDir);\n await ensureDir(metaDir);\n\n const filePaths: string[] = [];\n\n // Build metadata for stale detection\n const pagesMeta: Record<string, { createdAt?: string; updatedAt?: string }> = {};\n\n for (const page of pulledPages.pages) {\n const filePath = path.join(pagesDir, `${page.identifier}.json`);\n await writeJsonFile(filePath, page);\n filePaths.push(filePath);\n\n // Store metadata for this page\n pagesMeta[page.identifier] = {\n createdAt: page.createdAt,\n updatedAt: page.updatedAt,\n };\n }\n\n // Write metadata file\n const metaPath = path.join(metaDir, 'pages.json');\n await writeJsonFile(metaPath, {\n pulledAt: pulledPages.meta.pulledAt,\n pages: pagesMeta,\n });\n\n return { filePaths, metaPath };\n}\n\n/**\n * Write navigation menus to content directory\n *\n * Format: content/navigation.json\n * Meta: content/.meta/navigation.json\n */\nexport async function writeNavigation(\n contentDir: string,\n pulledNavigation: PulledNavigation\n): Promise<{ filePath: string; metaPath: string }> {\n const metaDir = path.join(contentDir, '.meta');\n await ensureDir(contentDir);\n await ensureDir(metaDir);\n\n const filePath = path.join(contentDir, 'navigation.json');\n // Convert to local format (strips internal IDs and timestamps)\n const localNavigation = convertPulledNavigationToLocal(pulledNavigation.menus);\n await writeJsonFile(filePath, localNavigation);\n\n // Build metadata for stale detection\n const menusMeta: Record<string, { createdAt?: string; updatedAt?: string }> = {};\n for (const menu of pulledNavigation.menus) {\n menusMeta[menu.name] = {\n createdAt: menu.createdAt,\n updatedAt: menu.updatedAt,\n };\n }\n\n // Write metadata file\n const metaPath = path.join(metaDir, 'navigation.json');\n await writeJsonFile(metaPath, {\n pulledAt: pulledNavigation.meta.pulledAt,\n menus: menusMeta,\n });\n\n return { filePath, metaPath };\n}\n\n/**\n * Write settings to content directory\n *\n * Format: content/settings.json\n */\nexport async function writeSettings(\n contentDir: string,\n pulledSettings: PulledSettings\n): Promise<string> {\n await ensureDir(contentDir);\n\n const filePath = path.join(contentDir, 'settings.json');\n await writeJsonFile(filePath, pulledSettings.settings);\n\n return filePath;\n}\n\n/**\n * Write all pulled content to content directory\n */\nexport interface WriteAllResult {\n entries: Array<{ contentType: string; filePath: string; metaPath: string }>;\n pages: { filePaths: string[]; metaPath: string };\n navigation: { filePath: string; metaPath: string };\n settings: string;\n}\n\nexport async function writeAllContent(\n contentDir: string,\n content: {\n entries: Record<string, PulledEntries['entries']>;\n pages: PulledPages;\n navigation: PulledNavigation;\n settings: PulledSettings;\n }\n): Promise<WriteAllResult> {\n const result: WriteAllResult = {\n entries: [],\n pages: { filePaths: [], metaPath: '' },\n navigation: { filePath: '', metaPath: '' },\n settings: '',\n };\n\n // Write entries for each content type using shared helper\n for (const [contentType, entries] of Object.entries(content.entries)) {\n const pulledEntries: PulledEntries = {\n contentType,\n entries: entries.map(mapEntryForOutput),\n meta: {\n pulledAt: new Date().toISOString(),\n entries: {},\n },\n pagination: { page: 1, limit: entries.length, total: entries.length, hasMore: false },\n };\n\n const { filePath, metaPath } = await writeEntries(contentDir, pulledEntries);\n result.entries.push({ contentType, filePath, metaPath });\n }\n\n // Write pages\n result.pages = await writePages(contentDir, content.pages);\n\n // Write navigation\n result.navigation = await writeNavigation(contentDir, content.navigation);\n\n // Write settings\n result.settings = await writeSettings(contentDir, content.settings);\n\n return result;\n}\n","/**\n * Content File Reader\n *\n * Reads content from the file system for push operations.\n * Mirrors the structure created by writer.ts.\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\n// ============================================================================\n// Types for Local Content Files\n// ============================================================================\n\nexport interface LocalEntry {\n identifier: string;\n data: Record<string, unknown>;\n status?: 'draft' | 'published';\n hasUnpublishedChanges?: boolean;\n slug?: string;\n}\n\nexport interface LocalEntriesFile {\n contentType: string;\n entries: LocalEntry[];\n}\n\nexport interface LocalBlock {\n identifier: string;\n kind: string;\n position?: number;\n data: Record<string, unknown>;\n}\n\nexport interface LocalPage {\n identifier: string;\n title: string;\n path: string;\n status?: 'draft' | 'published';\n hasUnpublishedChanges?: boolean;\n blocks?: LocalBlock[];\n seoTitle?: string;\n seoDescription?: string;\n updatedAt?: string;\n}\n\nexport interface LocalNavigationItem {\n label: string;\n url: string;\n children?: LocalNavigationItem[];\n}\n\nexport interface LocalNavigationMenu {\n identifier?: string | null;\n name: string;\n items: LocalNavigationItem[];\n}\n\nexport interface LocalNavigation {\n menus: LocalNavigationMenu[];\n}\n\nexport interface LocalSettings {\n homepageId?: string | null;\n seoDefaults?: {\n title?: string;\n description?: string;\n ogImage?: string;\n } | null;\n}\n\n// ============================================================================\n// Reading Functions\n// ============================================================================\n\n/**\n * Check if a file exists\n */\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Read and parse a JSON file\n */\nasync function readJsonFile<T>(filePath: string): Promise<T> {\n const content = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(content) as T;\n}\n\n/**\n * List files in a directory with a specific extension\n */\nasync function listFiles(dirPath: string, extension: string): Promise<string[]> {\n try {\n const files = await fs.readdir(dirPath);\n return files\n .filter((f) => f.endsWith(extension))\n .map((f) => path.join(dirPath, f));\n } catch {\n return [];\n }\n}\n\n/**\n * Read entries from content directory\n *\n * Format: content/entries/{contentType}.json\n *\n * @param contentDir - Base content directory\n * @param contentType - Optional specific content type to read\n * @returns Map of content type to entries\n */\nexport async function readEntries(\n contentDir: string,\n contentType?: string\n): Promise<Map<string, LocalEntry[]>> {\n const entriesDir = path.join(contentDir, 'entries');\n const result = new Map<string, LocalEntry[]>();\n\n if (contentType) {\n // Read specific content type\n const filePath = path.join(entriesDir, `${contentType}.json`);\n if (await fileExists(filePath)) {\n const file = await readJsonFile<LocalEntriesFile>(filePath);\n result.set(file.contentType, file.entries);\n }\n } else {\n // Read all content types\n const files = await listFiles(entriesDir, '.json');\n for (const filePath of files) {\n try {\n const file = await readJsonFile<LocalEntriesFile>(filePath);\n result.set(file.contentType, file.entries);\n } catch (error) {\n // Skip invalid files\n console.warn(`Warning: Could not parse ${filePath}:`, error);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Read pages from content directory\n *\n * Format: content/pages/{identifier}.json\n *\n * @param contentDir - Base content directory\n * @returns Array of local pages\n */\nexport async function readPages(contentDir: string): Promise<LocalPage[]> {\n const pagesDir = path.join(contentDir, 'pages');\n const pages: LocalPage[] = [];\n\n const files = await listFiles(pagesDir, '.json');\n for (const filePath of files) {\n try {\n const page = await readJsonFile<LocalPage>(filePath);\n pages.push(page);\n } catch (error) {\n console.warn(`Warning: Could not parse ${filePath}:`, error);\n }\n }\n\n return pages;\n}\n\n/**\n * Read navigation from content directory\n *\n * Format: content/navigation.json\n *\n * @param contentDir - Base content directory\n * @returns Navigation menus or null if not found\n */\nexport async function readNavigation(contentDir: string): Promise<LocalNavigation | null> {\n const filePath = path.join(contentDir, 'navigation.json');\n\n if (!(await fileExists(filePath))) {\n return null;\n }\n\n return readJsonFile<LocalNavigation>(filePath);\n}\n\n/**\n * Read settings from content directory\n *\n * Format: content/settings.json\n *\n * @param contentDir - Base content directory\n * @returns Settings or null if not found\n */\nexport async function readSettings(contentDir: string): Promise<LocalSettings | null> {\n const filePath = path.join(contentDir, 'settings.json');\n\n if (!(await fileExists(filePath))) {\n return null;\n }\n\n return readJsonFile<LocalSettings>(filePath);\n}\n\n/**\n * Read all content from content directory\n */\nexport interface LocalContent {\n entries: Map<string, LocalEntry[]>;\n pages: LocalPage[];\n navigation: LocalNavigation | null;\n settings: LocalSettings | null;\n}\n\nexport async function readAllContent(contentDir: string): Promise<LocalContent> {\n const [entries, pages, navigation, settings] = await Promise.all([\n readEntries(contentDir),\n readPages(contentDir),\n readNavigation(contentDir),\n readSettings(contentDir),\n ]);\n\n return { entries, pages, navigation, settings };\n}\n\n/**\n * Check if content directory exists and has content\n */\nexport async function contentDirExists(contentDir: string): Promise<boolean> {\n return fileExists(contentDir);\n}\n\n/**\n * Get summary of content in directory\n */\nexport interface ContentSummary {\n hasEntries: boolean;\n entryTypes: string[];\n totalEntries: number;\n hasPages: boolean;\n pageCount: number;\n hasNavigation: boolean;\n menuCount: number;\n hasSettings: boolean;\n}\n\nexport async function getContentSummary(contentDir: string): Promise<ContentSummary> {\n const content = await readAllContent(contentDir);\n\n const entryTypes = Array.from(content.entries.keys());\n let totalEntries = 0;\n for (const entries of content.entries.values()) {\n totalEntries += entries.length;\n }\n\n return {\n hasEntries: content.entries.size > 0,\n entryTypes,\n totalEntries,\n hasPages: content.pages.length > 0,\n pageCount: content.pages.length,\n hasNavigation: content.navigation !== null && content.navigation.menus.length > 0,\n menuCount: content.navigation?.menus.length ?? 0,\n hasSettings: content.settings !== null,\n };\n}\n\n// ============================================================================\n// Metadata Reading\n// ============================================================================\n\nexport interface EntryMetadata {\n pulledAt: string;\n entries: Record<\n string,\n {\n id?: string;\n createdAt?: string;\n updatedAt?: string;\n publishedAt?: string;\n }\n >;\n}\n\nexport interface PagesMetadata {\n pulledAt: string;\n pages: Record<\n string,\n {\n createdAt?: string;\n updatedAt?: string;\n }\n >;\n}\n\nexport interface NavigationMetadata {\n pulledAt: string;\n menus: Record<\n string,\n {\n createdAt?: string;\n updatedAt?: string;\n }\n >;\n}\n\n/**\n * Read metadata for a content type from .meta/ directory\n *\n * @param contentDir - Base content directory\n * @param contentType - Content type to read metadata for\n * @returns Metadata or null if not found\n */\nexport async function readEntriesMeta(\n contentDir: string,\n contentType: string\n): Promise<EntryMetadata | null> {\n const metaPath = path.join(contentDir, '.meta', `${contentType}.json`);\n\n try {\n const content = await fs.readFile(metaPath, 'utf-8');\n return JSON.parse(content) as EntryMetadata;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return null; // No metadata file exists\n }\n throw error;\n }\n}\n\n/**\n * Read all entry metadata files from .meta/ directory\n *\n * @param contentDir - Base content directory\n * @returns Map of content type to metadata\n */\nexport async function readAllMeta(\n contentDir: string\n): Promise<Map<string, EntryMetadata>> {\n const metaDir = path.join(contentDir, '.meta');\n const metaMap = new Map<string, EntryMetadata>();\n\n try {\n const files = await fs.readdir(metaDir);\n for (const file of files) {\n // Skip pages.json and navigation.json - they have different structures\n if (file.endsWith('.json') && file !== 'pages.json' && file !== 'navigation.json') {\n const contentType = file.replace('.json', '');\n const meta = await readEntriesMeta(contentDir, contentType);\n if (meta) metaMap.set(contentType, meta);\n }\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n\n return metaMap;\n}\n\n/**\n * Read pages metadata from .meta/pages.json\n *\n * @param contentDir - Base content directory\n * @returns Pages metadata or null if not found\n */\nexport async function readPagesMeta(\n contentDir: string\n): Promise<PagesMetadata | null> {\n const metaPath = path.join(contentDir, '.meta', 'pages.json');\n\n try {\n const content = await fs.readFile(metaPath, 'utf-8');\n return JSON.parse(content) as PagesMetadata;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Read navigation metadata from .meta/navigation.json\n *\n * @param contentDir - Base content directory\n * @returns Navigation metadata or null if not found\n */\nexport async function readNavigationMeta(\n contentDir: string\n): Promise<NavigationMetadata | null> {\n const metaPath = path.join(contentDir, '.meta', 'navigation.json');\n\n try {\n const content = await fs.readFile(metaPath, 'utf-8');\n return JSON.parse(content) as NavigationMetadata;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n","/**\n * Pull Command\n *\n * Pulls content from the CMS and saves to local JSON files.\n *\n * Usage:\n * riverbankcms pull # Pull all content\n * riverbankcms pull entries # Pull all entries\n * riverbankcms pull entries blog-post # Pull specific content type\n * riverbankcms pull pages # Pull all pages\n * riverbankcms pull navigation # Pull navigation menus\n * riverbankcms pull settings # Pull site settings\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\nimport prompts from 'prompts';\n\nimport type { ManagementClient, PulledEntries, PulledContent } from '../../client/management';\nimport {\n writeEntries,\n writePages,\n writeNavigation,\n writeSettings,\n} from '../content/writer';\nimport {\n createCommandContext,\n withErrorHandling,\n mapEntryForOutput,\n type PulledEntryOutput,\n} from '../helpers';\nimport { contentDirExists } from '../content/reader';\nimport type { OutputContext } from '../output';\n\ninterface PullOptions {\n output?: string;\n force?: boolean;\n yes?: boolean;\n}\n\nconst DEFAULT_PAGE_LIMIT = 500;\n\n/**\n * Pull all entries for a content type with pagination.\n * Continues fetching until hasMore is false.\n * Aggregates metadata from all pages.\n */\nasync function pullEntriesWithPagination(\n client: ManagementClient,\n contentType: string,\n output: OutputContext\n): Promise<PulledEntries> {\n const allEntries: PulledEntries['entries'] = [];\n // Aggregate metadata across all pages (not just last page)\n const aggregatedMeta: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }> = {};\n let page = 1;\n let hasMore = true;\n let pulledAt = new Date().toISOString();\n\n while (hasMore) {\n const result = await client.pull.entries(contentType, {\n page,\n limit: DEFAULT_PAGE_LIMIT,\n });\n\n allEntries.push(...result.entries);\n\n // Merge metadata from this page\n if (result.meta.entries) {\n Object.assign(aggregatedMeta, result.meta.entries);\n }\n pulledAt = result.meta.pulledAt;\n hasMore = result.pagination.hasMore;\n\n if (hasMore) {\n output.info(`Fetched ${allEntries.length} entries (page ${page})...`);\n }\n page++;\n }\n\n // Return combined result with aggregated metadata\n return {\n contentType,\n entries: allEntries,\n meta: { pulledAt, entries: aggregatedMeta },\n pagination: {\n page: 1,\n limit: allEntries.length,\n total: allEntries.length,\n hasMore: false,\n },\n };\n}\n\n/**\n * Write all entries from a pull result to the content directory.\n * Handles the common pattern of iterating content types and writing each.\n */\nasync function writeAllEntries(\n contentDir: string,\n entriesByType: Record<string, PulledEntryOutput[]>,\n pulledAt: string,\n entriesMeta?: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }>\n): Promise<{ totalCount: number; files: string[] }> {\n let totalCount = 0;\n const files: string[] = [];\n\n for (const [contentType, entries] of Object.entries(entriesByType)) {\n // Extract metadata for this content type's entries\n // API returns keys as \"contentType:identifier\", we need to map to just \"identifier\"\n const ctMeta: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }> = {};\n for (const entry of entries) {\n const key = `${contentType}:${entry.identifier}`;\n if (entriesMeta?.[key]) {\n ctMeta[entry.identifier] = entriesMeta[key];\n }\n }\n\n const { filePath } = await writeEntries(contentDir, {\n contentType,\n entries,\n meta: { pulledAt, entries: ctMeta },\n pagination: { page: 1, limit: entries.length, total: entries.length, hasMore: false },\n });\n totalCount += entries.length;\n files.push(filePath);\n }\n\n return { totalCount, files };\n}\n\n/**\n * Fetch all content with pagination when bulk pull was truncated.\n * This ensures we get complete data for sites with >100 entries per type.\n * Preserves metadata from all paginated fetches for stale detection.\n */\nasync function fetchAllContentPaginated(\n client: ManagementClient,\n contentTypes: string[],\n output: OutputContext\n): Promise<PulledContent> {\n const allEntries: Record<string, PulledEntryOutput[]> = {};\n // Aggregate metadata from all content types with proper keys\n const allMeta: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }> = {};\n\n // Fetch each content type with pagination\n for (const contentType of contentTypes) {\n output.info(`Fetching ${contentType} entries...`);\n const result = await pullEntriesWithPagination(client, contentType, output);\n allEntries[contentType] = result.entries.map(mapEntryForOutput);\n\n // Preserve metadata with contentType:identifier keys\n for (const [id, meta] of Object.entries(result.meta.entries || {})) {\n allMeta[`${contentType}:${id}`] = meta;\n }\n\n output.info(` ${result.entries.length} entries`);\n }\n\n // Pages, navigation, and settings don't need pagination (typically small)\n output.info('Fetching pages...');\n const pagesResult = await client.pull.pages();\n\n output.info('Fetching navigation...');\n const navigationResult = await client.pull.navigation();\n\n output.info('Fetching settings...');\n const settingsResult = await client.pull.settings();\n\n return {\n entries: allEntries,\n pages: pagesResult.pages,\n navigation: navigationResult.menus,\n settings: settingsResult.settings,\n meta: { pulledAt: new Date().toISOString(), entries: allMeta },\n };\n}\n\nexport const pullCommand = new Command('pull')\n .description('Pull content from CMS')\n .argument('[scope]', 'What to pull: entries, pages, navigation, settings, or all (default)')\n .argument('[type]', 'Content type (when scope is \"entries\")')\n .option('--output <dir>', 'Output directory', './content')\n .option('--force', 'Overwrite existing files without prompting')\n .option('--yes', 'Skip confirmation prompt (same as --force)')\n .addHelpText('after', `\nExamples:\n $ riverbankcms pull # Pull all content\n $ riverbankcms pull --remote # Pull from production\n $ riverbankcms pull entries # Pull all entries\n $ riverbankcms pull entries blog-post # Pull specific content type\n $ riverbankcms pull pages # Pull pages with blocks\n $ riverbankcms pull navigation # Pull navigation menus\n $ riverbankcms pull settings # Pull site settings\n $ riverbankcms pull --output ./src/content # Custom output directory\n`)\n .action(\n withErrorHandling(\n async (scope: string | undefined, type: string | undefined, options: PullOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n const contentDir = path.resolve(options.output ?? './content');\n\n // Safety check: Prompt before overwriting existing directory\n if ((await contentDirExists(contentDir)) && !options.force && !options.yes) {\n // Check if we're in a TTY (interactive mode)\n if (!process.stdin.isTTY) {\n output.error('Content directory already exists and --yes not specified', {\n suggestion: 'Use --yes or --force to overwrite in non-interactive mode',\n });\n return;\n }\n\n const response = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Content directory '${path.basename(contentDir)}' already exists. Overwrite?`,\n initial: false,\n });\n\n if (!response.overwrite) {\n output.info('Aborted.');\n return;\n }\n }\n\n // Determine what to pull based on scope\n const pullScope = scope?.toLowerCase() ?? 'all';\n\n switch (pullScope) {\n case 'entries': {\n if (type) {\n // Pull specific content type with pagination\n output.info(`Pulling entries for content type: ${type}`);\n const result = await pullEntriesWithPagination(client, type, output);\n const { filePath, metaPath } = await writeEntries(contentDir, result);\n output.success(`Pulled ${result.entries.length} entries`, {\n contentType: type,\n file: filePath,\n meta: metaPath,\n });\n } else {\n // Pull all entries (need to iterate content types)\n output.info('Pulling all entries');\n let result = await client.pull.all();\n\n // Check for truncation and fall back to paginated fetch\n if (result.meta.truncated) {\n output.warn('Content was truncated due to size limits.');\n output.info('Fetching complete data via pagination...');\n const contentTypes = Object.keys(result.entries);\n result = await fetchAllContentPaginated(client, contentTypes, output);\n }\n\n const { totalCount, files } = await writeAllEntries(\n contentDir,\n result.entries,\n result.meta.pulledAt,\n result.meta.entries\n );\n\n output.success(`Pulled ${totalCount} entries across ${Object.keys(result.entries).length} content types`, {\n files,\n });\n }\n break;\n }\n\n case 'pages': {\n output.info('Pulling pages');\n const result = await client.pull.pages();\n const { filePaths, metaPath } = await writePages(contentDir, result);\n output.success(`Pulled ${result.pages.length} pages`, { files: filePaths, meta: metaPath });\n break;\n }\n\n case 'navigation': {\n output.info('Pulling navigation menus');\n const result = await client.pull.navigation();\n const { filePath, metaPath } = await writeNavigation(contentDir, result);\n output.success(`Pulled ${result.menus.length} navigation menus`, { file: filePath, meta: metaPath });\n break;\n }\n\n case 'settings': {\n output.info('Pulling site settings');\n const result = await client.pull.settings();\n const filePath = await writeSettings(contentDir, result);\n output.success('Pulled site settings', { file: filePath });\n break;\n }\n\n case 'all':\n default: {\n output.info('Pulling all content');\n let result = await client.pull.all();\n\n // Check for truncation and fall back to paginated fetch\n if (result.meta.truncated) {\n output.warn('Content was truncated due to size limits.');\n output.info('Fetching complete data via pagination...');\n const contentTypes = Object.keys(result.entries);\n result = await fetchAllContentPaginated(client, contentTypes, output);\n }\n\n // Write all content\n const { totalCount: totalEntries } = await writeAllEntries(\n contentDir,\n result.entries,\n result.meta.pulledAt,\n result.meta.entries\n );\n\n await writePages(contentDir, { pages: result.pages, meta: result.meta });\n await writeNavigation(contentDir, { menus: result.navigation, meta: result.meta });\n await writeSettings(contentDir, { settings: result.settings, meta: result.meta });\n\n output.success('Pull complete', {\n entries: { count: totalEntries, types: Object.keys(result.entries).length },\n pages: { count: result.pages.length },\n navigation: { count: result.navigation.length },\n directory: contentDir,\n });\n break;\n }\n }\n }\n )\n );\n","/**\n * CLI Config Loader\n *\n * Loads riverbank.config.ts and extracts CLI-relevant configuration\n * (contentDir and sync settings) with appropriate defaults.\n */\n\nimport { loadConfigFile } from './load-config';\nimport type { SyncConfig } from '../config/types';\n\n/**\n * Loaded CLI configuration with defaults applied.\n */\nexport interface LoadedCliConfig {\n /** Content directory path (resolved to absolute path) */\n contentDir: string;\n\n /** Sync behavior settings with defaults */\n sync: Required<SyncConfig>;\n}\n\n/**\n * Default sync configuration values.\n */\nconst DEFAULT_SYNC_CONFIG: Required<SyncConfig> = {\n existingEntries: 'skip',\n contentTarget: 'draft',\n};\n\n/**\n * Load CLI configuration from riverbank.config.ts.\n *\n * Extracts contentDir and sync settings, applying defaults where not specified.\n *\n * @param configPath - Optional path to config file or directory\n * @returns Loaded CLI config with defaults applied\n *\n * @example\n * ```typescript\n * const config = await loadCliConfig();\n * console.log(config.contentDir); // './content' or custom path\n * console.log(config.sync.existingEntries); // 'skip' or 'update'\n * ```\n */\nexport async function loadCliConfig(configPath?: string): Promise<LoadedCliConfig> {\n try {\n const rawConfig = await loadConfigFile(configPath);\n\n // Extract fields with type safety\n const configObj = rawConfig as Record<string, unknown>;\n\n const contentDir = typeof configObj.contentDir === 'string'\n ? configObj.contentDir\n : './content';\n\n const syncConfig = configObj.sync as SyncConfig | undefined;\n\n return {\n contentDir,\n sync: {\n existingEntries: syncConfig?.existingEntries ?? DEFAULT_SYNC_CONFIG.existingEntries,\n contentTarget: syncConfig?.contentTarget ?? DEFAULT_SYNC_CONFIG.contentTarget,\n },\n };\n } catch (error) {\n // If config file doesn't exist, return defaults\n if (error instanceof Error && error.message.includes('Config file not found')) {\n return {\n contentDir: './content',\n sync: { ...DEFAULT_SYNC_CONFIG },\n };\n }\n throw error;\n }\n}\n\n/**\n * Check if a CLI config file exists.\n *\n * @param configPath - Optional path to check\n * @returns True if config file exists\n */\nexport async function hasCliConfig(configPath?: string): Promise<boolean> {\n try {\n await loadConfigFile(configPath);\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Content Diff Calculator\n *\n * Compares local content with remote CMS state to determine\n * what changes need to be made during push operations.\n */\n\nimport equal from 'fast-deep-equal';\n\nimport type {\n LocalContent,\n LocalEntry,\n LocalPage,\n LocalBlock,\n LocalNavigation,\n LocalSettings,\n} from '../content/reader';\nimport type { PulledContent, PulledPages, ManagementNavigationMenu, ManagementSettings } from '../../client/management/types';\nimport { stripNavigationItemIds } from './mapper';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DiffType = 'create' | 'update' | 'unchanged';\n\nexport interface EntryDiff {\n type: DiffType;\n identifier: string;\n contentType: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n}\n\nexport interface PageDiff {\n type: DiffType;\n identifier: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n /** Block diffs for this page */\n blocks?: BlockDiff[];\n}\n\nexport interface BlockDiff {\n type: DiffType | 'delete' | 'reorder';\n identifier: string;\n pageIdentifier: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n}\n\nexport interface NavigationDiff {\n type: DiffType;\n name: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n}\n\nexport interface SettingsDiff {\n type: 'update';\n /** List of changed field paths */\n changes: string[];\n}\n\nexport interface ContentDiff {\n /** Entry diffs grouped by content type */\n entries: Map<string, EntryDiff[]>;\n /** Page diffs */\n pages: PageDiff[];\n /** Navigation menu diffs */\n navigation: NavigationDiff[];\n /** Settings diff (null if no local settings file) */\n settings: SettingsDiff | null;\n /** Summary statistics */\n summary: {\n entries: { create: number; update: number; unchanged: number };\n pages: { create: number; update: number; unchanged: number };\n blocks: { create: number; update: number; delete: number; unchanged: number };\n navigation: { create: number; update: number; unchanged: number };\n settings: { update: number; unchanged: number };\n };\n}\n\nexport interface DiffOptions {\n /** How to handle existing entries: 'skip' ignores updates, 'update' includes them */\n existingEntries: 'skip' | 'update';\n}\n\nexport type JsonDiffMode = 'summary' | 'full';\nexport type JsonDiffOperation = 'create' | 'update' | 'delete';\nexport type JsonDiffChangeType = 'entry' | 'page' | 'block' | 'navigation' | 'settings';\n\nexport interface JsonDiffChange {\n type: JsonDiffChangeType;\n identifier: string;\n operation: JsonDiffOperation;\n before?: unknown;\n after?: unknown;\n diff?: unknown;\n}\n\nexport interface JsonDiff {\n summary: { creates: number; updates: number; deletes: number };\n changes: JsonDiffChange[];\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Find changed field paths between two objects.\n */\nfunction findChangedFields(\n local: Record<string, unknown>,\n remote: Record<string, unknown>,\n prefix = ''\n): string[] {\n const changes: string[] = [];\n const allKeys = new Set([...Object.keys(local), ...Object.keys(remote)]);\n\n for (const key of allKeys) {\n const path = prefix ? `${prefix}.${key}` : key;\n const localVal = local[key];\n const remoteVal = remote[key];\n\n if (!equal(localVal, remoteVal)) {\n changes.push(path);\n }\n }\n\n return changes;\n}\n\n// ============================================================================\n// JSON Diff Output\n// ============================================================================\n\nexport function buildJsonDiff(\n diff: ContentDiff,\n local: LocalContent,\n remote: PulledContent,\n mode: JsonDiffMode\n): JsonDiff {\n const summary = { creates: 0, updates: 0, deletes: 0 };\n const changes: JsonDiffChange[] = [];\n\n const localPages = new Map(local.pages.map((page) => [page.identifier, page]));\n const remotePages = new Map(remote.pages.map((page) => [page.identifier, page]));\n\n const localEntries = local.entries;\n const remoteEntries = remote.entries;\n\n const localMenus = new Map((local.navigation?.menus ?? []).map((menu) => [menu.name, menu]));\n const remoteMenus = new Map(remote.navigation.map((menu) => [menu.name, menu]));\n\n const addChange = (change: JsonDiffChange): void => {\n if (change.operation === 'create') summary.creates += 1;\n if (change.operation === 'update') summary.updates += 1;\n if (change.operation === 'delete') summary.deletes += 1;\n changes.push(change);\n };\n\n for (const [contentType, entryDiffs] of diff.entries) {\n for (const entryDiff of entryDiffs) {\n if (entryDiff.type === 'unchanged') continue;\n if (entryDiff.type !== 'create' && entryDiff.type !== 'update') continue;\n\n const identifier = `${contentType}/${entryDiff.identifier}`;\n const localEntry = localEntries.get(contentType)?.find((entry) => entry.identifier === entryDiff.identifier);\n const remoteEntry = remoteEntries[contentType]?.find((entry) => entry.identifier === entryDiff.identifier);\n\n const change: JsonDiffChange = {\n type: 'entry',\n identifier,\n operation: entryDiff.type,\n };\n\n if (mode === 'full') {\n change.before = remoteEntry ?? null;\n change.after = localEntry ?? null;\n if (entryDiff.changes) change.diff = { changes: entryDiff.changes };\n }\n\n addChange(change);\n }\n }\n\n for (const pageDiff of diff.pages) {\n if (pageDiff.type === 'unchanged') continue;\n if (pageDiff.type !== 'create' && pageDiff.type !== 'update') continue;\n\n const identifier = pageDiff.identifier;\n const localPage = localPages.get(identifier);\n const remotePage = remotePages.get(identifier);\n\n const change: JsonDiffChange = {\n type: 'page',\n identifier,\n operation: pageDiff.type,\n };\n\n if (mode === 'full') {\n change.before = remotePage ?? null;\n change.after = localPage ?? null;\n if (pageDiff.changes) change.diff = { changes: pageDiff.changes };\n }\n\n addChange(change);\n\n if (pageDiff.blocks) {\n for (const blockDiff of pageDiff.blocks) {\n if (blockDiff.type === 'unchanged') continue;\n\n const pageId = blockDiff.pageIdentifier;\n const localBlock = localPages\n .get(pageId)\n ?.blocks?.find((block) => block.identifier === blockDiff.identifier);\n const remoteBlock = remotePages\n .get(pageId)\n ?.blocks?.find((block) => block.identifier === blockDiff.identifier);\n\n if (blockDiff.type === 'reorder') {\n const localOrder = localPages\n .get(pageId)\n ?.blocks?.map((block) => block.identifier) ?? [];\n\n addChange({\n type: 'block',\n identifier: `${pageId}::reorder`,\n operation: 'update',\n ...(mode === 'full'\n ? { diff: { reorder: true, order: localOrder } }\n : {}),\n });\n continue;\n }\n\n const operation = blockDiff.type === 'delete' ? 'delete' : blockDiff.type;\n const identifier = `${pageId}/${blockDiff.identifier}`;\n const change: JsonDiffChange = {\n type: 'block',\n identifier,\n operation,\n };\n\n if (mode === 'full') {\n change.before = remoteBlock ?? null;\n change.after = localBlock ?? null;\n if (blockDiff.changes) change.diff = { changes: blockDiff.changes };\n }\n\n addChange(change);\n }\n }\n }\n\n for (const navDiff of diff.navigation) {\n if (navDiff.type === 'unchanged') continue;\n if (navDiff.type !== 'create' && navDiff.type !== 'update') continue;\n\n const identifier = navDiff.name;\n const localMenu = localMenus.get(navDiff.name);\n const remoteMenu = remoteMenus.get(navDiff.name);\n\n const change: JsonDiffChange = {\n type: 'navigation',\n identifier,\n operation: navDiff.type,\n };\n\n if (mode === 'full') {\n change.before = remoteMenu\n ? { ...remoteMenu, items: stripNavigationItemIds(remoteMenu.items) }\n : null;\n change.after = localMenu ?? null;\n if (navDiff.changes) change.diff = { changes: navDiff.changes };\n }\n\n addChange(change);\n }\n\n if (diff.settings) {\n const change: JsonDiffChange = {\n type: 'settings',\n identifier: 'settings',\n operation: 'update',\n };\n\n if (mode === 'full') {\n change.before = remote.settings ?? null;\n change.after = local.settings ?? null;\n if (diff.settings.changes) change.diff = { changes: diff.settings.changes };\n }\n\n addChange(change);\n }\n\n return { summary, changes };\n}\n\n// ============================================================================\n// Entry Diff\n// ============================================================================\n\nfunction calculateEntryDiffs(\n localEntries: Map<string, LocalEntry[]>,\n remoteEntries: Record<string, Array<{ identifier: string; data: Record<string, unknown> }>>,\n options: DiffOptions\n): { diffs: Map<string, EntryDiff[]>; summary: ContentDiff['summary']['entries'] } {\n const diffs = new Map<string, EntryDiff[]>();\n const summary = { create: 0, update: 0, unchanged: 0 };\n\n // Build lookup of remote entries by identifier per content type\n const remoteLookup = new Map<string, Map<string, Record<string, unknown>>>();\n for (const [contentType, entries] of Object.entries(remoteEntries)) {\n const typeMap = new Map<string, Record<string, unknown>>();\n for (const entry of entries) {\n typeMap.set(entry.identifier, entry.data);\n }\n remoteLookup.set(contentType, typeMap);\n }\n\n // Compare local entries against remote\n for (const [contentType, localList] of localEntries) {\n const typeDiffs: EntryDiff[] = [];\n const remoteTypeMap = remoteLookup.get(contentType) ?? new Map();\n\n for (const localEntry of localList) {\n const remoteData = remoteTypeMap.get(localEntry.identifier);\n\n if (!remoteData) {\n // New entry\n typeDiffs.push({\n type: 'create',\n identifier: localEntry.identifier,\n contentType,\n });\n summary.create++;\n } else if (options.existingEntries === 'skip') {\n // Skip mode: existing entries are unchanged\n typeDiffs.push({\n type: 'unchanged',\n identifier: localEntry.identifier,\n contentType,\n });\n summary.unchanged++;\n } else if (!equal(localEntry.data, remoteData)) {\n // Update mode: check if data changed\n const changes = findChangedFields(\n localEntry.data as Record<string, unknown>,\n remoteData\n );\n typeDiffs.push({\n type: 'update',\n identifier: localEntry.identifier,\n contentType,\n changes,\n });\n summary.update++;\n } else {\n // Data unchanged\n typeDiffs.push({\n type: 'unchanged',\n identifier: localEntry.identifier,\n contentType,\n });\n summary.unchanged++;\n }\n }\n\n if (typeDiffs.length > 0) {\n diffs.set(contentType, typeDiffs);\n }\n }\n\n return { diffs, summary };\n}\n\n// ============================================================================\n// Page Diff\n// ============================================================================\n\nfunction calculatePageDiffs(\n localPages: LocalPage[],\n remotePages: PulledPages['pages'],\n options: DiffOptions\n): { diffs: PageDiff[]; summary: ContentDiff['summary']['pages']; blockSummary: ContentDiff['summary']['blocks'] } {\n const diffs: PageDiff[] = [];\n const summary = { create: 0, update: 0, unchanged: 0 };\n const blockSummary = { create: 0, update: 0, delete: 0, unchanged: 0 };\n\n // Build lookup of remote pages by identifier\n const remoteLookup = new Map<string, PulledPages['pages'][0]>();\n for (const page of remotePages) {\n remoteLookup.set(page.identifier, page);\n }\n\n for (const localPage of localPages) {\n const remotePage = remoteLookup.get(localPage.identifier);\n\n if (!remotePage) {\n // New page\n const blockDiffs = (localPage.blocks ?? []).map((block): BlockDiff => {\n blockSummary.create++;\n return {\n type: 'create',\n identifier: block.identifier,\n pageIdentifier: localPage.identifier,\n };\n });\n\n diffs.push({\n type: 'create',\n identifier: localPage.identifier,\n blocks: blockDiffs,\n });\n summary.create++;\n } else if (options.existingEntries === 'skip') {\n // Skip mode\n diffs.push({\n type: 'unchanged',\n identifier: localPage.identifier,\n });\n summary.unchanged++;\n } else {\n // Check page metadata changes\n const pageChanged =\n localPage.title !== remotePage.title ||\n localPage.path !== remotePage.path;\n\n // Calculate block diffs\n const blockDiffs = calculateBlockDiffs(\n localPage.blocks ?? [],\n remotePage.blocks ?? [],\n localPage.identifier,\n blockSummary\n );\n\n if (pageChanged || blockDiffs.some((b) => b.type !== 'unchanged')) {\n const changes: string[] = [];\n if (localPage.title !== remotePage.title) changes.push('title');\n if (localPage.path !== remotePage.path) changes.push('path');\n\n diffs.push({\n type: 'update',\n identifier: localPage.identifier,\n changes: changes.length > 0 ? changes : undefined,\n blocks: blockDiffs,\n });\n summary.update++;\n } else {\n diffs.push({\n type: 'unchanged',\n identifier: localPage.identifier,\n });\n summary.unchanged++;\n }\n }\n }\n\n return { diffs, summary, blockSummary };\n}\n\nfunction calculateBlockDiffs(\n localBlocks: LocalBlock[],\n remoteBlocks: Array<{ identifier: string; kind: string; data: Record<string, unknown>; position: number }>,\n pageIdentifier: string,\n summary: ContentDiff['summary']['blocks']\n): BlockDiff[] {\n const diffs: BlockDiff[] = [];\n\n // Build lookup of remote blocks\n const remoteLookup = new Map<string, (typeof remoteBlocks)[0]>();\n for (const block of remoteBlocks) {\n remoteLookup.set(block.identifier, block);\n }\n\n // Track which remote blocks are seen\n const seenRemoteIds = new Set<string>();\n\n for (const localBlock of localBlocks) {\n const remoteBlock = remoteLookup.get(localBlock.identifier);\n seenRemoteIds.add(localBlock.identifier);\n\n if (!remoteBlock) {\n // New block\n diffs.push({\n type: 'create',\n identifier: localBlock.identifier,\n pageIdentifier,\n });\n summary.create++;\n } else if (!equal(localBlock.data, remoteBlock.data) || localBlock.kind !== remoteBlock.kind) {\n // Block changed\n const changes = findChangedFields(\n localBlock.data as Record<string, unknown>,\n remoteBlock.data\n );\n if (localBlock.kind !== remoteBlock.kind) {\n changes.push('kind');\n }\n diffs.push({\n type: 'update',\n identifier: localBlock.identifier,\n pageIdentifier,\n changes,\n });\n summary.update++;\n } else {\n // Unchanged\n diffs.push({\n type: 'unchanged',\n identifier: localBlock.identifier,\n pageIdentifier,\n });\n summary.unchanged++;\n }\n }\n\n // Check for deleted blocks (in remote but not in local)\n for (const remoteBlock of remoteBlocks) {\n if (!seenRemoteIds.has(remoteBlock.identifier)) {\n diffs.push({\n type: 'delete',\n identifier: remoteBlock.identifier,\n pageIdentifier,\n });\n summary.delete++;\n }\n }\n\n // Check for reorder: compare order of blocks that exist in both local and remote\n const localOrder = localBlocks\n .filter((b) => remoteLookup.has(b.identifier))\n .map((b) => b.identifier);\n const remoteOrder = remoteBlocks\n .filter((b) => seenRemoteIds.has(b.identifier))\n .sort((a, b) => a.position - b.position)\n .map((b) => b.identifier);\n\n if (localOrder.length > 1 && !equal(localOrder, remoteOrder)) {\n diffs.push({\n type: 'reorder',\n identifier: pageIdentifier,\n pageIdentifier,\n });\n }\n\n return diffs;\n}\n\n// ============================================================================\n// Navigation Diff\n// ============================================================================\n\nfunction calculateNavigationDiffs(\n localNavigation: LocalNavigation | null,\n remoteNavigation: ManagementNavigationMenu[]\n): { diffs: NavigationDiff[]; summary: ContentDiff['summary']['navigation'] } {\n const diffs: NavigationDiff[] = [];\n const summary = { create: 0, update: 0, unchanged: 0 };\n\n if (!localNavigation || !localNavigation.menus) {\n return { diffs, summary };\n }\n\n // Build lookup of remote menus\n const remoteLookup = new Map<string, ManagementNavigationMenu>();\n for (const menu of remoteNavigation) {\n remoteLookup.set(menu.name, menu);\n }\n\n for (const localMenu of localNavigation.menus) {\n const remoteMenu = remoteLookup.get(localMenu.name);\n\n if (!remoteMenu) {\n // New menu\n diffs.push({\n type: 'create',\n name: localMenu.name,\n });\n summary.create++;\n } else if (!equal(localMenu.items, stripNavigationItemIds(remoteMenu.items))) {\n // Menu changed (compare without remote IDs)\n diffs.push({\n type: 'update',\n name: localMenu.name,\n changes: ['items'],\n });\n summary.update++;\n } else {\n // Unchanged\n diffs.push({\n type: 'unchanged',\n name: localMenu.name,\n });\n summary.unchanged++;\n }\n }\n\n return { diffs, summary };\n}\n\n// ============================================================================\n// Settings Diff\n// ============================================================================\n\nfunction calculateSettingsDiff(\n localSettings: LocalSettings | null,\n remoteSettings: ManagementSettings\n): { diff: SettingsDiff | null; summary: ContentDiff['summary']['settings'] } {\n const summary = { update: 0, unchanged: 0 };\n\n if (!localSettings) {\n return { diff: null, summary };\n }\n\n const changes: string[] = [];\n\n // Compare homepageId\n if (localSettings.homepageId !== remoteSettings.homepageId) {\n changes.push('homepageId');\n }\n\n // Compare seoDefaults\n if (!equal(localSettings.seoDefaults, remoteSettings.seoDefaults)) {\n changes.push('seoDefaults');\n }\n\n if (changes.length > 0) {\n summary.update = 1;\n return {\n diff: { type: 'update', changes },\n summary,\n };\n }\n\n summary.unchanged = 1;\n return { diff: null, summary };\n}\n\n// ============================================================================\n// Main Calculator\n// ============================================================================\n\n/**\n * Calculate differences between local content and remote CMS state.\n *\n * @param local - Local content from JSON files\n * @param remote - Remote content pulled from CMS\n * @param options - Diff options\n * @returns Content diff with all changes categorized\n */\nexport function calculateDiff(\n local: LocalContent,\n remote: PulledContent,\n options: DiffOptions\n): ContentDiff {\n const { diffs: entryDiffs, summary: entrySummary } = calculateEntryDiffs(\n local.entries,\n remote.entries,\n options\n );\n\n const { diffs: pageDiffs, summary: pageSummary, blockSummary } = calculatePageDiffs(\n local.pages,\n remote.pages,\n options\n );\n\n const { diffs: navDiffs, summary: navSummary } = calculateNavigationDiffs(\n local.navigation,\n remote.navigation\n );\n\n const { diff: settingsDiff, summary: settingsSummary } = calculateSettingsDiff(\n local.settings,\n remote.settings\n );\n\n return {\n entries: entryDiffs,\n pages: pageDiffs,\n navigation: navDiffs,\n settings: settingsDiff,\n summary: {\n entries: entrySummary,\n pages: pageSummary,\n blocks: blockSummary,\n navigation: navSummary,\n settings: settingsSummary,\n },\n };\n}\n\n/**\n * Check if there are any pending changes in the diff.\n */\nexport function hasPendingChanges(diff: ContentDiff): boolean {\n const { summary } = diff;\n return (\n summary.entries.create > 0 ||\n summary.entries.update > 0 ||\n summary.pages.create > 0 ||\n summary.pages.update > 0 ||\n summary.blocks.create > 0 ||\n summary.blocks.update > 0 ||\n summary.blocks.delete > 0 ||\n summary.navigation.create > 0 ||\n summary.navigation.update > 0 ||\n summary.settings.update > 0\n );\n}\n\n/**\n * Format diff summary for display.\n */\nexport function formatDiffSummary(diff: ContentDiff): string {\n const lines: string[] = [];\n const { summary } = diff;\n\n if (summary.entries.create > 0 || summary.entries.update > 0) {\n lines.push(`Entries: +${summary.entries.create} ~${summary.entries.update}`);\n }\n if (summary.pages.create > 0 || summary.pages.update > 0) {\n lines.push(`Pages: +${summary.pages.create} ~${summary.pages.update}`);\n }\n if (summary.blocks.create > 0 || summary.blocks.update > 0 || summary.blocks.delete > 0) {\n lines.push(`Blocks: +${summary.blocks.create} ~${summary.blocks.update} -${summary.blocks.delete}`);\n }\n if (summary.navigation.create > 0 || summary.navigation.update > 0) {\n lines.push(`Navigation: +${summary.navigation.create} ~${summary.navigation.update}`);\n }\n if (summary.settings.update > 0) {\n lines.push(`Settings: ~${summary.settings.update}`);\n }\n\n if (lines.length === 0) {\n return 'No changes detected';\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format detailed diff for display.\n */\nexport function formatDiffDetail(diff: ContentDiff): string {\n const lines: string[] = [];\n\n // Entries\n for (const [contentType, entryDiffs] of diff.entries) {\n const creates = entryDiffs.filter((d) => d.type === 'create');\n const updates = entryDiffs.filter((d) => d.type === 'update');\n\n if (creates.length > 0) {\n lines.push(`\\n${contentType} (new):`);\n for (const d of creates) {\n lines.push(` + ${d.identifier}`);\n }\n }\n if (updates.length > 0) {\n lines.push(`\\n${contentType} (updated):`);\n for (const d of updates) {\n lines.push(` ~ ${d.identifier}${d.changes ? ` [${d.changes.join(', ')}]` : ''}`);\n }\n }\n }\n\n // Pages\n const pageCreates = diff.pages.filter((d) => d.type === 'create');\n const pageUpdates = diff.pages.filter((d) => d.type === 'update');\n\n if (pageCreates.length > 0) {\n lines.push('\\nPages (new):');\n for (const d of pageCreates) {\n lines.push(` + ${d.identifier}`);\n }\n }\n if (pageUpdates.length > 0) {\n lines.push('\\nPages (updated):');\n for (const d of pageUpdates) {\n lines.push(` ~ ${d.identifier}${d.changes ? ` [${d.changes.join(', ')}]` : ''}`);\n }\n }\n\n // Navigation\n const navCreates = diff.navigation.filter((d) => d.type === 'create');\n const navUpdates = diff.navigation.filter((d) => d.type === 'update');\n\n if (navCreates.length > 0) {\n lines.push('\\nNavigation (new):');\n for (const d of navCreates) {\n lines.push(` + ${d.name}`);\n }\n }\n if (navUpdates.length > 0) {\n lines.push('\\nNavigation (updated):');\n for (const d of navUpdates) {\n lines.push(` ~ ${d.name}`);\n }\n }\n\n // Settings\n if (diff.settings) {\n lines.push('\\nSettings (updated):');\n lines.push(` ~ [${diff.settings.changes.join(', ')}]`);\n }\n\n return lines.join('\\n');\n}\n","/**\n * Sync Executor\n *\n * Applies content changes to the CMS based on a calculated diff.\n * Supports dry-run mode and progress reporting.\n */\n\nimport type { ManagementClient } from '../../client/management/types';\nimport type { LocalContent } from '../content/reader';\nimport type { OutputContext } from '../output';\nimport type { ContentDiff, BlockDiff } from './diff';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SyncOptions {\n /** If true, don't actually make changes */\n dryRun: boolean;\n /** Target for content updates */\n contentTarget: 'draft' | 'publish';\n}\n\nexport interface SyncResult {\n entries: { created: number; updated: number; failed: number };\n pages: { created: number; updated: number; failed: number };\n blocks: { created: number; updated: number; deleted: number; failed: number };\n navigation: { created: number; updated: number; failed: number };\n settings: { updated: number; failed: number };\n errors: Array<{ resource: string; identifier: string; error: string }>;\n}\n\nfunction createEmptyResult(): SyncResult {\n return {\n entries: { created: 0, updated: 0, failed: 0 },\n pages: { created: 0, updated: 0, failed: 0 },\n blocks: { created: 0, updated: 0, deleted: 0, failed: 0 },\n navigation: { created: 0, updated: 0, failed: 0 },\n settings: { updated: 0, failed: 0 },\n errors: [],\n };\n}\n\n// ============================================================================\n// Entry Sync\n// ============================================================================\n\nasync function syncEntries(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n for (const [contentType, entryDiffs] of diff.entries) {\n const localEntries = local.entries.get(contentType) ?? [];\n const entryLookup = new Map(localEntries.map((e) => [e.identifier, e]));\n\n for (const entryDiff of entryDiffs) {\n if (entryDiff.type === 'unchanged') continue;\n\n const localEntry = entryLookup.get(entryDiff.identifier);\n if (!localEntry) continue;\n\n try {\n if (options.dryRun) {\n if (entryDiff.type === 'create') {\n result.entries.created++;\n } else {\n result.entries.updated++;\n }\n continue;\n }\n\n await client.entries.upsert({\n contentType,\n identifier: localEntry.identifier,\n data: localEntry.data,\n slug: localEntry.slug,\n });\n\n if (options.contentTarget === 'publish') {\n await client.entries.publish(contentType, localEntry.identifier);\n }\n\n if (entryDiff.type === 'create') {\n result.entries.created++;\n } else {\n result.entries.updated++;\n }\n } catch (error) {\n result.entries.failed++;\n result.errors.push({\n resource: 'entry',\n identifier: `${contentType}/${entryDiff.identifier}`,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n}\n\n// ============================================================================\n// Page Sync\n// ============================================================================\n\nasync function syncPages(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n const pageLookup = new Map(local.pages.map((p) => [p.identifier, p]));\n\n for (const pageDiff of diff.pages) {\n if (pageDiff.type === 'unchanged') continue;\n\n const localPage = pageLookup.get(pageDiff.identifier);\n if (!localPage) continue;\n\n try {\n if (options.dryRun) {\n if (pageDiff.type === 'create') {\n result.pages.created++;\n if (pageDiff.blocks) {\n result.blocks.created += pageDiff.blocks.filter((b) => b.type === 'create').length;\n }\n } else {\n result.pages.updated++;\n if (pageDiff.blocks) {\n for (const blockDiff of pageDiff.blocks) {\n if (blockDiff.type === 'create') result.blocks.created++;\n else if (blockDiff.type === 'update') result.blocks.updated++;\n else if (blockDiff.type === 'delete') result.blocks.deleted++;\n }\n }\n }\n continue;\n }\n\n await client.pages.upsert({\n identifier: localPage.identifier,\n title: localPage.title,\n path: localPage.path,\n seoTitle: localPage.seoTitle,\n seoDescription: localPage.seoDescription,\n });\n\n if (pageDiff.blocks && localPage.blocks) {\n await syncBlocks(\n client,\n pageDiff.identifier,\n pageDiff.blocks,\n localPage.blocks,\n options,\n result\n );\n }\n\n if (options.contentTarget === 'publish') {\n await client.pages.publish(localPage.identifier);\n }\n\n if (pageDiff.type === 'create') {\n result.pages.created++;\n } else {\n result.pages.updated++;\n }\n } catch (error) {\n result.pages.failed++;\n result.errors.push({\n resource: 'page',\n identifier: pageDiff.identifier,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\nasync function syncBlocks(\n client: ManagementClient,\n pageIdentifier: string,\n blockDiffs: BlockDiff[],\n localBlocks: Array<{ identifier: string; kind: string; data: Record<string, unknown> }>,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n const blockLookup = new Map(localBlocks.map((b) => [b.identifier, b]));\n\n for (const blockDiff of blockDiffs) {\n if (blockDiff.type === 'unchanged') continue;\n\n try {\n if (blockDiff.type === 'delete') {\n await client.blocks.delete(pageIdentifier, blockDiff.identifier);\n result.blocks.deleted++;\n } else {\n const localBlock = blockLookup.get(blockDiff.identifier);\n if (!localBlock) continue;\n\n await client.blocks.upsert(pageIdentifier, {\n identifier: localBlock.identifier,\n kind: localBlock.kind,\n data: localBlock.data,\n });\n\n if (blockDiff.type === 'create') {\n result.blocks.created++;\n } else {\n result.blocks.updated++;\n }\n }\n } catch (error) {\n result.blocks.failed++;\n result.errors.push({\n resource: 'block',\n identifier: `${pageIdentifier}/${blockDiff.identifier}`,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Only reorder if diff indicates order changed\n const hasReorderDiff = blockDiffs.some((d) => d.type === 'reorder');\n if (hasReorderDiff) {\n const localIdentifiers = localBlocks.map((b) => b.identifier);\n if (localIdentifiers.length > 1) {\n try {\n await client.blocks.reorder(pageIdentifier, localIdentifiers);\n } catch {\n // Reorder failure is non-fatal\n }\n }\n }\n}\n\n// ============================================================================\n// Navigation Sync\n// ============================================================================\n\nasync function syncNavigation(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n if (!local.navigation?.menus) return;\n\n const menuLookup = new Map(local.navigation.menus.map((m) => [m.name, m]));\n\n for (const navDiff of diff.navigation) {\n if (navDiff.type === 'unchanged') continue;\n\n const localMenu = menuLookup.get(navDiff.name);\n if (!localMenu) continue;\n\n try {\n if (options.dryRun) {\n if (navDiff.type === 'create') {\n result.navigation.created++;\n } else {\n result.navigation.updated++;\n }\n continue;\n }\n\n await client.navigation.upsert({\n name: localMenu.name,\n items: localMenu.items,\n });\n\n if (navDiff.type === 'create') {\n result.navigation.created++;\n } else {\n result.navigation.updated++;\n }\n } catch (error) {\n result.navigation.failed++;\n result.errors.push({\n resource: 'navigation',\n identifier: navDiff.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\n// ============================================================================\n// Settings Sync\n// ============================================================================\n\nasync function syncSettings(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n if (!diff.settings || !local.settings) return;\n\n try {\n if (options.dryRun) {\n result.settings.updated++;\n return;\n }\n\n await client.settings.update({\n homepageId: local.settings.homepageId,\n seoDefaults: local.settings.seoDefaults,\n });\n\n result.settings.updated++;\n } catch (error) {\n result.settings.failed++;\n result.errors.push({\n resource: 'settings',\n identifier: 'site',\n error: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\n// ============================================================================\n// Main Executor\n// ============================================================================\n\n/**\n * Execute a sync plan based on calculated diff.\n *\n * @param client - Management client\n * @param diff - Calculated content diff\n * @param local - Local content\n * @param options - Sync options (dryRun, contentTarget)\n * @param output - Output context for progress reporting\n * @returns Sync result with counts and errors\n */\nexport async function executeSyncPlan(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n output: OutputContext\n): Promise<SyncResult> {\n const result = createEmptyResult();\n\n const totalOps =\n diff.summary.entries.create +\n diff.summary.entries.update +\n diff.summary.pages.create +\n diff.summary.pages.update +\n diff.summary.blocks.create +\n diff.summary.blocks.update +\n diff.summary.blocks.delete +\n diff.summary.navigation.create +\n diff.summary.navigation.update +\n diff.summary.settings.update;\n\n if (totalOps === 0) {\n output.info('No changes to sync');\n return result;\n }\n\n const prefix = options.dryRun ? '[Dry run] Would sync' : 'Syncing';\n output.info(`${prefix} ${totalOps} operations...`);\n\n await syncEntries(client, diff, local, options, result);\n await syncPages(client, diff, local, options, result);\n await syncNavigation(client, diff, local, options, result);\n await syncSettings(client, diff, local, options, result);\n\n return result;\n}\n\n/**\n * Format sync result for display.\n */\nexport function formatSyncResult(result: SyncResult, dryRun: boolean): string {\n const lines: string[] = [];\n const verb = dryRun ? 'Would' : '';\n\n if (result.entries.created > 0 || result.entries.updated > 0) {\n lines.push(\n `Entries: ${verb} created ${result.entries.created}, updated ${result.entries.updated}` +\n (result.entries.failed > 0 ? `, failed ${result.entries.failed}` : '')\n );\n }\n\n if (result.pages.created > 0 || result.pages.updated > 0) {\n lines.push(\n `Pages: ${verb} created ${result.pages.created}, updated ${result.pages.updated}` +\n (result.pages.failed > 0 ? `, failed ${result.pages.failed}` : '')\n );\n }\n\n if (result.blocks.created > 0 || result.blocks.updated > 0 || result.blocks.deleted > 0) {\n lines.push(\n `Blocks: ${verb} created ${result.blocks.created}, updated ${result.blocks.updated}, deleted ${result.blocks.deleted}` +\n (result.blocks.failed > 0 ? `, failed ${result.blocks.failed}` : '')\n );\n }\n\n if (result.navigation.created > 0 || result.navigation.updated > 0) {\n lines.push(\n `Navigation: ${verb} created ${result.navigation.created}, updated ${result.navigation.updated}` +\n (result.navigation.failed > 0 ? `, failed ${result.navigation.failed}` : '')\n );\n }\n\n if (result.settings.updated > 0) {\n lines.push(\n `Settings: ${verb} updated ${result.settings.updated}` +\n (result.settings.failed > 0 ? `, failed ${result.settings.failed}` : '')\n );\n }\n\n if (result.errors.length > 0) {\n lines.push('\\nErrors:');\n for (const error of result.errors) {\n lines.push(` ${error.resource}/${error.identifier}: ${error.error}`);\n }\n }\n\n if (lines.length === 0) {\n return 'Everything is in sync - no changes needed';\n }\n\n return lines.join('\\n');\n}\n","/**\n * Push Command\n *\n * Pushes local content to the CMS with diff-based sync.\n *\n * Usage:\n * riverbankcms push # Push all content\n * riverbankcms push entries # Push all entries\n * riverbankcms push entries blog-post # Push specific content type\n * riverbankcms push pages # Push pages with blocks\n * riverbankcms push navigation # Push navigation menus\n * riverbankcms push --dry-run # Show what would be pushed\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\n\nimport { createManagementClient } from '../../client/management';\nimport { loadEnvironment } from '../env';\nimport { loadCliConfig, type LoadedCliConfig } from '../config-loader';\nimport {\n readAllContent,\n readAllMeta,\n readPagesMeta,\n readNavigationMeta,\n contentDirExists,\n getContentSummary,\n type LocalContent,\n type EntryMetadata,\n type PagesMetadata,\n type NavigationMetadata,\n} from '../content/reader';\nimport {\n calculateDiff,\n hasPendingChanges,\n formatDiffSummary,\n formatDiffDetail,\n executeSyncPlan,\n formatSyncResult,\n type ContentDiff,\n type SyncResult,\n buildJsonDiff,\n type JsonDiffMode,\n} from '../sync';\nimport { getOutputContext, handleCommandError } from '../helpers';\nimport type { OutputContext } from '../output';\nimport type { PulledContent } from '../../client/management/types';\n\ninterface PushOptions {\n contentDir?: string;\n dryRun?: boolean;\n yes?: boolean;\n force?: boolean;\n allowTruncated?: boolean;\n jsonDiff?: JsonDiffMode;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Filter local content based on push scope (entries, pages, navigation, or all)\n * @internal Exported for testing\n */\nexport function filterLocalContent(\n localContent: LocalContent,\n scope: string,\n contentType?: string\n): LocalContent {\n if (scope === 'entries') {\n if (contentType) {\n // Filter to specific content type\n const filtered = new Map<string, typeof localContent.entries extends Map<string, infer V> ? V : never>();\n const entries = localContent.entries.get(contentType);\n if (entries) {\n filtered.set(contentType, entries);\n }\n return { ...localContent, entries: filtered, pages: [], navigation: null };\n }\n return { ...localContent, pages: [], navigation: null };\n }\n\n if (scope === 'pages') {\n return { ...localContent, entries: new Map(), navigation: null };\n }\n\n if (scope === 'navigation') {\n return { ...localContent, entries: new Map(), pages: [] };\n }\n\n // 'all' - return unfiltered\n return localContent;\n}\n\n/**\n * Display diff summary and details\n */\nfunction displayDiff(\n output: OutputContext,\n diff: ContentDiff,\n config: LoadedCliConfig,\n dryRun: boolean,\n isRemote: boolean,\n jsonOutput: boolean,\n jsonDiffMode: JsonDiffMode | undefined,\n localContent: LocalContent,\n remoteContent: PulledContent,\n): void {\n const envLabel = isRemote ? 'REMOTE' : 'LOCAL';\n\n if (jsonDiffMode) {\n const jsonDiff = buildJsonDiff(diff, localContent, remoteContent, jsonDiffMode);\n output.json(jsonDiff);\n return;\n }\n\n if (jsonOutput) {\n output.json({\n summary: diff.summary,\n syncConfig: config.sync,\n dryRun,\n });\n } else {\n if (dryRun) {\n output.info(`[DRY RUN] Changes that would be pushed to ${envLabel}:`);\n } else {\n output.info(`Changes to push to ${envLabel}:`);\n }\n output.info(formatDiffSummary(diff));\n output.info(formatDiffDetail(diff));\n }\n}\n\n/**\n * Report sync results\n */\nfunction reportSyncResults(\n output: OutputContext,\n result: SyncResult,\n hasErrors: boolean\n): void {\n if (hasErrors) {\n output.warn('Push completed with errors');\n } else {\n output.success('Push complete');\n }\n output.info(formatSyncResult(result, false));\n}\n\n// ============================================================================\n// Command\n// ============================================================================\n\n/**\n * Check for stale content (remote is newer than local base)\n * @internal Exported for testing\n */\nexport function checkForStaleContent(\n localContent: LocalContent,\n localMeta: Map<string, EntryMetadata>,\n pagesMeta: PagesMetadata | null,\n navigationMeta: NavigationMetadata | null,\n remoteContent: PulledContent\n): string[] {\n const staleItems: string[] = [];\n\n // Check Entries\n for (const [contentType, localEntries] of localContent.entries) {\n const meta = localMeta.get(contentType);\n if (!meta) continue; // No meta means untreated or legacy, skip check\n\n remoteContent.entries[contentType]?.forEach((remoteEntry) => {\n const localEntry = localEntries.find((e) => e.identifier === remoteEntry.identifier);\n if (localEntry) {\n // Find local base time from metadata (stored with identifier key)\n const entryMeta = meta.entries[remoteEntry.identifier];\n const localBaseTime = entryMeta?.updatedAt;\n\n // Get remote time from the metadata returned by API\n const remoteTime = remoteContent.meta.entries?.[`${contentType}:${remoteEntry.identifier}`]?.updatedAt;\n\n if (localBaseTime && remoteTime && new Date(remoteTime) > new Date(localBaseTime)) {\n staleItems.push(`Entry: ${contentType}/${remoteEntry.identifier} (Remote updated: ${remoteTime})`);\n }\n }\n });\n }\n\n // Check Pages using metadata\n if (pagesMeta) {\n localContent.pages.forEach((localPage) => {\n const remotePage = remoteContent.pages.find((p) => p.identifier === localPage.identifier);\n const localBaseTime = pagesMeta.pages[localPage.identifier]?.updatedAt;\n if (remotePage && localBaseTime) {\n if (new Date(remotePage.updatedAt) > new Date(localBaseTime)) {\n staleItems.push(`Page: ${localPage.identifier} (Remote updated: ${remotePage.updatedAt})`);\n }\n }\n });\n }\n\n // Check Navigation using metadata\n if (navigationMeta) {\n localContent.navigation?.menus.forEach((localMenu) => {\n const remoteMenu = remoteContent.navigation.find((m) => m.name === localMenu.name);\n const localBaseTime = navigationMeta.menus[localMenu.name]?.updatedAt;\n if (remoteMenu && localBaseTime) {\n if (new Date(remoteMenu.updatedAt) > new Date(localBaseTime)) {\n staleItems.push(`Navigation: ${localMenu.name} (Remote updated: ${remoteMenu.updatedAt})`);\n }\n }\n });\n }\n\n return staleItems;\n}\n\nexport const pushCommand = new Command('push')\n .description('Push content to CMS')\n .argument('[scope]', 'What to push: entries, pages, navigation, or all (default)')\n .argument('[type]', 'Content type (when scope is \"entries\")')\n .option('--content-dir <dir>', 'Content directory (overrides config)')\n .option('--dry-run', 'Show what would be pushed without making changes')\n .option('--yes', 'Skip confirmation prompt (required for --remote)')\n .option('--force', 'Push even if remote content is newer (skip stale check)')\n .option('--allow-truncated', 'Push even if remote content was truncated (may cause incomplete sync)')\n .option('--json-diff [mode]', 'Output JSON diff (summary or full)', 'summary')\n .addHelpText('after', `\nExamples:\n $ riverbankcms push # Push all content\n $ riverbankcms push --dry-run # Preview changes\n $ riverbankcms push --remote --yes # Push to production\n $ riverbankcms push entries # Push all entries\n $ riverbankcms push entries blog-post # Push specific content type\n $ riverbankcms push pages # Push pages with blocks\n $ riverbankcms push navigation # Push navigation menus\n $ riverbankcms push --content-dir ./src/content # Custom content directory\n $ riverbankcms push --dry-run --json-diff=summary # JSON summary for agents\n $ riverbankcms push --dry-run --json-diff=full # Full JSON before/after payloads\n\nSync Behavior:\n Content sync is controlled by your riverbank.config.ts:\n - sync.existingEntries: 'skip' (default) or 'update'\n - sync.contentTarget: 'draft' (default) or 'publish'\n\nSafety:\n - Stale detection: aborts if remote content is newer than last pull (use --force to override)\n - Truncation: aborts if remote has >100 entries per type (use --allow-truncated to override)\n - Remote environment (--remote): defaults to dry-run, requires --yes to execute\n`)\n .action(async (scope: string | undefined, type: string | undefined, options: PushOptions, command: Command) => {\n const { output, isRemote, globalOpts } = getOutputContext(command);\n let dryRun = options.dryRun ?? false;\n const jsonDiffMode = options.jsonDiff\n ? (options.jsonDiff === 'summary' || options.jsonDiff === 'full' ? options.jsonDiff : null)\n : undefined;\n\n if (options.jsonDiff && !jsonDiffMode) {\n output.error('Invalid value for --json-diff. Use summary or full.');\n return;\n }\n\n // Remote defaults to dry-run unless --yes is provided\n if (isRemote && !options.yes) {\n dryRun = true;\n output.info('Remote push defaults to dry-run mode. Use --yes to apply changes.');\n }\n\n try {\n // Load CLI config (contentDir and sync settings)\n const cliConfig = await loadCliConfig();\n const contentDir = path.resolve(options.contentDir ?? cliConfig.contentDir);\n\n // Check content directory exists\n if (!(await contentDirExists(contentDir))) {\n return output.error(`Content directory not found: ${contentDir}`, {\n suggestion: 'Run \"riverbankcms pull\" first to download content, or specify a different directory with --content-dir',\n });\n }\n\n // Get content summary\n const summary = await getContentSummary(contentDir);\n if (summary.totalEntries === 0 && summary.pageCount === 0 && !summary.hasNavigation) {\n output.warn('No content found to push');\n return;\n }\n\n // Load environment and create client\n const env = loadEnvironment(isRemote);\n const client = createManagementClient({\n dashboardUrl: env.dashboardUrl,\n managementApiKey: env.managementApiKey,\n siteId: env.siteId,\n });\n\n // Read local content\n output.info('Reading local content...');\n const localContent = await readAllContent(contentDir);\n\n // Filter content based on scope BEFORE stale detection\n // This ensures stale checks only apply to content being pushed\n const pushScope = scope?.toLowerCase() ?? 'all';\n const filteredLocal = filterLocalContent(localContent, pushScope, type);\n\n // Pull remote content for comparison\n output.info('Fetching remote content for comparison...');\n const remoteContent = await client.pull.all();\n\n // Check for truncation (separate from stale check)\n if (remoteContent.meta.truncated) {\n output.warn('Warning: Remote content was truncated due to size limits.');\n output.warn(\n remoteContent.meta.truncationMessage ??\n 'Some content types have more than 100 entries. Results may be incomplete.'\n );\n if (!options.allowTruncated) {\n output.error(\n 'Push aborted due to truncated remote content.',\n { suggestion: 'Use --allow-truncated to push anyway, or push specific content types: riverbankcms push entries blog-post' }\n );\n return;\n }\n output.warn('Proceeding with push despite truncation (--allow-truncated flag used)');\n }\n\n // Check for stale content to prevent overwriting newer remote changes\n // Only checks filtered content (scoped to what we're actually pushing)\n if (!options.force) {\n output.info('Checking for stale content...');\n const [localMeta, pagesMeta, navigationMeta] = await Promise.all([\n readAllMeta(contentDir),\n readPagesMeta(contentDir),\n readNavigationMeta(contentDir),\n ]);\n const staleItems = checkForStaleContent(filteredLocal, localMeta, pagesMeta, navigationMeta, remoteContent);\n\n if (staleItems.length > 0) {\n output.warn('WARNING: The following remote content has changed since you last pulled:');\n staleItems.forEach((item) => output.warn(` - ${item}`));\n output.error(\n 'Push aborted to prevent overwriting newer content.',\n { suggestion: 'Run \"riverbankcms pull\" to update your local content, or use --force to overwrite.' }\n );\n return;\n }\n }\n\n // Calculate diff\n output.info('Calculating changes...');\n const diff = calculateDiff(filteredLocal, remoteContent, {\n existingEntries: cliConfig.sync.existingEntries,\n });\n\n // Check if there are any changes\n if (!hasPendingChanges(diff)) {\n output.success('No changes detected - content is already in sync');\n return;\n }\n\n // Display diff\n displayDiff(\n output,\n diff,\n cliConfig,\n dryRun,\n isRemote,\n globalOpts.json ?? false,\n jsonDiffMode ?? undefined,\n filteredLocal,\n remoteContent\n );\n\n // Exit if dry run\n if (dryRun) {\n output.info('\\nUse --yes (for remote) or remove --dry-run (for local) to apply changes.');\n return;\n }\n\n // Execute the sync\n output.info('\\nApplying changes...');\n const result = await executeSyncPlan(\n client,\n diff,\n filteredLocal,\n { dryRun: false, contentTarget: cliConfig.sync.contentTarget },\n output\n );\n\n // Report results\n reportSyncResults(output, result, result.errors.length > 0);\n } catch (error) {\n handleCommandError(error, output);\n }\n });\n","/**\n * Entry Command\n *\n * Manage content entries via CLI.\n *\n * Usage:\n * riverbankcms entry upsert <type> <identifier> --data <json>\n * riverbankcms entry publish <type> <identifier>\n * riverbankcms entry unpublish <type> <identifier>\n * riverbankcms entry get <type> <identifier>\n * riverbankcms entry list <type> [--limit N] [--page N]\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementEntry } from '../../client/management/types';\nimport {\n type DataInputOptions,\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n createPublishCommand,\n createUnpublishCommand,\n formatDateShort,\n parseJsonData,\n withErrorHandling,\n} from '../helpers';\n\ninterface UpsertOptions extends DataInputOptions {\n slug?: string;\n title?: string;\n}\n\n/**\n * Format an entry for table display\n */\nconst formatEntryRow: RowFormatter<ManagementEntry> = (entry) => [\n entry.identifier,\n entry.status,\n entry.hasUnpublishedChanges ? 'Yes' : 'No',\n entry.slug ?? '-',\n formatDateShort(entry.updatedAt),\n];\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update an entry')\n .argument('<type>', 'Content type')\n .argument('<identifier>', 'Entry identifier')\n .option('--data <json>', 'Entry data as JSON string')\n .option('--file <path>', 'Path to JSON file with entry data')\n .option('--slug <slug>', 'Entry slug (defaults to identifier)')\n .option('--title <title>', 'Entry title')\n .action(\n withErrorHandling(async (type: string, identifier: string, options: UpsertOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n const data = await parseJsonData(options);\n\n output.info(`Upserting entry: ${type}/${identifier}`);\n\n const entry = await client.entries.upsert({\n contentType: type,\n identifier,\n data,\n slug: options.slug,\n title: options.title,\n });\n\n output.success(`Entry upserted: ${entry.identifier}`, {\n id: entry.id,\n identifier: entry.identifier,\n contentType: entry.contentType,\n status: entry.status,\n });\n })\n );\n\nconst publishCommand = createPublishCommand({\n resourceName: 'entry',\n args: ['type', 'identifier'],\n action: (client, type, identifier) => client.entries.publish(type, identifier),\n});\n\nconst unpublishCommand = createUnpublishCommand({\n resourceName: 'entry',\n args: ['type', 'identifier'],\n action: (client, type, identifier) => client.entries.unpublish(type, identifier),\n});\n\nconst getCommand = createGetCommand<ManagementEntry>({\n resourceName: 'entry',\n args: ['type', 'identifier'],\n get: (client, type, identifier) => client.entries.get(type, identifier),\n formatOutput: (entry) => ({\n id: entry.id,\n contentType: entry.contentType,\n status: entry.status,\n hasUnpublishedChanges: entry.hasUnpublishedChanges,\n slug: entry.slug,\n data: entry.data,\n createdAt: entry.createdAt,\n updatedAt: entry.updatedAt,\n publishedAt: entry.publishedAt,\n }),\n});\n\nconst listCommand = createListCommand<ManagementEntry>({\n resourceName: 'entry',\n resourceNamePlural: 'entries',\n args: ['type'],\n hasPagination: true,\n list: (client, args, pagination) => client.entries.list(args[0]!, pagination),\n tableHeaders: ['Identifier', 'Status', 'Unpublished Changes', 'Slug', 'Updated'],\n formatRow: formatEntryRow,\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const entryCommand = new Command('entry')\n .description('Manage content entries')\n .addHelpText('after', `\nExamples:\n $ riverbankcms entry upsert blog-post my-post --data '{\"title\": \"Hello\"}'\n $ riverbankcms entry upsert blog-post my-post --file ./post-data.json\n $ riverbankcms entry publish blog-post my-post\n $ riverbankcms entry unpublish blog-post my-post\n $ riverbankcms entry get blog-post my-post\n $ riverbankcms entry list blog-post --limit 10 --page 1\n`)\n .addCommand(upsertCommand)\n .addCommand(publishCommand)\n .addCommand(unpublishCommand)\n .addCommand(getCommand)\n .addCommand(listCommand);\n","/**\n * Page Command\n *\n * Manage pages via CLI.\n *\n * Usage:\n * riverbankcms page upsert <identifier> --title <title> --path <path>\n * riverbankcms page publish <identifier>\n * riverbankcms page unpublish <identifier>\n * riverbankcms page get <identifier>\n * riverbankcms page list [--limit N] [--page N]\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementPage } from '../../client/management/types';\nimport {\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n createPublishCommand,\n createUnpublishCommand,\n formatDateShort,\n withErrorHandling,\n} from '../helpers';\n\ninterface UpsertOptions {\n title: string;\n path: string;\n seoTitle?: string;\n seoDescription?: string;\n}\n\n/**\n * Format a page for table display\n */\nconst formatPageRow: RowFormatter<ManagementPage> = (page) => [\n page.identifier ?? '(no identifier)',\n page.title,\n page.path,\n page.status,\n page.hasUnpublishedChanges ? 'Yes' : 'No',\n formatDateShort(page.updatedAt),\n];\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update a page')\n .argument('<identifier>', 'Page identifier')\n .requiredOption('--title <title>', 'Page title')\n .requiredOption('--path <path>', 'Page path (e.g., /about)')\n .option('--seo-title <title>', 'SEO title')\n .option('--seo-description <description>', 'SEO description')\n .action(\n withErrorHandling(async (identifier: string, options: UpsertOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n\n output.info(`Upserting page: ${identifier}`);\n\n const page = await client.pages.upsert({\n identifier,\n title: options.title,\n path: options.path,\n seoTitle: options.seoTitle,\n seoDescription: options.seoDescription,\n });\n\n output.success(`Page upserted: ${page.identifier}`, {\n id: page.id,\n identifier: page.identifier,\n path: page.path,\n status: page.status,\n });\n })\n );\n\nconst publishCommand = createPublishCommand({\n resourceName: 'page',\n args: ['identifier'],\n action: (client, identifier) => client.pages.publish(identifier),\n});\n\nconst unpublishCommand = createUnpublishCommand({\n resourceName: 'page',\n args: ['identifier'],\n action: (client, identifier) => client.pages.unpublish(identifier),\n});\n\nconst getCommand = createGetCommand<ManagementPage>({\n resourceName: 'page',\n args: ['identifier'],\n get: (client, identifier) => client.pages.get(identifier),\n formatOutput: (page) => ({\n id: page.id,\n title: page.title,\n path: page.path,\n status: page.status,\n hasUnpublishedChanges: page.hasUnpublishedChanges,\n createdAt: page.createdAt,\n updatedAt: page.updatedAt,\n publishedAt: page.publishedAt,\n }),\n});\n\nconst listCommand = createListCommand<ManagementPage>({\n resourceName: 'page',\n resourceNamePlural: 'pages',\n args: [],\n hasPagination: true,\n list: (client, _args, pagination) => client.pages.list(pagination),\n tableHeaders: ['Identifier', 'Title', 'Path', 'Status', 'Unpublished Changes', 'Updated'],\n formatRow: formatPageRow,\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const pageCommand = new Command('page')\n .description('Manage pages')\n .addHelpText('after', `\nExamples:\n $ riverbankcms page upsert about --title \"About Us\" --path /about\n $ riverbankcms page upsert about --title \"About Us\" --path /about --seo-title \"About Our Company\"\n $ riverbankcms page publish about\n $ riverbankcms page unpublish about\n $ riverbankcms page get about\n $ riverbankcms page list --limit 10 --page 1\n`)\n .addCommand(upsertCommand)\n .addCommand(publishCommand)\n .addCommand(unpublishCommand)\n .addCommand(getCommand)\n .addCommand(listCommand);\n","/**\n * Block Command\n *\n * Manage page blocks via CLI.\n *\n * Usage:\n * riverbankcms block upsert <page-id> <block-id> --kind <kind> --data <json>\n * riverbankcms block reorder <page-id> <id1> <id2> ...\n * riverbankcms block list <page-id>\n * riverbankcms block get <page-id> <block-id>\n *\n * For deletion, use: riverbankcms delete block <page-id> <block-id>\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementBlock } from '../../client/management/types';\nimport {\n type DataInputOptions,\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n formatDateShort,\n parseJsonData,\n withErrorHandling,\n} from '../helpers';\n\ninterface UpsertOptions extends DataInputOptions {\n kind: string;\n position?: string;\n}\n\n/**\n * Format a block for table display\n */\nconst formatBlockRow: RowFormatter<ManagementBlock> = (block) => [\n block.identifier ?? '(no identifier)',\n block.kind,\n String(block.position),\n formatDateShort(block.updatedAt),\n];\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update a block on a page')\n .argument('<page-identifier>', 'Page identifier')\n .argument('<block-identifier>', 'Block identifier')\n .requiredOption('--kind <kind>', 'Block kind (e.g., block.hero, block.bodyText)')\n .option('--data <json>', 'Block data as JSON string')\n .option('--file <path>', 'Path to JSON file with block data')\n .option('--position <n>', 'Block position (0-indexed)')\n .action(\n withErrorHandling(\n async (\n pageIdentifier: string,\n blockIdentifier: string,\n options: UpsertOptions,\n command: Command\n ) => {\n const { output, client } = createCommandContext(command);\n const data = await parseJsonData(options);\n\n output.info(`Upserting block: ${pageIdentifier}/${blockIdentifier}`);\n\n const block = await client.blocks.upsert(pageIdentifier, {\n identifier: blockIdentifier,\n kind: options.kind,\n data,\n position: options.position ? parseInt(options.position, 10) : undefined,\n });\n\n output.success(`Block upserted: ${block.identifier}`, {\n id: block.id,\n identifier: block.identifier,\n kind: block.kind,\n position: block.position,\n });\n }\n )\n );\n\nconst reorderCommand = new Command('reorder')\n .description('Reorder blocks on a page')\n .argument('<page-identifier>', 'Page identifier')\n .argument('<identifiers...>', 'Block identifiers in desired order')\n .action(\n withErrorHandling(\n async (pageIdentifier: string, identifiers: string[], _options: unknown, command: Command) => {\n const { output, client } = createCommandContext(command);\n\n if (identifiers.length < 2) {\n return output.error('At least 2 block identifiers are required for reordering');\n }\n\n output.info(`Reordering blocks on page: ${pageIdentifier}`);\n await client.blocks.reorder(pageIdentifier, identifiers);\n output.success(`Blocks reordered`, {\n page: pageIdentifier,\n order: identifiers,\n });\n }\n )\n );\n\nconst listCommand = createListCommand<ManagementBlock>({\n resourceName: 'block',\n resourceNamePlural: 'blocks',\n args: ['page-identifier'],\n hasPagination: false,\n list: async (client, args) => ({ items: await client.blocks.list(args[0]!) }),\n tableHeaders: ['Identifier', 'Kind', 'Position', 'Updated'],\n formatRow: formatBlockRow,\n});\n\nconst getCommand = createGetCommand<ManagementBlock>({\n resourceName: 'block',\n args: ['page-identifier', 'block-identifier'],\n get: (client, pageIdentifier, blockIdentifier) => client.blocks.get(pageIdentifier, blockIdentifier),\n formatOutput: (block) => ({\n id: block.id,\n kind: block.kind,\n position: block.position,\n data: block.data,\n createdAt: block.createdAt,\n updatedAt: block.updatedAt,\n }),\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const blockCommand = new Command('block')\n .description('Manage page blocks')\n .addHelpText('after', `\nExamples:\n $ riverbankcms block upsert home hero-main --kind block.hero --data '{\"heading\": \"Welcome\"}'\n $ riverbankcms block upsert home hero-main --kind block.hero --file ./hero-data.json\n $ riverbankcms block reorder home hero-main content-section cta-bottom\n $ riverbankcms block list home\n $ riverbankcms block get home hero-main\n\nTo delete a block, use: riverbankcms delete block <page-id> <block-id>\n`)\n .addCommand(upsertCommand)\n .addCommand(reorderCommand)\n .addCommand(listCommand)\n .addCommand(getCommand);\n","/**\n * Navigation Command\n *\n * Manage navigation menus via CLI.\n *\n * Usage:\n * riverbankcms navigation upsert <menu-name> --file <json-file>\n * riverbankcms navigation get <menu-name>\n * riverbankcms navigation list\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementNavigationMenu, NavigationItemInput } from '../../client/management/types';\nimport {\n type DataInputOptions,\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n formatDateShort,\n parseJsonArray,\n withErrorHandling,\n} from '../helpers';\n\n/**\n * Format a navigation menu for table display\n */\nconst formatMenuRow: RowFormatter<ManagementNavigationMenu> = (menu) => {\n const itemCount = countItems(menu.items);\n return [\n menu.name,\n String(itemCount),\n formatDateShort(menu.updatedAt),\n ];\n};\n\n/**\n * Count total navigation items including nested children\n */\nfunction countItems(items: ManagementNavigationMenu['items']): number {\n let count = items.length;\n for (const item of items) {\n if (item.children) {\n count += countItems(item.children);\n }\n }\n return count;\n}\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update a navigation menu')\n .argument('<menu-name>', 'Navigation menu name')\n .option('--file <path>', 'Path to JSON file with menu items')\n .option('--data <json>', 'Menu items as JSON string')\n .action(\n withErrorHandling(async (menuName: string, options: DataInputOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n const items = await parseJsonArray<NavigationItemInput>(options);\n\n output.info(`Upserting navigation menu: ${menuName}`);\n\n const menu = await client.navigation.upsert({\n name: menuName,\n items,\n });\n\n output.success(`Navigation menu upserted: ${menu.name}`, {\n id: menu.id,\n name: menu.name,\n itemCount: countItems(menu.items),\n });\n })\n );\n\nconst getCommand = createGetCommand<ManagementNavigationMenu>({\n resourceName: 'navigation menu',\n args: ['menu-name'],\n get: (client, menuName) => client.navigation.get(menuName),\n formatOutput: (menu) => ({\n id: menu.id,\n name: menu.name,\n items: menu.items,\n createdAt: menu.createdAt,\n updatedAt: menu.updatedAt,\n }),\n});\n\nconst listCommand = createListCommand<ManagementNavigationMenu>({\n resourceName: 'navigation menu',\n resourceNamePlural: 'navigation menus',\n args: [],\n hasPagination: false,\n list: async (client) => ({ items: await client.navigation.list() }),\n tableHeaders: ['Name', 'Items', 'Updated'],\n formatRow: formatMenuRow,\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const navigationCommand = new Command('navigation')\n .description('Manage navigation menus')\n .addHelpText('after', `\nExamples:\n $ riverbankcms navigation upsert main --file ./main-nav.json\n $ riverbankcms navigation upsert footer --data '[{\"label\": \"Home\", \"url\": \"/\"}]'\n $ riverbankcms navigation get main\n $ riverbankcms navigation list\n\nJSON file format:\n {\n \"items\": [\n { \"label\": \"Home\", \"url\": \"/\" },\n { \"label\": \"About\", \"url\": \"/about\", \"children\": [\n { \"label\": \"Team\", \"url\": \"/about/team\" }\n ]}\n ]\n }\n`)\n .addCommand(upsertCommand)\n .addCommand(getCommand)\n .addCommand(listCommand);\n","/**\n * Delete Command\n *\n * Explicitly delete content from the CMS.\n *\n * Usage:\n * riverbankcms delete entry <type> <identifier>\n * riverbankcms delete block <page-identifier> <block-identifier>\n */\n\nimport { Command } from 'commander';\n\nimport { withConfirmation } from '../helpers';\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst deleteEntryCommand = new Command('entry')\n .description('Delete a content entry')\n .argument('<type>', 'Content type')\n .argument('<identifier>', 'Entry identifier')\n .option('--yes', 'Skip confirmation prompt (required for --remote)')\n .action(\n withConfirmation(\n (type: string, identifier: string) => `Delete entry \"${type}/${identifier}\"?`,\n async (ctx, type, identifier) => {\n ctx.output.info(`Deleting entry: ${type}/${identifier}`);\n await ctx.client.entries.delete(type, identifier);\n ctx.output.success(`Entry deleted: ${identifier}`);\n }\n )\n );\n\nconst deleteBlockCommand = new Command('block')\n .description('Delete a block from a page')\n .argument('<page-identifier>', 'Page identifier')\n .argument('<block-identifier>', 'Block identifier')\n .option('--yes', 'Skip confirmation prompt (required for --remote)')\n .action(\n withConfirmation(\n (pageIdentifier: string, blockIdentifier: string) =>\n `Delete block \"${blockIdentifier}\" from page \"${pageIdentifier}\"?`,\n async (ctx, pageIdentifier, blockIdentifier) => {\n ctx.output.info(`Deleting block: ${pageIdentifier}/${blockIdentifier}`);\n await ctx.client.blocks.delete(pageIdentifier, blockIdentifier);\n ctx.output.success(`Block deleted: ${blockIdentifier}`);\n }\n )\n );\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const deleteCommand = new Command('delete')\n .description('Delete content from CMS')\n .addHelpText('after', `\nExamples:\n $ riverbankcms delete entry blog-post my-post\n $ riverbankcms delete entry blog-post my-post --yes\n $ riverbankcms delete block home hero-main --yes\n $ riverbankcms delete entry blog-post my-post --remote --yes\n\nNote: Remote delete operations require --yes flag for safety.\n`)\n .addCommand(deleteEntryCommand)\n .addCommand(deleteBlockCommand);\n","type PreviewTemplateInput = {\n html: string;\n cssText: string;\n title?: string;\n};\n\nexport function buildPreviewHtml({ html, cssText, title }: PreviewTemplateInput): string {\n const safeTitle = title ?? 'Block Preview';\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${safeTitle}</title>\n <style>\n ${cssText}\n </style>\n </head>\n <body>\n ${html}\n </body>\n</html>`;\n}\n","export type PreviewPlaywrightConfig = {\n use: {\n viewport: { width: number; height: number };\n deviceScaleFactor?: number;\n colorScheme?: 'light' | 'dark';\n };\n};\n\nconst config: PreviewPlaywrightConfig = {\n use: {\n viewport: { width: 1280, height: 720 },\n deviceScaleFactor: 2,\n colorScheme: 'light',\n },\n};\n\nexport default config;\n","import * as path from 'path';\nimport previewPlaywrightConfig from './playwright.config';\n\ntype ScreenshotOptions = {\n html: string;\n outputPath: string;\n viewport?: { width: number; height: number };\n};\n\nexport async function captureScreenshot(options: ScreenshotOptions): Promise<void> {\n const { html, outputPath, viewport } = options;\n // Use any for playwright to avoid type errors when it's not installed\n // as it is an optional dependency for the CLI.\n let playwright: any;\n try {\n // @ts-ignore - playwright is an optional dependency\n playwright = await import('playwright');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Playwright is not installed. Install it to use --screenshot. (${message})`);\n }\n\n const browser = await playwright.chromium.launch();\n const page = await browser.newPage({\n viewport: viewport ?? previewPlaywrightConfig.use.viewport,\n deviceScaleFactor: previewPlaywrightConfig.use.deviceScaleFactor,\n colorScheme: previewPlaywrightConfig.use.colorScheme,\n });\n\n await page.setContent(html, { waitUntil: 'load' });\n await page.screenshot({ path: path.resolve(outputPath), fullPage: true });\n await browser.close();\n}\n","import * as fs from 'fs/promises';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { spawn } from 'child_process';\n\ntype OutputMode = 'terminal' | 'open' | 'screenshot';\n\ntype OutputModeOptions = {\n terminal?: boolean;\n open?: boolean;\n screenshot?: boolean;\n};\n\nexport function resolveOutputMode(options: OutputModeOptions): OutputMode {\n const modes = [options.terminal, options.open, options.screenshot].filter(Boolean).length;\n if (modes > 1) {\n throw new Error('Choose only one output mode: --terminal, --open, or --screenshot');\n }\n if (options.open) return 'open';\n if (options.screenshot) return 'screenshot';\n return 'terminal';\n}\n\nexport async function writePreviewHtmlFile(html: string): Promise<string> {\n const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'riverbank-preview-'));\n const filePath = path.join(dir, 'index.html');\n await fs.writeFile(filePath, html, 'utf-8');\n return filePath;\n}\n\nexport async function openPreviewFile(filePath: string): Promise<void> {\n const platform = process.platform;\n if (platform === 'darwin') {\n await runCommand('open', [filePath]);\n return;\n }\n if (platform === 'win32') {\n await runCommand('cmd', ['/c', 'start', '\"\"', filePath]);\n return;\n }\n await runCommand('xdg-open', [filePath]);\n}\n\nfunction runCommand(command: string, args: string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, { stdio: 'ignore', detached: true });\n child.on('error', reject);\n child.unref();\n resolve();\n });\n}\n","/**\n * Preview Command\n *\n * Render a block preview via the management API.\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\n\nimport type { BlockPreviewResponse } from '../../client/management/types';\nimport { parseJsonData, createCommandContext, withErrorHandling } from '../helpers';\nimport { buildPreviewHtml } from '../preview/template';\nimport { captureScreenshot } from '../preview/screenshot';\nimport { openPreviewFile, resolveOutputMode, writePreviewHtmlFile } from '../preview/utils';\n\ninterface PreviewOptions {\n data?: string;\n file?: string;\n validation?: 'strict' | 'lenient';\n previewStage?: 'published' | 'preview';\n themeId?: string;\n pageId?: string;\n contentEntryId?: string;\n css?: string[];\n terminal?: boolean;\n open?: boolean;\n screenshot?: boolean;\n output?: string;\n}\n\nasync function readCssFiles(paths: string[] | undefined): Promise<string> {\n if (!paths || paths.length === 0) return '';\n const chunks = await Promise.all(paths.map(async (filePath) => {\n const resolved = path.resolve(filePath);\n const { readFile } = await import('fs/promises');\n return readFile(resolved, 'utf-8');\n }));\n return chunks.join('\\n');\n}\n\nfunction formatValidationIssues(response: BlockPreviewResponse): string[] {\n return response.validation.issues.map((issue) => {\n const pathText = issue.path.length > 0 ? issue.path.join('.') : '(root)';\n return `${pathText}: ${issue.message}`;\n });\n}\n\nconst previewCommand = new Command('preview')\n .description('Render a block preview')\n .argument('<kind>', 'Block kind (e.g., block.hero)')\n .option('--data <json>', 'Inline JSON string for block content')\n .option('--file <path>', 'Path to JSON file with block content')\n .option('--validation <mode>', 'Validation mode (strict or lenient)', 'strict')\n .option('--preview-stage <stage>', 'Content stage (published or preview)', 'preview')\n .option('--theme-id <id>', 'Theme ID override')\n .option('--page-id <id>', 'Page ID context for loaders')\n .option('--content-entry-id <id>', 'Content entry ID context for loaders')\n .option('--css <paths...>', 'Append compiled CSS files for site-specific utilities')\n .option('--terminal', 'Print HTML output to the terminal (default)')\n .option('--open', 'Open the preview in a browser')\n .option('--screenshot', 'Capture a screenshot using Playwright')\n .option('--output <path>', 'Screenshot output path (default: ./block-preview.png)')\n .action(\n withErrorHandling(async (kind: string, options: PreviewOptions, command: Command) => {\n const { output, client, isJsonOutput } = createCommandContext(command);\n\n const mode = resolveOutputMode(options);\n const data = await parseJsonData({ data: options.data, file: options.file });\n const response = await client.preview.block({\n kind,\n data,\n themeId: options.themeId,\n pageId: options.pageId,\n contentEntryId: options.contentEntryId,\n previewStage: options.previewStage,\n validationMode: options.validation ?? 'strict',\n });\n\n const extraCss = await readCssFiles(options.css);\n const cssText = extraCss ? `${response.cssText}\\n${extraCss}` : response.cssText;\n const htmlDocument = buildPreviewHtml({ html: response.html, cssText });\n\n if (!response.validation.valid) {\n const issues = formatValidationIssues(response);\n output.warn('Block validation failed (lenient mode)', { issues });\n }\n\n if (isJsonOutput) {\n return output.json({ success: true, data: { ...response, cssText } });\n }\n\n if (mode === 'open') {\n const filePath = await writePreviewHtmlFile(htmlDocument);\n await openPreviewFile(filePath);\n output.success('Opened preview in browser', { filePath });\n return;\n }\n\n if (mode === 'screenshot') {\n const outputPath = options.output ?? path.resolve(process.cwd(), 'block-preview.png');\n await captureScreenshot({ html: htmlDocument, outputPath });\n output.success('Screenshot saved', { outputPath });\n return;\n }\n\n output.info('Block preview HTML:');\n console.log(htmlDocument);\n })\n );\n\nexport { previewCommand };\n","import type {\n RiverbankSiteConfig,\n SdkCustomBlock,\n BlockFieldExtensionsMap,\n BlockFieldOptionsMap,\n FieldSelectOption,\n} from '../../config/types';\nimport type { FieldDefinition } from '@riverbankcms/blocks';\nimport { listBlockDefinitions } from '@riverbankcms/blocks/definitions';\n\ntype SectionState = {\n config?: RiverbankSiteConfig;\n errorMessage?: string;\n};\n\nconst GENERATED_START = '<!-- RIVERBANK-GENERATED-START -->';\nconst GENERATED_END = '<!-- RIVERBANK-GENERATED-END -->';\n\nexport function getGeneratedMarkers(): { start: string; end: string } {\n return { start: GENERATED_START, end: GENERATED_END };\n}\n\nexport function buildSchemaTemplate(state: SectionState): string {\n const header = [\n '# Site Schema',\n '',\n 'This document captures the content model and SDK configuration for this site.',\n 'The generated section is updated by `riverbankcms init-docs`.',\n '',\n renderConfigGuideSection(),\n '',\n ].join('\\n');\n\n const generated = buildSchemaGeneratedSection(state);\n return `${header}${GENERATED_START}\\n${generated}\\n${GENERATED_END}\\n`;\n}\n\nexport function buildBlockTypesTemplate(): string {\n const header = [\n '# System Block Types',\n '',\n 'Reference list of all built-in CMS block types.',\n 'The generated section is updated by `riverbankcms init-docs`.',\n '',\n ].join('\\n');\n\n const generated = buildBlockTypesGeneratedSection();\n return `${header}${GENERATED_START}\\n${generated}\\n${GENERATED_END}\\n`;\n}\n\nexport function buildSchemaGeneratedSection(state: SectionState): string {\n if (!state.config) {\n return [\n '## Status',\n '',\n state.errorMessage ?? 'No SDK config available.',\n '',\n ].join('\\n');\n }\n\n const config = state.config;\n const sections: string[] = [];\n\n sections.push(renderContentTypesSection(config));\n sections.push(renderCustomBlocksSection(config.customBlocks ?? []));\n sections.push(renderBlockFieldExtensionsSection(config.blockFieldExtensions));\n sections.push(renderBlockFieldOptionsSection(config.blockFieldOptions));\n\n return sections.filter(Boolean).join('\\n');\n}\n\nexport function buildBlockTypesGeneratedSection(): string {\n const definitions = listBlockDefinitions();\n const sections: string[] = ['## System Blocks', ''];\n\n for (const definition of definitions) {\n const manifest = definition.manifest;\n sections.push(`### ${manifest.name}`);\n sections.push('');\n sections.push(`- Title: ${manifest.title}`);\n if (manifest.description) {\n sections.push(`- Description: ${manifest.description}`);\n }\n if (manifest.category) {\n sections.push(`- Category: ${manifest.category}`);\n }\n if (manifest.tags && manifest.tags.length > 0) {\n sections.push(`- Tags: ${manifest.tags.join(', ')}`);\n }\n if (manifest.contentTypes && manifest.contentTypes.length > 0) {\n sections.push(`- Content Types: ${manifest.contentTypes.join(', ')}`);\n }\n if (manifest.behaviours?.paletteHidden) {\n sections.push('- Palette Hidden: yes');\n }\n sections.push('');\n sections.push('Fields:');\n if (manifest.fields.length === 0) {\n sections.push('- (none)');\n } else {\n sections.push(...renderFieldList(manifest.fields, 0));\n }\n sections.push('');\n }\n\n return sections.join('\\n');\n}\n\nfunction renderContentTypesSection(config: RiverbankSiteConfig): string {\n const contentTypes = config.content?.contentTypes ?? [];\n const lines: string[] = ['## Content Types', ''];\n\n if (contentTypes.length === 0) {\n lines.push('No content types defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const type of contentTypes) {\n lines.push(`### ${type.name} (${type.key})`);\n lines.push('');\n if (type.description) {\n lines.push(type.description);\n lines.push('');\n }\n lines.push(`- Has Pages: ${type.hasPages ? 'yes' : 'no'}`);\n if (type.routePattern) lines.push(`- Route Pattern: ${type.routePattern}`);\n if (type.titleField) lines.push(`- Title Field: ${type.titleField}`);\n if (type.isSingleton) lines.push('- Singleton: yes');\n lines.push('');\n lines.push('Fields:');\n if (type.fields.length === 0) {\n lines.push('- (none)');\n } else {\n lines.push(...renderFieldList(type.fields, 0));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderConfigGuideSection(): string {\n return [\n '## riverbank.config.ts Guide',\n '',\n 'Use `riverbank.config.ts` as the source of truth for the site schema, custom blocks, and CLI behavior.',\n 'This section is static guidance for agents; the generated section below shows the live config.',\n '',\n '### Field Overrides (blockFieldOptions)',\n '',\n 'Use `blockFieldOptions` to override the *options* for existing `select` fields.',\n 'This only affects fields that use the `sdkSelect` UI widget (for example: the embed block layout picker).',\n '',\n '```ts',\n 'export default defineConfig({',\n \" siteId: 'your-site-id',\",\n ' blockFieldOptions: {',\n \" 'block.embed': {\",\n ' layout: {',\n ' options: [',\n \" { value: 'showcase', label: 'Showcase Grid' },\",\n \" { value: 'list', label: 'Simple List' },\",\n ' ],',\n ' },',\n ' },',\n \" 'custom.featured-posts': {\",\n ' style: {',\n ' options: [',\n \" { value: 'grid', label: 'Grid' },\",\n \" { value: 'carousel', label: 'Carousel' },\",\n ' ],',\n ' },',\n ' },',\n ' },',\n '});',\n '```',\n '',\n '### Block Field Extensions (blockFieldExtensions)',\n '',\n 'Use `blockFieldExtensions` to add *new* fields to built-in system blocks.',\n 'Extended fields appear at the end of the block form and are available via `content` in `blockOverrides`.',\n '',\n '```ts',\n 'export default defineConfig({',\n \" siteId: 'your-site-id',\",\n ' blockFieldExtensions: {',\n \" 'block.hero': {\",\n ' fields: [',\n \" { id: 'videoBackground', type: 'media', label: 'Video Background', mediaKinds: ['video'] },\",\n \" { id: 'overlayOpacity', type: 'number', label: 'Overlay Opacity', defaultValue: 50 },\",\n ' ],',\n ' },',\n \" 'block.bodyText': {\",\n ' fields: [',\n \" { id: 'layout', type: 'select', label: 'Layout', defaultValue: 'default',\",\n ' options: [',\n \" { value: 'default', label: 'Default' },\",\n \" { value: 'wide', label: 'Wide' },\",\n ' ],',\n ' },',\n ' ],',\n ' },',\n ' },',\n '});',\n '```',\n '',\n 'Rules:',\n '- Only system blocks (`block.*`) can be extended.',\n '- Extended field IDs must not collide with existing block fields.',\n '- If `required: true`, you must set a `defaultValue` to avoid breaking existing blocks.',\n '',\n '### Custom Blocks (customBlocks)',\n '',\n 'Use `customBlocks` to define new block types with their own fields.',\n 'Custom blocks must be rendered via `blockOverrides` in the SDK site.',\n '',\n '```ts',\n 'export default defineConfig({',\n \" siteId: 'your-site-id',\",\n ' customBlocks: [',\n ' {',\n \" id: 'custom.team-member',\",\n \" title: 'Team Member',\",\n \" titleSource: 'name',\",\n \" description: 'Profile card with bio and photo',\",\n \" category: 'content',\",\n \" icon: 'User',\",\n ' fields: [',\n \" { id: 'name', type: 'text', label: 'Name', required: true },\",\n \" { id: 'role', type: 'text', label: 'Role' },\",\n \" { id: 'photo', type: 'media', label: 'Photo', mediaKinds: ['image'] },\",\n \" { id: 'bio', type: 'richText', label: 'Bio' },\",\n ' ],',\n ' },',\n ' ],',\n '});',\n '```',\n '',\n '### Field Types (for customBlocks and blockFieldExtensions)',\n '',\n 'All field definitions use the same `FieldDefinition` format as system blocks.',\n 'Supported `type` values:',\n '',\n '- `text`: Single or multiline text',\n '- `richText`: Rich text editor (markdown or HTML)',\n '- `media`: Image or video upload',\n '- `boolean`: Toggle/checkbox',\n '- `number`: Numeric input',\n '- `date`: Date picker',\n '- `time`: Time picker',\n '- `datetime`: Date + time picker',\n '- `slug`: Slug with optional source field',\n '- `url`: URL input (optionally allow relative)',\n '- `link`: Link picker',\n '- `select`: Single or multi-select options',\n '- `reference`: Reference another entry type',\n '- `repeater`: Repeatable list of fields',\n '- `group`: Group of fields',\n '- `modal`: Fields inside a modal dialog',\n '- `tabGroup`: Group fields by tabs',\n '- `presetOrCustom`: Preset list with custom fallback',\n '- `contentTypeSelect`: Content type picker (all/routable/nonRoutable)',\n '- `entryPicker`: Pick a content entry',\n '',\n 'Tip: For `repeater`, define either `schema.fields` (monomorphic) or `polymorphic: true` with `itemTypes`.',\n ].join('\\n');\n}\n\nfunction renderCustomBlocksSection(customBlocks: SdkCustomBlock[]): string {\n const lines: string[] = ['## Custom Blocks', ''];\n\n if (customBlocks.length === 0) {\n lines.push('No custom blocks defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const block of customBlocks) {\n lines.push(`### ${block.id}`);\n lines.push('');\n lines.push(`- Title: ${block.title}`);\n if (block.description) lines.push(`- Description: ${block.description}`);\n if (block.category) lines.push(`- Category: ${block.category}`);\n if (block.tags && block.tags.length > 0) lines.push(`- Tags: ${block.tags.join(', ')}`);\n lines.push('');\n lines.push('Fields:');\n if (block.fields.length === 0) {\n lines.push('- (none)');\n } else {\n lines.push(...renderFieldList(block.fields, 0));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderBlockFieldExtensionsSection(extensions?: BlockFieldExtensionsMap): string {\n const lines: string[] = ['## Block Field Extensions', ''];\n\n if (!extensions || Object.keys(extensions).length === 0) {\n lines.push('No block field extensions defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const [blockId, extension] of Object.entries(extensions)) {\n lines.push(`### ${blockId}`);\n lines.push('');\n if (extension.fields.length === 0) {\n lines.push('- (none)');\n } else {\n lines.push(...renderFieldList(extension.fields, 0));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderBlockFieldOptionsSection(options?: BlockFieldOptionsMap): string {\n const lines: string[] = ['## Block Field Options', ''];\n\n if (!options || Object.keys(options).length === 0) {\n lines.push('No block field options defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const [blockId, fields] of Object.entries(options)) {\n lines.push(`### ${blockId}`);\n lines.push('');\n for (const [fieldId, config] of Object.entries(fields)) {\n lines.push(`- ${fieldId}`);\n if (config.options && config.options.length > 0) {\n lines.push(...renderOptionsList(config.options, 1));\n }\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderFieldList(fields: FieldDefinition[], depth: number): string[] {\n const lines: string[] = [];\n const indent = ' '.repeat(depth);\n\n for (const field of fields) {\n const required = field.required ? ' required' : '';\n const label = field.label ? ` - ${field.label}` : '';\n lines.push(`${indent}- ${field.id} (${field.type})${required}${label}`);\n\n if ('options' in field && Array.isArray(field.options) && field.options.length > 0) {\n lines.push(...renderOptionsList(field.options, depth + 1));\n }\n\n if ('fields' in field && Array.isArray(field.fields)) {\n lines.push(...renderFieldList(field.fields, depth + 1));\n }\n\n if ('schema' in field && field.schema && 'fields' in field.schema) {\n lines.push(...renderFieldList(field.schema.fields as FieldDefinition[], depth + 1));\n }\n\n if ('tabs' in field && Array.isArray(field.tabs)) {\n for (const tab of field.tabs) {\n lines.push(`${indent} - tab ${tab.id} (${tab.label})`);\n lines.push(...renderFieldList(tab.fields, depth + 2));\n }\n }\n }\n\n return lines;\n}\n\nfunction renderOptionsList(options: FieldSelectOption[], depth: number): string[] {\n const indent = ' '.repeat(depth);\n return options.map((option) => `${indent}- option: ${option.value} (${option.label})`);\n}\n","import * as fs from 'fs/promises';\nimport * as path from 'path';\n\nimport { riverbankSiteConfigSchema } from '../../config/validation';\nimport type { RiverbankSiteConfig } from '../../config/types';\nimport {\n buildSchemaTemplate,\n buildBlockTypesTemplate,\n buildSchemaGeneratedSection,\n buildBlockTypesGeneratedSection,\n getGeneratedMarkers,\n} from './templates';\n\ntype InitDocsOptions = {\n rootDir: string;\n configPath?: string;\n agentsPath: string;\n output?: {\n info(message: string, data?: unknown): void;\n warn(message: string, data?: unknown): void;\n success(message: string, data?: unknown): void;\n };\n};\n\nconst AGENTS_START = '<!-- RIVERBANK-CONTEXT-START -->';\nconst AGENTS_END = '<!-- RIVERBANK-CONTEXT-END -->';\n\nexport async function initDocs(options: InitDocsOptions): Promise<void> {\n const { rootDir, configPath, agentsPath, output } = options;\n\n const docsDir = path.join(rootDir, 'docs');\n const contextDir = path.join(rootDir, 'context');\n const workflowsDir = path.join(docsDir, 'workflows');\n const knowledgeDir = path.join(contextDir, 'knowledge');\n const brandDir = path.join(contextDir, 'brand');\n\n await ensureDir(workflowsDir);\n await ensureDir(knowledgeDir);\n await ensureDir(brandDir);\n\n await writeFileIfMissing(path.join(docsDir, 'cli-reference.md'), cliReferenceTemplate());\n await writeFileIfMissing(path.join(docsDir, 'content-management.md'), contentManagementTemplate());\n await writeFileIfMissing(path.join(workflowsDir, 'create-page.md'), workflowCreatePageTemplate());\n await writeFileIfMissing(path.join(workflowsDir, 'add-block.md'), workflowAddBlockTemplate());\n await writeFileIfMissing(path.join(workflowsDir, 'publish-workflow.md'), workflowPublishTemplate());\n await writeFileIfMissing(path.join(contextDir, 'brief.md'), briefTemplate());\n await writeFileIfMissing(path.join(knowledgeDir, 'README.md'), knowledgeTemplate());\n await writeFileIfMissing(path.join(brandDir, 'README.md'), brandTemplate());\n\n const { config, errorMessage } = await loadConfig(configPath, output);\n\n await upsertGeneratedDoc(\n path.join(docsDir, 'schema.md'),\n buildSchemaTemplate({ config, errorMessage }),\n buildSchemaGeneratedSection({ config, errorMessage }),\n );\n\n await upsertGeneratedDoc(\n path.join(docsDir, 'block-types.md'),\n buildBlockTypesTemplate(),\n buildBlockTypesGeneratedSection(),\n );\n\n await upsertAgentsSection(agentsPath);\n}\n\nasync function loadConfig(\n configPath: string | undefined,\n output?: InitDocsOptions['output'],\n): Promise<{ config?: RiverbankSiteConfig; errorMessage?: string }> {\n if (!configPath) {\n return { errorMessage: 'No config path provided.' };\n }\n\n try {\n const { loadConfigFile } = await import('../load-config');\n const rawConfig = await loadConfigFile(configPath);\n const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);\n if (!parsed.success) {\n return { errorMessage: `Config validation failed: ${parsed.error.message}` };\n }\n return { config: parsed.data as RiverbankSiteConfig };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n output?.warn('Failed to load config; schema will be partial', { message });\n return { errorMessage: message };\n }\n}\n\nasync function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\nasync function writeFileIfMissing(filePath: string, contents: string): Promise<void> {\n try {\n await fs.access(filePath);\n } catch {\n await fs.writeFile(filePath, contents, 'utf-8');\n }\n}\n\nasync function upsertGeneratedDoc(\n filePath: string,\n template: string,\n generatedSection: string,\n): Promise<void> {\n const markers = getGeneratedMarkers();\n const contents = await readFileOrTemplate(filePath, template);\n const updated = replaceMarkedSection(contents, markers.start, markers.end, generatedSection);\n await fs.writeFile(filePath, updated, 'utf-8');\n}\n\nasync function readFileOrTemplate(filePath: string, template: string): Promise<string> {\n try {\n return await fs.readFile(filePath, 'utf-8');\n } catch {\n return template;\n }\n}\n\nfunction replaceMarkedSection(\n content: string,\n startMarker: string,\n endMarker: string,\n section: string,\n): string {\n const startIndex = content.indexOf(startMarker);\n const endIndex = content.indexOf(endMarker);\n\n if (startIndex === -1 || endIndex === -1 || endIndex < startIndex) {\n const trimmed = content.trimEnd();\n return `${trimmed}\\n\\n${startMarker}\\n${section}\\n${endMarker}\\n`;\n }\n\n const before = content.slice(0, startIndex + startMarker.length);\n const after = content.slice(endIndex);\n return `${before}\\n${section}\\n${after}`;\n}\n\nasync function upsertAgentsSection(filePath: string): Promise<void> {\n const content = await readFileOrTemplate(filePath, '# AGENTS.md\\n');\n const section = agentsSectionTemplate();\n const updated = replaceMarkedSection(content, AGENTS_START, AGENTS_END, section);\n await fs.writeFile(filePath, updated, 'utf-8');\n}\n\nfunction cliReferenceTemplate(): string {\n return [\n '# CLI Reference',\n '',\n 'Describe the SDK CLI commands available to agents.',\n '',\n 'Include usage patterns, required flags, and common examples.',\n '',\n ].join('\\n');\n}\n\nfunction contentManagementTemplate(): string {\n return [\n '# Content Management',\n '',\n 'Describe how content is structured, edited, and published for this site.',\n '',\n ].join('\\n');\n}\n\nfunction workflowCreatePageTemplate(): string {\n return [\n '# Workflow: Create a Page',\n '',\n 'Describe the steps to create a page for this site.',\n '',\n 'Include any required content types or blocks.',\n '',\n ].join('\\n');\n}\n\nfunction workflowAddBlockTemplate(): string {\n return [\n '# Workflow: Add a Block',\n '',\n 'Describe how to add blocks to an existing page.',\n '',\n ].join('\\n');\n}\n\nfunction workflowPublishTemplate(): string {\n return [\n '# Workflow: Publish Content',\n '',\n 'Describe how to publish content safely for this site.',\n '',\n ].join('\\n');\n}\n\nfunction briefTemplate(): string {\n return [\n '# Site Brief',\n '',\n 'Summarize the brand, tone, and goals for this site.',\n '',\n ].join('\\n');\n}\n\nfunction knowledgeTemplate(): string {\n return [\n '# Knowledge Base',\n '',\n 'Add domain knowledge, FAQs, and reference links for the site.',\n '',\n ].join('\\n');\n}\n\nfunction brandTemplate(): string {\n return [\n '# Brand Assets',\n '',\n 'List or link the brand assets available for this site.',\n '',\n ].join('\\n');\n}\n\nfunction agentsSectionTemplate(): string {\n return [\n '## Riverbank SDK Context',\n '',\n '- This repo contains both the CMS and the SDK used by this site.',\n '- Agents can suggest or implement CMS changes when needed, not just local workarounds.',\n '- Use riverbank.config.ts as the source of truth for site schema and custom blocks.',\n '',\n '## Code Quality Guidelines (SDK + CMS)',\n '',\n '- Prefer functional, composable helpers over large classes.',\n '- Keep changes small and DRY; remove old code instead of shimming.',\n '- Keep route handlers thin and use helpers/services.',\n '- Use typed API clients; avoid hardcoded URLs.',\n ].join('\\n');\n}\n","/**\n * init-docs Command\n *\n * Scaffold agent documentation and site context.\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\n\nimport { createCommandContext, withErrorHandling } from '../helpers';\nimport { initDocs } from '../init-docs';\n\ninterface InitDocsOptions {\n path?: string;\n config?: string;\n}\n\nexport async function runInitDocs(options: InitDocsOptions, command: Command): Promise<void> {\n const { output, isJsonOutput } = createCommandContext(command);\n\n const rootDir = path.resolve(options.path ?? '.riverbank');\n const configPath = path.resolve(options.config ?? path.join(process.cwd(), 'riverbank.config.ts'));\n const agentsPath = path.resolve(process.cwd(), 'AGENTS.md');\n\n await initDocs({\n rootDir,\n configPath,\n agentsPath,\n output,\n });\n\n if (isJsonOutput) {\n output.json({ success: true, data: { rootDir } });\n return;\n }\n\n output.success('Agent docs initialized', { rootDir });\n}\n\nconst initDocsCommand = new Command('init-docs')\n .description('Scaffold agent documentation and site context')\n .option('--path <path>', 'Destination directory (default: ./.riverbank)')\n .option('--config <path>', 'Path to riverbank.config.ts (default: ./riverbank.config.ts)')\n .action(\n withErrorHandling(async (options: InitDocsOptions, command: Command) => {\n await runInitDocs(options, command);\n })\n );\n\nexport { initDocsCommand };\n","/**\n * Identifiers Command\n *\n * Manage SDK identifiers for pages, blocks, and entries.\n *\n * Usage:\n * riverbankcms identifiers backfill # Backfill identifiers for content without them\n */\n\nimport { Command } from 'commander';\n\nimport { createCommandContext, withErrorHandling } from '../helpers';\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst backfillCommand = new Command('backfill')\n .description('Backfill identifiers for pages, blocks, and entries that don\\'t have one')\n .addHelpText('after', `\nThis command generates stable identifiers for content created before the SDK was available.\nIdentifiers are generated from titles (slugified) and are idempotent - running this\ncommand multiple times won't overwrite existing identifiers.\n\nExamples:\n $ riverbankcms identifiers backfill\n $ riverbankcms identifiers backfill --remote\n`)\n .action(\n withErrorHandling(async (_options: unknown, command: Command) => {\n const { output, client } = createCommandContext(command);\n\n output.info('Backfilling identifiers for pages, blocks, and entries...');\n\n const result = await client.identifiers.backfill();\n\n const totalUpdated =\n result.pages.pagesUpdated +\n result.blocks.total +\n result.entries.entriesUpdated;\n\n if (totalUpdated === 0) {\n output.success('All content already has identifiers - nothing to backfill');\n return;\n }\n\n output.success('Backfill complete', {\n pages: {\n updated: result.pages.pagesUpdated,\n identifiers: result.pages.identifiersAssigned,\n },\n blocks: {\n updated: result.blocks.total,\n byPage: Object.keys(result.blocks.byPage).length > 0\n ? result.blocks.byPage\n : undefined,\n },\n entries: {\n updated: result.entries.entriesUpdated,\n identifiers: result.entries.identifiersAssigned,\n },\n });\n })\n );\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const identifiersCommand = new Command('identifiers')\n .description('Manage SDK identifiers')\n .addHelpText('after', `\nIdentifiers are stable, human-readable names used to reference content in the SDK.\nThey are automatically generated when content is created via the SDK, but older\ncontent may need backfilling.\n\nCommands:\n backfill Generate identifiers for content that doesn't have one\n\nExamples:\n $ riverbankcms identifiers backfill\n`)\n .addCommand(backfillCommand);\n","/**\n * Riverbank CMS SDK CLI\n *\n * CLI tools for SDK site developers.\n * Supports bidirectional content management: pull content from CMS and push content back.\n */\n\n// Load environment variables from .env files before anything else\n// This ensures env vars are available for all CLI commands\nimport { config } from 'dotenv';\nconfig({ path: '.env.local' });\nconfig({ path: '.env' });\n\nimport { Command } from 'commander';\nimport { pushConfigCommand } from './push-config';\nimport { pullCommand } from './commands/pull';\nimport { pushCommand } from './commands/push';\nimport { entryCommand } from './commands/entry';\nimport { pageCommand } from './commands/page';\nimport { blockCommand } from './commands/block';\nimport { navigationCommand } from './commands/navigation';\nimport { deleteCommand } from './commands/delete';\nimport { previewCommand } from './commands/preview';\nimport { initDocsCommand } from './commands/init-docs';\nimport { identifiersCommand } from './commands/identifiers';\n\nconst program = new Command();\n\nprogram\n .name('riverbankcms')\n .description('Riverbank CMS SDK CLI - manage content and configuration')\n .version('0.1.0')\n // Global options available to all commands\n .option('--json', 'Output in JSON format for machine parsing')\n .option('--quiet', 'Minimal output (suppress non-essential messages)')\n .option('--remote', 'Use remote/production environment instead of local')\n .addHelpText('after', `\nEnvironment Variables:\n Local environment (default):\n RIVERBANK_LOCAL_SITE_ID Site ID for local development\n RIVERBANK_LOCAL_DASHBOARD_URL Dashboard URL (e.g., http://localhost:4000)\n RIVERBANK_LOCAL_MGMT_API_KEY Management API key (bld_mgmt_sk_...)\n\n Remote environment (--remote):\n RIVERBANK_REMOTE_SITE_ID Site ID for production\n RIVERBANK_REMOTE_DASHBOARD_URL Dashboard URL (e.g., https://dashboard.riverbankcms.com)\n RIVERBANK_REMOTE_MGMT_API_KEY Management API key (bld_mgmt_sk_...)\n\nExamples:\n $ riverbankcms push-config\n $ riverbankcms pull # Pull all content from local\n $ riverbankcms pull --remote # Pull all content from production\n $ riverbankcms pull entries blog-post # Pull specific content type\n $ riverbankcms push # Push content to local\n $ riverbankcms push --remote --yes # Push content to production\n\nRun 'riverbankcms <command> --help' for detailed options.\n`);\n\n// Add commands\nprogram.addCommand(pushConfigCommand);\nprogram.addCommand(pullCommand);\nprogram.addCommand(pushCommand);\n\n// Granular content management commands (Phase 3)\nprogram.addCommand(entryCommand);\nprogram.addCommand(pageCommand);\nprogram.addCommand(blockCommand);\nprogram.addCommand(navigationCommand);\nprogram.addCommand(deleteCommand);\n\n// Phase 6: Block preview command\nprogram.addCommand(previewCommand);\nprogram.addCommand(initDocsCommand);\n\n// Identifier management\nprogram.addCommand(identifiersCommand);\n\nprogram.parse();\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/load-config.ts","../../../blocks/src/system/manifest/augmentManifest.ts","../../../blocks/src/system/manifest/registry.ts","../../../blocks/src/system/node/schema.ts","../../../blocks/src/system/node/typeBasedLayout.ts","../../../blocks/src/system/manifest/schema.ts","../../../blocks/src/utils/env.ts","../../../blocks/src/system/node/types.ts","../../../blocks/src/system/node/builder.ts","../../../blocks/src/system/node/fragments/backgroundLayer.ts","../../../blocks/src/theme/utils/colorStyles.ts","../../../blocks/src/system/node/fragments/headingGroup.ts","../../../blocks/src/system/node/fragments/sectionContainer.ts","../../../blocks/src/system/spacing.ts","../../../blocks/src/system/node/fragments/styledSection.ts","../../../blocks/src/system/node/fragments/ctaButton.ts","../../../blocks/src/system/node/fragments/ctaRow.ts","../../../blocks/src/system/node/fragments/navRow.ts","../../../blocks/src/system/fragments/types.ts","../../../blocks/src/system/fragments/builder.ts","../../../blocks/src/system/fragments/library/bodyCopy.ts","../../../blocks/src/system/fragments/library/heroCopy.ts","../../../blocks/src/system/fields/button.ts","../../../blocks/src/system/fields/ctas.ts","../../../blocks/src/system/fragments/library/ctaRow.ts","../../../blocks/src/system/fragments/library/ctaCopy.ts","../../../blocks/src/system/fragments/library/testimonialsHeading.ts","../../../blocks/src/system/fragments/library/testimonialsCarousel.ts","../../../blocks/src/system/fragments/library/formCopy.ts","../../../blocks/src/system/fragments/library/formEmbed.ts","../../../blocks/src/system/fragments/library/footerBottomText.ts","../../../blocks/src/system/fragments/library/footerLinkGroups.ts","../../../blocks/src/system/fragments/library/blogFeaturedPost.ts","../../../blocks/src/system/fragments/library/blogListGrid.ts","../../../blocks/src/system/fragments/library/blogListStack.ts","../../../blocks/src/system/fragments/library/faqHeading.ts","../../../blocks/src/system/fragments/library/faqAccordion.ts","../../../blocks/src/system/fragments/library/card.ts","../../../blocks/src/system/fragments/library/heading.ts","../../../blocks/src/system/fragments/library/richText.ts","../../../blocks/src/system/fragments/utils/toRepeaterSchema.ts","../../../blocks/src/system/fragments/library/image.ts","../../../blocks/src/system/fragments/library/columnContent.ts","../../../blocks/src/system/constants/background.ts","../../../blocks/src/system/fields/background.ts","../../../blocks/src/system/fields/boxStyles.ts","../../../blocks/src/system/defineBlock.ts","../../../blocks/src/system/blocks/hero.ts","../../../blocks/src/system/blocks/body-text.ts","../../../blocks/src/system/blocks/blog-post.tsx","../../../blocks/src/system/blocks/blog-placeholder.ts","../../../blocks/src/system/blocks/blog-listing.ts","../../../blocks/src/system/blocks/cta-full.ts","../../../blocks/src/system/blocks/form.tsx","../../../blocks/src/system/blocks/faq.ts","../../../blocks/src/system/transforms/typed.ts","../../../blocks/src/system/blocks/site-header.ts","../../../blocks/src/system/blocks/site-footer.ts","../../../blocks/src/system/blocks/testimonials.tsx","../../../blocks/src/system/blocks/columns.ts","../../../blocks/src/system/blocks/appointment-booking.tsx","../../../blocks/src/system/blocks/events/shared/schemas.ts","../../../blocks/src/system/blocks/events/shared/fields.ts","../../../blocks/src/system/blocks/event-registration.ts","../../../blocks/src/system/blocks/events/event-spotlight.ts","../../../blocks/src/system/blocks/events/event-listing.ts","../../../blocks/src/system/blocks/events/event-calendar.ts","../../../blocks/src/system/blocks/embed.ts","../../../blocks/src/system/blocks/index.ts","../../../blocks/src/system/registry.ts","../../../blocks/src/system/constants/blockKinds.ts","../../src/config/content-validation.ts","../../src/data/prefetchBlockData.ts","../../src/config/validation.ts","../../src/cli/push-config.ts","../../src/client/management/http.ts","../../src/client/management/entries.ts","../../src/client/management/pages.ts","../../src/client/management/blocks.ts","../../src/client/management/navigation.ts","../../src/client/management/settings.ts","../../src/client/management/pull.ts","../../src/client/management/preview.ts","../../src/client/management/identifiers.ts","../../src/client/management/index.ts","../../src/cli/env.ts","../../src/cli/output.ts","../../src/cli/errors.ts","../../src/cli/helpers.ts","../../src/cli/sync/mapper.ts","../../src/cli/content/writer.ts","../../src/cli/content/reader.ts","../../src/cli/commands/pull.ts","../../src/cli/config-loader.ts","../../src/cli/sync/diff.ts","../../src/cli/sync/executor.ts","../../src/cli/commands/push.ts","../../src/cli/commands/entry.ts","../../src/cli/commands/page.ts","../../src/cli/commands/block.ts","../../src/cli/commands/navigation.ts","../../src/cli/commands/delete.ts","../../src/cli/preview/template.ts","../../src/cli/preview/playwright.config.ts","../../src/cli/preview/screenshot.ts","../../src/cli/preview/utils.ts","../../src/cli/commands/preview.ts","../../src/cli/init-docs/templates.ts","../../src/cli/init-docs/index.ts","../../src/cli/commands/init-docs.ts","../../src/cli/commands/identifiers.ts","../../src/cli/index.ts"],"names":["existsSync","jiti","createJiti","config","resolve","z","props","path","fields","repeat","composition","grid","classicLayout","dataLoaders","REGISTRY_SYMBOL","globalScope","Command","fs","readline","fs2","path2","fs3","path3","path4","prompts","equal","identifier","change","path5","upsertCommand","publishCommand","unpublishCommand","getCommand","listCommand","path6","fs4","path7","os","spawn","path8","readFile","path9","ensureDir","loadConfigFile","fs5","section","path10"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Config file loader for riverbank.config.ts\n *\n * Uses jiti to load TypeScript config files at runtime without\n * requiring a build step.\n */\n\nimport { createJiti } from 'jiti';\nimport { resolve } from 'path';\nimport { existsSync } from 'fs';\n\nconst DEFAULT_CONFIG_FILENAME = 'riverbank.config.ts';\n\n/**\n * Load builder config from a TypeScript file.\n *\n * @param configPath - Path to config file, or directory containing riverbank.config.ts\n * @returns The loaded config object\n * @throws Error if config file not found or invalid\n */\nexport async function loadConfigFile(configPath?: string): Promise<unknown> {\n // Resolve the config file path\n const resolvedPath = resolveConfigPath(configPath);\n\n if (!existsSync(resolvedPath)) {\n throw new Error(\n `Config file not found: ${resolvedPath}\\n` +\n `Create a riverbank.config.ts file or specify a path with --config`\n );\n }\n\n console.log(`Loading config from ${resolvedPath}...`);\n\n // Create jiti instance for loading TypeScript files\n const jiti = createJiti(import.meta.url, {\n // Disable caching for CLI tool\n fsCache: false,\n moduleCache: false,\n });\n\n try {\n // Load the config file\n const configModule = await jiti.import(resolvedPath);\n\n // Support both default export and named 'config' export\n const config = (configModule as Record<string, unknown>).default\n ?? (configModule as Record<string, unknown>).config\n ?? configModule;\n\n if (!config || typeof config !== 'object') {\n throw new Error('Config file must export a configuration object');\n }\n\n return config;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to load config: ${error.message}`);\n }\n throw error;\n }\n}\n\n/**\n * Resolve config path from user input.\n *\n * If no path provided, looks for riverbank.config.ts in cwd.\n * If path is a directory, looks for riverbank.config.ts in that directory.\n * If path is a file, uses it directly.\n */\nfunction resolveConfigPath(configPath?: string): string {\n if (!configPath) {\n // Default: look in current directory\n return resolve(process.cwd(), DEFAULT_CONFIG_FILENAME);\n }\n\n const resolved = resolve(configPath);\n\n // If it's a directory, append the default filename\n if (existsSync(resolved) && !resolved.endsWith('.ts') && !resolved.endsWith('.js')) {\n return resolve(resolved, DEFAULT_CONFIG_FILENAME);\n }\n\n // Otherwise use as-is (could be a specific file)\n return resolved;\n}\n","import type { BlockManifest, FieldDefinition } from './schema';\n\n/**\n * Augments a block manifest with synthetic fields and other transformations.\n * This should be called at the block definition level, not at runtime.\n *\n * Current augmentations:\n * - Adds a variant select field if the manifest has multiple variants\n *\n * Future augmentations might include:\n * - Theme field injection\n * - Spacing/layout presets\n * - Animation controls\n */\nexport function augmentManifest(manifest: BlockManifest): BlockManifest {\n let augmentedFields = manifest.fields ?? [];\n\n // Add variant field if block has multiple variants\n const variantField = createVariantField(manifest);\n if (variantField) {\n augmentedFields = [variantField, ...augmentedFields];\n }\n\n return {\n ...manifest,\n fields: augmentedFields,\n };\n}\n\n/**\n * Creates a synthetic variant field definition when a manifest has variants.\n */\nfunction createVariantField(manifest: BlockManifest): FieldDefinition | null {\n if (!manifest.variants || Object.keys(manifest.variants).length <= 1) {\n return null;\n }\n\n const variantKeys = Object.keys(manifest.variants);\n\n const field: FieldDefinition = {\n id: 'variant',\n type: 'select',\n label: 'Variant',\n description: 'Choose a layout variant for this block',\n required: false,\n defaultValue: manifest.defaultVariant ?? variantKeys[0],\n options: variantKeys.map((key) => ({\n value: key,\n label: formatVariantLabel(key),\n })),\n multiple: false,\n };\n\n return field;\n}\n\nfunction formatVariantLabel(variantKey: string): string {\n // Convert camelCase or snake_case to Title Case\n // Examples: \"splitReverse\" → \"Split Reverse\", \"classic\" → \"Classic\"\n return variantKey\n .replace(/([A-Z])/g, ' $1') // Add space before capitals\n .replace(/_/g, ' ') // Replace underscores with spaces\n .trim()\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n","import type { BlockManifest } from \"./schema\";\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@riverbankcms/blocks/manifest-registry\");\n\ntype ManifestRegistryStore = Map<string, BlockManifest>;\n\ninterface ManifestRegistryGlobal extends Record<PropertyKey, unknown> {\n [REGISTRY_SYMBOL]?: ManifestRegistryStore;\n}\n\nconst globalScope = globalThis as ManifestRegistryGlobal;\n\nif (!globalScope[REGISTRY_SYMBOL]) {\n globalScope[REGISTRY_SYMBOL] = new Map();\n}\n\nconst manifestStore = globalScope[REGISTRY_SYMBOL]!;\n\nexport function registerManifest(manifest: BlockManifest): BlockManifest {\n manifestStore.set(manifest.name, manifest);\n return manifest;\n}\n\nexport function getManifestByName(name: string): BlockManifest | undefined {\n return manifestStore.get(name);\n}\n\nexport function hasManifest(name: string): boolean {\n return manifestStore.has(name);\n}\n\nexport function listManifests(): BlockManifest[] {\n return Array.from(manifestStore.values());\n}\n\nexport function clearManifestRegistry(): void {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env === \"production\") {\n return;\n }\n\n manifestStore.clear();\n}\n","import { z } from \"zod\";\n\nconst transformStepSchema = z.object({\n id: z.string().min(1, \"Transform requires an identifier\"),\n options: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const bindingPathSchema = z\n .string()\n .min(1, \"Binding path is required\")\n .regex(/[A-Za-z0-9_\\.$\\[\\]/-]+/, \"Binding path contains invalid characters\");\n\nexport const bindingSchema = z.object({\n from: bindingPathSchema,\n fallback: z.unknown().optional(),\n transforms: transformStepSchema.array().default([]),\n pick: z.enum([\"value\", \"collection\", \"context\"]).default(\"value\"),\n});\n\nexport type Binding = z.infer<typeof bindingSchema>;\n\nexport const repeatSchema = z.object({\n collection: bindingSchema,\n itemName: z.string().min(1).default(\"item\"),\n indexName: z.string().min(1).default(\"index\"),\n limit: z.number().int().positive().optional(),\n sortBy: z\n .object({\n path: bindingPathSchema,\n direction: z.enum([\"asc\", \"desc\"]).default(\"asc\"),\n })\n .optional(),\n});\n\nexport type RepeatConfig = z.infer<typeof repeatSchema>;\n\nexport const conditionSchema = z.object({\n when: bindingSchema,\n equals: z.unknown().optional(),\n not: z.boolean().default(false),\n});\n\nexport type ConditionConfig = z.infer<typeof conditionSchema>;\n\nexport const dataScopeSchema = z.object({\n name: z.string().min(1),\n from: bindingSchema,\n});\n\nexport type DataScope = z.infer<typeof dataScopeSchema>;\n\nexport const nodePropsSchema = z.record(z.string(), z.unknown()).default({});\n\nexport const nodeSchema: z.ZodType<any> = z.object({\n type: z.string().min(1, \"Node type is required\"),\n key: z.string().optional(),\n props: nodePropsSchema.optional(),\n children: z.lazy(() => nodeSchema.array().default([])).optional(),\n $bind: bindingSchema.optional(),\n $repeat: repeatSchema.optional(),\n $when: conditionSchema.optional(),\n $scopes: dataScopeSchema.array().optional(),\n});\n\nexport type NodeDefinition = z.infer<typeof nodeSchema>;\n\nexport const nodeTreeSchema = nodeSchema.array().or(nodeSchema);\n\nexport type NodeTree = z.infer<typeof nodeTreeSchema>;\n\nexport const NodeSchema = nodeSchema;\nexport const NodeTreeSchema = nodeTreeSchema;\n","import type { NodeDefinition } from './schema';\n\n/**\n * Creates conditional layout branches based on item type.\n * Used for polymorphic repeaters where each item type has a different layout.\n *\n * @param itemTypesMap - Map of type IDs to their layout definitions\n * @param options - Configuration options\n * @returns Array of conditional node definitions\n *\n * @example\n * ```typescript\n * // In a repeater with items: [{_type: 'card', ...}, {_type: 'quote', ...}]\n * const children = typeBasedLayout({\n * card: stack({}, [\n * text({ as: 'h3' }, bind('item.title')),\n * richText({}, bind('item.body'))\n * ]),\n * quote: stack({}, [\n * richText({}, bind('item.text')),\n * text({ className: 'author' }, bind('item.author'))\n * ])\n * }, { itemName: 'item' });\n * ```\n */\nexport function typeBasedLayout(\n itemTypesMap: Record<string, NodeDefinition>,\n options?: {\n /**\n * Name of the repeater item variable (default: 'item')\n */\n itemName?: string;\n }\n): NodeDefinition[] {\n const itemName = options?.itemName ?? 'item';\n\n const result = Object.entries(itemTypesMap).map(([typeId, layout]) => {\n // Unwrap single-element arrays (fragments return [NodeDefinition])\n const node = Array.isArray(layout) && layout.length === 1 ? layout[0] : layout;\n\n return {\n ...node,\n $when: {\n when: { from: `${itemName}._type` },\n equals: typeId\n }\n };\n });\n\n return result;\n}\n","import { z } from \"zod\";\nimport { NodeSchema } from \"../node\";\n\n/**\n * Visibility levels gate editor access to fields/slots.\n */\nexport const visibilityLevels = [\"admin\", \"designer\", \"author\"] as const;\nexport type VisibilityLevel = (typeof visibilityLevels)[number];\n\n// metadata has been removed from BlockManifest. Use manifest.title/description\n// directly for any display purposes.\n\nconst uiSchema = z\n .object({\n widget: z.string().optional(),\n flattenInRepeater: z.boolean().optional(),\n hidden: z.boolean().optional(),\n hideLabel: z.boolean().optional(),\n hideDescription: z.boolean().optional(),\n showCharCount: z\n .union([z.number().int().positive(), z.object({ max: z.number().int().positive() })])\n .optional(),\n showSlugPreview: z.boolean().optional(),\n variant: z.enum(['full', 'inline', 'limited', 'media']).optional(),\n richTextVariant: z.enum(['full', 'inline', 'limited', 'media']).optional(),\n // Optional input hints for validators/widgets\n inputType: z.enum(['text', 'email', 'tel', 'number']).optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n pattern: z.string().optional(),\n placeholder: z.string().optional(),\n visibleWhen: z\n .object({\n field: z.string().min(1),\n equals: z.any().optional(),\n notEquals: z.any().optional(),\n oneOf: z.array(z.any()).optional(),\n notIn: z.array(z.any()).optional(),\n })\n .optional(),\n // Modal configuration for modal and group fields\n modalConfig: z\n .object({\n buttonLabel: z.string().optional(),\n description: z.string().optional(),\n buttonVariant: z.enum(['default', 'outline']).optional(),\n showCustomizedIndicator: z.boolean().optional(),\n maxWidth: z.string().optional(),\n })\n .optional(),\n // Background field configuration\n allowedTypes: z.array(z.enum(['color', 'gradient', 'image'])).optional(),\n // Tab group configuration\n fullWidth: z.boolean().optional(),\n // Field layout configuration\n row: z.string().optional(),\n colSpan: z.number().int().min(1).max(4).optional(),\n // Group layout configuration\n layout: z.enum(['stack', 'grid']).optional(),\n columns: z.number().int().min(2).max(4).optional(),\n // Entry picker configuration\n contentTypeField: z.string().optional(),\n })\n .partial();\n\nconst baseFieldSchema = z.object({\n id: z.string().min(1, \"Field id is required\"),\n label: z.string().min(1, \"Field label is required\"),\n description: z.string().optional(),\n visibleRoles: z.array(z.enum(visibilityLevels)).optional(),\n defaultValue: z.any().optional(),\n required: z.boolean().default(false),\n ui: uiSchema.optional(),\n});\n\nconst textFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"text\"),\n multiline: z.boolean().default(false),\n maxLength: z.number().int().positive().optional(),\n});\n\nconst richTextFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"richText\"),\n format: z.enum([\"markdown\", \"html\"]).default(\"markdown\"),\n});\n\nconst mediaFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"media\"),\n mediaKinds: z.array(z.enum([\"image\", \"video\"])).default([\"image\"]),\n aspectRatio: z.string().optional(),\n});\n\nconst booleanFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"boolean\"),\n});\n\nconst dateFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"date\"),\n});\n\nconst timeFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"time\"),\n});\n\nconst dateTimeFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"datetime\"),\n});\n\nconst slugFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"slug\"),\n sourceFieldId: z.string().min(1).optional(),\n statusFieldId: z.string().min(1).optional(),\n maxLength: z.number().int().positive().optional(),\n});\n\nconst urlFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"url\"),\n allowRelative: z.boolean().default(false),\n});\n\nconst linkFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"link\"),\n});\n\nconst selectFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"select\"),\n options: z.array(z.object({\n value: z.string(),\n label: z.string(),\n })).min(1),\n multiple: z.boolean().default(false),\n});\n\nconst referenceFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"reference\"),\n referenceKind: z.string().min(1),\n allowManualEntry: z.boolean().default(false),\n});\n\n/**\n * Item type schema for polymorphic repeaters.\n * Each type has a label, optional icon, and its own field schema.\n */\nconst itemTypeSchema = z.object({\n label: z.string().min(1),\n icon: z.string().optional(),\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Item type requires at least one field\")),\n});\n\n/**\n * Repeater fields allow nesting of other fields within them.\n * This enables complex layouts and structures by repeating a set of fields.\n *\n * Supports two modes:\n * 1. Monomorphic (default): All items have the same schema\n * 2. Polymorphic: Items can be different types (e.g., card, quote, stat)\n *\n * Uses z.lazy() to allow mutual recursion.\n */\nconst repeaterFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"repeater\"),\n itemLabel: z.string().default(\"Item\"),\n itemLabelSource: z.string().optional(),\n minItems: z.number().int().min(0).default(0),\n maxItems: z.number().int().positive().optional(),\n\n // Monomorphic mode\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Repeater requires at least one field\")),\n }).optional(),\n\n // Polymorphic mode\n polymorphic: z.boolean().optional(),\n itemTypes: z.record(z.string(), itemTypeSchema).optional(),\n allowConversion: z.boolean().default(true),\n}).refine(\n (data) => {\n // Either schema OR (polymorphic + itemTypes) must be present\n const hasSchema = data.schema !== undefined;\n const hasPolymorphic = data.polymorphic === true && data.itemTypes !== undefined;\n return hasSchema !== hasPolymorphic; // XOR: exactly one must be true\n },\n {\n message: \"Repeater must have either 'schema' (monomorphic) or 'polymorphic: true' with 'itemTypes' (polymorphic)\",\n }\n);\n\nconst groupFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"group\"),\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Group requires at least one field\")),\n }),\n});\n\nconst modalFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"modal\"),\n schema: z.object({\n fields: z.lazy(() => getFieldSchemaInternal().array().min(1, \"Modal requires at least one field\")),\n }),\n});\n\nconst numberFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"number\"),\n min: z.number().optional(),\n max: z.number().optional(),\n step: z.number().optional(),\n});\n\nconst tabDefinitionSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n icon: z.string().optional(),\n description: z.string().optional(),\n fields: z.lazy(() => getFieldSchemaInternal().array()),\n /** SDK section option that controls tab visibility based on site config */\n sdkSectionOption: z.enum(['backgroundColor', 'backgroundGradient', 'backgroundImage']).optional(),\n});\n\nconst tabGroupFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"tabGroup\"),\n tabs: z.array(tabDefinitionSchema).min(1, \"TabGroup requires at least one tab\"),\n activeTabField: z.string().optional(),\n});\n\nconst presetOptionSchema = z.object({\n value: z.string(),\n label: z.string(),\n});\n\nconst presetOrCustomFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"presetOrCustom\"),\n presets: z.array(presetOptionSchema).min(1, \"PresetOrCustom requires at least one preset\"),\n customInput: z.object({\n placeholder: z.string().optional(),\n pattern: z.string().optional(),\n helpText: z.string().optional(),\n }).optional(),\n});\n\nconst contentTypeSelectFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"contentTypeSelect\"),\n /** Filter: all, routable (hasPages=true), nonRoutable (hasPages=false) */\n filter: z.enum([\"all\", \"routable\", \"nonRoutable\"]).default(\"all\"),\n});\n\nconst entryPickerFieldSchema = baseFieldSchema.extend({\n type: z.literal(\"entryPicker\"),\n});\n\ntype FieldSchemaMembers = readonly [\n typeof textFieldSchema,\n typeof richTextFieldSchema,\n typeof mediaFieldSchema,\n typeof booleanFieldSchema,\n typeof numberFieldSchema,\n typeof dateFieldSchema,\n typeof timeFieldSchema,\n typeof dateTimeFieldSchema,\n typeof slugFieldSchema,\n typeof urlFieldSchema,\n typeof linkFieldSchema,\n typeof selectFieldSchema,\n typeof referenceFieldSchema,\n typeof repeaterFieldSchema,\n typeof groupFieldSchema,\n typeof modalFieldSchema,\n typeof tabGroupFieldSchema,\n typeof presetOrCustomFieldSchema,\n typeof contentTypeSelectFieldSchema,\n typeof entryPickerFieldSchema,\n];\n\ntype FieldSchemaUnion = z.ZodDiscriminatedUnion<FieldSchemaMembers, \"type\">;\n\n// Cached instance for lazy initialization\nlet _fieldSchemaInternal: FieldSchemaUnion | null = null;\n\nfunction getFieldSchemaInternal(): FieldSchemaUnion {\n // Lazy initialization to avoid module-level circular reference issues\n // when bundled into a single file\n if (_fieldSchemaInternal) {\n return _fieldSchemaInternal;\n }\n\n _fieldSchemaInternal = z.discriminatedUnion(\"type\", [\n textFieldSchema,\n richTextFieldSchema,\n mediaFieldSchema,\n booleanFieldSchema,\n numberFieldSchema,\n dateFieldSchema,\n timeFieldSchema,\n dateTimeFieldSchema,\n slugFieldSchema,\n urlFieldSchema,\n linkFieldSchema,\n selectFieldSchema,\n referenceFieldSchema,\n repeaterFieldSchema,\n groupFieldSchema,\n modalFieldSchema,\n tabGroupFieldSchema,\n presetOrCustomFieldSchema,\n contentTypeSelectFieldSchema,\n entryPickerFieldSchema,\n ]) as unknown as FieldSchemaUnion;\n\n return _fieldSchemaInternal;\n}\n\n// Getter function for programmatic access\nexport function getFieldSchema(): FieldSchemaUnion {\n return getFieldSchemaInternal();\n}\n\n// Lazy proxy that forwards all method calls to getFieldSchemaInternal()\n// This allows backward compatibility with code using fieldSchema.array(), .parse(), etc.\n// The actual schema is only created when a method is first called\nexport const fieldSchema: FieldSchemaUnion = new Proxy({} as FieldSchemaUnion, {\n get(_, prop: keyof FieldSchemaUnion) {\n const schema = getFieldSchemaInternal();\n const value = schema[prop];\n // Bind functions to the schema so `this` works correctly\n return typeof value === 'function' ? value.bind(schema) : value;\n },\n // Forward has checks to the real schema\n has(_, prop) {\n return prop in getFieldSchemaInternal();\n },\n});\n\nexport type FieldSchema = FieldSchemaUnion;\n\nexport type TextFieldDefinition = z.output<typeof textFieldSchema>;\nexport type RichTextFieldDefinition = z.output<typeof richTextFieldSchema>;\nexport type MediaFieldDefinition = z.output<typeof mediaFieldSchema>;\nexport type BooleanFieldDefinition = z.output<typeof booleanFieldSchema>;\nexport type NumberFieldDefinition = z.output<typeof numberFieldSchema>;\nexport type DateFieldDefinition = z.output<typeof dateFieldSchema>;\nexport type TimeFieldDefinition = z.output<typeof timeFieldSchema>;\nexport type DateTimeFieldDefinition = z.output<typeof dateTimeFieldSchema>;\nexport type SlugFieldDefinition = z.output<typeof slugFieldSchema>;\nexport type UrlFieldDefinition = z.output<typeof urlFieldSchema>;\nexport type LinkFieldDefinition = z.output<typeof linkFieldSchema>;\nexport type SelectFieldDefinition = z.output<typeof selectFieldSchema>;\nexport type ReferenceFieldDefinition = z.output<typeof referenceFieldSchema>;\nexport type ItemTypeDefinition = {\n label: string;\n icon?: string;\n fields: FieldDefinition[];\n};\n\nexport type RepeaterFieldDefinition = Omit<z.output<typeof repeaterFieldSchema>, \"schema\" | \"itemTypes\"> & {\n schema?: {\n fields: FieldDefinition[];\n };\n itemTypes?: Record<string, ItemTypeDefinition>;\n};\n\nexport type GroupFieldDefinition = Omit<z.output<typeof groupFieldSchema>, \"schema\"> & {\n schema: {\n fields: FieldDefinition[];\n };\n};\n\nexport type ModalFieldDefinition = Omit<z.output<typeof modalFieldSchema>, \"schema\"> & {\n schema: {\n fields: FieldDefinition[];\n };\n};\n\nexport type TabDefinition = {\n id: string;\n label: string;\n icon?: string;\n description?: string;\n fields: FieldDefinition[];\n /**\n * Optional SDK section option that controls tab visibility.\n * When set, the tab is only shown when the SDK sectionOptions[key] is not false.\n */\n sdkSectionOption?: 'backgroundColor' | 'backgroundGradient' | 'backgroundImage';\n};\n\nexport type TabGroupFieldDefinition = Omit<z.output<typeof tabGroupFieldSchema>, \"tabs\"> & {\n tabs: TabDefinition[];\n};\n\nexport type PresetOption = {\n value: string;\n label: string;\n};\n\nexport type PresetOrCustomFieldDefinition = z.output<typeof presetOrCustomFieldSchema>;\n\nexport type ContentTypeSelectFieldDefinition = z.output<typeof contentTypeSelectFieldSchema>;\n\nexport type EntryPickerFieldDefinition = z.output<typeof entryPickerFieldSchema>;\n\nexport type FieldDefinition =\n | TextFieldDefinition\n | RichTextFieldDefinition\n | MediaFieldDefinition\n | BooleanFieldDefinition\n | NumberFieldDefinition\n | DateFieldDefinition\n | TimeFieldDefinition\n | DateTimeFieldDefinition\n | SlugFieldDefinition\n | UrlFieldDefinition\n | LinkFieldDefinition\n | SelectFieldDefinition\n | ReferenceFieldDefinition\n | RepeaterFieldDefinition\n | GroupFieldDefinition\n | ModalFieldDefinition\n | TabGroupFieldDefinition\n | PresetOrCustomFieldDefinition\n | ContentTypeSelectFieldDefinition\n | EntryPickerFieldDefinition;\n\n/**\n * Union type of all possible block field types.\n * Extracted from FieldDefinition for use in type compatibility checks.\n */\nexport type BlockFieldType = FieldDefinition['type'];\n\nexport const slotSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n allowedKinds: z.array(z.string()).default([]),\n min: z.number().int().min(0).default(0),\n max: z.number().int().positive().optional(),\n help: z.string().optional(),\n visibleRoles: z.array(z.enum(visibilityLevels)).optional(),\n});\n\nexport type SlotDefinition = z.infer<typeof slotSchema>;\n\nconst typographyTokens = [\"display\", \"heading\", \"subheading\", \"body\", \"caption\"] as const;\nconst colorTokens = [\"background\", \"surface\", \"foreground\", \"accent\", \"muted\"] as const;\nconst spacingTokens = [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\nconst radiusTokens = [\"none\", \"sm\", \"md\", \"lg\", \"full\"] as const;\n\nexport const styleTokenSchema = z.object({\n background: z.enum(colorTokens).optional(),\n foreground: z.enum(colorTokens).optional(),\n border: z.enum(colorTokens).optional(),\n typography: z.enum(typographyTokens).optional(),\n spacing: z.enum(spacingTokens).optional(),\n radius: z.enum(radiusTokens).optional(),\n});\n\nexport type StyleTokenConfig = z.infer<typeof styleTokenSchema>;\n\nexport const behaviourSchema = z.object({\n supportsThemeSwitching: z.boolean().default(true),\n inlineEditing: z.boolean().default(false),\n animation: z.boolean().default(false),\n // Hide from block picker palettes (e.g., header/footer system blocks)\n paletteHidden: z.boolean().default(false),\n});\n\nexport type BehaviourConfig = z.infer<typeof behaviourSchema>;\n\n// Block discovery and organization metadata\nexport const blockCategoryEnum = z.enum(['marketing', 'content', 'blog', 'media', 'layout', 'interactive']);\nexport type BlockCategory = z.infer<typeof blockCategoryEnum>;\n\nexport const manifestSchema = z.object({\n name: z.string().min(1),\n version: z.string().min(1),\n title: z.string().min(1),\n titleSource: z.string().optional(),\n description: z.string().optional(),\n component: z.string().min(1),\n fields: fieldSchema.array().default([]),\n slots: slotSchema.array().default([]),\n styleTokens: styleTokenSchema.optional(),\n behaviours: behaviourSchema.optional(),\n layout: NodeSchema.optional(),\n // Block variants system\n variants: z.record(z.string(), NodeSchema).optional(),\n defaultVariant: z.string().optional(),\n // Discovery metadata\n category: blockCategoryEnum.optional(),\n contentTypes: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n icon: z.string().optional(),\n});\n\nexport type BlockManifest = z.infer<typeof manifestSchema>;\n\n// ============================================================================\n// SDK Custom Block Types\n// ============================================================================\n\n/**\n * Whitelisted CMS loader endpoints for SDK custom blocks.\n *\n * The canonical list is SUPPORTED_LOADER_ENDPOINTS in @riverbankcms/sdk/data.\n * This type must remain in sync. The SDK validation derives its Zod schema\n * from that constant, ensuring runtime and compile-time consistency.\n *\n * Supported endpoints:\n * - listPublishedEntries: Fetch published content entries\n * - getPublishedEntryPreview: Fetch a single entry by slug\n * - listPublicEvents: Fetch public calendar events\n * - getPublicFormById: Fetch a form configuration\n * - getPublicBookingServices: Fetch booking services\n */\nexport type SdkLoaderEndpoint =\n | 'listPublishedEntries'\n | 'getPublishedEntryPreview'\n | 'listPublicEvents'\n | 'getPublicFormById'\n | 'getPublicBookingServices';\n\n/**\n * A binding expression for dynamic loader params.\n *\n * Bindings resolve at runtime from block content or page context:\n * - `content.fieldName` - Value from block's content field\n * - `$root.siteId` - Site ID from page context\n * - `$root.pageId` - Page ID from page context\n * - `$root.previewStage` - 'published' or 'preview'\n */\nexport type ParamBinding = {\n $bind: {\n /** Path to bind from (e.g., 'content.categoryId', '$root.siteId') */\n from: string;\n /** Fallback value if binding resolves to undefined */\n fallback?: string;\n };\n};\n\n/**\n * A loader param value can be static or a binding expression.\n */\nexport type LoaderParamValue = string | number | boolean | ParamBinding;\n\n/**\n * Config-based data loader for SDK custom blocks.\n *\n * Config loaders are declarative and restricted to whitelisted CMS endpoints.\n * They execute server-side during loadPage().\n */\nexport interface SdkConfigLoader {\n /** Whitelisted CMS endpoint to call */\n endpoint: SdkLoaderEndpoint;\n\n /**\n * Parameters to pass to the endpoint.\n * Values can be static or use bindings for dynamic resolution.\n */\n params: Record<string, LoaderParamValue>;\n\n /**\n * Execution mode.\n * Currently only 'server' is implemented - loaders run during loadPage().\n * 'client' is reserved for future client-side refresh functionality.\n * @default 'server'\n */\n mode?: 'server' | 'client';\n}\n\n/**\n * SDK Custom Block Definition\n *\n * Used by SDK sites to define entirely new blocks in their riverbank.config.ts.\n * These blocks:\n * - Have their own field schemas (using standard FieldDefinition format)\n * - Appear in the CMS block picker alongside system blocks\n * - Are edited using CMS-generated forms (existing infrastructure)\n * - MUST be rendered via blockOverrides on the SDK site\n *\n * Block IDs must start with 'custom.' to distinguish from system blocks.\n */\nexport interface SdkCustomBlock {\n /** Block ID - MUST start with 'custom.' (e.g., 'custom.team-member') */\n id: `custom.${string}`;\n\n /** Display title in block picker */\n title: string;\n\n /** Field ID to use as block title in lists (must match a field id) */\n titleSource?: string;\n\n /** Description shown in block picker */\n description?: string;\n\n /** Category for block picker organization */\n category: BlockCategory;\n\n /** Lucide icon name */\n icon?: string;\n\n /** Search tags for block discovery */\n tags?: string[];\n\n /** Field definitions - uses same type as system blocks */\n fields: FieldDefinition[];\n\n /**\n * Config-based data loaders for CMS endpoints.\n *\n * Keys are loader names (e.g., 'posts', 'events').\n * Data is available in the component as `data.{key}`.\n *\n * @example\n * ```typescript\n * dataLoaders: {\n * events: {\n * endpoint: 'listPublicEvents',\n * params: {\n * siteId: { $bind: { from: '$root.siteId' } },\n * limit: { $bind: { from: 'content.limit', fallback: '5' } },\n * },\n * },\n * }\n * ```\n */\n dataLoaders?: Record<string, SdkConfigLoader>;\n}\n","/**\n * Environment detection utilities\n *\n * Provides type-safe environment detection without relying on 'as any' casts.\n */\n\n/**\n * Check if the current environment is development.\n *\n * Returns true if NODE_ENV is not 'production', or if NODE_ENV cannot be determined\n * (which is the safe default for validation and warnings).\n *\n * @returns true if in development mode, false if in production\n */\nexport function isDevEnvironment(): boolean {\n try {\n // Try to access process.env.NODE_ENV safely\n if (typeof process !== 'undefined' && process.env?.NODE_ENV !== undefined) {\n return process.env.NODE_ENV !== 'production'\n }\n // If process.env is unavailable (e.g., browser context), assume dev (safe default)\n return true\n } catch {\n // If accessing process throws (strict browser context), assume dev (safe default)\n return true\n }\n}\n","/**\n * Type-safe node builder types\n *\n * These types prevent common mistakes like putting 'children' in props\n * by explicitly excluding reserved keys at compile time.\n */\n\nimport type { NodeDefinition } from './schema'\nimport { isDevEnvironment } from '../../utils/env'\n\n/**\n * Reserved keys that should NEVER appear in node props.\n * These are top-level NodeDefinition properties that would conflict if placed in props.\n *\n * Note: 'type' is NOT included because components may legitimately need a 'type' prop\n * (e.g., Accordion needs type=\"single\"). The NodeDefinition.type is separate from props.type.\n */\ntype ReservedNodeKeys =\n | 'children'\n | 'key'\n | '$bind'\n | '$when'\n | '$repeat'\n | '$scopes'\n\n/**\n * List of reserved keys (for runtime validation).\n * Kept in sync with the ReservedNodeKeys type above.\n */\nconst RESERVED_KEYS: readonly ReservedNodeKeys[] = [\n 'children',\n 'key',\n '$bind',\n '$when',\n '$repeat',\n '$scopes',\n] as const\n\n/**\n * Props type that explicitly excludes reserved keys.\n * This makes it a compile-time error to pass children, $bind, etc. in props.\n *\n * @example\n * // ✅ OK\n * const props: NodeProps = { className: 'foo', gap: 'md' }\n *\n * // ❌ Type error - 'children' is not allowed in props\n * const props: NodeProps = { className: 'foo', children: [...] }\n */\nexport type NodeProps = Record<string, unknown> & {\n [K in ReservedNodeKeys]?: never\n}\n\n/**\n * Type-safe version of the el() function signature.\n * Ensures props cannot contain reserved keys.\n */\nexport type ElementBuilder = (\n type: string,\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: Array<(node: NodeDefinition) => NodeDefinition>\n) => NodeDefinition\n\n/**\n * Type guard to check if props contain reserved keys at runtime.\n * Use this in development mode to catch bugs early.\n *\n * @param props - Props object to validate\n * @returns Array of reserved keys found in props, or empty array if none\n */\nexport function findReservedKeysInProps(props: Record<string, unknown> | null | undefined): ReservedNodeKeys[] {\n if (!props) return []\n\n return RESERVED_KEYS.filter(key => key in props) as ReservedNodeKeys[]\n}\n\n/**\n * Validates that props don't contain reserved keys.\n * Throws in development, warns in production.\n *\n * @param props - Props to validate\n * @param context - Context for error message (e.g., \"el('grid', ...)\")\n */\nexport function validateProps(\n props: Record<string, unknown> | null | undefined,\n context: string = 'node builder'\n): void {\n const reserved = findReservedKeysInProps(props)\n\n if (reserved.length === 0) return\n\n const message = `[blocks:${context}] Reserved keys found in props: ${reserved.join(', ')}. ` +\n `These should be passed as separate parameters or modifiers, not in props. ` +\n `For example, 'children' should be the 3rd parameter to el(), not in the props object.`\n\n if (isDevEnvironment()) {\n throw new TypeError(message)\n } else {\n console.error(message)\n }\n}\n\n/**\n * Helper type to infer proper props for specific node types.\n * Can be extended to provide type-specific prop validation.\n */\nexport type NodeTypeProps<T extends string> = T extends 'grid'\n ? NodeProps & {\n cols?: unknown\n gap?: unknown\n }\n : T extends 'stack' | 'inline'\n ? NodeProps & {\n gap?: unknown\n align?: unknown\n justify?: unknown\n className?: unknown\n }\n : T extends 'text' | 'richText'\n ? NodeProps & {\n as?: string\n className?: unknown\n }\n : NodeProps\n","import { NodeSchema, type NodeDefinition } from './schema'\nimport { validateProps, type NodeProps } from './types'\nimport { isDevEnvironment } from '../../utils/env'\n\n// Modifier function that mutates or augments a node definition\nexport type NodeModifier = (node: NodeDefinition) => NodeDefinition\n\nfunction normalizeChildren(children?: Array<NodeDefinition | null | undefined>): NodeDefinition[] | undefined {\n if (!children) return undefined\n const flat = children.flat().filter(Boolean) as NodeDefinition[]\n return flat.length > 0 ? flat : undefined\n}\n\nexport function el(\n type: string,\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n): NodeDefinition {\n // Validate that reserved keys aren't in props (throws in dev, warns in prod)\n validateProps(props, `el('${type}', ...)`)\n\n const node: NodeDefinition = {\n type,\n ...(props && Object.keys(props).length > 0 ? { props } : {}),\n ...(children && children.length ? { children: normalizeChildren(children) } : {}),\n }\n\n if (mods && mods.length > 0) {\n // Filter out any non-function values (e.g., undefined, null)\n const validMods = mods.filter((mod): mod is NodeModifier => typeof mod === 'function')\n if (validMods.length > 0) {\n const modified = validMods.reduce((acc, fn) => fn(acc), node)\n return devValidate(modified)\n }\n }\n return devValidate(node)\n}\n\n// Convenience element helpers for common primitives\nexport const section = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('section', props, children, ...mods)\n\nexport const headerSection = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('headerSection', props, children, ...mods)\n\nexport const stack = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('stack', props, children, ...mods)\n\nexport const inline = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('inline', props, children, ...mods)\n\nexport const accordion = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('accordion', props, children, ...mods)\n\nexport const accordionItem = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('accordionItem', props, children, ...mods)\n\nexport const carousel = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('carousel', props, children, ...mods)\n\nexport const text = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('text', props, undefined, ...mods)\n\nexport const richText = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('richText', props, undefined, ...mods)\n\nexport const media = (\n props?: NodeProps | null,\n ...mods: NodeModifier[]\n) => el('media', props, undefined, ...mods)\n\nexport const button = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('button', props, children, ...mods)\n\nexport const link = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('link', props, children, ...mods)\n\nexport const form = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('form', props, children, ...mods)\n\nexport const bookingForm = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('booking-form', props, children, ...mods)\n\nexport const eventList = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('event-list', props, children, ...mods)\n\nexport const eventRegistration = (\n props?: NodeProps | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('event-registration', props, children, ...mods)\n\n// Modifiers\nexport function bind(from: string, options?: { fallback?: unknown; transforms?: Array<{ id: string; options?: Record<string, unknown> }>; pick?: 'value' | 'collection' | 'context' }): NodeModifier {\n return (node) => ({\n ...node,\n $bind: {\n from,\n ...(options?.fallback !== undefined ? { fallback: options.fallback } : {}),\n ...(options?.transforms ? { transforms: options.transforms } : {}),\n ...(options?.pick ? { pick: options.pick } : {}),\n },\n })\n}\n\nexport function when(path: string, options?: { equals?: unknown; not?: boolean }): NodeModifier {\n return (node) => ({\n ...node,\n $when: {\n when: { from: path },\n ...(options?.equals !== undefined ? { equals: options.equals } : {}),\n ...(options?.not ? { not: true } : {}),\n },\n })\n}\n\nexport function repeat(\n collectionPath: string,\n itemName: string = 'item',\n options?: { indexName?: string; limit?: number; sortBy?: { path: string; direction?: 'asc' | 'desc' } },\n): NodeModifier {\n return (node) => ({\n ...node,\n $repeat: {\n collection: { from: collectionPath, pick: 'collection' },\n itemName,\n ...(options?.indexName ? { indexName: options.indexName } : {}),\n ...(options?.limit ? { limit: options.limit } : {}),\n ...(options?.sortBy\n ? { sortBy: { path: options.sortBy.path, direction: options.sortBy.direction ?? 'asc' } }\n : {}),\n },\n })\n}\n\nexport function props(extra: Record<string, unknown>): NodeModifier {\n // Validate that reserved keys aren't being injected via the modifier\n validateProps(extra, 'props() modifier')\n\n return (node) => ({\n ...node,\n props: { ...(node.props ?? {}), ...extra },\n })\n}\n\ntype AccordionListOptions = {\n collection: string\n itemName?: string\n indexName?: string\n accordionProps?: NodeProps | null\n itemProps?: NodeProps | null\n triggerFrom: string\n contentFrom?: string\n valueFrom?: string | null\n}\n\nexport function accordionList(\n {\n collection,\n itemName = 'item',\n indexName,\n accordionProps = null,\n itemProps = null,\n triggerFrom,\n contentFrom,\n valueFrom,\n }: AccordionListOptions,\n ...mods: NodeModifier[]\n) {\n const resolvedIndexName = indexName ?? `${itemName}Index`\n const resolvedValuePath = valueFrom === null ? null : (valueFrom ?? resolvedIndexName)\n\n const baseItemProps: Record<string, unknown> = {\n ...(itemProps ?? {}),\n trigger: { $bind: { from: triggerFrom } },\n }\n\n if (contentFrom) {\n baseItemProps.content = { $bind: { from: contentFrom } }\n }\n\n if (resolvedValuePath) {\n baseItemProps.value = { $bind: { from: resolvedValuePath } }\n }\n\n return accordion(\n accordionProps ?? undefined,\n [\n accordionItem(\n baseItemProps,\n undefined,\n repeat(collection, itemName, { indexName: resolvedIndexName }),\n ),\n ],\n ...mods,\n )\n}\n\n// Dev-time validation against NodeSchema\nfunction devValidate(node: NodeDefinition): NodeDefinition {\n try {\n if (isDevEnvironment()) {\n const res = NodeSchema.safeParse(node)\n if (!res.success) {\n console.warn('[blocks:builder] Invalid node produced by builder', res.error.format())\n }\n }\n } catch {\n // noop: avoid crashing if zod or env is unavailable in certain runtimes\n }\n return node\n}\n","import { el, media, when, bind } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n/**\n * Options for customizing the appearance of background layers.\n */\nexport type BackgroundLayerOptions = {\n /**\n * CSS class applied to the color/gradient layer container.\n * This layer renders solid colors and gradients.\n *\n * @default 'absolute inset-0 -z-10 h-full w-full pointer-events-none'\n */\n styleClassName?: string\n\n /**\n * Base CSS classes applied to the background image element.\n * This layer renders background images with dynamic positioning based on scale.\n *\n * Note: Do NOT include positioning (inset-0), sizing (h-full w-full), object-fit, or opacity.\n * Those properties are applied dynamically via transforms:\n * - Positioning/sizing: background.resolveImageClassName (based on scale)\n * - Visual properties: background.resolveImageStyle (object-fit, opacity, width/height)\n *\n * @default 'absolute -z-10'\n */\n imageClassName?: string\n}\n\n/**\n * Creates a pair of background layer nodes for rendering backgrounds from field data.\n *\n * This helper generates two nodes:\n * 1. A style layer (div) that renders solid colors and gradients\n * 2. An image layer that conditionally renders background images\n *\n * The layers are designed to be placed behind content (z-index -10) and work\n * with data from `sectionStylesField`, `containerStylesField`, or `cardStylesField`.\n *\n * @param path - The data path to the background field (e.g., '_sectionStyles.background')\n * @param options - Optional customization for layer appearance\n * @returns Array of two NodeDefinition objects: [styleLayer, imageLayer]\n *\n * @example\n * // Basic usage in a block\n * const heroBackgroundNodes = backgroundLayer('_sectionStyles.background')\n *\n * @example\n * // Custom styling\n * const customBackgroundNodes = backgroundLayer('_sectionStyles.background', {\n * imageClassName: 'absolute inset-0 -z-10 h-full w-full object-cover opacity-30'\n * })\n *\n * @example\n * // In a block layout\n * const layout = section(\n * { background: 'background/base' },\n * [\n * ...backgroundLayer('_sectionStyles.background'),\n * sectionContainer([])\n * ]\n * )\n */\nexport function backgroundLayer(\n path: string,\n options: BackgroundLayerOptions = {},\n): NodeDefinition[] {\n const {\n styleClassName = 'absolute inset-0 -z-10 h-full w-full pointer-events-none',\n imageClassName,\n } = options\n\n const styleLayer = el('div', {\n className: { $bind: { from: path, transforms: [{ id: 'background.resolveClass', options: { baseClass: styleClassName } }] } },\n style: { $bind: { from: path, transforms: [{ id: 'background.resolveStyle' }] } },\n })\n\n const imageLayer = createBackgroundImageNode(path, imageClassName)\n\n return [styleLayer, imageLayer]\n}\n\n/**\n * Creates a media node for rendering a background image with conditional rendering.\n *\n * This helper creates a media element that:\n * - Only renders when the image path has a value (via `when` modifier)\n * - Binds to the image data at the specified path (via `bind` modifier)\n * - Applies the provided CSS class for positioning and styling\n * - Applies advanced image options (object-fit, object-position, opacity) via transform\n *\n * Used internally by `backgroundLayer()` but can be used independently for custom layouts.\n *\n * @param path - The data path to the background field (e.g., '_sectionStyles.background')\n * @param className - CSS class for the image element\n * @returns A media NodeDefinition with conditional rendering and data binding\n *\n * @example\n * // Standalone usage\n * const imageNode = createBackgroundImageNode('_sectionStyles.background')\n *\n * @example\n * // Custom styling\n * const imageNode = createBackgroundImageNode(\n * '_sectionStyles.background',\n * 'absolute inset-0 h-full w-full'\n * )\n */\nexport function createBackgroundImageNode(\n path: string,\n baseClassName: string = 'absolute -z-10',\n): NodeDefinition {\n const imagePath = `${path}.image`\n\n // Note: Visual properties (object-fit, opacity, scale) are applied dynamically.\n // className: Resolved via background.resolveImageClassName based on scale\n // style: Resolved via background.resolveImageStyle for object-fit, opacity, width/height\n return media(\n {\n className: {\n $bind: {\n from: path,\n transforms: [{\n id: 'background.resolveImageClassName',\n options: { baseClass: `background-image ${baseClassName}` }\n }]\n }\n },\n style: {\n $bind: {\n from: path,\n transforms: [{ id: 'background.resolveImageStyle' }],\n },\n },\n },\n when(imagePath),\n bind(imagePath),\n )\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * Theme color tokens support three formats:\n *\n * 1. Semantic/palette tokens: 'text', 'surface', 'primary', 'mutedText', 'neutral-900', etc.\n * These resolve to CSS variables like `var(--tb-primary)`\n *\n * 2. Tokens with opacity: 'surface/95', 'primary/50', 'border/20'\n * Format: `{token}/{opacity%}`\n * These resolve to rgba with the specified opacity (e.g., `rgba(var(--tb-surface), 0.95)`)\n *\n * 3. Raw CSS values: 'raw:transparent', 'raw:#ffffff', 'raw:rgba(255, 0, 0, 0.5)'\n * Format: `raw:{css-value}`\n * These bypass the CSS variable system and output the literal value\n *\n * @example\n * // Semantic token\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n *\n * @example\n * // Token with opacity\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n *\n * @example\n * // Raw value\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\ntype ThemeColorToken = string;\n\ntype ParsedToken = {\n token: string;\n alpha?: number;\n raw?: string;\n};\n\nconst COLOR_VAR_PREFIX = '--tb-';\n\nfunction parseToken(source: ThemeColorToken): ParsedToken {\n if (source.startsWith('raw:')) {\n return { token: source, raw: source.slice(4) };\n }\n if (source.includes('/')) {\n const [token, opacity] = source.split('/');\n const alpha = Number(opacity) / 100;\n if (!Number.isNaN(alpha) && token) {\n return { token, alpha };\n }\n return { token: source };\n }\n return { token: source };\n}\n\n/**\n * Converts a theme color token to a CSS rgb/rgba value.\n * This is the primary function for applying theme colors to CSS properties.\n *\n * @param token - Theme color token (semantic, with opacity, or raw)\n * @returns CSS color value (rgb, rgba, or raw CSS value)\n *\n * @example\n * rgbColorValue('primary') // => 'rgb(var(--tb-primary))'\n * rgbColorValue('surface/95') // => 'rgba(var(--tb-surface), 0.95)'\n * rgbColorValue('raw:transparent') // => 'transparent'\n */\nexport function rgbColorValue(token: ThemeColorToken): string {\n const { token: baseToken, alpha, raw } = parseToken(token);\n if (raw) {\n return raw;\n }\n const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;\n if (alpha === undefined) {\n return `rgb(var(${cssVar}))`;\n }\n return `rgba(var(${cssVar}), ${alpha})`;\n}\n\n/**\n * Converts a theme color token to a CSS variable reference.\n * Note: This returns the base variable without rgb() wrapper, ignoring opacity.\n *\n * @param token - Theme color token\n * @returns CSS variable reference\n *\n * @example\n * cssVarValue('primary') // => 'var(--tb-primary)'\n * cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)\n */\nexport function cssVarValue(token: ThemeColorToken): string {\n const { token: baseToken } = parseToken(token);\n return `var(${COLOR_VAR_PREFIX}${baseToken})`;\n}\n\n/**\n * Creates a backgroundColor style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with backgroundColor\n */\nexport function backgroundColorStyle(token: ThemeColorToken): CSSProperties {\n return { backgroundColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a text color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with color\n */\nexport function textColorStyle(token: ThemeColorToken): CSSProperties {\n return { color: rgbColorValue(token) };\n}\n\n/**\n * Creates a border color style object from a theme token.\n *\n * @param token - Theme color token\n * @returns CSSProperties with borderColor\n */\nexport function borderColorStyle(token: ThemeColorToken): CSSProperties {\n return { borderColor: rgbColorValue(token) };\n}\n\n/**\n * Creates a linear gradient background from theme tokens.\n *\n * @param tokens - Array of theme color tokens for gradient stops\n * @param direction - CSS gradient direction (default: 'to bottom')\n * @returns CSSProperties with backgroundImage\n *\n * @example\n * gradientBackgroundStyle(['primary', 'secondary'])\n * // => { backgroundImage: 'linear-gradient(to bottom, rgb(var(--tb-primary)), rgb(var(--tb-secondary)))' }\n *\n * @example\n * gradientBackgroundStyle(['primary/80', 'secondary/60'], '45deg')\n * // => { backgroundImage: 'linear-gradient(45deg, rgba(var(--tb-primary), 0.8), rgba(var(--tb-secondary), 0.6))' }\n */\nexport function gradientBackgroundStyle(\n tokens: ThemeColorToken[],\n direction: string = 'to bottom',\n): CSSProperties {\n const stops = tokens.map((stop) => rgbColorValue(stop)).join(', ');\n return { backgroundImage: `linear-gradient(${direction}, ${stops})` };\n}\n\n/**\n * Creates a Tailwind ring color style object from a theme token.\n * Used for focus ring styling with Tailwind's ring utilities.\n *\n * @param token - Theme color token\n * @returns CSSProperties with --tw-ring-color CSS variable\n */\nexport function ringColorStyle(token: ThemeColorToken): CSSProperties {\n return { '--tw-ring-color': rgbColorValue(token) } as CSSProperties;\n}\n\n/**\n * Merges multiple CSSProperties objects into a single object.\n * Later styles override earlier ones. Undefined values are filtered out.\n * Returns undefined if the merged result is empty.\n *\n * @param styles - Variable number of CSSProperties objects (can be undefined)\n * @returns Merged CSSProperties object, or undefined if empty\n *\n * @example\n * mergeStyles(\n * backgroundColorStyle('surface'),\n * textColorStyle('text'),\n * borderColorStyle('border')\n * )\n * // => { backgroundColor: '...', color: '...', borderColor: '...' }\n */\nexport function mergeStyles(...styles: Array<CSSProperties | undefined>): CSSProperties | undefined {\n const merged = styles.filter(Boolean).reduce<CSSProperties>((acc, style) => Object.assign(acc, style!), {});\n return Object.keys(merged).length ? merged : undefined;\n}\n\n","import { stack, text, when, bind } from '../builder'\nimport type { NodeDefinition } from '../schema'\nimport { textColorStyle } from '../../../theme/utils/colorStyles'\n\nexport function headingGroup(opts: {\n eyebrowPath?: string\n titlePath: string\n containerClass?: string\n className?: string\n eyebrowClass?: string\n titleClass?: string\n eyebrowStyle?: Record<string, unknown>\n titleStyle?: Record<string, unknown>\n}): NodeDefinition {\n const {\n eyebrowPath,\n titlePath,\n containerClass = 'text-center',\n className,\n eyebrowClass = 'heading-eyebrow text-sm font-semibold tracking-wide',\n // h2 now gets size/weight from theme typography CSS\n titleClass = 'heading-title',\n eyebrowStyle = textColorStyle('neutral-500'),\n titleStyle = textColorStyle('neutral-900'),\n } = opts\n\n const finalContainerClass = className ? `${containerClass} ${className}` : containerClass\n\n return stack({ gap: 'sm', className: finalContainerClass }, [\n eyebrowPath ? text({ as: 'p', className: eyebrowClass, style: eyebrowStyle }, when(eyebrowPath), bind(eyebrowPath)) : null,\n text({ as: 'h2', className: titleClass, style: titleStyle }, bind(titlePath)),\n ])\n}\n","import { stack } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n/**\n * Creates a centered container with responsive max-width.\n *\n * By default, uses Tailwind's responsive `container` class which provides:\n * - sm: max-w-640px\n * - md: max-w-768px\n * - lg: max-w-1024px\n * - xl: max-w-1280px\n * - 2xl: max-w-1536px\n *\n * When `bindFrom` points to _containerStyles with fullWidth=true, switches to `w-full`\n * for edge-to-edge content without horizontal constraints.\n *\n * @param children - Child nodes to render inside container\n * @param opts - Configuration options\n * @param opts.gap - Vertical spacing between children (default: 'md')\n * @param opts.align - Horizontal alignment (default: undefined)\n * @param opts.className - Additional static classes\n * @param opts.bindFrom - Data path for container styles (default: '_containerStyles')\n * @returns A stack NodeDefinition configured as a responsive container\n */\nexport function sectionContainer(\n children: Array<NodeDefinition | null | undefined>,\n opts?: {\n gap?: 'sm' | 'md' | 'lg' | 'xl'\n align?: 'start' | 'center' | 'end'\n className?: string\n bindFrom?: string\n },\n): NodeDefinition {\n const gap = opts?.gap ?? 'md'\n const align = opts?.align\n const bindFrom = opts?.bindFrom ?? '_containerStyles'\n const additionalClasses = opts?.className ?? ''\n\n return stack(\n {\n gap,\n className: {\n $bind: {\n from: bindFrom,\n transforms: [\n {\n id: 'containerStyles.resolveClassName',\n options: { baseClass: additionalClasses },\n },\n ],\n fallback: additionalClasses ? `container mx-auto ${additionalClasses}` : 'container mx-auto',\n },\n },\n ...(align ? { align } : {}),\n },\n children,\n )\n}\n\n","/**\n * Type-safe spacing system for sections and containers.\n *\n * This module provides:\n * - Semantic spacing values (none, compact, cozy, medium, comfortable, spacious)\n * - Type-safe mappings to Tailwind CSS classes\n * - Runtime validation via type guards\n * - Separate handling for section (vertical) vs container (all-sides) spacing\n *\n * Type Safety Guarantees:\n * - Type is derived from data (single source of truth)\n * - Maps are validated for completeness at compile time\n * - Runtime validation available via isSemanticSpacing()\n */\n\n/**\n * Single source of truth for semantic spacing values.\n * The SemanticSpacing type is derived from this array to ensure they stay in sync.\n *\n * Adding a new spacing value:\n * 1. Add it to this array\n * 2. TypeScript will error until you update both spacing maps\n * 3. No way to get out of sync\n */\nconst SEMANTIC_SPACING_VALUES = [\n 'none', // No padding\n 'compact', // Minimal padding\n 'cozy', // Small but comfortable\n 'medium', // Standard spacing (default for most blocks)\n 'comfortable', // Generous spacing\n 'spacious', // Maximum spacing\n] as const;\n\n/**\n * Semantic spacing values used across the block system.\n * These abstract away the specific CSS classes and provide a consistent vocabulary.\n *\n * This type is derived from SEMANTIC_SPACING_VALUES to ensure compile-time safety.\n */\nexport type SemanticSpacing = typeof SEMANTIC_SPACING_VALUES[number];\n\n/**\n * Runtime type guard for validating spacing values.\n * Use this at system boundaries where data enters from external sources.\n *\n * @param value - Unknown value to validate\n * @returns true if value is a valid SemanticSpacing, with type narrowing\n *\n * @example\n * const userInput = 'medium';\n * if (isSemanticSpacing(userInput)) {\n * // TypeScript knows userInput is SemanticSpacing here\n * const classes = resolveSpacing(userInput, 'y');\n * }\n */\nexport function isSemanticSpacing(value: unknown): value is SemanticSpacing {\n return typeof value === 'string' &&\n (SEMANTIC_SPACING_VALUES as readonly string[]).includes(value);\n}\n\n/**\n * Spacing axis determines which sides receive padding.\n * - 'y': Vertical only (py-*) - used for sections\n * - 'all': All sides (p-*) - used for containers/cards\n */\nexport type SpacingAxis = 'y' | 'all';\n\n/**\n * Type-safe mapping from semantic spacing to Tailwind classes for sections (y-axis).\n *\n * Sections use vertical padding only to control spacing between blocks.\n * Horizontal padding (px-6) is handled separately via baseClass.\n *\n * The `satisfies` operator ensures all SemanticSpacing values are present at compile time.\n * TypeScript will error if any spacing value is missing or if extra keys exist.\n */\nexport const SECTION_SPACING_MAP = {\n none: 'py-0',\n compact: 'py-6 sm:py-8',\n cozy: 'py-10 sm:py-14',\n medium: 'py-12 sm:py-16',\n comfortable: 'py-16 sm:py-20',\n spacious: 'py-20 sm:py-28',\n} as const satisfies Record<SemanticSpacing, string>;\n\n/**\n * Type-safe mapping from semantic spacing to Tailwind classes for containers (all sides).\n *\n * Containers use padding on all sides for internal content spacing.\n *\n * The `satisfies` operator ensures all SemanticSpacing values are present at compile time.\n */\nexport const CONTAINER_SPACING_MAP = {\n none: 'p-0',\n compact: 'p-4 sm:p-6',\n cozy: 'p-6 sm:p-8',\n medium: 'p-6 sm:p-8',\n comfortable: 'p-8 sm:p-10',\n spacious: 'p-10 sm:p-14',\n} as const satisfies Record<SemanticSpacing, string>;\n\n/**\n * Resolve semantic spacing to CSS classes based on axis.\n *\n * This function guarantees that valid SemanticSpacing values always return a result.\n * Since spacing is typed, there's no need for fallback logic.\n *\n * @param spacing - Semantic spacing value (validated at compile time)\n * @param axis - Which axis to apply padding ('y' for sections, 'all' for containers)\n * @returns Tailwind CSS class string\n *\n * @example\n * resolveSpacing('medium', 'y') // => 'py-12 sm:py-16'\n * resolveSpacing('medium', 'all') // => 'p-6 sm:p-8'\n * resolveSpacing('compact') // => 'py-6 sm:py-8' (defaults to 'y' axis)\n */\nexport function resolveSpacing(spacing: SemanticSpacing, axis: SpacingAxis = 'y'): string {\n const map = axis === 'y' ? SECTION_SPACING_MAP : CONTAINER_SPACING_MAP;\n return map[spacing];\n}\n\n/**\n * Resolve semantic spacing to section CSS classes (vertical padding only).\n * More explicit alternative to resolveSpacing(spacing, 'y').\n *\n * @param spacing - Semantic spacing value\n * @returns Tailwind CSS class string for vertical padding (py-*)\n *\n * @example\n * resolveSectionSpacing('medium') // => 'py-12 sm:py-16'\n */\nexport function resolveSectionSpacing(spacing: SemanticSpacing): string {\n return SECTION_SPACING_MAP[spacing];\n}\n\n/**\n * Resolve semantic spacing to container CSS classes (all-sides padding).\n * More explicit alternative to resolveSpacing(spacing, 'all').\n *\n * @param spacing - Semantic spacing value\n * @returns Tailwind CSS class string for all-sides padding (p-*)\n *\n * @example\n * resolveContainerSpacing('medium') // => 'p-6 sm:p-8'\n */\nexport function resolveContainerSpacing(spacing: SemanticSpacing): string {\n return CONTAINER_SPACING_MAP[spacing];\n}\n\n/**\n * Default spacing value for sections when not explicitly configured.\n */\nexport const DEFAULT_SECTION_SPACING: SemanticSpacing = 'medium';\n\n/**\n * Default spacing value for containers when not explicitly configured.\n */\nexport const DEFAULT_CONTAINER_SPACING: SemanticSpacing = 'medium';\n","import type { NodeDefinition } from '../schema';\nimport { section } from '../builder';\nimport { backgroundLayer } from './backgroundLayer';\nimport type { SemanticSpacing } from '../../spacing';\nimport { DEFAULT_SECTION_SPACING } from '../../spacing';\n\n/**\n * Configuration for creating a styled section with background support.\n */\nexport type StyledSectionConfig = {\n /**\n * Content nodes to render inside the section.\n * Can be a single node, array of nodes, or empty array.\n */\n children: NodeDefinition | NodeDefinition[];\n\n /**\n * Base horizontal padding class (e.g., 'px-6', 'px-8').\n * This provides consistent horizontal constraints across sections.\n * Removed when fullWidth is enabled in _containerStyles.\n * @default 'px-6'\n */\n baseClass?: string;\n\n /**\n * Semantic vertical spacing value for the section.\n * Uses semantic values (none, compact, cozy, medium, comfortable, spacious)\n * which are transformed to responsive Tailwind classes.\n *\n * @default 'medium' (resolves to 'py-12 sm:py-16')\n */\n spacing?: SemanticSpacing;\n\n /**\n * Theme background token to apply.\n * @default 'background/base'\n */\n background?: string;\n\n /**\n * Path to the section styles data in the content (e.g., '_sectionStyles').\n * This path is used for binding className, allowOverflow, and background layers.\n * @default '_sectionStyles'\n */\n bindFrom?: string;\n\n /**\n * CSS class to apply to background image layer.\n * @default 'absolute -z-10'\n */\n imageClassName?: string;\n};\n\n/**\n * Create a styled section with automatic background layer and spacing bindings.\n *\n * This helper encapsulates the common pattern of:\n * - Creating a section wrapper with background theme\n * - Adding background color/gradient/image layers\n * - Binding className to section styles with transform\n * - Binding allowOverflow for background positioning\n * - Wrapping content children\n *\n * Use this helper to eliminate 25+ lines of boilerplate section setup code.\n *\n * @example\n * // Basic usage with default spacing\n * const layout = styledSection({\n * children: sectionContainer(contentNodes, { gap: 'md' }),\n * });\n *\n * @example\n * // Custom spacing and base padding\n * const compactLayout = styledSection({\n * children: sectionContainer(contentNodes, { gap: 'sm' }),\n * baseClass: 'px-8',\n * spacing: 'py-6 sm:py-8',\n * });\n *\n * @example\n * // Multiple children\n * const layout = styledSection({\n * children: [\n * heading({ text: 'Title' }),\n * sectionContainer(contentNodes, { gap: 'md' }),\n * ],\n * });\n *\n * @example\n * // Custom binding path (for nested sections)\n * const nestedSection = styledSection({\n * children: content,\n * bindFrom: 'container.styles',\n * });\n */\nexport function styledSection(config: StyledSectionConfig): NodeDefinition {\n const {\n children,\n baseClass = 'px-6',\n spacing = DEFAULT_SECTION_SPACING,\n background = 'background/base',\n bindFrom = '_sectionStyles',\n imageClassName = 'absolute -z-10',\n } = config;\n\n // Create background layers (color/gradient + image)\n const backgroundNodes = backgroundLayer(`${bindFrom}.background`, {\n imageClassName,\n });\n\n // Normalize children to array\n const childrenArray = Array.isArray(children) ? children : [children];\n\n // Create section with background, className binding, and allowOverflow binding\n return section(\n {\n background,\n className: {\n $bind: {\n from: bindFrom,\n transforms: [\n {\n id: 'sectionStyles.resolveClassName',\n options: { baseClass, defaultSpacing: spacing },\n },\n ],\n // No fallback needed - transform handles all cases via defaultSpacing\n },\n },\n allowOverflow: {\n $bind: {\n from: `${bindFrom}.background.overflow`,\n fallback: false,\n },\n },\n },\n [\n ...backgroundNodes,\n ...childrenArray,\n ],\n );\n}\n","import { button, media, text, bind, when, repeat } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\n// Single CTA button primitive.\n// - Uses ui.buttonClass transform to resolve classes from `variant`\n// - Accepts optional icons and when-path\n// - Can optionally repeat over a collection when `repeatFrom` is provided\nexport function ctaButton(opts?: {\n basePath?: string\n linkPath?: string\n labelPath?: string\n variantPath?: string\n iconLeftPath?: string\n iconRightPath?: string\n whenPath?: string\n repeatFrom?: { collectionPath: string; itemName?: string }\n className?: string\n}): NodeDefinition {\n const base = opts?.basePath ?? 'cta'\n const linkPath = opts?.linkPath ?? `${base}.link`\n const labelPath = opts?.labelPath ?? `${base}.label`\n const variantPath = opts?.variantPath ?? `${base}.variant`\n const iconLeftPath = opts?.iconLeftPath ?? `${base}.iconLeft`\n const iconRightPath = opts?.iconRightPath ?? `${base}.iconRight`\n const whenPath = opts?.whenPath ?? labelPath\n\n const leftIcon = media({ className: 'mr-2 h-4 w-4 inline-block' }, when(iconLeftPath), bind(iconLeftPath))\n const rightIcon = media({ className: 'ml-2 h-4 w-4 inline-block' }, when(iconRightPath), bind(iconRightPath))\n const label = text({ as: 'span' }, bind(labelPath))\n\n // Build className object with $bind and $prepend, optionally $append\n const classNameObj: any = {\n $bind: {\n from: variantPath,\n fallback: 'primary',\n },\n $prepend: 'button-',\n };\n\n if (opts?.className) {\n classNameObj.$append = ` ${opts.className}`;\n }\n\n const node = button(\n {\n className: classNameObj,\n href: { $bind: { from: linkPath, transforms: [{ id: 'links.resolve' }], fallback: '#' } },\n },\n [leftIcon, label, rightIcon],\n )\n\n // Apply repeat to the node if requested\n if (opts?.repeatFrom) {\n return button(\n node.props ?? {},\n node.children as any,\n repeat(opts.repeatFrom.collectionPath, opts.repeatFrom.itemName ?? base),\n )\n }\n return button(node.props ?? {}, node.children as any, when(whenPath))\n}\n","import { inline, when } from '../builder'\nimport type { NodeDefinition } from '../schema'\nimport { ctaButton } from './ctaButton'\n\n// Renders a single inline container whose children are the repeated CTA buttons.\n// Button styling uses theme-friendly Tailwind utility classes (mapped to CSS vars),\n// selected by a simple transform keyed by `variant`.\nexport function ctaRow(opts?: {\n collectionPath?: string\n itemName?: string\n gap?: 'sm' | 'md' | 'lg'\n justify?: 'start' | 'center' | 'end'\n containerClassName?: string\n}): NodeDefinition {\n const collectionPath = opts?.collectionPath ?? 'content.ctas'\n const item = opts?.itemName ?? 'cta'\n const gap = opts?.gap ?? 'sm'\n const justify = opts?.justify ?? 'center'\n const containerClassName = ['cta-row flex-wrap', opts?.containerClassName].filter(Boolean).join(' ')\n\n return inline(\n { gap, justify, className: containerClassName },\n [\n ctaButton({ basePath: item, repeatFrom: { collectionPath, itemName: item } }),\n ],\n when(collectionPath),\n )\n}\n","import { bind, inline, link, repeat, text, when } from '../builder'\nimport type { NodeDefinition } from '../schema'\n\nexport function navRow(opts?: {\n collectionPath?: string\n itemName?: string\n gap?: 'sm' | 'md' | 'lg'\n align?: 'start' | 'center' | 'end'\n className?: string\n linkClassName?: string | Record<string, unknown>\n}): NodeDefinition {\n const collectionPath = opts?.collectionPath ?? 'menu.items'\n const itemName = opts?.itemName ?? 'navItem'\n const gap = opts?.gap ?? 'md'\n const align = opts?.align ?? 'end'\n const className = ['items-center flex-wrap', opts?.className].filter(Boolean).join(' ').trim()\n\n const linkClassName = opts?.linkClassName ?? 'header-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard'\n\n const links = link(\n {\n className: linkClassName,\n href: { $bind: { from: `${itemName}.link`, transforms: [{ id: 'links.resolve' }], fallback: '#' } },\n target: { $bind: { from: `${itemName}.target` } },\n rel: { $bind: { from: `${itemName}.rel` } },\n 'data-active': { $bind: { from: `${itemName}.active` } },\n },\n [text({ as: 'span' }, bind(`${itemName}.label`))],\n repeat(collectionPath, itemName),\n )\n\n return inline(\n { gap, align, className },\n [links],\n when(collectionPath),\n )\n}\n","import { z } from \"zod\";\n\nimport { fieldSchema, type FieldDefinition } from \"../manifest/schema\";\nimport {\n NodeSchema,\n type NodeDefinition,\n type Binding,\n type RepeatConfig,\n type ConditionConfig,\n type DataScope,\n} from \"../node\";\n\nconst FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;\nconst FIELD_ID_PATTERN = /^[a-z][a-zA-Z0-9_-]*$/;\n\nconst dataLoaderSchema = z.object({\n endpoint: z.string().min(1, \"Fragment data loader requires an endpoint\"),\n params: z.record(z.string(), z.unknown()).default({}),\n mode: z.enum([\"server\", \"client\"]).default(\"server\"),\n});\n\nconst fragmentDataSchema = z.object({\n key: z.string().min(1, \"Fragment data key is required\"),\n loader: dataLoaderSchema.optional(),\n});\n\nexport type FragmentDataConfig = z.output<typeof fragmentDataSchema>;\n\nconst fragmentConfigSchema = z.object({\n id: z\n .string()\n .min(1, \"Fragment id is required\")\n .regex(FRAGMENT_ID_PATTERN, \"Fragment id must be alphanumeric with optional . _ - separators\"),\n title: z.string().optional(),\n description: z.string().optional(),\n category: z.enum([\"content\", \"media\", \"interactive\", \"layout\"]).optional(),\n icon: z.string().optional(),\n fields: fieldSchema.array().default([]),\n layout: z\n .union([NodeSchema, NodeSchema.array()])\n .transform((value): NodeDefinition[] => (Array.isArray(value) ? value : [value])),\n data: fragmentDataSchema.optional(),\n}) as any;\n\nexport type FragmentConfig = z.input<typeof fragmentConfigSchema>;\nexport type FragmentDefinition = z.output<typeof fragmentConfigSchema>;\n\nexport class FragmentConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FragmentConfigError\";\n }\n}\n\nexport function defineFragment(config: FragmentConfig): FragmentDefinition {\n const parsed = fragmentConfigSchema.parse(config);\n\n validateFieldDefinitions(parsed.fields as FieldDefinition[], parsed.id);\n\n return {\n ...parsed,\n fields: (parsed.fields as FieldDefinition[]).map(cloneFieldDefinition as (field: any) => FieldDefinition),\n layout: parsed.layout.map((node: any) => ({ ...node })),\n };\n}\n\nexport function scopeFragmentFields(fragment: FragmentDefinition, scope: string): FieldDefinition[] {\n const normalizedScope = scope.trim();\n if (!normalizedScope) {\n return fragment.fields.map(cloneFieldDefinition as (field: any) => FieldDefinition);\n }\n return fragment.fields.map((field: any) => prefixFieldId(field, normalizedScope));\n}\n\nexport function scopeFragmentLayout(fragment: FragmentDefinition, scope: string): NodeDefinition[] {\n const normalizedScope = scope.trim();\n return fragment.layout.map((node: any) => cloneAndScopeNode(node, normalizedScope));\n}\n\nfunction validateFieldDefinitions(fields: FieldDefinition[], fragmentId: string): void {\n const seen = new Set<string>();\n\n for (const field of fields) {\n if (field.id.includes(\".\")) {\n throw new FragmentConfigError(\n `Field \"${field.id}\" in fragment \"${fragmentId}\" should not include dot notation; the builder scopes fields automatically.`,\n );\n }\n if (!FIELD_ID_PATTERN.test(field.id)) {\n throw new FragmentConfigError(\n `Field \"${field.id}\" in fragment \"${fragmentId}\" must start with a letter and contain only alphanumeric, \"_\", or \"-\".`,\n );\n }\n if (seen.has(field.id)) {\n throw new FragmentConfigError(\n `Duplicate field id \"${field.id}\" found in fragment \"${fragmentId}\". Field ids must be unique per fragment.`,\n );\n }\n seen.add(field.id);\n }\n}\n\nfunction prefixFieldId(field: FieldDefinition, scope: string): FieldDefinition {\n const cloned = cloneFieldDefinition(field);\n cloned.id = `${scope}.${field.id}`;\n\n cloned.defaultValue = cloneUnknown(cloned.defaultValue);\n cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : undefined;\n cloned.ui = cloneUnknown(cloned.ui);\n\n return cloned;\n}\n\nfunction cloneFieldDefinition(field: FieldDefinition): FieldDefinition {\n switch (field.type) {\n case \"repeater\":\n if (field.polymorphic && field.itemTypes) {\n // Polymorphic repeater: clone itemTypes\n return {\n ...field,\n polymorphic: true as const,\n itemTypes: Object.fromEntries(\n Object.entries(field.itemTypes).map(([key, itemType]) => [\n key,\n {\n ...itemType,\n fields: itemType.fields.map(cloneFieldDefinition),\n },\n ])\n ),\n } as FieldDefinition;\n } else if (field.schema) {\n // Monomorphic repeater: clone schema\n return {\n ...field,\n schema: {\n fields: field.schema.fields.map(cloneFieldDefinition),\n },\n } as FieldDefinition;\n }\n // Fallback (shouldn't happen due to XOR validation)\n return { ...field } as FieldDefinition;\n case \"group\":\n return {\n ...field,\n schema: {\n fields: field.schema.fields.map(cloneFieldDefinition),\n },\n };\n default:\n return { ...field };\n }\n}\n\nfunction cloneUnknown<T>(value: T): T {\n if (value == null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((entry: unknown) => cloneUnknown(entry)) as T;\n }\n return { ...(value as Record<string, unknown>) } as T;\n}\n\nfunction cloneAndScopeNode(node: NodeDefinition, scope: string): NodeDefinition {\n const cloned: NodeDefinition = {\n ...node,\n };\n\n if (node.children) {\n cloned.children = node.children.map((child: NodeDefinition) => cloneAndScopeNode(child, scope));\n }\n\n if (node.props) {\n cloned.props = scopePropBindings(node.props, scope);\n }\n\n if (node.$bind) {\n cloned.$bind = scopeBinding(node.$bind, scope);\n }\n\n if (node.$repeat) {\n cloned.$repeat = scopeRepeat(node.$repeat, scope);\n }\n\n if (node.$when) {\n cloned.$when = scopeCondition(node.$when, scope);\n }\n\n if (node.$scopes) {\n cloned.$scopes = node.$scopes.map((entry: DataScope) => ({\n name: entry.name,\n from: scopeBinding(entry.from, scope),\n }));\n }\n\n return cloned;\n}\n\nfunction scopeBinding(binding: Binding, scope: string): Binding {\n const cloned: Binding = {\n ...binding,\n transforms: binding.transforms?.map(\n (step: { id: string; options?: Record<string, unknown> }) => ({ ...step }),\n ) ?? [],\n };\n\n cloned.from = scopeContentPath(binding.from, scope);\n\n return cloned;\n}\n\nfunction scopeRepeat(repeat: RepeatConfig, scope: string): RepeatConfig {\n const cloned: RepeatConfig = {\n ...repeat,\n collection: scopeBinding(repeat.collection, scope),\n };\n\n if (repeat.sortBy) {\n cloned.sortBy = {\n ...repeat.sortBy,\n path: scopeContentPath(repeat.sortBy.path, scope),\n };\n }\n\n return cloned;\n}\n\nfunction scopeCondition(condition: ConditionConfig, scope: string): ConditionConfig {\n return {\n ...condition,\n when: scopeBinding(condition.when, scope),\n };\n}\n\nfunction scopePropBindings(input: Record<string, unknown>, scope: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = scopePropValue(value, scope);\n }\n return result;\n}\n\nfunction scopePropValue(value: unknown, scope: string): unknown {\n if (Array.isArray(value)) {\n return value.map((entry: unknown) => scopePropValue(entry, scope));\n }\n if (value && typeof value === \"object\") {\n if (\"$bind\" in (value as Record<string, unknown>)) {\n const bindingConfig = (value as { $bind: Binding }).$bind;\n return {\n $bind: scopeBinding(bindingConfig, scope),\n };\n }\n const result: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n result[key] = scopePropValue(entry, scope);\n }\n return result;\n }\n return value;\n}\n\nfunction scopeContentPath(path: string, scope: string): string {\n if (!scope || scope.length === 0) {\n return path;\n }\n if (path === \"content\") {\n return `content.${scope}`;\n }\n if (path.startsWith(\"content.\")) {\n const remainder = path.slice(\"content.\".length);\n return remainder.length > 0 ? `content.${scope}.${remainder}` : `content.${scope}`;\n }\n if (path.startsWith(\"content[\")) {\n return path.replace(/^content/, `content.${scope}`);\n }\n // Handle $root paths - don't scope them\n if (path.startsWith(\"$root.\")) {\n return path;\n }\n // Handle scope-qualified paths like \"item.label\" - don't rescope them\n // These are paths that reference other scopes (item, index, etc.)\n // We detect them by checking if they contain a dot (indicating scope.field pattern)\n // but don't start with content/$ root (which we handle above)\n if (path.includes('.')) {\n return path;\n }\n // Handle simple relative paths (field names without dots) - add content.scope prefix\n // e.g., \"media\" with scope \"background\" becomes \"content.background.media\"\n return `content.${scope}.${path}`;\n}\n","import type { BlockManifest } from \"../manifest\";\nimport type { FieldDefinition } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport {\n type FragmentDefinition,\n type FragmentDataConfig,\n scopeFragmentFields,\n scopeFragmentLayout,\n} from \"./types\";\n\ntype FragmentInstanceConfig = {\n fragment: FragmentDefinition;\n scope?: string;\n dataKey?: string;\n fieldPriority?: number;\n};\n\nexport type MaterializedFragment = {\n fragment: FragmentDefinition;\n scope: string;\n fields: FieldDefinition[];\n layout: NodeDefinition[];\n data?: FragmentDataConfig;\n fieldPriority: number;\n};\n\nexport type FragmentComposition = {\n fields: FieldDefinition[];\n layout: NodeDefinition[];\n data: MaterializedFragment[\"data\"][];\n scopes: string[];\n};\n\nexport type FragmentDataLoaders = Record<\n string,\n {\n endpoint: string;\n params: Record<string, unknown>;\n mode: \"server\" | \"client\";\n }\n>;\n\nexport class FragmentCompositionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FragmentCompositionError\";\n }\n}\n\nconst DOT_SCOPE_REGEX = /^[A-Za-z0-9_.-]*$/;\n\nexport function materializeFragment(config: FragmentInstanceConfig): MaterializedFragment {\n const scope = normalizeScope(config.scope);\n const fields = scopeFragmentFields(config.fragment, scope);\n const layout = scopeFragmentLayout(config.fragment, scope);\n const fieldPriority = config.fieldPriority ?? 0;\n\n let data: FragmentDataConfig | undefined;\n if (config.fragment.data) {\n const key = config.dataKey ?? config.fragment.data.key;\n if (!key || typeof key !== \"string\") {\n throw new FragmentCompositionError(\n `Fragment \"${config.fragment.id}\" requires a data key to compose.`,\n );\n }\n data = {\n key,\n loader: config.fragment.data.loader ? { ...config.fragment.data.loader } : undefined,\n };\n }\n\n return {\n fragment: config.fragment,\n scope,\n fields,\n layout,\n data,\n fieldPriority,\n };\n}\n\nexport function composeFragments(instances: FragmentInstanceConfig[]): FragmentComposition {\n type FieldEntry = {\n id: string;\n field: FieldDefinition;\n priority: number;\n order: number;\n };\n\n const fieldEntries: FieldEntry[] = [];\n const layouts: NodeDefinition[] = [];\n const dataEntries: FragmentDataConfig[] = [];\n const scopes: string[] = [];\n const seenFieldIds = new Set<string>();\n let fieldOrder = 0;\n\n for (const instance of instances) {\n const materialized = materializeFragment(instance);\n\n for (const field of materialized.fields) {\n if (seenFieldIds.has(field.id)) {\n throw new FragmentCompositionError(\n `Duplicate field id \"${field.id}\" when composing fragments.`,\n );\n }\n seenFieldIds.add(field.id);\n fieldEntries.push({\n id: field.id,\n field,\n priority: materialized.fieldPriority,\n order: fieldOrder++,\n });\n }\n\n scopes.push(materialized.scope);\n layouts.push(...materialized.layout);\n\n if (materialized.data) {\n if (dataEntries.find((entry) => entry.key === materialized.data?.key)) {\n throw new FragmentCompositionError(\n `Duplicate fragment data key \"${materialized.data.key}\" detected.`,\n );\n }\n dataEntries.push(materialized.data);\n }\n }\n\n return {\n fields: fieldEntries\n .sort((a, b) => {\n if (a.priority !== b.priority) {\n return a.priority - b.priority;\n }\n return a.order - b.order;\n })\n .map((entry) => entry.field),\n layout: layouts,\n data: dataEntries,\n scopes,\n };\n}\n\nexport function applyFragmentsToManifest(\n manifest: BlockManifest,\n composition: FragmentComposition,\n): BlockManifest {\n return {\n ...manifest,\n fields: [...composition.fields, ...(manifest.fields ?? [])],\n layout: manifest.layout ?? normalizeLayout(composition.layout),\n };\n}\n\nfunction normalizeScope(scope?: string): string {\n if (!scope) return \"\";\n const trimmed = scope.trim();\n if (!DOT_SCOPE_REGEX.test(trimmed)) {\n throw new FragmentCompositionError(\n `Fragment scope \"${scope}\" contains invalid characters. Use alphanumeric, \".\", \"-\", or \"_\".`,\n );\n }\n return trimmed;\n}\n\nfunction normalizeLayout(layout: NodeDefinition[]): NodeDefinition | NodeDefinition[] {\n if (layout.length === 0) {\n return [];\n }\n if (layout.length === 1) {\n return layout[0] as NodeDefinition;\n }\n return layout;\n}\n\nexport function buildFragmentDataLoaders(\n composition: FragmentComposition,\n): FragmentDataLoaders {\n const loaders: FragmentDataLoaders = {};\n for (const entry of composition.data) {\n if (!entry?.loader) continue;\n loaders[entry.key] = {\n endpoint: entry.loader.endpoint,\n params: { ...(entry.loader.params ?? {}) },\n mode: entry.loader.mode ?? \"server\",\n };\n }\n return loaders;\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const bodyCopyFragment: FragmentDefinition = defineFragment({\n id: \"bodyCopy\",\n title: \"Body Copy\",\n description: \"Heading, rich text body, and alignment controls.\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional heading displayed above the body copy.\",\n },\n {\n id: \"body\",\n type: \"richText\",\n label: \"Body\",\n required: true,\n },\n {\n id: \"alignment\",\n type: \"select\",\n label: \"Text alignment\",\n required: false,\n defaultValue: \"left\",\n options: [\n { value: \"left\", label: \"Left\" },\n { value: \"center\", label: \"Center\" },\n ],\n },\n ],\n layout: stack(\n {\n gap: \"md\",\n className: \"mx-auto max-w-3xl\",\n align: {\n $bind: {\n from: \"content.alignment\",\n transforms: [{ id: \"ui.stackAlignFromAlignment\" }],\n fallback: \"start\",\n },\n },\n },\n [\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n // Only dynamic class here is for text alignment\n className: {\n $bind: {\n from: \"content.alignment\",\n transforms: [\n {\n id: \"ui.headingClassFromAlignment\",\n options: {\n base: \"\",\n },\n },\n ],\n fallback: \"\",\n },\n },\n style: textColorStyle('neutral-900'),\n },\n when(\"content.heading\"),\n bind(\"content.heading\"),\n ),\n richText(\n {\n className: {\n $bind: {\n from: \"content.alignment\",\n transforms: [\n {\n id: \"ui.bodyClassFromAlignment\",\n options: {\n base: \"prose prose-lg max-w-none sm:prose-xl\",\n },\n },\n ],\n fallback:\n \"prose prose-lg max-w-none sm:prose-xl\",\n },\n style: textColorStyle('neutral-600'),\n },\n },\n bind(\"content.body\"),\n ),\n ],\n ),\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { text, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const heroCopyFragment: FragmentDefinition = defineFragment({\n id: \"heroCopy\",\n title: \"Hero Copy\",\n description: \"Eyebrow, headline, and subheadline copy for hero layouts.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Optional short line above the headline\",\n visibleRoles: [\"designer\", \"admin\"],\n },\n {\n id: \"headline\",\n type: \"text\",\n label: \"Headline\",\n required: true,\n maxLength: 120,\n },\n {\n id: \"subheadline\",\n type: \"text\",\n label: \"Subheadline\",\n multiline: true,\n maxLength: 280,\n },\n ],\n layout: [\n text(\n {\n as: \"p\",\n className: \"hero-eyebrow text-sm font-semibold tracking-wide\",\n style: textColorStyle('neutral-500'),\n },\n when(\"content.eyebrow\"),\n bind(\"content.eyebrow\"),\n ),\n text(\n {\n as: \"h1\",\n // heading-display: uses fluid typography from theme (--fs-h1-display-fluid)\n // Removes hardcoded text-4xl/5xl/6xl - size now controlled by theme\n className: \"hero-headline heading-display\",\n style: textColorStyle('neutral-900'),\n },\n bind(\"content.headline\"),\n ),\n text(\n {\n as: \"p\",\n className: \"hero-subheadline text-lg sm:text-xl\",\n style: textColorStyle('neutral-600'),\n },\n when(\"content.subheadline\"),\n bind(\"content.subheadline\"),\n ),\n ],\n});\n","import type { FieldDefinition } from '../manifest/schema'\n\ntype ButtonOptions = {\n variants?: { value: string; label: string }[]\n showGroupLabel?: boolean\n groupId?: string\n groupLabel?: string\n flattenInRepeater?: boolean\n}\n\nexport function createButtonGroup(options: ButtonOptions = {}): FieldDefinition {\n const {\n variants = [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n ],\n showGroupLabel = false,\n groupId = 'button',\n groupLabel = 'Button',\n flattenInRepeater = true,\n } = options\n\n // Main button fields: label, variant, link\n const mainFields: FieldDefinition[] = [\n {\n id: 'label',\n type: 'text',\n label: 'Label',\n required: true,\n multiline: false,\n maxLength: 40,\n ui: { row: 'primary' },\n },\n {\n id: 'variant',\n type: 'select',\n label: 'Style',\n options: variants,\n required: false,\n multiple: false,\n ui: { row: 'primary' },\n },\n {\n id: 'link',\n type: 'link',\n label: 'Link',\n required: true,\n ui: { colSpan: 2 },\n },\n ]\n\n // Icons in collapsible disclosure section\n const iconsGroup: FieldDefinition = {\n id: 'icons',\n type: 'group',\n label: 'Icons',\n required: false,\n ui: { preset: 'disclosure', colSpan: 2 },\n schema: {\n fields: [\n { id: 'iconLeft', type: 'media', label: 'Left icon', required: false, mediaKinds: ['image'] },\n { id: 'iconRight', type: 'media', label: 'Right icon', required: false, mediaKinds: ['image'] },\n ],\n },\n } as FieldDefinition\n\n return {\n id: groupId,\n type: 'group',\n label: groupLabel,\n ui: { layout: 'grid', columns: 2, flattenInRepeater, hideLabel: !showGroupLabel },\n schema: { fields: [...mainFields, iconsGroup] },\n required: false,\n } as FieldDefinition\n}\n","import type { FieldDefinition } from '../manifest/schema'\nimport { createButtonGroup } from './button'\n\ntype CtasOptions = {\n id?: string\n label?: string\n itemLabel?: string\n minItems?: number\n maxItems?: number\n}\n\nexport function createCtasRepeater(options: CtasOptions = {}): FieldDefinition {\n const {\n id = 'ctas',\n label = 'Calls to action',\n itemLabel = 'CTA',\n minItems = 0,\n maxItems,\n } = options\n\n return {\n id,\n type: 'repeater',\n label,\n itemLabel,\n itemLabelSource: 'label',\n minItems,\n maxItems,\n schema: {\n fields: [createButtonGroup({ showGroupLabel: false, flattenInRepeater: true })],\n },\n } as FieldDefinition\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { ctaRow } from \"../../node/fragments\";\nimport { createCtasRepeater } from \"../../fields/ctas\";\n\nexport const ctaRowFragment: FragmentDefinition = defineFragment({\n id: \"ctaRow\",\n title: \"CTA Row\",\n description: \"Repeatable calls to action rendered inline.\",\n fields: [createCtasRepeater({ label: \"Calls to action\", itemLabel: \"CTA\", maxItems: 3 })],\n layout: [\n ctaRow({ collectionPath: \"content.ctas\", itemName: \"cta\", justify: \"center\" }),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { headingGroup } from \"../../node/fragments\";\nimport { richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const ctaCopyFragment: FragmentDefinition = defineFragment({\n id: \"ctaCopy\",\n title: \"CTA Copy\",\n description: \"Eyebrow, title, and supporting rich text for CTA layouts.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Optional short line above the title\",\n visibleRoles: [\"designer\", \"admin\"],\n },\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: true,\n maxLength: 120,\n },\n {\n id: \"content\",\n type: \"richText\",\n label: \"Copy\",\n description: \"Short paragraph of supporting copy.\",\n },\n ],\n layout: [\n headingGroup({ eyebrowPath: \"content.eyebrow\", titlePath: \"content.title\", className: \"cta-heading\" }),\n richText(\n {\n className: \"cta-content prose prose-lg mx-auto max-w-none sm:prose-xl\",\n style: textColorStyle('neutral-700'),\n },\n when(\"content.content\"),\n bind(\"content.content\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const testimonialsHeadingFragment: FragmentDefinition = defineFragment({\n id: \"testimonialsHeading\",\n title: \"Testimonials Heading\",\n description: \"Heading and subheading copy for testimonials section.\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional block heading displayed above the testimonials.\",\n },\n {\n id: \"subheading\",\n type: \"text\",\n label: \"Description\",\n multiline: true,\n description: \"Optional supporting copy shown below the heading.\",\n },\n ],\n layout: [\n stack(\n { gap: \"md\", className: \"mx-auto max-w-2xl text-center\" },\n [\n text(\n // h2 now gets size/weight from theme typography CSS\n { as: \"h2\", style: textColorStyle('neutral-900') },\n when(\"content.heading\"),\n bind(\"content.heading\"),\n ),\n text(\n { as: \"p\", className: \"text-lg sm:text-xl\", style: textColorStyle('neutral-600') },\n when(\"content.subheading\"),\n bind(\"content.subheading\"),\n ),\n ],\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { carousel, stack, richText, bind, when, inline, media, repeat, text } from \"../../node/builder\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\nexport const testimonialsCarouselFragment: FragmentDefinition = defineFragment({\n id: \"testimonialsCarousel\",\n title: \"Testimonials Carousel\",\n description: \"Carousel layout for testimonial cards with data loader configuration.\",\n fields: [\n {\n id: \"slidesToShow\",\n type: \"select\",\n label: \"Testimonials per view\",\n defaultValue: \"1\",\n options: [\n { value: \"1\", label: \"One at a time\" },\n { value: \"2\", label: \"Two at a time\" },\n { value: \"3\", label: \"Three at a time\" },\n ],\n },\n {\n id: \"transition\",\n type: \"select\",\n label: \"Transition\",\n defaultValue: \"slide\",\n options: [\n { value: \"slide\", label: \"Slide\" },\n { value: \"fade\", label: \"Fade\" },\n ],\n },\n {\n id: \"maxEntries\",\n type: \"select\",\n label: \"Testimonials to load\",\n defaultValue: \"6\",\n options: [\n { value: \"3\", label: \"3 testimonials\" },\n { value: \"6\", label: \"6 testimonials\" },\n { value: \"9\", label: \"9 testimonials\" },\n ],\n },\n ],\n layout: [\n carousel(\n {\n className: \"mt-12\",\n slidesToShow: { $bind: { from: \"slidesToShow\", fallback: 1 } },\n transition: { $bind: { from: \"transition\", fallback: \"slide\" } },\n showControls: true,\n },\n [\n stack(\n {\n gap: \"lg\",\n className:\n \"h-full justify-between rounded-2xl border p-8 shadow-sm\",\n style: mergeStyles(\n borderColorStyle('neutral-200'),\n backgroundColorStyle('surface'),\n ),\n },\n [\n richText(\n {\n className:\n \"prose prose-lg max-w-none sm:prose-xl\",\n style: textColorStyle('neutral-700'),\n },\n bind(\"testimonial.content.body\"),\n when(\"testimonial.content.body\"),\n ),\n inline(\n { gap: \"md\", className: \"mt-6 items-center\" },\n [\n media(\n { className: \"h-12 w-12 shrink-0 rounded-full object-cover\" },\n bind(\"testimonial.content.headshot\", { transforms: [{ id: \"media.fromUrl\" }] }),\n when(\"testimonial.content.headshot\"),\n ),\n stack(\n { gap: \"xs\" },\n [\n text(\n { as: \"p\", className: \"font-semibold\", style: textColorStyle('neutral-900') },\n bind(\"testimonial.content.name\", { fallback: \"Anonymous\" }),\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle('neutral-500') },\n when(\"testimonial.content.jobTitle\"),\n bind(\"testimonial.content.jobTitle\"),\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle('neutral-500') },\n when(\"testimonial.content.company\"),\n bind(\"testimonial.content.company\"),\n ),\n ],\n ),\n ],\n ),\n ],\n repeat(\"data.entries\", \"testimonial\"),\n ),\n ],\n ),\n ],\n data: {\n key: \"entries\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"testimonial\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"maxEntries\", fallback: \"6\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const formCopyFragment: FragmentDefinition = defineFragment({\n id: \"formCopy\",\n title: \"Form Copy\",\n description: \"Optional title and introduction content for form blocks.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n },\n {\n id: \"intro\",\n type: \"richText\",\n label: \"Intro\",\n description: \"Optional introduction above the form.\",\n },\n ],\n layout: [\n text(\n {\n as: \"h2\",\n className: \"text-2xl font-semibold\",\n style: textColorStyle('text'),\n },\n when(\"content.title\"),\n bind(\"content.title\"),\n ),\n richText(\n {\n className: \"text-base\",\n style: textColorStyle('text'),\n },\n when(\"content.intro\"),\n bind(\"content.intro\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { form, bind } from \"../../node/builder\";\n\nexport const formEmbedFragment: FragmentDefinition = defineFragment({\n id: \"formEmbed\",\n title: \"Form Embed\",\n description: \"Embeds a saved form with configurable submit button copy.\",\n fields: [\n {\n id: \"formId\",\n type: \"reference\",\n label: \"Form\",\n description: \"Pick a saved form to render.\",\n required: true,\n referenceKind: \"form\",\n allowManualEntry: false,\n },\n {\n id: \"submitLabel\",\n type: \"text\",\n label: \"Submit button label\",\n defaultValue: \"Submit\",\n },\n {\n id: \"successMessage\",\n type: \"text\",\n label: \"Success message\",\n description: \"Shown after successful submit (handled by page or block).\",\n },\n ],\n layout: [\n form(\n {\n submitLabel: { $bind: { from: \"submitLabel\" } },\n successMessage: { $bind: { from: \"successMessage\" } },\n },\n [],\n bind(\"data.form\"),\n ),\n ],\n data: {\n key: \"form\",\n loader: {\n endpoint: \"getPublicFormById\",\n params: {\n formId: { $bind: { from: \"formId\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const footerBottomTextFragment: FragmentDefinition = defineFragment({\n id: \"footerBottomText\",\n title: \"Footer Bottom Text\",\n description: \"Rich text content displayed at the bottom of the footer.\",\n fields: [\n {\n id: \"bottomText\",\n type: \"richText\",\n label: \"Bottom text\",\n description: \"Appears at the very bottom of the footer.\",\n ui: { variant: \"limited\" },\n },\n ],\n layout: [\n richText(\n {\n className: \"prose prose-sm mx-auto max-w-3xl text-center\",\n style: textColorStyle('text/80'),\n },\n when(\"bottomText\"),\n bind(\"bottomText\"),\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, link, repeat, when, bind } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const footerLinkGroupsFragment: FragmentDefinition = defineFragment({\n id: \"footerLinkGroups\",\n title: \"Footer Link Groups\",\n description: \"Repeating columns of grouped footer links.\",\n fields: [\n {\n id: \"linkGroups\",\n type: \"repeater\",\n label: \"Link groups\",\n description: \"Organize footer links into columns.\",\n schema: {\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Group title\",\n },\n {\n id: \"links\",\n type: \"repeater\",\n label: \"Links\",\n schema: {\n fields: [\n {\n id: \"label\",\n type: \"text\",\n label: \"Label\",\n required: true,\n },\n {\n id: \"link\",\n type: \"link\",\n label: \"Link\",\n required: true,\n },\n ],\n },\n },\n ],\n },\n },\n ],\n layout: [\n stack(\n {\n gap: \"lg\",\n align: \"start\",\n className: \"grid gap-8 md:grid-cols-3\",\n },\n [\n stack(\n { gap: \"md\", align: \"start\", className: \"text-left\" },\n [\n text(\n {\n as: \"h3\",\n className: \"text-xs font-semibold uppercase tracking-wide\",\n style: textColorStyle('text/70'),\n },\n when(\"group.title\"),\n bind(\"group.title\"),\n ),\n stack(\n { gap: \"sm\", align: \"start\", className: \"space-y-2\" },\n [\n link(\n {\n className: \"block text-sm transition-theme hover:opacity-80\",\n style: textColorStyle('text'),\n href: {\n $bind: {\n from: \"entry.link\",\n transforms: [{ id: \"links.resolve\" }],\n fallback: \"#\",\n },\n },\n target: { $bind: { from: \"entry.target\" } },\n rel: { $bind: { from: \"entry.rel\" } },\n },\n [text({ as: \"span\" }, bind(\"entry.label\"))],\n repeat(\"group.links\", \"entry\"),\n ),\n ],\n ),\n ],\n repeat(\"linkGroups\", \"group\"), // Relative path\n ),\n ],\n when(\"linkGroups\"), // Relative path\n ),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport { stack, text, link, media, when, bind, props as withProps } from \"../../node/builder\";\nimport {\n borderColorStyle,\n backgroundColorStyle,\n textColorStyle,\n mergeStyles,\n} from \"../../../theme/utils/colorStyles\";\n\nexport const blogFeaturedPostFragment: FragmentDefinition = defineFragment({\n id: \"blogFeaturedPost\",\n title: \"Featured Blog Post\",\n description: \"Featured blog post card with title and preview content.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Block title\",\n description: \"Displayed above the featured blog post.\",\n defaultValue: \"Latest post\",\n maxLength: 120,\n },\n {\n id: \"postSlug\",\n type: \"reference\",\n label: \"Blog post\",\n description: \"Pick the blog post to feature in this block.\",\n required: true,\n referenceKind: \"post\",\n allowManualEntry: false,\n },\n ],\n layout: [\n sectionContainer(\n [\n stack({ gap: \"sm\", className: \"md:w-1/3\" }, [\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"title\", { fallback: \"Latest post\" }), // Relative path\n ),\n ]),\n stack({ gap: \"md\", className: \"flex-1\" }, [\n stack({\n gap: \"md\",\n className: \"rounded-2xl border bg-white p-6 shadow-sm\",\n style: borderColorStyle(\"neutral-200\"),\n }, [\n link(\n {\n className: \"block overflow-hidden rounded-xl border\",\n style: borderColorStyle(\"neutral-100\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [\n media(\n { className: \"h-56 w-full object-cover\" },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n ),\n stack({ gap: \"sm\" }, [\n link(\n {\n className: \"block text-2xl font-semibold hover:opacity-80\",\n style: textColorStyle(\"neutral-900\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [text({ as: \"span\" }, bind(\"post.title\"))],\n ),\n text(\n { as: \"p\", className: \"text-sm\", style: textColorStyle(\"neutral-500\") },\n when(\"post.publishedAt\"),\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n ),\n text(\n { as: \"p\", className: \"text-base\", style: textColorStyle(\"neutral-600\") },\n bind(\"post.excerpt\", { fallback: \"Select a blog post to display its preview.\" }),\n ),\n link(\n {\n className: \"inline-flex items-center text-sm font-semibold hover:opacity-80\",\n style: textColorStyle(\"primary\"),\n href: { $bind: { from: \"post.path\" } },\n },\n [text({ as: \"span\" }, withProps({ value: \"Read more →\" }))],\n ),\n ]),\n ], when(\"post\")),\n stack(\n {\n gap: \"sm\",\n className: \"rounded-xl border border-dashed p-6 text-sm\",\n style: mergeStyles(\n borderColorStyle(\"neutral-300\"),\n backgroundColorStyle(\"neutral-50\"),\n textColorStyle(\"neutral-500\"),\n ),\n },\n [text({ as: \"p\" }, withProps({ value: \"Select a blog post to display its preview.\" }))],\n when(\"post\", { not: true }),\n ),\n ]),\n ],\n { gap: \"lg\", className: \"w-full md:flex-row md:items-start md:gap-10\" },\n ),\n ],\n data: {\n key: \"post\",\n loader: {\n endpoint: \"getPublishedEntryPreview\",\n params: {\n type: \"post\",\n slug: { $bind: { from: \"postSlug\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, link, media, when, bind, el, repeat, button, type NodeModifier } from \"../../node/builder\";\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from \"../../../theme/utils/colorStyles\";\n\n// Grid primitive helper\nconst grid = (\n props?: Record<string, unknown> | null,\n children?: Array<import(\"../../node\").NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el(\"grid\", props ?? undefined, children ?? undefined, ...mods);\n\nexport const blogListGridFragment: FragmentDefinition = defineFragment({\n id: \"blogListGrid\",\n title: \"Blog List Grid\",\n description: \"Grid layout for displaying blog posts as cards with images.\",\n fields: [\n {\n id: \"columns\",\n type: \"select\",\n label: \"Grid columns\",\n description: \"Number of columns in the grid layout.\",\n defaultValue: \"3\",\n options: [\n { value: \"2\", label: \"2 columns\" },\n { value: \"3\", label: \"3 columns\" },\n { value: \"4\", label: \"4 columns\" },\n ],\n },\n {\n id: \"showImages\",\n type: \"boolean\",\n label: \"Show images\",\n description: \"Display featured images for each post.\",\n defaultValue: true,\n },\n {\n id: \"showExcerpts\",\n type: \"boolean\",\n label: \"Show excerpts\",\n description: \"Display post preview text.\",\n defaultValue: true,\n },\n {\n id: \"showDates\",\n type: \"boolean\",\n label: \"Show dates\",\n description: \"Display publish dates.\",\n defaultValue: true,\n },\n ],\n layout: [\n // Grid container\n grid(\n {\n className: \"grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3\",\n },\n [\n // Individual post card\n stack(\n {\n gap: \"md\",\n className: \"flex flex-col overflow-hidden rounded-xl border shadow-sm transition-shadow hover:shadow-md\",\n style: mergeStyles(\n borderColorStyle('neutral-200'),\n backgroundColorStyle('surface'),\n ),\n },\n [\n // Featured image\n link(\n {\n className: \"block overflow-hidden\",\n href: { $bind: { from: \"post.path\" } },\n },\n [\n media(\n {\n className: \"h-56 w-full object-cover transition-transform hover:scale-105\",\n },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n when(\"showImages\"),\n ),\n\n // Post content\n stack({ gap: \"sm\", className: \"flex-1 p-6\" }, [\n // Title\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"block text-xl font-semibold transition-colors hover:opacity-80\",\n style: textColorStyle('neutral-900'),\n },\n [text({ as: \"h3\" }, bind(\"post.title\"))],\n ),\n\n // Date\n text(\n {\n as: \"time\",\n className: \"text-sm\",\n style: textColorStyle('neutral-500'),\n },\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n when(\"post.publishedAt\"),\n when(\"showDates\"),\n ),\n\n // Excerpt\n text(\n {\n as: \"p\",\n className: \"mt-2 text-base line-clamp-3\",\n style: textColorStyle('neutral-600'),\n },\n bind(\"post.excerpt\"),\n when(\"post.excerpt\"),\n when(\"showExcerpts\"),\n ),\n\n // Read more button\n button(\n {\n href: { $bind: { from: \"post.path\" } },\n className: {\n $bind: { from: \"readMoreVariant\", fallback: \"primary\" },\n $prepend: \"button-\",\n },\n },\n [text({ as: \"span\" }, bind(\"readMoreText\", { fallback: \"Read more →\" }))],\n ),\n ]),\n ],\n repeat(\"data.posts\", \"post\"),\n ),\n ],\n ),\n ],\n data: {\n key: \"posts\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"post\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"postsPerPage\", fallback: \"12\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { bind, inline, link, media, repeat, stack, text, when, button } from \"../../node/builder\";\nimport { defineFragment, type FragmentDefinition } from \"../types\";\nimport { borderColorStyle, textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const blogListStackFragment: FragmentDefinition = defineFragment({\n id: \"blogListStack\",\n title: \"Blog List Stack\",\n description: \"Vertical list layout for displaying blog posts with optional thumbnails.\",\n fields: [\n {\n id: \"showImages\",\n type: \"boolean\",\n label: \"Show images\",\n description: \"Display thumbnail images for each post.\",\n defaultValue: true,\n },\n {\n id: \"showExcerpts\",\n type: \"boolean\",\n label: \"Show excerpts\",\n description: \"Display post preview text.\",\n defaultValue: true,\n },\n {\n id: \"showDates\",\n type: \"boolean\",\n label: \"Show dates\",\n description: \"Display publish dates.\",\n defaultValue: true,\n },\n ],\n layout: [\n // Vertical stack container\n stack({ gap: \"lg\", className: \"mx-auto max-w-3xl\" }, [\n // Individual post row\n inline(\n {\n gap: \"md\",\n className: \"items-start border-b pb-6 last:border-b-0\",\n style: borderColorStyle('neutral-200'),\n },\n [\n // Optional thumbnail (left-aligned)\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"flex-shrink-0\",\n },\n [\n media(\n {\n className: \"h-24 w-24 rounded-lg object-cover transition-transform hover:scale-105\",\n },\n bind(\"post.image\", { transforms: [{ id: \"media.fromUrl\" }] }),\n ),\n ],\n when(\"post.image\"),\n when(\"showImages\"),\n ),\n\n // Post content (grows to fill space)\n stack({ gap: \"sm\", className: \"flex-1 min-w-0\" }, [\n // Title\n link(\n {\n href: { $bind: { from: \"post.path\" } },\n className: \"block text-xl font-semibold transition-colors hover:opacity-80\",\n style: textColorStyle('neutral-900'),\n },\n [text({ as: \"h3\" }, bind(\"post.title\"))],\n ),\n\n // Date\n text(\n {\n as: \"time\",\n className: \"text-sm\",\n style: textColorStyle('neutral-500'),\n },\n bind(\"post.publishedAt\", { transforms: [{ id: \"date.formatShort\" }] }),\n when(\"post.publishedAt\"),\n when(\"showDates\"),\n ),\n\n // Excerpt\n text(\n {\n as: \"p\",\n className: \"text-sm line-clamp-2\",\n style: textColorStyle('neutral-600'),\n },\n bind(\"post.excerpt\"),\n when(\"post.excerpt\"),\n when(\"showExcerpts\"),\n ),\n\n // Read more button\n button(\n {\n href: { $bind: { from: \"post.path\" } },\n className: {\n $bind: { from: \"readMoreVariant\", fallback: \"primary\" },\n $prepend: \"button-\",\n },\n },\n [text({ as: \"span\" }, bind(\"readMoreText\", { fallback: \"Read more →\" }))],\n ),\n ]),\n ],\n repeat(\"data.posts\", \"post\"),\n ),\n ]),\n ],\n data: {\n key: \"posts\",\n loader: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: \"post\",\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"postsPerPage\", fallback: \"12\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n },\n mode: \"server\",\n },\n },\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { stack, text, richText, bind, when } from \"../../node/builder\";\nimport { textColorStyle } from \"../../../theme/utils/colorStyles\";\n\nexport const faqHeadingFragment: FragmentDefinition = defineFragment({\n id: \"faqHeading\",\n title: \"FAQ Heading\",\n description: \"Optional eyebrow, title, and description for FAQ sections.\",\n fields: [\n {\n id: \"eyebrow\",\n type: \"text\",\n label: \"Eyebrow\",\n description: \"Short label displayed above the title.\",\n visibleRoles: [\"designer\", \"admin\"],\n maxLength: 60,\n },\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: false,\n maxLength: 120,\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n required: false,\n ui: { variant: \"limited\" },\n },\n ],\n layout: stack(\n {\n gap: \"sm\",\n className: \"mx-auto max-w-3xl text-center mb-4\",\n },\n [\n text(\n {\n as: \"p\",\n className: \"faq-eyebrow text-sm font-semibold uppercase tracking-wide\",\n style: textColorStyle('primary'),\n },\n when(\"content.eyebrow\"),\n bind(\"content.eyebrow\"),\n ),\n text(\n {\n as: \"h2\",\n // h2 now gets size/weight from theme typography CSS\n className: \"faq-title\",\n style: textColorStyle('neutral-900'),\n },\n when(\"content.title\"),\n bind(\"content.title\"),\n ),\n richText(\n {\n className:\n \"faq-description prose mx-auto max-w-none text-base sm:text-lg\",\n style: textColorStyle('neutral-600'),\n },\n when(\"content.description\"),\n bind(\"content.description\"),\n ),\n ],\n ),\n});\n","import { accordionList } from \"../../node/builder\";\nimport { defineFragment, type FragmentDefinition } from \"../types\";\n\nexport const faqAccordionFragment: FragmentDefinition = defineFragment({\n id: \"faqAccordion\",\n title: \"FAQ Accordion\",\n description: \"Expandable list of question and answer pairs.\",\n fields: [\n {\n id: \"items\",\n type: \"repeater\",\n label: \"FAQ items\",\n itemLabel: \"FAQ item\",\n itemLabelSource: \"question\",\n minItems: 1,\n maxItems: 30,\n schema: {\n fields: [\n {\n id: \"question\",\n type: \"text\",\n label: \"Question\",\n required: true,\n maxLength: 160,\n },\n {\n id: \"answer\",\n type: \"richText\",\n label: \"Answer\",\n required: true,\n ui: { variant: \"limited\" },\n },\n ],\n },\n },\n ],\n layout: accordionList({\n collection: \"content.items\",\n itemName: \"faqItem\",\n indexName: \"faqIndex\",\n accordionProps: {\n className: \"accordion-root\", // CSS-first: all styling handled by theme CSS\n type: \"single\",\n collapsible: true,\n },\n itemProps: {\n className: \"accordion-item\",\n iconStyle: { $bind: { from: \"theme.accordions.icon.style\" } }, // Pass icon style from theme\n },\n triggerFrom: \"faqItem.question\",\n contentFrom: \"faqItem.answer\",\n }),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack, text, richText, media, bind, when } from '../../node/builder';\nimport { createCtasRepeater } from '../../fields/ctas';\nimport { ctaRow } from '../../node/fragments/ctaRow';\nimport { textColorStyle } from '../../../theme/utils/colorStyles';\n\n/**\n * Card fragment - flexible content card with title, body, optional media, and action buttons\n *\n * Features:\n * - Featured media (image/video) with configurable aspect ratio\n * - Title and rich text body\n * - Call-to-action buttons (0-3)\n * - Variant-based styling from theme (background, spacing, elevation, rounded corners)\n *\n * Card styling is managed through CSS generation at build-time (generateCardCss).\n * Each card uses:\n * - .card-{variant} - Container styles (background, border, shadow, radius)\n * - .card-media - Media corners matching container\n * - .card-content - Padding based on variant spacing\n *\n * This CSS-first approach eliminates runtime transforms for styling.\n */\nexport const cardFragment: FragmentDefinition = defineFragment({\n id: 'card',\n title: 'Card',\n description: 'Content card with optional media, title, body, and action buttons',\n category: 'content',\n icon: 'LayoutCard',\n fields: [\n {\n id: 'media',\n type: 'media',\n label: 'Featured media',\n description: 'Image or video displayed at top of card',\n required: false,\n mediaKinds: ['image', 'video'],\n },\n {\n id: 'aspectRatio',\n type: 'select',\n label: 'Media aspect ratio',\n defaultValue: 'auto',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: '16/9', label: '16:9 (Landscape)' },\n { value: '4/3', label: '4:3 (Standard)' },\n { value: '1/1', label: '1:1 (Square)' },\n { value: '3/4', label: '3:4 (Portrait)' },\n ],\n condition: {\n field: 'media',\n operator: 'isNotEmpty',\n },\n },\n {\n id: 'title',\n type: 'text',\n label: 'Title',\n required: true,\n maxLength: 120,\n },\n {\n id: 'body',\n type: 'richText',\n label: 'Body',\n description: 'Main card content',\n format: 'markdown',\n },\n createCtasRepeater({\n id: 'ctas',\n label: 'Action buttons',\n itemLabel: 'Button',\n minItems: 0,\n maxItems: 3,\n }),\n {\n id: 'variant',\n type: 'select',\n label: 'Card variant',\n description: 'Choose a card style from your theme',\n required: false,\n defaultValue: 'default',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'variant1', label: 'Variant 1' },\n { value: 'variant2', label: 'Variant 2' },\n ],\n },\n ],\n layout: stack(\n {\n gap: 'none',\n className: {\n $bind: {\n from: 'variant',\n fallback: 'default',\n },\n $prepend: 'card-',\n },\n },\n [\n // Featured media at top (conditional) - full width, no padding\n // CSS handles corner radius via .card-{variant} .card-media selector\n media(\n {\n className: 'card-media w-full h-auto object-cover',\n style: {\n aspectRatio: { $bind: { from: 'aspectRatio' } },\n },\n },\n when('media'),\n bind('media')\n ),\n // Content wrapper with padding based on variant\n // CSS handles padding via .card-{variant} .card-content selector\n stack(\n {\n gap: 'sm',\n className: 'card-content',\n },\n [\n text(\n {\n as: 'h3',\n className: 'card-title text-xl font-semibold',\n },\n bind('title'),\n ),\n richText(\n {\n className: 'card-body text-base',\n style: textColorStyle('mutedText'),\n },\n when('body'),\n bind('body'),\n ),\n // Action buttons at bottom (conditional)\n ctaRow({\n collectionPath: 'ctas',\n itemName: 'cta',\n gap: 'sm',\n justify: 'start',\n containerClassName: 'mt-2',\n }),\n ]\n ),\n ],\n ),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { text, bind } from '../../node/builder';\n\n/**\n * Heading fragment - simple text heading with configurable level\n */\nexport const headingFragment: FragmentDefinition = defineFragment({\n id: 'heading',\n title: 'Heading',\n description: 'Text heading',\n category: 'content',\n icon: 'Heading',\n fields: [\n {\n id: 'text',\n type: 'text',\n label: 'Heading text',\n required: true,\n maxLength: 200,\n },\n {\n id: 'level',\n type: 'select',\n label: 'Heading level',\n defaultValue: 'h2',\n options: [\n { value: 'h1', label: 'H1 (Large)' },\n { value: 'h2', label: 'H2 (Medium)' },\n { value: 'h3', label: 'H3 (Small)' },\n ],\n },\n ],\n layout: text(\n {\n as: { $bind: { from: 'level' } }, // Relative path - resolves to current scope\n className: 'fragment-heading font-bold',\n },\n bind('text'), // Relative path - resolves to current scope\n ),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { richText, bind } from '../../node/builder';\n\n/**\n * Rich text fragment - formatted text content\n */\nexport const richTextFragment: FragmentDefinition = defineFragment({\n id: 'richText',\n title: 'Rich Text',\n description: 'Formatted text with markdown',\n category: 'content',\n icon: 'FileText',\n fields: [\n {\n id: 'content',\n type: 'richText',\n label: 'Content',\n required: true,\n format: 'markdown',\n },\n ],\n layout: richText(\n {\n className: 'fragment-richtext prose prose-neutral',\n },\n bind('content'), // Relative path - resolves to current scope\n ),\n});\n","import type { FragmentDefinition } from '../types';\nimport type { RepeaterFieldDefinition } from '../../manifest/schema';\n\n/**\n * Converts a record of fragments into a polymorphic repeater field definition.\n * This allows fragments to be used in blocks via repeaters with type selection.\n *\n * @example\n * ```typescript\n * const field = fragmentsToRepeaterField(\n * 'items',\n * 'Column content',\n * {\n * card: cardFragment,\n * quote: quoteFragment,\n * stat: statFragment\n * },\n * { minItems: 0, maxItems: 50 }\n * );\n * ```\n */\nexport function fragmentsToRepeaterField(\n id: string,\n label: string,\n fragments: Record<string, FragmentDefinition>,\n options: {\n minItems?: number;\n maxItems?: number;\n itemLabel?: string;\n description?: string;\n allowConversion?: boolean;\n } = {}\n): RepeaterFieldDefinition {\n return {\n id,\n type: 'repeater',\n label,\n description: options.description,\n polymorphic: true,\n itemLabel: options.itemLabel ?? 'Item',\n itemLabelSource: '_type',\n minItems: options.minItems ?? 0,\n maxItems: options.maxItems,\n allowConversion: options.allowConversion ?? true,\n required: false,\n itemTypes: Object.fromEntries(\n Object.entries(fragments).map(([typeId, fragment]) => [\n typeId,\n {\n label: fragment.title ?? typeId,\n icon: fragment.icon,\n fields: fragment.fields\n }\n ])\n )\n };\n}\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack, media, text, bind, when } from '../../node/builder';\nimport { textColorStyle } from '../../../theme/utils/colorStyles';\n\n/**\n * Image fragment - single image with optional caption and aspect ratio control\n */\nexport const imageFragment: FragmentDefinition = defineFragment({\n id: 'image',\n title: 'Image',\n description: 'Image with optional caption',\n category: 'content',\n icon: 'Image',\n fields: [\n {\n id: 'image',\n type: 'media',\n label: 'Image',\n required: true,\n mediaKinds: ['image'],\n },\n {\n id: 'caption',\n type: 'text',\n label: 'Caption',\n required: false,\n maxLength: 200,\n },\n {\n id: 'aspectRatio',\n type: 'select',\n label: 'Aspect ratio',\n defaultValue: 'auto',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: '16/9', label: '16:9 (Landscape)' },\n { value: '4/3', label: '4:3 (Standard)' },\n { value: '1/1', label: '1:1 (Square)' },\n { value: '3/4', label: '3:4 (Portrait)' },\n ],\n },\n ],\n layout: stack({ gap: 'sm' }, [\n media(\n {\n className: 'fragment-image w-full h-auto object-cover',\n style: {\n aspectRatio: { $bind: { from: 'aspectRatio' } },\n },\n },\n bind('image')\n ),\n text(\n {\n as: 'p',\n className: 'image-caption text-sm text-center',\n style: textColorStyle('mutedText'),\n },\n when('caption'),\n bind('caption')\n ),\n ]),\n});\n","import { defineFragment, type FragmentDefinition } from '../types';\nimport { stack } from '../../node/builder';\nimport { fragmentsToRepeaterField } from '../utils/toRepeaterSchema';\nimport { imageFragment } from './image';\nimport { headingFragment } from './heading';\nimport { richTextFragment } from './richText';\nimport { typeBasedLayout } from '../../node';\n\n/**\n * Column content fragment - represents a single column with nested items.\n * Each column can contain a flexible stack of images, headings, and rich text.\n */\nexport const columnContentFragment: FragmentDefinition = defineFragment({\n id: 'columnContent',\n title: 'Column',\n description: 'A single column with customizable content',\n category: 'layout',\n icon: 'RectangleVertical',\n fields: [\n fragmentsToRepeaterField(\n 'items',\n 'Column items',\n {\n image: imageFragment,\n heading: headingFragment,\n richText: richTextFragment,\n },\n {\n minItems: 0,\n maxItems: 20,\n itemLabel: 'Item',\n description: 'Add content to this column',\n }\n ),\n ],\n layout: stack(\n { gap: 'md', className: 'h-full' },\n [\n {\n type: 'stack',\n gap: 'md',\n children: typeBasedLayout(\n {\n image: imageFragment.layout,\n heading: headingFragment.layout,\n richText: richTextFragment.layout,\n },\n { itemName: 'item' }\n ),\n $repeat: {\n collection: { from: 'items' },\n itemName: 'item',\n },\n },\n ]\n ),\n});\n","/**\n * @file Defines constants for the background field, ensuring a single source of truth\n * for presets used in both the field definition and the style transforms.\n */\n\nexport const BACKGROUND_POSITION_PRESETS = [\n { value: 'center', label: 'Center' },\n { value: 'top', label: 'Top' },\n { value: 'top left', label: 'Top Left' },\n { value: 'top right', label: 'Top Right' },\n { value: 'bottom', label: 'Bottom' },\n { value: 'bottom left', label: 'Bottom Left' },\n { value: 'bottom right', label: 'Bottom Right' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' },\n // The following are valid keywords but are not included in the UI to reduce clutter.\n // They are included here to ensure the transform logic can correctly identify them as presets.\n { value: 'top center', label: 'Top Center' },\n { value: 'bottom center', label: 'Bottom Center' },\n { value: 'left center', label: 'Left Center' },\n { value: 'right center', label: 'Right Center' },\n { value: 'left top', label: 'Left Top' },\n { value: 'right top', label: 'Right Top' },\n { value: 'left bottom', label: 'Left Bottom' },\n { value: 'right bottom', label: 'Right Bottom' },\n] as const;\n\nexport const BACKGROUND_POSITION_PRESET_VALUES = BACKGROUND_POSITION_PRESETS.map((p) => p.value);\n\n/**\n * Maps position keywords to Tailwind anchor positioning classes.\n * Used for positioning scaled/overflow images within their containers.\n *\n * The keys are normalized (lowercase, trimmed) position keywords.\n * The values are Tailwind classes for position + translation.\n */\nexport const POSITION_TO_ANCHOR_CLASSES: Record<string, string> = {\n 'center': 'left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2',\n 'top': 'left-1/2 top-0 -translate-x-1/2',\n 'top center': 'left-1/2 top-0 -translate-x-1/2',\n 'bottom': 'left-1/2 bottom-0 -translate-x-1/2',\n 'bottom center': 'left-1/2 bottom-0 -translate-x-1/2',\n 'left': 'left-0 top-1/2 -translate-y-1/2',\n 'left center': 'left-0 top-1/2 -translate-y-1/2',\n 'right': 'right-0 top-1/2 -translate-y-1/2',\n 'right center': 'right-0 top-1/2 -translate-y-1/2',\n 'top left': 'left-0 top-0',\n 'left top': 'left-0 top-0',\n 'top right': 'right-0 top-0',\n 'right top': 'right-0 top-0',\n 'bottom left': 'left-0 bottom-0',\n 'left bottom': 'left-0 bottom-0',\n 'bottom right': 'right-0 bottom-0',\n 'right bottom': 'right-0 bottom-0',\n};\n\n/** Default anchor classes when position is null or unrecognized */\nexport const DEFAULT_ANCHOR_CLASSES = 'left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2';\n\n/**\n * Gets Tailwind anchor positioning classes for a position keyword.\n * Used for positioning scaled/overflow background images.\n *\n * @param position - Position keyword (e.g., \"center\", \"top\", \"bottom left\") or null\n * @returns Tailwind classes for positioning and translation\n */\nexport function getAnchorClasses(position: string | null): string {\n if (!position) return DEFAULT_ANCHOR_CLASSES;\n const normalized = position.toLowerCase().trim();\n return POSITION_TO_ANCHOR_CLASSES[normalized] ?? DEFAULT_ANCHOR_CLASSES;\n}\n","import { BACKGROUND_POSITION_PRESETS } from '../constants/background';\nimport type { FieldDefinition, TabDefinition, TabGroupFieldDefinition } from '../manifest/schema'\n\ntype BackgroundFieldOptions = {\n id?: string\n label?: string\n allowColor?: boolean\n allowGradient?: boolean\n allowImage?: boolean\n includeAdvanced?: boolean\n}\n\n/**\n * Creates a TabGroupField for background configuration\n * with Color/Gradient/Image tabs and advanced image options\n */\nexport function createBackgroundField(options: BackgroundFieldOptions = {}): TabGroupFieldDefinition {\n const {\n id = 'background',\n label = 'Background',\n allowColor = true,\n allowGradient = true,\n allowImage = true,\n includeAdvanced = false,\n } = options\n\n const tabs: TabDefinition[] = []\n\n // Color tab\n if (allowColor) {\n tabs.push({\n id: 'color',\n label: 'Color',\n description: 'Solid color background using theme tokens or custom colors',\n sdkSectionOption: 'backgroundColor',\n fields: [\n {\n id: 'color',\n type: 'text' as const,\n label: 'Color',\n description: 'Select a background color from the available options.',\n required: false,\n multiline: false,\n ui: {\n // Use BackgroundColorWidget via widget override\n widget: 'backgroundColor',\n },\n },\n ],\n })\n }\n\n // Gradient tab\n if (allowGradient) {\n tabs.push({\n id: 'gradient',\n label: 'Gradient',\n description: 'CSS gradient background',\n sdkSectionOption: 'backgroundGradient',\n fields: [\n {\n id: 'gradient',\n type: 'text' as const,\n label: 'Gradient',\n description: 'CSS gradient value (e.g., linear-gradient(to right, #ff0000, #00ff00)).',\n required: false,\n multiline: true,\n ui: {\n placeholder: 'linear-gradient(to right, #ff0000, #00ff00)',\n },\n },\n ],\n })\n }\n\n // Image tab\n if (allowImage) {\n const imageFields: FieldDefinition[] = [\n {\n id: 'image',\n type: 'media' as const,\n label: 'Image',\n description: 'Background image file',\n mediaKinds: ['image'],\n required: false,\n },\n ]\n\n // Advanced image options\n if (includeAdvanced) {\n const objectFitField: FieldDefinition = {\n id: 'objectFit',\n type: 'select',\n label: 'Image Sizing',\n description: 'How the image should be sized and positioned.',\n required: false,\n multiple: false,\n options: [\n { value: 'fill', label: 'Fill (cover)' },\n { value: 'fit', label: 'Fit (contain)' },\n { value: 'original', label: 'Original size' },\n { value: 'custom', label: 'Scale up' },\n ],\n }\n\n const scaleField: FieldDefinition = {\n id: 'scale',\n type: 'presetOrCustom',\n label: 'Scale',\n description: 'Image scale amount.',\n required: false,\n ui: {\n visibleWhen: {\n field: 'objectFit',\n equals: 'custom',\n },\n },\n presets: [\n { value: '125', label: '125%' },\n { value: '150', label: '150%' },\n { value: '175', label: '175%' },\n { value: '200', label: '200%' },\n ],\n customInput: {\n placeholder: 'e.g., 800px, 50vw, 175%',\n helpText: 'Enter a custom size using %, px, vh, vw, rem, or em units',\n },\n }\n\n const positionField: FieldDefinition = {\n id: 'position',\n type: 'presetOrCustom',\n label: 'Position',\n description: 'Anchor point for the image. Relevant for \"Fill\" and \"Custom size\" options.',\n required: false,\n presets: [...BACKGROUND_POSITION_PRESETS],\n customInput: {\n placeholder: 'e.g., 25% 75%, top 20px left 50px',\n helpText: 'Enter a custom CSS background-position value',\n },\n }\n\n const opacityField: FieldDefinition = {\n id: 'opacity',\n type: 'number',\n label: 'Opacity',\n description: 'Image opacity (0-100).',\n required: false,\n ui: {\n min: 0,\n max: 100,\n step: 5,\n },\n }\n\n imageFields.push(\n objectFitField,\n scaleField,\n positionField,\n opacityField\n )\n }\n\n tabs.push({\n id: 'image',\n label: 'Image',\n description: includeAdvanced\n ? 'Background image with advanced controls'\n : 'Background image',\n sdkSectionOption: 'backgroundImage',\n fields: imageFields,\n })\n }\n\n return {\n id,\n type: 'tabGroup' as const,\n label,\n required: false,\n tabs,\n activeTabField: 'type',\n ui: {\n hideLabel: false,\n },\n } satisfies TabGroupFieldDefinition\n}\n","import type { FieldDefinition } from '../manifest/schema'\nimport { createBackgroundField } from './background'\n\n/**\n * Options for customizing a section styles field.\n */\ntype SectionStylesOptions = {\n /** Field ID (default: '_sectionStyles') */\n id?: string\n /** Field label (default: 'Section styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Options for customizing a container styles field.\n */\ntype ContainerStylesOptions = {\n /** Field ID (default: '_containerStyles') */\n id?: string\n /** Field label (default: 'Container styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Options for customizing a card styles field.\n */\ntype CardStylesOptions = {\n /** Field ID (default: '_cardStyles') */\n id?: string\n /** Field label (default: 'Card styles') */\n label?: string\n /** Whether to include background field (default: true) */\n includeBackground?: boolean\n}\n\n/**\n * Internal discriminator for box style types.\n * @internal\n */\ntype BoxStyleType = 'container' | 'card'\n\n/**\n * Internal helper to create box styles with depth (container or card).\n *\n * Both containers and cards support:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow)\n * - Rounded corners (border radius)\n *\n * This function is used internally by `containerStylesField()` and `cardStylesField()`\n * to avoid code duplication while maintaining separate public APIs.\n *\n * @internal\n * @param type - Box style type discriminator ('container' or 'card')\n * @param options - Customization options passed from public field helpers\n * @returns A modal FieldDefinition with depth-specific fields\n */\nfunction createBoxStylesFieldWithDepth(\n type: BoxStyleType,\n options: ContainerStylesOptions | CardStylesOptions = {}\n): FieldDefinition {\n const defaults = {\n container: {\n id: '_containerStyles',\n label: 'Container styles',\n contextName: 'container',\n },\n card: {\n id: '_cardStyles',\n label: 'Card styles',\n contextName: 'card',\n },\n }\n\n const {\n id = defaults[type].id,\n label = defaults[type].label,\n includeBackground = true,\n } = options\n\n const contextName = defaults[type].contextName\n const fields: FieldDefinition[] = []\n\n // Background (color/gradient/image with advanced options)\n if (includeBackground) {\n fields.push(\n createBackgroundField({\n id: 'background',\n label: 'Background',\n allowColor: true,\n allowGradient: true,\n allowImage: true,\n includeAdvanced: true,\n }),\n )\n }\n\n // Horizontal + vertical spacing\n fields.push({\n id: 'spacing',\n type: 'select',\n label: 'Inner spacing',\n description: `Padding for the ${contextName}.`,\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'compact', label: 'Compact' },\n { value: 'cozy', label: 'Cozy' },\n { value: 'medium', label: 'Medium' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ],\n })\n\n // Raised toggle (applies theme shadow)\n fields.push({\n id: 'raised',\n type: 'boolean',\n label: 'Raised',\n description: `Add shadow depth to the ${contextName}.`,\n required: false,\n })\n\n // Rounded corners\n fields.push({\n id: 'rounded',\n type: 'select',\n label: 'Rounded corners',\n description: 'Border radius size.',\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n { value: 'xl', label: 'Extra Large' },\n { value: '2xl', label: 'Extra Extra Large' },\n { value: 'full', label: 'Fully Rounded' },\n ],\n })\n\n // Full-width toggle (only for containers, not cards)\n if (type === 'container') {\n fields.push({\n id: 'fullWidth',\n type: 'boolean',\n label: 'Full width',\n description: 'Extend content edge-to-edge (removes container max-width and all horizontal padding).',\n required: false,\n defaultValue: false,\n })\n }\n\n return {\n id,\n type: 'modal',\n label,\n required: false,\n schema: { fields },\n ui: {\n modalConfig: {\n buttonLabel: label,\n description: `Configure background, spacing, elevation, and rounded corners for the ${contextName}.`,\n buttonVariant: 'outline' as const,\n showCustomizedIndicator: true,\n },\n },\n } as FieldDefinition\n}\n\n/**\n * Creates a modal field group for styling full-width sections.\n *\n * Section styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (vertical padding)\n *\n * Sections are full-width wrappers that span the entire viewport, so they don't\n * support rounded corners or elevation shadows (unlike containers and cards).\n *\n * Use with the `backgroundLayer()` helper to render backgrounds in the block layout.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_sectionStyles')\n * @param options.label - Field label (default: 'Section styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block's fields array\n *\n * @example\n * // Basic usage in a block\n * const fields = [\n * // ... other fields\n * sectionStylesField({\n * id: '_sectionStyles',\n * label: 'Section styles',\n * }),\n * ]\n *\n * @example\n * // In the layout, use backgroundLayer() to render\n * const layout = section(\n * { background: 'background/base' },\n * [\n * ...backgroundLayer('_sectionStyles.background'),\n * sectionContainer([])\n * ]\n * )\n *\n * @see {@link containerStylesField} for constrained-width containers with elevation\n * @see {@link cardStylesField} for repeater items with elevation\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function sectionStylesField(options: SectionStylesOptions = {}): FieldDefinition {\n const {\n id = '_sectionStyles',\n label = 'Section styles',\n includeBackground = true,\n } = options\n\n const fields: FieldDefinition[] = []\n\n // Background (color/gradient/image with advanced options)\n if (includeBackground) {\n fields.push(\n createBackgroundField({\n id: 'background',\n label: 'Background',\n allowColor: true,\n allowGradient: true,\n allowImage: true,\n includeAdvanced: true,\n }),\n )\n }\n\n // Vertical spacing (maps to theme spacing tokens)\n fields.push({\n id: 'spacing',\n type: 'select',\n label: 'Inner spacing',\n description: 'Vertical padding for the section.',\n required: false,\n multiple: false,\n options: [\n { value: 'none', label: 'None' },\n { value: 'compact', label: 'Compact' },\n { value: 'cozy', label: 'Cozy' },\n { value: 'medium', label: 'Medium' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ],\n })\n\n return {\n id,\n type: 'modal',\n label,\n required: false,\n schema: { fields },\n ui: {\n modalConfig: {\n buttonLabel: label,\n description: 'Configure background and spacing for this section.',\n buttonVariant: 'outline' as const,\n showCustomizedIndicator: true,\n },\n },\n } as FieldDefinition\n}\n\n/**\n * Creates a modal field group for styling constrained-width containers.\n *\n * Container styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow for visual depth)\n * - Rounded corners (border radius)\n *\n * Containers have constrained width (max-w-*) and are centered within their parent.\n * Use for content areas that need visual separation or elevation from the page background.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_containerStyles')\n * @param options.label - Field label (default: 'Container styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block's fields array\n *\n * @example\n * // Basic usage in a block\n * const fields = [\n * // ... other fields\n * containerStylesField({\n * id: '_containerStyles',\n * label: 'Container styles',\n * }),\n * ]\n *\n * @see {@link sectionStylesField} for full-width sections\n * @see {@link cardStylesField} for repeater items with the same styling options\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function containerStylesField(options: ContainerStylesOptions = {}): FieldDefinition {\n return createBoxStylesFieldWithDepth('container', options)\n}\n\n/**\n * Creates a modal field group for styling individual cards in repeaters.\n *\n * Card styles include:\n * - Background (color/gradient/image with advanced options)\n * - Inner spacing (padding)\n * - Raised (elevation shadow for visual depth)\n * - Rounded corners (border radius)\n *\n * Cards are used in repeaters (e.g., columns, grids, carousels) and have the same\n * styling options as containers. Each card instance can be styled independently.\n *\n * **Important:** When used in fragments (not blocks), the field ID must start with\n * a letter (e.g., 'styles', 'cardStyles') - do NOT use a leading underscore like '_cardStyles'.\n *\n * @param options - Customization options for the field\n * @param options.id - Field ID (default: '_cardStyles' for blocks, 'styles' recommended for fragments)\n * @param options.label - Field label (default: 'Card styles')\n * @param options.includeBackground - Whether to include background field (default: true)\n * @returns A modal FieldDefinition that can be added to a block or fragment's fields array\n *\n * @example\n * // In a fragment (e.g., card.ts)\n * const cardFragment = defineFragment({\n * id: 'card',\n * fields: [\n * { id: 'title', type: 'text', label: 'Title' },\n * { id: 'body', type: 'richText', label: 'Body' },\n * cardStylesField({\n * id: 'styles', // No leading underscore for fragments!\n * label: 'Card styles',\n * }),\n * ],\n * layout: stack({ gap: 'md' }, [\n * text({ as: 'h3' }, bind('title')),\n * richText({}, bind('body')),\n * ]),\n * })\n *\n * @example\n * // In a block\n * const fields = [\n * // ... other fields\n * cardStylesField({\n * id: '_cardStyles', // Can use underscore in blocks\n * label: 'Card styles',\n * }),\n * ]\n *\n * @see {@link sectionStylesField} for full-width sections\n * @see {@link containerStylesField} for constrained-width containers\n * @see {@link backgroundLayer} for rendering backgrounds in layouts\n */\nexport function cardStylesField(options: CardStylesOptions = {}): FieldDefinition {\n return createBoxStylesFieldWithDepth('card', options)\n}\n","import type { BlockManifest, BlockCategory, FieldDefinition, StyleTokenConfig, BehaviourConfig } from './manifest/schema';\nimport { fieldSchema } from './manifest/schema';\nimport type { NodeDefinition } from './node';\nimport { composeFragments, type FragmentDefinition } from './fragments';\nimport { sectionStylesField } from './fields/boxStyles';\nimport { augmentManifest } from './manifest/augmentManifest';\n\n/**\n * Configuration for defining a block using the defineBlock helper.\n * Provides smart defaults and handles fragment composition automatically.\n */\nexport type BlockConfig = {\n // Required fields\n /** Block identifier (e.g., 'block.hero') */\n id: string;\n /** Human-readable title (e.g., 'Hero') */\n title: string;\n /** Block category for organization */\n category: BlockCategory;\n\n // Fragment composition (auto-handles field assembly)\n /** Fragments to compose into this block */\n fragments?: Array<{\n fragment: FragmentDefinition;\n fieldPriority?: number;\n scope?: string;\n dataKey?: string;\n }>;\n\n // Layout definition\n /** Block layout (NodeDefinition or array) */\n layout: NodeDefinition | NodeDefinition[];\n\n // Optional: variants\n /** Layout variants (e.g., { classic: layout1, minimal: layout2 }) */\n variants?: Record<string, NodeDefinition>;\n /** Default variant key */\n defaultVariant?: string;\n\n // Optional: additional fields beyond fragments\n /** Additional fields to include (fragments are added automatically) */\n additionalFields?: FieldDefinition[];\n\n // Optional: skip section styles field\n /** If true, don't automatically add sectionStylesField */\n skipSectionStyles?: boolean;\n\n // Optional: overrides for defaults\n /** Block description */\n description?: string;\n /** Field ID to use as block title in lists (e.g., 'headline') */\n titleSource?: string;\n /** Component name (auto-derived from id if not provided) */\n component?: string;\n /** Search/filter tags */\n tags?: string[];\n /** Icon name (Lucide icon) */\n icon?: string;\n /** Style token mappings */\n styleTokens?: StyleTokenConfig;\n /** Behavior flags */\n behaviours?: BehaviourConfig;\n /** Hide from block picker palettes */\n paletteHidden?: boolean;\n /** Content types this block is compatible with */\n contentTypes?: string[];\n};\n\n/**\n * Create a block manifest with smart defaults and automatic fragment composition.\n *\n * This helper reduces block definition boilerplate by:\n * - Composing fragments and managing field priorities automatically\n * - Adding section styles field by default\n * - Providing sensible defaults for manifest properties\n * - Auto-deriving component names from block IDs\n * - Handling manifest augmentation (variant selector, etc.)\n *\n * @example\n * ```typescript\n * export const heroManifest = createBlockManifest({\n * id: 'block.hero',\n * title: 'Hero',\n * category: 'layout',\n * fragments: [\n * { fragment: heroCopyFragment, priority: 0 },\n * { fragment: ctaRowFragment, priority: 2 },\n * ],\n * layout: styledSection({\n * children: sectionContainer(nodes, { gap: 'md' }),\n * }),\n * tags: ['header', 'banner', 'landing'],\n * icon: 'Sparkles',\n * });\n * ```\n */\nexport function createBlockManifest(config: BlockConfig): BlockManifest {\n // 1. Compose fragments + section styles\n const composition = config.fragments ? composeFragments(config.fragments) : { fields: [], layout: [], data: [], scopes: [] };\n\n const allFields: FieldDefinition[] = [\n ...composition.fields,\n ...(config.additionalFields ?? []),\n ];\n\n // Add section styles field unless explicitly skipped\n // This allows users to customize section spacing and background via the editor.\n // Even when auto-added, blocks get sensible defaults via the transform's defaultSpacing option.\n // The pattern:\n // 1. Block defines layout with styledSection({ spacing: 'medium' })\n // 2. createBlockManifest auto-adds _sectionStyles field (unless skipSectionStyles: true)\n // 3. Transform uses defaultSpacing when _sectionStyles.spacing is undefined\n // 4. Users can override spacing via the editor if needed\n if (!config.skipSectionStyles) {\n allFields.push(\n sectionStylesField({\n id: '_sectionStyles',\n label: 'Section styles',\n }),\n );\n }\n\n const fields = fieldSchema.array().parse(allFields);\n\n // 2. Build layout (with variants if provided)\n const layout = config.layout;\n const variants = config.variants;\n\n // 3. Build behaviours object (from explicit config or paletteHidden flag)\n let behaviours: BehaviourConfig | undefined = config.behaviours;\n if (!behaviours && config.paletteHidden !== undefined) {\n behaviours = {\n supportsThemeSwitching: true,\n inlineEditing: true,\n animation: true,\n paletteHidden: config.paletteHidden,\n };\n }\n\n // 4. Apply defaults and create manifest\n const manifest: BlockManifest = {\n name: config.id,\n version: '0.1.0',\n title: config.title,\n titleSource: config.titleSource,\n description: config.description ?? '',\n component: config.component ?? deriveComponentName(config.id),\n fields,\n slots: [], // Always empty\n styleTokens: config.styleTokens,\n behaviours,\n category: config.category,\n contentTypes: config.contentTypes,\n tags: config.tags ?? [],\n icon: config.icon ?? 'Box',\n layout,\n variants,\n defaultVariant: config.defaultVariant,\n };\n\n // 5. Augment manifest (adds variant selector field, etc.)\n return augmentManifest(manifest);\n}\n\n/**\n * Derive component name from block ID.\n *\n * Converts block IDs to component names by:\n * 1. Removing the 'block.' prefix\n * 2. Converting camelCase to dot.notation\n * 3. Adding '.default' suffix\n *\n * Examples:\n * - 'block.hero' → 'hero.default'\n * - 'block.ctaFull' → 'cta.full.default'\n * - 'block.siteHeader' → 'site.header.default'\n */\nfunction deriveComponentName(id: string): string {\n // Remove 'block.' prefix\n const base = id.replace(/^block\\./, '');\n\n // Convert camelCase to dot.separated\n // ctaFull → cta.full\n // siteHeader → site.header\n const dotSeparated = base\n .replace(/([a-z])([A-Z])/g, '$1.$2')\n .toLowerCase();\n\n // Always add .default suffix for consistency\n return `${dotSeparated}.default`;\n}\n","import type { Media } from \"../../lib/media\";\nimport type { GradientConfig } from \"../../theme/gradients\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport {\n composeFragments,\n heroCopyFragment,\n ctaRowFragment,\n} from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst heroCopyAndCta = composeFragments([\n { fragment: heroCopyFragment },\n { fragment: ctaRowFragment },\n]);\n\nconst heroContentNodes = heroCopyAndCta.layout;\n\n// Variant: Classic (centered, full padding - current default)\nconst classicLayout: NodeDefinition = styledSection({\n children: sectionContainer(heroContentNodes, {\n gap: \"md\",\n className: \"text-center\",\n }),\n});\n\n// Variant: Micro (compact with reduced padding)\nconst microLayout: NodeDefinition = styledSection({\n children: sectionContainer(heroContentNodes, {\n gap: \"sm\",\n className: \"text-center\",\n }),\n spacing: \"compact\",\n});\n\n/**\n * Shared split layout for both split and splitReverse variants.\n * Both variants use the same structure (two-column grid with text on left).\n * The background image is rendered as an absolute-positioned layer,\n * so there's no visual difference between split/splitReverse currently.\n */\nconst splitLayoutBase: NodeDefinition = styledSection({\n children: {\n type: \"grid\",\n cols: 1,\n colsSm: 2,\n gap: \"lg\",\n className: \"mx-auto max-w-7xl items-center\",\n children: [\n {\n type: \"stack\",\n gap: \"md\",\n className: \"text-left\",\n children: heroContentNodes,\n },\n ],\n },\n});\n\n// Variant: Split (two-column with text on left)\n// Note: Currently identical to splitReverse since media is absolute-positioned\nconst splitLayout: NodeDefinition = splitLayoutBase;\n\n// Variant: Split-reverse (two-column with text on left)\n// Note: Currently identical to split since media is absolute-positioned\nconst splitReverseLayout: NodeDefinition = splitLayoutBase;\n\nexport const heroManifest: BlockManifest = createBlockManifest({\n id: \"block.hero\",\n title: \"Hero\",\n titleSource: \"headline\",\n category: \"layout\",\n\n fragments: [\n { fragment: heroCopyFragment, fieldPriority: 0 },\n { fragment: ctaRowFragment, fieldPriority: 2 },\n ],\n\n layout: classicLayout,\n\n variants: {\n classic: classicLayout,\n micro: microLayout,\n split: splitLayout,\n splitReverse: splitReverseLayout,\n },\n defaultVariant: \"classic\",\n\n description: \"Hero section with headline, subtitle, and repeatable CTAs.\",\n tags: [\"header\", \"banner\", \"landing\", \"introduction\", \"welcome\", \"splash\", \"headline\"],\n icon: \"Sparkles\",\n styleTokens: {\n typography: \"display\",\n spacing: \"xl\",\n },\n});\n\nexport type HeroManifest = typeof heroManifest;\n\nexport type HeroCta = {\n label: string;\n href: string;\n variant?: 'primary' | 'secondary' | 'outline';\n iconLeft?: Media | null;\n iconRight?: Media | null;\n};\n\nexport type HeroCtaInput = Partial<HeroCta>;\n\nexport type HeroContent = {\n eyebrow?: string;\n headline: string;\n subheadline?: string;\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image';\n color?: string | null;\n gradient?: GradientConfig | null;\n image?: HeroMedia | null;\n textColor?: string | null;\n } | null;\n spacing?: string | null;\n } | null;\n ctas?: HeroCtaInput[];\n};\n\nexport type HeroMedia = Media;\n\nexport const heroBlockDefinition: SystemBlockDefinition<HeroContent> = {\n manifest: heroManifest,\n};\n","import type { BlockManifest } from \"../manifest\";\nimport type { TipTapNode } from \"../manifest/richTextSchema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { bodyCopyFragment, composeFragments } from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst bodyCopyComposition = composeFragments([{ fragment: bodyCopyFragment }]);\n\nexport const bodyTextManifest: BlockManifest = createBlockManifest({\n id: \"block.bodyText\",\n title: \"Body Text\",\n titleSource: \"heading\",\n category: \"content\",\n component: \"body.text.basic\",\n\n fragments: [\n { fragment: bodyCopyFragment, fieldPriority: 0 },\n ],\n\n layout: styledSection({\n children: bodyCopyComposition.layout,\n spacing: \"medium\",\n }),\n\n description: \"Simple text block with optional heading and alignment controls.\",\n tags: [\"text\", \"paragraph\", \"content\", \"copy\", \"article\", \"writing\", \"rich-text\"],\n icon: \"Type\",\n styleTokens: {\n spacing: \"md\",\n },\n});\n\nexport type BodyTextManifest = typeof bodyTextManifest;\n\nexport type BodyTextAlignment = \"left\" | \"center\";\n\nexport type BodyTextContent = {\n heading?: string | null;\n body: TipTapNode;\n alignment?: BodyTextAlignment | null;\n};\n\nexport const bodyTextBlockDefinition: SystemBlockDefinition<BodyTextContent> = {\n manifest: bodyTextManifest,\n};\n","import { z } from \"zod\";\n\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section } from \"../node/builder\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n blogFeaturedPostFragment,\n} from \"../fragments\";\n\nconst composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);\nconst fields = fieldSchema.array().parse(composition.fields);\n\nconst blogPostLayout: NodeDefinition = section(\n { background: \"background/base\", className: \"px-6 py-12\" },\n [...composition.layout],\n);\n\nexport const blogPostManifest: BlockManifest = {\n name: \"block.blogPost\",\n version: \"0.1.0\",\n title: \"Blog post\",\n description: \"Highlights a single blog post with title, image, and excerpt.\",\n component: \"blog.post.highlight\",\n fields,\n slots: [],\n styleTokens: {\n background: \"surface\",\n typography: \"body\",\n spacing: \"md\",\n },\n behaviours: {\n supportsThemeSwitching: true,\n inlineEditing: false,\n animation: false,\n paletteHidden: false,\n },\n category: \"blog\",\n contentTypes: [\"post\"],\n tags: [\"blog\", \"post\", \"featured\", \"highlight\", \"article\", \"single\"],\n icon: \"FileText\",\n layout: blogPostLayout,\n};\n\nexport type BlogPostContent = {\n title?: string | null;\n postSlug?: string | null;\n};\n\nexport const blogPostDataSchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string(),\n path: z.string(),\n excerpt: z.string().nullable().optional(),\n image: z\n .object({\n url: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n })\n .nullable()\n .optional(),\n publishedAt: z.string().nullable().optional(),\n});\n\nexport type BlogPostData = z.infer<typeof blogPostDataSchema>;\n\n// Component is provided by the default factory; view model is purely content + loader data\n\nexport const blogPostBlockDefinition: SystemBlockDefinition<BlogPostContent> = {\n manifest: blogPostManifest,\n dataSchemas: { post: blogPostDataSchema.optional() },\n dataLoaders: buildFragmentDataLoaders(composition),\n};\n","import { fieldSchema } from '../manifest/schema'\nimport type { BlockManifest } from '../manifest'\nimport type { NodeDefinition } from '../node'\nimport { el, section, stack, text, bind, repeat, type NodeModifier } from '../node/builder'\nimport type { SystemBlockDefinition } from '../registry'\nimport { createBlockManifest } from '../defineBlock'\nimport { backgroundColorStyle, borderColorStyle, textColorStyle, mergeStyles } from '../../theme/utils/colorStyles'\n\ntype BlogPlaceholderCard = {\n title: string\n summary: string\n}\n\nexport type BlogPlaceholderContent = {\n eyebrow?: string | null\n heading?: string | null\n description?: string | null\n cards?: BlogPlaceholderCard[]\n note?: string | null\n}\n\nconst grid = (\n props?: Record<string, unknown> | null,\n children?: Array<NodeDefinition | null | undefined> | null,\n ...mods: NodeModifier[]\n) => el('grid', props ?? undefined, children ?? undefined, ...mods)\n\nconst blogPlaceholderLayout: NodeDefinition = section(\n { background: 'surface', className: 'px-6 py-16 sm:py-20 md:py-24' }, // Semantic: comfortable + extra md padding\n [\n stack(\n { gap: 'sm', align: 'center', className: 'mx-auto max-w-3xl text-center' },\n [\n text(\n { as: 'p', className: 'text-sm font-semibold uppercase tracking-wide', style: textColorStyle('mutedText') },\n bind('content.eyebrow'),\n ),\n text(\n { as: 'h2', className: 'text-3xl font-semibold tracking-tight sm:text-4xl', style: textColorStyle('text') },\n bind('content.heading'),\n ),\n text(\n { className: 'text-base leading-relaxed', style: textColorStyle('mutedText') },\n bind('content.description'),\n ),\n ],\n ),\n grid(\n { className: 'mt-10 gap-6 sm:grid-cols-2 lg:grid-cols-3' },\n [\n stack(\n {\n gap: 'sm',\n className: 'rounded-xl border p-6 text-left shadow-sm',\n style: mergeStyles(borderColorStyle('border/60'), backgroundColorStyle('background')),\n },\n [\n text(\n { as: 'h3', className: 'text-lg font-semibold', style: textColorStyle('text') },\n bind('item.title'),\n ),\n text(\n { className: 'text-sm leading-relaxed', style: textColorStyle('mutedText') },\n bind('item.summary'),\n ),\n ],\n repeat('content.cards', 'item', { limit: 6 }),\n ),\n ],\n ),\n stack(\n { gap: 'xs', align: 'center', className: 'mt-10 text-center' },\n [\n text({ className: 'text-sm', style: textColorStyle('mutedText') }, bind('content.note')),\n ],\n ),\n ],\n)\n\nexport const blogPlaceholderManifest: BlockManifest = createBlockManifest({\n id: 'block.blogPlaceholder',\n title: 'Blog placeholder',\n category: 'blog',\n component: 'blog.placeholder',\n\n // Skip section styles - this block has custom layout with fixed styling\n skipSectionStyles: true,\n\n // Custom fields for blog placeholder content\n additionalFields: [\n fieldSchema.parse({\n id: 'eyebrow',\n type: 'text',\n label: 'Eyebrow',\n description: 'Short label displayed above the heading.',\n }),\n fieldSchema.parse({\n id: 'heading',\n type: 'text',\n label: 'Heading',\n required: true,\n }),\n fieldSchema.parse({\n id: 'description',\n type: 'text',\n label: 'Description',\n multiline: true,\n }),\n fieldSchema.parse({\n id: 'cards',\n type: 'repeater',\n label: 'Placeholder cards',\n itemLabel: 'Placeholder',\n schema: {\n fields: [\n { id: 'title', type: 'text', label: 'Title', required: true },\n { id: 'summary', type: 'text', label: 'Summary', multiline: true, required: true },\n ],\n },\n }),\n fieldSchema.parse({\n id: 'note',\n type: 'text',\n label: 'Footer note',\n description: 'Optional helper text displayed below the cards.',\n }),\n ],\n\n layout: blogPlaceholderLayout,\n\n description: 'Starter layout shown until real blog content replaces it.',\n styleTokens: {\n background: 'surface',\n spacing: 'lg',\n },\n paletteHidden: true,\n})\n\nexport const blogPlaceholderBlockDefinition: SystemBlockDefinition<BlogPlaceholderContent> = {\n manifest: blogPlaceholderManifest,\n}\n","import { z } from \"zod\";\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section, stack, text, bind, when } from \"../node/builder\";\nimport { backgroundColorStyle, borderColorStyle, textColorStyle, mergeStyles } from \"../../theme/utils/colorStyles\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n blogListGridFragment,\n blogListStackFragment,\n} from \"../fragments\";\nimport { createBlockManifest } from \"../defineBlock\";\n\n// Compose both layout fragments WITHOUT scopes\nconst gridComposition = composeFragments([{ fragment: blogListGridFragment }]);\nconst stackComposition = composeFragments([{ fragment: blogListStackFragment }]);\n\n// Build unified field list\n// Combine fields from both fragments, removing duplicates\nconst fragmentFields = [...gridComposition.fields, ...stackComposition.fields];\nconst uniqueFields = fragmentFields.filter((field, index, self) =>\n index === self.findIndex((f) => f.id === field.id)\n);\n\n// Build layout with conditional rendering\nconst blogListingLayout: NodeDefinition = section(\n { background: \"background/base\", className: \"px-6 py-12 sm:py-16 md:py-20\" }, // Semantic: medium + extra md padding\n [\n // Grid layout (conditionally shown)\n ...gridComposition.layout.map((node) => ({\n ...node,\n $when: {\n when: { from: \"content.layout\" },\n equals: \"grid\",\n },\n })),\n\n // Stack layout (conditionally shown)\n ...stackComposition.layout.map((node) => ({\n ...node,\n $when: {\n when: { from: \"content.layout\" },\n equals: \"stack\",\n },\n })),\n\n // Empty state (shown when no posts)\n stack(\n {\n gap: \"sm\",\n className: \"mx-auto max-w-3xl rounded-xl border border-dashed p-12 text-center\",\n style: mergeStyles(\n borderColorStyle(\"neutral-300\"),\n backgroundColorStyle(\"neutral-50\"),\n ),\n },\n [\n text(\n { as: \"p\", className: \"text-base\", style: textColorStyle(\"neutral-500\") },\n bind(\"content.emptyMessage\", { fallback: \"No posts published yet.\" }),\n ),\n ],\n when(\"data.posts\", { not: true }),\n ),\n ],\n);\n\nexport const blogListingManifest: BlockManifest = createBlockManifest({\n id: \"block.blogListing\",\n title: \"Blog listing\",\n category: \"blog\",\n component: \"blog.listing\",\n\n // Skip section styles - this block has layout-specific fields instead\n skipSectionStyles: true,\n\n // Custom fields for blog listing configuration\n additionalFields: [\n fieldSchema.parse({\n id: \"layout\",\n type: \"select\",\n label: \"Layout\",\n description: \"Choose how blog posts are displayed.\",\n defaultValue: \"grid\",\n options: [\n { value: \"grid\", label: \"Grid (cards)\" },\n { value: \"stack\", label: \"Stack (vertical list)\" },\n ],\n }),\n // Grid-specific column field (only visible when layout is grid)\n ...gridComposition.fields\n .filter((f) => f.id === \"columns\")\n .map((f) => ({\n ...f,\n ui: {\n ...f.ui,\n visibleWhen: { field: \"layout\", equals: \"grid\" },\n },\n })),\n fieldSchema.parse({\n id: \"postsPerPage\",\n type: \"select\",\n label: \"Posts to display\",\n description: \"Number of posts to show on this page.\",\n defaultValue: \"12\",\n options: [\n { value: \"6\", label: \"6 posts\" },\n { value: \"12\", label: \"12 posts\" },\n { value: \"24\", label: \"24 posts\" },\n { value: \"48\", label: \"48 posts\" },\n ],\n }),\n // Shared toggle fields from fragments (now unscoped)\n ...uniqueFields.filter((f) => ['showImages', 'showExcerpts', 'showDates'].includes(f.id)),\n fieldSchema.parse({\n id: \"readMoreText\",\n type: \"text\",\n label: \"Read more text\",\n description: \"Text for the read more button/link.\",\n defaultValue: \"Read more →\",\n maxLength: 40,\n }),\n fieldSchema.parse({\n id: \"readMoreVariant\",\n type: \"select\",\n label: \"Read more style\",\n description: \"Visual style for the read more button.\",\n defaultValue: \"link\",\n options: [\n { value: \"link\", label: \"Link (minimal)\" },\n { value: \"primary\", label: \"Primary button\" },\n { value: \"secondary\", label: \"Secondary button\" },\n { value: \"outline\", label: \"Outline button\" },\n ],\n }),\n fieldSchema.parse({\n id: \"emptyMessage\",\n type: \"text\",\n label: \"Empty state message\",\n description: \"Message shown when no posts are available.\",\n defaultValue: \"No posts published yet.\",\n maxLength: 200,\n }),\n ],\n\n layout: blogListingLayout,\n\n description: \"Display a collection of blog posts in grid or stack layout.\",\n contentTypes: [\"post\"],\n tags: [\"blog\", \"posts\", \"articles\", \"news\", \"archive\", \"listing\", \"feed\", \"index\"],\n icon: \"Newspaper\",\n styleTokens: {\n background: \"surface\",\n spacing: \"lg\",\n },\n});\n\nexport type BlogListingContent = {\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | \"4\" | null;\n postsPerPage?: \"6\" | \"12\" | \"24\" | \"48\" | null;\n showImages?: boolean | null;\n showExcerpts?: boolean | null;\n showDates?: boolean | null;\n readMoreText?: string | null;\n readMoreVariant?: \"link\" | \"primary\" | \"secondary\" | \"outline\" | null;\n emptyMessage?: string | null;\n};\n\nexport type BlogPostListEntry = {\n id: string;\n slug: string;\n path: string;\n title: string;\n excerpt: string | null;\n publishedAt: string | null;\n updatedAt: string;\n status: string;\n image?: {\n url: string;\n alt?: string;\n } | null;\n};\n\nconst blogPostListEntrySchema = z.object({\n id: z.string(),\n slug: z.string(),\n path: z.string(),\n title: z.string(),\n excerpt: z.string().nullable().optional(),\n publishedAt: z.string().nullable().optional(),\n updatedAt: z.string(),\n status: z.string(),\n image: z\n .object({\n url: z.string(),\n alt: z.string().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const blogListingBlockDefinition: SystemBlockDefinition<BlogListingContent> = {\n manifest: blogListingManifest,\n dataSchemas: {\n posts: z.array(blogPostListEntrySchema).optional(),\n },\n dataLoaders: buildFragmentDataLoaders(gridComposition), // Use grid composition for loader config (same for both)\n};\n","import type { SystemBlockDefinition } from \"../registry\";\nimport type { Media } from \"../../lib/media\";\nimport type { GradientConfig } from \"../../theme/gradients\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport {\n composeFragments,\n ctaCopyFragment,\n ctaRowFragment,\n} from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst ctaComposition = composeFragments([\n { fragment: ctaCopyFragment },\n { fragment: ctaRowFragment },\n]);\n\nexport const ctaFullManifest: BlockManifest = createBlockManifest({\n id: \"block.ctaFull\",\n title: \"Full-width CTA\",\n category: \"marketing\",\n\n fragments: [\n { fragment: ctaCopyFragment, fieldPriority: 0 },\n { fragment: ctaRowFragment, fieldPriority: 2 },\n ],\n\n layout: styledSection({\n children: sectionContainer(ctaComposition.layout, {\n gap: \"md\",\n className: \"relative text-center\",\n }),\n }),\n\n description: \"Centered call to action with optional background image.\",\n tags: [\"cta\", \"call-to-action\", \"button\", \"conversion\", \"action\", \"sign-up\", \"get-started\"],\n icon: \"Target\",\n});\n\nexport type CtaFullContent = {\n eyebrow?: string | null;\n title: string;\n content?: unknown;\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image';\n color?: string | null;\n gradient?: GradientConfig | null;\n image?: Media | null;\n textColor?: string | null;\n } | null;\n spacing?: string | null;\n } | null;\n ctas?: Array<{ label?: string | null; href?: string | null }>;\n};\n\nexport const ctaFullBlockDefinition: SystemBlockDefinition<CtaFullContent> = {\n manifest: ctaFullManifest,\n};\n","import { z } from \"zod\";\n\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { NodeDefinition } from \"../node\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { section } from \"../node/builder\";\nimport { sectionContainer } from \"../node/fragments\";\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n formCopyFragment,\n formEmbedFragment,\n} from \"../fragments\";\n\nconst formComposition = composeFragments([\n { fragment: formCopyFragment },\n { fragment: formEmbedFragment },\n]);\n\nconst formLayout: NodeDefinition = section(\n { background: \"surface\", className: \"px-6 py-12\" },\n [sectionContainer(formComposition.layout, { gap: \"lg\" })],\n);\n\nconst fields = fieldSchema.array().parse(formComposition.fields);\nconst dataLoaders = buildFragmentDataLoaders(formComposition);\n\nexport const formManifest: BlockManifest = {\n name: \"block.form\",\n version: \"0.1.0\",\n title: \"Form\",\n titleSource: \"title\",\n description: \"Renders a saved form definition with server-side submit.\",\n component: \"form.block\",\n fields,\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"form\", \"contact\", \"input\", \"submit\", \"fields\", \"signup\", \"lead-capture\"],\n icon: \"FormInput\",\n layout: formLayout,\n};\n\n/**\n * Rich text document structure (ProseMirror format)\n */\nexport type RichTextDoc = {\n type: 'doc';\n content?: Array<{\n type: string;\n content?: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n [key: string]: unknown;\n }>;\n};\n\nexport type FormBlockContent = {\n title?: string | null;\n intro?: RichTextDoc | null;\n formId: string;\n submitLabel?: string | null;\n successMessage?: string | null;\n};\n\nexport const formDataSchema = z.object({\n id: z.string(),\n siteId: z.string(),\n userId: z.string(),\n name: z.string(),\n slug: z.string(),\n schemaJson: z.any(),\n settingsJson: z.any().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport type FormData = z.infer<typeof formDataSchema>;\n\nexport const formBlockDefinition: SystemBlockDefinition<FormBlockContent> = {\n manifest: formManifest,\n dataSchemas: { form: formDataSchema.optional() },\n dataLoaders,\n};\n","import type { SystemBlockDefinition } from \"../registry\";\nimport type { BlockManifest } from \"../manifest/schema\";\nimport { sectionContainer } from \"../node/fragments\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { composeFragments, faqHeadingFragment, faqAccordionFragment } from \"../fragments\";\n\n// Compose fragments to get layout nodes\nconst faqComposition = composeFragments([\n { fragment: faqHeadingFragment, fieldPriority: 0 },\n { fragment: faqAccordionFragment, fieldPriority: 1 },\n]);\n\nexport const faqManifest: BlockManifest = createBlockManifest({\n id: \"block.faq\",\n title: \"FAQ\",\n titleSource: \"title\",\n category: \"content\",\n\n fragments: [\n { fragment: faqHeadingFragment, fieldPriority: 0 },\n { fragment: faqAccordionFragment, fieldPriority: 1 },\n ],\n\n layout: styledSection({\n children: sectionContainer(faqComposition.layout, {\n gap: \"xl\",\n className: \"w-full\",\n }),\n }),\n\n description: \"Accordion of frequently asked questions and answers.\",\n tags: [\"faq\", \"questions\", \"answers\", \"help\", \"support\", \"accordion\", \"q&a\"],\n icon: \"HelpCircle\",\n});\n\nexport type FaqItem = {\n question: string;\n answer: unknown;\n};\n\nexport type FaqContent = {\n eyebrow?: string | null;\n title?: string | null;\n description?: unknown;\n items?: FaqItem[] | null;\n};\n\nexport const faqBlockDefinition: SystemBlockDefinition<FaqContent> = {\n manifest: faqManifest,\n};\n","import type { TransformDefinition } from \"./registry/core\";\nimport { uppercaseTransform, fallbackTransform, dateFormatShort } from \"./registry/formatting\";\nimport {\n headerNavLinkClassTransform,\n headingClassFromAlignment,\n bodyClassFromAlignment,\n stackAlignFromAlignment,\n conditionalClassTransform,\n} from \"./registry/ui\";\nimport {\n maxWidthClassTransform,\n headerRootClassTransform,\n footerRootClassTransform,\n headerRootStyleTransform,\n footerRootStyleTransform,\n} from \"./registry/layout\";\nimport { mediaFromUrl } from \"./registry/media\";\n\n// Canonical map of built-in transforms. Keys are the literal IDs.\n// Note: ui.buttonClass removed - styling now handled by CSS generation at build time\nexport const transformDefinitions = {\n \"string.uppercase\": uppercaseTransform,\n \"value.fallback\": fallbackTransform,\n \"ui.headerNavLinkClass\": headerNavLinkClassTransform,\n \"layout.maxWidthClass\": maxWidthClassTransform,\n \"layout.headerRootClass\": headerRootClassTransform,\n \"layout.footerRootClass\": footerRootClassTransform,\n \"layout.headerRootStyle\": headerRootStyleTransform,\n \"layout.footerRootStyle\": footerRootStyleTransform,\n \"ui.headingClassFromAlignment\": headingClassFromAlignment,\n \"ui.bodyClassFromAlignment\": bodyClassFromAlignment,\n \"ui.stackAlignFromAlignment\": stackAlignFromAlignment,\n \"ui.conditionalClass\": conditionalClassTransform,\n \"media.fromUrl\": mediaFromUrl,\n \"date.formatShort\": dateFormatShort,\n} as const;\n\nexport type TransformId = keyof typeof transformDefinitions;\n\ntype OptionsOf<T> = T extends TransformDefinition<infer O> ? O : never;\n\nexport type TransformOptionsById = {\n [K in TransformId]: OptionsOf<(typeof transformDefinitions)[K]>;\n};\n\nexport type TransformStep<K extends TransformId = TransformId> = {\n id: K;\n options?: TransformOptionsById[K];\n};\n\n// Convenience helpers for declaring transform pipelines in a type‑safe way.\nexport function tx<K extends TransformId>(id: K, options?: TransformOptionsById[K]): TransformStep<K> {\n return { id, options };\n}\n\nexport function pipe<T extends readonly TransformStep[]>(...steps: T): T {\n return steps;\n}\n\nexport function bindProp(\n from: string,\n opts?: { transforms?: readonly TransformStep[] | TransformStep[]; fallback?: unknown; pick?: \"value\" | \"collection\" | \"context\" }\n) {\n return {\n $bind: {\n from,\n ...(opts?.transforms ? { transforms: [...opts.transforms] } : {}),\n ...(opts?.fallback !== undefined ? { fallback: opts.fallback } : {}),\n ...(opts?.pick ? { pick: opts.pick } : {}),\n },\n } as const;\n}\n","import type { BlockManifest } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { bind, headerSection, inline, link, media, stack, text, when, props as withProps } from '../node/builder'\nimport { navRow, ctaButton } from '../node/fragments'\nimport type { SystemBlockDefinition } from '../registry'\nimport { bindProp, pipe, tx } from '../transforms/typed'\nimport { createBlockManifest } from '../defineBlock'\nimport { backgroundColorStyle, borderColorStyle, mergeStyles, textColorStyle } from '../../theme/utils/colorStyles'\n\nconst logoRow = link(\n { href: '/', className: 'header-logo flex min-w-0 items-center gap-3 no-underline transition-opacity hover:opacity-80' },\n [\n media({ className: 'h-10 w-auto transition-all duration-300 [.header-scrolled_&]:h-8' }, when('content.logo'), bind('content.logo')),\n text({ as: 'span', className: 'header-logo-text truncate text-lg font-semibold' }, bind('site.title', { fallback: 'Your Site' })),\n ],\n)\n\nconst centeredLogoRow = link(\n { href: '/', className: 'header-logo flex items-center justify-center gap-3 text-center no-underline transition-opacity hover:opacity-80' },\n [\n media({ className: 'h-12 w-auto transition-all duration-300 [.header-scrolled_&]:h-10' }, when('content.logo'), bind('content.logo')),\n text({ as: 'span', className: 'header-logo-text text-xl font-semibold' }, bind('site.title', { fallback: 'Your Site' })),\n ],\n)\n\n// Shared nav row configuration\nconst createNavRow = (className: string, align: 'start' | 'center' | 'end' = 'end') =>\n navRow({\n className: `${className} header-nav-row`,\n align,\n linkClassName: 'header-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n })\n\nconst headerCta = ctaButton({\n basePath: 'menu.ctaItem',\n whenPath: 'menu.ctaItem.label',\n variantPath: 'menu.ctaItem.variant',\n linkPath: 'menu.ctaItem.link',\n className: 'header-cta btn-sm hidden md:inline-flex ml-6',\n})\n\n// Classic variant: logo left, nav right (horizontal inline layout)\nconst classicLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full items-center gap-6 py-4' })),\n fallback: 'container mx-auto flex w-full items-center gap-6 px-6 py-4',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'classic' }),\n)\n\n// Centered variant: logo centered, nav below (vertical stack layout)\nconst centeredLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full flex-col items-center gap-5 py-6 text-center' })),\n fallback: 'container mx-auto flex w-full flex-col items-center gap-5 px-6 py-6 text-center',\n }),\n },\n [\n centeredLogoRow,\n createNavRow('flex flex-wrap justify-center gap-x-6 gap-y-3', 'center'),\n ],\n when('$root.theme.header.variant', { equals: 'centered' }),\n)\n\n// Transparent variant: logo left, nav right (horizontal inline, transparent bg)\nconst transparentLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full items-center gap-6 py-4' })),\n fallback: 'container mx-auto flex w-full items-center gap-6 px-6 py-4',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'transparent' }),\n)\n\n// Floating variant: absolute positioned with padding + rounded container\nconst floatingLayout = inline(\n {\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'header-floating-container absolute left-1/2 top-4 flex w-[calc(100%-2rem)] max-w-7xl -translate-x-1/2 items-center gap-6 px-6 py-3' })),\n fallback: 'header-floating-container absolute left-1/2 top-4 flex w-[calc(100%-2rem)] max-w-7xl -translate-x-1/2 items-center gap-6 px-6 py-3',\n }),\n align: 'center',\n },\n [\n logoRow,\n createNavRow('ml-auto hidden md:flex gap-6'),\n headerCta,\n ],\n when('$root.theme.header.variant', { equals: 'floating' }),\n)\n\n// Editorial variant: centered logo with nav split left/right or large centered logo with nav below\nconst editorialLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: bindProp('$root.theme.header.maxWidth', {\n transforms: pipe(tx('layout.maxWidthClass', { base: 'flex w-full flex-col items-center gap-6 py-6 text-center' })),\n fallback: 'container mx-auto flex w-full flex-col items-center gap-6 px-6 py-6 text-center',\n }),\n },\n [\n centeredLogoRow,\n createNavRow('flex flex-wrap justify-center gap-x-8 gap-y-3', 'center'),\n ],\n when('$root.theme.header.variant', { equals: 'editorial' }),\n)\n\n// Root section contains all variant layouts\nconst headerLayout: NodeDefinition = headerSection(\n {\n background: 'background/base',\n className: bindProp('$root.theme.header', {\n transforms: pipe(tx('layout.headerRootClass')),\n fallback: 'header-root z-40 w-full border-b transition-theme backdrop-blur',\n }),\n style: bindProp('$root.theme.header', {\n transforms: pipe(tx('layout.headerRootStyle')),\n fallback: mergeStyles(\n backgroundColorStyle('surface'),\n textColorStyle('text'),\n borderColorStyle('border'),\n ),\n }),\n },\n [\n classicLayout,\n centeredLayout,\n transparentLayout,\n floatingLayout,\n editorialLayout,\n ],\n withProps({\n 'data-site-header': 'true',\n }),\n)\n\nexport const siteHeaderManifest: BlockManifest = createBlockManifest({\n id: 'block.siteHeader',\n title: 'Site Header',\n category: 'layout',\n component: 'site.header.default',\n\n // Skip section styles - this block uses theme-based styling\n skipSectionStyles: true,\n\n layout: headerLayout,\n\n description: 'Site-wide header with logo, navigation, and optional CTA.',\n styleTokens: {\n spacing: 'sm',\n },\n paletteHidden: true,\n})\n\nexport type SiteHeaderManifest = typeof siteHeaderManifest\n\nexport type SiteHeaderVariant = 'classic' | 'centered' | 'transparent' | 'floating' | 'editorial'\n\n// Header has no content fields - variant comes from theme.header.variant\n// CTA is handled via navigation items with is_cta flag\nexport type SiteHeaderContent = Record<string, never>\n\nexport const siteHeaderBlockDefinition: SystemBlockDefinition<SiteHeaderContent> = {\n manifest: siteHeaderManifest,\n}\n","import { navRow } from '../node/fragments'\nimport type { BlockManifest } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { bind, inline, section, stack, text, when } from '../node/builder'\nimport type { SystemBlockDefinition } from '../registry'\nimport type { LinkValue } from '../types/link'\nimport {\n composeFragments,\n materializeFragment,\n footerBottomTextFragment,\n footerLinkGroupsFragment,\n} from '../fragments'\nimport { createBlockManifest } from '../defineBlock'\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../theme/utils/colorStyles'\n\nconst _footerFragments = composeFragments([\n { fragment: footerLinkGroupsFragment, fieldPriority: 0 },\n { fragment: footerBottomTextFragment, fieldPriority: 1 },\n])\n\nconst linkGroupsLayout = (): NodeDefinition[] =>\n materializeFragment({ fragment: footerLinkGroupsFragment }).layout\n\nconst bottomTextLayout = (): NodeDefinition[] =>\n materializeFragment({ fragment: footerBottomTextFragment }).layout\n\nconst simpleFooterLayout = stack(\n {\n gap: 'md',\n align: 'center',\n className: {\n $bind: {\n from: '$root.theme.footer.maxWidth',\n transforms: [\n {\n id: 'layout.maxWidthClass',\n options: { base: 'flex w-full flex-col items-center gap-4 py-10 text-center' },\n },\n ],\n fallback: 'container mx-auto flex w-full flex-col items-center gap-4 px-6 py-10 text-center',\n },\n },\n },\n [\n navRow({\n align: 'center',\n className: 'flex flex-wrap justify-center gap-x-6 gap-y-3',\n linkClassName: 'footer-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n }),\n ...bottomTextLayout(),\n ],\n when('$root.theme.footer.variant', { equals: 'simple' }),\n)\n\nconst columnsFooterLayout = stack(\n {\n gap: 'xl',\n align: 'start',\n className: {\n $bind: {\n from: '$root.theme.footer.maxWidth',\n transforms: [\n {\n id: 'layout.maxWidthClass',\n options: { base: 'flex w-full flex-col gap-10 py-12' },\n },\n ],\n fallback: 'container mx-auto flex w-full flex-col gap-10 px-6 py-12',\n },\n },\n },\n [\n ...linkGroupsLayout(),\n inline(\n { className: 'flex w-full flex-wrap items-center justify-between gap-4' },\n [\n text({ as: 'span', className: 'text-sm font-semibold', style: textColorStyle('text') }, bind('site.title', { fallback: 'Your Site' })),\n navRow({\n className: 'flex flex-wrap justify-end gap-x-6 gap-y-3',\n align: 'end',\n linkClassName: 'footer-nav-link inline-flex items-center px-4 py-2 text-sm font-medium transition-theme-standard',\n }),\n ],\n ),\n ...bottomTextLayout(),\n ],\n when('$root.theme.footer.variant', { equals: 'columns' }),\n)\n\nconst footerLayout: NodeDefinition = section(\n {\n background: 'background/base',\n className: {\n $bind: {\n from: '$root.theme.footer',\n transforms: [\n {\n id: 'layout.footerRootClass',\n },\n ],\n fallback: 'w-full border-t transition-theme',\n },\n },\n style: {\n $bind: {\n from: '$root.theme.footer',\n transforms: [\n {\n id: 'layout.footerRootStyle',\n },\n ],\n fallback: mergeStyles(\n backgroundColorStyle('surface'),\n textColorStyle('text'),\n borderColorStyle('border'),\n ),\n },\n },\n },\n [\n simpleFooterLayout,\n columnsFooterLayout,\n ],\n)\n\nexport const siteFooterManifest: BlockManifest = createBlockManifest({\n id: 'block.siteFooter',\n title: 'Site Footer',\n category: 'layout',\n component: 'site.footer.default',\n\n // Use fragments for link groups and bottom text\n fragments: [\n { fragment: footerLinkGroupsFragment, fieldPriority: 0 },\n { fragment: footerBottomTextFragment, fieldPriority: 1 },\n ],\n\n // Skip section styles - this block uses theme-based styling\n skipSectionStyles: true,\n\n layout: footerLayout,\n\n description: 'Site-wide footer with navigation links and optional columns.',\n styleTokens: {\n spacing: 'md',\n },\n paletteHidden: true,\n})\n\nexport type SiteFooterVariant = 'simple' | 'columns'\n\nexport type SiteFooterLink = {\n label: string\n link: LinkValue | null\n target?: string | null\n rel?: string | null\n}\n\nexport type SiteFooterLinkGroup = {\n title?: string | null\n links: SiteFooterLink[]\n}\n\nexport type SiteFooterContent = {\n bottomText?: unknown\n linkGroups?: SiteFooterLinkGroup[]\n}\n\nexport const siteFooterBlockDefinition: SystemBlockDefinition<SiteFooterContent> = {\n manifest: siteFooterManifest,\n}\n","import type { Media } from '../../lib/media'\nimport type { BlockManifest } from '../manifest/schema'\nimport { fieldSchema } from '../manifest/schema'\nimport type { NodeDefinition } from '../node'\nimport { section } from '../node/builder'\nimport { sectionContainer } from '../node/fragments'\nimport { backgroundLayer } from '../node/fragments/backgroundLayer'\nimport { sectionStylesField } from '../fields/boxStyles'\nimport type { SystemBlockDefinition } from '../registry'\nimport {\n composeFragments,\n buildFragmentDataLoaders,\n testimonialsHeadingFragment,\n testimonialsCarouselFragment,\n} from '../fragments'\n\n// Background layer nodes (replaces testimonialsBackgroundFragment)\nconst testimonialsBackgroundNodes = backgroundLayer(\"_sectionStyles.background\", {\n imageClassName: \"absolute inset-0 -z-10 h-full w-full object-cover opacity-50\",\n})\n\nconst testimonialsContent = composeFragments([\n { fragment: testimonialsHeadingFragment },\n { fragment: testimonialsCarouselFragment },\n])\n\nconst testimonialsLayout: NodeDefinition = section(\n { background: 'background/base', className: 'px-6 py-16 sm:py-20 md:py-24' }, // Semantic: comfortable + extra md padding\n [\n ...testimonialsBackgroundNodes,\n sectionContainer(\n [...testimonialsContent.layout],\n { gap: 'xl', className: 'relative' },\n ),\n ],\n)\n\nconst fields = fieldSchema.array().parse([\n ...testimonialsContent.fields.filter((field) => field.id === 'heading' || field.id === 'subheading'),\n ...testimonialsContent.fields.filter(\n (field) => field.id === 'slidesToShow' || field.id === 'transition' || field.id === 'maxEntries',\n ),\n sectionStylesField({\n id: '_sectionStyles',\n label: 'Section styles',\n }),\n])\n\nconst dataLoaders = buildFragmentDataLoaders(testimonialsContent)\n\nexport const testimonialsManifest: BlockManifest = {\n name: 'block.testimonials',\n version: '0.1.0',\n title: 'Testimonials',\n description: 'Carousel of customer testimonials with optional background styling.',\n component: 'testimonials.carousel',\n fields,\n slots: [],\n styleTokens: {\n background: 'surface',\n typography: 'body',\n spacing: 'lg',\n },\n behaviours: {\n supportsThemeSwitching: true,\n inlineEditing: false,\n animation: true,\n paletteHidden: false,\n },\n category: 'marketing',\n tags: ['testimonials', 'reviews', 'quotes', 'feedback', 'social-proof', 'customers', 'carousel'],\n icon: 'MessageSquareQuote',\n layout: testimonialsLayout,\n}\n\nexport type TestimonialsBlockContent = {\n heading?: string | null\n subheading?: string | null\n slidesToShow?: number | string | null\n transition?: 'slide' | 'fade' | null\n maxEntries?: number | string | null\n _sectionStyles?: {\n background?: {\n type: 'color' | 'gradient' | 'image'\n color?: string | null\n gradient?: import('../../theme/gradients').GradientConfig | null\n image?: Media | null\n textColor?: string | null\n } | null\n spacing?: string | null\n } | null\n}\n\nexport type TestimonialEntryContent = {\n name?: string | null\n jobTitle?: string | null\n company?: string | null\n headshot?: {\n url?: string | null\n alt?: string | null\n } | null\n body?: unknown\n}\n\nexport type TestimonialEntry = {\n id: string\n slug: string | null\n path: string\n publishedAt: string | null\n status: string\n excerpt: string\n routeId: string | null\n content: TestimonialEntryContent\n}\n\nexport const testimonialsBlockDefinition: SystemBlockDefinition<TestimonialsBlockContent> = {\n manifest: testimonialsManifest,\n dataLoaders,\n}\n","import { cardFragment, columnContentFragment, fragmentsToRepeaterField } from '../fragments';\nimport { fieldSchema, type BlockManifest } from '../manifest/schema';\nimport type { SystemBlockDefinition } from '../registry';\nimport { createBlockManifest } from '../defineBlock';\nimport { typeBasedLayout } from '../node';\nimport { el } from '../node/builder';\nimport { styledSection, sectionContainer } from '../node/fragments';\n\nconst columnsLayout = styledSection({\n children: sectionContainer(\n [\n el('grid',\n {\n cols: {\n $bind: {\n from: 'content.columns',\n transforms: [{ id: 'array.length' }],\n },\n },\n gap: { $bind: { from: 'content.gap' } },\n },\n [\n {\n type: 'stack',\n props: { gap: 'md', className: 'h-full' },\n children: typeBasedLayout(\n {\n card: cardFragment.layout,\n columnContent: columnContentFragment.layout,\n },\n { itemName: 'column' }\n ),\n $repeat: {\n collection: { from: 'content.columns' },\n itemName: 'column',\n },\n },\n ]\n ),\n ],\n { gap: 'md' }\n ),\n spacing: 'medium',\n});\n\nexport const columnsManifest: BlockManifest = createBlockManifest({\n id: 'block.columns',\n title: 'Columns',\n category: 'layout',\n component: 'columns',\n\n // Custom fields for columns configuration\n additionalFields: [\n fieldSchema.parse({\n id: 'gap',\n type: 'select',\n label: 'Gap between columns',\n defaultValue: 'lg',\n options: [\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n ],\n }),\n fragmentsToRepeaterField(\n 'columns',\n 'Columns',\n {\n card: cardFragment,\n columnContent: columnContentFragment,\n },\n {\n minItems: 0,\n maxItems: 4,\n itemLabel: 'Column',\n description: 'Add or remove columns (up to 4)',\n }\n ),\n ],\n\n layout: columnsLayout,\n\n description: 'Multi-column layout with customizable content per column',\n tags: ['columns', 'grid', 'layout', 'flexible', 'multi-column'],\n icon: 'Columns',\n styleTokens: {\n spacing: 'lg',\n },\n});\n\nexport type ColumnsContent = {\n gap?: 'sm' | 'md' | 'lg';\n columns: Array<\n | {\n _type: 'card';\n media?: unknown;\n aspectRatio?: '16/9' | '4/3' | '1/1' | '3/4' | 'auto';\n title: string;\n body?: unknown;\n ctas?: Array<unknown>;\n variant?: string;\n }\n | {\n _type: 'columnContent';\n items: Array<{ _type: string; [key: string]: unknown }>;\n }\n >;\n};\n\nexport const columnsBlockDefinition: SystemBlockDefinition<ColumnsContent> = {\n manifest: columnsManifest,\n};\n","import { z } from \"zod\";\n\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { text, richText, bookingForm } from \"../node/builder\";\nimport { bind, when } from \"../node/builder\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { sectionContainer } from \"../node/fragments\";\n\n/**\n * Appointment Booking Block (v2.0.0)\n *\n * This block creates a multi-step booking flow that references a booking form\n * for customer information fields. The booking form determines which services\n * can be booked and contains all field customization.\n *\n * Flow:\n * 1. Service/Resource Selection (if form allows multiple services)\n * 2. Date & Time Slot Picker (hardcoded, not customizable)\n * 3. Customer Information (from booking form fields)\n * 4. Confirmation\n *\n * The block no longer uses fragment composition - instead it dynamically\n * loads the booking form definition and renders its fields.\n */\nexport const appointmentBookingManifest: BlockManifest = {\n name: \"block.appointment-booking\",\n version: \"2.0.0\", // Major version bump - breaking change from v1\n title: \"Appointment Booking\",\n titleSource: \"heading\",\n description: \"Multi-step appointment booking with customizable form fields\",\n component: \"appointment-booking.block\",\n fields: [\n {\n id: \"formId\",\n type: \"reference\",\n label: \"Booking Form\",\n description: \"Select which booking form to use for collecting customer information\",\n required: true,\n referenceKind: \"bookingForm\",\n allowManualEntry: false,\n },\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Main heading shown at the top of the booking flow\",\n required: false,\n multiline: false,\n defaultValue: \"Book an Appointment\",\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n description: \"Optional description or instructions for users\",\n required: false,\n format: \"markdown\",\n },\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"booking\", \"appointment\", \"calendar\", \"scheduling\", \"reservation\"],\n icon: \"Calendar\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // The booking form component - loads booking form by ID and renders multi-step flow\n bookingForm({\n siteId: { $bind: { from: \"$root.siteId\" } },\n formId: { $bind: { from: \"content.formId\" } },\n form: { $bind: { from: \"data.form\" } },\n services: { $bind: { from: \"data.services\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type AppointmentBookingContent = {\n formId: string; // NEW - reference to booking form\n heading?: string | null;\n description?: unknown; // Rich text\n // REMOVED: serviceId, resourceId, submitLabel, successMessage, timezone\n // These now come from the booking form settings\n};\n\nexport const availabilityDataSchema = z.object({\n slots: z.array(z.object({\n startAt: z.string(),\n endAt: z.string(),\n resourceId: z.string(),\n })),\n});\n\nexport type AvailabilityData = z.infer<typeof availabilityDataSchema>;\n\nexport const appointmentBookingBlockDefinition: SystemBlockDefinition<AppointmentBookingContent> = {\n manifest: appointmentBookingManifest,\n dataSchemas: { availability: availabilityDataSchema.optional() },\n dataLoaders: {\n form: {\n endpoint: 'getPublicFormById',\n params: {\n formId: { $bind: { from: 'content.formId' } },\n },\n mode: 'server',\n },\n services: {\n endpoint: 'getPublicBookingServices',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from 'zod';\n\n/**\n * Zod schema for venue data\n */\nexport const eventVenueSchema = z.object({\n id: z.string(),\n name: z.string(),\n address: z.string().nullable(),\n});\n\n/**\n * Zod schema for public event data\n */\nexport const publicEventSchema = z.object({\n id: z.string(),\n seriesId: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n slug: z.string(),\n startsAt: z.string(),\n endsAt: z.string(),\n capacity: z.number().nullable(),\n registeredCount: z.number(),\n availableSpots: z.number().nullable(),\n venue: eventVenueSchema.nullable(),\n});\n\n/**\n * Schema for an array of public events\n */\nexport const publicEventsArraySchema = z.array(publicEventSchema);\n","import type { BlockManifest } from '../../../manifest/schema';\n\ntype ManifestField = BlockManifest['fields'][number];\n\n/**\n * Shared card styling fields for event blocks\n */\nexport const cardStylingFields: ManifestField[] = [\n {\n id: 'cardVariant',\n type: 'select',\n label: 'Card style',\n description: 'Choose a card style from your theme',\n required: false,\n multiple: false,\n defaultValue: 'default',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'variant1', label: 'Variant 1' },\n { value: 'variant2', label: 'Variant 2' },\n ],\n },\n {\n id: 'buttonVariant',\n type: 'select',\n label: 'Button style',\n description: 'Choose a button style from your theme',\n required: false,\n multiple: false,\n defaultValue: 'primary',\n options: [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n { value: 'link', label: 'Link' },\n ],\n },\n {\n id: 'buttonText',\n type: 'text',\n label: 'Button text',\n description: 'Text for the event action button',\n required: false,\n multiline: false,\n defaultValue: 'View event',\n maxLength: 40,\n },\n];\n\n/**\n * Shared event display option fields\n */\nexport const eventDisplayFields: ManifestField[] = [\n {\n id: 'showVenue',\n type: 'boolean',\n label: 'Show venue',\n description: 'Display venue name and address',\n required: false,\n defaultValue: true,\n },\n {\n id: 'showCapacity',\n type: 'boolean',\n label: 'Show available spots',\n description: 'Display remaining capacity',\n required: false,\n defaultValue: true,\n },\n];\n\n/**\n * Empty state field for when no events are available\n */\nexport const emptyStateField: ManifestField = {\n id: 'emptyMessage',\n type: 'text',\n label: 'Empty state message',\n description: 'Message when no upcoming events',\n required: false,\n multiline: false,\n defaultValue: 'No upcoming events scheduled.',\n maxLength: 200,\n};\n\n/**\n * Section heading and description fields\n */\nexport const sectionHeaderFields = (defaultHeading: string): ManifestField[] => [\n {\n id: 'heading',\n type: 'text',\n label: 'Heading',\n description: 'Main heading for the events section',\n required: false,\n multiline: false,\n defaultValue: defaultHeading,\n },\n {\n id: 'description',\n type: 'richText',\n label: 'Description',\n description: 'Optional introductory text',\n required: false,\n format: 'markdown',\n },\n];\n\n/**\n * Layout selection field with grid/stack options\n */\nexport const layoutField: ManifestField = {\n id: 'layout',\n type: 'select',\n label: 'Layout',\n description: 'Choose how events are displayed',\n required: false,\n multiple: false,\n defaultValue: 'grid',\n options: [\n { value: 'grid', label: 'Grid (cards)' },\n { value: 'stack', label: 'Stack (vertical list)' },\n ],\n};\n\n/**\n * Column count field for grid layouts (conditional on layout='grid')\n */\nexport const columnsField = (options: string[] = ['2', '3', '4']): ManifestField => ({\n id: 'columns',\n type: 'select',\n label: 'Columns',\n description: 'Number of columns in grid layout',\n required: false,\n multiple: false,\n defaultValue: '3',\n ui: {\n visibleWhen: { field: 'layout', equals: 'grid' },\n },\n options: options.map((n) => ({ value: n, label: `${n} columns` })),\n});\n","import { z } from \"zod\";\n\nimport type { BlockManifest } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { text, richText, eventRegistration } from \"../node/builder\";\nimport { bind, when } from \"../node/builder\";\nimport { styledSection } from \"../node/fragments/styledSection\";\nimport { sectionContainer } from \"../node/fragments\";\n// Import shared event types\nimport { publicEventSchema, type PublicEvent } from \"./events/shared\";\n\n/**\n * Event Registration Block\n *\n * Multi-step registration form for events. Can be placed on event content type\n * templates or standalone pages.\n *\n * Features:\n * - Occurrence selection (if not pre-selected via URL)\n * - Ticket quantity selection\n * - Attendee information form\n * - Confirmation display\n *\n * Context:\n * - When placed on an event template with occurrence URL (/events/yoga/2025-01-15),\n * the occurrence is pre-selected from route context\n * - When on event template without occurrence, shows occurrence picker\n * - When standalone, shows full event + occurrence picker\n */\nexport const eventRegistrationManifest: BlockManifest = {\n name: \"block.event-registration\",\n version: \"1.0.0\",\n title: \"Event Registration\",\n titleSource: \"heading\",\n description: \"Multi-step event registration form\",\n component: \"event-registration.block\",\n fields: [\n {\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Main heading for the registration form\",\n required: false,\n multiline: false,\n defaultValue: \"Register for this event\",\n },\n {\n id: \"description\",\n type: \"richText\",\n label: \"Description\",\n description: \"Optional introductory text\",\n required: false,\n format: \"markdown\",\n },\n {\n id: \"maxTickets\",\n type: \"select\",\n label: \"Max tickets per registration\",\n description: \"Maximum tickets a person can register for\",\n required: false,\n multiple: false,\n defaultValue: \"5\",\n options: [\n { value: \"1\", label: \"1 ticket\" },\n { value: \"2\", label: \"2 tickets\" },\n { value: \"3\", label: \"3 tickets\" },\n { value: \"5\", label: \"5 tickets\" },\n { value: \"10\", label: \"10 tickets\" },\n ],\n },\n {\n id: \"showVenue\",\n type: \"boolean\",\n label: \"Show venue\",\n description: \"Display venue information\",\n required: false,\n defaultValue: true,\n },\n {\n id: \"showCapacity\",\n type: \"boolean\",\n label: \"Show available spots\",\n description: \"Display remaining capacity\",\n required: false,\n defaultValue: true,\n },\n {\n id: \"successMessage\",\n type: \"text\",\n label: \"Success message\",\n description: \"Message shown after successful registration\",\n required: false,\n multiline: true,\n defaultValue: \"Thank you for registering! Check your email for confirmation details.\",\n maxLength: 500,\n },\n {\n id: \"waitlistMessage\",\n type: \"text\",\n label: \"Waitlist message\",\n description: \"Message when added to waitlist\",\n required: false,\n multiline: true,\n defaultValue: \"You've been added to the waitlist. We'll notify you if a spot opens up.\",\n maxLength: 500,\n },\n {\n id: \"buttonText\",\n type: \"text\",\n label: \"Submit button text\",\n description: \"Text for the registration submit button\",\n required: false,\n multiline: false,\n defaultValue: \"Complete Registration\",\n maxLength: 40,\n },\n {\n id: \"buttonVariant\",\n type: \"select\",\n label: \"Button style\",\n description: \"Choose a button style from your theme\",\n required: false,\n multiple: false,\n defaultValue: \"primary\",\n options: [\n { value: \"primary\", label: \"Primary\" },\n { value: \"secondary\", label: \"Secondary\" },\n { value: \"outline\", label: \"Outline\" },\n ],\n },\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"registration\", \"booking\", \"form\", \"signup\"],\n icon: \"ClipboardList\",\n layout: [\n styledSection({\n spacing: \"spacious\",\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event registration form component\n eventRegistration({\n // Site context for API calls\n siteId: { $bind: { from: \"$root.siteId\" } },\n // Pre-selected occurrence from route context (if available)\n occurrenceContext: { $bind: { from: \"$root.occurrenceContext\" } },\n // Event data from content entry context (if on event template)\n contentEntry: { $bind: { from: \"$root.contentEntry\" } },\n // Content configuration\n maxTickets: { $bind: { from: \"content.maxTickets\", fallback: \"5\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n successMessage: { $bind: { from: \"content.successMessage\" } },\n waitlistMessage: { $bind: { from: \"content.waitlistMessage\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"Complete Registration\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n // Event data from loader\n events: { $bind: { from: \"data.events\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n }),\n ],\n};\n\nexport type EventRegistrationContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n maxTickets?: \"1\" | \"2\" | \"3\" | \"5\" | \"10\" | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n successMessage?: string | null;\n waitlistMessage?: string | null;\n buttonText?: string | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | null;\n};\n\n// Re-export PublicEvent type for convenience\nexport type { PublicEvent };\n\n/**\n * Schema for occurrence context from route resolver\n *\n * Flat structure passed from PageRenderer.$root.occurrenceContext\n */\nexport const occurrenceContextSchema = z.object({\n /** Unique identifier for this occurrence */\n id: z.string(),\n /** The event series this occurrence belongs to */\n seriesId: z.string(),\n /** ISO 8601 datetime when the occurrence starts */\n startsAt: z.string(),\n /** ISO 8601 datetime when the occurrence ends */\n endsAt: z.string(),\n /** Override capacity for this specific occurrence (null = use series default) */\n capacityOverride: z.number().nullable().optional(),\n /** Field-level overrides: { title?, description?, venueId?, etc. } */\n overrides: z.record(z.string(), z.unknown()).nullable().optional(),\n}).nullable();\n\nexport type OccurrenceContext = z.infer<typeof occurrenceContextSchema>;\n\nexport const eventRegistrationBlockDefinition: SystemBlockDefinition<EventRegistrationContent> = {\n manifest: eventRegistrationManifest,\n dataSchemas: {\n events: z.array(publicEventSchema).optional(),\n occurrenceContext: occurrenceContextSchema.optional(),\n },\n dataLoaders: {\n // Load events for occurrence selection\n // This is needed when block is on a standalone page or event template without occurrence in URL\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: '50', // Get more events for selection\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n layoutField,\n columnsField,\n cardStylingFields,\n eventDisplayFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Spotlight Block\n *\n * Displays a simple list of 1-6 featured upcoming events.\n * Ideal for homepages or landing pages to highlight upcoming events.\n *\n * Features:\n * - Server-side only (static, no interactivity)\n * - Grid or stack layout\n * - Configurable event count (1-6)\n * - Theme-aware card and button styling\n */\nexport const eventSpotlightManifest: BlockManifest = {\n name: \"block.event-spotlight\",\n version: \"1.0.0\",\n title: \"Event Spotlight\",\n titleSource: \"heading\",\n description: \"Feature a few upcoming events on your homepage\",\n component: \"event-spotlight.block\",\n fields: [\n ...sectionHeaderFields(\"Upcoming Events\"),\n {\n id: \"maxEvents\",\n type: \"select\",\n label: \"Events to display\",\n description: \"Number of events to show\",\n required: false,\n multiple: false,\n defaultValue: \"3\",\n options: [\n { value: \"1\", label: \"1 event\" },\n { value: \"2\", label: \"2 events\" },\n { value: \"3\", label: \"3 events\" },\n { value: \"4\", label: \"4 events\" },\n { value: \"5\", label: \"5 events\" },\n { value: \"6\", label: \"6 events\" },\n ],\n },\n layoutField,\n columnsField([\"2\", \"3\"]),\n ...cardStylingFields,\n ...eventDisplayFields,\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"featured\", \"homepage\", \"spotlight\", \"upcoming\"],\n icon: \"Star\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event spotlight component\n el(\"event-spotlight\", {\n events: { $bind: { from: \"data.events\" } },\n layout: { $bind: { from: \"content.layout\", fallback: \"grid\" } },\n columns: { $bind: { from: \"content.columns\", fallback: \"3\" } },\n cardVariant: { $bind: { from: \"content.cardVariant\", fallback: \"default\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"View event\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventSpotlightContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n maxEvents?: \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | null;\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | null;\n cardVariant?: \"default\" | \"variant1\" | \"variant2\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n buttonText?: string | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n emptyMessage?: string | null;\n};\n\nexport const eventSpotlightBlockDefinition: SystemBlockDefinition<EventSpotlightContent> = {\n manifest: eventSpotlightManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: { $bind: { from: 'content.maxEvents', fallback: '3' } },\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n layoutField,\n columnsField,\n cardStylingFields,\n eventDisplayFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Listing Block\n *\n * Displays a paginated list of events with a \"load more\" button.\n * Ideal for dedicated events pages showing all upcoming events.\n *\n * Features:\n * - Server-side initial load\n * - Client-side \"load more\" pagination\n * - Grid or stack layout\n * - Configurable initial load and page sizes\n * - Theme-aware card and button styling\n */\nexport const eventListingManifest: BlockManifest = {\n name: \"block.event-listing\",\n version: \"1.0.0\",\n title: \"Event Listing\",\n titleSource: \"heading\",\n description: \"Paginated list of all upcoming events\",\n component: \"event-listing.block\",\n fields: [\n ...sectionHeaderFields(\"All Events\"),\n layoutField,\n columnsField([\"2\", \"3\", \"4\"]),\n {\n id: \"eventsPerPage\",\n type: \"select\",\n label: \"Events per page\",\n description: \"Number of events to load at a time\",\n required: false,\n multiple: false,\n defaultValue: \"12\",\n options: [\n { value: \"6\", label: \"6 events\" },\n { value: \"12\", label: \"12 events\" },\n { value: \"24\", label: \"24 events\" },\n ],\n },\n {\n id: \"loadMoreText\",\n type: \"text\",\n label: \"Load more button text\",\n description: \"Text for the pagination button\",\n required: false,\n multiline: false,\n defaultValue: \"Load more events\",\n maxLength: 40,\n },\n ...cardStylingFields,\n ...eventDisplayFields,\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"listing\", \"paginated\", \"archive\", \"all-events\"],\n icon: \"List\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event listing component with pagination\n el(\"event-listing\", {\n events: { $bind: { from: \"data.events\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n layout: { $bind: { from: \"content.layout\", fallback: \"grid\" } },\n columns: { $bind: { from: \"content.columns\", fallback: \"3\" } },\n eventsPerPage: { $bind: { from: \"content.eventsPerPage\", fallback: \"12\" } },\n loadMoreText: { $bind: { from: \"content.loadMoreText\", fallback: \"Load more events\" } },\n cardVariant: { $bind: { from: \"content.cardVariant\", fallback: \"default\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n buttonText: { $bind: { from: \"content.buttonText\", fallback: \"View event\" } },\n showVenue: { $bind: { from: \"content.showVenue\" } },\n showCapacity: { $bind: { from: \"content.showCapacity\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventListingContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n layout?: \"grid\" | \"stack\" | null;\n columns?: \"2\" | \"3\" | \"4\" | null;\n eventsPerPage?: \"6\" | \"12\" | \"24\" | null;\n loadMoreText?: string | null;\n cardVariant?: \"default\" | \"variant1\" | \"variant2\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n buttonText?: string | null;\n showVenue?: boolean | null;\n showCapacity?: boolean | null;\n emptyMessage?: string | null;\n};\n\nexport const eventListingBlockDefinition: SystemBlockDefinition<EventListingContent> = {\n manifest: eventListingManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n limit: { $bind: { from: 'content.eventsPerPage', fallback: '12' } },\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import type { BlockManifest } from \"../../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../../registry\";\nimport { text, richText, el } from \"../../node/builder\";\nimport { bind, when } from \"../../node/builder\";\nimport { styledSection } from \"../../node/fragments/styledSection\";\nimport { sectionContainer } from \"../../node/fragments\";\nimport {\n publicEventsArraySchema,\n sectionHeaderFields,\n cardStylingFields,\n emptyStateField,\n} from \"./shared\";\n\n/**\n * Event Calendar Block\n *\n * Displays events in an interactive month or week calendar grid.\n * Users can navigate between time periods to view events.\n *\n * Features:\n * - Month and week calendar views\n * - Interactive navigation (prev/next/today)\n * - Pre-fetches 3 months for smooth navigation\n * - Configurable week start day\n * - Theme-aware styling\n */\nexport const eventCalendarManifest: BlockManifest = {\n name: \"block.event-calendar\",\n version: \"2.0.0\",\n title: \"Event Calendar\",\n titleSource: \"heading\",\n description: \"Interactive calendar showing events by month or week\",\n component: \"event-calendar.block\",\n fields: [\n ...sectionHeaderFields(\"Event Calendar\"),\n {\n id: \"calendarView\",\n type: \"select\",\n label: \"Default view\",\n description: \"Initial calendar view\",\n required: false,\n multiple: false,\n defaultValue: \"month\",\n options: [\n { value: \"month\", label: \"Month\" },\n { value: \"week\", label: \"Week\" },\n ],\n },\n {\n id: \"startOfWeek\",\n type: \"select\",\n label: \"Week starts on\",\n description: \"First day of the week\",\n required: false,\n multiple: false,\n defaultValue: \"monday\",\n options: [\n { value: \"sunday\", label: \"Sunday\" },\n { value: \"monday\", label: \"Monday\" },\n ],\n },\n ...cardStylingFields.filter(f => f.id === 'buttonVariant'), // Only button variant for calendar\n emptyStateField,\n ],\n slots: [],\n styleTokens: { background: \"surface\", typography: \"body\", spacing: \"md\" },\n behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },\n category: \"interactive\",\n tags: [\"events\", \"calendar\", \"month\", \"week\", \"schedule\", \"interactive\"],\n icon: \"CalendarDays\",\n layout: [\n styledSection({\n children: sectionContainer([\n // Optional heading\n text(\n { as: \"h2\", size: \"2xl\", weight: \"bold\" },\n bind(\"content.heading\"),\n when(\"content.heading\")\n ),\n\n // Optional description\n richText(\n {},\n bind(\"content.description\"),\n when(\"content.description\")\n ),\n\n // Event calendar grid component\n el(\"event-calendar\", {\n events: { $bind: { from: \"data.events\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n calendarView: { $bind: { from: \"content.calendarView\", fallback: \"month\" } },\n startOfWeek: { $bind: { from: \"content.startOfWeek\", fallback: \"monday\" } },\n buttonVariant: { $bind: { from: \"content.buttonVariant\", fallback: \"primary\" } },\n emptyMessage: { $bind: { from: \"content.emptyMessage\" } },\n }),\n ], {\n gap: \"lg\",\n }),\n spacing: \"spacious\",\n }),\n ],\n};\n\nexport type EventCalendarContent = {\n heading?: string | null;\n description?: unknown; // Rich text\n calendarView?: \"month\" | \"week\" | null;\n startOfWeek?: \"sunday\" | \"monday\" | null;\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"link\" | null;\n emptyMessage?: string | null;\n};\n\nexport const eventCalendarBlockDefinition: SystemBlockDefinition<EventCalendarContent> = {\n manifest: eventCalendarManifest,\n dataSchemas: {\n events: publicEventsArraySchema.optional(),\n },\n dataLoaders: {\n events: {\n endpoint: 'listPublicEvents',\n params: {\n siteId: { $bind: { from: '$root.siteId' } },\n // Pre-fetch 3 months of events (server-side)\n // The client will use the same API to fetch more as user navigates\n limit: 100, // High limit for calendar view\n stage: { $bind: { from: '$root.previewStage', fallback: 'published' } },\n },\n mode: 'server',\n },\n },\n};\n","import { z } from \"zod\";\nimport { fieldSchema } from \"../manifest/schema\";\nimport type { BlockManifest, FieldDefinition } from \"../manifest/schema\";\nimport type { SystemBlockDefinition } from \"../registry\";\nimport { stack, text, bind, when, repeat, el } from \"../node/builder\";\nimport { styledSection, sectionContainer } from \"../node/fragments\";\nimport { createBlockManifest } from \"../defineBlock\";\nimport { textColorStyle } from \"../../theme/utils/colorStyles\";\n\n/**\n * Embed block - enables embedding content entries from any content type.\n *\n * This block is designed to be overridden by SDK sites. The default layout\n * is a simple placeholder that shows basic entry information. Sites should\n * use blockOverrides to provide custom renderers based on content.layout.\n *\n * Example SDK usage:\n * ```tsx\n * <Page\n * {...pageData}\n * blockOverrides={{\n * embed: EmbedRenderer,\n * }}\n * />\n * ```\n *\n * The EmbedRenderer receives:\n * - content: EmbedContent with heading, layout, contentType, etc.\n * - data: { entries: ContentEntry[] }\n * - theme: Theme tokens\n */\n\n// Additional fields for the embed block\nconst embedFields: FieldDefinition[] = [\n // Section heading\n fieldSchema.parse({\n id: \"heading\",\n type: \"text\",\n label: \"Heading\",\n description: \"Optional section title displayed above the content.\",\n required: false,\n maxLength: 120,\n }),\n fieldSchema.parse({\n id: \"subheading\",\n type: \"richText\",\n label: \"Subheading\",\n description: \"Optional section description below the heading.\",\n required: false,\n format: \"markdown\",\n ui: { variant: \"limited\" },\n }),\n\n // Content source\n fieldSchema.parse({\n id: \"contentType\",\n type: \"contentTypeSelect\",\n label: \"Content type\",\n description: \"Select the content type to embed.\",\n required: true,\n filter: \"all\",\n }),\n fieldSchema.parse({\n id: \"mode\",\n type: \"select\",\n label: \"Selection mode\",\n description: \"How to select which entries to display.\",\n required: true,\n defaultValue: \"query\",\n options: [\n { value: \"query\", label: \"Query (automatic)\" },\n { value: \"manual\", label: \"Manual (pick entries)\" },\n ],\n }),\n\n // Query mode options\n fieldSchema.parse({\n id: \"limit\",\n type: \"select\",\n label: \"Limit\",\n description: \"Maximum number of entries to display.\",\n defaultValue: \"10\",\n options: [\n { value: \"3\", label: \"3 entries\" },\n { value: \"6\", label: \"6 entries\" },\n { value: \"10\", label: \"10 entries\" },\n { value: \"20\", label: \"20 entries\" },\n { value: \"50\", label: \"50 entries\" },\n ],\n ui: {\n visibleWhen: { field: \"mode\", equals: \"query\" },\n },\n }),\n fieldSchema.parse({\n id: \"orderBy\",\n type: \"select\",\n label: \"Order by\",\n description: \"How to sort the entries.\",\n defaultValue: \"order\",\n options: [\n { value: \"order\", label: \"Custom order field\" },\n { value: \"newest\", label: \"Newest first\" },\n { value: \"oldest\", label: \"Oldest first\" },\n { value: \"title\", label: \"Title (A-Z)\" },\n ],\n ui: {\n visibleWhen: { field: \"mode\", equals: \"query\" },\n },\n }),\n\n // Manual mode options - entry references\n fieldSchema.parse({\n id: \"entries\",\n type: \"repeater\",\n label: \"Entries\",\n description: \"Select specific entries to display.\",\n required: false,\n itemLabel: \"Entry\",\n minItems: 1,\n maxItems: 20,\n schema: {\n fields: [\n {\n id: \"entryId\",\n type: \"entryPicker\",\n label: \"Entry\",\n description: \"Select a content entry to embed.\",\n required: true,\n ui: {\n contentTypeField: \"contentType\",\n },\n },\n ],\n },\n ui: {\n visibleWhen: { field: \"mode\", equals: \"manual\" },\n },\n }),\n\n // Layout selection - SDK sites can provide custom options via blockFieldOptions\n fieldSchema.parse({\n id: \"layout\",\n type: \"select\",\n label: \"Layout\",\n description: \"Select a layout style for displaying the embedded content.\",\n defaultValue: \"list\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n { value: \"carousel\", label: \"Carousel\" },\n ],\n ui: {\n widget: \"sdkSelect\", // Use SDK-aware widget for site-specific options\n },\n }),\n\n // Empty state\n fieldSchema.parse({\n id: \"emptyMessage\",\n type: \"text\",\n label: \"Empty state message\",\n description: \"Message shown when no entries are available.\",\n defaultValue: \"No entries found.\",\n maxLength: 200,\n }),\n];\n\n// Default layout - a simple placeholder that sites should override\nconst embedLayout = styledSection({\n children: sectionContainer([\n // Heading\n text(\n {\n as: \"h2\",\n className: \"text-3xl font-bold\",\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"content.heading\"),\n when(\"content.heading\"),\n ),\n\n // Subheading\n el(\n \"richText\",\n {\n className: \"mt-2 text-lg\",\n style: textColorStyle(\"neutral-600\"),\n },\n undefined,\n bind(\"content.subheading\"),\n when(\"content.subheading\"),\n ),\n\n // Default entry rendering - a simple list\n // Sites should override this with custom layouts via blockOverrides\n // Outer stack provides gap between repeated entry cards\n stack(\n { gap: \"md\", className: \"mt-8\" },\n [\n // Entry card (repeated for each entry)\n stack(\n {\n gap: \"sm\",\n className: \"rounded-lg border border-neutral-200 bg-white p-4 shadow-sm\",\n },\n [\n text(\n {\n as: \"h3\",\n className: \"text-lg font-semibold\",\n style: textColorStyle(\"neutral-900\"),\n },\n bind(\"entry.title\"),\n ),\n text(\n {\n as: \"p\",\n className: \"text-sm\",\n style: textColorStyle(\"neutral-500\"),\n },\n bind(\"entry.slug\"),\n when(\"entry.slug\"),\n ),\n ],\n repeat(\"data.entries\", \"entry\"),\n ),\n ],\n when(\"data.entries\"),\n ),\n\n // Empty state\n stack(\n {\n gap: \"sm\",\n className: \"py-12 text-center\",\n },\n [\n text(\n {\n as: \"p\",\n className: \"text-base\",\n style: textColorStyle(\"neutral-400\"),\n },\n bind(\"content.emptyMessage\", { fallback: \"No entries found.\" }),\n ),\n ],\n when(\"data.entries\", { not: true }),\n ),\n ]),\n spacing: \"comfortable\",\n});\n\nexport const embedManifest: BlockManifest = createBlockManifest({\n id: \"block.embed\",\n title: \"Embed Content\",\n category: \"content\",\n titleSource: \"heading\",\n\n additionalFields: embedFields,\n layout: embedLayout,\n\n description:\n \"Embed content entries from any content type. Sites provide custom layouts via block overrides.\",\n tags: [\"embed\", \"content\", \"dynamic\", \"collection\", \"entries\", \"listing\"],\n icon: \"LayoutList\",\n styleTokens: {\n spacing: \"lg\",\n },\n});\n\nexport type EmbedContent = {\n // Section heading\n heading?: string | null;\n subheading?: unknown; // TipTap richText\n\n // Content source\n contentType: string;\n mode: \"query\" | \"manual\";\n\n // Query mode options\n limit?: string | null;\n orderBy?: \"order\" | \"newest\" | \"oldest\" | \"title\" | null;\n\n // Manual mode options\n entries?: Array<{ entryId: string }> | null;\n\n // Layout\n layout?: string | null;\n\n // Empty state\n emptyMessage?: string | null;\n};\n\nexport type EmbedEntry = {\n id: string;\n title: string;\n slug?: string | null;\n content?: Record<string, unknown>;\n publishedAt?: string | null;\n};\n\nconst embedEntrySchema = z.object({\n id: z.string(),\n title: z.string(),\n slug: z.string().nullable().optional(),\n content: z.record(z.string(), z.unknown()).optional(),\n publishedAt: z.string().nullable().optional(),\n});\n\nexport const embedBlockDefinition: SystemBlockDefinition<EmbedContent> = {\n manifest: embedManifest,\n dataSchemas: {\n entries: z.array(embedEntrySchema).optional(),\n },\n dataLoaders: {\n entries: {\n endpoint: \"listPublishedEntries\",\n params: {\n type: { $bind: { from: \"contentType\" } },\n siteId: { $bind: { from: \"$root.siteId\" } },\n limit: { $bind: { from: \"limit\", fallback: \"10\" } },\n orderBy: { $bind: { from: \"orderBy\", fallback: \"order\" } },\n stage: { $bind: { from: \"$root.previewStage\", fallback: \"published\" } },\n // Manual mode entry IDs - loader should handle this\n entryIds: { $bind: { from: \"entries\" } },\n mode: { $bind: { from: \"mode\" } },\n },\n mode: \"server\",\n },\n },\n};\n","import { registerBlockDefinition, type SystemBlockDefinition } from \"../registry\";\nimport { heroBlockDefinition } from \"./hero\";\nimport { bodyTextBlockDefinition } from \"./body-text\";\nimport { blogPostBlockDefinition } from \"./blog-post\";\nimport { blogPlaceholderBlockDefinition } from \"./blog-placeholder\";\nimport { blogListingBlockDefinition } from \"./blog-listing\";\nimport { ctaFullBlockDefinition } from \"./cta-full\";\nimport { formBlockDefinition } from \"./form\";\nimport { faqBlockDefinition } from \"./faq\";\nimport { siteHeaderBlockDefinition } from \"./site-header\";\nimport { siteFooterBlockDefinition } from \"./site-footer\";\nimport { testimonialsBlockDefinition } from \"./testimonials\";\nimport { columnsBlockDefinition } from \"./columns\";\nimport { appointmentBookingBlockDefinition } from \"./appointment-booking\";\nimport { eventRegistrationBlockDefinition } from \"./event-registration\";\nimport {\n eventSpotlightBlockDefinition,\n eventListingBlockDefinition,\n eventCalendarBlockDefinition,\n} from \"./events\";\nimport { embedBlockDefinition } from \"./embed\";\n\nexport const systemBlockDefinitions: SystemBlockDefinition<any>[] = [\n heroBlockDefinition,\n bodyTextBlockDefinition,\n blogPostBlockDefinition,\n blogPlaceholderBlockDefinition,\n blogListingBlockDefinition,\n ctaFullBlockDefinition,\n formBlockDefinition,\n faqBlockDefinition,\n siteHeaderBlockDefinition,\n siteFooterBlockDefinition,\n testimonialsBlockDefinition,\n columnsBlockDefinition,\n appointmentBookingBlockDefinition,\n eventRegistrationBlockDefinition,\n // Event display blocks (3 specialized blocks)\n eventSpotlightBlockDefinition,\n eventListingBlockDefinition,\n eventCalendarBlockDefinition,\n // Content embedding\n embedBlockDefinition,\n];\n\nlet defaultsRegistered = false;\n\nexport function ensureSystemBlockDefinitionsRegistered(): void {\n if (defaultsRegistered) {\n return;\n }\n defaultsRegistered = true;\n for (const definition of systemBlockDefinitions) {\n registerBlockDefinition(definition);\n }\n}\n\nexport function resetSystemBlockDefinitionRegistration(): void {\n defaultsRegistered = false;\n}\n\nexport * from \"./hero\";\nexport * from \"./body-text\";\nexport * from \"./blog-post\";\nexport * from \"./blog-placeholder\";\nexport * from \"./blog-listing\";\nexport * from \"./cta-full\";\nexport * from \"./form\";\nexport * from \"./faq\";\nexport * from \"./site-header\";\nexport * from \"./site-footer\";\nexport * from \"./testimonials\";\nexport * from \"./columns\";\nexport * from \"./appointment-booking\";\nexport * from \"./event-registration\";\nexport * from \"./events\";\nexport * from \"./embed\";\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport type { BlockManifest } from \"./manifest\";\nimport { registerManifest } from \"./manifest\";\nimport { ensureSystemBlockDefinitionsRegistered, resetSystemBlockDefinitionRegistration } from \"./blocks\";\nimport type { ResolverContext } from \"./runtime\";\nimport type { ThemeTokens } from \"./theme\";\nimport type { TransformRegistry } from \"./transforms\";\nimport type { Theme } from \"../theme/schema\";\n\nexport type BlockRenderOptions = Omit<ResolverContext, \"viewModel\">;\n\n// Unified render options used by helpers (prefer this over per-block options)\nexport type RenderOptions = Partial<BlockRenderOptions> & {\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n themeConfig?: Theme;\n};\n\nexport type SystemBlockRenderer<TContent = Record<string, unknown>> = (\n content: TContent,\n options?: RenderOptions\n) => ReactNode;\n\n// Legacy loader cache types removed with new registry adoption\n\nexport type SystemBlockComponentProps<\n TContent = Record<string, unknown>\n> = {\n content: TContent;\n theme?: ThemeTokens;\n themeConfig?: Theme;\n registry?: ResolverContext[\"registry\"];\n transforms?: TransformRegistry;\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n // Optional base path for binding-derived editor paths, e.g., `blocks.<blockId>.`\n pathBase?: string;\n // Optional block metadata for editor-aware registries\n blockId?: string | null;\n blockKind?: string;\n // Optional template bindings for reverse field mapping (entry editing)\n blockBindings?: Record<string, unknown>;\n // Optional fragment registry for fragment renderer nodes\n fragmentRegistry?: ResolverContext[\"fragmentRegistry\"];\n};\n\nexport type SystemBlockComponent<\n TContent = Record<string, unknown>\n> = ComponentType<\n SystemBlockComponentProps<TContent>\n>;\n\nexport type BlockDataLoader = {\n endpoint: string;\n params: Record<string, unknown>;\n mode?: 'server' | 'client';\n};\n\nexport type SystemBlockDefinition<\n TContent = Record<string, unknown>\n> = {\n manifest: BlockManifest;\n normalizeContent?: (content: unknown) => TContent;\n dataSchemas?: Record<string, z.ZodTypeAny>;\n dataLoaders?: Record<string, BlockDataLoader>;\n};\n\ntype BlockDefinitionMap = Map<string, SystemBlockDefinition<any>>;\n\nexport type BlockDescriptor = {\n name: string;\n title: string;\n description?: string;\n category?: string;\n contentTypes?: string[];\n tags?: string[];\n icon?: string;\n definition: SystemBlockDefinition<any>;\n /** Where this block comes from: 'system' for built-in blocks, 'sdk' for custom SDK blocks */\n source?: 'system' | 'sdk';\n};\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@riverbankcms/blocks/system/definitions\");\n\ninterface BlockRegistryGlobal extends Record<PropertyKey, unknown> {\n [REGISTRY_SYMBOL]?: BlockDefinitionMap;\n}\n\nconst globalScope = globalThis as BlockRegistryGlobal;\n\nif (!globalScope[REGISTRY_SYMBOL]) {\n globalScope[REGISTRY_SYMBOL] = new Map();\n}\n\nconst blockStore = globalScope[REGISTRY_SYMBOL]!;\n\nfunction ensureDefaults(): void {\n ensureSystemBlockDefinitionsRegistered();\n}\n\nexport function registerBlockDefinition<TContent>(\n definition: SystemBlockDefinition<TContent>,\n): SystemBlockDefinition<TContent> {\n registerManifest(definition.manifest);\n blockStore.set(definition.manifest.name, definition);\n return definition;\n}\n\nexport function getBlockDefinition(name: string): SystemBlockDefinition<any> | undefined {\n ensureDefaults();\n return blockStore.get(name);\n}\n\nexport function hasBlockDefinition(name: string): boolean {\n ensureDefaults();\n return blockStore.has(name);\n}\n\nexport function listBlockDefinitions(): SystemBlockDefinition<any>[] {\n ensureDefaults();\n return Array.from(blockStore.values());\n}\n\nexport function listBlockDescriptors(): BlockDescriptor[] {\n return listBlockDefinitions()\n .filter((d) => d.manifest.behaviours?.paletteHidden !== true)\n .map((definition) => ({\n name: definition.manifest.name,\n title: definition.manifest.title,\n description: definition.manifest.description,\n category: definition.manifest.category,\n contentTypes: definition.manifest.contentTypes,\n tags: definition.manifest.tags,\n icon: definition.manifest.icon,\n definition,\n source: 'system' as const,\n }));\n}\n\nexport function clearBlockDefinitions(): void {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env === \"production\") {\n return;\n }\n blockStore.clear();\n resetSystemBlockDefinitionRegistration();\n}\n","/**\n * System block kind identifiers.\n * Single source of truth - derive types from this array.\n *\n * Note: Block IDs use mixed naming conventions (camelCase and kebab-case)\n * for historical reasons. New blocks should prefer camelCase.\n */\nexport const SYSTEM_BLOCK_KINDS = [\n // Layout blocks\n 'block.hero',\n 'block.columns',\n 'block.ctaFull',\n 'block.singleButton',\n // Content blocks\n 'block.bodyText',\n 'block.faq',\n 'block.testimonials',\n 'block.embed',\n // Blog blocks\n 'block.blogPost',\n 'block.blogPlaceholder',\n 'block.blogListing',\n // Site structure blocks\n 'block.siteHeader',\n 'block.siteFooter',\n // Form/booking blocks\n 'block.form',\n 'block.appointment-booking',\n 'block.event-registration',\n // Event display blocks\n 'block.event-spotlight',\n 'block.event-listing',\n 'block.event-calendar',\n] as const;\n\n/** System block kind type derived from the const array */\nexport type SystemBlockKind = (typeof SYSTEM_BLOCK_KINDS)[number];\n\n/** Custom block kinds follow the `custom.${string}` pattern */\nexport type CustomBlockKind = `custom.${string}`;\n\n/** Union of all valid block kinds */\nexport type BlockKind = SystemBlockKind | CustomBlockKind;\n","/**\n * SDK Content Config Validation\n *\n * Zod schemas for validating SDK content configuration.\n */\n\nimport { z } from 'zod';\nimport { SYSTEM_BLOCK_KINDS } from '../types';\nimport type { ContentConfig, ContentTypeConfig } from './content-types';\n\n// Use looseObject for data fields that can contain arbitrary values\nconst jsonDataSchema = z.record(z.string(), z.any());\n\n// ============================================================================\n// Content Type Schema\n// ============================================================================\n\n/**\n * Content type key validation.\n * Must be lowercase, start with a letter, and contain only letters, numbers, and hyphens.\n */\nconst contentTypeKeySchema = z\n .string()\n .min(1)\n .regex(\n /^[a-z][a-z0-9-]*$/,\n 'Key must be lowercase, start with a letter, and contain only letters, numbers, and hyphens'\n );\n\n/**\n * Content type config schema.\n */\nexport const contentTypeConfigSchema: z.ZodType<ContentTypeConfig> = z\n .object({\n key: contentTypeKeySchema,\n name: z.string().min(1),\n description: z.string().optional(),\n hasPages: z.boolean(),\n routePattern: z.string().optional(),\n // Fields are validated as any[] here - deep field validation happens in @riverbankcms/blocks\n fields: z.array(z.any()).min(1, 'At least one field is required'),\n titleField: z.string().optional(),\n isSingleton: z.boolean().optional().default(false),\n })\n .refine(\n (data) => {\n // If hasPages is true, routePattern must be provided\n // For non-singletons, routePattern must contain {slug}\n // For singletons, routePattern can be a fixed path (no {slug} required)\n if (data.hasPages) {\n if (!data.routePattern) {\n return false;\n }\n // Non-singleton routable types require {slug} placeholder\n if (!data.isSingleton && !data.routePattern.includes('{slug}')) {\n return false;\n }\n }\n return true;\n },\n {\n message:\n 'routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder.',\n }\n )\n .refine(\n (data) => {\n // If hasPages is false, routePattern must NOT be defined\n if (!data.hasPages && data.routePattern) {\n return false;\n }\n return true;\n },\n { message: 'routePattern must not be defined when hasPages is false' }\n ) as z.ZodType<ContentTypeConfig>;\n\n// ============================================================================\n// Block Config Schema\n// ============================================================================\n\n/**\n * Block kind validation.\n * Must be either a system block kind (e.g., 'block.hero') or a custom block kind (e.g., 'custom.myBlock').\n */\nconst blockKindSchema = z.string().refine(\n (kind) => {\n // Check if it's a system block kind\n if ((SYSTEM_BLOCK_KINDS as readonly string[]).includes(kind)) {\n return true;\n }\n // Check if it's a custom block kind (custom.${string})\n if (kind.startsWith('custom.') && kind.length > 7) {\n return true;\n }\n return false;\n },\n {\n message:\n 'Block kind must be a system block (e.g., \"block.hero\") or a custom block (e.g., \"custom.myBlock\")',\n }\n);\n\nexport const blockConfigSchema = z.object({\n kind: blockKindSchema,\n content: jsonDataSchema,\n orderIndex: z.number().optional(),\n});\n\n// ============================================================================\n// Page Config Schema\n// ============================================================================\n\nexport const pageConfigSchema = z.object({\n identifier: z.string().min(1, 'Identifier is required'),\n title: z.string().min(1, 'Title is required'),\n path: z.string().regex(/^\\//, 'Path must start with /'),\n purpose: z.string().default('content'),\n blocks: z.array(blockConfigSchema).optional(),\n status: z.enum(['draft', 'published']).default('draft'),\n metaTitle: z.string().optional(),\n metaDescription: z.string().optional(),\n});\n\n// ============================================================================\n// Entry Config Schema\n// ============================================================================\n\nexport const entryConfigSchema = z.object({\n identifier: z.string().min(1, 'Identifier is required'),\n contentType: z.string().min(1, 'Content type is required'),\n data: jsonDataSchema,\n status: z.enum(['draft', 'published']).default('draft'),\n slug: z.string().optional(),\n title: z.string().optional(),\n summary: z.string().optional(),\n metaTitle: z.string().optional(),\n metaDescription: z.string().optional(),\n});\n\n// ============================================================================\n// Navigation Config Schema\n// ============================================================================\n\nconst pageLinkSchema = z.object({\n kind: z.literal('page'),\n identifier: z.string().min(1),\n});\n\nconst entryLinkSchema = z.object({\n kind: z.literal('entry'),\n identifier: z.string().min(1),\n});\n\nconst externalLinkSchema = z.object({\n kind: z.literal('external'),\n href: z.string().url('Invalid URL'),\n});\n\nconst dropdownLinkSchema = z.object({\n kind: z.literal('dropdown'),\n});\n\nconst navigationLinkSchema = z.discriminatedUnion('kind', [\n pageLinkSchema,\n entryLinkSchema,\n externalLinkSchema,\n dropdownLinkSchema,\n]);\n\n// Navigation item with recursive children support\nconst baseNavigationItemSchema = z.object({\n label: z.string().min(1, 'Label is required'),\n link: navigationLinkSchema,\n isCta: z.boolean().optional(),\n});\n\n// Using z.lazy for recursive type\nexport const navigationItemConfigSchema: z.ZodType<{\n label: string;\n link:\n | { kind: 'page'; identifier: string }\n | { kind: 'entry'; identifier: string }\n | { kind: 'external'; href: string }\n | { kind: 'dropdown' };\n isCta?: boolean;\n children?: Array<{\n label: string;\n link:\n | { kind: 'page'; identifier: string }\n | { kind: 'entry'; identifier: string }\n | { kind: 'external'; href: string }\n | { kind: 'dropdown' };\n isCta?: boolean;\n children?: unknown[];\n }>;\n}> = baseNavigationItemSchema.extend({\n children: z.lazy(() => z.array(navigationItemConfigSchema)).optional(),\n});\n\nexport const navigationMenuConfigSchema = z.object({\n identifier: z.string().min(1, 'Identifier is required'),\n name: z.string().min(1, 'Name is required'),\n isPrimary: z.boolean().optional(),\n items: z.array(navigationItemConfigSchema),\n});\n\n// ============================================================================\n// Site Settings Schema\n// ============================================================================\n\nexport const siteSettingsConfigSchema = z.object({\n homepagePath: z.string().optional(),\n siteTitle: z.string().optional(),\n siteDescription: z.string().optional(),\n defaultTemplates: z.record(z.string(), z.string()).optional(),\n});\n\n// ============================================================================\n// Complete Content Config Schema\n// ============================================================================\n\nconst contentConfigBaseSchema = z.object({\n contentTypes: z.array(contentTypeConfigSchema).optional(),\n entries: z.array(entryConfigSchema).optional(),\n pages: z.array(pageConfigSchema).optional(),\n navigationMenus: z.array(navigationMenuConfigSchema).optional(),\n settings: siteSettingsConfigSchema.optional(),\n});\n\nexport const contentConfigSchema: z.ZodType<ContentConfig> = contentConfigBaseSchema\n .superRefine((data, ctx) => {\n // Validate unique content type keys\n if (data.contentTypes && data.contentTypes.length > 1) {\n const keys = data.contentTypes.map((ct) => ct.key);\n const duplicateKeys = keys.filter((key, i) => keys.indexOf(key) !== i);\n if (duplicateKeys.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Content type keys must be unique. Duplicates: ${duplicateKeys.join(', ')}`,\n path: ['contentTypes'],\n });\n }\n }\n\n // Validate unique page identifiers\n if (data.pages && data.pages.length > 1) {\n const identifiers = data.pages.map((p) => p.identifier);\n const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);\n if (duplicateIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Page identifiers must be unique. Duplicates: ${duplicateIds.join(', ')}`,\n path: ['pages'],\n });\n }\n\n // Validate unique page paths\n const paths = data.pages.map((p) => p.path);\n const duplicatePaths = paths.filter((path, i) => paths.indexOf(path) !== i);\n if (duplicatePaths.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Page paths must be unique. Duplicates: ${duplicatePaths.join(', ')}`,\n path: ['pages'],\n });\n }\n }\n\n // Validate unique entry identifiers\n if (data.entries && data.entries.length > 1) {\n const identifiers = data.entries.map((e) => e.identifier);\n const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);\n if (duplicateIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Entry identifiers must be unique. Duplicates: ${duplicateIds.join(', ')}`,\n path: ['entries'],\n });\n }\n }\n\n // Validate unique navigation menu identifiers\n if (data.navigationMenus && data.navigationMenus.length > 1) {\n const identifiers = data.navigationMenus.map((m) => m.identifier);\n const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);\n if (duplicateIds.length > 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Navigation menu identifiers must be unique. Duplicates: ${duplicateIds.join(', ')}`,\n path: ['navigationMenus'],\n });\n }\n }\n\n // Validate singleton content types have at most one entry\n if (data.contentTypes && data.entries) {\n const singletonKeys = new Set(\n data.contentTypes.filter((ct) => ct.isSingleton).map((ct) => ct.key)\n );\n\n for (const singletonKey of singletonKeys) {\n const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);\n if (entriesForType.length > 1) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Singleton content type \"${singletonKey}\" cannot have more than one entry. Found ${entriesForType.length} entries.`,\n path: ['entries'],\n });\n }\n }\n }\n }) as z.ZodType<ContentConfig>;\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type ContentTypeConfigInput = z.input<typeof contentTypeConfigSchema>;\nexport type ContentTypeConfigOutput = z.output<typeof contentTypeConfigSchema>;\n\nexport type PageConfigInput = z.input<typeof pageConfigSchema>;\nexport type PageConfigOutput = z.output<typeof pageConfigSchema>;\n\nexport type EntryConfigInput = z.input<typeof entryConfigSchema>;\nexport type EntryConfigOutput = z.output<typeof entryConfigSchema>;\n\nexport type NavigationMenuConfigInput = z.input<typeof navigationMenuConfigSchema>;\nexport type NavigationMenuConfigOutput = z.output<typeof navigationMenuConfigSchema>;\n\nexport type ContentConfigInput = z.input<typeof contentConfigSchema>;\nexport type ContentConfigOutput = z.output<typeof contentConfigSchema>;\n","/**\n * SDK wrapper for block data prefetching.\n * Uses the shared core implementation from @riverbankcms/blocks with the SDK client.\n */\n\nimport type { BlockDataLoader, PageOutline, SdkCustomBlock } from '@riverbankcms/blocks';\nimport { prefetchBlockData as prefetchBlockDataCore } from '@riverbankcms/blocks/system/data';\nimport type { PrefetchContext, ResolvedBlockData } from '@riverbankcms/blocks/system/data';\nimport type { RiverbankClient } from '../client/types';\n\nexport type { PrefetchContext, ResolvedBlockData };\n\n/**\n * Supported loader endpoints for SDK data fetching.\n * Only these endpoints can be used in block data loaders when using the SDK.\n *\n * This is the SINGLE SOURCE OF TRUTH for whitelisted endpoints.\n * - Zod validation schema derives from this array\n * - TypeScript types derive from this array\n * - Runtime validation uses this array\n */\nexport const SUPPORTED_LOADER_ENDPOINTS = [\n 'listPublishedEntries',\n 'getPublishedEntryPreview',\n 'listPublicEvents',\n 'getPublicFormById',\n 'getPublicBookingServices',\n] as const;\n\n/**\n * Union type of all supported loader endpoints.\n * Derived from SUPPORTED_LOADER_ENDPOINTS array.\n */\nexport type SupportedLoaderEndpoint = typeof SUPPORTED_LOADER_ENDPOINTS[number];\n\n/**\n * Options for SDK block data prefetching.\n */\nexport type SdkPrefetchOptions = {\n /**\n * SDK custom blocks from site config.\n * Used to look up data loaders for custom.* blocks.\n */\n customBlocks?: SdkCustomBlock[];\n};\n\n/**\n * Prefetch block data for SDK-based applications.\n * Maps loader endpoints to corresponding SDK client methods.\n *\n * Supports both system blocks and SDK custom blocks with data loaders.\n *\n * @example\n * ```typescript\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n * import { prefetchBlockData } from '@riverbankcms/sdk/data';\n *\n * const client = createRiverbankClient({ apiKey, baseUrl });\n * const page = await client.getPage({ siteId, path: '/' });\n *\n * // Basic usage (system blocks only)\n * const blockData = await prefetchBlockData(page.outline, {\n * siteId: page.siteId,\n * pageId: page.id,\n * }, client);\n *\n * // With custom blocks from SDK config\n * const blockData = await prefetchBlockData(page.outline, context, client, {\n * customBlocks: site.sdkConfig?.customBlocks,\n * });\n * ```\n */\nexport async function prefetchBlockData(\n page: PageOutline,\n context: PrefetchContext,\n client: RiverbankClient,\n options?: SdkPrefetchOptions,\n): Promise<ResolvedBlockData> {\n const { customBlocks } = options ?? {};\n\n // Build lookup map for custom block loaders\n // Key is string (blockKind from page) matching block.id (custom.xxx)\n const customBlockMap = new Map<string, SdkCustomBlock>(\n (customBlocks ?? []).map((block) => [block.id as string, block])\n );\n\n return prefetchBlockDataCore(page, context, {\n apiClient: async ({ endpoint, params }) => {\n // Only support whitelisted loader endpoints\n if (!isSupportedEndpoint(endpoint)) {\n throw new Error(\n `Unsupported loader endpoint: ${endpoint}. ` +\n `SDK only supports: ${SUPPORTED_LOADER_ENDPOINTS.join(', ')}`\n );\n }\n\n // Map endpoint to SDK client method\n switch (endpoint) {\n case 'listPublishedEntries': {\n const { siteId, type, orderBy, limit, stage, mode, entryIds } = params ?? {};\n if (!siteId || !type) {\n throw new Error('listPublishedEntries requires siteId and type params');\n }\n\n // Parse limit if provided (can come as string from bindings)\n const parsedLimit = typeof limit === 'string'\n ? Number.parseInt(limit, 10)\n : typeof limit === 'number'\n ? limit\n : undefined;\n\n // Map orderBy to order param (matching embed block field values)\n const order = (orderBy === 'newest' || orderBy === 'oldest' || orderBy === 'title' || orderBy === 'order')\n ? orderBy as 'newest' | 'oldest' | 'title' | 'order'\n : undefined;\n\n // Extract entry IDs for manual mode\n // entryIds comes from binding to entries field which contains { entryId: \"uuid\" } objects\n let parsedEntryIds: string[] | undefined;\n if (mode === 'manual' && Array.isArray(entryIds)) {\n parsedEntryIds = entryIds\n .map((item: unknown) => {\n if (typeof item === 'object' && item !== null && 'entryId' in item) {\n return (item as { entryId: string }).entryId;\n }\n // Also support direct string IDs\n if (typeof item === 'string') {\n return item;\n }\n return null;\n })\n .filter((id): id is string => id !== null);\n }\n\n return await client.getEntries({\n siteId,\n contentType: type,\n limit: parsedLimit,\n order,\n preview: stage === 'preview',\n // Manual mode - pass entry IDs for hydration\n mode: mode === 'manual' ? 'manual' : undefined,\n entryIds: parsedEntryIds,\n });\n }\n\n case 'getPublishedEntryPreview': {\n const { siteId, type, slug } = params ?? {};\n if (!siteId || !type || !slug) {\n throw new Error('getPublishedEntryPreview requires siteId, type, and slug params');\n }\n return await client.getEntry({ siteId, contentType: type, slug });\n }\n case 'listPublicEvents': {\n const { siteId, limit, from, to, stage } = params ?? {};\n if (!siteId) {\n throw new Error('listPublicEvents requires siteId param');\n }\n const parsedLimit =\n typeof limit === 'string'\n ? Number.parseInt(limit, 10)\n : typeof limit === 'number'\n ? limit\n : undefined;\n return await client.listPublicEvents({ siteId, limit: parsedLimit, from, to, stage });\n }\n case 'getPublicFormById': {\n const { formId } = params ?? {};\n if (!formId) {\n throw new Error('getPublicFormById requires formId param');\n }\n return await client.getPublicFormById({ formId });\n }\n case 'getPublicBookingServices': {\n const { siteId, ids } = params ?? {};\n if (!siteId) {\n throw new Error('getPublicBookingServices requires siteId param');\n }\n return await client.getPublicBookingServices({ siteId, ids });\n }\n\n default: {\n // TypeScript should never reach here due to isSupportedEndpoint check\n const _exhaustive: never = endpoint;\n throw new Error(`Unhandled endpoint: ${_exhaustive}`);\n }\n }\n },\n isValidEndpoint: isSupportedEndpoint,\n onError: (error, { block, loader }) => {\n console.warn('[prefetchBlockData] failed to prefetch block data', {\n block,\n loader,\n error,\n });\n },\n // Provide custom block loader lookup for SDK custom blocks\n getCustomBlockLoaders: (blockKind): Record<string, BlockDataLoader> | undefined => {\n const customBlock = customBlockMap.get(blockKind);\n if (!customBlock?.dataLoaders) return undefined;\n\n // Convert SdkConfigLoader to BlockDataLoader\n // SdkConfigLoader.endpoint is SdkLoaderEndpoint (string union) -> string\n // SdkConfigLoader.params is Record<string, LoaderParamValue> -> Record<string, unknown>\n // Both are structurally compatible via covariance\n const loaders: Record<string, BlockDataLoader> = {};\n for (const [key, loader] of Object.entries(customBlock.dataLoaders)) {\n loaders[key] = {\n endpoint: loader.endpoint,\n params: loader.params,\n mode: loader.mode,\n };\n }\n return loaders;\n },\n });\n}\n\n/**\n * Type guard for supported loader endpoints\n */\nfunction isSupportedEndpoint(endpoint: string): endpoint is SupportedLoaderEndpoint {\n return SUPPORTED_LOADER_ENDPOINTS.includes(endpoint as SupportedLoaderEndpoint);\n}\n","/**\n * Zod validation schemas for SDK site configuration.\n *\n * These schemas are used to validate configuration fetched from\n * SDK sites before storing in the database.\n */\n\nimport { z } from 'zod';\nimport { blockCategoryEnum, fieldSchema, getBlockDefinition, type SdkCustomBlock, type FieldDefinition } from '@riverbankcms/blocks';\nimport type { RiverbankSiteConfig, BlockFieldOptionsMap, BlockFieldExtensionsMap, BlockFieldExtension, SyncConfig } from './types';\nimport { contentConfigSchema } from './content-validation';\n\n// Re-export content schemas for convenience\nexport { contentConfigSchema } from './content-validation';\nexport type { ContentConfigInput, ContentConfigOutput } from './content-validation';\n\n/**\n * Schema for SDK theme palette.\n * Maps token names to CSS color values.\n */\nexport const sdkThemePaletteSchema = z.record(z.string(), z.string());\n\n/**\n * Schema for SDK theme configuration.\n */\nexport const sdkThemeConfigSchema = z.object({\n palette: sdkThemePaletteSchema,\n});\n\n/**\n * Schema for SDK site URLs (previewUrl, liveUrl).\n * - Must be valid URL format\n * - Production URLs must use HTTPS (HTTP allowed for localhost/dev)\n * - Trailing slashes are stripped\n */\nexport const sdkSiteUrlSchema = z.string()\n .url('Must be a valid URL')\n .refine((url) => {\n try {\n const parsed = new URL(url);\n const isLocal = ['localhost', 'lvh.me'].includes(parsed.hostname)\n || parsed.hostname.endsWith('.local')\n || parsed.hostname.endsWith('.test')\n || parsed.hostname.endsWith('.lvh.me');\n return parsed.protocol === 'https:' || isLocal;\n } catch {\n return false;\n }\n }, { message: 'Production URLs must use HTTPS' })\n .transform((url) => url.replace(/\\/$/, '')); // Strip trailing slash\n\n/**\n * Schema for section background color options.\n */\nexport const sectionBackgroundSchema = z.object({\n id: z.string(),\n label: z.string(),\n token: z.string(), // Reference to theme palette token\n});\n\n/**\n * Schema for section spacing values.\n */\nexport const sectionSpacingSchema = z.enum(['compact', 'default', 'spacious']);\n\n/**\n * Schema for container max-width values.\n */\nexport const containerMaxWidthSchema = z.enum(['narrow', 'default', 'wide', 'full']);\n\n/**\n * Schema for container alignment values.\n */\nexport const containerAlignmentSchema = z.enum(['left', 'center', 'right']);\n\n/**\n * Schema for section options configuration.\n */\nexport const sectionOptionsSchema = z.object({\n backgroundColor: z.boolean().optional(),\n backgroundImage: z.boolean().optional(),\n backgroundGradient: z.boolean().optional(),\n spacing: z.union([\n z.array(sectionSpacingSchema),\n z.boolean(),\n ]).optional(),\n textColor: z.boolean().optional(),\n}).optional();\n\n/**\n * Schema for container options configuration.\n */\nexport const containerOptionsSchema = z.object({\n maxWidth: z.union([\n z.array(containerMaxWidthSchema),\n z.boolean(),\n ]).optional(),\n alignment: z.union([\n z.array(containerAlignmentSchema),\n z.boolean(),\n ]).optional(),\n}).optional();\n\n/**\n * Schema for site style configuration.\n */\nexport const siteStyleConfigSchema = z.object({\n sectionBackgrounds: z.array(sectionBackgroundSchema).optional(),\n sectionOptions: sectionOptionsSchema,\n containerOptions: containerOptionsSchema,\n}).optional();\n\n// ============================================================================\n// Data Loader Schemas\n// ============================================================================\n\nimport { SUPPORTED_LOADER_ENDPOINTS } from '../data/prefetchBlockData';\n\n/**\n * Whitelisted endpoints for SDK data loaders.\n *\n * These are the only CMS endpoints that can be called from config-based loaders.\n * This ensures SDK sites can only access safe, read-only public endpoints.\n *\n * Derived from SUPPORTED_LOADER_ENDPOINTS - the single source of truth.\n */\nexport const sdkLoaderEndpointSchema = z.enum(SUPPORTED_LOADER_ENDPOINTS);\n\n/**\n * A binding expression for dynamic loader params.\n *\n * @example\n * ```typescript\n * { $bind: { from: 'content.categoryId' } }\n * { $bind: { from: '$root.siteId' } }\n * { $bind: { from: 'content.limit', fallback: '10' } }\n * ```\n */\nexport const loaderParamBindingSchema = z.object({\n $bind: z.object({\n from: z.string().min(1, \"Binding path is required\"),\n fallback: z.string().optional(),\n }),\n});\n\n/**\n * A loader param value can be static or a binding expression.\n */\nexport const loaderParamValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n loaderParamBindingSchema,\n]);\n\n/**\n * Schema for config-based data loader.\n *\n * Config loaders execute server-side during loadPage() and are\n * restricted to whitelisted CMS endpoints.\n */\nexport const sdkConfigLoaderSchema = z.object({\n endpoint: sdkLoaderEndpointSchema,\n params: z.record(z.string(), loaderParamValueSchema),\n mode: z.enum(['server', 'client']).default('server'),\n});\n\n/**\n * Schema for the dataLoaders field on custom blocks.\n * Validates the loader configuration and limits the number of loaders.\n */\nexport const sdkDataLoadersSchema = z.record(z.string(), sdkConfigLoaderSchema)\n .refine(\n (loaders) => Object.keys(loaders).length <= 5,\n { message: \"Maximum 5 data loaders per block\" }\n )\n .optional();\n\n// ============================================================================\n// Custom Block Schema\n// ============================================================================\n\n/**\n * Schema for field select option.\n */\nexport const fieldSelectOptionSchema = z.object({\n value: z.string().min(1, \"Option value is required\"),\n label: z.string().min(1, \"Option label is required\"),\n});\n\n/**\n * Schema for per-field configuration within a block.\n */\nexport const blockFieldConfigSchema = z.object({\n options: z.array(fieldSelectOptionSchema).min(1, \"At least one option is required\").optional(),\n});\n\n/**\n * Schema for per-block field options.\n *\n * Block IDs must be either 'block.*' (system blocks) or 'custom.*' (custom blocks).\n * Field IDs can be any valid identifier string.\n */\nexport const blockFieldOptionsSchema: z.ZodType<BlockFieldOptionsMap> = z.record(\n z.string().regex(/^(block\\.|custom\\.)[a-z][a-z0-9-]*$/, {\n message: \"Block ID must be 'block.*' or 'custom.*' format\",\n }),\n z.record(\n z.string().min(1, \"Field ID is required\"),\n blockFieldConfigSchema\n )\n).optional() as z.ZodType<BlockFieldOptionsMap>;\n\n// ============================================================================\n// Block Field Extensions Schema\n// ============================================================================\n\n/**\n * Schema for block field extension configuration.\n *\n * Validates additional fields to be appended to a built-in block.\n * Includes refinement to ensure required fields have defaultValue.\n *\n * Note: Explicit type annotation required due to recursive fieldSchema complexity.\n */\nexport const blockFieldExtensionSchema: z.ZodType<BlockFieldExtension> = z.object({\n fields: fieldSchema.array().min(1, \"At least one field is required\"),\n}).refine(\n (data) => {\n // All required fields must have a defaultValue\n return data.fields.every((field: FieldDefinition) => {\n if (!field.required) return true;\n return field.defaultValue !== undefined;\n });\n },\n {\n message: \"Required fields must have a defaultValue to support existing blocks\",\n }\n) as z.ZodType<BlockFieldExtension>;\n\n/**\n * Schema for block field extensions map.\n *\n * Block IDs must be system blocks (e.g., 'block.bodyText', 'block.hero').\n * Custom blocks ('custom.*') should define their fields directly, not via extensions.\n */\nexport const blockFieldExtensionsSchema: z.ZodType<BlockFieldExtensionsMap | undefined> = z.record(\n z.string().regex(/^block\\.[a-z][a-zA-Z0-9]*$/, {\n message: \"Block ID must be 'block.*' format (system blocks only)\",\n }),\n blockFieldExtensionSchema\n).optional() as z.ZodType<BlockFieldExtensionsMap | undefined>;\n\n/**\n * Validates that extended field IDs don't conflict with existing block fields.\n *\n * This validation should be called during config push to provide clear error messages.\n * Returns an array of conflict errors, or empty array if valid.\n *\n * @example\n * ```typescript\n * const conflicts = validateFieldIdConflicts(config.blockFieldExtensions);\n * if (conflicts.length > 0) {\n * throw new Error(conflicts.map(c => c.message).join('\\n'));\n * }\n * ```\n */\nexport function validateFieldIdConflicts(\n blockFieldExtensions?: BlockFieldExtensionsMap | null\n): { blockId: string; fieldId: string; message: string }[] {\n if (!blockFieldExtensions) return [];\n\n const conflicts: { blockId: string; fieldId: string; message: string }[] = [];\n\n for (const [blockId, extension] of Object.entries(blockFieldExtensions)) {\n const definition = getBlockDefinition(blockId);\n if (!definition) {\n conflicts.push({\n blockId,\n fieldId: '',\n message: `Unknown block type: ${blockId}`,\n });\n continue;\n }\n\n // Get all existing field IDs from the block manifest\n const existingFieldIds = new Set<string>();\n const collectFieldIds = (fields: FieldDefinition[] | undefined) => {\n if (!fields) return;\n for (const field of fields) {\n existingFieldIds.add(field.id);\n // Also collect nested field IDs from groups, modals, repeaters, tab groups\n if (field.type === 'group' || field.type === 'modal') {\n collectFieldIds(field.schema?.fields);\n } else if (field.type === 'repeater' && field.schema?.fields) {\n collectFieldIds(field.schema.fields);\n } else if (field.type === 'tabGroup') {\n for (const tab of field.tabs ?? []) {\n collectFieldIds(tab.fields);\n }\n }\n }\n };\n collectFieldIds(definition.manifest.fields);\n\n // Check for conflicts\n for (const field of extension.fields) {\n if (existingFieldIds.has(field.id)) {\n conflicts.push({\n blockId,\n fieldId: field.id,\n message: `Field ID \"${field.id}\" conflicts with existing field in ${blockId}`,\n });\n }\n }\n }\n\n return conflicts;\n}\n\n// ============================================================================\n// Sync Config Schema\n// ============================================================================\n\n/**\n * Schema for sync configuration.\n *\n * Controls how CLI push operations handle content synchronization.\n */\nexport const syncConfigSchema: z.ZodType<SyncConfig> = z.object({\n existingEntries: z.enum(['skip', 'update']).optional(),\n contentTarget: z.enum(['draft', 'publish']).optional(),\n}).optional() as z.ZodType<SyncConfig>;\n\n/**\n * Schema for SDK custom block definitions.\n *\n * Validates custom blocks defined in riverbank.config.ts.\n * Reuses fieldSchema from @riverbankcms/blocks for field validation.\n *\n * Note: Explicit type annotation required due to recursive fieldSchema complexity.\n */\nexport const sdkCustomBlockSchema: z.ZodType<SdkCustomBlock> = z.object({\n // Block ID must start with 'custom.'\n id: z.string()\n .min(8) // 'custom.' + at least 1 char\n .regex(/^custom\\.[a-z][a-z0-9-]*$/, {\n message: \"Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens\",\n }),\n title: z.string().min(1, \"Title is required\"),\n titleSource: z.string().optional(),\n description: z.string().optional(),\n category: blockCategoryEnum,\n icon: z.string().optional(),\n tags: z.array(z.string()).optional(),\n // Reuse the exact field schema from @riverbankcms/blocks - all field types supported\n fields: fieldSchema.array().min(1, \"Custom blocks must have at least one field\"),\n // Data loaders for CMS endpoints\n dataLoaders: sdkDataLoadersSchema,\n}).refine(\n // Validate titleSource references a valid field if provided\n (data) => {\n if (!data.titleSource) return true;\n return data.fields.some(f => f.id === data.titleSource);\n },\n {\n message: \"titleSource must reference a valid field ID\",\n path: [\"titleSource\"],\n }\n) as z.ZodType<SdkCustomBlock>;\n\n/**\n * Schema for the complete SDK site configuration.\n *\n * Use this schema to validate configuration fetched from SDK sites\n * before storing in the database.\n *\n * @example\n * ```typescript\n * import { riverbankSiteConfigSchema } from '@riverbankcms/sdk/config/validation';\n *\n * const rawConfig = await response.json();\n * const config = riverbankSiteConfigSchema.parse(rawConfig);\n * ```\n */\nexport const riverbankSiteConfigSchema: z.ZodType<RiverbankSiteConfig> = z.object({\n siteId: z.string().uuid(),\n previewUrl: sdkSiteUrlSchema.optional(),\n liveUrl: sdkSiteUrlSchema.optional(),\n theme: sdkThemeConfigSchema.optional(),\n styles: siteStyleConfigSchema,\n customBlocks: z.array(sdkCustomBlockSchema)\n .max(20, \"Maximum 20 custom blocks per site\")\n .refine(\n // Ensure unique block IDs\n (blocks) => {\n const ids = blocks.map(b => b.id);\n return ids.length === new Set(ids).size;\n },\n { message: \"Block IDs must be unique\" }\n )\n .optional(),\n blockFieldOptions: blockFieldOptionsSchema,\n blockFieldExtensions: blockFieldExtensionsSchema,\n content: contentConfigSchema.optional(),\n // CLI-related configuration (Phase 4)\n contentDir: z.string().optional(),\n sync: syncConfigSchema,\n}).strict() as z.ZodType<RiverbankSiteConfig>;\n\n/**\n * Type inferred from the validation schema.\n * This should match the RiverbankSiteConfig type from ./types.ts\n */\nexport type ValidatedRiverbankSiteConfig = z.infer<typeof riverbankSiteConfigSchema>;\n\n/**\n * Type for a validated SDK custom block.\n */\nexport type ValidatedSdkCustomBlock = z.infer<typeof sdkCustomBlockSchema>;\n\n// ============================================================================\n// Compile-time type assertions\n//\n// These assertions ensure the Zod schemas stay in sync with the TypeScript types.\n// If the schema output diverges from the expected type, TypeScript will error here.\n// ============================================================================\n\n/** Asserts sdkCustomBlockSchema output matches SdkCustomBlock */\ntype _AssertSdkCustomBlockSchema = z.infer<typeof sdkCustomBlockSchema> extends SdkCustomBlock\n ? SdkCustomBlock extends z.infer<typeof sdkCustomBlockSchema>\n ? true\n : never\n : never;\n\n/** Asserts riverbankSiteConfigSchema output matches RiverbankSiteConfig */\ntype _AssertRiverbankSiteConfigSchema = z.infer<typeof riverbankSiteConfigSchema> extends RiverbankSiteConfig\n ? RiverbankSiteConfig extends z.infer<typeof riverbankSiteConfigSchema>\n ? true\n : never\n : never;\n\n// These assignments will fail to compile if the types don't match\nconst _checkSdkCustomBlock: _AssertSdkCustomBlockSchema = true;\nconst _checkRiverbankSiteConfig: _AssertRiverbankSiteConfigSchema = true;\n\n// Prevent unused variable warnings\nvoid _checkSdkCustomBlock;\nvoid _checkRiverbankSiteConfig;\n","/**\n * push-config CLI command\n *\n * Pushes SDK site configuration from a riverbank.config.ts file to the dashboard API.\n */\n\nimport { Command } from 'commander';\nimport { riverbankSiteConfigSchema, validateFieldIdConflicts } from '../config/validation';\nimport { loadConfigFile } from './load-config';\n\ninterface PushConfigOptions {\n config?: string;\n apiKey?: string;\n dashboard: string;\n}\n\n/**\n * Push config to dashboard API\n */\nasync function pushToDashboard(\n dashboardUrl: string,\n siteId: string,\n apiKey: string,\n config: unknown\n): Promise<void> {\n const pushUrl = `${dashboardUrl}/api/sites/${siteId}/sdk-config`;\n console.log(`Pushing config to ${pushUrl}...`);\n\n let response: Response;\n try {\n response = await fetch(pushUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify({ config }),\n signal: AbortSignal.timeout(30000),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(`Failed to connect to dashboard: ${message}`);\n }\n\n if (!response.ok) {\n let errorMessage = `Dashboard returned ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody.error) {\n errorMessage = errorBody.error;\n if (errorBody.details) {\n errorMessage += ':\\n' + errorBody.details\n .map((d: { path: string; message: string }) => ` - ${d.path}: ${d.message}`)\n .join('\\n');\n }\n }\n } catch {\n // Use default error message if JSON parsing fails\n }\n throw new Error(errorMessage);\n }\n}\n\n/**\n * Main push-config action\n */\nasync function pushConfigAction(options: PushConfigOptions & { isRemote: boolean }): Promise<void> {\n try {\n // 1. Load config from file\n const rawConfig = await loadConfigFile(options.config);\n\n // 2. Validate config\n console.log('Validating config...');\n const parseResult = riverbankSiteConfigSchema.safeParse(rawConfig);\n if (!parseResult.success) {\n console.error('Invalid config:');\n for (const issue of parseResult.error.issues) {\n console.error(` - ${issue.path.join('.')}: ${issue.message}`);\n }\n process.exit(1);\n }\n\n // 2b. Validate field ID conflicts for blockFieldExtensions\n const conflicts = validateFieldIdConflicts(parseResult.data.blockFieldExtensions);\n if (conflicts.length > 0) {\n console.error('Field ID conflicts detected in blockFieldExtensions:');\n for (const conflict of conflicts) {\n console.error(` - ${conflict.message}`);\n }\n process.exit(1);\n }\n\n const { siteId } = parseResult.data;\n\n // 3. Push to dashboard (send full config, dashboard will verify siteId matches)\n const apiKey = resolveManagementApiKey(options.apiKey, options.isRemote);\n\n await pushToDashboard(options.dashboard, siteId, apiKey, parseResult.data);\n\n console.log('Config pushed successfully!');\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\n/**\n * Resolve dashboard URL from CLI option or environment variable.\n * Requires one of them to be set.\n */\nfunction resolveDashboardUrl(cliOption: string | undefined, isRemote: boolean): string {\n const envVar = isRemote ? 'RIVERBANK_REMOTE_DASHBOARD_URL' : 'RIVERBANK_LOCAL_DASHBOARD_URL';\n const url = cliOption || process.env[envVar];\n if (!url) {\n console.error('Error: Dashboard URL is required.');\n console.error(`Provide --dashboard <url> or set ${envVar} environment variable.`);\n process.exit(1);\n }\n return url;\n}\n\n/**\n * Resolve management API key from CLI option or environment variable.\n */\nfunction resolveManagementApiKey(cliOption: string | undefined, isRemote: boolean): string {\n const envVar = isRemote ? 'RIVERBANK_REMOTE_MGMT_API_KEY' : 'RIVERBANK_LOCAL_MGMT_API_KEY';\n const apiKey = cliOption || process.env[envVar];\n\n if (!apiKey) {\n console.error('Error: Management API key is required.');\n console.error(`Provide --api-key <key> or set ${envVar} environment variable.`);\n process.exit(1);\n }\n\n if (!apiKey.startsWith('bld_mgmt_sk_')) {\n console.error(`Error: Invalid management API key format for ${envVar}.`);\n console.error('Expected key starting with bld_mgmt_sk_.');\n process.exit(1);\n }\n\n return apiKey;\n}\n\n/**\n * push-config command definition\n */\nexport const pushConfigCommand = new Command('push-config')\n .description('Push SDK config to dashboard')\n .option('--api-key <key>', 'Management API key (or set RIVERBANK_*_MGMT_API_KEY)')\n .option('--dashboard <url>', 'Dashboard URL (or set RIVERBANK_*_DASHBOARD_URL env var)')\n .option('--config <path>', 'Path to config file (default: ./riverbank.config.ts)')\n .addHelpText('after', `\nDescription:\n Syncs your local riverbank.config.ts to the CMS dashboard, including:\n - Custom blocks\n - Block field extensions\n - Block field options\n - Content types, pages, entries, and navigation\n\nExamples:\n $ npx riverbankcms push-config\n $ npx riverbankcms push-config --api-key bld_mgmt_sk_... --dashboard https://www.riverbankcms.com\n $ npx riverbankcms push-config --config ./src/riverbank.config.ts\n`)\n .action((options: Omit<PushConfigOptions, 'dashboard'> & { dashboard?: string }, command) => {\n const globalOpts = command.optsWithGlobals() as { remote?: boolean };\n const isRemote = globalOpts.remote ?? false;\n const dashboard = resolveDashboardUrl(options.dashboard, isRemote);\n return pushConfigAction({ ...options, dashboard, isRemote });\n });\n","/**\n * HTTP Client for Management Operations\n *\n * Provides typed HTTP client for SDK management endpoints.\n */\n\nimport type { ManagementClientConfig, ApiResponse } from './types';\n\n/**\n * Error thrown when management API request fails\n */\nexport class ManagementApiError extends Error {\n readonly code: string;\n readonly details?: unknown;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n code: string,\n details?: unknown,\n statusCode?: number\n ) {\n super(message);\n this.name = 'ManagementApiError';\n this.code = code;\n this.details = details;\n this.statusCode = statusCode;\n }\n}\n\n/**\n * HTTP client interface for management operations\n */\nexport interface HttpClient {\n get<T>(path: string, params?: Record<string, string>): Promise<T>;\n post<T>(path: string, body?: unknown): Promise<T>;\n patch<T>(path: string, body?: unknown): Promise<T>;\n delete(path: string, body?: unknown): Promise<void>;\n}\n\n/**\n * Create HTTP client for management API\n */\nexport function createHttpClient(config: ManagementClientConfig): HttpClient {\n const baseUrl = `${config.dashboardUrl}/api/sdk/${config.siteId}`;\n const timeout = config.timeout ?? 30000;\n\n /**\n * Make HTTP request to management API\n */\n async function request<T>(\n method: 'GET' | 'POST' | 'PATCH' | 'DELETE',\n path: string,\n options?: {\n params?: Record<string, string>;\n body?: unknown;\n }\n ): Promise<T> {\n let url = `${baseUrl}${path}`;\n\n // Add query params for GET requests\n if (options?.params && Object.keys(options.params).length > 0) {\n const searchParams = new URLSearchParams(options.params);\n url = `${url}?${searchParams.toString()}`;\n }\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${config.managementApiKey}`,\n 'Content-Type': 'application/json',\n };\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal: AbortSignal.timeout(timeout),\n };\n\n if (options?.body && method !== 'GET') {\n fetchOptions.body = JSON.stringify(options.body);\n }\n\n let response: Response;\n try {\n response = await fetch(url, fetchOptions);\n } catch (error) {\n if (error instanceof Error && error.name === 'TimeoutError') {\n throw new ManagementApiError(\n `Request timed out after ${timeout}ms`,\n 'sdk:timeout',\n undefined,\n undefined\n );\n }\n throw new ManagementApiError(\n error instanceof Error ? error.message : 'Network request failed',\n 'sdk:network-error',\n undefined,\n undefined\n );\n }\n\n // Handle non-JSON responses\n const contentType = response.headers.get('content-type');\n if (!contentType?.includes('application/json')) {\n if (!response.ok) {\n throw new ManagementApiError(\n `Request failed with status ${response.status}`,\n 'sdk:http-error',\n undefined,\n response.status\n );\n }\n // Return empty for successful non-JSON responses (like DELETE)\n return undefined as T;\n }\n\n const json = await response.json() as ApiResponse<T>;\n\n // Handle error responses\n if (!response.ok || !json.success) {\n if ('error' in json && json.error) {\n throw new ManagementApiError(\n json.error.message,\n json.error.code,\n json.error.details,\n response.status\n );\n }\n throw new ManagementApiError(\n `Request failed with status ${response.status}`,\n 'sdk:http-error',\n undefined,\n response.status\n );\n }\n\n return json.data;\n }\n\n return {\n async get<T>(path: string, params?: Record<string, string>): Promise<T> {\n return request<T>('GET', path, { params });\n },\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return request<T>('POST', path, { body });\n },\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return request<T>('PATCH', path, { body });\n },\n\n async delete(path: string, body?: unknown): Promise<void> {\n await request<void>('DELETE', path, { body });\n },\n };\n}\n","/**\n * Entry Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n EntryOperations,\n ManagementEntry,\n EntryUpsertInput,\n PaginatedResult,\n PaginationOptions,\n} from './types';\n\nexport function createEntryOperations(http: HttpClient): EntryOperations {\n return {\n async list(\n contentType: string,\n options?: PaginationOptions\n ): Promise<PaginatedResult<ManagementEntry>> {\n const params: Record<string, string> = {};\n if (options?.page) params.page = String(options.page);\n if (options?.limit) params.limit = String(options.limit);\n\n return http.get<PaginatedResult<ManagementEntry>>(\n `/entries/${encodeURIComponent(contentType)}`,\n params\n );\n },\n\n async get(\n contentType: string,\n identifier: string\n ): Promise<ManagementEntry | null> {\n try {\n return await http.get<ManagementEntry>(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(input: EntryUpsertInput): Promise<ManagementEntry> {\n return http.post<ManagementEntry>('/entries', input);\n },\n\n async publish(contentType: string, identifier: string): Promise<void> {\n await http.post<void>(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}/publish`\n );\n },\n\n async unpublish(contentType: string, identifier: string): Promise<void> {\n await http.post<void>(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}/unpublish`\n );\n },\n\n async delete(contentType: string, identifier: string): Promise<void> {\n await http.delete(\n `/entries/${encodeURIComponent(contentType)}/${encodeURIComponent(identifier)}`\n );\n },\n };\n}\n","/**\n * Page Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n PageOperations,\n ManagementPage,\n PageUpsertInput,\n PaginatedResult,\n PaginationOptions,\n} from './types';\n\nexport function createPageOperations(http: HttpClient): PageOperations {\n return {\n async list(options?: PaginationOptions): Promise<PaginatedResult<ManagementPage>> {\n const params: Record<string, string> = {};\n if (options?.page) params.page = String(options.page);\n if (options?.limit) params.limit = String(options.limit);\n\n return http.get<PaginatedResult<ManagementPage>>('/pages', params);\n },\n\n async get(identifier: string): Promise<ManagementPage | null> {\n try {\n return await http.get<ManagementPage>(\n `/pages/${encodeURIComponent(identifier)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(input: PageUpsertInput): Promise<ManagementPage> {\n return http.post<ManagementPage>('/pages', input);\n },\n\n async publish(identifier: string): Promise<void> {\n await http.post<void>(`/pages/${encodeURIComponent(identifier)}/publish`);\n },\n\n async unpublish(identifier: string): Promise<void> {\n await http.post<void>(`/pages/${encodeURIComponent(identifier)}/unpublish`);\n },\n };\n}\n","/**\n * Block Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n BlockOperations,\n ManagementBlock,\n BlockUpsertInput,\n} from './types';\n\nexport function createBlockOperations(http: HttpClient): BlockOperations {\n return {\n async list(pageIdentifier: string): Promise<ManagementBlock[]> {\n const result = await http.get<{ blocks: ManagementBlock[] }>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks`\n );\n return result.blocks;\n },\n\n async get(\n pageIdentifier: string,\n blockIdentifier: string\n ): Promise<ManagementBlock | null> {\n try {\n return await http.get<ManagementBlock>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks/${encodeURIComponent(blockIdentifier)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(\n pageIdentifier: string,\n input: BlockUpsertInput\n ): Promise<ManagementBlock> {\n return http.post<ManagementBlock>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks`,\n input\n );\n },\n\n async reorder(\n pageIdentifier: string,\n blockIdentifiers: string[]\n ): Promise<void> {\n await http.post<void>(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks/reorder`,\n { order: blockIdentifiers }\n );\n },\n\n async delete(\n pageIdentifier: string,\n blockIdentifier: string\n ): Promise<void> {\n await http.delete(\n `/pages/${encodeURIComponent(pageIdentifier)}/blocks/${encodeURIComponent(blockIdentifier)}`\n );\n },\n };\n}\n","/**\n * Navigation Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n NavigationOperations,\n ManagementNavigationMenu,\n NavigationMenuUpsertInput,\n} from './types';\n\nexport function createNavigationOperations(http: HttpClient): NavigationOperations {\n return {\n async list(): Promise<ManagementNavigationMenu[]> {\n const result = await http.get<{ menus: ManagementNavigationMenu[] }>('/navigation');\n return result.menus;\n },\n\n async get(name: string): Promise<ManagementNavigationMenu | null> {\n try {\n return await http.get<ManagementNavigationMenu>(\n `/navigation/${encodeURIComponent(name)}`\n );\n } catch (error) {\n // Return null for 404 errors\n if (error instanceof Error && 'statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return null;\n }\n throw error;\n }\n },\n\n async upsert(input: NavigationMenuUpsertInput): Promise<ManagementNavigationMenu> {\n return http.post<ManagementNavigationMenu>('/navigation', input);\n },\n };\n}\n","/**\n * Settings Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type { SettingsOperations, ManagementSettings, SettingsUpdateInput } from './types';\n\nexport function createSettingsOperations(http: HttpClient): SettingsOperations {\n return {\n async get(): Promise<ManagementSettings> {\n const result = await http.get<{ settings: ManagementSettings }>('/pull/settings');\n return result.settings;\n },\n\n async update(input: SettingsUpdateInput): Promise<ManagementSettings> {\n const result = await http.patch<{ settings: ManagementSettings }>('/settings', input);\n return result.settings;\n },\n };\n}\n","/**\n * Pull Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type {\n PullOperations,\n PulledEntries,\n PulledPages,\n PulledNavigation,\n PulledSettings,\n PulledContent,\n PaginationOptions,\n} from './types';\n\nexport function createPullOperations(http: HttpClient): PullOperations {\n return {\n async entries(\n contentType?: string,\n options?: PaginationOptions\n ): Promise<PulledEntries> {\n const params: Record<string, string> = {};\n if (options?.page) params.page = String(options.page);\n if (options?.limit) params.limit = String(options.limit);\n\n if (contentType) {\n return http.get<PulledEntries>(\n `/pull/entries/${encodeURIComponent(contentType)}`,\n params\n );\n }\n\n // If no content type specified, return all entries aggregated\n // The API will return all content types in a single response\n return http.get<PulledEntries>('/pull/entries', params);\n },\n\n async pages(): Promise<PulledPages> {\n return http.get<PulledPages>('/pull/pages');\n },\n\n async navigation(): Promise<PulledNavigation> {\n return http.get<PulledNavigation>('/pull/navigation');\n },\n\n async settings(): Promise<PulledSettings> {\n return http.get<PulledSettings>('/pull/settings');\n },\n\n async all(): Promise<PulledContent> {\n // Fetch all content in parallel\n const [entriesResult, pagesResult, navigationResult, settingsResult] = await Promise.all([\n http.get<{ entries: Record<string, PulledEntries['entries']>; meta?: { entries?: Record<string, any>; truncated?: boolean; truncationMessage?: string } }>('/pull/entries/all'),\n http.get<PulledPages>('/pull/pages'),\n http.get<PulledNavigation>('/pull/navigation'),\n http.get<PulledSettings>('/pull/settings'),\n ]);\n\n return {\n entries: entriesResult?.entries || {},\n pages: pagesResult?.pages || [],\n navigation: navigationResult?.menus || [],\n settings: settingsResult?.settings || {},\n meta: {\n pulledAt: new Date().toISOString(),\n entries: entriesResult?.meta?.entries,\n truncated: entriesResult?.meta?.truncated,\n truncationMessage: entriesResult?.meta?.truncationMessage,\n },\n };\n },\n };\n}\n","/**\n * Preview Operations for Management Client\n */\n\nimport type { HttpClient } from './http';\nimport type { PreviewOperations, BlockPreviewRequest, BlockPreviewResponse } from './types';\n\nexport function createPreviewOperations(http: HttpClient): PreviewOperations {\n return {\n async block(input: BlockPreviewRequest): Promise<BlockPreviewResponse> {\n return http.post<BlockPreviewResponse>('/preview/block', input);\n },\n };\n}\n","/**\n * Identifiers Operations\n *\n * Operations for managing SDK identifiers on pages, blocks, and entries.\n */\n\nimport type { HttpClient } from './http';\nimport type { IdentifiersOperations, BackfillResult } from './types';\n\n/**\n * Create identifiers operations\n */\nexport function createIdentifiersOperations(http: HttpClient): IdentifiersOperations {\n return {\n async backfill(): Promise<BackfillResult> {\n // http.post already unwraps json.data, so we return directly\n return http.post<BackfillResult>('/identifiers/backfill');\n },\n };\n}\n","/**\n * Management Client Factory\n *\n * Creates a typed SDK client for management operations (pull/push content).\n *\n * @example\n * ```typescript\n * import { createManagementClient } from '@riverbankcms/sdk/client/management';\n *\n * const client = createManagementClient({\n * dashboardUrl: 'http://localhost:4000',\n * managementApiKey: 'bld_mgmt_sk_...',\n * siteId: 'your-site-id',\n * });\n *\n * // Pull content\n * const entries = await client.pull.entries('blog-post');\n *\n * // Upsert entry\n * await client.entries.upsert({\n * identifier: 'my-post',\n * contentType: 'blog-post',\n * data: { title: 'Hello World' },\n * });\n *\n * // Publish entry\n * await client.entries.publish('blog-post', 'my-post');\n * ```\n */\n\nimport type { ManagementClient, ManagementClientConfig } from './types';\nimport { createHttpClient } from './http';\nimport { createEntryOperations } from './entries';\nimport { createPageOperations } from './pages';\nimport { createBlockOperations } from './blocks';\nimport { createNavigationOperations } from './navigation';\nimport { createSettingsOperations } from './settings';\nimport { createPullOperations } from './pull';\nimport { createPreviewOperations } from './preview';\nimport { createIdentifiersOperations } from './identifiers';\n\n/**\n * Create a management client for SDK operations\n *\n * @param config - Client configuration\n * @returns ManagementClient instance\n */\nexport function createManagementClient(config: ManagementClientConfig): ManagementClient {\n // Validate configuration\n if (!config.dashboardUrl) {\n throw new Error(\n 'dashboardUrl is required when creating a management client. ' +\n 'Example: http://localhost:4000 or https://dashboard.riverbankcms.com'\n );\n }\n\n if (!config.managementApiKey) {\n throw new Error(\n 'managementApiKey is required when creating a management client. ' +\n 'A management API key starts with bld_mgmt_sk_'\n );\n }\n\n if (!config.managementApiKey.startsWith('bld_mgmt_sk_')) {\n throw new Error(\n 'Invalid management API key format. ' +\n 'A management API key must start with bld_mgmt_sk_'\n );\n }\n\n if (!config.siteId) {\n throw new Error(\n 'siteId is required when creating a management client.'\n );\n }\n\n // Create HTTP client\n const http = createHttpClient(config);\n\n // Create and return client with all operations\n return {\n entries: createEntryOperations(http),\n pages: createPageOperations(http),\n blocks: createBlockOperations(http),\n navigation: createNavigationOperations(http),\n settings: createSettingsOperations(http),\n pull: createPullOperations(http),\n preview: createPreviewOperations(http),\n identifiers: createIdentifiersOperations(http),\n };\n}\n\n// Re-export types\nexport type {\n ManagementClient,\n ManagementClientConfig,\n ManagementEntry,\n ManagementPage,\n ManagementBlock,\n ManagementNavigationMenu,\n ManagementNavigationItem,\n ManagementSettings,\n EntryUpsertInput,\n PageUpsertInput,\n BlockUpsertInput,\n NavigationMenuUpsertInput,\n NavigationItemInput,\n PulledEntries,\n PulledPages,\n PulledNavigation,\n PulledSettings,\n PulledContent,\n PaginationOptions,\n PaginatedResult,\n EntryOperations,\n PageOperations,\n BlockOperations,\n NavigationOperations,\n SettingsOperations,\n SettingsUpdateInput,\n PullOperations,\n PreviewOperations,\n BlockPreviewRequest,\n BlockPreviewResponse,\n BlockPreviewValidationIssue,\n IdentifiersOperations,\n BackfillResult,\n BackfillPageResult,\n BackfillBlockResult,\n BackfillEntryResult,\n} from './types';\n\n// Re-export error\nexport { ManagementApiError } from './http';\n","/**\n * CLI Environment Variable Loading\n *\n * Loads and validates environment variables for SDK CLI commands.\n */\n\n/**\n * SDK environment configuration\n */\nexport interface SdkEnvironment {\n /** Site ID to operate on */\n siteId: string;\n /** Dashboard URL (e.g., http://localhost:4000) */\n dashboardUrl: string;\n /** Management API key (bld_mgmt_sk_...) */\n managementApiKey: string;\n}\n\n/**\n * Environment variable prefix based on target\n */\nexport type EnvironmentTarget = 'local' | 'remote';\n\n/**\n * Get the prefix for environment variables based on target\n */\nfunction getEnvPrefix(target: EnvironmentTarget): string {\n return target === 'remote' ? 'RIVERBANK_REMOTE' : 'RIVERBANK_LOCAL';\n}\n\n/**\n * Require an environment variable, throwing if not set\n */\nfunction requireEnv(name: string): string {\n const value = process.env[name];\n if (!value) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n return value;\n}\n\n/**\n * Get an optional environment variable with a fallback\n */\nfunction getEnv(name: string, fallback?: string): string | undefined {\n return process.env[name] ?? fallback;\n}\n\n/**\n * Load SDK environment configuration\n *\n * @param remote - If true, load remote/production environment\n * @returns SDK environment configuration\n *\n * @example\n * ```typescript\n * // Load local environment\n * const env = loadEnvironment(false);\n *\n * // Load remote/production environment\n * const env = loadEnvironment(true);\n * ```\n */\nexport function loadEnvironment(remote: boolean): SdkEnvironment {\n const target: EnvironmentTarget = remote ? 'remote' : 'local';\n const prefix = getEnvPrefix(target);\n\n const siteId = requireEnv(`${prefix}_SITE_ID`);\n const dashboardUrl = requireEnv(`${prefix}_DASHBOARD_URL`);\n const managementApiKey = requireEnv(`${prefix}_MGMT_API_KEY`);\n\n // Validate management API key format\n if (!managementApiKey.startsWith('bld_mgmt_sk_')) {\n throw new Error(\n `Invalid management API key format for ${prefix}_MGMT_API_KEY. ` +\n 'Expected key starting with bld_mgmt_sk_'\n );\n }\n\n // Validate dashboard URL format\n try {\n new URL(dashboardUrl);\n } catch {\n throw new Error(\n `Invalid dashboard URL in ${prefix}_DASHBOARD_URL: ${dashboardUrl}. ` +\n 'Expected format: http://localhost:4000 or https://dashboard.example.com'\n );\n }\n\n return {\n siteId,\n dashboardUrl,\n managementApiKey,\n };\n}\n\n/**\n * Check if the remote environment is configured\n */\nexport function isRemoteConfigured(): boolean {\n const prefix = getEnvPrefix('remote');\n return !!(\n process.env[`${prefix}_SITE_ID`] &&\n process.env[`${prefix}_DASHBOARD_URL`] &&\n process.env[`${prefix}_MGMT_API_KEY`]\n );\n}\n\n/**\n * Check if the local environment is configured\n */\nexport function isLocalConfigured(): boolean {\n const prefix = getEnvPrefix('local');\n return !!(\n process.env[`${prefix}_SITE_ID`] &&\n process.env[`${prefix}_DASHBOARD_URL`] &&\n process.env[`${prefix}_MGMT_API_KEY`]\n );\n}\n\n/**\n * Get environment variables for debugging (masked)\n */\nexport function getEnvironmentDebugInfo(remote: boolean): Record<string, string> {\n const target: EnvironmentTarget = remote ? 'remote' : 'local';\n const prefix = getEnvPrefix(target);\n\n const mask = (value: string | undefined): string => {\n if (!value) return '(not set)';\n if (value.length <= 8) return '****';\n return value.substring(0, 8) + '...';\n };\n\n return {\n [`${prefix}_SITE_ID`]: process.env[`${prefix}_SITE_ID`] ?? '(not set)',\n [`${prefix}_DASHBOARD_URL`]: process.env[`${prefix}_DASHBOARD_URL`] ?? '(not set)',\n [`${prefix}_MGMT_API_KEY`]: mask(process.env[`${prefix}_MGMT_API_KEY`]),\n };\n}\n","/**\n * CLI Output Formatting\n *\n * Provides consistent output formatting for CLI commands.\n */\n\nexport interface OutputOptions {\n /** Output in JSON format for machine parsing */\n json?: boolean;\n /** Minimal output (suppress non-essential messages) */\n quiet?: boolean;\n}\n\nexport interface OutputContext {\n success(message: string, data?: unknown): void;\n error(message: string, details?: unknown): never;\n warn(message: string, data?: unknown): void;\n info(message: string, data?: unknown): void;\n table(headers: string[], rows: string[][]): void;\n json(data: unknown): void;\n progress(current: number, total: number, message: string): void;\n}\n\n/**\n * Create output context for CLI command\n *\n * @param options - Output options\n * @returns Output context with formatting methods\n */\nexport function createOutput(options: OutputOptions): OutputContext {\n const { json: jsonMode = false, quiet = false } = options;\n\n return {\n success(message: string, data?: unknown): void {\n if (jsonMode) {\n console.log(JSON.stringify({ success: true, message, data }, null, 2));\n } else if (!quiet) {\n console.log(`✓ ${message}`);\n if (data !== undefined) {\n console.log(JSON.stringify(data, null, 2));\n }\n }\n },\n\n error(message: string, details?: unknown): never {\n if (jsonMode) {\n console.error(JSON.stringify({ success: false, error: message, details }, null, 2));\n } else {\n console.error(`✗ ${message}`);\n if (details !== undefined) {\n if (typeof details === 'object' && details !== null) {\n console.error(JSON.stringify(details, null, 2));\n } else {\n console.error(String(details));\n }\n }\n }\n process.exit(1);\n },\n\n warn(message: string, data?: unknown): void {\n if (jsonMode) {\n console.error(JSON.stringify({ warning: message, data }, null, 2));\n } else if (!quiet) {\n console.warn(`⚠ ${message}`);\n if (data !== undefined) {\n console.warn(JSON.stringify(data, null, 2));\n }\n }\n },\n\n info(message: string, data?: unknown): void {\n if (!jsonMode && !quiet) {\n console.log(`ℹ ${message}`);\n if (data !== undefined) {\n console.log(JSON.stringify(data, null, 2));\n }\n }\n },\n\n table(headers: string[], rows: string[][]): void {\n if (jsonMode) {\n // Convert table to array of objects\n const objects = rows.map((row) => {\n const obj: Record<string, string> = {};\n headers.forEach((header, i) => {\n obj[header] = row[i] ?? '';\n });\n return obj;\n });\n console.log(JSON.stringify(objects, null, 2));\n } else if (!quiet) {\n // Calculate column widths\n const widths = headers.map((h, i) => {\n const maxRowWidth = Math.max(...rows.map((r) => (r[i] ?? '').length));\n return Math.max(h.length, maxRowWidth);\n });\n\n // Print header\n const headerRow = headers.map((h, i) => h.padEnd(widths[i]!)).join(' ');\n const separator = widths.map((w) => '-'.repeat(w)).join(' ');\n console.log(headerRow);\n console.log(separator);\n\n // Print rows\n for (const row of rows) {\n const formattedRow = row.map((cell, i) => (cell ?? '').padEnd(widths[i]!)).join(' ');\n console.log(formattedRow);\n }\n }\n },\n\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n },\n\n progress(current: number, total: number, message: string): void {\n if (!jsonMode && !quiet) {\n const percent = Math.round((current / total) * 100);\n const bar = '█'.repeat(Math.floor(percent / 5)) + '░'.repeat(20 - Math.floor(percent / 5));\n process.stdout.write(`\\r${bar} ${percent}% ${message}`);\n if (current === total) {\n console.log(); // New line when complete\n }\n }\n },\n };\n}\n\n/**\n * Format file size for display\n */\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Format duration for display\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${Math.floor(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;\n}\n","/**\n * CLI Error Handling\n *\n * Provides enhanced error formatting for CLI commands.\n */\n\nimport { ManagementApiError } from '../client/management';\n\n/**\n * SDK CLI error codes\n */\nexport const ErrorCodes = {\n // Configuration errors\n MISSING_ENV: 'sdk:missing-env',\n INVALID_CONFIG: 'sdk:invalid-config',\n\n // Network errors\n NETWORK_ERROR: 'sdk:network-error',\n TIMEOUT: 'sdk:timeout',\n\n // Auth errors\n UNAUTHORIZED: 'sdk:unauthorized',\n FORBIDDEN: 'sdk:forbidden',\n\n // Validation errors\n VALIDATION_ERROR: 'sdk:validation-error',\n MISSING_CONTENT_TYPE: 'sdk:missing-content-type',\n UNKNOWN_BLOCK_KIND: 'sdk:unknown-block-kind',\n\n // File system errors\n FILE_NOT_FOUND: 'sdk:file-not-found',\n FILE_WRITE_ERROR: 'sdk:file-write-error',\n\n // General errors\n UNKNOWN: 'sdk:unknown',\n} as const;\n\nexport type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n\n/**\n * Format error for CLI display\n */\nexport interface FormattedError {\n code: string;\n message: string;\n details?: unknown;\n suggestion?: string;\n}\n\n/**\n * Error suggestions based on error code\n */\nconst errorSuggestions: Record<string, string> = {\n 'sdk:missing-env': 'Check your .env.local file and ensure all RIVERBANK_* variables are set.',\n 'sdk:unauthorized': 'Verify your management API key is correct and not expired.',\n 'sdk:forbidden': 'Ensure your API key has the correct permissions for this operation.',\n 'sdk:missing-content-type': 'Run `riverbankcms push-config` to sync your content type definitions.',\n 'sdk:unknown-block-kind': 'Run `riverbankcms push-config` to sync your custom block definitions.',\n 'sdk:network-error': 'Check your network connection and ensure the dashboard is accessible.',\n 'sdk:timeout': 'The request timed out. Try again or check if the dashboard is responding.',\n 'auth:forbidden': 'Your API key is not authorized for this site or operation.',\n 'auth:invalid': 'Invalid API key. Generate a new management key from the dashboard.',\n};\n\n/**\n * Format an error for CLI display\n */\nexport function formatError(error: unknown): FormattedError {\n if (error instanceof ManagementApiError) {\n return {\n code: error.code,\n message: error.message,\n details: error.details,\n suggestion: errorSuggestions[error.code],\n };\n }\n\n if (error instanceof Error) {\n // Check for common error patterns\n if (error.message.includes('ECONNREFUSED')) {\n return {\n code: ErrorCodes.NETWORK_ERROR,\n message: 'Could not connect to the dashboard',\n details: error.message,\n suggestion: errorSuggestions[ErrorCodes.NETWORK_ERROR],\n };\n }\n\n if (error.message.includes('fetch failed')) {\n return {\n code: ErrorCodes.NETWORK_ERROR,\n message: 'Network request failed',\n details: error.message,\n suggestion: errorSuggestions[ErrorCodes.NETWORK_ERROR],\n };\n }\n\n return {\n code: ErrorCodes.UNKNOWN,\n message: error.message,\n };\n }\n\n return {\n code: ErrorCodes.UNKNOWN,\n message: String(error),\n };\n}\n\n/**\n * Format validation errors for display\n */\nexport function formatValidationErrors(\n errors: Array<{ path: string; message: string }>\n): string {\n return errors.map((e) => ` - ${e.path}: ${e.message}`).join('\\n');\n}\n\n/**\n * Format push operation diff for display\n */\nexport interface DiffItem {\n type: 'add' | 'update' | 'delete';\n identifier: string;\n contentType?: string;\n}\n\nexport function formatDiff(items: DiffItem[]): string {\n const lines: string[] = [];\n\n const adds = items.filter((i) => i.type === 'add');\n const updates = items.filter((i) => i.type === 'update');\n const deletes = items.filter((i) => i.type === 'delete');\n\n if (adds.length > 0) {\n lines.push('New:');\n for (const item of adds) {\n const prefix = item.contentType ? `${item.contentType}/` : '';\n lines.push(` + ${prefix}${item.identifier}`);\n }\n }\n\n if (updates.length > 0) {\n lines.push('Updated:');\n for (const item of updates) {\n const prefix = item.contentType ? `${item.contentType}/` : '';\n lines.push(` ~ ${prefix}${item.identifier}`);\n }\n }\n\n if (deletes.length > 0) {\n lines.push('Deleted:');\n for (const item of deletes) {\n const prefix = item.contentType ? `${item.contentType}/` : '';\n lines.push(` - ${prefix}${item.identifier}`);\n }\n }\n\n if (lines.length === 0) {\n return 'No changes detected.';\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Get actionable message for SDK error\n */\nexport function getActionableMessage(code: string): string | undefined {\n return errorSuggestions[code];\n}\n","/**\n * Shared CLI Helpers\n *\n * Common utilities and types shared across CLI commands.\n * Reduces duplication and ensures consistent behavior.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as readline from 'readline';\n\nimport { createManagementClient } from '../client/management';\nimport type { ManagementClient } from '../client/management/types';\nimport { loadEnvironment } from './env';\nimport { createOutput, type OutputContext } from './output';\nimport { formatError } from './errors';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Global options available on all commands via --json, --quiet, --remote flags.\n */\nexport interface GlobalOptions {\n json?: boolean;\n quiet?: boolean;\n remote?: boolean;\n}\n\n/**\n * Options for commands that accept JSON data via --data or --file.\n */\nexport interface DataInputOptions {\n data?: string;\n file?: string;\n}\n\n/**\n * Options for commands that require confirmation.\n */\nexport interface ConfirmOptions {\n yes?: boolean;\n}\n\n/**\n * Context object provided to command handlers.\n */\nexport interface CommandContext {\n output: OutputContext;\n client: ManagementClient;\n isRemote: boolean;\n isJsonOutput: boolean;\n}\n\n/**\n * Pagination options for list commands.\n */\nexport interface PaginationOptions {\n limit?: string;\n page?: string;\n}\n\n/**\n * Parsed pagination values.\n */\nexport interface ParsedPagination {\n limit: number;\n page: number;\n}\n\n/**\n * Type for row formatter functions used in table display.\n * Each formatter takes an entity and returns an array of string values.\n *\n * @example\n * const formatEntryRow: RowFormatter<ManagementEntry> = (entry) => [\n * entry.identifier,\n * entry.status,\n * formatDateShort(entry.updatedAt),\n * ];\n */\nexport type RowFormatter<T> = (item: T) => string[];\n\n/**\n * Entry format for SDK pull operations.\n * Matches the server-side PulledEntry type.\n */\nexport interface PulledEntryOutput {\n identifier: string;\n data: Record<string, unknown>;\n status: 'draft' | 'published';\n hasUnpublishedChanges: boolean;\n /** Slug for URL routing - only present for routable content types */\n slug?: string;\n}\n\n/**\n * Map an entry from API response to pull output format.\n * Conditionally includes slug only for routable content (when slug is defined).\n */\nexport function mapEntryForOutput<T extends {\n identifier: string;\n data: Record<string, unknown>;\n status: 'draft' | 'published';\n hasUnpublishedChanges: boolean;\n slug?: string;\n}>(entry: T): PulledEntryOutput {\n const result: PulledEntryOutput = {\n identifier: entry.identifier,\n data: entry.data,\n status: entry.status,\n hasUnpublishedChanges: entry.hasUnpublishedChanges,\n };\n if (entry.slug !== undefined) {\n result.slug = entry.slug;\n }\n return result;\n}\n\n// ============================================================================\n// Utility Helpers\n// ============================================================================\n\n/**\n * Parse pagination options from command flags.\n *\n * @param options - Object containing optional limit and page strings\n * @returns Parsed pagination values with defaults\n *\n * @example\n * const { limit, page } = parsePaginationOptions({ limit: '10', page: '2' });\n */\nexport function parsePaginationOptions(options: PaginationOptions): ParsedPagination {\n return {\n limit: parseInt(options.limit ?? '20', 10),\n page: parseInt(options.page ?? '1', 10),\n };\n}\n\n/**\n * Format an ISO date string to a short date (YYYY-MM-DD).\n *\n * @param isoDate - ISO date string (e.g., \"2024-01-15T10:30:00Z\")\n * @returns Short date string (e.g., \"2024-01-15\")\n *\n * @example\n * formatDateShort(\"2024-01-15T10:30:00Z\") // \"2024-01-15\"\n */\nexport function formatDateShort(isoDate: string): string {\n return isoDate.split('T')[0] ?? '';\n}\n\n// ============================================================================\n// JSON Data Parsing\n// ============================================================================\n\n/**\n * Parse JSON data from --data flag or --file flag.\n *\n * @param options - Object containing optional data string or file path\n * @returns Parsed JSON object\n * @throws Error if neither data nor file is provided\n * @throws SyntaxError if JSON is invalid\n *\n * @example\n * const data = await parseJsonData({ data: '{\"title\": \"Hello\"}' });\n * const data = await parseJsonData({ file: './content.json' });\n */\nexport async function parseJsonData(\n options: DataInputOptions\n): Promise<Record<string, unknown>> {\n if (options.file) {\n const filePath = path.resolve(options.file);\n const content = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(content) as Record<string, unknown>;\n }\n\n if (options.data) {\n return JSON.parse(options.data) as Record<string, unknown>;\n }\n\n throw new Error('Either --data or --file is required');\n}\n\n/**\n * Parse JSON array from --data flag or --file flag.\n * Handles both direct array format and { items: [...] } wrapper format.\n *\n * @param options - Object containing optional data string or file path\n * @returns Parsed JSON array\n *\n * @example\n * const items = await parseJsonArray({ file: './items.json' });\n */\nexport async function parseJsonArray<T>(\n options: DataInputOptions\n): Promise<T[]> {\n const parsed = await parseJsonData(options);\n\n // Handle wrapper format: { items: [...] }\n if ('items' in parsed && Array.isArray(parsed.items)) {\n return parsed.items as T[];\n }\n\n // Handle direct array (stored as object with numeric keys from JSON.parse)\n if (Array.isArray(parsed)) {\n return parsed as T[];\n }\n\n throw new Error('Expected an array or an object with an \"items\" array');\n}\n\n// ============================================================================\n// Confirmation Prompts\n// ============================================================================\n\n/**\n * Prompt for confirmation unless --yes is provided.\n * Remote operations always require --yes for safety.\n *\n * @param message - Confirmation message to display\n * @param options - Object containing optional yes flag\n * @param isRemote - Whether this is a remote operation\n * @returns True if confirmed, false otherwise\n *\n * @example\n * const confirmed = await confirmAction('Delete entry \"post-1\"?', { yes: false }, true);\n * if (!confirmed) return;\n */\nexport async function confirmAction(\n message: string,\n options: ConfirmOptions,\n isRemote: boolean\n): Promise<boolean> {\n // Remote operations always require --yes\n if (isRemote && !options.yes) {\n console.error('Remote operations require --yes flag for safety');\n return false;\n }\n\n // Skip confirmation if --yes is provided\n if (options.yes) {\n return true;\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(`${message} (y/N): `, (answer) => {\n rl.close();\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');\n });\n });\n}\n\n// ============================================================================\n// Command Context\n// ============================================================================\n\n/**\n * Create command context with output, client, and remote flag.\n *\n * @param command - Commander command instance\n * @returns Context object with output, client, and isRemote flag\n *\n * @example\n * const ctx = createCommandContext(command);\n * ctx.output.info('Starting...');\n * await ctx.client.entries.get('post', 'my-post');\n */\nexport function createCommandContext(command: Command): CommandContext {\n const globalOpts = command.optsWithGlobals<GlobalOptions>();\n const isRemote = globalOpts.remote ?? false;\n const isJsonOutput = globalOpts.json ?? false;\n\n const output = createOutput({\n json: globalOpts.json,\n quiet: globalOpts.quiet,\n });\n\n const env = loadEnvironment(isRemote);\n const client = createManagementClient({\n dashboardUrl: env.dashboardUrl,\n managementApiKey: env.managementApiKey,\n siteId: env.siteId,\n });\n\n return { output, client, isRemote, isJsonOutput };\n}\n\n/**\n * Get global options and output context without creating a client.\n * Useful when you need to check conditions before creating the client.\n *\n * @param command - Commander command instance\n * @returns Object with output, isRemote flag, and globalOpts\n */\nexport function getOutputContext(command: Command): {\n output: OutputContext;\n isRemote: boolean;\n globalOpts: GlobalOptions;\n} {\n const globalOpts = command.optsWithGlobals<GlobalOptions>();\n const isRemote = globalOpts.remote ?? false;\n\n const output = createOutput({\n json: globalOpts.json,\n quiet: globalOpts.quiet,\n });\n\n return { output, isRemote, globalOpts };\n}\n\n// ============================================================================\n// Error Handling\n// ============================================================================\n\n/**\n * Handle errors in a consistent way across all commands.\n *\n * @param error - The error that occurred\n * @param output - Output context for displaying errors\n *\n * @example\n * try {\n * await doSomething();\n * } catch (error) {\n * handleCommandError(error, output);\n * }\n */\nexport function handleCommandError(error: unknown, output: OutputContext): void {\n if (error instanceof SyntaxError) {\n output.error('Invalid JSON data', { suggestion: 'Check your JSON syntax' });\n return;\n }\n\n const formatted = formatError(error);\n output.error(formatted.message, {\n code: formatted.code,\n details: formatted.details,\n suggestion: formatted.suggestion,\n });\n}\n\n/**\n * Wrap an async command action with standard error handling.\n *\n * @param action - The async action to wrap\n * @returns Wrapped action that handles errors\n *\n * @example\n * .action(withErrorHandling(async (args, options, command) => {\n * const ctx = createCommandContext(command);\n * // ... command logic\n * }))\n */\nexport function withErrorHandling<TArgs extends unknown[]>(\n action: (...args: [...TArgs, Command]) => Promise<void>\n): (...args: [...TArgs, Command]) => Promise<void> {\n return async (...args) => {\n const command = args[args.length - 1] as Command;\n const { output } = getOutputContext(command);\n\n try {\n await action(...args);\n } catch (error) {\n handleCommandError(error, output);\n }\n };\n}\n\n/**\n * Wrap a destructive command action with confirmation prompt and error handling.\n *\n * @param getMessage - Function that builds the confirmation message from command args\n * @param action - The async action to perform after confirmation\n * @returns Wrapped action that confirms, then executes with error handling\n *\n * @example\n * .action(withConfirmation(\n * (type, identifier) => `Delete entry \"${type}/${identifier}\"?`,\n * async (ctx, type, identifier) => {\n * ctx.output.info(`Deleting entry: ${type}/${identifier}`);\n * await ctx.client.entries.delete(type, identifier);\n * ctx.output.success(`Entry deleted: ${identifier}`);\n * }\n * ))\n */\nexport function withConfirmation<TArgs extends unknown[]>(\n getMessage: (...args: TArgs) => string,\n action: (ctx: CommandContext, ...args: TArgs) => Promise<void>\n): (...args: [...TArgs, ConfirmOptions, Command]) => Promise<void> {\n return async (...allArgs) => {\n const command = allArgs[allArgs.length - 1] as Command;\n const options = allArgs[allArgs.length - 2] as ConfirmOptions;\n const args = allArgs.slice(0, -2) as unknown as TArgs;\n\n const ctx = createCommandContext(command);\n const { output, isRemote } = ctx;\n\n const confirmed = await confirmAction(getMessage(...args), options, isRemote);\n\n if (!confirmed) {\n output.info('Operation cancelled');\n process.exit(0);\n }\n\n try {\n await action(ctx, ...args);\n } catch (error) {\n handleCommandError(error, output);\n }\n };\n}\n\n// ============================================================================\n// Command Factory Functions\n// ============================================================================\n\n/**\n * Capitalize the first letter of a string.\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Configuration for publish/unpublish command factories.\n */\nexport interface PublishCommandConfig {\n /** Resource name for display (e.g., 'entry', 'page') */\n resourceName: string;\n /** Argument names (e.g., ['type', 'identifier'] or ['identifier']) */\n args: readonly string[];\n /** Function to call the appropriate client method */\n action: (client: ManagementClient, ...args: string[]) => Promise<void>;\n}\n\n/**\n * Create a publish command for a resource.\n *\n * @example\n * const publishCommand = createPublishCommand({\n * resourceName: 'entry',\n * args: ['type', 'identifier'],\n * action: (client, type, id) => client.entries.publish(type, id),\n * });\n */\nexport function createPublishCommand(config: PublishCommandConfig): Command {\n const cmd = new Command('publish').description(`Publish a ${config.resourceName}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client } = createCommandContext(command);\n\n const label = args.join('/');\n output.info(`Publishing ${config.resourceName}: ${label}`);\n await config.action(client, ...args);\n output.success(`${capitalize(config.resourceName)} published: ${label}`);\n })\n );\n}\n\n/**\n * Create an unpublish command for a resource.\n *\n * @example\n * const unpublishCommand = createUnpublishCommand({\n * resourceName: 'entry',\n * args: ['type', 'identifier'],\n * action: (client, type, id) => client.entries.unpublish(type, id),\n * });\n */\nexport function createUnpublishCommand(config: PublishCommandConfig): Command {\n const cmd = new Command('unpublish').description(`Unpublish a ${config.resourceName}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client } = createCommandContext(command);\n\n const label = args.join('/');\n output.info(`Unpublishing ${config.resourceName}: ${label}`);\n await config.action(client, ...args);\n output.success(`${capitalize(config.resourceName)} unpublished: ${label}`);\n })\n );\n}\n\n/**\n * Configuration for get command factory.\n */\nexport interface GetCommandConfig<T> {\n /** Resource name for display (e.g., 'entry', 'page') */\n resourceName: string;\n /** Argument names (e.g., ['type', 'identifier'] or ['identifier']) */\n args: readonly string[];\n /** Function to fetch the resource */\n get: (client: ManagementClient, ...args: string[]) => Promise<T | null>;\n /** Function to format the resource for non-JSON output */\n formatOutput: (item: T) => Record<string, unknown>;\n}\n\n/**\n * Create a get command for a resource.\n *\n * @example\n * const getCommand = createGetCommand({\n * resourceName: 'entry',\n * args: ['type', 'identifier'],\n * get: (client, type, id) => client.entries.get(type, id),\n * formatOutput: (entry) => ({\n * id: entry.id,\n * status: entry.status,\n * }),\n * });\n */\nexport function createGetCommand<T>(config: GetCommandConfig<T>): Command {\n const cmd = new Command('get').description(`Get a single ${config.resourceName}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client, isJsonOutput } = createCommandContext(command);\n\n const label = args.join('/');\n const item = await config.get(client, ...args);\n\n if (!item) {\n return output.error(`${capitalize(config.resourceName)} not found: ${label}`, {\n suggestion: `Check that the ${config.args.join(' and ')} ${config.args.length > 1 ? 'are' : 'is'} correct`,\n });\n }\n\n if (isJsonOutput) {\n output.json(item);\n } else {\n output.success(`${capitalize(config.resourceName)}: ${label}`, config.formatOutput(item));\n }\n })\n );\n}\n\n/**\n * Result type for list operations.\n */\nexport interface ListResult<T> {\n items: T[];\n pagination?: {\n page: number;\n limit: number;\n total: number;\n };\n}\n\n/**\n * Configuration for list command factory.\n */\nexport interface ListCommandConfig<T> {\n /** Resource name for display (e.g., 'entry', 'page') */\n resourceName: string;\n /** Plural resource name (e.g., 'entries', 'pages') */\n resourceNamePlural: string;\n /** Argument names (e.g., ['type'] for entries, [] for pages) */\n args: readonly string[];\n /** Whether this list supports pagination options */\n hasPagination: boolean;\n /** Function to fetch the list - receives args as array plus optional pagination */\n list: (\n client: ManagementClient,\n args: string[],\n pagination?: ParsedPagination\n ) => Promise<ListResult<T>>;\n /** Table column headers */\n tableHeaders: string[];\n /** Row formatter for table display */\n formatRow: RowFormatter<T>;\n}\n\n/**\n * Create a list command for a resource.\n *\n * @example\n * const listCommand = createListCommand({\n * resourceName: 'entry',\n * resourceNamePlural: 'entries',\n * args: ['type'],\n * hasPagination: true,\n * list: (client, [type], pagination) => client.entries.list(type, pagination),\n * tableHeaders: ['Identifier', 'Status', 'Updated'],\n * formatRow: (entry) => [entry.identifier, entry.status, entry.updatedAt],\n * });\n */\nexport function createListCommand<T>(config: ListCommandConfig<T>): Command {\n const cmd = new Command('list').description(`List ${config.resourceNamePlural}`);\n\n for (const arg of config.args) {\n cmd.argument(`<${arg}>`, `${capitalize(arg.replace('-', ' '))}`);\n }\n\n if (config.hasPagination) {\n cmd.option('--limit <n>', 'Number of items per page', '20');\n cmd.option('--page <n>', 'Page number', '1');\n }\n\n return cmd.action(\n withErrorHandling(async (...actionArgs: unknown[]) => {\n const args = actionArgs.slice(0, config.args.length) as string[];\n const options = actionArgs[config.args.length] as PaginationOptions;\n const command = actionArgs[actionArgs.length - 1] as Command;\n const { output, client, isJsonOutput } = createCommandContext(command);\n\n const pagination = config.hasPagination ? parsePaginationOptions(options) : undefined;\n const result = await config.list(client, args, pagination);\n\n if (isJsonOutput) {\n output.json({\n [config.resourceNamePlural]: result.items,\n ...(result.pagination && { pagination: result.pagination }),\n });\n } else if (result.items.length === 0) {\n const context = args.length > 0 ? ` for ${args.join('/')}` : '';\n output.info(`No ${config.resourceNamePlural} found${context}`);\n } else {\n output.table(config.tableHeaders, result.items.map(config.formatRow));\n if (result.pagination) {\n output.info(\n `Showing ${result.items.length} of ${result.pagination.total} ${config.resourceNamePlural} (page ${result.pagination.page})`\n );\n } else {\n output.info(`${result.items.length} ${config.resourceNamePlural}`);\n }\n }\n })\n );\n}\n","/**\n * Content Mapper Utilities\n *\n * Converts pulled remote content to local format for comparison.\n * Strips metadata fields that don't exist in local files.\n */\n\nimport type {\n ManagementNavigationItem,\n ManagementNavigationMenu,\n PulledPages,\n PulledEntries,\n} from '../../client/management/types';\nimport type {\n LocalEntry,\n LocalPage,\n LocalBlock,\n LocalNavigation,\n LocalNavigationItem,\n LocalNavigationMenu,\n} from '../content/reader';\n\n// ============================================================================\n// Navigation Mapping\n// ============================================================================\n\n/**\n * Strip ID and position from remote navigation items for comparison.\n * Local navigation files don't include these server-generated fields.\n */\nexport function stripNavigationItemIds(\n items: ManagementNavigationItem[]\n): LocalNavigationItem[] {\n return items.map((item) => {\n const result: LocalNavigationItem = {\n label: item.label,\n url: item.url,\n };\n // Only include children if present (to match local format)\n if (item.children && item.children.length > 0) {\n result.children = stripNavigationItemIds(item.children);\n }\n return result;\n });\n}\n\n/**\n * Convert pulled navigation menus to local format for comparison.\n * Strips internal IDs and timestamps, keeps only sync-relevant fields.\n */\nexport function convertPulledNavigationToLocal(\n remoteMenus: ManagementNavigationMenu[]\n): LocalNavigation {\n return {\n menus: remoteMenus.map((menu): LocalNavigationMenu => ({\n identifier: menu.identifier,\n name: menu.name,\n items: stripNavigationItemIds(menu.items),\n })),\n };\n}\n\n// ============================================================================\n// Page Mapping\n// ============================================================================\n\n/**\n * Convert pulled pages to local format for comparison.\n * Strips server-side metadata like timestamps.\n */\nexport function convertPulledPagesToLocal(\n remotePages: PulledPages['pages']\n): LocalPage[] {\n return remotePages.map((page) => ({\n identifier: page.identifier,\n title: page.title,\n path: page.path,\n status: page.status,\n hasUnpublishedChanges: page.hasUnpublishedChanges,\n blocks: page.blocks.map((block): LocalBlock => ({\n identifier: block.identifier,\n kind: block.kind,\n position: block.position,\n data: block.data,\n })),\n }));\n}\n\n// ============================================================================\n// Entry Mapping\n// ============================================================================\n\n/**\n * Convert pulled entries to local format for comparison.\n * Strips server-side metadata like timestamps.\n */\nexport function convertPulledEntriesToLocal(\n remoteEntries: Record<string, PulledEntries['entries']>\n): Map<string, LocalEntry[]> {\n const result = new Map<string, LocalEntry[]>();\n\n for (const [contentType, entries] of Object.entries(remoteEntries)) {\n result.set(\n contentType,\n entries.map((entry) => ({\n identifier: entry.identifier,\n data: entry.data,\n status: entry.status,\n hasUnpublishedChanges: entry.hasUnpublishedChanges,\n slug: entry.slug,\n }))\n );\n }\n\n return result;\n}\n","/**\n * Content File Writer\n *\n * Writes pulled content to the file system in the appropriate JSON format.\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nimport type {\n PulledEntries,\n PulledPages,\n PulledNavigation,\n PulledSettings,\n} from '../../client/management/types';\nimport { mapEntryForOutput } from '../helpers';\nimport { convertPulledNavigationToLocal } from '../sync/mapper';\n\n/**\n * Ensure directory exists, creating it if necessary\n */\nasync function ensureDir(dirPath: string): Promise<void> {\n try {\n await fs.mkdir(dirPath, { recursive: true });\n } catch (error) {\n // Ignore if directory already exists\n if ((error as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw error;\n }\n }\n}\n\n/**\n * Write JSON file with pretty formatting\n */\nasync function writeJsonFile(filePath: string, data: unknown): Promise<void> {\n const content = JSON.stringify(data, null, 2) + '\\n';\n await fs.writeFile(filePath, content, 'utf-8');\n}\n\n/**\n * Write entries to content directory\n *\n * Format: content/entries/{contentType}.json\n * Meta: content/.meta/{contentType}.json\n */\nexport async function writeEntries(\n contentDir: string,\n pulledEntries: PulledEntries\n): Promise<{ filePath: string; metaPath: string }> {\n const entriesDir = path.join(contentDir, 'entries');\n const metaDir = path.join(contentDir, '.meta');\n\n await ensureDir(entriesDir);\n await ensureDir(metaDir);\n\n const { contentType, entries, meta } = pulledEntries;\n\n // Write main entries file using shared helper for consistent slug handling\n const entriesFile = {\n contentType,\n entries: entries.map(mapEntryForOutput),\n };\n\n const filePath = path.join(entriesDir, `${contentType}.json`);\n await writeJsonFile(filePath, entriesFile);\n\n // Write metadata file\n const metaPath = path.join(metaDir, `${contentType}.json`);\n await writeJsonFile(metaPath, meta);\n\n return { filePath, metaPath };\n}\n\n/**\n * Write pages to content directory\n *\n * Format: content/pages/{identifier}.json\n * Meta: content/.meta/pages.json\n */\nexport async function writePages(\n contentDir: string,\n pulledPages: PulledPages\n): Promise<{ filePaths: string[]; metaPath: string }> {\n const pagesDir = path.join(contentDir, 'pages');\n const metaDir = path.join(contentDir, '.meta');\n await ensureDir(pagesDir);\n await ensureDir(metaDir);\n\n const filePaths: string[] = [];\n\n // Build metadata for stale detection\n const pagesMeta: Record<string, { createdAt?: string; updatedAt?: string }> = {};\n\n for (const page of pulledPages.pages) {\n const filePath = path.join(pagesDir, `${page.identifier}.json`);\n await writeJsonFile(filePath, page);\n filePaths.push(filePath);\n\n // Store metadata for this page\n pagesMeta[page.identifier] = {\n createdAt: page.createdAt,\n updatedAt: page.updatedAt,\n };\n }\n\n // Write metadata file\n const metaPath = path.join(metaDir, 'pages.json');\n await writeJsonFile(metaPath, {\n pulledAt: pulledPages.meta.pulledAt,\n pages: pagesMeta,\n });\n\n return { filePaths, metaPath };\n}\n\n/**\n * Write navigation menus to content directory\n *\n * Format: content/navigation.json\n * Meta: content/.meta/navigation.json\n */\nexport async function writeNavigation(\n contentDir: string,\n pulledNavigation: PulledNavigation\n): Promise<{ filePath: string; metaPath: string }> {\n const metaDir = path.join(contentDir, '.meta');\n await ensureDir(contentDir);\n await ensureDir(metaDir);\n\n const filePath = path.join(contentDir, 'navigation.json');\n // Convert to local format (strips internal IDs and timestamps)\n const localNavigation = convertPulledNavigationToLocal(pulledNavigation.menus);\n await writeJsonFile(filePath, localNavigation);\n\n // Build metadata for stale detection\n const menusMeta: Record<string, { createdAt?: string; updatedAt?: string }> = {};\n for (const menu of pulledNavigation.menus) {\n menusMeta[menu.name] = {\n createdAt: menu.createdAt,\n updatedAt: menu.updatedAt,\n };\n }\n\n // Write metadata file\n const metaPath = path.join(metaDir, 'navigation.json');\n await writeJsonFile(metaPath, {\n pulledAt: pulledNavigation.meta.pulledAt,\n menus: menusMeta,\n });\n\n return { filePath, metaPath };\n}\n\n/**\n * Write settings to content directory\n *\n * Format: content/settings.json\n */\nexport async function writeSettings(\n contentDir: string,\n pulledSettings: PulledSettings\n): Promise<string> {\n await ensureDir(contentDir);\n\n const filePath = path.join(contentDir, 'settings.json');\n await writeJsonFile(filePath, pulledSettings.settings);\n\n return filePath;\n}\n\n/**\n * Write all pulled content to content directory\n */\nexport interface WriteAllResult {\n entries: Array<{ contentType: string; filePath: string; metaPath: string }>;\n pages: { filePaths: string[]; metaPath: string };\n navigation: { filePath: string; metaPath: string };\n settings: string;\n}\n\nexport async function writeAllContent(\n contentDir: string,\n content: {\n entries: Record<string, PulledEntries['entries']>;\n pages: PulledPages;\n navigation: PulledNavigation;\n settings: PulledSettings;\n }\n): Promise<WriteAllResult> {\n const result: WriteAllResult = {\n entries: [],\n pages: { filePaths: [], metaPath: '' },\n navigation: { filePath: '', metaPath: '' },\n settings: '',\n };\n\n // Write entries for each content type using shared helper\n for (const [contentType, entries] of Object.entries(content.entries)) {\n const pulledEntries: PulledEntries = {\n contentType,\n entries: entries.map(mapEntryForOutput),\n meta: {\n pulledAt: new Date().toISOString(),\n entries: {},\n },\n pagination: { page: 1, limit: entries.length, total: entries.length, hasMore: false },\n };\n\n const { filePath, metaPath } = await writeEntries(contentDir, pulledEntries);\n result.entries.push({ contentType, filePath, metaPath });\n }\n\n // Write pages\n result.pages = await writePages(contentDir, content.pages);\n\n // Write navigation\n result.navigation = await writeNavigation(contentDir, content.navigation);\n\n // Write settings\n result.settings = await writeSettings(contentDir, content.settings);\n\n return result;\n}\n","/**\n * Content File Reader\n *\n * Reads content from the file system for push operations.\n * Mirrors the structure created by writer.ts.\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\n// ============================================================================\n// Types for Local Content Files\n// ============================================================================\n\nexport interface LocalEntry {\n identifier: string;\n data: Record<string, unknown>;\n status?: 'draft' | 'published';\n hasUnpublishedChanges?: boolean;\n slug?: string;\n}\n\nexport interface LocalEntriesFile {\n contentType: string;\n entries: LocalEntry[];\n}\n\nexport interface LocalBlock {\n identifier: string;\n kind: string;\n position?: number;\n data: Record<string, unknown>;\n}\n\nexport interface LocalPage {\n identifier: string;\n title: string;\n path: string;\n status?: 'draft' | 'published';\n hasUnpublishedChanges?: boolean;\n blocks?: LocalBlock[];\n seoTitle?: string;\n seoDescription?: string;\n updatedAt?: string;\n}\n\nexport interface LocalNavigationItem {\n label: string;\n url: string;\n children?: LocalNavigationItem[];\n}\n\nexport interface LocalNavigationMenu {\n identifier?: string | null;\n name: string;\n items: LocalNavigationItem[];\n}\n\nexport interface LocalNavigation {\n menus: LocalNavigationMenu[];\n}\n\nexport interface LocalSettings {\n homepageId?: string | null;\n seoDefaults?: {\n title?: string;\n description?: string;\n ogImage?: string;\n } | null;\n}\n\n// ============================================================================\n// Reading Functions\n// ============================================================================\n\n/**\n * Check if a file exists\n */\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Read and parse a JSON file\n */\nasync function readJsonFile<T>(filePath: string): Promise<T> {\n const content = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(content) as T;\n}\n\n/**\n * List files in a directory with a specific extension\n */\nasync function listFiles(dirPath: string, extension: string): Promise<string[]> {\n try {\n const files = await fs.readdir(dirPath);\n return files\n .filter((f) => f.endsWith(extension))\n .map((f) => path.join(dirPath, f));\n } catch {\n return [];\n }\n}\n\n/**\n * Read entries from content directory\n *\n * Format: content/entries/{contentType}.json\n *\n * @param contentDir - Base content directory\n * @param contentType - Optional specific content type to read\n * @returns Map of content type to entries\n */\nexport async function readEntries(\n contentDir: string,\n contentType?: string\n): Promise<Map<string, LocalEntry[]>> {\n const entriesDir = path.join(contentDir, 'entries');\n const result = new Map<string, LocalEntry[]>();\n\n if (contentType) {\n // Read specific content type\n const filePath = path.join(entriesDir, `${contentType}.json`);\n if (await fileExists(filePath)) {\n const file = await readJsonFile<LocalEntriesFile>(filePath);\n result.set(file.contentType, file.entries);\n }\n } else {\n // Read all content types\n const files = await listFiles(entriesDir, '.json');\n for (const filePath of files) {\n try {\n const file = await readJsonFile<LocalEntriesFile>(filePath);\n result.set(file.contentType, file.entries);\n } catch (error) {\n // Skip invalid files\n console.warn(`Warning: Could not parse ${filePath}:`, error);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Read pages from content directory\n *\n * Format: content/pages/{identifier}.json\n *\n * @param contentDir - Base content directory\n * @returns Array of local pages\n */\nexport async function readPages(contentDir: string): Promise<LocalPage[]> {\n const pagesDir = path.join(contentDir, 'pages');\n const pages: LocalPage[] = [];\n\n const files = await listFiles(pagesDir, '.json');\n for (const filePath of files) {\n try {\n const page = await readJsonFile<LocalPage>(filePath);\n pages.push(page);\n } catch (error) {\n console.warn(`Warning: Could not parse ${filePath}:`, error);\n }\n }\n\n return pages;\n}\n\n/**\n * Read navigation from content directory\n *\n * Format: content/navigation.json\n *\n * @param contentDir - Base content directory\n * @returns Navigation menus or null if not found\n */\nexport async function readNavigation(contentDir: string): Promise<LocalNavigation | null> {\n const filePath = path.join(contentDir, 'navigation.json');\n\n if (!(await fileExists(filePath))) {\n return null;\n }\n\n return readJsonFile<LocalNavigation>(filePath);\n}\n\n/**\n * Read settings from content directory\n *\n * Format: content/settings.json\n *\n * @param contentDir - Base content directory\n * @returns Settings or null if not found\n */\nexport async function readSettings(contentDir: string): Promise<LocalSettings | null> {\n const filePath = path.join(contentDir, 'settings.json');\n\n if (!(await fileExists(filePath))) {\n return null;\n }\n\n return readJsonFile<LocalSettings>(filePath);\n}\n\n/**\n * Read all content from content directory\n */\nexport interface LocalContent {\n entries: Map<string, LocalEntry[]>;\n pages: LocalPage[];\n navigation: LocalNavigation | null;\n settings: LocalSettings | null;\n}\n\nexport async function readAllContent(contentDir: string): Promise<LocalContent> {\n const [entries, pages, navigation, settings] = await Promise.all([\n readEntries(contentDir),\n readPages(contentDir),\n readNavigation(contentDir),\n readSettings(contentDir),\n ]);\n\n return { entries, pages, navigation, settings };\n}\n\n/**\n * Check if content directory exists and has content\n */\nexport async function contentDirExists(contentDir: string): Promise<boolean> {\n return fileExists(contentDir);\n}\n\n/**\n * Get summary of content in directory\n */\nexport interface ContentSummary {\n hasEntries: boolean;\n entryTypes: string[];\n totalEntries: number;\n hasPages: boolean;\n pageCount: number;\n hasNavigation: boolean;\n menuCount: number;\n hasSettings: boolean;\n}\n\nexport async function getContentSummary(contentDir: string): Promise<ContentSummary> {\n const content = await readAllContent(contentDir);\n\n const entryTypes = Array.from(content.entries.keys());\n let totalEntries = 0;\n for (const entries of content.entries.values()) {\n totalEntries += entries.length;\n }\n\n return {\n hasEntries: content.entries.size > 0,\n entryTypes,\n totalEntries,\n hasPages: content.pages.length > 0,\n pageCount: content.pages.length,\n hasNavigation: content.navigation !== null && content.navigation.menus.length > 0,\n menuCount: content.navigation?.menus.length ?? 0,\n hasSettings: content.settings !== null,\n };\n}\n\n// ============================================================================\n// Metadata Reading\n// ============================================================================\n\nexport interface EntryMetadata {\n pulledAt: string;\n entries: Record<\n string,\n {\n id?: string;\n createdAt?: string;\n updatedAt?: string;\n publishedAt?: string;\n }\n >;\n}\n\nexport interface PagesMetadata {\n pulledAt: string;\n pages: Record<\n string,\n {\n createdAt?: string;\n updatedAt?: string;\n }\n >;\n}\n\nexport interface NavigationMetadata {\n pulledAt: string;\n menus: Record<\n string,\n {\n createdAt?: string;\n updatedAt?: string;\n }\n >;\n}\n\n/**\n * Read metadata for a content type from .meta/ directory\n *\n * @param contentDir - Base content directory\n * @param contentType - Content type to read metadata for\n * @returns Metadata or null if not found\n */\nexport async function readEntriesMeta(\n contentDir: string,\n contentType: string\n): Promise<EntryMetadata | null> {\n const metaPath = path.join(contentDir, '.meta', `${contentType}.json`);\n\n try {\n const content = await fs.readFile(metaPath, 'utf-8');\n return JSON.parse(content) as EntryMetadata;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return null; // No metadata file exists\n }\n throw error;\n }\n}\n\n/**\n * Read all entry metadata files from .meta/ directory\n *\n * @param contentDir - Base content directory\n * @returns Map of content type to metadata\n */\nexport async function readAllMeta(\n contentDir: string\n): Promise<Map<string, EntryMetadata>> {\n const metaDir = path.join(contentDir, '.meta');\n const metaMap = new Map<string, EntryMetadata>();\n\n try {\n const files = await fs.readdir(metaDir);\n for (const file of files) {\n // Skip pages.json and navigation.json - they have different structures\n if (file.endsWith('.json') && file !== 'pages.json' && file !== 'navigation.json') {\n const contentType = file.replace('.json', '');\n const meta = await readEntriesMeta(contentDir, contentType);\n if (meta) metaMap.set(contentType, meta);\n }\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n\n return metaMap;\n}\n\n/**\n * Read pages metadata from .meta/pages.json\n *\n * @param contentDir - Base content directory\n * @returns Pages metadata or null if not found\n */\nexport async function readPagesMeta(\n contentDir: string\n): Promise<PagesMetadata | null> {\n const metaPath = path.join(contentDir, '.meta', 'pages.json');\n\n try {\n const content = await fs.readFile(metaPath, 'utf-8');\n return JSON.parse(content) as PagesMetadata;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Read navigation metadata from .meta/navigation.json\n *\n * @param contentDir - Base content directory\n * @returns Navigation metadata or null if not found\n */\nexport async function readNavigationMeta(\n contentDir: string\n): Promise<NavigationMetadata | null> {\n const metaPath = path.join(contentDir, '.meta', 'navigation.json');\n\n try {\n const content = await fs.readFile(metaPath, 'utf-8');\n return JSON.parse(content) as NavigationMetadata;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw error;\n }\n}\n","/**\n * Pull Command\n *\n * Pulls content from the CMS and saves to local JSON files.\n *\n * Usage:\n * riverbankcms pull # Pull all content\n * riverbankcms pull entries # Pull all entries\n * riverbankcms pull entries blog-post # Pull specific content type\n * riverbankcms pull pages # Pull all pages\n * riverbankcms pull navigation # Pull navigation menus\n * riverbankcms pull settings # Pull site settings\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\nimport prompts from 'prompts';\n\nimport type { ManagementClient, PulledEntries, PulledContent } from '../../client/management';\nimport {\n writeEntries,\n writePages,\n writeNavigation,\n writeSettings,\n} from '../content/writer';\nimport {\n createCommandContext,\n withErrorHandling,\n mapEntryForOutput,\n type PulledEntryOutput,\n} from '../helpers';\nimport { contentDirExists } from '../content/reader';\nimport type { OutputContext } from '../output';\n\ninterface PullOptions {\n output?: string;\n force?: boolean;\n yes?: boolean;\n}\n\nconst DEFAULT_PAGE_LIMIT = 500;\n\n/**\n * Pull all entries for a content type with pagination.\n * Continues fetching until hasMore is false.\n * Aggregates metadata from all pages.\n */\nasync function pullEntriesWithPagination(\n client: ManagementClient,\n contentType: string,\n output: OutputContext\n): Promise<PulledEntries> {\n const allEntries: PulledEntries['entries'] = [];\n // Aggregate metadata across all pages (not just last page)\n const aggregatedMeta: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }> = {};\n let page = 1;\n let hasMore = true;\n let pulledAt = new Date().toISOString();\n\n while (hasMore) {\n const result = await client.pull.entries(contentType, {\n page,\n limit: DEFAULT_PAGE_LIMIT,\n });\n\n allEntries.push(...result.entries);\n\n // Merge metadata from this page\n if (result.meta.entries) {\n Object.assign(aggregatedMeta, result.meta.entries);\n }\n pulledAt = result.meta.pulledAt;\n hasMore = result.pagination.hasMore;\n\n if (hasMore) {\n output.info(`Fetched ${allEntries.length} entries (page ${page})...`);\n }\n page++;\n }\n\n // Return combined result with aggregated metadata\n return {\n contentType,\n entries: allEntries,\n meta: { pulledAt, entries: aggregatedMeta },\n pagination: {\n page: 1,\n limit: allEntries.length,\n total: allEntries.length,\n hasMore: false,\n },\n };\n}\n\n/**\n * Write all entries from a pull result to the content directory.\n * Handles the common pattern of iterating content types and writing each.\n */\nasync function writeAllEntries(\n contentDir: string,\n entriesByType: Record<string, PulledEntryOutput[]>,\n pulledAt: string,\n entriesMeta?: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }>\n): Promise<{ totalCount: number; files: string[] }> {\n let totalCount = 0;\n const files: string[] = [];\n\n for (const [contentType, entries] of Object.entries(entriesByType)) {\n // Extract metadata for this content type's entries\n // API returns keys as \"contentType:identifier\", we need to map to just \"identifier\"\n const ctMeta: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }> = {};\n for (const entry of entries) {\n const key = `${contentType}:${entry.identifier}`;\n if (entriesMeta?.[key]) {\n ctMeta[entry.identifier] = entriesMeta[key];\n }\n }\n\n const { filePath } = await writeEntries(contentDir, {\n contentType,\n entries,\n meta: { pulledAt, entries: ctMeta },\n pagination: { page: 1, limit: entries.length, total: entries.length, hasMore: false },\n });\n totalCount += entries.length;\n files.push(filePath);\n }\n\n return { totalCount, files };\n}\n\n/**\n * Fetch all content with pagination when bulk pull was truncated.\n * This ensures we get complete data for sites with >100 entries per type.\n * Preserves metadata from all paginated fetches for stale detection.\n */\nasync function fetchAllContentPaginated(\n client: ManagementClient,\n contentTypes: string[],\n output: OutputContext\n): Promise<PulledContent> {\n const allEntries: Record<string, PulledEntryOutput[]> = {};\n // Aggregate metadata from all content types with proper keys\n const allMeta: Record<string, { createdAt: string; updatedAt: string; publishedAt: string | null }> = {};\n\n // Fetch each content type with pagination\n for (const contentType of contentTypes) {\n output.info(`Fetching ${contentType} entries...`);\n const result = await pullEntriesWithPagination(client, contentType, output);\n allEntries[contentType] = result.entries.map(mapEntryForOutput);\n\n // Preserve metadata with contentType:identifier keys\n for (const [id, meta] of Object.entries(result.meta.entries || {})) {\n allMeta[`${contentType}:${id}`] = meta;\n }\n\n output.info(` ${result.entries.length} entries`);\n }\n\n // Pages, navigation, and settings don't need pagination (typically small)\n output.info('Fetching pages...');\n const pagesResult = await client.pull.pages();\n\n output.info('Fetching navigation...');\n const navigationResult = await client.pull.navigation();\n\n output.info('Fetching settings...');\n const settingsResult = await client.pull.settings();\n\n return {\n entries: allEntries,\n pages: pagesResult.pages,\n navigation: navigationResult.menus,\n settings: settingsResult.settings,\n meta: { pulledAt: new Date().toISOString(), entries: allMeta },\n };\n}\n\nexport const pullCommand = new Command('pull')\n .description('Pull content from CMS')\n .argument('[scope]', 'What to pull: entries, pages, navigation, settings, or all (default)')\n .argument('[type]', 'Content type (when scope is \"entries\")')\n .option('--output <dir>', 'Output directory', './content')\n .option('--force', 'Overwrite existing files without prompting')\n .option('--yes', 'Skip confirmation prompt (same as --force)')\n .addHelpText('after', `\nExamples:\n $ riverbankcms pull # Pull all content\n $ riverbankcms pull --remote # Pull from production\n $ riverbankcms pull entries # Pull all entries\n $ riverbankcms pull entries blog-post # Pull specific content type\n $ riverbankcms pull pages # Pull pages with blocks\n $ riverbankcms pull navigation # Pull navigation menus\n $ riverbankcms pull settings # Pull site settings\n $ riverbankcms pull --output ./src/content # Custom output directory\n`)\n .action(\n withErrorHandling(\n async (scope: string | undefined, type: string | undefined, options: PullOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n const contentDir = path.resolve(options.output ?? './content');\n\n // Safety check: Prompt before overwriting existing directory\n if ((await contentDirExists(contentDir)) && !options.force && !options.yes) {\n // Check if we're in a TTY (interactive mode)\n if (!process.stdin.isTTY) {\n output.error('Content directory already exists and --yes not specified', {\n suggestion: 'Use --yes or --force to overwrite in non-interactive mode',\n });\n return;\n }\n\n const response = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `Content directory '${path.basename(contentDir)}' already exists. Overwrite?`,\n initial: false,\n });\n\n if (!response.overwrite) {\n output.info('Aborted.');\n return;\n }\n }\n\n // Determine what to pull based on scope\n const pullScope = scope?.toLowerCase() ?? 'all';\n\n switch (pullScope) {\n case 'entries': {\n if (type) {\n // Pull specific content type with pagination\n output.info(`Pulling entries for content type: ${type}`);\n const result = await pullEntriesWithPagination(client, type, output);\n const { filePath, metaPath } = await writeEntries(contentDir, result);\n output.success(`Pulled ${result.entries.length} entries`, {\n contentType: type,\n file: filePath,\n meta: metaPath,\n });\n } else {\n // Pull all entries (need to iterate content types)\n output.info('Pulling all entries');\n let result = await client.pull.all();\n\n // Check for truncation and fall back to paginated fetch\n if (result.meta.truncated) {\n output.warn('Content was truncated due to size limits.');\n output.info('Fetching complete data via pagination...');\n const contentTypes = Object.keys(result.entries);\n result = await fetchAllContentPaginated(client, contentTypes, output);\n }\n\n const { totalCount, files } = await writeAllEntries(\n contentDir,\n result.entries,\n result.meta.pulledAt,\n result.meta.entries\n );\n\n output.success(`Pulled ${totalCount} entries across ${Object.keys(result.entries).length} content types`, {\n files,\n });\n }\n break;\n }\n\n case 'pages': {\n output.info('Pulling pages');\n const result = await client.pull.pages();\n const { filePaths, metaPath } = await writePages(contentDir, result);\n output.success(`Pulled ${result.pages.length} pages`, { files: filePaths, meta: metaPath });\n break;\n }\n\n case 'navigation': {\n output.info('Pulling navigation menus');\n const result = await client.pull.navigation();\n const { filePath, metaPath } = await writeNavigation(contentDir, result);\n output.success(`Pulled ${result.menus.length} navigation menus`, { file: filePath, meta: metaPath });\n break;\n }\n\n case 'settings': {\n output.info('Pulling site settings');\n const result = await client.pull.settings();\n const filePath = await writeSettings(contentDir, result);\n output.success('Pulled site settings', { file: filePath });\n break;\n }\n\n case 'all':\n default: {\n output.info('Pulling all content');\n let result = await client.pull.all();\n\n // Check for truncation and fall back to paginated fetch\n if (result.meta.truncated) {\n output.warn('Content was truncated due to size limits.');\n output.info('Fetching complete data via pagination...');\n const contentTypes = Object.keys(result.entries);\n result = await fetchAllContentPaginated(client, contentTypes, output);\n }\n\n // Write all content\n const { totalCount: totalEntries } = await writeAllEntries(\n contentDir,\n result.entries,\n result.meta.pulledAt,\n result.meta.entries\n );\n\n await writePages(contentDir, { pages: result.pages, meta: result.meta });\n await writeNavigation(contentDir, { menus: result.navigation, meta: result.meta });\n await writeSettings(contentDir, { settings: result.settings, meta: result.meta });\n\n output.success('Pull complete', {\n entries: { count: totalEntries, types: Object.keys(result.entries).length },\n pages: { count: result.pages.length },\n navigation: { count: result.navigation.length },\n directory: contentDir,\n });\n break;\n }\n }\n }\n )\n );\n","/**\n * CLI Config Loader\n *\n * Loads riverbank.config.ts and extracts CLI-relevant configuration\n * (contentDir and sync settings) with appropriate defaults.\n */\n\nimport { loadConfigFile } from './load-config';\nimport type { SyncConfig } from '../config/types';\n\n/**\n * Loaded CLI configuration with defaults applied.\n */\nexport interface LoadedCliConfig {\n /** Content directory path (resolved to absolute path) */\n contentDir: string;\n\n /** Sync behavior settings with defaults */\n sync: Required<SyncConfig>;\n}\n\n/**\n * Default sync configuration values.\n */\nconst DEFAULT_SYNC_CONFIG: Required<SyncConfig> = {\n existingEntries: 'skip',\n contentTarget: 'draft',\n};\n\n/**\n * Load CLI configuration from riverbank.config.ts.\n *\n * Extracts contentDir and sync settings, applying defaults where not specified.\n *\n * @param configPath - Optional path to config file or directory\n * @returns Loaded CLI config with defaults applied\n *\n * @example\n * ```typescript\n * const config = await loadCliConfig();\n * console.log(config.contentDir); // './content' or custom path\n * console.log(config.sync.existingEntries); // 'skip' or 'update'\n * ```\n */\nexport async function loadCliConfig(configPath?: string): Promise<LoadedCliConfig> {\n try {\n const rawConfig = await loadConfigFile(configPath);\n\n // Extract fields with type safety\n const configObj = rawConfig as Record<string, unknown>;\n\n const contentDir = typeof configObj.contentDir === 'string'\n ? configObj.contentDir\n : './content';\n\n const syncConfig = configObj.sync as SyncConfig | undefined;\n\n return {\n contentDir,\n sync: {\n existingEntries: syncConfig?.existingEntries ?? DEFAULT_SYNC_CONFIG.existingEntries,\n contentTarget: syncConfig?.contentTarget ?? DEFAULT_SYNC_CONFIG.contentTarget,\n },\n };\n } catch (error) {\n // If config file doesn't exist, return defaults\n if (error instanceof Error && error.message.includes('Config file not found')) {\n return {\n contentDir: './content',\n sync: { ...DEFAULT_SYNC_CONFIG },\n };\n }\n throw error;\n }\n}\n\n/**\n * Check if a CLI config file exists.\n *\n * @param configPath - Optional path to check\n * @returns True if config file exists\n */\nexport async function hasCliConfig(configPath?: string): Promise<boolean> {\n try {\n await loadConfigFile(configPath);\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Content Diff Calculator\n *\n * Compares local content with remote CMS state to determine\n * what changes need to be made during push operations.\n */\n\nimport equal from 'fast-deep-equal';\n\nimport type {\n LocalContent,\n LocalEntry,\n LocalPage,\n LocalBlock,\n LocalNavigation,\n LocalSettings,\n} from '../content/reader';\nimport type { PulledContent, PulledPages, ManagementNavigationMenu, ManagementSettings } from '../../client/management/types';\nimport { stripNavigationItemIds } from './mapper';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DiffType = 'create' | 'update' | 'unchanged';\n\nexport interface EntryDiff {\n type: DiffType;\n identifier: string;\n contentType: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n}\n\nexport interface PageDiff {\n type: DiffType;\n identifier: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n /** Block diffs for this page */\n blocks?: BlockDiff[];\n}\n\nexport interface BlockDiff {\n type: DiffType | 'delete' | 'reorder';\n identifier: string;\n pageIdentifier: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n}\n\nexport interface NavigationDiff {\n type: DiffType;\n name: string;\n /** List of changed field paths (for updates) */\n changes?: string[];\n}\n\nexport interface SettingsDiff {\n type: 'update';\n /** List of changed field paths */\n changes: string[];\n}\n\nexport interface ContentDiff {\n /** Entry diffs grouped by content type */\n entries: Map<string, EntryDiff[]>;\n /** Page diffs */\n pages: PageDiff[];\n /** Navigation menu diffs */\n navigation: NavigationDiff[];\n /** Settings diff (null if no local settings file) */\n settings: SettingsDiff | null;\n /** Summary statistics */\n summary: {\n entries: { create: number; update: number; unchanged: number };\n pages: { create: number; update: number; unchanged: number };\n blocks: { create: number; update: number; delete: number; unchanged: number };\n navigation: { create: number; update: number; unchanged: number };\n settings: { update: number; unchanged: number };\n };\n}\n\nexport interface DiffOptions {\n /** How to handle existing entries: 'skip' ignores updates, 'update' includes them */\n existingEntries: 'skip' | 'update';\n}\n\nexport type JsonDiffMode = 'summary' | 'full';\nexport type JsonDiffOperation = 'create' | 'update' | 'delete';\nexport type JsonDiffChangeType = 'entry' | 'page' | 'block' | 'navigation' | 'settings';\n\nexport interface JsonDiffChange {\n type: JsonDiffChangeType;\n identifier: string;\n operation: JsonDiffOperation;\n before?: unknown;\n after?: unknown;\n diff?: unknown;\n}\n\nexport interface JsonDiff {\n summary: { creates: number; updates: number; deletes: number };\n changes: JsonDiffChange[];\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Find changed field paths between two objects.\n */\nfunction findChangedFields(\n local: Record<string, unknown>,\n remote: Record<string, unknown>,\n prefix = ''\n): string[] {\n const changes: string[] = [];\n const allKeys = new Set([...Object.keys(local), ...Object.keys(remote)]);\n\n for (const key of allKeys) {\n const path = prefix ? `${prefix}.${key}` : key;\n const localVal = local[key];\n const remoteVal = remote[key];\n\n if (!equal(localVal, remoteVal)) {\n changes.push(path);\n }\n }\n\n return changes;\n}\n\n// ============================================================================\n// JSON Diff Output\n// ============================================================================\n\nexport function buildJsonDiff(\n diff: ContentDiff,\n local: LocalContent,\n remote: PulledContent,\n mode: JsonDiffMode\n): JsonDiff {\n const summary = { creates: 0, updates: 0, deletes: 0 };\n const changes: JsonDiffChange[] = [];\n\n const localPages = new Map(local.pages.map((page) => [page.identifier, page]));\n const remotePages = new Map(remote.pages.map((page) => [page.identifier, page]));\n\n const localEntries = local.entries;\n const remoteEntries = remote.entries;\n\n const localMenus = new Map((local.navigation?.menus ?? []).map((menu) => [menu.name, menu]));\n const remoteMenus = new Map(remote.navigation.map((menu) => [menu.name, menu]));\n\n const addChange = (change: JsonDiffChange): void => {\n if (change.operation === 'create') summary.creates += 1;\n if (change.operation === 'update') summary.updates += 1;\n if (change.operation === 'delete') summary.deletes += 1;\n changes.push(change);\n };\n\n for (const [contentType, entryDiffs] of diff.entries) {\n for (const entryDiff of entryDiffs) {\n if (entryDiff.type === 'unchanged') continue;\n if (entryDiff.type !== 'create' && entryDiff.type !== 'update') continue;\n\n const identifier = `${contentType}/${entryDiff.identifier}`;\n const localEntry = localEntries.get(contentType)?.find((entry) => entry.identifier === entryDiff.identifier);\n const remoteEntry = remoteEntries[contentType]?.find((entry) => entry.identifier === entryDiff.identifier);\n\n const change: JsonDiffChange = {\n type: 'entry',\n identifier,\n operation: entryDiff.type,\n };\n\n if (mode === 'full') {\n change.before = remoteEntry ?? null;\n change.after = localEntry ?? null;\n if (entryDiff.changes) change.diff = { changes: entryDiff.changes };\n }\n\n addChange(change);\n }\n }\n\n for (const pageDiff of diff.pages) {\n if (pageDiff.type === 'unchanged') continue;\n if (pageDiff.type !== 'create' && pageDiff.type !== 'update') continue;\n\n const identifier = pageDiff.identifier;\n const localPage = localPages.get(identifier);\n const remotePage = remotePages.get(identifier);\n\n const change: JsonDiffChange = {\n type: 'page',\n identifier,\n operation: pageDiff.type,\n };\n\n if (mode === 'full') {\n change.before = remotePage ?? null;\n change.after = localPage ?? null;\n if (pageDiff.changes) change.diff = { changes: pageDiff.changes };\n }\n\n addChange(change);\n\n if (pageDiff.blocks) {\n for (const blockDiff of pageDiff.blocks) {\n if (blockDiff.type === 'unchanged') continue;\n\n const pageId = blockDiff.pageIdentifier;\n const localBlock = localPages\n .get(pageId)\n ?.blocks?.find((block) => block.identifier === blockDiff.identifier);\n const remoteBlock = remotePages\n .get(pageId)\n ?.blocks?.find((block) => block.identifier === blockDiff.identifier);\n\n if (blockDiff.type === 'reorder') {\n const localOrder = localPages\n .get(pageId)\n ?.blocks?.map((block) => block.identifier) ?? [];\n\n addChange({\n type: 'block',\n identifier: `${pageId}::reorder`,\n operation: 'update',\n ...(mode === 'full'\n ? { diff: { reorder: true, order: localOrder } }\n : {}),\n });\n continue;\n }\n\n const operation = blockDiff.type === 'delete' ? 'delete' : blockDiff.type;\n const identifier = `${pageId}/${blockDiff.identifier}`;\n const change: JsonDiffChange = {\n type: 'block',\n identifier,\n operation,\n };\n\n if (mode === 'full') {\n change.before = remoteBlock ?? null;\n change.after = localBlock ?? null;\n if (blockDiff.changes) change.diff = { changes: blockDiff.changes };\n }\n\n addChange(change);\n }\n }\n }\n\n for (const navDiff of diff.navigation) {\n if (navDiff.type === 'unchanged') continue;\n if (navDiff.type !== 'create' && navDiff.type !== 'update') continue;\n\n const identifier = navDiff.name;\n const localMenu = localMenus.get(navDiff.name);\n const remoteMenu = remoteMenus.get(navDiff.name);\n\n const change: JsonDiffChange = {\n type: 'navigation',\n identifier,\n operation: navDiff.type,\n };\n\n if (mode === 'full') {\n change.before = remoteMenu\n ? { ...remoteMenu, items: stripNavigationItemIds(remoteMenu.items) }\n : null;\n change.after = localMenu ?? null;\n if (navDiff.changes) change.diff = { changes: navDiff.changes };\n }\n\n addChange(change);\n }\n\n if (diff.settings) {\n const change: JsonDiffChange = {\n type: 'settings',\n identifier: 'settings',\n operation: 'update',\n };\n\n if (mode === 'full') {\n change.before = remote.settings ?? null;\n change.after = local.settings ?? null;\n if (diff.settings.changes) change.diff = { changes: diff.settings.changes };\n }\n\n addChange(change);\n }\n\n return { summary, changes };\n}\n\n// ============================================================================\n// Entry Diff\n// ============================================================================\n\nfunction calculateEntryDiffs(\n localEntries: Map<string, LocalEntry[]>,\n remoteEntries: Record<string, Array<{ identifier: string; data: Record<string, unknown> }>>,\n options: DiffOptions\n): { diffs: Map<string, EntryDiff[]>; summary: ContentDiff['summary']['entries'] } {\n const diffs = new Map<string, EntryDiff[]>();\n const summary = { create: 0, update: 0, unchanged: 0 };\n\n // Build lookup of remote entries by identifier per content type\n const remoteLookup = new Map<string, Map<string, Record<string, unknown>>>();\n for (const [contentType, entries] of Object.entries(remoteEntries)) {\n const typeMap = new Map<string, Record<string, unknown>>();\n for (const entry of entries) {\n typeMap.set(entry.identifier, entry.data);\n }\n remoteLookup.set(contentType, typeMap);\n }\n\n // Compare local entries against remote\n for (const [contentType, localList] of localEntries) {\n const typeDiffs: EntryDiff[] = [];\n const remoteTypeMap = remoteLookup.get(contentType) ?? new Map();\n\n for (const localEntry of localList) {\n const remoteData = remoteTypeMap.get(localEntry.identifier);\n\n if (!remoteData) {\n // New entry\n typeDiffs.push({\n type: 'create',\n identifier: localEntry.identifier,\n contentType,\n });\n summary.create++;\n } else if (options.existingEntries === 'skip') {\n // Skip mode: existing entries are unchanged\n typeDiffs.push({\n type: 'unchanged',\n identifier: localEntry.identifier,\n contentType,\n });\n summary.unchanged++;\n } else if (!equal(localEntry.data, remoteData)) {\n // Update mode: check if data changed\n const changes = findChangedFields(\n localEntry.data as Record<string, unknown>,\n remoteData\n );\n typeDiffs.push({\n type: 'update',\n identifier: localEntry.identifier,\n contentType,\n changes,\n });\n summary.update++;\n } else {\n // Data unchanged\n typeDiffs.push({\n type: 'unchanged',\n identifier: localEntry.identifier,\n contentType,\n });\n summary.unchanged++;\n }\n }\n\n if (typeDiffs.length > 0) {\n diffs.set(contentType, typeDiffs);\n }\n }\n\n return { diffs, summary };\n}\n\n// ============================================================================\n// Page Diff\n// ============================================================================\n\nfunction calculatePageDiffs(\n localPages: LocalPage[],\n remotePages: PulledPages['pages'],\n options: DiffOptions\n): { diffs: PageDiff[]; summary: ContentDiff['summary']['pages']; blockSummary: ContentDiff['summary']['blocks'] } {\n const diffs: PageDiff[] = [];\n const summary = { create: 0, update: 0, unchanged: 0 };\n const blockSummary = { create: 0, update: 0, delete: 0, unchanged: 0 };\n\n // Build lookup of remote pages by identifier\n const remoteLookup = new Map<string, PulledPages['pages'][0]>();\n for (const page of remotePages) {\n remoteLookup.set(page.identifier, page);\n }\n\n for (const localPage of localPages) {\n const remotePage = remoteLookup.get(localPage.identifier);\n\n if (!remotePage) {\n // New page\n const blockDiffs = (localPage.blocks ?? []).map((block): BlockDiff => {\n blockSummary.create++;\n return {\n type: 'create',\n identifier: block.identifier,\n pageIdentifier: localPage.identifier,\n };\n });\n\n diffs.push({\n type: 'create',\n identifier: localPage.identifier,\n blocks: blockDiffs,\n });\n summary.create++;\n } else if (options.existingEntries === 'skip') {\n // Skip mode\n diffs.push({\n type: 'unchanged',\n identifier: localPage.identifier,\n });\n summary.unchanged++;\n } else {\n // Check page metadata changes\n const pageChanged =\n localPage.title !== remotePage.title ||\n localPage.path !== remotePage.path;\n\n // Calculate block diffs\n const blockDiffs = calculateBlockDiffs(\n localPage.blocks ?? [],\n remotePage.blocks ?? [],\n localPage.identifier,\n blockSummary\n );\n\n if (pageChanged || blockDiffs.some((b) => b.type !== 'unchanged')) {\n const changes: string[] = [];\n if (localPage.title !== remotePage.title) changes.push('title');\n if (localPage.path !== remotePage.path) changes.push('path');\n\n diffs.push({\n type: 'update',\n identifier: localPage.identifier,\n changes: changes.length > 0 ? changes : undefined,\n blocks: blockDiffs,\n });\n summary.update++;\n } else {\n diffs.push({\n type: 'unchanged',\n identifier: localPage.identifier,\n });\n summary.unchanged++;\n }\n }\n }\n\n return { diffs, summary, blockSummary };\n}\n\nfunction calculateBlockDiffs(\n localBlocks: LocalBlock[],\n remoteBlocks: Array<{ identifier: string; kind: string; data: Record<string, unknown>; position: number }>,\n pageIdentifier: string,\n summary: ContentDiff['summary']['blocks']\n): BlockDiff[] {\n const diffs: BlockDiff[] = [];\n\n // Build lookup of remote blocks\n const remoteLookup = new Map<string, (typeof remoteBlocks)[0]>();\n for (const block of remoteBlocks) {\n remoteLookup.set(block.identifier, block);\n }\n\n // Track which remote blocks are seen\n const seenRemoteIds = new Set<string>();\n\n for (const localBlock of localBlocks) {\n const remoteBlock = remoteLookup.get(localBlock.identifier);\n seenRemoteIds.add(localBlock.identifier);\n\n if (!remoteBlock) {\n // New block\n diffs.push({\n type: 'create',\n identifier: localBlock.identifier,\n pageIdentifier,\n });\n summary.create++;\n } else if (!equal(localBlock.data, remoteBlock.data) || localBlock.kind !== remoteBlock.kind) {\n // Block changed\n const changes = findChangedFields(\n localBlock.data as Record<string, unknown>,\n remoteBlock.data\n );\n if (localBlock.kind !== remoteBlock.kind) {\n changes.push('kind');\n }\n diffs.push({\n type: 'update',\n identifier: localBlock.identifier,\n pageIdentifier,\n changes,\n });\n summary.update++;\n } else {\n // Unchanged\n diffs.push({\n type: 'unchanged',\n identifier: localBlock.identifier,\n pageIdentifier,\n });\n summary.unchanged++;\n }\n }\n\n // Check for deleted blocks (in remote but not in local)\n for (const remoteBlock of remoteBlocks) {\n if (!seenRemoteIds.has(remoteBlock.identifier)) {\n diffs.push({\n type: 'delete',\n identifier: remoteBlock.identifier,\n pageIdentifier,\n });\n summary.delete++;\n }\n }\n\n // Check for reorder: compare order of blocks that exist in both local and remote\n const localOrder = localBlocks\n .filter((b) => remoteLookup.has(b.identifier))\n .map((b) => b.identifier);\n const remoteOrder = remoteBlocks\n .filter((b) => seenRemoteIds.has(b.identifier))\n .sort((a, b) => a.position - b.position)\n .map((b) => b.identifier);\n\n if (localOrder.length > 1 && !equal(localOrder, remoteOrder)) {\n diffs.push({\n type: 'reorder',\n identifier: pageIdentifier,\n pageIdentifier,\n });\n }\n\n return diffs;\n}\n\n// ============================================================================\n// Navigation Diff\n// ============================================================================\n\nfunction calculateNavigationDiffs(\n localNavigation: LocalNavigation | null,\n remoteNavigation: ManagementNavigationMenu[]\n): { diffs: NavigationDiff[]; summary: ContentDiff['summary']['navigation'] } {\n const diffs: NavigationDiff[] = [];\n const summary = { create: 0, update: 0, unchanged: 0 };\n\n if (!localNavigation || !localNavigation.menus) {\n return { diffs, summary };\n }\n\n // Build lookup of remote menus\n const remoteLookup = new Map<string, ManagementNavigationMenu>();\n for (const menu of remoteNavigation) {\n remoteLookup.set(menu.name, menu);\n }\n\n for (const localMenu of localNavigation.menus) {\n const remoteMenu = remoteLookup.get(localMenu.name);\n\n if (!remoteMenu) {\n // New menu\n diffs.push({\n type: 'create',\n name: localMenu.name,\n });\n summary.create++;\n } else if (!equal(localMenu.items, stripNavigationItemIds(remoteMenu.items))) {\n // Menu changed (compare without remote IDs)\n diffs.push({\n type: 'update',\n name: localMenu.name,\n changes: ['items'],\n });\n summary.update++;\n } else {\n // Unchanged\n diffs.push({\n type: 'unchanged',\n name: localMenu.name,\n });\n summary.unchanged++;\n }\n }\n\n return { diffs, summary };\n}\n\n// ============================================================================\n// Settings Diff\n// ============================================================================\n\nfunction calculateSettingsDiff(\n localSettings: LocalSettings | null,\n remoteSettings: ManagementSettings\n): { diff: SettingsDiff | null; summary: ContentDiff['summary']['settings'] } {\n const summary = { update: 0, unchanged: 0 };\n\n if (!localSettings) {\n return { diff: null, summary };\n }\n\n const changes: string[] = [];\n\n // Compare homepageId\n if (localSettings.homepageId !== remoteSettings.homepageId) {\n changes.push('homepageId');\n }\n\n // Compare seoDefaults\n if (!equal(localSettings.seoDefaults, remoteSettings.seoDefaults)) {\n changes.push('seoDefaults');\n }\n\n if (changes.length > 0) {\n summary.update = 1;\n return {\n diff: { type: 'update', changes },\n summary,\n };\n }\n\n summary.unchanged = 1;\n return { diff: null, summary };\n}\n\n// ============================================================================\n// Main Calculator\n// ============================================================================\n\n/**\n * Calculate differences between local content and remote CMS state.\n *\n * @param local - Local content from JSON files\n * @param remote - Remote content pulled from CMS\n * @param options - Diff options\n * @returns Content diff with all changes categorized\n */\nexport function calculateDiff(\n local: LocalContent,\n remote: PulledContent,\n options: DiffOptions\n): ContentDiff {\n const { diffs: entryDiffs, summary: entrySummary } = calculateEntryDiffs(\n local.entries,\n remote.entries,\n options\n );\n\n const { diffs: pageDiffs, summary: pageSummary, blockSummary } = calculatePageDiffs(\n local.pages,\n remote.pages,\n options\n );\n\n const { diffs: navDiffs, summary: navSummary } = calculateNavigationDiffs(\n local.navigation,\n remote.navigation\n );\n\n const { diff: settingsDiff, summary: settingsSummary } = calculateSettingsDiff(\n local.settings,\n remote.settings\n );\n\n return {\n entries: entryDiffs,\n pages: pageDiffs,\n navigation: navDiffs,\n settings: settingsDiff,\n summary: {\n entries: entrySummary,\n pages: pageSummary,\n blocks: blockSummary,\n navigation: navSummary,\n settings: settingsSummary,\n },\n };\n}\n\n/**\n * Check if there are any pending changes in the diff.\n */\nexport function hasPendingChanges(diff: ContentDiff): boolean {\n const { summary } = diff;\n return (\n summary.entries.create > 0 ||\n summary.entries.update > 0 ||\n summary.pages.create > 0 ||\n summary.pages.update > 0 ||\n summary.blocks.create > 0 ||\n summary.blocks.update > 0 ||\n summary.blocks.delete > 0 ||\n summary.navigation.create > 0 ||\n summary.navigation.update > 0 ||\n summary.settings.update > 0\n );\n}\n\n/**\n * Format diff summary for display.\n */\nexport function formatDiffSummary(diff: ContentDiff): string {\n const lines: string[] = [];\n const { summary } = diff;\n\n if (summary.entries.create > 0 || summary.entries.update > 0) {\n lines.push(`Entries: +${summary.entries.create} ~${summary.entries.update}`);\n }\n if (summary.pages.create > 0 || summary.pages.update > 0) {\n lines.push(`Pages: +${summary.pages.create} ~${summary.pages.update}`);\n }\n if (summary.blocks.create > 0 || summary.blocks.update > 0 || summary.blocks.delete > 0) {\n lines.push(`Blocks: +${summary.blocks.create} ~${summary.blocks.update} -${summary.blocks.delete}`);\n }\n if (summary.navigation.create > 0 || summary.navigation.update > 0) {\n lines.push(`Navigation: +${summary.navigation.create} ~${summary.navigation.update}`);\n }\n if (summary.settings.update > 0) {\n lines.push(`Settings: ~${summary.settings.update}`);\n }\n\n if (lines.length === 0) {\n return 'No changes detected';\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format detailed diff for display.\n */\nexport function formatDiffDetail(diff: ContentDiff): string {\n const lines: string[] = [];\n\n // Entries\n for (const [contentType, entryDiffs] of diff.entries) {\n const creates = entryDiffs.filter((d) => d.type === 'create');\n const updates = entryDiffs.filter((d) => d.type === 'update');\n\n if (creates.length > 0) {\n lines.push(`\\n${contentType} (new):`);\n for (const d of creates) {\n lines.push(` + ${d.identifier}`);\n }\n }\n if (updates.length > 0) {\n lines.push(`\\n${contentType} (updated):`);\n for (const d of updates) {\n lines.push(` ~ ${d.identifier}${d.changes ? ` [${d.changes.join(', ')}]` : ''}`);\n }\n }\n }\n\n // Pages\n const pageCreates = diff.pages.filter((d) => d.type === 'create');\n const pageUpdates = diff.pages.filter((d) => d.type === 'update');\n\n if (pageCreates.length > 0) {\n lines.push('\\nPages (new):');\n for (const d of pageCreates) {\n lines.push(` + ${d.identifier}`);\n }\n }\n if (pageUpdates.length > 0) {\n lines.push('\\nPages (updated):');\n for (const d of pageUpdates) {\n lines.push(` ~ ${d.identifier}${d.changes ? ` [${d.changes.join(', ')}]` : ''}`);\n }\n }\n\n // Navigation\n const navCreates = diff.navigation.filter((d) => d.type === 'create');\n const navUpdates = diff.navigation.filter((d) => d.type === 'update');\n\n if (navCreates.length > 0) {\n lines.push('\\nNavigation (new):');\n for (const d of navCreates) {\n lines.push(` + ${d.name}`);\n }\n }\n if (navUpdates.length > 0) {\n lines.push('\\nNavigation (updated):');\n for (const d of navUpdates) {\n lines.push(` ~ ${d.name}`);\n }\n }\n\n // Settings\n if (diff.settings) {\n lines.push('\\nSettings (updated):');\n lines.push(` ~ [${diff.settings.changes.join(', ')}]`);\n }\n\n return lines.join('\\n');\n}\n","/**\n * Sync Executor\n *\n * Applies content changes to the CMS based on a calculated diff.\n * Supports dry-run mode and progress reporting.\n */\n\nimport type { ManagementClient } from '../../client/management/types';\nimport type { LocalContent } from '../content/reader';\nimport type { OutputContext } from '../output';\nimport type { ContentDiff, BlockDiff } from './diff';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SyncOptions {\n /** If true, don't actually make changes */\n dryRun: boolean;\n /** Target for content updates */\n contentTarget: 'draft' | 'publish';\n}\n\nexport interface SyncResult {\n entries: { created: number; updated: number; failed: number };\n pages: { created: number; updated: number; failed: number };\n blocks: { created: number; updated: number; deleted: number; failed: number };\n navigation: { created: number; updated: number; failed: number };\n settings: { updated: number; failed: number };\n errors: Array<{ resource: string; identifier: string; error: string }>;\n}\n\nfunction createEmptyResult(): SyncResult {\n return {\n entries: { created: 0, updated: 0, failed: 0 },\n pages: { created: 0, updated: 0, failed: 0 },\n blocks: { created: 0, updated: 0, deleted: 0, failed: 0 },\n navigation: { created: 0, updated: 0, failed: 0 },\n settings: { updated: 0, failed: 0 },\n errors: [],\n };\n}\n\n// ============================================================================\n// Entry Sync\n// ============================================================================\n\nasync function syncEntries(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n for (const [contentType, entryDiffs] of diff.entries) {\n const localEntries = local.entries.get(contentType) ?? [];\n const entryLookup = new Map(localEntries.map((e) => [e.identifier, e]));\n\n for (const entryDiff of entryDiffs) {\n if (entryDiff.type === 'unchanged') continue;\n\n const localEntry = entryLookup.get(entryDiff.identifier);\n if (!localEntry) continue;\n\n try {\n if (options.dryRun) {\n if (entryDiff.type === 'create') {\n result.entries.created++;\n } else {\n result.entries.updated++;\n }\n continue;\n }\n\n await client.entries.upsert({\n contentType,\n identifier: localEntry.identifier,\n data: localEntry.data,\n slug: localEntry.slug,\n });\n\n if (options.contentTarget === 'publish') {\n await client.entries.publish(contentType, localEntry.identifier);\n }\n\n if (entryDiff.type === 'create') {\n result.entries.created++;\n } else {\n result.entries.updated++;\n }\n } catch (error) {\n result.entries.failed++;\n result.errors.push({\n resource: 'entry',\n identifier: `${contentType}/${entryDiff.identifier}`,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n}\n\n// ============================================================================\n// Page Sync\n// ============================================================================\n\nasync function syncPages(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n const pageLookup = new Map(local.pages.map((p) => [p.identifier, p]));\n\n for (const pageDiff of diff.pages) {\n if (pageDiff.type === 'unchanged') continue;\n\n const localPage = pageLookup.get(pageDiff.identifier);\n if (!localPage) continue;\n\n try {\n if (options.dryRun) {\n if (pageDiff.type === 'create') {\n result.pages.created++;\n if (pageDiff.blocks) {\n result.blocks.created += pageDiff.blocks.filter((b) => b.type === 'create').length;\n }\n } else {\n result.pages.updated++;\n if (pageDiff.blocks) {\n for (const blockDiff of pageDiff.blocks) {\n if (blockDiff.type === 'create') result.blocks.created++;\n else if (blockDiff.type === 'update') result.blocks.updated++;\n else if (blockDiff.type === 'delete') result.blocks.deleted++;\n }\n }\n }\n continue;\n }\n\n await client.pages.upsert({\n identifier: localPage.identifier,\n title: localPage.title,\n path: localPage.path,\n seoTitle: localPage.seoTitle,\n seoDescription: localPage.seoDescription,\n });\n\n if (pageDiff.blocks && localPage.blocks) {\n await syncBlocks(\n client,\n pageDiff.identifier,\n pageDiff.blocks,\n localPage.blocks,\n options,\n result\n );\n }\n\n if (options.contentTarget === 'publish') {\n await client.pages.publish(localPage.identifier);\n }\n\n if (pageDiff.type === 'create') {\n result.pages.created++;\n } else {\n result.pages.updated++;\n }\n } catch (error) {\n result.pages.failed++;\n result.errors.push({\n resource: 'page',\n identifier: pageDiff.identifier,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\nasync function syncBlocks(\n client: ManagementClient,\n pageIdentifier: string,\n blockDiffs: BlockDiff[],\n localBlocks: Array<{ identifier: string; kind: string; data: Record<string, unknown> }>,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n const blockLookup = new Map(localBlocks.map((b) => [b.identifier, b]));\n\n for (const blockDiff of blockDiffs) {\n if (blockDiff.type === 'unchanged') continue;\n\n try {\n if (blockDiff.type === 'delete') {\n await client.blocks.delete(pageIdentifier, blockDiff.identifier);\n result.blocks.deleted++;\n } else {\n const localBlock = blockLookup.get(blockDiff.identifier);\n if (!localBlock) continue;\n\n await client.blocks.upsert(pageIdentifier, {\n identifier: localBlock.identifier,\n kind: localBlock.kind,\n data: localBlock.data,\n });\n\n if (blockDiff.type === 'create') {\n result.blocks.created++;\n } else {\n result.blocks.updated++;\n }\n }\n } catch (error) {\n result.blocks.failed++;\n result.errors.push({\n resource: 'block',\n identifier: `${pageIdentifier}/${blockDiff.identifier}`,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Only reorder if diff indicates order changed\n const hasReorderDiff = blockDiffs.some((d) => d.type === 'reorder');\n if (hasReorderDiff) {\n const localIdentifiers = localBlocks.map((b) => b.identifier);\n if (localIdentifiers.length > 1) {\n try {\n await client.blocks.reorder(pageIdentifier, localIdentifiers);\n } catch {\n // Reorder failure is non-fatal\n }\n }\n }\n}\n\n// ============================================================================\n// Navigation Sync\n// ============================================================================\n\nasync function syncNavigation(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n if (!local.navigation?.menus) return;\n\n const menuLookup = new Map(local.navigation.menus.map((m) => [m.name, m]));\n\n for (const navDiff of diff.navigation) {\n if (navDiff.type === 'unchanged') continue;\n\n const localMenu = menuLookup.get(navDiff.name);\n if (!localMenu) continue;\n\n try {\n if (options.dryRun) {\n if (navDiff.type === 'create') {\n result.navigation.created++;\n } else {\n result.navigation.updated++;\n }\n continue;\n }\n\n await client.navigation.upsert({\n name: localMenu.name,\n items: localMenu.items,\n });\n\n if (navDiff.type === 'create') {\n result.navigation.created++;\n } else {\n result.navigation.updated++;\n }\n } catch (error) {\n result.navigation.failed++;\n result.errors.push({\n resource: 'navigation',\n identifier: navDiff.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\n// ============================================================================\n// Settings Sync\n// ============================================================================\n\nasync function syncSettings(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n result: SyncResult\n): Promise<void> {\n if (!diff.settings || !local.settings) return;\n\n try {\n if (options.dryRun) {\n result.settings.updated++;\n return;\n }\n\n await client.settings.update({\n homepageId: local.settings.homepageId,\n seoDefaults: local.settings.seoDefaults,\n });\n\n result.settings.updated++;\n } catch (error) {\n result.settings.failed++;\n result.errors.push({\n resource: 'settings',\n identifier: 'site',\n error: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\n// ============================================================================\n// Main Executor\n// ============================================================================\n\n/**\n * Execute a sync plan based on calculated diff.\n *\n * @param client - Management client\n * @param diff - Calculated content diff\n * @param local - Local content\n * @param options - Sync options (dryRun, contentTarget)\n * @param output - Output context for progress reporting\n * @returns Sync result with counts and errors\n */\nexport async function executeSyncPlan(\n client: ManagementClient,\n diff: ContentDiff,\n local: LocalContent,\n options: SyncOptions,\n output: OutputContext\n): Promise<SyncResult> {\n const result = createEmptyResult();\n\n const totalOps =\n diff.summary.entries.create +\n diff.summary.entries.update +\n diff.summary.pages.create +\n diff.summary.pages.update +\n diff.summary.blocks.create +\n diff.summary.blocks.update +\n diff.summary.blocks.delete +\n diff.summary.navigation.create +\n diff.summary.navigation.update +\n diff.summary.settings.update;\n\n if (totalOps === 0) {\n output.info('No changes to sync');\n return result;\n }\n\n const prefix = options.dryRun ? '[Dry run] Would sync' : 'Syncing';\n output.info(`${prefix} ${totalOps} operations...`);\n\n await syncEntries(client, diff, local, options, result);\n await syncPages(client, diff, local, options, result);\n await syncNavigation(client, diff, local, options, result);\n await syncSettings(client, diff, local, options, result);\n\n return result;\n}\n\n/**\n * Format sync result for display.\n */\nexport function formatSyncResult(result: SyncResult, dryRun: boolean): string {\n const lines: string[] = [];\n const verb = dryRun ? 'Would' : '';\n\n if (result.entries.created > 0 || result.entries.updated > 0) {\n lines.push(\n `Entries: ${verb} created ${result.entries.created}, updated ${result.entries.updated}` +\n (result.entries.failed > 0 ? `, failed ${result.entries.failed}` : '')\n );\n }\n\n if (result.pages.created > 0 || result.pages.updated > 0) {\n lines.push(\n `Pages: ${verb} created ${result.pages.created}, updated ${result.pages.updated}` +\n (result.pages.failed > 0 ? `, failed ${result.pages.failed}` : '')\n );\n }\n\n if (result.blocks.created > 0 || result.blocks.updated > 0 || result.blocks.deleted > 0) {\n lines.push(\n `Blocks: ${verb} created ${result.blocks.created}, updated ${result.blocks.updated}, deleted ${result.blocks.deleted}` +\n (result.blocks.failed > 0 ? `, failed ${result.blocks.failed}` : '')\n );\n }\n\n if (result.navigation.created > 0 || result.navigation.updated > 0) {\n lines.push(\n `Navigation: ${verb} created ${result.navigation.created}, updated ${result.navigation.updated}` +\n (result.navigation.failed > 0 ? `, failed ${result.navigation.failed}` : '')\n );\n }\n\n if (result.settings.updated > 0) {\n lines.push(\n `Settings: ${verb} updated ${result.settings.updated}` +\n (result.settings.failed > 0 ? `, failed ${result.settings.failed}` : '')\n );\n }\n\n if (result.errors.length > 0) {\n lines.push('\\nErrors:');\n for (const error of result.errors) {\n lines.push(` ${error.resource}/${error.identifier}: ${error.error}`);\n }\n }\n\n if (lines.length === 0) {\n return 'Everything is in sync - no changes needed';\n }\n\n return lines.join('\\n');\n}\n","/**\n * Push Command\n *\n * Pushes local content to the CMS with diff-based sync.\n *\n * Usage:\n * riverbankcms push # Push all content\n * riverbankcms push entries # Push all entries\n * riverbankcms push entries blog-post # Push specific content type\n * riverbankcms push pages # Push pages with blocks\n * riverbankcms push navigation # Push navigation menus\n * riverbankcms push --dry-run # Show what would be pushed\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\n\nimport { createManagementClient } from '../../client/management';\nimport { loadEnvironment } from '../env';\nimport { loadCliConfig, type LoadedCliConfig } from '../config-loader';\nimport {\n readAllContent,\n readAllMeta,\n readPagesMeta,\n readNavigationMeta,\n contentDirExists,\n getContentSummary,\n type LocalContent,\n type EntryMetadata,\n type PagesMetadata,\n type NavigationMetadata,\n} from '../content/reader';\nimport {\n calculateDiff,\n hasPendingChanges,\n formatDiffSummary,\n formatDiffDetail,\n executeSyncPlan,\n formatSyncResult,\n type ContentDiff,\n type SyncResult,\n buildJsonDiff,\n type JsonDiffMode,\n} from '../sync';\nimport { getOutputContext, handleCommandError } from '../helpers';\nimport type { OutputContext } from '../output';\nimport type { PulledContent } from '../../client/management/types';\n\ninterface PushOptions {\n contentDir?: string;\n dryRun?: boolean;\n yes?: boolean;\n force?: boolean;\n allowTruncated?: boolean;\n jsonDiff?: JsonDiffMode;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Filter local content based on push scope (entries, pages, navigation, or all)\n * @internal Exported for testing\n */\nexport function filterLocalContent(\n localContent: LocalContent,\n scope: string,\n contentType?: string\n): LocalContent {\n if (scope === 'entries') {\n if (contentType) {\n // Filter to specific content type\n const filtered = new Map<string, typeof localContent.entries extends Map<string, infer V> ? V : never>();\n const entries = localContent.entries.get(contentType);\n if (entries) {\n filtered.set(contentType, entries);\n }\n return { ...localContent, entries: filtered, pages: [], navigation: null };\n }\n return { ...localContent, pages: [], navigation: null };\n }\n\n if (scope === 'pages') {\n return { ...localContent, entries: new Map(), navigation: null };\n }\n\n if (scope === 'navigation') {\n return { ...localContent, entries: new Map(), pages: [] };\n }\n\n // 'all' - return unfiltered\n return localContent;\n}\n\n/**\n * Display diff summary and details\n */\nfunction displayDiff(\n output: OutputContext,\n diff: ContentDiff,\n config: LoadedCliConfig,\n dryRun: boolean,\n isRemote: boolean,\n jsonOutput: boolean,\n jsonDiffMode: JsonDiffMode | undefined,\n localContent: LocalContent,\n remoteContent: PulledContent,\n): void {\n const envLabel = isRemote ? 'REMOTE' : 'LOCAL';\n\n if (jsonDiffMode) {\n const jsonDiff = buildJsonDiff(diff, localContent, remoteContent, jsonDiffMode);\n output.json(jsonDiff);\n return;\n }\n\n if (jsonOutput) {\n output.json({\n summary: diff.summary,\n syncConfig: config.sync,\n dryRun,\n });\n } else {\n if (dryRun) {\n output.info(`[DRY RUN] Changes that would be pushed to ${envLabel}:`);\n } else {\n output.info(`Changes to push to ${envLabel}:`);\n }\n output.info(formatDiffSummary(diff));\n output.info(formatDiffDetail(diff));\n }\n}\n\n/**\n * Report sync results\n */\nfunction reportSyncResults(\n output: OutputContext,\n result: SyncResult,\n hasErrors: boolean\n): void {\n if (hasErrors) {\n output.warn('Push completed with errors');\n } else {\n output.success('Push complete');\n }\n output.info(formatSyncResult(result, false));\n}\n\n// ============================================================================\n// Command\n// ============================================================================\n\n/**\n * Check for stale content (remote is newer than local base)\n * @internal Exported for testing\n */\nexport function checkForStaleContent(\n localContent: LocalContent,\n localMeta: Map<string, EntryMetadata>,\n pagesMeta: PagesMetadata | null,\n navigationMeta: NavigationMetadata | null,\n remoteContent: PulledContent\n): string[] {\n const staleItems: string[] = [];\n\n // Check Entries\n for (const [contentType, localEntries] of localContent.entries) {\n const meta = localMeta.get(contentType);\n if (!meta) continue; // No meta means untreated or legacy, skip check\n\n remoteContent.entries[contentType]?.forEach((remoteEntry) => {\n const localEntry = localEntries.find((e) => e.identifier === remoteEntry.identifier);\n if (localEntry) {\n // Find local base time from metadata (stored with identifier key)\n const entryMeta = meta.entries[remoteEntry.identifier];\n const localBaseTime = entryMeta?.updatedAt;\n\n // Get remote time from the metadata returned by API\n const remoteTime = remoteContent.meta.entries?.[`${contentType}:${remoteEntry.identifier}`]?.updatedAt;\n\n if (localBaseTime && remoteTime && new Date(remoteTime) > new Date(localBaseTime)) {\n staleItems.push(`Entry: ${contentType}/${remoteEntry.identifier} (Remote updated: ${remoteTime})`);\n }\n }\n });\n }\n\n // Check Pages using metadata\n if (pagesMeta) {\n localContent.pages.forEach((localPage) => {\n const remotePage = remoteContent.pages.find((p) => p.identifier === localPage.identifier);\n const localBaseTime = pagesMeta.pages[localPage.identifier]?.updatedAt;\n if (remotePage && localBaseTime) {\n if (new Date(remotePage.updatedAt) > new Date(localBaseTime)) {\n staleItems.push(`Page: ${localPage.identifier} (Remote updated: ${remotePage.updatedAt})`);\n }\n }\n });\n }\n\n // Check Navigation using metadata\n if (navigationMeta) {\n localContent.navigation?.menus.forEach((localMenu) => {\n const remoteMenu = remoteContent.navigation.find((m) => m.name === localMenu.name);\n const localBaseTime = navigationMeta.menus[localMenu.name]?.updatedAt;\n if (remoteMenu && localBaseTime) {\n if (new Date(remoteMenu.updatedAt) > new Date(localBaseTime)) {\n staleItems.push(`Navigation: ${localMenu.name} (Remote updated: ${remoteMenu.updatedAt})`);\n }\n }\n });\n }\n\n return staleItems;\n}\n\nexport const pushCommand = new Command('push')\n .description('Push content to CMS')\n .argument('[scope]', 'What to push: entries, pages, navigation, or all (default)')\n .argument('[type]', 'Content type (when scope is \"entries\")')\n .option('--content-dir <dir>', 'Content directory (overrides config)')\n .option('--dry-run', 'Show what would be pushed without making changes')\n .option('--yes', 'Skip confirmation prompt (required for --remote)')\n .option('--force', 'Push even if remote content is newer (skip stale check)')\n .option('--allow-truncated', 'Push even if remote content was truncated (may cause incomplete sync)')\n .option('--json-diff [mode]', 'Output JSON diff (summary or full)', 'summary')\n .addHelpText('after', `\nExamples:\n $ riverbankcms push # Push all content\n $ riverbankcms push --dry-run # Preview changes\n $ riverbankcms push --remote --yes # Push to production\n $ riverbankcms push entries # Push all entries\n $ riverbankcms push entries blog-post # Push specific content type\n $ riverbankcms push pages # Push pages with blocks\n $ riverbankcms push navigation # Push navigation menus\n $ riverbankcms push --content-dir ./src/content # Custom content directory\n $ riverbankcms push --dry-run --json-diff=summary # JSON summary for agents\n $ riverbankcms push --dry-run --json-diff=full # Full JSON before/after payloads\n\nSync Behavior:\n Content sync is controlled by your riverbank.config.ts:\n - sync.existingEntries: 'skip' (default) or 'update'\n - sync.contentTarget: 'draft' (default) or 'publish'\n\nSafety:\n - Stale detection: aborts if remote content is newer than last pull (use --force to override)\n - Truncation: aborts if remote has >100 entries per type (use --allow-truncated to override)\n - Remote environment (--remote): defaults to dry-run, requires --yes to execute\n`)\n .action(async (scope: string | undefined, type: string | undefined, options: PushOptions, command: Command) => {\n const { output, isRemote, globalOpts } = getOutputContext(command);\n let dryRun = options.dryRun ?? false;\n const jsonDiffMode = options.jsonDiff\n ? (options.jsonDiff === 'summary' || options.jsonDiff === 'full' ? options.jsonDiff : null)\n : undefined;\n\n if (options.jsonDiff && !jsonDiffMode) {\n output.error('Invalid value for --json-diff. Use summary or full.');\n return;\n }\n\n // Remote defaults to dry-run unless --yes is provided\n if (isRemote && !options.yes) {\n dryRun = true;\n output.info('Remote push defaults to dry-run mode. Use --yes to apply changes.');\n }\n\n try {\n // Load CLI config (contentDir and sync settings)\n const cliConfig = await loadCliConfig();\n const contentDir = path.resolve(options.contentDir ?? cliConfig.contentDir);\n\n // Check content directory exists\n if (!(await contentDirExists(contentDir))) {\n return output.error(`Content directory not found: ${contentDir}`, {\n suggestion: 'Run \"riverbankcms pull\" first to download content, or specify a different directory with --content-dir',\n });\n }\n\n // Get content summary\n const summary = await getContentSummary(contentDir);\n if (summary.totalEntries === 0 && summary.pageCount === 0 && !summary.hasNavigation) {\n output.warn('No content found to push');\n return;\n }\n\n // Load environment and create client\n const env = loadEnvironment(isRemote);\n const client = createManagementClient({\n dashboardUrl: env.dashboardUrl,\n managementApiKey: env.managementApiKey,\n siteId: env.siteId,\n });\n\n // Read local content\n output.info('Reading local content...');\n const localContent = await readAllContent(contentDir);\n\n // Filter content based on scope BEFORE stale detection\n // This ensures stale checks only apply to content being pushed\n const pushScope = scope?.toLowerCase() ?? 'all';\n const filteredLocal = filterLocalContent(localContent, pushScope, type);\n\n // Pull remote content for comparison\n output.info('Fetching remote content for comparison...');\n const remoteContent = await client.pull.all();\n\n // Check for truncation (separate from stale check)\n if (remoteContent.meta.truncated) {\n output.warn('Warning: Remote content was truncated due to size limits.');\n output.warn(\n remoteContent.meta.truncationMessage ??\n 'Some content types have more than 100 entries. Results may be incomplete.'\n );\n if (!options.allowTruncated) {\n output.error(\n 'Push aborted due to truncated remote content.',\n { suggestion: 'Use --allow-truncated to push anyway, or push specific content types: riverbankcms push entries blog-post' }\n );\n return;\n }\n output.warn('Proceeding with push despite truncation (--allow-truncated flag used)');\n }\n\n // Check for stale content to prevent overwriting newer remote changes\n // Only checks filtered content (scoped to what we're actually pushing)\n if (!options.force) {\n output.info('Checking for stale content...');\n const [localMeta, pagesMeta, navigationMeta] = await Promise.all([\n readAllMeta(contentDir),\n readPagesMeta(contentDir),\n readNavigationMeta(contentDir),\n ]);\n const staleItems = checkForStaleContent(filteredLocal, localMeta, pagesMeta, navigationMeta, remoteContent);\n\n if (staleItems.length > 0) {\n output.warn('WARNING: The following remote content has changed since you last pulled:');\n staleItems.forEach((item) => output.warn(` - ${item}`));\n output.error(\n 'Push aborted to prevent overwriting newer content.',\n { suggestion: 'Run \"riverbankcms pull\" to update your local content, or use --force to overwrite.' }\n );\n return;\n }\n }\n\n // Calculate diff\n output.info('Calculating changes...');\n const diff = calculateDiff(filteredLocal, remoteContent, {\n existingEntries: cliConfig.sync.existingEntries,\n });\n\n // Check if there are any changes\n if (!hasPendingChanges(diff)) {\n output.success('No changes detected - content is already in sync');\n return;\n }\n\n // Display diff\n displayDiff(\n output,\n diff,\n cliConfig,\n dryRun,\n isRemote,\n globalOpts.json ?? false,\n jsonDiffMode ?? undefined,\n filteredLocal,\n remoteContent\n );\n\n // Exit if dry run\n if (dryRun) {\n output.info('\\nUse --yes (for remote) or remove --dry-run (for local) to apply changes.');\n return;\n }\n\n // Execute the sync\n output.info('\\nApplying changes...');\n const result = await executeSyncPlan(\n client,\n diff,\n filteredLocal,\n { dryRun: false, contentTarget: cliConfig.sync.contentTarget },\n output\n );\n\n // Report results\n reportSyncResults(output, result, result.errors.length > 0);\n } catch (error) {\n handleCommandError(error, output);\n }\n });\n","/**\n * Entry Command\n *\n * Manage content entries via CLI.\n *\n * Usage:\n * riverbankcms entry upsert <type> <identifier> --data <json>\n * riverbankcms entry publish <type> <identifier>\n * riverbankcms entry unpublish <type> <identifier>\n * riverbankcms entry get <type> <identifier>\n * riverbankcms entry list <type> [--limit N] [--page N]\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementEntry } from '../../client/management/types';\nimport {\n type DataInputOptions,\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n createPublishCommand,\n createUnpublishCommand,\n formatDateShort,\n parseJsonData,\n withErrorHandling,\n} from '../helpers';\n\ninterface UpsertOptions extends DataInputOptions {\n slug?: string;\n title?: string;\n}\n\n/**\n * Format an entry for table display\n */\nconst formatEntryRow: RowFormatter<ManagementEntry> = (entry) => [\n entry.identifier,\n entry.status,\n entry.hasUnpublishedChanges ? 'Yes' : 'No',\n entry.slug ?? '-',\n formatDateShort(entry.updatedAt),\n];\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update an entry')\n .argument('<type>', 'Content type')\n .argument('<identifier>', 'Entry identifier')\n .option('--data <json>', 'Entry data as JSON string')\n .option('--file <path>', 'Path to JSON file with entry data')\n .option('--slug <slug>', 'Entry slug (defaults to identifier)')\n .option('--title <title>', 'Entry title')\n .action(\n withErrorHandling(async (type: string, identifier: string, options: UpsertOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n const data = await parseJsonData(options);\n\n output.info(`Upserting entry: ${type}/${identifier}`);\n\n const entry = await client.entries.upsert({\n contentType: type,\n identifier,\n data,\n slug: options.slug,\n title: options.title,\n });\n\n output.success(`Entry upserted: ${entry.identifier}`, {\n id: entry.id,\n identifier: entry.identifier,\n contentType: entry.contentType,\n status: entry.status,\n });\n })\n );\n\nconst publishCommand = createPublishCommand({\n resourceName: 'entry',\n args: ['type', 'identifier'],\n action: (client, type, identifier) => client.entries.publish(type, identifier),\n});\n\nconst unpublishCommand = createUnpublishCommand({\n resourceName: 'entry',\n args: ['type', 'identifier'],\n action: (client, type, identifier) => client.entries.unpublish(type, identifier),\n});\n\nconst getCommand = createGetCommand<ManagementEntry>({\n resourceName: 'entry',\n args: ['type', 'identifier'],\n get: (client, type, identifier) => client.entries.get(type, identifier),\n formatOutput: (entry) => ({\n id: entry.id,\n contentType: entry.contentType,\n status: entry.status,\n hasUnpublishedChanges: entry.hasUnpublishedChanges,\n slug: entry.slug,\n data: entry.data,\n createdAt: entry.createdAt,\n updatedAt: entry.updatedAt,\n publishedAt: entry.publishedAt,\n }),\n});\n\nconst listCommand = createListCommand<ManagementEntry>({\n resourceName: 'entry',\n resourceNamePlural: 'entries',\n args: ['type'],\n hasPagination: true,\n list: (client, args, pagination) => client.entries.list(args[0]!, pagination),\n tableHeaders: ['Identifier', 'Status', 'Unpublished Changes', 'Slug', 'Updated'],\n formatRow: formatEntryRow,\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const entryCommand = new Command('entry')\n .description('Manage content entries')\n .addHelpText('after', `\nExamples:\n $ riverbankcms entry upsert blog-post my-post --data '{\"title\": \"Hello\"}'\n $ riverbankcms entry upsert blog-post my-post --file ./post-data.json\n $ riverbankcms entry publish blog-post my-post\n $ riverbankcms entry unpublish blog-post my-post\n $ riverbankcms entry get blog-post my-post\n $ riverbankcms entry list blog-post --limit 10 --page 1\n`)\n .addCommand(upsertCommand)\n .addCommand(publishCommand)\n .addCommand(unpublishCommand)\n .addCommand(getCommand)\n .addCommand(listCommand);\n","/**\n * Page Command\n *\n * Manage pages via CLI.\n *\n * Usage:\n * riverbankcms page upsert <identifier> --title <title> --path <path>\n * riverbankcms page publish <identifier>\n * riverbankcms page unpublish <identifier>\n * riverbankcms page get <identifier>\n * riverbankcms page list [--limit N] [--page N]\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementPage } from '../../client/management/types';\nimport {\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n createPublishCommand,\n createUnpublishCommand,\n formatDateShort,\n withErrorHandling,\n} from '../helpers';\n\ninterface UpsertOptions {\n title: string;\n path: string;\n seoTitle?: string;\n seoDescription?: string;\n}\n\n/**\n * Format a page for table display\n */\nconst formatPageRow: RowFormatter<ManagementPage> = (page) => [\n page.identifier ?? '(no identifier)',\n page.title,\n page.path,\n page.status,\n page.hasUnpublishedChanges ? 'Yes' : 'No',\n formatDateShort(page.updatedAt),\n];\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update a page')\n .argument('<identifier>', 'Page identifier')\n .requiredOption('--title <title>', 'Page title')\n .requiredOption('--path <path>', 'Page path (e.g., /about)')\n .option('--seo-title <title>', 'SEO title')\n .option('--seo-description <description>', 'SEO description')\n .action(\n withErrorHandling(async (identifier: string, options: UpsertOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n\n output.info(`Upserting page: ${identifier}`);\n\n const page = await client.pages.upsert({\n identifier,\n title: options.title,\n path: options.path,\n seoTitle: options.seoTitle,\n seoDescription: options.seoDescription,\n });\n\n output.success(`Page upserted: ${page.identifier}`, {\n id: page.id,\n identifier: page.identifier,\n path: page.path,\n status: page.status,\n });\n })\n );\n\nconst publishCommand = createPublishCommand({\n resourceName: 'page',\n args: ['identifier'],\n action: (client, identifier) => client.pages.publish(identifier),\n});\n\nconst unpublishCommand = createUnpublishCommand({\n resourceName: 'page',\n args: ['identifier'],\n action: (client, identifier) => client.pages.unpublish(identifier),\n});\n\nconst getCommand = createGetCommand<ManagementPage>({\n resourceName: 'page',\n args: ['identifier'],\n get: (client, identifier) => client.pages.get(identifier),\n formatOutput: (page) => ({\n id: page.id,\n title: page.title,\n path: page.path,\n status: page.status,\n hasUnpublishedChanges: page.hasUnpublishedChanges,\n createdAt: page.createdAt,\n updatedAt: page.updatedAt,\n publishedAt: page.publishedAt,\n }),\n});\n\nconst listCommand = createListCommand<ManagementPage>({\n resourceName: 'page',\n resourceNamePlural: 'pages',\n args: [],\n hasPagination: true,\n list: (client, _args, pagination) => client.pages.list(pagination),\n tableHeaders: ['Identifier', 'Title', 'Path', 'Status', 'Unpublished Changes', 'Updated'],\n formatRow: formatPageRow,\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const pageCommand = new Command('page')\n .description('Manage pages')\n .addHelpText('after', `\nExamples:\n $ riverbankcms page upsert about --title \"About Us\" --path /about\n $ riverbankcms page upsert about --title \"About Us\" --path /about --seo-title \"About Our Company\"\n $ riverbankcms page publish about\n $ riverbankcms page unpublish about\n $ riverbankcms page get about\n $ riverbankcms page list --limit 10 --page 1\n`)\n .addCommand(upsertCommand)\n .addCommand(publishCommand)\n .addCommand(unpublishCommand)\n .addCommand(getCommand)\n .addCommand(listCommand);\n","/**\n * Block Command\n *\n * Manage page blocks via CLI.\n *\n * Usage:\n * riverbankcms block upsert <page-id> <block-id> --kind <kind> --data <json>\n * riverbankcms block reorder <page-id> <id1> <id2> ...\n * riverbankcms block list <page-id>\n * riverbankcms block get <page-id> <block-id>\n *\n * For deletion, use: riverbankcms delete block <page-id> <block-id>\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementBlock } from '../../client/management/types';\nimport {\n type DataInputOptions,\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n formatDateShort,\n parseJsonData,\n withErrorHandling,\n} from '../helpers';\n\ninterface UpsertOptions extends DataInputOptions {\n kind: string;\n position?: string;\n}\n\n/**\n * Format a block for table display\n */\nconst formatBlockRow: RowFormatter<ManagementBlock> = (block) => [\n block.identifier ?? '(no identifier)',\n block.kind,\n String(block.position),\n formatDateShort(block.updatedAt),\n];\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update a block on a page')\n .argument('<page-identifier>', 'Page identifier')\n .argument('<block-identifier>', 'Block identifier')\n .requiredOption('--kind <kind>', 'Block kind (e.g., block.hero, block.bodyText)')\n .option('--data <json>', 'Block data as JSON string')\n .option('--file <path>', 'Path to JSON file with block data')\n .option('--position <n>', 'Block position (0-indexed)')\n .action(\n withErrorHandling(\n async (\n pageIdentifier: string,\n blockIdentifier: string,\n options: UpsertOptions,\n command: Command\n ) => {\n const { output, client } = createCommandContext(command);\n const data = await parseJsonData(options);\n\n output.info(`Upserting block: ${pageIdentifier}/${blockIdentifier}`);\n\n const block = await client.blocks.upsert(pageIdentifier, {\n identifier: blockIdentifier,\n kind: options.kind,\n data,\n position: options.position ? parseInt(options.position, 10) : undefined,\n });\n\n output.success(`Block upserted: ${block.identifier}`, {\n id: block.id,\n identifier: block.identifier,\n kind: block.kind,\n position: block.position,\n });\n }\n )\n );\n\nconst reorderCommand = new Command('reorder')\n .description('Reorder blocks on a page')\n .argument('<page-identifier>', 'Page identifier')\n .argument('<identifiers...>', 'Block identifiers in desired order')\n .action(\n withErrorHandling(\n async (pageIdentifier: string, identifiers: string[], _options: unknown, command: Command) => {\n const { output, client } = createCommandContext(command);\n\n if (identifiers.length < 2) {\n return output.error('At least 2 block identifiers are required for reordering');\n }\n\n output.info(`Reordering blocks on page: ${pageIdentifier}`);\n await client.blocks.reorder(pageIdentifier, identifiers);\n output.success(`Blocks reordered`, {\n page: pageIdentifier,\n order: identifiers,\n });\n }\n )\n );\n\nconst listCommand = createListCommand<ManagementBlock>({\n resourceName: 'block',\n resourceNamePlural: 'blocks',\n args: ['page-identifier'],\n hasPagination: false,\n list: async (client, args) => ({ items: await client.blocks.list(args[0]!) }),\n tableHeaders: ['Identifier', 'Kind', 'Position', 'Updated'],\n formatRow: formatBlockRow,\n});\n\nconst getCommand = createGetCommand<ManagementBlock>({\n resourceName: 'block',\n args: ['page-identifier', 'block-identifier'],\n get: (client, pageIdentifier, blockIdentifier) => client.blocks.get(pageIdentifier, blockIdentifier),\n formatOutput: (block) => ({\n id: block.id,\n kind: block.kind,\n position: block.position,\n data: block.data,\n createdAt: block.createdAt,\n updatedAt: block.updatedAt,\n }),\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const blockCommand = new Command('block')\n .description('Manage page blocks')\n .addHelpText('after', `\nExamples:\n $ riverbankcms block upsert home hero-main --kind block.hero --data '{\"heading\": \"Welcome\"}'\n $ riverbankcms block upsert home hero-main --kind block.hero --file ./hero-data.json\n $ riverbankcms block reorder home hero-main content-section cta-bottom\n $ riverbankcms block list home\n $ riverbankcms block get home hero-main\n\nTo delete a block, use: riverbankcms delete block <page-id> <block-id>\n`)\n .addCommand(upsertCommand)\n .addCommand(reorderCommand)\n .addCommand(listCommand)\n .addCommand(getCommand);\n","/**\n * Navigation Command\n *\n * Manage navigation menus via CLI.\n *\n * Usage:\n * riverbankcms navigation upsert <menu-name> --file <json-file>\n * riverbankcms navigation get <menu-name>\n * riverbankcms navigation list\n */\n\nimport { Command } from 'commander';\n\nimport type { ManagementNavigationMenu, NavigationItemInput } from '../../client/management/types';\nimport {\n type DataInputOptions,\n type RowFormatter,\n createCommandContext,\n createGetCommand,\n createListCommand,\n formatDateShort,\n parseJsonArray,\n withErrorHandling,\n} from '../helpers';\n\n/**\n * Format a navigation menu for table display\n */\nconst formatMenuRow: RowFormatter<ManagementNavigationMenu> = (menu) => {\n const itemCount = countItems(menu.items);\n return [\n menu.name,\n String(itemCount),\n formatDateShort(menu.updatedAt),\n ];\n};\n\n/**\n * Count total navigation items including nested children\n */\nfunction countItems(items: ManagementNavigationMenu['items']): number {\n let count = items.length;\n for (const item of items) {\n if (item.children) {\n count += countItems(item.children);\n }\n }\n return count;\n}\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst upsertCommand = new Command('upsert')\n .description('Create or update a navigation menu')\n .argument('<menu-name>', 'Navigation menu name')\n .option('--file <path>', 'Path to JSON file with menu items')\n .option('--data <json>', 'Menu items as JSON string')\n .action(\n withErrorHandling(async (menuName: string, options: DataInputOptions, command: Command) => {\n const { output, client } = createCommandContext(command);\n const items = await parseJsonArray<NavigationItemInput>(options);\n\n output.info(`Upserting navigation menu: ${menuName}`);\n\n const menu = await client.navigation.upsert({\n name: menuName,\n items,\n });\n\n output.success(`Navigation menu upserted: ${menu.name}`, {\n id: menu.id,\n name: menu.name,\n itemCount: countItems(menu.items),\n });\n })\n );\n\nconst getCommand = createGetCommand<ManagementNavigationMenu>({\n resourceName: 'navigation menu',\n args: ['menu-name'],\n get: (client, menuName) => client.navigation.get(menuName),\n formatOutput: (menu) => ({\n id: menu.id,\n name: menu.name,\n items: menu.items,\n createdAt: menu.createdAt,\n updatedAt: menu.updatedAt,\n }),\n});\n\nconst listCommand = createListCommand<ManagementNavigationMenu>({\n resourceName: 'navigation menu',\n resourceNamePlural: 'navigation menus',\n args: [],\n hasPagination: false,\n list: async (client) => ({ items: await client.navigation.list() }),\n tableHeaders: ['Name', 'Items', 'Updated'],\n formatRow: formatMenuRow,\n});\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const navigationCommand = new Command('navigation')\n .description('Manage navigation menus')\n .addHelpText('after', `\nExamples:\n $ riverbankcms navigation upsert main --file ./main-nav.json\n $ riverbankcms navigation upsert footer --data '[{\"label\": \"Home\", \"url\": \"/\"}]'\n $ riverbankcms navigation get main\n $ riverbankcms navigation list\n\nJSON file format:\n {\n \"items\": [\n { \"label\": \"Home\", \"url\": \"/\" },\n { \"label\": \"About\", \"url\": \"/about\", \"children\": [\n { \"label\": \"Team\", \"url\": \"/about/team\" }\n ]}\n ]\n }\n`)\n .addCommand(upsertCommand)\n .addCommand(getCommand)\n .addCommand(listCommand);\n","/**\n * Delete Command\n *\n * Explicitly delete content from the CMS.\n *\n * Usage:\n * riverbankcms delete entry <type> <identifier>\n * riverbankcms delete block <page-identifier> <block-identifier>\n */\n\nimport { Command } from 'commander';\n\nimport { withConfirmation } from '../helpers';\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst deleteEntryCommand = new Command('entry')\n .description('Delete a content entry')\n .argument('<type>', 'Content type')\n .argument('<identifier>', 'Entry identifier')\n .option('--yes', 'Skip confirmation prompt (required for --remote)')\n .action(\n withConfirmation(\n (type: string, identifier: string) => `Delete entry \"${type}/${identifier}\"?`,\n async (ctx, type, identifier) => {\n ctx.output.info(`Deleting entry: ${type}/${identifier}`);\n await ctx.client.entries.delete(type, identifier);\n ctx.output.success(`Entry deleted: ${identifier}`);\n }\n )\n );\n\nconst deleteBlockCommand = new Command('block')\n .description('Delete a block from a page')\n .argument('<page-identifier>', 'Page identifier')\n .argument('<block-identifier>', 'Block identifier')\n .option('--yes', 'Skip confirmation prompt (required for --remote)')\n .action(\n withConfirmation(\n (pageIdentifier: string, blockIdentifier: string) =>\n `Delete block \"${blockIdentifier}\" from page \"${pageIdentifier}\"?`,\n async (ctx, pageIdentifier, blockIdentifier) => {\n ctx.output.info(`Deleting block: ${pageIdentifier}/${blockIdentifier}`);\n await ctx.client.blocks.delete(pageIdentifier, blockIdentifier);\n ctx.output.success(`Block deleted: ${blockIdentifier}`);\n }\n )\n );\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const deleteCommand = new Command('delete')\n .description('Delete content from CMS')\n .addHelpText('after', `\nExamples:\n $ riverbankcms delete entry blog-post my-post\n $ riverbankcms delete entry blog-post my-post --yes\n $ riverbankcms delete block home hero-main --yes\n $ riverbankcms delete entry blog-post my-post --remote --yes\n\nNote: Remote delete operations require --yes flag for safety.\n`)\n .addCommand(deleteEntryCommand)\n .addCommand(deleteBlockCommand);\n","type PreviewTemplateInput = {\n html: string;\n cssText: string;\n title?: string;\n};\n\nexport function buildPreviewHtml({ html, cssText, title }: PreviewTemplateInput): string {\n const safeTitle = title ?? 'Block Preview';\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${safeTitle}</title>\n <style>\n ${cssText}\n </style>\n </head>\n <body>\n ${html}\n </body>\n</html>`;\n}\n","export type PreviewPlaywrightConfig = {\n use: {\n viewport: { width: number; height: number };\n deviceScaleFactor?: number;\n colorScheme?: 'light' | 'dark';\n };\n};\n\nconst config: PreviewPlaywrightConfig = {\n use: {\n viewport: { width: 1280, height: 720 },\n deviceScaleFactor: 2,\n colorScheme: 'light',\n },\n};\n\nexport default config;\n","import * as path from 'path';\nimport previewPlaywrightConfig from './playwright.config';\n\ntype ScreenshotOptions = {\n html: string;\n outputPath: string;\n viewport?: { width: number; height: number };\n};\n\nexport async function captureScreenshot(options: ScreenshotOptions): Promise<void> {\n const { html, outputPath, viewport } = options;\n // Use any for playwright to avoid type errors when it's not installed\n // as it is an optional dependency for the CLI.\n let playwright: any;\n try {\n // @ts-ignore - playwright is an optional dependency\n playwright = await import('playwright');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Playwright is not installed. Install it to use --screenshot. (${message})`);\n }\n\n const browser = await playwright.chromium.launch();\n const page = await browser.newPage({\n viewport: viewport ?? previewPlaywrightConfig.use.viewport,\n deviceScaleFactor: previewPlaywrightConfig.use.deviceScaleFactor,\n colorScheme: previewPlaywrightConfig.use.colorScheme,\n });\n\n await page.setContent(html, { waitUntil: 'load' });\n await page.screenshot({ path: path.resolve(outputPath), fullPage: true });\n await browser.close();\n}\n","import * as fs from 'fs/promises';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { spawn } from 'child_process';\n\ntype OutputMode = 'terminal' | 'open' | 'screenshot';\n\ntype OutputModeOptions = {\n terminal?: boolean;\n open?: boolean;\n screenshot?: boolean;\n};\n\nexport function resolveOutputMode(options: OutputModeOptions): OutputMode {\n const modes = [options.terminal, options.open, options.screenshot].filter(Boolean).length;\n if (modes > 1) {\n throw new Error('Choose only one output mode: --terminal, --open, or --screenshot');\n }\n if (options.open) return 'open';\n if (options.screenshot) return 'screenshot';\n return 'terminal';\n}\n\nexport async function writePreviewHtmlFile(html: string): Promise<string> {\n const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'riverbank-preview-'));\n const filePath = path.join(dir, 'index.html');\n await fs.writeFile(filePath, html, 'utf-8');\n return filePath;\n}\n\nexport async function openPreviewFile(filePath: string): Promise<void> {\n const platform = process.platform;\n if (platform === 'darwin') {\n await runCommand('open', [filePath]);\n return;\n }\n if (platform === 'win32') {\n await runCommand('cmd', ['/c', 'start', '\"\"', filePath]);\n return;\n }\n await runCommand('xdg-open', [filePath]);\n}\n\nfunction runCommand(command: string, args: string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, { stdio: 'ignore', detached: true });\n child.on('error', reject);\n child.unref();\n resolve();\n });\n}\n","/**\n * Preview Command\n *\n * Render a block preview via the management API.\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\n\nimport type { BlockPreviewResponse } from '../../client/management/types';\nimport { parseJsonData, createCommandContext, withErrorHandling } from '../helpers';\nimport { buildPreviewHtml } from '../preview/template';\nimport { captureScreenshot } from '../preview/screenshot';\nimport { openPreviewFile, resolveOutputMode, writePreviewHtmlFile } from '../preview/utils';\n\ninterface PreviewOptions {\n data?: string;\n file?: string;\n validation?: 'strict' | 'lenient';\n previewStage?: 'published' | 'preview';\n themeId?: string;\n pageId?: string;\n contentEntryId?: string;\n css?: string[];\n terminal?: boolean;\n open?: boolean;\n screenshot?: boolean;\n output?: string;\n}\n\nasync function readCssFiles(paths: string[] | undefined): Promise<string> {\n if (!paths || paths.length === 0) return '';\n const chunks = await Promise.all(paths.map(async (filePath) => {\n const resolved = path.resolve(filePath);\n const { readFile } = await import('fs/promises');\n return readFile(resolved, 'utf-8');\n }));\n return chunks.join('\\n');\n}\n\nfunction formatValidationIssues(response: BlockPreviewResponse): string[] {\n return response.validation.issues.map((issue) => {\n const pathText = issue.path.length > 0 ? issue.path.join('.') : '(root)';\n return `${pathText}: ${issue.message}`;\n });\n}\n\nconst previewCommand = new Command('preview')\n .description('Render a block preview')\n .argument('<kind>', 'Block kind (e.g., block.hero)')\n .option('--data <json>', 'Inline JSON string for block content')\n .option('--file <path>', 'Path to JSON file with block content')\n .option('--validation <mode>', 'Validation mode (strict or lenient)', 'strict')\n .option('--preview-stage <stage>', 'Content stage (published or preview)', 'preview')\n .option('--theme-id <id>', 'Theme ID override')\n .option('--page-id <id>', 'Page ID context for loaders')\n .option('--content-entry-id <id>', 'Content entry ID context for loaders')\n .option('--css <paths...>', 'Append compiled CSS files for site-specific utilities')\n .option('--terminal', 'Print HTML output to the terminal (default)')\n .option('--open', 'Open the preview in a browser')\n .option('--screenshot', 'Capture a screenshot using Playwright')\n .option('--output <path>', 'Screenshot output path (default: ./block-preview.png)')\n .action(\n withErrorHandling(async (kind: string, options: PreviewOptions, command: Command) => {\n const { output, client, isJsonOutput } = createCommandContext(command);\n\n const mode = resolveOutputMode(options);\n const data = await parseJsonData({ data: options.data, file: options.file });\n const response = await client.preview.block({\n kind,\n data,\n themeId: options.themeId,\n pageId: options.pageId,\n contentEntryId: options.contentEntryId,\n previewStage: options.previewStage,\n validationMode: options.validation ?? 'strict',\n });\n\n const extraCss = await readCssFiles(options.css);\n const cssText = extraCss ? `${response.cssText}\\n${extraCss}` : response.cssText;\n const htmlDocument = buildPreviewHtml({ html: response.html, cssText });\n\n if (!response.validation.valid) {\n const issues = formatValidationIssues(response);\n output.warn('Block validation failed (lenient mode)', { issues });\n }\n\n if (isJsonOutput) {\n return output.json({ success: true, data: { ...response, cssText } });\n }\n\n if (mode === 'open') {\n const filePath = await writePreviewHtmlFile(htmlDocument);\n await openPreviewFile(filePath);\n output.success('Opened preview in browser', { filePath });\n return;\n }\n\n if (mode === 'screenshot') {\n const outputPath = options.output ?? path.resolve(process.cwd(), 'block-preview.png');\n await captureScreenshot({ html: htmlDocument, outputPath });\n output.success('Screenshot saved', { outputPath });\n return;\n }\n\n output.info('Block preview HTML:');\n console.log(htmlDocument);\n })\n );\n\nexport { previewCommand };\n","import type {\n RiverbankSiteConfig,\n SdkCustomBlock,\n BlockFieldExtensionsMap,\n BlockFieldOptionsMap,\n FieldSelectOption,\n} from '../../config/types';\nimport type { FieldDefinition } from '@riverbankcms/blocks';\nimport { listBlockDefinitions } from '@riverbankcms/blocks/definitions';\n\ntype SectionState = {\n config?: RiverbankSiteConfig;\n errorMessage?: string;\n};\n\nconst GENERATED_START = '<!-- RIVERBANK-GENERATED-START -->';\nconst GENERATED_END = '<!-- RIVERBANK-GENERATED-END -->';\n\nexport function getGeneratedMarkers(): { start: string; end: string } {\n return { start: GENERATED_START, end: GENERATED_END };\n}\n\nexport function buildSchemaTemplate(state: SectionState): string {\n const header = [\n '# Site Schema',\n '',\n 'This document captures the content model and SDK configuration for this site.',\n 'The generated section is updated by `riverbankcms init-docs`.',\n '',\n renderConfigGuideSection(),\n '',\n ].join('\\n');\n\n const generated = buildSchemaGeneratedSection(state);\n return `${header}${GENERATED_START}\\n${generated}\\n${GENERATED_END}\\n`;\n}\n\nexport function buildBlockTypesTemplate(): string {\n const header = [\n '# System Block Types',\n '',\n 'Reference list of all built-in CMS block types.',\n 'The generated section is updated by `riverbankcms init-docs`.',\n '',\n ].join('\\n');\n\n const generated = buildBlockTypesGeneratedSection();\n return `${header}${GENERATED_START}\\n${generated}\\n${GENERATED_END}\\n`;\n}\n\nexport function buildSchemaGeneratedSection(state: SectionState): string {\n if (!state.config) {\n return [\n '## Status',\n '',\n state.errorMessage ?? 'No SDK config available.',\n '',\n ].join('\\n');\n }\n\n const config = state.config;\n const sections: string[] = [];\n\n sections.push(renderContentTypesSection(config));\n sections.push(renderCustomBlocksSection(config.customBlocks ?? []));\n sections.push(renderBlockFieldExtensionsSection(config.blockFieldExtensions));\n sections.push(renderBlockFieldOptionsSection(config.blockFieldOptions));\n\n return sections.filter(Boolean).join('\\n');\n}\n\nexport function buildBlockTypesGeneratedSection(): string {\n const definitions = listBlockDefinitions();\n const sections: string[] = ['## System Blocks', ''];\n\n for (const definition of definitions) {\n const manifest = definition.manifest;\n sections.push(`### ${manifest.name}`);\n sections.push('');\n sections.push(`- Title: ${manifest.title}`);\n if (manifest.description) {\n sections.push(`- Description: ${manifest.description}`);\n }\n if (manifest.category) {\n sections.push(`- Category: ${manifest.category}`);\n }\n if (manifest.tags && manifest.tags.length > 0) {\n sections.push(`- Tags: ${manifest.tags.join(', ')}`);\n }\n if (manifest.contentTypes && manifest.contentTypes.length > 0) {\n sections.push(`- Content Types: ${manifest.contentTypes.join(', ')}`);\n }\n if (manifest.behaviours?.paletteHidden) {\n sections.push('- Palette Hidden: yes');\n }\n sections.push('');\n sections.push('Fields:');\n if (manifest.fields.length === 0) {\n sections.push('- (none)');\n } else {\n sections.push(...renderFieldList(manifest.fields, 0));\n }\n sections.push('');\n }\n\n return sections.join('\\n');\n}\n\nfunction renderContentTypesSection(config: RiverbankSiteConfig): string {\n const contentTypes = config.content?.contentTypes ?? [];\n const lines: string[] = ['## Content Types', ''];\n\n if (contentTypes.length === 0) {\n lines.push('No content types defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const type of contentTypes) {\n lines.push(`### ${type.name} (${type.key})`);\n lines.push('');\n if (type.description) {\n lines.push(type.description);\n lines.push('');\n }\n lines.push(`- Has Pages: ${type.hasPages ? 'yes' : 'no'}`);\n if (type.routePattern) lines.push(`- Route Pattern: ${type.routePattern}`);\n if (type.titleField) lines.push(`- Title Field: ${type.titleField}`);\n if (type.isSingleton) lines.push('- Singleton: yes');\n lines.push('');\n lines.push('Fields:');\n if (type.fields.length === 0) {\n lines.push('- (none)');\n } else {\n lines.push(...renderFieldList(type.fields, 0));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderConfigGuideSection(): string {\n return [\n '## riverbank.config.ts Guide',\n '',\n 'Use `riverbank.config.ts` as the source of truth for the site schema, custom blocks, and CLI behavior.',\n 'This section is static guidance for agents; the generated section below shows the live config.',\n '',\n '### Field Overrides (blockFieldOptions)',\n '',\n 'Use `blockFieldOptions` to override the *options* for existing `select` fields.',\n 'This only affects fields that use the `sdkSelect` UI widget (for example: the embed block layout picker).',\n '',\n '```ts',\n 'export default defineConfig({',\n \" siteId: 'your-site-id',\",\n ' blockFieldOptions: {',\n \" 'block.embed': {\",\n ' layout: {',\n ' options: [',\n \" { value: 'showcase', label: 'Showcase Grid' },\",\n \" { value: 'list', label: 'Simple List' },\",\n ' ],',\n ' },',\n ' },',\n \" 'custom.featured-posts': {\",\n ' style: {',\n ' options: [',\n \" { value: 'grid', label: 'Grid' },\",\n \" { value: 'carousel', label: 'Carousel' },\",\n ' ],',\n ' },',\n ' },',\n ' },',\n '});',\n '```',\n '',\n '### Block Field Extensions (blockFieldExtensions)',\n '',\n 'Use `blockFieldExtensions` to add *new* fields to built-in system blocks.',\n 'Extended fields appear at the end of the block form and are available via `content` in `blockOverrides`.',\n '',\n '```ts',\n 'export default defineConfig({',\n \" siteId: 'your-site-id',\",\n ' blockFieldExtensions: {',\n \" 'block.hero': {\",\n ' fields: [',\n \" { id: 'videoBackground', type: 'media', label: 'Video Background', mediaKinds: ['video'] },\",\n \" { id: 'overlayOpacity', type: 'number', label: 'Overlay Opacity', defaultValue: 50 },\",\n ' ],',\n ' },',\n \" 'block.bodyText': {\",\n ' fields: [',\n \" { id: 'layout', type: 'select', label: 'Layout', defaultValue: 'default',\",\n ' options: [',\n \" { value: 'default', label: 'Default' },\",\n \" { value: 'wide', label: 'Wide' },\",\n ' ],',\n ' },',\n ' ],',\n ' },',\n ' },',\n '});',\n '```',\n '',\n 'Rules:',\n '- Only system blocks (`block.*`) can be extended.',\n '- Extended field IDs must not collide with existing block fields.',\n '- If `required: true`, you must set a `defaultValue` to avoid breaking existing blocks.',\n '',\n '### Custom Blocks (customBlocks)',\n '',\n 'Use `customBlocks` to define new block types with their own fields.',\n 'Custom blocks must be rendered via `blockOverrides` in the SDK site.',\n '',\n '```ts',\n 'export default defineConfig({',\n \" siteId: 'your-site-id',\",\n ' customBlocks: [',\n ' {',\n \" id: 'custom.team-member',\",\n \" title: 'Team Member',\",\n \" titleSource: 'name',\",\n \" description: 'Profile card with bio and photo',\",\n \" category: 'content',\",\n \" icon: 'User',\",\n ' fields: [',\n \" { id: 'name', type: 'text', label: 'Name', required: true },\",\n \" { id: 'role', type: 'text', label: 'Role' },\",\n \" { id: 'photo', type: 'media', label: 'Photo', mediaKinds: ['image'] },\",\n \" { id: 'bio', type: 'richText', label: 'Bio' },\",\n ' ],',\n ' },',\n ' ],',\n '});',\n '```',\n '',\n '### Field Types (for customBlocks and blockFieldExtensions)',\n '',\n 'All field definitions use the same `FieldDefinition` format as system blocks.',\n 'Supported `type` values:',\n '',\n '- `text`: Single or multiline text',\n '- `richText`: Rich text editor (markdown or HTML)',\n '- `media`: Image or video upload',\n '- `boolean`: Toggle/checkbox',\n '- `number`: Numeric input',\n '- `date`: Date picker',\n '- `time`: Time picker',\n '- `datetime`: Date + time picker',\n '- `slug`: Slug with optional source field',\n '- `url`: URL input (optionally allow relative)',\n '- `link`: Link picker',\n '- `select`: Single or multi-select options',\n '- `reference`: Reference another entry type',\n '- `repeater`: Repeatable list of fields',\n '- `group`: Group of fields',\n '- `modal`: Fields inside a modal dialog',\n '- `tabGroup`: Group fields by tabs',\n '- `presetOrCustom`: Preset list with custom fallback',\n '- `contentTypeSelect`: Content type picker (all/routable/nonRoutable)',\n '- `entryPicker`: Pick a content entry',\n '',\n 'Tip: For `repeater`, define either `schema.fields` (monomorphic) or `polymorphic: true` with `itemTypes`.',\n ].join('\\n');\n}\n\nfunction renderCustomBlocksSection(customBlocks: SdkCustomBlock[]): string {\n const lines: string[] = ['## Custom Blocks', ''];\n\n if (customBlocks.length === 0) {\n lines.push('No custom blocks defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const block of customBlocks) {\n lines.push(`### ${block.id}`);\n lines.push('');\n lines.push(`- Title: ${block.title}`);\n if (block.description) lines.push(`- Description: ${block.description}`);\n if (block.category) lines.push(`- Category: ${block.category}`);\n if (block.tags && block.tags.length > 0) lines.push(`- Tags: ${block.tags.join(', ')}`);\n lines.push('');\n lines.push('Fields:');\n if (block.fields.length === 0) {\n lines.push('- (none)');\n } else {\n lines.push(...renderFieldList(block.fields, 0));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderBlockFieldExtensionsSection(extensions?: BlockFieldExtensionsMap): string {\n const lines: string[] = ['## Block Field Extensions', ''];\n\n if (!extensions || Object.keys(extensions).length === 0) {\n lines.push('No block field extensions defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const [blockId, extension] of Object.entries(extensions)) {\n lines.push(`### ${blockId}`);\n lines.push('');\n if (extension.fields.length === 0) {\n lines.push('- (none)');\n } else {\n lines.push(...renderFieldList(extension.fields, 0));\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderBlockFieldOptionsSection(options?: BlockFieldOptionsMap): string {\n const lines: string[] = ['## Block Field Options', ''];\n\n if (!options || Object.keys(options).length === 0) {\n lines.push('No block field options defined.');\n lines.push('');\n return lines.join('\\n');\n }\n\n for (const [blockId, fields] of Object.entries(options)) {\n lines.push(`### ${blockId}`);\n lines.push('');\n for (const [fieldId, config] of Object.entries(fields)) {\n lines.push(`- ${fieldId}`);\n if (config.options && config.options.length > 0) {\n lines.push(...renderOptionsList(config.options, 1));\n }\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction renderFieldList(fields: FieldDefinition[], depth: number): string[] {\n const lines: string[] = [];\n const indent = ' '.repeat(depth);\n\n for (const field of fields) {\n const required = field.required ? ' required' : '';\n const label = field.label ? ` - ${field.label}` : '';\n lines.push(`${indent}- ${field.id} (${field.type})${required}${label}`);\n\n if ('options' in field && Array.isArray(field.options) && field.options.length > 0) {\n lines.push(...renderOptionsList(field.options, depth + 1));\n }\n\n if ('fields' in field && Array.isArray(field.fields)) {\n lines.push(...renderFieldList(field.fields, depth + 1));\n }\n\n if ('schema' in field && field.schema && 'fields' in field.schema) {\n lines.push(...renderFieldList(field.schema.fields as FieldDefinition[], depth + 1));\n }\n\n if ('tabs' in field && Array.isArray(field.tabs)) {\n for (const tab of field.tabs) {\n lines.push(`${indent} - tab ${tab.id} (${tab.label})`);\n lines.push(...renderFieldList(tab.fields, depth + 2));\n }\n }\n }\n\n return lines;\n}\n\nfunction renderOptionsList(options: FieldSelectOption[], depth: number): string[] {\n const indent = ' '.repeat(depth);\n return options.map((option) => `${indent}- option: ${option.value} (${option.label})`);\n}\n","import * as fs from 'fs/promises';\nimport * as path from 'path';\n\nimport { riverbankSiteConfigSchema } from '../../config/validation';\nimport type { RiverbankSiteConfig } from '../../config/types';\nimport {\n buildSchemaTemplate,\n buildBlockTypesTemplate,\n buildSchemaGeneratedSection,\n buildBlockTypesGeneratedSection,\n getGeneratedMarkers,\n} from './templates';\n\ntype InitDocsOptions = {\n rootDir: string;\n configPath?: string;\n agentsPath: string;\n output?: {\n info(message: string, data?: unknown): void;\n warn(message: string, data?: unknown): void;\n success(message: string, data?: unknown): void;\n };\n};\n\nconst AGENTS_START = '<!-- RIVERBANK-CONTEXT-START -->';\nconst AGENTS_END = '<!-- RIVERBANK-CONTEXT-END -->';\n\nexport async function initDocs(options: InitDocsOptions): Promise<void> {\n const { rootDir, configPath, agentsPath, output } = options;\n\n const docsDir = path.join(rootDir, 'docs');\n const contextDir = path.join(rootDir, 'context');\n const workflowsDir = path.join(docsDir, 'workflows');\n const knowledgeDir = path.join(contextDir, 'knowledge');\n const brandDir = path.join(contextDir, 'brand');\n\n await ensureDir(workflowsDir);\n await ensureDir(knowledgeDir);\n await ensureDir(brandDir);\n\n await writeFileIfMissing(path.join(docsDir, 'cli-reference.md'), cliReferenceTemplate());\n await writeFileIfMissing(path.join(docsDir, 'content-management.md'), contentManagementTemplate());\n await writeFileIfMissing(path.join(workflowsDir, 'create-page.md'), workflowCreatePageTemplate());\n await writeFileIfMissing(path.join(workflowsDir, 'add-block.md'), workflowAddBlockTemplate());\n await writeFileIfMissing(path.join(workflowsDir, 'publish-workflow.md'), workflowPublishTemplate());\n await writeFileIfMissing(path.join(contextDir, 'brief.md'), briefTemplate());\n await writeFileIfMissing(path.join(knowledgeDir, 'README.md'), knowledgeTemplate());\n await writeFileIfMissing(path.join(brandDir, 'README.md'), brandTemplate());\n\n const { config, errorMessage } = await loadConfig(configPath, output);\n\n await upsertGeneratedDoc(\n path.join(docsDir, 'schema.md'),\n buildSchemaTemplate({ config, errorMessage }),\n buildSchemaGeneratedSection({ config, errorMessage }),\n );\n\n await upsertGeneratedDoc(\n path.join(docsDir, 'block-types.md'),\n buildBlockTypesTemplate(),\n buildBlockTypesGeneratedSection(),\n );\n\n await upsertAgentsSection(agentsPath);\n}\n\nasync function loadConfig(\n configPath: string | undefined,\n output?: InitDocsOptions['output'],\n): Promise<{ config?: RiverbankSiteConfig; errorMessage?: string }> {\n if (!configPath) {\n return { errorMessage: 'No config path provided.' };\n }\n\n try {\n const { loadConfigFile } = await import('../load-config');\n const rawConfig = await loadConfigFile(configPath);\n const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);\n if (!parsed.success) {\n return { errorMessage: `Config validation failed: ${parsed.error.message}` };\n }\n return { config: parsed.data as RiverbankSiteConfig };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n output?.warn('Failed to load config; schema will be partial', { message });\n return { errorMessage: message };\n }\n}\n\nasync function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\nasync function writeFileIfMissing(filePath: string, contents: string): Promise<void> {\n try {\n await fs.access(filePath);\n } catch {\n await fs.writeFile(filePath, contents, 'utf-8');\n }\n}\n\nasync function upsertGeneratedDoc(\n filePath: string,\n template: string,\n generatedSection: string,\n): Promise<void> {\n const markers = getGeneratedMarkers();\n const contents = await readFileOrTemplate(filePath, template);\n const updated = replaceMarkedSection(contents, markers.start, markers.end, generatedSection);\n await fs.writeFile(filePath, updated, 'utf-8');\n}\n\nasync function readFileOrTemplate(filePath: string, template: string): Promise<string> {\n try {\n return await fs.readFile(filePath, 'utf-8');\n } catch {\n return template;\n }\n}\n\nfunction replaceMarkedSection(\n content: string,\n startMarker: string,\n endMarker: string,\n section: string,\n): string {\n const startIndex = content.indexOf(startMarker);\n const endIndex = content.indexOf(endMarker);\n\n if (startIndex === -1 || endIndex === -1 || endIndex < startIndex) {\n const trimmed = content.trimEnd();\n return `${trimmed}\\n\\n${startMarker}\\n${section}\\n${endMarker}\\n`;\n }\n\n const before = content.slice(0, startIndex + startMarker.length);\n const after = content.slice(endIndex);\n return `${before}\\n${section}\\n${after}`;\n}\n\nasync function upsertAgentsSection(filePath: string): Promise<void> {\n const content = await readFileOrTemplate(filePath, '# AGENTS.md\\n');\n const section = agentsSectionTemplate();\n const updated = replaceMarkedSection(content, AGENTS_START, AGENTS_END, section);\n await fs.writeFile(filePath, updated, 'utf-8');\n}\n\nfunction cliReferenceTemplate(): string {\n return [\n '# CLI Reference',\n '',\n 'Describe the SDK CLI commands available to agents.',\n '',\n 'Include usage patterns, required flags, and common examples.',\n '',\n ].join('\\n');\n}\n\nfunction contentManagementTemplate(): string {\n return [\n '# Content Management',\n '',\n 'Describe how content is structured, edited, and published for this site.',\n '',\n ].join('\\n');\n}\n\nfunction workflowCreatePageTemplate(): string {\n return [\n '# Workflow: Create a Page',\n '',\n 'Describe the steps to create a page for this site.',\n '',\n 'Include any required content types or blocks.',\n '',\n ].join('\\n');\n}\n\nfunction workflowAddBlockTemplate(): string {\n return [\n '# Workflow: Add a Block',\n '',\n 'Describe how to add blocks to an existing page.',\n '',\n ].join('\\n');\n}\n\nfunction workflowPublishTemplate(): string {\n return [\n '# Workflow: Publish Content',\n '',\n 'Describe how to publish content safely for this site.',\n '',\n ].join('\\n');\n}\n\nfunction briefTemplate(): string {\n return [\n '# Site Brief',\n '',\n 'Summarize the brand, tone, and goals for this site.',\n '',\n ].join('\\n');\n}\n\nfunction knowledgeTemplate(): string {\n return [\n '# Knowledge Base',\n '',\n 'Add domain knowledge, FAQs, and reference links for the site.',\n '',\n ].join('\\n');\n}\n\nfunction brandTemplate(): string {\n return [\n '# Brand Assets',\n '',\n 'List or link the brand assets available for this site.',\n '',\n ].join('\\n');\n}\n\nfunction agentsSectionTemplate(): string {\n return [\n '## Riverbank SDK Context',\n '',\n '- This repo contains both the CMS and the SDK used by this site.',\n '- Agents can suggest or implement CMS changes when needed, not just local workarounds.',\n '- Use riverbank.config.ts as the source of truth for site schema and custom blocks.',\n '',\n '## Code Quality Guidelines (SDK + CMS)',\n '',\n '- Prefer functional, composable helpers over large classes.',\n '- Keep changes small and DRY; remove old code instead of shimming.',\n '- Keep route handlers thin and use helpers/services.',\n '- Use typed API clients; avoid hardcoded URLs.',\n ].join('\\n');\n}\n","/**\n * init-docs Command\n *\n * Scaffold agent documentation and site context.\n */\n\nimport { Command } from 'commander';\nimport * as path from 'path';\n\nimport { createCommandContext, withErrorHandling } from '../helpers';\nimport { initDocs } from '../init-docs';\n\ninterface InitDocsOptions {\n path?: string;\n config?: string;\n}\n\nexport async function runInitDocs(options: InitDocsOptions, command: Command): Promise<void> {\n const { output, isJsonOutput } = createCommandContext(command);\n\n const rootDir = path.resolve(options.path ?? '.riverbank');\n const configPath = path.resolve(options.config ?? path.join(process.cwd(), 'riverbank.config.ts'));\n const agentsPath = path.resolve(process.cwd(), 'AGENTS.md');\n\n await initDocs({\n rootDir,\n configPath,\n agentsPath,\n output,\n });\n\n if (isJsonOutput) {\n output.json({ success: true, data: { rootDir } });\n return;\n }\n\n output.success('Agent docs initialized', { rootDir });\n}\n\nconst initDocsCommand = new Command('init-docs')\n .description('Scaffold agent documentation and site context')\n .option('--path <path>', 'Destination directory (default: ./.riverbank)')\n .option('--config <path>', 'Path to riverbank.config.ts (default: ./riverbank.config.ts)')\n .action(\n withErrorHandling(async (options: InitDocsOptions, command: Command) => {\n await runInitDocs(options, command);\n })\n );\n\nexport { initDocsCommand };\n","/**\n * Identifiers Command\n *\n * Manage SDK identifiers for pages, blocks, and entries.\n *\n * Usage:\n * riverbankcms identifiers backfill # Backfill identifiers for content without them\n */\n\nimport { Command } from 'commander';\n\nimport { createCommandContext, withErrorHandling } from '../helpers';\n\n// ============================================================================\n// Subcommands\n// ============================================================================\n\nconst backfillCommand = new Command('backfill')\n .description('Backfill identifiers for pages, blocks, and entries that don\\'t have one')\n .addHelpText('after', `\nThis command generates stable identifiers for content created before the SDK was available.\nIdentifiers are generated from titles (slugified) and are idempotent - running this\ncommand multiple times won't overwrite existing identifiers.\n\nExamples:\n $ riverbankcms identifiers backfill\n $ riverbankcms identifiers backfill --remote\n`)\n .action(\n withErrorHandling(async (_options: unknown, command: Command) => {\n const { output, client } = createCommandContext(command);\n\n output.info('Backfilling identifiers for pages, blocks, and entries...');\n\n const result = await client.identifiers.backfill();\n\n const totalUpdated =\n result.pages.pagesUpdated +\n result.blocks.total +\n result.entries.entriesUpdated;\n\n if (totalUpdated === 0) {\n output.success('All content already has identifiers - nothing to backfill');\n return;\n }\n\n output.success('Backfill complete', {\n pages: {\n updated: result.pages.pagesUpdated,\n identifiers: result.pages.identifiersAssigned,\n },\n blocks: {\n updated: result.blocks.total,\n byPage: Object.keys(result.blocks.byPage).length > 0\n ? result.blocks.byPage\n : undefined,\n },\n entries: {\n updated: result.entries.entriesUpdated,\n identifiers: result.entries.identifiersAssigned,\n },\n });\n })\n );\n\n// ============================================================================\n// Main Command\n// ============================================================================\n\nexport const identifiersCommand = new Command('identifiers')\n .description('Manage SDK identifiers')\n .addHelpText('after', `\nIdentifiers are stable, human-readable names used to reference content in the SDK.\nThey are automatically generated when content is created via the SDK, but older\ncontent may need backfilling.\n\nCommands:\n backfill Generate identifiers for content that doesn't have one\n\nExamples:\n $ riverbankcms identifiers backfill\n`)\n .addCommand(backfillCommand);\n","/**\n * Riverbank CMS SDK CLI\n *\n * CLI tools for SDK site developers.\n * Supports bidirectional content management: pull content from CMS and push content back.\n */\n\n// Load environment variables from .env files before anything else\n// This ensures env vars are available for all CLI commands\nimport { config } from 'dotenv';\nconfig({ path: '.env.local' });\nconfig({ path: '.env' });\n\nimport { Command } from 'commander';\nimport { pushConfigCommand } from './push-config';\nimport { pullCommand } from './commands/pull';\nimport { pushCommand } from './commands/push';\nimport { entryCommand } from './commands/entry';\nimport { pageCommand } from './commands/page';\nimport { blockCommand } from './commands/block';\nimport { navigationCommand } from './commands/navigation';\nimport { deleteCommand } from './commands/delete';\nimport { previewCommand } from './commands/preview';\nimport { initDocsCommand } from './commands/init-docs';\nimport { identifiersCommand } from './commands/identifiers';\n\nconst program = new Command();\n\nprogram\n .name('riverbankcms')\n .description('Riverbank CMS SDK CLI - manage content and configuration')\n .version('0.1.0')\n // Global options available to all commands\n .option('--json', 'Output in JSON format for machine parsing')\n .option('--quiet', 'Minimal output (suppress non-essential messages)')\n .option('--remote', 'Use remote/production environment instead of local')\n .addHelpText('after', `\nEnvironment Variables:\n Local environment (default):\n RIVERBANK_LOCAL_SITE_ID Site ID for local development\n RIVERBANK_LOCAL_DASHBOARD_URL Dashboard URL (e.g., http://localhost:4000)\n RIVERBANK_LOCAL_MGMT_API_KEY Management API key (bld_mgmt_sk_...)\n\n Remote environment (--remote):\n RIVERBANK_REMOTE_SITE_ID Site ID for production\n RIVERBANK_REMOTE_DASHBOARD_URL Dashboard URL (e.g., https://dashboard.riverbankcms.com)\n RIVERBANK_REMOTE_MGMT_API_KEY Management API key (bld_mgmt_sk_...)\n\nExamples:\n $ riverbankcms push-config\n $ riverbankcms pull # Pull all content from local\n $ riverbankcms pull --remote # Pull all content from production\n $ riverbankcms pull entries blog-post # Pull specific content type\n $ riverbankcms push # Push content to local\n $ riverbankcms push --remote --yes # Push content to production\n\nRun 'riverbankcms <command> --help' for detailed options.\n`);\n\n// Add commands\nprogram.addCommand(pushConfigCommand);\nprogram.addCommand(pullCommand);\nprogram.addCommand(pushCommand);\n\n// Granular content management commands (Phase 3)\nprogram.addCommand(entryCommand);\nprogram.addCommand(pageCommand);\nprogram.addCommand(blockCommand);\nprogram.addCommand(navigationCommand);\nprogram.addCommand(deleteCommand);\n\n// Phase 6: Block preview command\nprogram.addCommand(previewCommand);\nprogram.addCommand(initDocsCommand);\n\n// Identifier management\nprogram.addCommand(identifiersCommand);\n\nprogram.parse();\n"]}
|