@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.
Files changed (157) hide show
  1. package/README.md +1892 -0
  2. package/dist/cli/index.js +327 -0
  3. package/dist/cli/index.js.map +1 -0
  4. package/dist/client/analytics.d.mts +103 -0
  5. package/dist/client/analytics.d.ts +103 -0
  6. package/dist/client/analytics.js +197 -0
  7. package/dist/client/analytics.js.map +1 -0
  8. package/dist/client/analytics.mjs +169 -0
  9. package/dist/client/analytics.mjs.map +1 -0
  10. package/dist/client/bookings.d.mts +89 -0
  11. package/dist/client/bookings.d.ts +89 -0
  12. package/dist/client/bookings.js +34 -0
  13. package/dist/client/bookings.js.map +1 -0
  14. package/dist/client/bookings.mjs +11 -0
  15. package/dist/client/bookings.mjs.map +1 -0
  16. package/dist/client/client.d.mts +195 -0
  17. package/dist/client/client.d.ts +195 -0
  18. package/dist/client/client.js +606 -0
  19. package/dist/client/client.js.map +1 -0
  20. package/dist/client/client.mjs +572 -0
  21. package/dist/client/client.mjs.map +1 -0
  22. package/dist/client/hooks.d.mts +71 -0
  23. package/dist/client/hooks.d.ts +71 -0
  24. package/dist/client/hooks.js +264 -0
  25. package/dist/client/hooks.js.map +1 -0
  26. package/dist/client/hooks.mjs +235 -0
  27. package/dist/client/hooks.mjs.map +1 -0
  28. package/dist/client/rendering/client.d.mts +1 -0
  29. package/dist/client/rendering/client.d.ts +1 -0
  30. package/dist/client/rendering/client.js +33 -0
  31. package/dist/client/rendering/client.js.map +1 -0
  32. package/dist/client/rendering/client.mjs +8 -0
  33. package/dist/client/rendering/client.mjs.map +1 -0
  34. package/dist/client/usePage-BvKAa3Zw.d.mts +366 -0
  35. package/dist/client/usePage-BvKAa3Zw.d.ts +366 -0
  36. package/dist/server/chunk-2RW5HAQQ.mjs +86 -0
  37. package/dist/server/chunk-2RW5HAQQ.mjs.map +1 -0
  38. package/dist/server/chunk-3KKZVGH4.mjs +179 -0
  39. package/dist/server/chunk-3KKZVGH4.mjs.map +1 -0
  40. package/dist/server/chunk-4Z3GPTCS.js +179 -0
  41. package/dist/server/chunk-4Z3GPTCS.js.map +1 -0
  42. package/dist/server/chunk-4Z5FBFRL.mjs +211 -0
  43. package/dist/server/chunk-4Z5FBFRL.mjs.map +1 -0
  44. package/dist/server/chunk-ADREPXFU.js +86 -0
  45. package/dist/server/chunk-ADREPXFU.js.map +1 -0
  46. package/dist/server/chunk-F472SMKX.js +140 -0
  47. package/dist/server/chunk-F472SMKX.js.map +1 -0
  48. package/dist/server/chunk-GWBMJPLH.mjs +57 -0
  49. package/dist/server/chunk-GWBMJPLH.mjs.map +1 -0
  50. package/dist/server/chunk-JB4LIEFS.js +85 -0
  51. package/dist/server/chunk-JB4LIEFS.js.map +1 -0
  52. package/dist/server/chunk-PEAXKTDU.mjs +140 -0
  53. package/dist/server/chunk-PEAXKTDU.mjs.map +1 -0
  54. package/dist/server/chunk-QQ6U4QX6.js +120 -0
  55. package/dist/server/chunk-QQ6U4QX6.js.map +1 -0
  56. package/dist/server/chunk-R5YGLRUG.mjs +122 -0
  57. package/dist/server/chunk-R5YGLRUG.mjs.map +1 -0
  58. package/dist/server/chunk-SW7LE4M3.js +211 -0
  59. package/dist/server/chunk-SW7LE4M3.js.map +1 -0
  60. package/dist/server/chunk-W3K7LVPS.mjs +120 -0
  61. package/dist/server/chunk-W3K7LVPS.mjs.map +1 -0
  62. package/dist/server/chunk-WKG57P2H.mjs +85 -0
  63. package/dist/server/chunk-WKG57P2H.mjs.map +1 -0
  64. package/dist/server/chunk-YHEZMVTS.js +122 -0
  65. package/dist/server/chunk-YHEZMVTS.js.map +1 -0
  66. package/dist/server/chunk-YXDDFG3N.js +57 -0
  67. package/dist/server/chunk-YXDDFG3N.js.map +1 -0
  68. package/dist/server/components.d.mts +49 -0
  69. package/dist/server/components.d.ts +49 -0
  70. package/dist/server/components.js +22 -0
  71. package/dist/server/components.js.map +1 -0
  72. package/dist/server/components.mjs +22 -0
  73. package/dist/server/components.mjs.map +1 -0
  74. package/dist/server/config-validation.d.mts +300 -0
  75. package/dist/server/config-validation.d.ts +300 -0
  76. package/dist/server/config-validation.js +50 -0
  77. package/dist/server/config-validation.js.map +1 -0
  78. package/dist/server/config-validation.mjs +50 -0
  79. package/dist/server/config-validation.mjs.map +1 -0
  80. package/dist/server/config.d.mts +38 -0
  81. package/dist/server/config.d.ts +38 -0
  82. package/dist/server/config.js +44 -0
  83. package/dist/server/config.js.map +1 -0
  84. package/dist/server/config.mjs +44 -0
  85. package/dist/server/config.mjs.map +1 -0
  86. package/dist/server/data.d.mts +108 -0
  87. package/dist/server/data.d.ts +108 -0
  88. package/dist/server/data.js +15 -0
  89. package/dist/server/data.js.map +1 -0
  90. package/dist/server/data.mjs +15 -0
  91. package/dist/server/data.mjs.map +1 -0
  92. package/dist/server/index-B0yI_V6Z.d.mts +18 -0
  93. package/dist/server/index-C6M0Wfjq.d.ts +18 -0
  94. package/dist/server/index.d.mts +5 -0
  95. package/dist/server/index.d.ts +5 -0
  96. package/dist/server/index.js +12 -0
  97. package/dist/server/index.js.map +1 -0
  98. package/dist/server/index.mjs +12 -0
  99. package/dist/server/index.mjs.map +1 -0
  100. package/dist/server/loadContent-CJcbYF3J.d.ts +152 -0
  101. package/dist/server/loadContent-zhlL4YSE.d.mts +152 -0
  102. package/dist/server/loadPage-BYmVMk0V.d.ts +216 -0
  103. package/dist/server/loadPage-CCf15nt8.d.mts +216 -0
  104. package/dist/server/loadPage-DVH3DW6E.js +9 -0
  105. package/dist/server/loadPage-DVH3DW6E.js.map +1 -0
  106. package/dist/server/loadPage-PHQZ6XQZ.mjs +9 -0
  107. package/dist/server/loadPage-PHQZ6XQZ.mjs.map +1 -0
  108. package/dist/server/metadata.d.mts +135 -0
  109. package/dist/server/metadata.d.ts +135 -0
  110. package/dist/server/metadata.js +68 -0
  111. package/dist/server/metadata.js.map +1 -0
  112. package/dist/server/metadata.mjs +68 -0
  113. package/dist/server/metadata.mjs.map +1 -0
  114. package/dist/server/rendering/server.d.mts +83 -0
  115. package/dist/server/rendering/server.d.ts +83 -0
  116. package/dist/server/rendering/server.js +14 -0
  117. package/dist/server/rendering/server.js.map +1 -0
  118. package/dist/server/rendering/server.mjs +14 -0
  119. package/dist/server/rendering/server.mjs.map +1 -0
  120. package/dist/server/rendering.d.mts +12 -0
  121. package/dist/server/rendering.d.ts +12 -0
  122. package/dist/server/rendering.js +40 -0
  123. package/dist/server/rendering.js.map +1 -0
  124. package/dist/server/rendering.mjs +40 -0
  125. package/dist/server/rendering.mjs.map +1 -0
  126. package/dist/server/routing.d.mts +115 -0
  127. package/dist/server/routing.d.ts +115 -0
  128. package/dist/server/routing.js +57 -0
  129. package/dist/server/routing.js.map +1 -0
  130. package/dist/server/routing.mjs +57 -0
  131. package/dist/server/routing.mjs.map +1 -0
  132. package/dist/server/server.d.mts +9 -0
  133. package/dist/server/server.d.ts +9 -0
  134. package/dist/server/server.js +21 -0
  135. package/dist/server/server.js.map +1 -0
  136. package/dist/server/server.mjs +21 -0
  137. package/dist/server/server.mjs.map +1 -0
  138. package/dist/server/theme-bridge.d.mts +232 -0
  139. package/dist/server/theme-bridge.d.ts +232 -0
  140. package/dist/server/theme-bridge.js +231 -0
  141. package/dist/server/theme-bridge.js.map +1 -0
  142. package/dist/server/theme-bridge.mjs +231 -0
  143. package/dist/server/theme-bridge.mjs.map +1 -0
  144. package/dist/server/theme.d.mts +40 -0
  145. package/dist/server/theme.d.ts +40 -0
  146. package/dist/server/theme.js +17 -0
  147. package/dist/server/theme.js.map +1 -0
  148. package/dist/server/theme.mjs +17 -0
  149. package/dist/server/theme.mjs.map +1 -0
  150. package/dist/server/types-BCeqWtI2.d.mts +333 -0
  151. package/dist/server/types-BCeqWtI2.d.ts +333 -0
  152. package/dist/server/types-Bbo01M7P.d.mts +76 -0
  153. package/dist/server/types-Bbo01M7P.d.ts +76 -0
  154. package/dist/server/types-C6gmRHLe.d.mts +150 -0
  155. package/dist/server/types-C6gmRHLe.d.ts +150 -0
  156. package/package.json +147 -0
  157. 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 };