@riverbankcms/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1892 -0
- package/dist/cli/index.js +327 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/analytics.d.mts +103 -0
- package/dist/client/analytics.d.ts +103 -0
- package/dist/client/analytics.js +197 -0
- package/dist/client/analytics.js.map +1 -0
- package/dist/client/analytics.mjs +169 -0
- package/dist/client/analytics.mjs.map +1 -0
- package/dist/client/bookings.d.mts +89 -0
- package/dist/client/bookings.d.ts +89 -0
- package/dist/client/bookings.js +34 -0
- package/dist/client/bookings.js.map +1 -0
- package/dist/client/bookings.mjs +11 -0
- package/dist/client/bookings.mjs.map +1 -0
- package/dist/client/client.d.mts +195 -0
- package/dist/client/client.d.ts +195 -0
- package/dist/client/client.js +606 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/client.mjs +572 -0
- package/dist/client/client.mjs.map +1 -0
- package/dist/client/hooks.d.mts +71 -0
- package/dist/client/hooks.d.ts +71 -0
- package/dist/client/hooks.js +264 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/hooks.mjs +235 -0
- package/dist/client/hooks.mjs.map +1 -0
- package/dist/client/rendering/client.d.mts +1 -0
- package/dist/client/rendering/client.d.ts +1 -0
- package/dist/client/rendering/client.js +33 -0
- package/dist/client/rendering/client.js.map +1 -0
- package/dist/client/rendering/client.mjs +8 -0
- package/dist/client/rendering/client.mjs.map +1 -0
- package/dist/client/usePage-BvKAa3Zw.d.mts +366 -0
- package/dist/client/usePage-BvKAa3Zw.d.ts +366 -0
- package/dist/server/chunk-2RW5HAQQ.mjs +86 -0
- package/dist/server/chunk-2RW5HAQQ.mjs.map +1 -0
- package/dist/server/chunk-3KKZVGH4.mjs +179 -0
- package/dist/server/chunk-3KKZVGH4.mjs.map +1 -0
- package/dist/server/chunk-4Z3GPTCS.js +179 -0
- package/dist/server/chunk-4Z3GPTCS.js.map +1 -0
- package/dist/server/chunk-4Z5FBFRL.mjs +211 -0
- package/dist/server/chunk-4Z5FBFRL.mjs.map +1 -0
- package/dist/server/chunk-ADREPXFU.js +86 -0
- package/dist/server/chunk-ADREPXFU.js.map +1 -0
- package/dist/server/chunk-F472SMKX.js +140 -0
- package/dist/server/chunk-F472SMKX.js.map +1 -0
- package/dist/server/chunk-GWBMJPLH.mjs +57 -0
- package/dist/server/chunk-GWBMJPLH.mjs.map +1 -0
- package/dist/server/chunk-JB4LIEFS.js +85 -0
- package/dist/server/chunk-JB4LIEFS.js.map +1 -0
- package/dist/server/chunk-PEAXKTDU.mjs +140 -0
- package/dist/server/chunk-PEAXKTDU.mjs.map +1 -0
- package/dist/server/chunk-QQ6U4QX6.js +120 -0
- package/dist/server/chunk-QQ6U4QX6.js.map +1 -0
- package/dist/server/chunk-R5YGLRUG.mjs +122 -0
- package/dist/server/chunk-R5YGLRUG.mjs.map +1 -0
- package/dist/server/chunk-SW7LE4M3.js +211 -0
- package/dist/server/chunk-SW7LE4M3.js.map +1 -0
- package/dist/server/chunk-W3K7LVPS.mjs +120 -0
- package/dist/server/chunk-W3K7LVPS.mjs.map +1 -0
- package/dist/server/chunk-WKG57P2H.mjs +85 -0
- package/dist/server/chunk-WKG57P2H.mjs.map +1 -0
- package/dist/server/chunk-YHEZMVTS.js +122 -0
- package/dist/server/chunk-YHEZMVTS.js.map +1 -0
- package/dist/server/chunk-YXDDFG3N.js +57 -0
- package/dist/server/chunk-YXDDFG3N.js.map +1 -0
- package/dist/server/components.d.mts +49 -0
- package/dist/server/components.d.ts +49 -0
- package/dist/server/components.js +22 -0
- package/dist/server/components.js.map +1 -0
- package/dist/server/components.mjs +22 -0
- package/dist/server/components.mjs.map +1 -0
- package/dist/server/config-validation.d.mts +300 -0
- package/dist/server/config-validation.d.ts +300 -0
- package/dist/server/config-validation.js +50 -0
- package/dist/server/config-validation.js.map +1 -0
- package/dist/server/config-validation.mjs +50 -0
- package/dist/server/config-validation.mjs.map +1 -0
- package/dist/server/config.d.mts +38 -0
- package/dist/server/config.d.ts +38 -0
- package/dist/server/config.js +44 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/config.mjs +44 -0
- package/dist/server/config.mjs.map +1 -0
- package/dist/server/data.d.mts +108 -0
- package/dist/server/data.d.ts +108 -0
- package/dist/server/data.js +15 -0
- package/dist/server/data.js.map +1 -0
- package/dist/server/data.mjs +15 -0
- package/dist/server/data.mjs.map +1 -0
- package/dist/server/index-B0yI_V6Z.d.mts +18 -0
- package/dist/server/index-C6M0Wfjq.d.ts +18 -0
- package/dist/server/index.d.mts +5 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.js +12 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +12 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/loadContent-CJcbYF3J.d.ts +152 -0
- package/dist/server/loadContent-zhlL4YSE.d.mts +152 -0
- package/dist/server/loadPage-BYmVMk0V.d.ts +216 -0
- package/dist/server/loadPage-CCf15nt8.d.mts +216 -0
- package/dist/server/loadPage-DVH3DW6E.js +9 -0
- package/dist/server/loadPage-DVH3DW6E.js.map +1 -0
- package/dist/server/loadPage-PHQZ6XQZ.mjs +9 -0
- package/dist/server/loadPage-PHQZ6XQZ.mjs.map +1 -0
- package/dist/server/metadata.d.mts +135 -0
- package/dist/server/metadata.d.ts +135 -0
- package/dist/server/metadata.js +68 -0
- package/dist/server/metadata.js.map +1 -0
- package/dist/server/metadata.mjs +68 -0
- package/dist/server/metadata.mjs.map +1 -0
- package/dist/server/rendering/server.d.mts +83 -0
- package/dist/server/rendering/server.d.ts +83 -0
- package/dist/server/rendering/server.js +14 -0
- package/dist/server/rendering/server.js.map +1 -0
- package/dist/server/rendering/server.mjs +14 -0
- package/dist/server/rendering/server.mjs.map +1 -0
- package/dist/server/rendering.d.mts +12 -0
- package/dist/server/rendering.d.ts +12 -0
- package/dist/server/rendering.js +40 -0
- package/dist/server/rendering.js.map +1 -0
- package/dist/server/rendering.mjs +40 -0
- package/dist/server/rendering.mjs.map +1 -0
- package/dist/server/routing.d.mts +115 -0
- package/dist/server/routing.d.ts +115 -0
- package/dist/server/routing.js +57 -0
- package/dist/server/routing.js.map +1 -0
- package/dist/server/routing.mjs +57 -0
- package/dist/server/routing.mjs.map +1 -0
- package/dist/server/server.d.mts +9 -0
- package/dist/server/server.d.ts +9 -0
- package/dist/server/server.js +21 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/server.mjs +21 -0
- package/dist/server/server.mjs.map +1 -0
- package/dist/server/theme-bridge.d.mts +232 -0
- package/dist/server/theme-bridge.d.ts +232 -0
- package/dist/server/theme-bridge.js +231 -0
- package/dist/server/theme-bridge.js.map +1 -0
- package/dist/server/theme-bridge.mjs +231 -0
- package/dist/server/theme-bridge.mjs.map +1 -0
- package/dist/server/theme.d.mts +40 -0
- package/dist/server/theme.d.ts +40 -0
- package/dist/server/theme.js +17 -0
- package/dist/server/theme.js.map +1 -0
- package/dist/server/theme.mjs +17 -0
- package/dist/server/theme.mjs.map +1 -0
- package/dist/server/types-BCeqWtI2.d.mts +333 -0
- package/dist/server/types-BCeqWtI2.d.ts +333 -0
- package/dist/server/types-Bbo01M7P.d.mts +76 -0
- package/dist/server/types-Bbo01M7P.d.ts +76 -0
- package/dist/server/types-C6gmRHLe.d.mts +150 -0
- package/dist/server/types-C6gmRHLe.d.ts +150 -0
- package/package.json +147 -0
- package/src/styles/index.css +10 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// src/routing/resolveRoute.ts
|
|
2
|
+
async function resolveRoute(params) {
|
|
3
|
+
const { client, siteId, path, preview = false } = params;
|
|
4
|
+
try {
|
|
5
|
+
const pageResponse = await client.getPage({
|
|
6
|
+
siteId,
|
|
7
|
+
path,
|
|
8
|
+
preview
|
|
9
|
+
});
|
|
10
|
+
if (pageResponse) {
|
|
11
|
+
const { loadPage } = await import("./loadPage-PHQZ6XQZ.mjs");
|
|
12
|
+
const pageData = await loadPage({
|
|
13
|
+
client,
|
|
14
|
+
siteId,
|
|
15
|
+
path,
|
|
16
|
+
preview
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
type: "page",
|
|
20
|
+
pageData
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
} catch (error) {
|
|
24
|
+
const is404 = error instanceof Error && (error.message.includes("404") || error.message.includes("Not Found") || error.message.includes("not found"));
|
|
25
|
+
if (is404) {
|
|
26
|
+
console.debug("[resolveRoute] Page not found", { path });
|
|
27
|
+
} else {
|
|
28
|
+
console.warn("[resolveRoute] Failed to fetch page", {
|
|
29
|
+
path,
|
|
30
|
+
error: error instanceof Error ? error.message : String(error)
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
type: "not-found"
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async function resolveRoutes(params) {
|
|
39
|
+
const { client, siteId, paths, preview } = params;
|
|
40
|
+
const resolutions = await Promise.all(
|
|
41
|
+
paths.map(async (path) => {
|
|
42
|
+
const resolution = await resolveRoute({
|
|
43
|
+
client,
|
|
44
|
+
siteId,
|
|
45
|
+
path,
|
|
46
|
+
preview
|
|
47
|
+
});
|
|
48
|
+
return { path, resolution };
|
|
49
|
+
})
|
|
50
|
+
);
|
|
51
|
+
return resolutions;
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
resolveRoute,
|
|
55
|
+
resolveRoutes
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=routing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/routing/resolveRoute.ts"],"sourcesContent":["/**\n * Route resolution helper for dynamic page routing\n *\n * Resolves URL paths to pages, entries, redirects, or 404s.\n */\n\nimport type { RiverbankClient } from '../client/types';\nimport type { LoadPageResult } from '../rendering/helpers/loadPage';\n\nexport type RouteResolution =\n | {\n type: 'page';\n pageData: LoadPageResult;\n }\n | {\n type: 'redirect';\n destination: string;\n permanent: boolean;\n }\n | {\n type: 'not-found';\n };\n\nexport type ResolveRouteParams = {\n /**\n * Builder client instance\n */\n client: RiverbankClient;\n\n /**\n * Site ID\n */\n siteId: string;\n\n /**\n * URL path to resolve (e.g., '/about', '/blog/post-1')\n */\n path: string;\n\n /**\n * If true, fetches draft/unpublished content instead of published content.\n * @default false\n */\n preview?: boolean;\n};\n\n/**\n * Resolve a URL path to page data, redirect, or 404\n *\n * This helper attempts to fetch the page at the given path and returns\n * a discriminated union indicating whether the page was found or not.\n *\n * **Note:** Redirect support is not yet implemented. The `redirect` type\n * exists in the return type for future compatibility, but this function\n * currently only returns `page` or `not-found` types.\n *\n * @example\n * ```tsx\n * import { resolveRoute } from '@riverbankcms/sdk/routing';\n * import { notFound, redirect } from 'next/navigation';\n *\n * export default async function DynamicPage({ params }) {\n * const path = `/${params.slug?.join('/') || ''}`;\n * const resolution = await resolveRoute({\n * client,\n * siteId: 'your-site-id',\n * path,\n * });\n *\n * if (resolution.type === 'redirect') {\n * redirect(resolution.destination);\n * }\n *\n * if (resolution.type === 'not-found') {\n * notFound();\n * }\n *\n * // resolution.type === 'page'\n * return <Page {...resolution.pageData} />;\n * }\n * ```\n */\nexport async function resolveRoute(\n params: ResolveRouteParams\n): Promise<RouteResolution> {\n const { client, siteId, path, preview = false } = params;\n\n try {\n // Attempt to fetch page data\n const pageResponse = await client.getPage({\n siteId,\n path,\n preview,\n });\n\n if (pageResponse) {\n // Successfully found page - load full page data\n const { loadPage } = await import('../rendering/helpers/loadPage');\n const pageData = await loadPage({\n client,\n siteId,\n path,\n preview,\n });\n\n return {\n type: 'page',\n pageData,\n };\n }\n } catch (error) {\n // Distinguish between expected 404s and unexpected errors\n const is404 = error instanceof Error &&\n (error.message.includes('404') ||\n error.message.includes('Not Found') ||\n error.message.includes('not found'));\n\n if (is404) {\n console.debug('[resolveRoute] Page not found', { path });\n } else {\n // Unexpected error - log as warning for visibility\n console.warn('[resolveRoute] Failed to fetch page', {\n path,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // No page found - return not-found\n // Note: Redirect support will be added when client.getRedirect() API is available\n return {\n type: 'not-found',\n };\n}\n\n/**\n * Batch resolve multiple routes in parallel\n *\n * Useful for pre-fetching multiple routes or validating a sitemap.\n *\n * @example\n * ```tsx\n * const resolutions = await resolveRoutes({\n * client,\n * siteId: 'your-site-id',\n * paths: ['/', '/about', '/blog', '/contact'],\n * });\n *\n * resolutions.forEach(({ path, resolution }) => {\n * if (resolution.type === 'page') {\n * console.log(`${path} → Page: ${resolution.pageData.page.name}`);\n * } else if (resolution.type === 'redirect') {\n * console.log(`${path} → Redirect to ${resolution.destination}`);\n * } else {\n * console.log(`${path} → Not found`);\n * }\n * });\n * ```\n */\nexport async function resolveRoutes(params: {\n client: RiverbankClient;\n siteId: string;\n paths: string[];\n preview?: boolean;\n}): Promise<Array<{ path: string; resolution: RouteResolution }>> {\n const { client, siteId, paths, preview } = params;\n\n const resolutions = await Promise.all(\n paths.map(async (path) => {\n const resolution = await resolveRoute({\n client,\n siteId,\n path,\n preview,\n });\n\n return { path, resolution };\n })\n );\n\n return resolutions;\n}\n"],"mappings":";AAkFA,eAAsB,aACpB,QAC0B;AAC1B,QAAM,EAAE,QAAQ,QAAQ,MAAM,UAAU,MAAM,IAAI;AAElD,MAAI;AAEF,UAAM,eAAe,MAAM,OAAO,QAAQ;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,cAAc;AAEhB,YAAM,EAAE,SAAS,IAAI,MAAM,OAAO,yBAA+B;AACjE,YAAM,WAAW,MAAM,SAAS;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AAEd,UAAM,QAAQ,iBAAiB,UAC5B,MAAM,QAAQ,SAAS,KAAK,KAC5B,MAAM,QAAQ,SAAS,WAAW,KAClC,MAAM,QAAQ,SAAS,WAAW;AAErC,QAAI,OAAO;AACT,cAAQ,MAAM,iCAAiC,EAAE,KAAK,CAAC;AAAA,IACzD,OAAO;AAEL,cAAQ,KAAK,uCAAuC;AAAA,QAClD;AAAA,QACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AAIA,SAAO;AAAA,IACL,MAAM;AAAA,EACR;AACF;AA0BA,eAAsB,cAAc,QAK8B;AAChE,QAAM,EAAE,QAAQ,QAAQ,OAAO,QAAQ,IAAI;AAE3C,QAAM,cAAc,MAAM,QAAQ;AAAA,IAChC,MAAM,IAAI,OAAO,SAAS;AACxB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,aAAO,EAAE,MAAM,WAAW;AAAA,IAC5B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { c as createRiverbankClient } from './index-B0yI_V6Z.mjs';
|
|
2
|
+
export { E as EntriesResponse, b as EntryResponse, P as PageResponse, R as RiverbankClient, a as RiverbankClientConfig, S as SiteResponse } from './types-C6gmRHLe.mjs';
|
|
3
|
+
export { L as LoadPageParams, a as LoadPageResult, R as RuntimeSdkConfig, l as loadPage } from './loadPage-CCf15nt8.mjs';
|
|
4
|
+
export { C as ContentEntryData, E as EntryContentResult, L as LoadContentParams, b as LoadContentResult, P as PageContentResult, a as isEntryContent, i as isPageContent, l as loadContent } from './loadContent-zhlL4YSE.mjs';
|
|
5
|
+
import '@riverbankcms/api';
|
|
6
|
+
import 'react/jsx-runtime';
|
|
7
|
+
import '@riverbankcms/blocks';
|
|
8
|
+
import '@riverbankcms/blocks/system/data';
|
|
9
|
+
import './types-Bbo01M7P.mjs';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { c as createRiverbankClient } from './index-C6M0Wfjq.js';
|
|
2
|
+
export { E as EntriesResponse, b as EntryResponse, P as PageResponse, R as RiverbankClient, a as RiverbankClientConfig, S as SiteResponse } from './types-C6gmRHLe.js';
|
|
3
|
+
export { L as LoadPageParams, a as LoadPageResult, R as RuntimeSdkConfig, l as loadPage } from './loadPage-BYmVMk0V.js';
|
|
4
|
+
export { C as ContentEntryData, E as EntryContentResult, L as LoadContentParams, b as LoadContentResult, P as PageContentResult, a as isEntryContent, i as isPageContent, l as loadContent } from './loadContent-CJcbYF3J.js';
|
|
5
|
+
import '@riverbankcms/api';
|
|
6
|
+
import 'react/jsx-runtime';
|
|
7
|
+
import '@riverbankcms/blocks';
|
|
8
|
+
import '@riverbankcms/blocks/system/data';
|
|
9
|
+
import './types-Bbo01M7P.js';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunk4Z3GPTCSjs = require('./chunk-4Z3GPTCS.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkF472SMKXjs = require('./chunk-F472SMKX.js');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkADREPXFUjs = require('./chunk-ADREPXFU.js');
|
|
12
|
+
require('./chunk-YXDDFG3N.js');
|
|
13
|
+
require('./chunk-QQ6U4QX6.js');
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
exports.createRiverbankClient = _chunk4Z3GPTCSjs.createRiverbankClient; exports.isEntryContent = _chunkF472SMKXjs.isEntryContent; exports.isPageContent = _chunkF472SMKXjs.isPageContent; exports.loadContent = _chunkF472SMKXjs.loadContent; exports.loadPage = _chunkADREPXFUjs.loadPage;
|
|
21
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/server.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACF,2RAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/server.js"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createRiverbankClient
|
|
3
|
+
} from "./chunk-3KKZVGH4.mjs";
|
|
4
|
+
import {
|
|
5
|
+
isEntryContent,
|
|
6
|
+
isPageContent,
|
|
7
|
+
loadContent
|
|
8
|
+
} from "./chunk-PEAXKTDU.mjs";
|
|
9
|
+
import {
|
|
10
|
+
loadPage
|
|
11
|
+
} from "./chunk-2RW5HAQQ.mjs";
|
|
12
|
+
import "./chunk-GWBMJPLH.mjs";
|
|
13
|
+
import "./chunk-W3K7LVPS.mjs";
|
|
14
|
+
export {
|
|
15
|
+
createRiverbankClient,
|
|
16
|
+
isEntryContent,
|
|
17
|
+
isPageContent,
|
|
18
|
+
loadContent,
|
|
19
|
+
loadPage
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Theme Bridge Types
|
|
6
|
+
*
|
|
7
|
+
* Simplified theme configuration for SDK sites that want to style blocks
|
|
8
|
+
* without using the full CMS theme system.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Corner radius presets.
|
|
12
|
+
*/
|
|
13
|
+
type ThemeBridgeCorners = 'square' | 'soft' | 'rounded' | 'pill';
|
|
14
|
+
/**
|
|
15
|
+
* Shadow intensity presets.
|
|
16
|
+
*/
|
|
17
|
+
type ThemeBridgeShadows = 'none' | 'low' | 'medium' | 'high';
|
|
18
|
+
/**
|
|
19
|
+
* Spacing density presets.
|
|
20
|
+
*/
|
|
21
|
+
type ThemeBridgeSpacing = 'comfortable' | 'standard' | 'dense';
|
|
22
|
+
/**
|
|
23
|
+
* Typography configuration.
|
|
24
|
+
*/
|
|
25
|
+
interface ThemeBridgeTypography {
|
|
26
|
+
/** Font family for headings (defaults to system font stack) */
|
|
27
|
+
headingFamily?: string;
|
|
28
|
+
/** Font family for body text (defaults to system font stack) */
|
|
29
|
+
bodyFamily?: string;
|
|
30
|
+
/** Heading font weight (defaults to 600) */
|
|
31
|
+
headingWeight?: number;
|
|
32
|
+
/** Body font weight (defaults to 400) */
|
|
33
|
+
bodyWeight?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Button component configuration for opt-in CSS generation.
|
|
37
|
+
*/
|
|
38
|
+
interface ThemeBridgeButtonConfig {
|
|
39
|
+
/**
|
|
40
|
+
* Which button variants to generate.
|
|
41
|
+
* @default ['primary', 'secondary', 'outline', 'ghost']
|
|
42
|
+
*/
|
|
43
|
+
variants?: Array<'primary' | 'secondary' | 'outline' | 'ghost'>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Card component configuration for opt-in CSS generation.
|
|
47
|
+
*/
|
|
48
|
+
interface ThemeBridgeCardConfig {
|
|
49
|
+
/**
|
|
50
|
+
* Which card variants to generate.
|
|
51
|
+
* @default ['default']
|
|
52
|
+
*/
|
|
53
|
+
variants?: Array<'default' | 'elevated' | 'outlined'>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Component CSS generation options.
|
|
57
|
+
* Set to `true` to use defaults, or provide config for customization.
|
|
58
|
+
*/
|
|
59
|
+
interface ThemeBridgeComponents {
|
|
60
|
+
/** Generate button CSS (.button-primary, .button-secondary, etc.) */
|
|
61
|
+
buttons?: boolean | ThemeBridgeButtonConfig;
|
|
62
|
+
/** Generate card CSS (.card-default, etc.) */
|
|
63
|
+
cards?: boolean | ThemeBridgeCardConfig;
|
|
64
|
+
/** Generate input CSS (.form-input, .form-label, etc.) */
|
|
65
|
+
inputs?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Complete theme bridge configuration.
|
|
69
|
+
*
|
|
70
|
+
* @example Simple usage with tokens only
|
|
71
|
+
* ```tsx
|
|
72
|
+
* <ThemeBridgeProvider
|
|
73
|
+
* config={{
|
|
74
|
+
* tokens: {
|
|
75
|
+
* primary: '#6d28d9',
|
|
76
|
+
* secondary: '#4c1d95',
|
|
77
|
+
* background: '#ffffff',
|
|
78
|
+
* text: '#1e293b',
|
|
79
|
+
* },
|
|
80
|
+
* }}
|
|
81
|
+
* >
|
|
82
|
+
* {children}
|
|
83
|
+
* </ThemeBridgeProvider>
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @example With component CSS
|
|
87
|
+
* ```tsx
|
|
88
|
+
* <ThemeBridgeProvider
|
|
89
|
+
* config={{
|
|
90
|
+
* tokens: {
|
|
91
|
+
* primary: '#6d28d9',
|
|
92
|
+
* secondary: '#4c1d95',
|
|
93
|
+
* white: '#ffffff',
|
|
94
|
+
* surface: '#f8fafc',
|
|
95
|
+
* text: '#1e293b',
|
|
96
|
+
* border: '#e2e8f0',
|
|
97
|
+
* },
|
|
98
|
+
* corners: 'rounded',
|
|
99
|
+
* components: {
|
|
100
|
+
* buttons: true,
|
|
101
|
+
* cards: true,
|
|
102
|
+
* inputs: true,
|
|
103
|
+
* },
|
|
104
|
+
* }}
|
|
105
|
+
* >
|
|
106
|
+
* {children}
|
|
107
|
+
* </ThemeBridgeProvider>
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @example Pass-through to existing design system
|
|
111
|
+
* ```tsx
|
|
112
|
+
* <ThemeBridgeProvider
|
|
113
|
+
* config={{
|
|
114
|
+
* tokens: {
|
|
115
|
+
* primary: 'var(--brand-purple)',
|
|
116
|
+
* secondary: 'var(--brand-navy)',
|
|
117
|
+
* background: 'var(--ds-bg)',
|
|
118
|
+
* },
|
|
119
|
+
* components: { buttons: true },
|
|
120
|
+
* }}
|
|
121
|
+
* >
|
|
122
|
+
* {children}
|
|
123
|
+
* </ThemeBridgeProvider>
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
interface ThemeBridgeConfig {
|
|
127
|
+
/**
|
|
128
|
+
* Color tokens as key-value pairs.
|
|
129
|
+
*
|
|
130
|
+
* Keys become CSS variable names: `--color-{key}`
|
|
131
|
+
*
|
|
132
|
+
* Values can be:
|
|
133
|
+
* - Hex colors: `'#6d28d9'` (converted to RGB: `109 40 217`)
|
|
134
|
+
* - CSS variable refs: `'var(--brand-purple)'` (passed through)
|
|
135
|
+
* - RGB values: `'109 40 217'` (used directly)
|
|
136
|
+
*
|
|
137
|
+
* Common token names used by blocks:
|
|
138
|
+
* - `primary`, `secondary` - Brand colors
|
|
139
|
+
* - `background`, `surface` - Background colors
|
|
140
|
+
* - `text`, `mutedText` - Text colors
|
|
141
|
+
* - `border` - Border color
|
|
142
|
+
* - `white` - For button text on dark backgrounds
|
|
143
|
+
* - `success`, `warning`, `danger`, `info` - Status colors
|
|
144
|
+
*/
|
|
145
|
+
tokens: Record<string, string>;
|
|
146
|
+
/** Typography settings */
|
|
147
|
+
typography?: ThemeBridgeTypography;
|
|
148
|
+
/** Spacing density (defaults to 'standard') */
|
|
149
|
+
spacing?: ThemeBridgeSpacing;
|
|
150
|
+
/** Corner radius preset (defaults to 'rounded') */
|
|
151
|
+
corners?: ThemeBridgeCorners;
|
|
152
|
+
/** Shadow intensity (defaults to 'medium') */
|
|
153
|
+
shadows?: ThemeBridgeShadows;
|
|
154
|
+
/**
|
|
155
|
+
* Opt-in component CSS generation.
|
|
156
|
+
*
|
|
157
|
+
* By default, only CSS variables are generated.
|
|
158
|
+
* Enable components to generate `.button-*`, `.card-*`, `.form-*` classes.
|
|
159
|
+
*/
|
|
160
|
+
components?: ThemeBridgeComponents;
|
|
161
|
+
/**
|
|
162
|
+
* CSS overrides for component classes.
|
|
163
|
+
*
|
|
164
|
+
* Keys are CSS selectors (relative to the theme scope),
|
|
165
|
+
* values are CSS declaration blocks.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```tsx
|
|
169
|
+
* overrides: {
|
|
170
|
+
* '.button-primary': 'border-radius: 9999px; font-weight: 700;',
|
|
171
|
+
* '.button-primary:hover': 'transform: translateY(-2px);',
|
|
172
|
+
* }
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
overrides?: Record<string, string>;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Generated CSS output from theme bridge.
|
|
179
|
+
*/
|
|
180
|
+
interface ThemeBridgeOutput {
|
|
181
|
+
/** CSS variables as inline style object */
|
|
182
|
+
cssVars: Record<string, string>;
|
|
183
|
+
/** Complete CSS string for injection */
|
|
184
|
+
css: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
interface ThemeBridgeProviderProps {
|
|
188
|
+
/** Theme configuration */
|
|
189
|
+
config: ThemeBridgeConfig;
|
|
190
|
+
/** Child elements to wrap */
|
|
191
|
+
children: React.ReactNode;
|
|
192
|
+
/** Additional class name for the wrapper */
|
|
193
|
+
className?: string;
|
|
194
|
+
/** HTML element to use for wrapper (defaults to 'div') */
|
|
195
|
+
as?: keyof React.JSX.IntrinsicElements;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Wraps content and injects CSS variables for Builder block styling.
|
|
199
|
+
*
|
|
200
|
+
* This component generates CSS variables from a simplified theme config
|
|
201
|
+
* and injects them into a wrapper element. All Builder blocks rendered
|
|
202
|
+
* inside will pick up these variables for colors, typography, spacing, etc.
|
|
203
|
+
*
|
|
204
|
+
* Optionally generates component CSS for buttons, cards, and inputs when
|
|
205
|
+
* `config.components` is specified.
|
|
206
|
+
*/
|
|
207
|
+
declare function ThemeBridgeProvider({ config, children, className, as: Tag, }: ThemeBridgeProviderProps): react_jsx_runtime.JSX.Element;
|
|
208
|
+
/**
|
|
209
|
+
* Hook to access generated CSS variables from theme config.
|
|
210
|
+
* Useful for custom components that need theme values.
|
|
211
|
+
*/
|
|
212
|
+
declare function useThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* CSS Variable Generator for Theme Bridge
|
|
216
|
+
*
|
|
217
|
+
* Generates the CSS variables that Builder blocks expect,
|
|
218
|
+
* from a simplified ThemeBridgeConfig.
|
|
219
|
+
*
|
|
220
|
+
* Key differences from the full CMS theme system:
|
|
221
|
+
* - No shade generation (SDK sites define their own tokens)
|
|
222
|
+
* - Supports arbitrary token names
|
|
223
|
+
* - Supports pass-through of CSS variable references
|
|
224
|
+
* - Opt-in component CSS generation using core generators from @riverbankcms/blocks
|
|
225
|
+
*/
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Generate CSS variables from a ThemeBridgeConfig.
|
|
229
|
+
*/
|
|
230
|
+
declare function generateThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput;
|
|
231
|
+
|
|
232
|
+
export { type ThemeBridgeButtonConfig, type ThemeBridgeCardConfig, type ThemeBridgeComponents, type ThemeBridgeConfig, type ThemeBridgeCorners, type ThemeBridgeOutput, ThemeBridgeProvider, type ThemeBridgeProviderProps, type ThemeBridgeShadows, type ThemeBridgeSpacing, type ThemeBridgeTypography, generateThemeBridgeCss, useThemeBridgeCss };
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Theme Bridge Types
|
|
6
|
+
*
|
|
7
|
+
* Simplified theme configuration for SDK sites that want to style blocks
|
|
8
|
+
* without using the full CMS theme system.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Corner radius presets.
|
|
12
|
+
*/
|
|
13
|
+
type ThemeBridgeCorners = 'square' | 'soft' | 'rounded' | 'pill';
|
|
14
|
+
/**
|
|
15
|
+
* Shadow intensity presets.
|
|
16
|
+
*/
|
|
17
|
+
type ThemeBridgeShadows = 'none' | 'low' | 'medium' | 'high';
|
|
18
|
+
/**
|
|
19
|
+
* Spacing density presets.
|
|
20
|
+
*/
|
|
21
|
+
type ThemeBridgeSpacing = 'comfortable' | 'standard' | 'dense';
|
|
22
|
+
/**
|
|
23
|
+
* Typography configuration.
|
|
24
|
+
*/
|
|
25
|
+
interface ThemeBridgeTypography {
|
|
26
|
+
/** Font family for headings (defaults to system font stack) */
|
|
27
|
+
headingFamily?: string;
|
|
28
|
+
/** Font family for body text (defaults to system font stack) */
|
|
29
|
+
bodyFamily?: string;
|
|
30
|
+
/** Heading font weight (defaults to 600) */
|
|
31
|
+
headingWeight?: number;
|
|
32
|
+
/** Body font weight (defaults to 400) */
|
|
33
|
+
bodyWeight?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Button component configuration for opt-in CSS generation.
|
|
37
|
+
*/
|
|
38
|
+
interface ThemeBridgeButtonConfig {
|
|
39
|
+
/**
|
|
40
|
+
* Which button variants to generate.
|
|
41
|
+
* @default ['primary', 'secondary', 'outline', 'ghost']
|
|
42
|
+
*/
|
|
43
|
+
variants?: Array<'primary' | 'secondary' | 'outline' | 'ghost'>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Card component configuration for opt-in CSS generation.
|
|
47
|
+
*/
|
|
48
|
+
interface ThemeBridgeCardConfig {
|
|
49
|
+
/**
|
|
50
|
+
* Which card variants to generate.
|
|
51
|
+
* @default ['default']
|
|
52
|
+
*/
|
|
53
|
+
variants?: Array<'default' | 'elevated' | 'outlined'>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Component CSS generation options.
|
|
57
|
+
* Set to `true` to use defaults, or provide config for customization.
|
|
58
|
+
*/
|
|
59
|
+
interface ThemeBridgeComponents {
|
|
60
|
+
/** Generate button CSS (.button-primary, .button-secondary, etc.) */
|
|
61
|
+
buttons?: boolean | ThemeBridgeButtonConfig;
|
|
62
|
+
/** Generate card CSS (.card-default, etc.) */
|
|
63
|
+
cards?: boolean | ThemeBridgeCardConfig;
|
|
64
|
+
/** Generate input CSS (.form-input, .form-label, etc.) */
|
|
65
|
+
inputs?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Complete theme bridge configuration.
|
|
69
|
+
*
|
|
70
|
+
* @example Simple usage with tokens only
|
|
71
|
+
* ```tsx
|
|
72
|
+
* <ThemeBridgeProvider
|
|
73
|
+
* config={{
|
|
74
|
+
* tokens: {
|
|
75
|
+
* primary: '#6d28d9',
|
|
76
|
+
* secondary: '#4c1d95',
|
|
77
|
+
* background: '#ffffff',
|
|
78
|
+
* text: '#1e293b',
|
|
79
|
+
* },
|
|
80
|
+
* }}
|
|
81
|
+
* >
|
|
82
|
+
* {children}
|
|
83
|
+
* </ThemeBridgeProvider>
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @example With component CSS
|
|
87
|
+
* ```tsx
|
|
88
|
+
* <ThemeBridgeProvider
|
|
89
|
+
* config={{
|
|
90
|
+
* tokens: {
|
|
91
|
+
* primary: '#6d28d9',
|
|
92
|
+
* secondary: '#4c1d95',
|
|
93
|
+
* white: '#ffffff',
|
|
94
|
+
* surface: '#f8fafc',
|
|
95
|
+
* text: '#1e293b',
|
|
96
|
+
* border: '#e2e8f0',
|
|
97
|
+
* },
|
|
98
|
+
* corners: 'rounded',
|
|
99
|
+
* components: {
|
|
100
|
+
* buttons: true,
|
|
101
|
+
* cards: true,
|
|
102
|
+
* inputs: true,
|
|
103
|
+
* },
|
|
104
|
+
* }}
|
|
105
|
+
* >
|
|
106
|
+
* {children}
|
|
107
|
+
* </ThemeBridgeProvider>
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @example Pass-through to existing design system
|
|
111
|
+
* ```tsx
|
|
112
|
+
* <ThemeBridgeProvider
|
|
113
|
+
* config={{
|
|
114
|
+
* tokens: {
|
|
115
|
+
* primary: 'var(--brand-purple)',
|
|
116
|
+
* secondary: 'var(--brand-navy)',
|
|
117
|
+
* background: 'var(--ds-bg)',
|
|
118
|
+
* },
|
|
119
|
+
* components: { buttons: true },
|
|
120
|
+
* }}
|
|
121
|
+
* >
|
|
122
|
+
* {children}
|
|
123
|
+
* </ThemeBridgeProvider>
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
interface ThemeBridgeConfig {
|
|
127
|
+
/**
|
|
128
|
+
* Color tokens as key-value pairs.
|
|
129
|
+
*
|
|
130
|
+
* Keys become CSS variable names: `--color-{key}`
|
|
131
|
+
*
|
|
132
|
+
* Values can be:
|
|
133
|
+
* - Hex colors: `'#6d28d9'` (converted to RGB: `109 40 217`)
|
|
134
|
+
* - CSS variable refs: `'var(--brand-purple)'` (passed through)
|
|
135
|
+
* - RGB values: `'109 40 217'` (used directly)
|
|
136
|
+
*
|
|
137
|
+
* Common token names used by blocks:
|
|
138
|
+
* - `primary`, `secondary` - Brand colors
|
|
139
|
+
* - `background`, `surface` - Background colors
|
|
140
|
+
* - `text`, `mutedText` - Text colors
|
|
141
|
+
* - `border` - Border color
|
|
142
|
+
* - `white` - For button text on dark backgrounds
|
|
143
|
+
* - `success`, `warning`, `danger`, `info` - Status colors
|
|
144
|
+
*/
|
|
145
|
+
tokens: Record<string, string>;
|
|
146
|
+
/** Typography settings */
|
|
147
|
+
typography?: ThemeBridgeTypography;
|
|
148
|
+
/** Spacing density (defaults to 'standard') */
|
|
149
|
+
spacing?: ThemeBridgeSpacing;
|
|
150
|
+
/** Corner radius preset (defaults to 'rounded') */
|
|
151
|
+
corners?: ThemeBridgeCorners;
|
|
152
|
+
/** Shadow intensity (defaults to 'medium') */
|
|
153
|
+
shadows?: ThemeBridgeShadows;
|
|
154
|
+
/**
|
|
155
|
+
* Opt-in component CSS generation.
|
|
156
|
+
*
|
|
157
|
+
* By default, only CSS variables are generated.
|
|
158
|
+
* Enable components to generate `.button-*`, `.card-*`, `.form-*` classes.
|
|
159
|
+
*/
|
|
160
|
+
components?: ThemeBridgeComponents;
|
|
161
|
+
/**
|
|
162
|
+
* CSS overrides for component classes.
|
|
163
|
+
*
|
|
164
|
+
* Keys are CSS selectors (relative to the theme scope),
|
|
165
|
+
* values are CSS declaration blocks.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```tsx
|
|
169
|
+
* overrides: {
|
|
170
|
+
* '.button-primary': 'border-radius: 9999px; font-weight: 700;',
|
|
171
|
+
* '.button-primary:hover': 'transform: translateY(-2px);',
|
|
172
|
+
* }
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
overrides?: Record<string, string>;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Generated CSS output from theme bridge.
|
|
179
|
+
*/
|
|
180
|
+
interface ThemeBridgeOutput {
|
|
181
|
+
/** CSS variables as inline style object */
|
|
182
|
+
cssVars: Record<string, string>;
|
|
183
|
+
/** Complete CSS string for injection */
|
|
184
|
+
css: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
interface ThemeBridgeProviderProps {
|
|
188
|
+
/** Theme configuration */
|
|
189
|
+
config: ThemeBridgeConfig;
|
|
190
|
+
/** Child elements to wrap */
|
|
191
|
+
children: React.ReactNode;
|
|
192
|
+
/** Additional class name for the wrapper */
|
|
193
|
+
className?: string;
|
|
194
|
+
/** HTML element to use for wrapper (defaults to 'div') */
|
|
195
|
+
as?: keyof React.JSX.IntrinsicElements;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Wraps content and injects CSS variables for Builder block styling.
|
|
199
|
+
*
|
|
200
|
+
* This component generates CSS variables from a simplified theme config
|
|
201
|
+
* and injects them into a wrapper element. All Builder blocks rendered
|
|
202
|
+
* inside will pick up these variables for colors, typography, spacing, etc.
|
|
203
|
+
*
|
|
204
|
+
* Optionally generates component CSS for buttons, cards, and inputs when
|
|
205
|
+
* `config.components` is specified.
|
|
206
|
+
*/
|
|
207
|
+
declare function ThemeBridgeProvider({ config, children, className, as: Tag, }: ThemeBridgeProviderProps): react_jsx_runtime.JSX.Element;
|
|
208
|
+
/**
|
|
209
|
+
* Hook to access generated CSS variables from theme config.
|
|
210
|
+
* Useful for custom components that need theme values.
|
|
211
|
+
*/
|
|
212
|
+
declare function useThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* CSS Variable Generator for Theme Bridge
|
|
216
|
+
*
|
|
217
|
+
* Generates the CSS variables that Builder blocks expect,
|
|
218
|
+
* from a simplified ThemeBridgeConfig.
|
|
219
|
+
*
|
|
220
|
+
* Key differences from the full CMS theme system:
|
|
221
|
+
* - No shade generation (SDK sites define their own tokens)
|
|
222
|
+
* - Supports arbitrary token names
|
|
223
|
+
* - Supports pass-through of CSS variable references
|
|
224
|
+
* - Opt-in component CSS generation using core generators from @riverbankcms/blocks
|
|
225
|
+
*/
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Generate CSS variables from a ThemeBridgeConfig.
|
|
229
|
+
*/
|
|
230
|
+
declare function generateThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput;
|
|
231
|
+
|
|
232
|
+
export { type ThemeBridgeButtonConfig, type ThemeBridgeCardConfig, type ThemeBridgeComponents, type ThemeBridgeConfig, type ThemeBridgeCorners, type ThemeBridgeOutput, ThemeBridgeProvider, type ThemeBridgeProviderProps, type ThemeBridgeShadows, type ThemeBridgeSpacing, type ThemeBridgeTypography, generateThemeBridgeCss, useThemeBridgeCss };
|