@riverbankcms/sdk 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +4840 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client/bookings.d.mts +82 -2
- package/dist/client/bookings.d.ts +82 -2
- package/dist/client/bookings.js +1623 -3
- package/dist/client/bookings.js.map +1 -1
- package/dist/client/bookings.mjs +1610 -5
- package/dist/client/bookings.mjs.map +1 -1
- package/dist/client/client.d.mts +8 -5
- package/dist/client/client.d.ts +8 -5
- package/dist/client/client.js +16856 -322
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +16838 -307
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +10 -7
- package/dist/client/hooks.d.ts +10 -7
- package/dist/client/hooks.js +5074 -4
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/hooks.mjs +5074 -4
- package/dist/client/hooks.mjs.map +1 -1
- package/dist/client/rendering/client.d.mts +7 -1
- package/dist/client/rendering/client.d.ts +7 -1
- package/dist/client/rendering/client.js +17388 -2
- package/dist/client/rendering/client.js.map +1 -1
- package/dist/client/rendering/client.mjs +17382 -2
- package/dist/client/rendering/client.mjs.map +1 -1
- package/dist/client/resolver-BhueZVxZ.d.mts +61 -0
- package/dist/client/resolver-BhueZVxZ.d.ts +61 -0
- package/dist/client/usePage-BBcFCxOU.d.ts +6297 -0
- package/dist/client/usePage-BydHcMYB.d.mts +6297 -0
- package/dist/server/Layout-CLg8oH_S.d.ts +44 -0
- package/dist/server/Layout-DK_9OOgb.d.mts +44 -0
- package/dist/server/chunk-3J46ILMJ.mjs +2111 -0
- package/dist/server/chunk-3J46ILMJ.mjs.map +1 -0
- package/dist/server/{chunk-JB4LIEFS.js → chunk-5R4NMVXA.js} +15 -8
- package/dist/server/chunk-5R4NMVXA.js.map +1 -0
- package/dist/server/{chunk-ADREPXFU.js → chunk-62ZJI564.js} +3 -3
- package/dist/server/{chunk-ADREPXFU.js.map → chunk-62ZJI564.js.map} +1 -1
- package/dist/server/chunk-7DS4Q3GA.mjs +333 -0
- package/dist/server/chunk-7DS4Q3GA.mjs.map +1 -0
- package/dist/server/chunk-BJTO5JO5.mjs +11 -0
- package/dist/server/{chunk-4Z5FBFRL.mjs → chunk-BPKYRPCQ.mjs} +7 -3
- package/dist/server/{chunk-4Z5FBFRL.mjs.map → chunk-BPKYRPCQ.mjs.map} +1 -1
- package/dist/server/chunk-DGUM43GV.js +11 -0
- package/dist/server/chunk-DGUM43GV.js.map +1 -0
- package/dist/server/chunk-EGTDJ4PL.js +5461 -0
- package/dist/server/chunk-EGTDJ4PL.js.map +1 -0
- package/dist/server/chunk-FK64TZBT.mjs +831 -0
- package/dist/server/chunk-FK64TZBT.mjs.map +1 -0
- package/dist/server/chunk-GKYNDDJS.js +2111 -0
- package/dist/server/chunk-GKYNDDJS.js.map +1 -0
- package/dist/server/chunk-HOY77YBF.js +333 -0
- package/dist/server/chunk-HOY77YBF.js.map +1 -0
- package/dist/server/chunk-INWKF3IC.js +831 -0
- package/dist/server/chunk-INWKF3IC.js.map +1 -0
- package/dist/server/{chunk-2RW5HAQQ.mjs → chunk-JTAERCX2.mjs} +2 -2
- package/dist/server/chunk-O5DC7MYW.mjs +9606 -0
- package/dist/server/chunk-O5DC7MYW.mjs.map +1 -0
- package/dist/server/{chunk-PEAXKTDU.mjs → chunk-OP2GHK27.mjs} +2 -2
- package/dist/server/{chunk-WKG57P2H.mjs → chunk-PN3CHDVX.mjs} +10 -3
- package/dist/server/{chunk-WKG57P2H.mjs.map → chunk-PN3CHDVX.mjs.map} +1 -1
- package/dist/server/chunk-SF63XAX7.js +9606 -0
- package/dist/server/chunk-SF63XAX7.js.map +1 -0
- package/dist/server/{chunk-F472SMKX.js → chunk-TO7FD6TQ.js} +4 -4
- package/dist/server/{chunk-F472SMKX.js.map → chunk-TO7FD6TQ.js.map} +1 -1
- package/dist/server/chunk-USQF2XTU.mjs +5461 -0
- package/dist/server/chunk-USQF2XTU.mjs.map +1 -0
- package/dist/server/{chunk-SW7LE4M3.js → chunk-XLVL5WPH.js} +12 -8
- package/dist/server/chunk-XLVL5WPH.js.map +1 -0
- package/dist/server/components-BzdA6NAc.d.mts +305 -0
- package/dist/server/components-DhIcstww.d.ts +305 -0
- package/dist/server/components.d.mts +13 -49
- package/dist/server/components.d.ts +13 -49
- package/dist/server/components.js +7 -4
- package/dist/server/components.js.map +1 -1
- package/dist/server/components.mjs +9 -6
- package/dist/server/components.mjs.map +1 -1
- package/dist/server/config-validation.d.mts +2 -2
- package/dist/server/config-validation.d.ts +2 -2
- package/dist/server/config-validation.js +6 -3
- package/dist/server/config-validation.js.map +1 -1
- package/dist/server/config-validation.mjs +5 -2
- package/dist/server/config.d.mts +3 -3
- package/dist/server/config.d.ts +3 -3
- package/dist/server/config.js +6 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +5 -2
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/data.d.mts +9 -8
- package/dist/server/data.d.ts +9 -8
- package/dist/server/data.js +4 -2
- package/dist/server/data.js.map +1 -1
- package/dist/server/data.mjs +3 -1
- package/dist/server/{index-C6M0Wfjq.d.ts → index-BB28KAui.d.ts} +1 -1
- package/dist/server/{index-B0yI_V6Z.d.mts → index-C_FVup_o.d.mts} +1 -1
- package/dist/server/index.d.mts +1554 -5
- package/dist/server/index.d.ts +1554 -5
- package/dist/server/index.js +4 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +4 -4
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/{loadContent-CJcbYF3J.d.ts → loadContent-AQOBf_gP.d.ts} +4 -4
- package/dist/server/{loadContent-zhlL4YSE.d.mts → loadContent-DBmprsB4.d.mts} +4 -4
- package/dist/server/loadPage-3ECPF426.js +11 -0
- package/dist/server/loadPage-3ECPF426.js.map +1 -0
- package/dist/server/{loadPage-CCf15nt8.d.mts → loadPage-BMg8PJxJ.d.ts} +146 -5
- package/dist/server/loadPage-LW273NYO.mjs +11 -0
- package/dist/server/loadPage-LW273NYO.mjs.map +1 -0
- package/dist/server/{loadPage-BYmVMk0V.d.ts → loadPage-pg4HimlK.d.mts} +146 -5
- package/dist/server/metadata.d.mts +9 -6
- package/dist/server/metadata.d.ts +9 -6
- package/dist/server/metadata.js +3 -1
- package/dist/server/metadata.js.map +1 -1
- package/dist/server/metadata.mjs +2 -0
- package/dist/server/metadata.mjs.map +1 -1
- package/dist/server/rendering/server.d.mts +9 -7
- package/dist/server/rendering/server.d.ts +9 -7
- package/dist/server/rendering/server.js +7 -4
- package/dist/server/rendering/server.js.map +1 -1
- package/dist/server/rendering/server.mjs +6 -3
- package/dist/server/rendering.d.mts +172 -9
- package/dist/server/rendering.d.ts +172 -9
- package/dist/server/rendering.js +12 -9
- package/dist/server/rendering.js.map +1 -1
- package/dist/server/rendering.mjs +14 -11
- package/dist/server/rendering.mjs.map +1 -1
- package/dist/server/routing.d.mts +9 -6
- package/dist/server/routing.d.ts +9 -6
- package/dist/server/routing.js +4 -2
- package/dist/server/routing.js.map +1 -1
- package/dist/server/routing.mjs +3 -1
- package/dist/server/routing.mjs.map +1 -1
- package/dist/server/schema-Bpy9N5ZI.d.mts +1870 -0
- package/dist/server/schema-Bpy9N5ZI.d.ts +1870 -0
- package/dist/server/server.d.mts +11 -8
- package/dist/server/server.d.ts +11 -8
- package/dist/server/server.js +7 -5
- package/dist/server/server.js.map +1 -1
- package/dist/server/server.mjs +6 -4
- package/dist/server/theme-bridge.js +13 -10
- package/dist/server/theme-bridge.js.map +1 -1
- package/dist/server/theme-bridge.mjs +10 -7
- package/dist/server/theme-bridge.mjs.map +1 -1
- package/dist/server/theme.js +3 -1
- package/dist/server/theme.js.map +1 -1
- package/dist/server/theme.mjs +2 -0
- package/dist/server/theme.mjs.map +1 -1
- package/dist/server/{types-BCeqWtI2.d.ts → types--u4GLCAY.d.ts} +1 -1
- package/dist/server/types-BprgZt-t.d.ts +4149 -0
- package/dist/server/types-C0G9IxWO.d.mts +4149 -0
- package/dist/server/{types-Bbo01M7P.d.mts → types-_nDnPHpv.d.mts} +27 -1
- package/dist/server/{types-Bbo01M7P.d.ts → types-_nDnPHpv.d.ts} +27 -1
- package/dist/server/{types-BCeqWtI2.d.mts → types-_zWJTgv0.d.mts} +1 -1
- package/package.json +6 -6
- package/dist/server/chunk-3KKZVGH4.mjs +0 -179
- package/dist/server/chunk-3KKZVGH4.mjs.map +0 -1
- package/dist/server/chunk-4Z3GPTCS.js +0 -179
- package/dist/server/chunk-4Z3GPTCS.js.map +0 -1
- package/dist/server/chunk-JB4LIEFS.js.map +0 -1
- package/dist/server/chunk-QQ6U4QX6.js +0 -120
- package/dist/server/chunk-QQ6U4QX6.js.map +0 -1
- package/dist/server/chunk-R5YGLRUG.mjs +0 -122
- package/dist/server/chunk-R5YGLRUG.mjs.map +0 -1
- package/dist/server/chunk-SW7LE4M3.js.map +0 -1
- package/dist/server/chunk-W3K7LVPS.mjs +0 -120
- package/dist/server/chunk-W3K7LVPS.mjs.map +0 -1
- package/dist/server/chunk-YHEZMVTS.js +0 -122
- package/dist/server/chunk-YHEZMVTS.js.map +0 -1
- package/dist/server/loadPage-DVH3DW6E.js +0 -9
- package/dist/server/loadPage-DVH3DW6E.js.map +0 -1
- package/dist/server/loadPage-PHQZ6XQZ.mjs +0 -9
- package/dist/server/types-C6gmRHLe.d.mts +0 -150
- package/dist/server/types-C6gmRHLe.d.ts +0 -150
- /package/dist/server/{loadPage-PHQZ6XQZ.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
- /package/dist/server/{chunk-2RW5HAQQ.mjs.map → chunk-JTAERCX2.mjs.map} +0 -0
- /package/dist/server/{chunk-PEAXKTDU.mjs.map → chunk-OP2GHK27.mjs.map} +0 -0
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkHOY77YBFjs = require('./chunk-HOY77YBF.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkEGTDJ4PLjs = require('./chunk-EGTDJ4PL.js');
|
|
4
9
|
|
|
5
10
|
// src/config/validation.ts
|
|
6
11
|
var _zod = require('zod');
|
|
7
|
-
var _blocks = require('@riverbankcms/blocks');
|
|
8
12
|
var sdkThemePaletteSchema = _zod.z.record(_zod.z.string(), _zod.z.string());
|
|
9
13
|
var sdkThemeConfigSchema = _zod.z.object({
|
|
10
14
|
palette: sdkThemePaletteSchema
|
|
@@ -43,7 +47,7 @@ var siteStyleConfigSchema = _zod.z.object({
|
|
|
43
47
|
sectionOptions: sectionOptionsSchema,
|
|
44
48
|
containerOptions: containerOptionsSchema
|
|
45
49
|
}).optional();
|
|
46
|
-
var sdkLoaderEndpointSchema = _zod.z.enum(
|
|
50
|
+
var sdkLoaderEndpointSchema = _zod.z.enum(_chunkHOY77YBFjs.SUPPORTED_LOADER_ENDPOINTS);
|
|
47
51
|
var loaderParamBindingSchema = _zod.z.object({
|
|
48
52
|
$bind: _zod.z.object({
|
|
49
53
|
from: _zod.z.string().min(1, "Binding path is required"),
|
|
@@ -82,7 +86,7 @@ var blockFieldOptionsSchema = _zod.z.record(
|
|
|
82
86
|
)
|
|
83
87
|
).optional();
|
|
84
88
|
var blockFieldExtensionSchema = _zod.z.object({
|
|
85
|
-
fields:
|
|
89
|
+
fields: _chunkEGTDJ4PLjs.fieldSchema.array().min(1, "At least one field is required")
|
|
86
90
|
}).refine(
|
|
87
91
|
(data) => {
|
|
88
92
|
return data.fields.every((field) => {
|
|
@@ -104,7 +108,7 @@ function validateFieldIdConflicts(blockFieldExtensions) {
|
|
|
104
108
|
if (!blockFieldExtensions) return [];
|
|
105
109
|
const conflicts = [];
|
|
106
110
|
for (const [blockId, extension] of Object.entries(blockFieldExtensions)) {
|
|
107
|
-
const definition =
|
|
111
|
+
const definition = _chunkEGTDJ4PLjs.getBlockDefinition.call(void 0, blockId);
|
|
108
112
|
if (!definition) {
|
|
109
113
|
conflicts.push({
|
|
110
114
|
blockId,
|
|
@@ -150,11 +154,11 @@ var sdkCustomBlockSchema = _zod.z.object({
|
|
|
150
154
|
title: _zod.z.string().min(1, "Title is required"),
|
|
151
155
|
titleSource: _zod.z.string().optional(),
|
|
152
156
|
description: _zod.z.string().optional(),
|
|
153
|
-
category:
|
|
157
|
+
category: _chunkEGTDJ4PLjs.blockCategoryEnum,
|
|
154
158
|
icon: _zod.z.string().optional(),
|
|
155
159
|
tags: _zod.z.array(_zod.z.string()).optional(),
|
|
156
160
|
// Reuse the exact field schema from @riverbankcms/blocks - all field types supported
|
|
157
|
-
fields:
|
|
161
|
+
fields: _chunkEGTDJ4PLjs.fieldSchema.array().min(1, "Custom blocks must have at least one field"),
|
|
158
162
|
// Data loaders for CMS endpoints
|
|
159
163
|
dataLoaders: sdkDataLoadersSchema
|
|
160
164
|
}).refine(
|
|
@@ -208,4 +212,4 @@ var riverbankSiteConfigSchema = _zod.z.object({
|
|
|
208
212
|
|
|
209
213
|
|
|
210
214
|
exports.sdkThemePaletteSchema = sdkThemePaletteSchema; exports.sdkThemeConfigSchema = sdkThemeConfigSchema; exports.sectionBackgroundSchema = sectionBackgroundSchema; exports.sectionSpacingSchema = sectionSpacingSchema; exports.containerMaxWidthSchema = containerMaxWidthSchema; exports.containerAlignmentSchema = containerAlignmentSchema; exports.sectionOptionsSchema = sectionOptionsSchema; exports.containerOptionsSchema = containerOptionsSchema; exports.siteStyleConfigSchema = siteStyleConfigSchema; exports.sdkLoaderEndpointSchema = sdkLoaderEndpointSchema; exports.loaderParamBindingSchema = loaderParamBindingSchema; exports.loaderParamValueSchema = loaderParamValueSchema; exports.sdkConfigLoaderSchema = sdkConfigLoaderSchema; exports.sdkDataLoadersSchema = sdkDataLoadersSchema; exports.fieldSelectOptionSchema = fieldSelectOptionSchema; exports.blockFieldConfigSchema = blockFieldConfigSchema; exports.blockFieldOptionsSchema = blockFieldOptionsSchema; exports.blockFieldExtensionSchema = blockFieldExtensionSchema; exports.blockFieldExtensionsSchema = blockFieldExtensionsSchema; exports.validateFieldIdConflicts = validateFieldIdConflicts; exports.sdkCustomBlockSchema = sdkCustomBlockSchema; exports.riverbankSiteConfigSchema = riverbankSiteConfigSchema;
|
|
211
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-XLVL5WPH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-XLVL5WPH.js","../../src/config/validation.ts"],"names":[],"mappings":"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","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-XLVL5WPH.js","sourcesContent":[null,"/**\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 } from './types';\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 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 * 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 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}).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"]}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { T as ThemeTokens } from './loadPage-pg4HimlK.mjs';
|
|
2
|
+
import './Layout-DK_9OOgb.mjs';
|
|
3
|
+
import { T as Theme, H as HydratedTheme, g as ExpandedPalette } from './types-C0G9IxWO.mjs';
|
|
4
|
+
import './schema-Bpy9N5ZI.mjs';
|
|
5
|
+
import z, { z as z$1 } from 'zod';
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import React__default from 'react';
|
|
8
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
declare const mediaSchema: z.ZodObject<{
|
|
11
|
+
type: z.ZodEnum<{
|
|
12
|
+
image: "image";
|
|
13
|
+
video: "video";
|
|
14
|
+
}>;
|
|
15
|
+
purpose: z.ZodOptional<z.ZodString>;
|
|
16
|
+
placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
17
|
+
assetId: z.ZodOptional<z.ZodString>;
|
|
18
|
+
src: z.ZodOptional<z.ZodString>;
|
|
19
|
+
alt: z.ZodOptional<z.ZodString>;
|
|
20
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
storageBucket: z.ZodOptional<z.ZodString>;
|
|
23
|
+
storagePath: z.ZodOptional<z.ZodString>;
|
|
24
|
+
transform: z.ZodOptional<z.ZodObject<{
|
|
25
|
+
rect: z.ZodOptional<z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
|
|
26
|
+
hotspot: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
27
|
+
x: z.ZodNumber;
|
|
28
|
+
y: z.ZodNumber;
|
|
29
|
+
radius: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
}, z.core.$strip>>>;
|
|
31
|
+
}, z.core.$strip>>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
type Media = z.infer<typeof mediaSchema>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Gradient configuration types and schemas
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Gradient configuration
|
|
41
|
+
*/
|
|
42
|
+
declare const gradientConfigSchema: z$1.ZodObject<{
|
|
43
|
+
type: z$1.ZodEnum<{
|
|
44
|
+
linear: "linear";
|
|
45
|
+
radial: "radial";
|
|
46
|
+
}>;
|
|
47
|
+
angle: z$1.ZodOptional<z$1.ZodNumber>;
|
|
48
|
+
position: z$1.ZodOptional<z$1.ZodString>;
|
|
49
|
+
stops: z$1.ZodArray<z$1.ZodObject<{
|
|
50
|
+
color: z$1.ZodString;
|
|
51
|
+
position: z$1.ZodNumber;
|
|
52
|
+
}, z$1.core.$strip>>;
|
|
53
|
+
}, z$1.core.$strip>;
|
|
54
|
+
type GradientConfig = z$1.infer<typeof gradientConfigSchema>;
|
|
55
|
+
|
|
56
|
+
type HeroCta = {
|
|
57
|
+
label: string;
|
|
58
|
+
href: string;
|
|
59
|
+
variant?: 'primary' | 'secondary' | 'outline';
|
|
60
|
+
iconLeft?: Media | null;
|
|
61
|
+
iconRight?: Media | null;
|
|
62
|
+
};
|
|
63
|
+
type HeroCtaInput = Partial<HeroCta>;
|
|
64
|
+
type HeroContent = {
|
|
65
|
+
eyebrow?: string;
|
|
66
|
+
headline: string;
|
|
67
|
+
subheadline?: string;
|
|
68
|
+
_sectionStyles?: {
|
|
69
|
+
background?: {
|
|
70
|
+
type: 'color' | 'gradient' | 'image';
|
|
71
|
+
color?: string | null;
|
|
72
|
+
gradient?: GradientConfig | null;
|
|
73
|
+
image?: HeroMedia | null;
|
|
74
|
+
textColor?: string | null;
|
|
75
|
+
} | null;
|
|
76
|
+
spacing?: string | null;
|
|
77
|
+
} | null;
|
|
78
|
+
ctas?: HeroCtaInput[];
|
|
79
|
+
};
|
|
80
|
+
type HeroMedia = Media;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Build Zod validation schema for rich text fields
|
|
84
|
+
*
|
|
85
|
+
* @param options - Optional configuration
|
|
86
|
+
* @param options.required - If true, validates that content is not empty
|
|
87
|
+
* @param options.label - Field label for error messages (defaults to 'This field')
|
|
88
|
+
* @returns Zod schema for rich text validation
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* // Basic usage
|
|
92
|
+
* const schema = buildRichTextSchema()
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* // Required field with custom label
|
|
96
|
+
* const schema = buildRichTextSchema({ required: true, label: 'Description' })
|
|
97
|
+
*/
|
|
98
|
+
/**
|
|
99
|
+
* TypeScript type for a TipTap document node
|
|
100
|
+
*
|
|
101
|
+
* Use this type for rich text content fields in block definitions.
|
|
102
|
+
* Defined explicitly (rather than inferred) because recursive Zod schemas
|
|
103
|
+
* require `z.ZodType<any>` which loses type information.
|
|
104
|
+
*/
|
|
105
|
+
type TipTapNode = {
|
|
106
|
+
type: string;
|
|
107
|
+
content?: TipTapNode[];
|
|
108
|
+
text?: string;
|
|
109
|
+
attrs?: Record<string, unknown>;
|
|
110
|
+
marks?: Array<{
|
|
111
|
+
type: string;
|
|
112
|
+
attrs?: Record<string, unknown>;
|
|
113
|
+
}>;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
type BodyTextAlignment = "left" | "center";
|
|
117
|
+
type BodyTextContent = {
|
|
118
|
+
heading?: string | null;
|
|
119
|
+
body: TipTapNode;
|
|
120
|
+
alignment?: BodyTextAlignment | null;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
type ThemeCssVars = Record<string, string | number>;
|
|
124
|
+
type ThemeRuntime = {
|
|
125
|
+
hydrated: HydratedTheme;
|
|
126
|
+
cssVars: ThemeCssVars;
|
|
127
|
+
tokens: ThemeTokens;
|
|
128
|
+
paletteTokens: ExpandedPalette;
|
|
129
|
+
buttonCss?: string;
|
|
130
|
+
headerCss?: string;
|
|
131
|
+
cardCss?: string;
|
|
132
|
+
accordionCss?: string;
|
|
133
|
+
inputCss?: string;
|
|
134
|
+
layoutCss?: string;
|
|
135
|
+
statusCss?: string;
|
|
136
|
+
progressCss?: string;
|
|
137
|
+
};
|
|
138
|
+
declare function buildThemeRuntime(theme: Theme, options?: {
|
|
139
|
+
themeId?: string;
|
|
140
|
+
}): ThemeRuntime;
|
|
141
|
+
|
|
142
|
+
declare function RichText$1({ as: Comp, className, doc, path }: RichTextPrimitiveProps): react_jsx_runtime.JSX.Element;
|
|
143
|
+
|
|
144
|
+
type RichTextPrimitiveProps = {
|
|
145
|
+
as?: React__default.ElementType;
|
|
146
|
+
className?: string;
|
|
147
|
+
path?: string;
|
|
148
|
+
doc?: TipTapNode | null;
|
|
149
|
+
variant?: RichTextVariant;
|
|
150
|
+
blockData?: Record<string, unknown> | null;
|
|
151
|
+
};
|
|
152
|
+
type RichTextVariant = "full" | "inline" | "limited" | "media";
|
|
153
|
+
declare const RichText: typeof RichText$1;
|
|
154
|
+
|
|
155
|
+
type ResolveImageUrlOptions = {
|
|
156
|
+
/**
|
|
157
|
+
* Preview API key for accessing unpublished images.
|
|
158
|
+
* When provided, appended as ?preview_key=xxx to the image URL.
|
|
159
|
+
*/
|
|
160
|
+
previewKey?: string | null;
|
|
161
|
+
};
|
|
162
|
+
declare function resolveImageUrl(value: Media, options?: ResolveImageUrlOptions): string | undefined;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Helper utilities for resolving background data in custom block components.
|
|
166
|
+
*
|
|
167
|
+
* These helpers allow custom block overrides to apply section backgrounds
|
|
168
|
+
* (color, gradient, image) with full theme token support, matching the
|
|
169
|
+
* behavior of the default declarative block system.
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Raw background data from CMS content fields.
|
|
174
|
+
* This is the shape of `_sectionStyles.background`, `_containerStyles.background`, etc.
|
|
175
|
+
*/
|
|
176
|
+
type BackgroundInput = {
|
|
177
|
+
/** Color token name (e.g., "primary") or raw hex value */
|
|
178
|
+
color?: string | null;
|
|
179
|
+
/** CSS gradient string */
|
|
180
|
+
gradient?: string | null;
|
|
181
|
+
/** Background image media object */
|
|
182
|
+
image?: Media | null;
|
|
183
|
+
/** Image sizing mode: 'fill' (cover), 'fit' (contain), 'original', 'custom' */
|
|
184
|
+
objectFit?: string | null;
|
|
185
|
+
/** Image position: preset keyword or custom CSS value */
|
|
186
|
+
position?: string | null;
|
|
187
|
+
/** Image scale value (e.g., "150%", "200px") - only for 'custom'/'original' modes */
|
|
188
|
+
scale?: string | null;
|
|
189
|
+
/** Background opacity (0-100) */
|
|
190
|
+
opacity?: number | null;
|
|
191
|
+
/** Whether background should overflow container bounds */
|
|
192
|
+
overflow?: boolean | null;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Resolved background ready for rendering.
|
|
196
|
+
* Token names are converted to actual hex values.
|
|
197
|
+
*/
|
|
198
|
+
type ResolvedBackground = {
|
|
199
|
+
/** Resolved background color (hex value or null) */
|
|
200
|
+
color: string | null;
|
|
201
|
+
/** CSS gradient string */
|
|
202
|
+
gradient: string | null;
|
|
203
|
+
/** Opacity value (0-1) */
|
|
204
|
+
opacity: number | null;
|
|
205
|
+
/** Whether background should overflow */
|
|
206
|
+
overflow: boolean;
|
|
207
|
+
/** Resolved image data */
|
|
208
|
+
image: {
|
|
209
|
+
/** Image URL */
|
|
210
|
+
url: string;
|
|
211
|
+
/** Alt text */
|
|
212
|
+
alt: string;
|
|
213
|
+
/** Original width */
|
|
214
|
+
width?: number;
|
|
215
|
+
/** Original height */
|
|
216
|
+
height?: number;
|
|
217
|
+
} | null;
|
|
218
|
+
/** Inline styles for the image element */
|
|
219
|
+
imageStyle: React.CSSProperties;
|
|
220
|
+
/** CSS classes for the image element */
|
|
221
|
+
imageClassName: string;
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Resolves background data from CMS content to render-ready values.
|
|
225
|
+
*
|
|
226
|
+
* This helper converts raw background field data (with token names like "primary")
|
|
227
|
+
* into resolved values (with actual hex colors from the theme palette).
|
|
228
|
+
*
|
|
229
|
+
* @param background - Raw background data from content (e.g., content._sectionStyles?.background)
|
|
230
|
+
* @param theme - Theme tokens containing the palette for token resolution
|
|
231
|
+
* @returns Resolved background with all values ready for rendering
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```tsx
|
|
235
|
+
* import { resolveBackground } from '@riverbankcms/blocks';
|
|
236
|
+
* // or from SDK: import { resolveBackground } from '@riverbankcms/sdk/rendering';
|
|
237
|
+
*
|
|
238
|
+
* function CustomBlock({ content, theme }: CustomBlockProps) {
|
|
239
|
+
* const bg = resolveBackground(content._sectionStyles?.background, theme);
|
|
240
|
+
*
|
|
241
|
+
* return (
|
|
242
|
+
* <section
|
|
243
|
+
* className="relative"
|
|
244
|
+
* style={{ backgroundColor: bg.color ?? undefined }}
|
|
245
|
+
* >
|
|
246
|
+
* {bg.image && (
|
|
247
|
+
* <img
|
|
248
|
+
* src={bg.image.url}
|
|
249
|
+
* alt={bg.image.alt}
|
|
250
|
+
* className={bg.imageClassName}
|
|
251
|
+
* style={bg.imageStyle}
|
|
252
|
+
* />
|
|
253
|
+
* )}
|
|
254
|
+
* {content.heading}
|
|
255
|
+
* </section>
|
|
256
|
+
* );
|
|
257
|
+
* }
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
declare function resolveBackground(background: BackgroundInput | null | undefined, theme?: ThemeTokens): ResolvedBackground;
|
|
261
|
+
type SectionBackgroundProps = {
|
|
262
|
+
/** Raw background data from content (e.g., content._sectionStyles?.background) */
|
|
263
|
+
background: BackgroundInput | null | undefined;
|
|
264
|
+
/** Theme tokens for resolving color tokens to hex values */
|
|
265
|
+
theme?: ThemeTokens;
|
|
266
|
+
/**
|
|
267
|
+
* Additional className applied to background layers.
|
|
268
|
+
*
|
|
269
|
+
* **Note**: This className is applied to BOTH the color/gradient layer AND the
|
|
270
|
+
* image layer when both exist. If you need different classes for each layer,
|
|
271
|
+
* use the `resolveBackground()` helper directly for more control.
|
|
272
|
+
*/
|
|
273
|
+
className?: string;
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Renders a complete background layer (color, gradient, and/or image).
|
|
277
|
+
*
|
|
278
|
+
* This component handles all the complexity of rendering backgrounds from
|
|
279
|
+
* CMS content, including theme token resolution, image positioning, and opacity.
|
|
280
|
+
*
|
|
281
|
+
* Use this component in custom block overrides to easily apply section backgrounds.
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* ```tsx
|
|
285
|
+
* import { SectionBackground } from '@riverbankcms/blocks';
|
|
286
|
+
* // or from SDK: import { SectionBackground } from '@riverbankcms/sdk/rendering';
|
|
287
|
+
*
|
|
288
|
+
* function CustomBlock({ content, theme }: CustomBlockProps) {
|
|
289
|
+
* return (
|
|
290
|
+
* <section className="relative py-16">
|
|
291
|
+
* <SectionBackground
|
|
292
|
+
* background={content._sectionStyles?.background}
|
|
293
|
+
* theme={theme}
|
|
294
|
+
* />
|
|
295
|
+
* <div className="container mx-auto relative z-10">
|
|
296
|
+
* {content.heading}
|
|
297
|
+
* </div>
|
|
298
|
+
* </section>
|
|
299
|
+
* );
|
|
300
|
+
* }
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
declare function SectionBackground({ background, theme, className, }: SectionBackgroundProps): React.ReactElement | null;
|
|
304
|
+
|
|
305
|
+
export { type BodyTextContent as B, type GradientConfig as G, type HeroContent as H, type Media as M, RichText as R, SectionBackground as S, type TipTapNode as T, type HeroMedia as a, buildThemeRuntime as b, type RichTextPrimitiveProps as c, resolveBackground as d, type BackgroundInput as e, type ResolvedBackground as f, type SectionBackgroundProps as g, resolveImageUrl as r };
|