@riverbankcms/sdk 0.1.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.
Files changed (176) hide show
  1. package/dist/cli/index.js +4840 -9
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/client/bookings.d.mts +82 -2
  4. package/dist/client/bookings.d.ts +82 -2
  5. package/dist/client/bookings.js +1623 -3
  6. package/dist/client/bookings.js.map +1 -1
  7. package/dist/client/bookings.mjs +1610 -5
  8. package/dist/client/bookings.mjs.map +1 -1
  9. package/dist/client/client.d.mts +8 -5
  10. package/dist/client/client.d.ts +8 -5
  11. package/dist/client/client.js +16856 -322
  12. package/dist/client/client.js.map +1 -1
  13. package/dist/client/client.mjs +16838 -307
  14. package/dist/client/client.mjs.map +1 -1
  15. package/dist/client/hooks.d.mts +10 -7
  16. package/dist/client/hooks.d.ts +10 -7
  17. package/dist/client/hooks.js +5074 -4
  18. package/dist/client/hooks.js.map +1 -1
  19. package/dist/client/hooks.mjs +5074 -4
  20. package/dist/client/hooks.mjs.map +1 -1
  21. package/dist/client/rendering/client.d.mts +7 -1
  22. package/dist/client/rendering/client.d.ts +7 -1
  23. package/dist/client/rendering/client.js +17388 -2
  24. package/dist/client/rendering/client.js.map +1 -1
  25. package/dist/client/rendering/client.mjs +17382 -2
  26. package/dist/client/rendering/client.mjs.map +1 -1
  27. package/dist/client/resolver-BhueZVxZ.d.mts +61 -0
  28. package/dist/client/resolver-BhueZVxZ.d.ts +61 -0
  29. package/dist/client/usePage-BBcFCxOU.d.ts +6297 -0
  30. package/dist/client/usePage-BydHcMYB.d.mts +6297 -0
  31. package/dist/server/Layout-CLg8oH_S.d.ts +44 -0
  32. package/dist/server/Layout-DK_9OOgb.d.mts +44 -0
  33. package/dist/server/chunk-3J46ILMJ.mjs +2111 -0
  34. package/dist/server/chunk-3J46ILMJ.mjs.map +1 -0
  35. package/dist/server/{chunk-JB4LIEFS.js → chunk-5R4NMVXA.js} +15 -8
  36. package/dist/server/chunk-5R4NMVXA.js.map +1 -0
  37. package/dist/server/{chunk-ADREPXFU.js → chunk-62ZJI564.js} +3 -3
  38. package/dist/server/{chunk-ADREPXFU.js.map → chunk-62ZJI564.js.map} +1 -1
  39. package/dist/server/chunk-7DS4Q3GA.mjs +333 -0
  40. package/dist/server/chunk-7DS4Q3GA.mjs.map +1 -0
  41. package/dist/server/chunk-BJTO5JO5.mjs +11 -0
  42. package/dist/server/{chunk-4Z5FBFRL.mjs → chunk-BPKYRPCQ.mjs} +7 -3
  43. package/dist/server/{chunk-4Z5FBFRL.mjs.map → chunk-BPKYRPCQ.mjs.map} +1 -1
  44. package/dist/server/chunk-DGUM43GV.js +11 -0
  45. package/dist/server/chunk-DGUM43GV.js.map +1 -0
  46. package/dist/server/chunk-EGTDJ4PL.js +5461 -0
  47. package/dist/server/chunk-EGTDJ4PL.js.map +1 -0
  48. package/dist/server/chunk-FK64TZBT.mjs +831 -0
  49. package/dist/server/chunk-FK64TZBT.mjs.map +1 -0
  50. package/dist/server/chunk-GKYNDDJS.js +2111 -0
  51. package/dist/server/chunk-GKYNDDJS.js.map +1 -0
  52. package/dist/server/chunk-HOY77YBF.js +333 -0
  53. package/dist/server/chunk-HOY77YBF.js.map +1 -0
  54. package/dist/server/chunk-INWKF3IC.js +831 -0
  55. package/dist/server/chunk-INWKF3IC.js.map +1 -0
  56. package/dist/server/{chunk-2RW5HAQQ.mjs → chunk-JTAERCX2.mjs} +2 -2
  57. package/dist/server/chunk-O5DC7MYW.mjs +9606 -0
  58. package/dist/server/chunk-O5DC7MYW.mjs.map +1 -0
  59. package/dist/server/{chunk-PEAXKTDU.mjs → chunk-OP2GHK27.mjs} +2 -2
  60. package/dist/server/{chunk-WKG57P2H.mjs → chunk-PN3CHDVX.mjs} +10 -3
  61. package/dist/server/{chunk-WKG57P2H.mjs.map → chunk-PN3CHDVX.mjs.map} +1 -1
  62. package/dist/server/chunk-SF63XAX7.js +9606 -0
  63. package/dist/server/chunk-SF63XAX7.js.map +1 -0
  64. package/dist/server/{chunk-F472SMKX.js → chunk-TO7FD6TQ.js} +4 -4
  65. package/dist/server/{chunk-F472SMKX.js.map → chunk-TO7FD6TQ.js.map} +1 -1
  66. package/dist/server/chunk-USQF2XTU.mjs +5461 -0
  67. package/dist/server/chunk-USQF2XTU.mjs.map +1 -0
  68. package/dist/server/{chunk-SW7LE4M3.js → chunk-XLVL5WPH.js} +12 -8
  69. package/dist/server/chunk-XLVL5WPH.js.map +1 -0
  70. package/dist/server/components-BzdA6NAc.d.mts +305 -0
  71. package/dist/server/components-DhIcstww.d.ts +305 -0
  72. package/dist/server/components.d.mts +13 -49
  73. package/dist/server/components.d.ts +13 -49
  74. package/dist/server/components.js +7 -4
  75. package/dist/server/components.js.map +1 -1
  76. package/dist/server/components.mjs +9 -6
  77. package/dist/server/components.mjs.map +1 -1
  78. package/dist/server/config-validation.d.mts +2 -2
  79. package/dist/server/config-validation.d.ts +2 -2
  80. package/dist/server/config-validation.js +6 -3
  81. package/dist/server/config-validation.js.map +1 -1
  82. package/dist/server/config-validation.mjs +5 -2
  83. package/dist/server/config.d.mts +3 -3
  84. package/dist/server/config.d.ts +3 -3
  85. package/dist/server/config.js +6 -3
  86. package/dist/server/config.js.map +1 -1
  87. package/dist/server/config.mjs +5 -2
  88. package/dist/server/config.mjs.map +1 -1
  89. package/dist/server/data.d.mts +9 -8
  90. package/dist/server/data.d.ts +9 -8
  91. package/dist/server/data.js +4 -2
  92. package/dist/server/data.js.map +1 -1
  93. package/dist/server/data.mjs +3 -1
  94. package/dist/server/{index-C6M0Wfjq.d.ts → index-BB28KAui.d.ts} +1 -1
  95. package/dist/server/{index-B0yI_V6Z.d.mts → index-C_FVup_o.d.mts} +1 -1
  96. package/dist/server/index.d.mts +1554 -5
  97. package/dist/server/index.d.ts +1554 -5
  98. package/dist/server/index.js +4 -4
  99. package/dist/server/index.js.map +1 -1
  100. package/dist/server/index.mjs +4 -4
  101. package/dist/server/index.mjs.map +1 -1
  102. package/dist/server/{loadContent-CJcbYF3J.d.ts → loadContent-AQOBf_gP.d.ts} +4 -4
  103. package/dist/server/{loadContent-zhlL4YSE.d.mts → loadContent-DBmprsB4.d.mts} +4 -4
  104. package/dist/server/loadPage-3ECPF426.js +11 -0
  105. package/dist/server/loadPage-3ECPF426.js.map +1 -0
  106. package/dist/server/{loadPage-CCf15nt8.d.mts → loadPage-BMg8PJxJ.d.ts} +146 -5
  107. package/dist/server/loadPage-LW273NYO.mjs +11 -0
  108. package/dist/server/loadPage-LW273NYO.mjs.map +1 -0
  109. package/dist/server/{loadPage-BYmVMk0V.d.ts → loadPage-pg4HimlK.d.mts} +146 -5
  110. package/dist/server/metadata.d.mts +9 -6
  111. package/dist/server/metadata.d.ts +9 -6
  112. package/dist/server/metadata.js +3 -1
  113. package/dist/server/metadata.js.map +1 -1
  114. package/dist/server/metadata.mjs +2 -0
  115. package/dist/server/metadata.mjs.map +1 -1
  116. package/dist/server/rendering/server.d.mts +9 -7
  117. package/dist/server/rendering/server.d.ts +9 -7
  118. package/dist/server/rendering/server.js +7 -4
  119. package/dist/server/rendering/server.js.map +1 -1
  120. package/dist/server/rendering/server.mjs +6 -3
  121. package/dist/server/rendering.d.mts +172 -9
  122. package/dist/server/rendering.d.ts +172 -9
  123. package/dist/server/rendering.js +12 -9
  124. package/dist/server/rendering.js.map +1 -1
  125. package/dist/server/rendering.mjs +14 -11
  126. package/dist/server/rendering.mjs.map +1 -1
  127. package/dist/server/routing.d.mts +9 -6
  128. package/dist/server/routing.d.ts +9 -6
  129. package/dist/server/routing.js +4 -2
  130. package/dist/server/routing.js.map +1 -1
  131. package/dist/server/routing.mjs +3 -1
  132. package/dist/server/routing.mjs.map +1 -1
  133. package/dist/server/schema-Bpy9N5ZI.d.mts +1870 -0
  134. package/dist/server/schema-Bpy9N5ZI.d.ts +1870 -0
  135. package/dist/server/server.d.mts +11 -8
  136. package/dist/server/server.d.ts +11 -8
  137. package/dist/server/server.js +7 -5
  138. package/dist/server/server.js.map +1 -1
  139. package/dist/server/server.mjs +6 -4
  140. package/dist/server/theme-bridge.js +13 -10
  141. package/dist/server/theme-bridge.js.map +1 -1
  142. package/dist/server/theme-bridge.mjs +10 -7
  143. package/dist/server/theme-bridge.mjs.map +1 -1
  144. package/dist/server/theme.js +3 -1
  145. package/dist/server/theme.js.map +1 -1
  146. package/dist/server/theme.mjs +2 -0
  147. package/dist/server/theme.mjs.map +1 -1
  148. package/dist/server/{types-BCeqWtI2.d.ts → types--u4GLCAY.d.ts} +1 -1
  149. package/dist/server/types-BprgZt-t.d.ts +4149 -0
  150. package/dist/server/types-C0G9IxWO.d.mts +4149 -0
  151. package/dist/server/{types-Bbo01M7P.d.mts → types-_nDnPHpv.d.mts} +27 -1
  152. package/dist/server/{types-Bbo01M7P.d.ts → types-_nDnPHpv.d.ts} +27 -1
  153. package/dist/server/{types-BCeqWtI2.d.mts → types-_zWJTgv0.d.mts} +1 -1
  154. package/package.json +15 -15
  155. package/dist/server/chunk-3KKZVGH4.mjs +0 -179
  156. package/dist/server/chunk-3KKZVGH4.mjs.map +0 -1
  157. package/dist/server/chunk-4Z3GPTCS.js +0 -179
  158. package/dist/server/chunk-4Z3GPTCS.js.map +0 -1
  159. package/dist/server/chunk-JB4LIEFS.js.map +0 -1
  160. package/dist/server/chunk-QQ6U4QX6.js +0 -120
  161. package/dist/server/chunk-QQ6U4QX6.js.map +0 -1
  162. package/dist/server/chunk-R5YGLRUG.mjs +0 -122
  163. package/dist/server/chunk-R5YGLRUG.mjs.map +0 -1
  164. package/dist/server/chunk-SW7LE4M3.js.map +0 -1
  165. package/dist/server/chunk-W3K7LVPS.mjs +0 -120
  166. package/dist/server/chunk-W3K7LVPS.mjs.map +0 -1
  167. package/dist/server/chunk-YHEZMVTS.js +0 -122
  168. package/dist/server/chunk-YHEZMVTS.js.map +0 -1
  169. package/dist/server/loadPage-DVH3DW6E.js +0 -9
  170. package/dist/server/loadPage-DVH3DW6E.js.map +0 -1
  171. package/dist/server/loadPage-PHQZ6XQZ.mjs +0 -9
  172. package/dist/server/types-C6gmRHLe.d.mts +0 -150
  173. package/dist/server/types-C6gmRHLe.d.ts +0 -150
  174. /package/dist/server/{loadPage-PHQZ6XQZ.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
  175. /package/dist/server/{chunk-2RW5HAQQ.mjs.map → chunk-JTAERCX2.mjs.map} +0 -0
  176. /package/dist/server/{chunk-PEAXKTDU.mjs.map → chunk-OP2GHK27.mjs.map} +0 -0
@@ -1,9 +1,12 @@
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';
1
+ export { c as createRiverbankClient } from './index-C_FVup_o.mjs';
2
+ export { E as EntriesResponse, b as EntryResponse, P as PageResponse, R as RiverbankClient, a as RiverbankClientConfig, S as SiteResponse } from './types-C0G9IxWO.mjs';
3
+ export { L as LoadPageParams, a as LoadPageResult, R as RuntimeSdkConfig, l as loadPage } from './loadPage-pg4HimlK.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-DBmprsB4.mjs';
5
+ import '@riverbankcms/ai';
6
+ import './schema-Bpy9N5ZI.mjs';
7
+ import 'zod';
8
+ import '@riverbankcms/media-storage-supabase';
9
+ import '@riverbankcms/db';
6
10
  import 'react/jsx-runtime';
7
- import '@riverbankcms/blocks';
8
- import '@riverbankcms/blocks/system/data';
9
- import './types-Bbo01M7P.mjs';
11
+ import 'react';
12
+ import './types-_nDnPHpv.mjs';
@@ -1,9 +1,12 @@
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';
1
+ export { c as createRiverbankClient } from './index-BB28KAui.js';
2
+ export { E as EntriesResponse, b as EntryResponse, P as PageResponse, R as RiverbankClient, a as RiverbankClientConfig, S as SiteResponse } from './types-BprgZt-t.js';
3
+ export { L as LoadPageParams, a as LoadPageResult, R as RuntimeSdkConfig, l as loadPage } from './loadPage-BMg8PJxJ.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-AQOBf_gP.js';
5
+ import '@riverbankcms/ai';
6
+ import './schema-Bpy9N5ZI.js';
7
+ import 'zod';
8
+ import '@riverbankcms/media-storage-supabase';
9
+ import '@riverbankcms/db';
6
10
  import 'react/jsx-runtime';
7
- import '@riverbankcms/blocks';
8
- import '@riverbankcms/blocks/system/data';
9
- import './types-Bbo01M7P.js';
11
+ import 'react';
12
+ import './types-_nDnPHpv.js';
@@ -1,21 +1,23 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk4Z3GPTCSjs = require('./chunk-4Z3GPTCS.js');
3
+ var _chunkGKYNDDJSjs = require('./chunk-GKYNDDJS.js');
4
4
 
5
5
 
6
6
 
7
7
 
8
- var _chunkF472SMKXjs = require('./chunk-F472SMKX.js');
8
+ var _chunkTO7FD6TQjs = require('./chunk-TO7FD6TQ.js');
9
9
 
10
10
 
11
- var _chunkADREPXFUjs = require('./chunk-ADREPXFU.js');
11
+ var _chunk62ZJI564js = require('./chunk-62ZJI564.js');
12
12
  require('./chunk-YXDDFG3N.js');
13
- require('./chunk-QQ6U4QX6.js');
13
+ require('./chunk-HOY77YBF.js');
14
+ require('./chunk-EGTDJ4PL.js');
15
+ require('./chunk-DGUM43GV.js');
14
16
 
15
17
 
16
18
 
17
19
 
18
20
 
19
21
 
20
- exports.createRiverbankClient = _chunk4Z3GPTCSjs.createRiverbankClient; exports.isEntryContent = _chunkF472SMKXjs.isEntryContent; exports.isPageContent = _chunkF472SMKXjs.isPageContent; exports.loadContent = _chunkF472SMKXjs.loadContent; exports.loadPage = _chunkADREPXFUjs.loadPage;
22
+ exports.createRiverbankClient = _chunkGKYNDDJSjs.createRiverbankClient; exports.isEntryContent = _chunkTO7FD6TQjs.isEntryContent; exports.isPageContent = _chunkTO7FD6TQjs.isPageContent; exports.loadContent = _chunkTO7FD6TQjs.loadContent; exports.loadPage = _chunk62ZJI564js.loadPage;
21
23
  //# sourceMappingURL=server.js.map
@@ -1 +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"}
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,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACF,2RAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/server.js"}
@@ -1,16 +1,18 @@
1
1
  import {
2
2
  createRiverbankClient
3
- } from "./chunk-3KKZVGH4.mjs";
3
+ } from "./chunk-3J46ILMJ.mjs";
4
4
  import {
5
5
  isEntryContent,
6
6
  isPageContent,
7
7
  loadContent
8
- } from "./chunk-PEAXKTDU.mjs";
8
+ } from "./chunk-OP2GHK27.mjs";
9
9
  import {
10
10
  loadPage
11
- } from "./chunk-2RW5HAQQ.mjs";
11
+ } from "./chunk-JTAERCX2.mjs";
12
12
  import "./chunk-GWBMJPLH.mjs";
13
- import "./chunk-W3K7LVPS.mjs";
13
+ import "./chunk-7DS4Q3GA.mjs";
14
+ import "./chunk-USQF2XTU.mjs";
15
+ import "./chunk-BJTO5JO5.mjs";
14
16
  export {
15
17
  createRiverbankClient,
16
18
  isEntryContent,
@@ -1,15 +1,18 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } 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; }// src/theme-bridge/ThemeBridgeProvider.tsx
2
- var _react = require('react'); var React = _interopRequireWildcard(_react);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } 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; }
3
2
 
4
- // src/theme-bridge/generateCssVars.ts
5
3
 
6
4
 
7
5
 
8
6
 
9
7
 
8
+ var _chunkSF63XAX7js = require('./chunk-SF63XAX7.js');
9
+ require('./chunk-EGTDJ4PL.js');
10
+ require('./chunk-DGUM43GV.js');
10
11
 
12
+ // src/theme-bridge/ThemeBridgeProvider.tsx
13
+ var _react = require('react'); var React = _interopRequireWildcard(_react);
11
14
 
12
- var _blocks = require('@riverbankcms/blocks');
15
+ // src/theme-bridge/generateCssVars.ts
13
16
  var SCOPE_ID = "sdk";
14
17
  var SYSTEM_FONT_STACK = 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"';
15
18
  var SPACING_CONFIG = {
@@ -144,7 +147,7 @@ ${cssLines}
144
147
  }
145
148
  function generateButtonsCss(config, corners, shadows) {
146
149
  const buttonConfig = _optionalChain([config, 'access', _7 => _7.components, 'optionalAccess', _8 => _8.buttons]);
147
- let variants = _blocks.getDefaultButtonVariants.call(void 0, );
150
+ let variants = _chunkSF63XAX7js.getDefaultButtonVariants.call(void 0, );
148
151
  if (typeof buttonConfig === "object" && buttonConfig.variants) {
149
152
  const requestedIds = new Set(buttonConfig.variants);
150
153
  variants = variants.filter((v) => requestedIds.has(v.id));
@@ -156,11 +159,11 @@ function generateButtonsCss(config, corners, shadows) {
156
159
  fontWeight: 500,
157
160
  textTransform: "none"
158
161
  };
159
- return _blocks.generateButtonCoreCss.call(void 0, SCOPE_ID, variants, settings);
162
+ return _chunkSF63XAX7js.generateButtonCoreCss.call(void 0, SCOPE_ID, variants, settings);
160
163
  }
161
164
  function generateCardsCss(config, corners, shadows) {
162
165
  const cardConfig = _optionalChain([config, 'access', _9 => _9.components, 'optionalAccess', _10 => _10.cards]);
163
- let variants = _blocks.getDefaultCardVariants.call(void 0, );
166
+ let variants = _chunkSF63XAX7js.getDefaultCardVariants.call(void 0, );
164
167
  if (typeof cardConfig === "object" && cardConfig.variants) {
165
168
  const requestedIds = new Set(cardConfig.variants);
166
169
  variants = variants.filter((v) => requestedIds.has(v.id));
@@ -170,13 +173,13 @@ function generateCardsCss(config, corners, shadows) {
170
173
  shadow: shadows,
171
174
  borderWidth: "thin"
172
175
  };
173
- return _blocks.generateCardCoreCss.call(void 0, SCOPE_ID, variants, settings);
176
+ return _chunkSF63XAX7js.generateCardCoreCss.call(void 0, SCOPE_ID, variants, settings);
174
177
  }
175
178
  function generateInputsCss(config, corners, shadows) {
176
- const settings = _blocks.getDefaultInputSettings.call(void 0, );
179
+ const settings = _chunkSF63XAX7js.getDefaultInputSettings.call(void 0, );
177
180
  settings.corners = corners;
178
181
  settings.shadow = shadows === "none" ? "none" : "low";
179
- return _blocks.generateInputCoreCss.call(void 0, SCOPE_ID, settings);
182
+ return _chunkSF63XAX7js.generateInputCoreCss.call(void 0, SCOPE_ID, settings);
180
183
  }
181
184
  function generateOverrideCss(overrides) {
182
185
  const chunks = [];
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme-bridge.js","../../src/theme-bridge/ThemeBridgeProvider.tsx","../../src/theme-bridge/generateCssVars.ts"],"names":[],"mappings":"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","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme-bridge.js","sourcesContent":[null,"/**\n * ThemeBridgeProvider\n *\n * A lightweight theme provider for SDK sites that want to style Builder blocks\n * without using the full CMS theme system. Generates CSS variables from a\n * simplified configuration.\n *\n * @example Simple tokens only\n * ```tsx\n * import { ThemeBridgeProvider } from '@riverbankcms/sdk/theme-bridge';\n *\n * export default function RootLayout({ children }) {\n * return (\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * background: '#ffffff',\n * text: '#1e293b',\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * );\n * }\n * ```\n *\n * @example With component CSS\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * white: '#ffffff',\n * surface: '#f8fafc',\n * text: '#1e293b',\n * border: '#e2e8f0',\n * },\n * corners: 'rounded',\n * shadows: 'medium',\n * components: {\n * buttons: true,\n * cards: true,\n * inputs: true,\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n *\n * @example Pass-through to existing design system\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: 'var(--brand-purple)',\n * secondary: 'var(--brand-navy)',\n * background: 'var(--ds-bg)',\n * },\n * components: { buttons: true },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n */\n\nimport * as React from 'react';\nimport { generateThemeBridgeCss } from './generateCssVars';\nimport type { ThemeBridgeConfig } from './types';\n\nexport interface ThemeBridgeProviderProps {\n /** Theme configuration */\n config: ThemeBridgeConfig;\n /** Child elements to wrap */\n children: React.ReactNode;\n /** Additional class name for the wrapper */\n className?: string;\n /** HTML element to use for wrapper (defaults to 'div') */\n as?: keyof React.JSX.IntrinsicElements;\n}\n\n/**\n * Wraps content and injects CSS variables for Builder block styling.\n *\n * This component generates CSS variables from a simplified theme config\n * and injects them into a wrapper element. All Builder blocks rendered\n * inside will pick up these variables for colors, typography, spacing, etc.\n *\n * Optionally generates component CSS for buttons, cards, and inputs when\n * `config.components` is specified.\n */\nexport function ThemeBridgeProvider({\n config,\n children,\n className = '',\n as: Tag = 'div',\n}: ThemeBridgeProviderProps) {\n // Generate CSS variables and stylesheet\n const { css, cssVars } = React.useMemo(\n () => generateThemeBridgeCss(config),\n [config]\n );\n\n // Convert cssVars to inline style format\n const inlineStyle = React.useMemo(() => {\n const style: Record<string, string> = {};\n for (const [key, value] of Object.entries(cssVars)) {\n style[key] = value;\n }\n return style;\n }, [cssVars]);\n\n return (\n <>\n {/* Inject CSS for theme scope */}\n <style dangerouslySetInnerHTML={{ __html: css }} />\n\n {/* Wrapper with theme scope attribute and inline CSS variables */}\n {React.createElement(\n Tag,\n {\n 'data-theme-scope': 'sdk',\n className: `theme-scope ${className}`.trim(),\n style: inlineStyle as React.CSSProperties,\n },\n children\n )}\n </>\n );\n}\n\n/**\n * Hook to access generated CSS variables from theme config.\n * Useful for custom components that need theme values.\n */\nexport function useThemeBridgeCss(config: ThemeBridgeConfig) {\n return React.useMemo(() => generateThemeBridgeCss(config), [config]);\n}\n","/**\n * CSS Variable Generator for Theme Bridge\n *\n * Generates the CSS variables that Builder blocks expect,\n * from a simplified ThemeBridgeConfig.\n *\n * Key differences from the full CMS theme system:\n * - No shade generation (SDK sites define their own tokens)\n * - Supports arbitrary token names\n * - Supports pass-through of CSS variable references\n * - Opt-in component CSS generation using core generators from @riverbankcms/blocks\n */\n\nimport {\n generateButtonCoreCss,\n getDefaultButtonVariants,\n generateCardCoreCss,\n getDefaultCardVariants,\n generateInputCoreCss,\n getDefaultInputSettings,\n type ButtonCoreSettings,\n type CardCoreSettings,\n} from '@riverbankcms/blocks';\n\nimport type {\n ThemeBridgeConfig,\n ThemeBridgeOutput,\n ThemeBridgeSpacing,\n ThemeBridgeCorners,\n ThemeBridgeShadows,\n} from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst SCOPE_ID = 'sdk';\n\nconst SYSTEM_FONT_STACK = 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"';\n\nconst SPACING_CONFIG: Record<ThemeBridgeSpacing, { mult: number; rhythm: string }> = {\n comfortable: { mult: 1.15, rhythm: '1.2rem' },\n standard: { mult: 1.0, rhythm: '1rem' },\n dense: { mult: 0.88, rhythm: '0.75rem' },\n};\n\nconst CORNERS_CONFIG: Record<ThemeBridgeCorners, { control: string; card: string }> = {\n square: { control: '0px', card: '0px' },\n soft: { control: '4px', card: '8px' },\n rounded: { control: '8px', card: '12px' },\n pill: { control: '9999px', card: '16px' },\n};\n\nconst SHADOWS_CONFIG: Record<ThemeBridgeShadows, {\n sm: string;\n md: string;\n lg: string;\n elev: string;\n}> = {\n none: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n elev: 'none',\n },\n low: {\n sm: '0 1px 2px rgba(0,0,0,0.04)',\n md: '0 2px 4px rgba(0,0,0,0.06)',\n lg: '0 4px 8px rgba(0,0,0,0.08)',\n elev: '0 1px 3px rgba(0,0,0,0.06)',\n },\n medium: {\n sm: '0 1px 2px rgba(0,0,0,0.06)',\n md: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n lg: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n elev: '0 2px 6px rgba(0,0,0,0.08)',\n },\n high: {\n sm: '0 1px 3px rgba(0,0,0,0.08)',\n md: '0 6px 12px -2px rgba(0,0,0,0.15), 0 3px 6px -3px rgba(0,0,0,0.1)',\n lg: '0 20px 25px -5px rgba(0,0,0,0.15), 0 8px 10px -6px rgba(0,0,0,0.1)',\n elev: '0 4px 12px rgba(0,0,0,0.12)',\n },\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert hex color to RGB channel format (e.g., \"109 40 217\")\n */\nfunction hexToRgb(hex: string): string {\n const h = hex.replace(/^#/, '');\n const m = h.length === 3 ? h.split('').map(c => c + c).join('') : h;\n if (m.length !== 6) {\n console.warn(`[ThemeBridge] Invalid hex color: ${hex}`);\n return '0 0 0';\n }\n const int = parseInt(m, 16);\n const r = (int >> 16) & 255;\n const g = (int >> 8) & 255;\n const b = int & 255;\n return `${r} ${g} ${b}`;\n}\n\n/**\n * Normalize token value to CSS-ready format.\n *\n * - Hex colors are converted to RGB channels\n * - CSS variable references are passed through\n * - Already-formatted RGB values are passed through\n */\nfunction normalizeTokenValue(value: string): string {\n // Pass through CSS variable references\n if (value.startsWith('var(')) {\n return value;\n }\n\n // Convert hex to RGB\n if (value.startsWith('#')) {\n return hexToRgb(value);\n }\n\n // Already RGB or other format - use directly\n return value;\n}\n\n// ============================================================================\n// Main Generator\n// ============================================================================\n\n/**\n * Generate CSS variables from a ThemeBridgeConfig.\n */\nexport function generateThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput {\n // Validate required config\n if (!config || typeof config !== 'object') {\n throw new Error(\n '[ThemeBridge] Invalid config: expected an object with a \"tokens\" property.'\n );\n }\n\n if (!config.tokens || typeof config.tokens !== 'object' || Array.isArray(config.tokens)) {\n throw new Error(\n '[ThemeBridge] Missing \"tokens\" property in config. ' +\n 'ThemeBridgeConfig requires a \"tokens\" object with color definitions. ' +\n 'Example: { tokens: { primary: \"#6d28d9\", background: \"#ffffff\" } }'\n );\n }\n\n const cssVars: Record<string, string> = {};\n const cssChunks: string[] = [];\n\n // -------------------------------------------------------------------------\n // Color Tokens\n // -------------------------------------------------------------------------\n\n for (const [name, value] of Object.entries(config.tokens)) {\n cssVars[`--tb-${name}`] = normalizeTokenValue(value);\n }\n\n // -------------------------------------------------------------------------\n // Typography\n // -------------------------------------------------------------------------\n\n const typography = config.typography ?? {};\n cssVars['--tb-font-heading'] = typography.headingFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-body'] = typography.bodyFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-weight-heading'] = String(typography.headingWeight ?? 600);\n cssVars['--tb-font-weight-body'] = String(typography.bodyWeight ?? 400);\n\n // Font sizes (standard scale)\n cssVars['--tb-fs-h1'] = '2.5rem';\n cssVars['--tb-fs-h2'] = '2rem';\n cssVars['--tb-fs-h3'] = '1.5rem';\n cssVars['--tb-fs-body'] = '1rem';\n\n // Letter spacing and line height\n cssVars['--tb-ls-heading'] = '-0.02em';\n cssVars['--tb-ls-body'] = '0';\n cssVars['--tb-lh-heading'] = '1.2';\n cssVars['--tb-lh-body'] = '1.6';\n\n // Text transforms\n cssVars['--tb-tt-heading'] = 'none';\n cssVars['--tb-fv-heading'] = 'normal';\n\n // -------------------------------------------------------------------------\n // Spacing\n // -------------------------------------------------------------------------\n\n const spacingPreset = SPACING_CONFIG[config.spacing ?? 'standard'];\n cssVars['--tb-space-mult'] = String(spacingPreset.mult);\n cssVars['--tb-rt-space-y'] = spacingPreset.rhythm;\n\n // -------------------------------------------------------------------------\n // Corners\n // -------------------------------------------------------------------------\n\n const corners = config.corners ?? 'rounded';\n const cornersPreset = CORNERS_CONFIG[corners];\n cssVars['--tb-radius-control'] = cornersPreset.control;\n cssVars['--tb-radius-card'] = cornersPreset.card;\n\n // -------------------------------------------------------------------------\n // Shadows\n // -------------------------------------------------------------------------\n\n const shadows = config.shadows ?? 'medium';\n const shadowsPreset = SHADOWS_CONFIG[shadows];\n cssVars['--tb-shadow-sm'] = shadowsPreset.sm;\n cssVars['--tb-shadow-md'] = shadowsPreset.md;\n cssVars['--tb-shadow-lg'] = shadowsPreset.lg;\n cssVars['--tb-shadow-elev'] = shadowsPreset.elev;\n\n // -------------------------------------------------------------------------\n // Motion\n // -------------------------------------------------------------------------\n\n cssVars['--tb-motion-duration'] = '180ms';\n cssVars['--tb-motion-ease'] = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\n\n // -------------------------------------------------------------------------\n // Generate CSS Variables Block\n // -------------------------------------------------------------------------\n\n const cssLines = Object.entries(cssVars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n\n cssChunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) {\\n${cssLines}\\n}`);\n\n // -------------------------------------------------------------------------\n // Component CSS (opt-in)\n // -------------------------------------------------------------------------\n\n if (config.components?.buttons) {\n const buttonCss = generateButtonsCss(config, corners, shadows);\n cssChunks.push(buttonCss);\n }\n\n if (config.components?.cards) {\n const cardCss = generateCardsCss(config, corners, shadows);\n cssChunks.push(cardCss);\n }\n\n if (config.components?.inputs) {\n const inputCss = generateInputsCss(config, corners, shadows);\n cssChunks.push(inputCss);\n }\n\n // -------------------------------------------------------------------------\n // Custom Overrides\n // -------------------------------------------------------------------------\n\n if (config.overrides) {\n const overrideCss = generateOverrideCss(config.overrides);\n cssChunks.push(overrideCss);\n }\n\n return {\n cssVars,\n css: cssChunks.join('\\n\\n'),\n };\n}\n\n// ============================================================================\n// Component CSS Generators\n// ============================================================================\n\nfunction generateButtonsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const buttonConfig = config.components?.buttons;\n\n // Get variants to generate\n let variants = getDefaultButtonVariants();\n\n if (typeof buttonConfig === 'object' && buttonConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(buttonConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: ButtonCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n fontWeight: 500,\n textTransform: 'none',\n };\n\n return generateButtonCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateCardsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const cardConfig = config.components?.cards;\n\n // Get variants to generate\n let variants = getDefaultCardVariants();\n\n if (typeof cardConfig === 'object' && cardConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(cardConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: CardCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n };\n\n return generateCardCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateInputsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const settings = getDefaultInputSettings();\n\n // Override with theme settings\n settings.corners = corners;\n settings.shadow = shadows === 'none' ? 'none' : 'low';\n\n return generateInputCoreCss(SCOPE_ID, settings);\n}\n\nfunction generateOverrideCss(overrides: Record<string, string>): string {\n const chunks: string[] = [];\n\n for (const [selector, rules] of Object.entries(overrides)) {\n chunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) ${selector} {\\n ${rules}\\n}`);\n }\n\n return chunks.join('\\n\\n');\n}\n"]}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme-bridge.js","../../src/theme-bridge/ThemeBridgeProvider.tsx","../../src/theme-bridge/generateCssVars.ts"],"names":[],"mappings":"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","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme-bridge.js","sourcesContent":[null,"/**\n * ThemeBridgeProvider\n *\n * A lightweight theme provider for SDK sites that want to style Builder blocks\n * without using the full CMS theme system. Generates CSS variables from a\n * simplified configuration.\n *\n * @example Simple tokens only\n * ```tsx\n * import { ThemeBridgeProvider } from '@riverbankcms/sdk/theme-bridge';\n *\n * export default function RootLayout({ children }) {\n * return (\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * background: '#ffffff',\n * text: '#1e293b',\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * );\n * }\n * ```\n *\n * @example With component CSS\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * white: '#ffffff',\n * surface: '#f8fafc',\n * text: '#1e293b',\n * border: '#e2e8f0',\n * },\n * corners: 'rounded',\n * shadows: 'medium',\n * components: {\n * buttons: true,\n * cards: true,\n * inputs: true,\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n *\n * @example Pass-through to existing design system\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: 'var(--brand-purple)',\n * secondary: 'var(--brand-navy)',\n * background: 'var(--ds-bg)',\n * },\n * components: { buttons: true },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n */\n\nimport * as React from 'react';\nimport { generateThemeBridgeCss } from './generateCssVars';\nimport type { ThemeBridgeConfig } from './types';\n\nexport interface ThemeBridgeProviderProps {\n /** Theme configuration */\n config: ThemeBridgeConfig;\n /** Child elements to wrap */\n children: React.ReactNode;\n /** Additional class name for the wrapper */\n className?: string;\n /** HTML element to use for wrapper (defaults to 'div') */\n as?: keyof React.JSX.IntrinsicElements;\n}\n\n/**\n * Wraps content and injects CSS variables for Builder block styling.\n *\n * This component generates CSS variables from a simplified theme config\n * and injects them into a wrapper element. All Builder blocks rendered\n * inside will pick up these variables for colors, typography, spacing, etc.\n *\n * Optionally generates component CSS for buttons, cards, and inputs when\n * `config.components` is specified.\n */\nexport function ThemeBridgeProvider({\n config,\n children,\n className = '',\n as: Tag = 'div',\n}: ThemeBridgeProviderProps) {\n // Generate CSS variables and stylesheet\n const { css, cssVars } = React.useMemo(\n () => generateThemeBridgeCss(config),\n [config]\n );\n\n // Convert cssVars to inline style format\n const inlineStyle = React.useMemo(() => {\n const style: Record<string, string> = {};\n for (const [key, value] of Object.entries(cssVars)) {\n style[key] = value;\n }\n return style;\n }, [cssVars]);\n\n return (\n <>\n {/* Inject CSS for theme scope */}\n <style dangerouslySetInnerHTML={{ __html: css }} />\n\n {/* Wrapper with theme scope attribute and inline CSS variables */}\n {React.createElement(\n Tag,\n {\n 'data-theme-scope': 'sdk',\n className: `theme-scope ${className}`.trim(),\n style: inlineStyle as React.CSSProperties,\n },\n children\n )}\n </>\n );\n}\n\n/**\n * Hook to access generated CSS variables from theme config.\n * Useful for custom components that need theme values.\n */\nexport function useThemeBridgeCss(config: ThemeBridgeConfig) {\n return React.useMemo(() => generateThemeBridgeCss(config), [config]);\n}\n","/**\n * CSS Variable Generator for Theme Bridge\n *\n * Generates the CSS variables that Builder blocks expect,\n * from a simplified ThemeBridgeConfig.\n *\n * Key differences from the full CMS theme system:\n * - No shade generation (SDK sites define their own tokens)\n * - Supports arbitrary token names\n * - Supports pass-through of CSS variable references\n * - Opt-in component CSS generation using core generators from @riverbankcms/blocks\n */\n\nimport {\n generateButtonCoreCss,\n getDefaultButtonVariants,\n generateCardCoreCss,\n getDefaultCardVariants,\n generateInputCoreCss,\n getDefaultInputSettings,\n type ButtonCoreSettings,\n type CardCoreSettings,\n} from '@riverbankcms/blocks';\n\nimport type {\n ThemeBridgeConfig,\n ThemeBridgeOutput,\n ThemeBridgeSpacing,\n ThemeBridgeCorners,\n ThemeBridgeShadows,\n} from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst SCOPE_ID = 'sdk';\n\nconst SYSTEM_FONT_STACK = 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"';\n\nconst SPACING_CONFIG: Record<ThemeBridgeSpacing, { mult: number; rhythm: string }> = {\n comfortable: { mult: 1.15, rhythm: '1.2rem' },\n standard: { mult: 1.0, rhythm: '1rem' },\n dense: { mult: 0.88, rhythm: '0.75rem' },\n};\n\nconst CORNERS_CONFIG: Record<ThemeBridgeCorners, { control: string; card: string }> = {\n square: { control: '0px', card: '0px' },\n soft: { control: '4px', card: '8px' },\n rounded: { control: '8px', card: '12px' },\n pill: { control: '9999px', card: '16px' },\n};\n\nconst SHADOWS_CONFIG: Record<ThemeBridgeShadows, {\n sm: string;\n md: string;\n lg: string;\n elev: string;\n}> = {\n none: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n elev: 'none',\n },\n low: {\n sm: '0 1px 2px rgba(0,0,0,0.04)',\n md: '0 2px 4px rgba(0,0,0,0.06)',\n lg: '0 4px 8px rgba(0,0,0,0.08)',\n elev: '0 1px 3px rgba(0,0,0,0.06)',\n },\n medium: {\n sm: '0 1px 2px rgba(0,0,0,0.06)',\n md: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n lg: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n elev: '0 2px 6px rgba(0,0,0,0.08)',\n },\n high: {\n sm: '0 1px 3px rgba(0,0,0,0.08)',\n md: '0 6px 12px -2px rgba(0,0,0,0.15), 0 3px 6px -3px rgba(0,0,0,0.1)',\n lg: '0 20px 25px -5px rgba(0,0,0,0.15), 0 8px 10px -6px rgba(0,0,0,0.1)',\n elev: '0 4px 12px rgba(0,0,0,0.12)',\n },\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert hex color to RGB channel format (e.g., \"109 40 217\")\n */\nfunction hexToRgb(hex: string): string {\n const h = hex.replace(/^#/, '');\n const m = h.length === 3 ? h.split('').map(c => c + c).join('') : h;\n if (m.length !== 6) {\n console.warn(`[ThemeBridge] Invalid hex color: ${hex}`);\n return '0 0 0';\n }\n const int = parseInt(m, 16);\n const r = (int >> 16) & 255;\n const g = (int >> 8) & 255;\n const b = int & 255;\n return `${r} ${g} ${b}`;\n}\n\n/**\n * Normalize token value to CSS-ready format.\n *\n * - Hex colors are converted to RGB channels\n * - CSS variable references are passed through\n * - Already-formatted RGB values are passed through\n */\nfunction normalizeTokenValue(value: string): string {\n // Pass through CSS variable references\n if (value.startsWith('var(')) {\n return value;\n }\n\n // Convert hex to RGB\n if (value.startsWith('#')) {\n return hexToRgb(value);\n }\n\n // Already RGB or other format - use directly\n return value;\n}\n\n// ============================================================================\n// Main Generator\n// ============================================================================\n\n/**\n * Generate CSS variables from a ThemeBridgeConfig.\n */\nexport function generateThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput {\n // Validate required config\n if (!config || typeof config !== 'object') {\n throw new Error(\n '[ThemeBridge] Invalid config: expected an object with a \"tokens\" property.'\n );\n }\n\n if (!config.tokens || typeof config.tokens !== 'object' || Array.isArray(config.tokens)) {\n throw new Error(\n '[ThemeBridge] Missing \"tokens\" property in config. ' +\n 'ThemeBridgeConfig requires a \"tokens\" object with color definitions. ' +\n 'Example: { tokens: { primary: \"#6d28d9\", background: \"#ffffff\" } }'\n );\n }\n\n const cssVars: Record<string, string> = {};\n const cssChunks: string[] = [];\n\n // -------------------------------------------------------------------------\n // Color Tokens\n // -------------------------------------------------------------------------\n\n for (const [name, value] of Object.entries(config.tokens)) {\n cssVars[`--tb-${name}`] = normalizeTokenValue(value);\n }\n\n // -------------------------------------------------------------------------\n // Typography\n // -------------------------------------------------------------------------\n\n const typography = config.typography ?? {};\n cssVars['--tb-font-heading'] = typography.headingFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-body'] = typography.bodyFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-weight-heading'] = String(typography.headingWeight ?? 600);\n cssVars['--tb-font-weight-body'] = String(typography.bodyWeight ?? 400);\n\n // Font sizes (standard scale)\n cssVars['--tb-fs-h1'] = '2.5rem';\n cssVars['--tb-fs-h2'] = '2rem';\n cssVars['--tb-fs-h3'] = '1.5rem';\n cssVars['--tb-fs-body'] = '1rem';\n\n // Letter spacing and line height\n cssVars['--tb-ls-heading'] = '-0.02em';\n cssVars['--tb-ls-body'] = '0';\n cssVars['--tb-lh-heading'] = '1.2';\n cssVars['--tb-lh-body'] = '1.6';\n\n // Text transforms\n cssVars['--tb-tt-heading'] = 'none';\n cssVars['--tb-fv-heading'] = 'normal';\n\n // -------------------------------------------------------------------------\n // Spacing\n // -------------------------------------------------------------------------\n\n const spacingPreset = SPACING_CONFIG[config.spacing ?? 'standard'];\n cssVars['--tb-space-mult'] = String(spacingPreset.mult);\n cssVars['--tb-rt-space-y'] = spacingPreset.rhythm;\n\n // -------------------------------------------------------------------------\n // Corners\n // -------------------------------------------------------------------------\n\n const corners = config.corners ?? 'rounded';\n const cornersPreset = CORNERS_CONFIG[corners];\n cssVars['--tb-radius-control'] = cornersPreset.control;\n cssVars['--tb-radius-card'] = cornersPreset.card;\n\n // -------------------------------------------------------------------------\n // Shadows\n // -------------------------------------------------------------------------\n\n const shadows = config.shadows ?? 'medium';\n const shadowsPreset = SHADOWS_CONFIG[shadows];\n cssVars['--tb-shadow-sm'] = shadowsPreset.sm;\n cssVars['--tb-shadow-md'] = shadowsPreset.md;\n cssVars['--tb-shadow-lg'] = shadowsPreset.lg;\n cssVars['--tb-shadow-elev'] = shadowsPreset.elev;\n\n // -------------------------------------------------------------------------\n // Motion\n // -------------------------------------------------------------------------\n\n cssVars['--tb-motion-duration'] = '180ms';\n cssVars['--tb-motion-ease'] = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\n\n // -------------------------------------------------------------------------\n // Generate CSS Variables Block\n // -------------------------------------------------------------------------\n\n const cssLines = Object.entries(cssVars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n\n cssChunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) {\\n${cssLines}\\n}`);\n\n // -------------------------------------------------------------------------\n // Component CSS (opt-in)\n // -------------------------------------------------------------------------\n\n if (config.components?.buttons) {\n const buttonCss = generateButtonsCss(config, corners, shadows);\n cssChunks.push(buttonCss);\n }\n\n if (config.components?.cards) {\n const cardCss = generateCardsCss(config, corners, shadows);\n cssChunks.push(cardCss);\n }\n\n if (config.components?.inputs) {\n const inputCss = generateInputsCss(config, corners, shadows);\n cssChunks.push(inputCss);\n }\n\n // -------------------------------------------------------------------------\n // Custom Overrides\n // -------------------------------------------------------------------------\n\n if (config.overrides) {\n const overrideCss = generateOverrideCss(config.overrides);\n cssChunks.push(overrideCss);\n }\n\n return {\n cssVars,\n css: cssChunks.join('\\n\\n'),\n };\n}\n\n// ============================================================================\n// Component CSS Generators\n// ============================================================================\n\nfunction generateButtonsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const buttonConfig = config.components?.buttons;\n\n // Get variants to generate\n let variants = getDefaultButtonVariants();\n\n if (typeof buttonConfig === 'object' && buttonConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(buttonConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: ButtonCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n fontWeight: 500,\n textTransform: 'none',\n };\n\n return generateButtonCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateCardsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const cardConfig = config.components?.cards;\n\n // Get variants to generate\n let variants = getDefaultCardVariants();\n\n if (typeof cardConfig === 'object' && cardConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(cardConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: CardCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n };\n\n return generateCardCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateInputsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const settings = getDefaultInputSettings();\n\n // Override with theme settings\n settings.corners = corners;\n settings.shadow = shadows === 'none' ? 'none' : 'low';\n\n return generateInputCoreCss(SCOPE_ID, settings);\n}\n\nfunction generateOverrideCss(overrides: Record<string, string>): string {\n const chunks: string[] = [];\n\n for (const [selector, rules] of Object.entries(overrides)) {\n chunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) ${selector} {\\n ${rules}\\n}`);\n }\n\n return chunks.join('\\n\\n');\n}\n"]}
@@ -1,15 +1,18 @@
1
- // src/theme-bridge/ThemeBridgeProvider.tsx
2
- import * as React from "react";
3
-
4
- // src/theme-bridge/generateCssVars.ts
5
1
  import {
6
2
  generateButtonCoreCss,
7
- getDefaultButtonVariants,
8
3
  generateCardCoreCss,
9
- getDefaultCardVariants,
10
4
  generateInputCoreCss,
5
+ getDefaultButtonVariants,
6
+ getDefaultCardVariants,
11
7
  getDefaultInputSettings
12
- } from "@riverbankcms/blocks";
8
+ } from "./chunk-O5DC7MYW.mjs";
9
+ import "./chunk-USQF2XTU.mjs";
10
+ import "./chunk-BJTO5JO5.mjs";
11
+
12
+ // src/theme-bridge/ThemeBridgeProvider.tsx
13
+ import * as React from "react";
14
+
15
+ // src/theme-bridge/generateCssVars.ts
13
16
  var SCOPE_ID = "sdk";
14
17
  var SYSTEM_FONT_STACK = 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"';
15
18
  var SPACING_CONFIG = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme-bridge/ThemeBridgeProvider.tsx","../../src/theme-bridge/generateCssVars.ts"],"sourcesContent":["/**\n * ThemeBridgeProvider\n *\n * A lightweight theme provider for SDK sites that want to style Builder blocks\n * without using the full CMS theme system. Generates CSS variables from a\n * simplified configuration.\n *\n * @example Simple tokens only\n * ```tsx\n * import { ThemeBridgeProvider } from '@riverbankcms/sdk/theme-bridge';\n *\n * export default function RootLayout({ children }) {\n * return (\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * background: '#ffffff',\n * text: '#1e293b',\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * );\n * }\n * ```\n *\n * @example With component CSS\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * white: '#ffffff',\n * surface: '#f8fafc',\n * text: '#1e293b',\n * border: '#e2e8f0',\n * },\n * corners: 'rounded',\n * shadows: 'medium',\n * components: {\n * buttons: true,\n * cards: true,\n * inputs: true,\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n *\n * @example Pass-through to existing design system\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: 'var(--brand-purple)',\n * secondary: 'var(--brand-navy)',\n * background: 'var(--ds-bg)',\n * },\n * components: { buttons: true },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n */\n\nimport * as React from 'react';\nimport { generateThemeBridgeCss } from './generateCssVars';\nimport type { ThemeBridgeConfig } from './types';\n\nexport interface ThemeBridgeProviderProps {\n /** Theme configuration */\n config: ThemeBridgeConfig;\n /** Child elements to wrap */\n children: React.ReactNode;\n /** Additional class name for the wrapper */\n className?: string;\n /** HTML element to use for wrapper (defaults to 'div') */\n as?: keyof React.JSX.IntrinsicElements;\n}\n\n/**\n * Wraps content and injects CSS variables for Builder block styling.\n *\n * This component generates CSS variables from a simplified theme config\n * and injects them into a wrapper element. All Builder blocks rendered\n * inside will pick up these variables for colors, typography, spacing, etc.\n *\n * Optionally generates component CSS for buttons, cards, and inputs when\n * `config.components` is specified.\n */\nexport function ThemeBridgeProvider({\n config,\n children,\n className = '',\n as: Tag = 'div',\n}: ThemeBridgeProviderProps) {\n // Generate CSS variables and stylesheet\n const { css, cssVars } = React.useMemo(\n () => generateThemeBridgeCss(config),\n [config]\n );\n\n // Convert cssVars to inline style format\n const inlineStyle = React.useMemo(() => {\n const style: Record<string, string> = {};\n for (const [key, value] of Object.entries(cssVars)) {\n style[key] = value;\n }\n return style;\n }, [cssVars]);\n\n return (\n <>\n {/* Inject CSS for theme scope */}\n <style dangerouslySetInnerHTML={{ __html: css }} />\n\n {/* Wrapper with theme scope attribute and inline CSS variables */}\n {React.createElement(\n Tag,\n {\n 'data-theme-scope': 'sdk',\n className: `theme-scope ${className}`.trim(),\n style: inlineStyle as React.CSSProperties,\n },\n children\n )}\n </>\n );\n}\n\n/**\n * Hook to access generated CSS variables from theme config.\n * Useful for custom components that need theme values.\n */\nexport function useThemeBridgeCss(config: ThemeBridgeConfig) {\n return React.useMemo(() => generateThemeBridgeCss(config), [config]);\n}\n","/**\n * CSS Variable Generator for Theme Bridge\n *\n * Generates the CSS variables that Builder blocks expect,\n * from a simplified ThemeBridgeConfig.\n *\n * Key differences from the full CMS theme system:\n * - No shade generation (SDK sites define their own tokens)\n * - Supports arbitrary token names\n * - Supports pass-through of CSS variable references\n * - Opt-in component CSS generation using core generators from @riverbankcms/blocks\n */\n\nimport {\n generateButtonCoreCss,\n getDefaultButtonVariants,\n generateCardCoreCss,\n getDefaultCardVariants,\n generateInputCoreCss,\n getDefaultInputSettings,\n type ButtonCoreSettings,\n type CardCoreSettings,\n} from '@riverbankcms/blocks';\n\nimport type {\n ThemeBridgeConfig,\n ThemeBridgeOutput,\n ThemeBridgeSpacing,\n ThemeBridgeCorners,\n ThemeBridgeShadows,\n} from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst SCOPE_ID = 'sdk';\n\nconst SYSTEM_FONT_STACK = 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"';\n\nconst SPACING_CONFIG: Record<ThemeBridgeSpacing, { mult: number; rhythm: string }> = {\n comfortable: { mult: 1.15, rhythm: '1.2rem' },\n standard: { mult: 1.0, rhythm: '1rem' },\n dense: { mult: 0.88, rhythm: '0.75rem' },\n};\n\nconst CORNERS_CONFIG: Record<ThemeBridgeCorners, { control: string; card: string }> = {\n square: { control: '0px', card: '0px' },\n soft: { control: '4px', card: '8px' },\n rounded: { control: '8px', card: '12px' },\n pill: { control: '9999px', card: '16px' },\n};\n\nconst SHADOWS_CONFIG: Record<ThemeBridgeShadows, {\n sm: string;\n md: string;\n lg: string;\n elev: string;\n}> = {\n none: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n elev: 'none',\n },\n low: {\n sm: '0 1px 2px rgba(0,0,0,0.04)',\n md: '0 2px 4px rgba(0,0,0,0.06)',\n lg: '0 4px 8px rgba(0,0,0,0.08)',\n elev: '0 1px 3px rgba(0,0,0,0.06)',\n },\n medium: {\n sm: '0 1px 2px rgba(0,0,0,0.06)',\n md: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n lg: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n elev: '0 2px 6px rgba(0,0,0,0.08)',\n },\n high: {\n sm: '0 1px 3px rgba(0,0,0,0.08)',\n md: '0 6px 12px -2px rgba(0,0,0,0.15), 0 3px 6px -3px rgba(0,0,0,0.1)',\n lg: '0 20px 25px -5px rgba(0,0,0,0.15), 0 8px 10px -6px rgba(0,0,0,0.1)',\n elev: '0 4px 12px rgba(0,0,0,0.12)',\n },\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert hex color to RGB channel format (e.g., \"109 40 217\")\n */\nfunction hexToRgb(hex: string): string {\n const h = hex.replace(/^#/, '');\n const m = h.length === 3 ? h.split('').map(c => c + c).join('') : h;\n if (m.length !== 6) {\n console.warn(`[ThemeBridge] Invalid hex color: ${hex}`);\n return '0 0 0';\n }\n const int = parseInt(m, 16);\n const r = (int >> 16) & 255;\n const g = (int >> 8) & 255;\n const b = int & 255;\n return `${r} ${g} ${b}`;\n}\n\n/**\n * Normalize token value to CSS-ready format.\n *\n * - Hex colors are converted to RGB channels\n * - CSS variable references are passed through\n * - Already-formatted RGB values are passed through\n */\nfunction normalizeTokenValue(value: string): string {\n // Pass through CSS variable references\n if (value.startsWith('var(')) {\n return value;\n }\n\n // Convert hex to RGB\n if (value.startsWith('#')) {\n return hexToRgb(value);\n }\n\n // Already RGB or other format - use directly\n return value;\n}\n\n// ============================================================================\n// Main Generator\n// ============================================================================\n\n/**\n * Generate CSS variables from a ThemeBridgeConfig.\n */\nexport function generateThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput {\n // Validate required config\n if (!config || typeof config !== 'object') {\n throw new Error(\n '[ThemeBridge] Invalid config: expected an object with a \"tokens\" property.'\n );\n }\n\n if (!config.tokens || typeof config.tokens !== 'object' || Array.isArray(config.tokens)) {\n throw new Error(\n '[ThemeBridge] Missing \"tokens\" property in config. ' +\n 'ThemeBridgeConfig requires a \"tokens\" object with color definitions. ' +\n 'Example: { tokens: { primary: \"#6d28d9\", background: \"#ffffff\" } }'\n );\n }\n\n const cssVars: Record<string, string> = {};\n const cssChunks: string[] = [];\n\n // -------------------------------------------------------------------------\n // Color Tokens\n // -------------------------------------------------------------------------\n\n for (const [name, value] of Object.entries(config.tokens)) {\n cssVars[`--tb-${name}`] = normalizeTokenValue(value);\n }\n\n // -------------------------------------------------------------------------\n // Typography\n // -------------------------------------------------------------------------\n\n const typography = config.typography ?? {};\n cssVars['--tb-font-heading'] = typography.headingFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-body'] = typography.bodyFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-weight-heading'] = String(typography.headingWeight ?? 600);\n cssVars['--tb-font-weight-body'] = String(typography.bodyWeight ?? 400);\n\n // Font sizes (standard scale)\n cssVars['--tb-fs-h1'] = '2.5rem';\n cssVars['--tb-fs-h2'] = '2rem';\n cssVars['--tb-fs-h3'] = '1.5rem';\n cssVars['--tb-fs-body'] = '1rem';\n\n // Letter spacing and line height\n cssVars['--tb-ls-heading'] = '-0.02em';\n cssVars['--tb-ls-body'] = '0';\n cssVars['--tb-lh-heading'] = '1.2';\n cssVars['--tb-lh-body'] = '1.6';\n\n // Text transforms\n cssVars['--tb-tt-heading'] = 'none';\n cssVars['--tb-fv-heading'] = 'normal';\n\n // -------------------------------------------------------------------------\n // Spacing\n // -------------------------------------------------------------------------\n\n const spacingPreset = SPACING_CONFIG[config.spacing ?? 'standard'];\n cssVars['--tb-space-mult'] = String(spacingPreset.mult);\n cssVars['--tb-rt-space-y'] = spacingPreset.rhythm;\n\n // -------------------------------------------------------------------------\n // Corners\n // -------------------------------------------------------------------------\n\n const corners = config.corners ?? 'rounded';\n const cornersPreset = CORNERS_CONFIG[corners];\n cssVars['--tb-radius-control'] = cornersPreset.control;\n cssVars['--tb-radius-card'] = cornersPreset.card;\n\n // -------------------------------------------------------------------------\n // Shadows\n // -------------------------------------------------------------------------\n\n const shadows = config.shadows ?? 'medium';\n const shadowsPreset = SHADOWS_CONFIG[shadows];\n cssVars['--tb-shadow-sm'] = shadowsPreset.sm;\n cssVars['--tb-shadow-md'] = shadowsPreset.md;\n cssVars['--tb-shadow-lg'] = shadowsPreset.lg;\n cssVars['--tb-shadow-elev'] = shadowsPreset.elev;\n\n // -------------------------------------------------------------------------\n // Motion\n // -------------------------------------------------------------------------\n\n cssVars['--tb-motion-duration'] = '180ms';\n cssVars['--tb-motion-ease'] = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\n\n // -------------------------------------------------------------------------\n // Generate CSS Variables Block\n // -------------------------------------------------------------------------\n\n const cssLines = Object.entries(cssVars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n\n cssChunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) {\\n${cssLines}\\n}`);\n\n // -------------------------------------------------------------------------\n // Component CSS (opt-in)\n // -------------------------------------------------------------------------\n\n if (config.components?.buttons) {\n const buttonCss = generateButtonsCss(config, corners, shadows);\n cssChunks.push(buttonCss);\n }\n\n if (config.components?.cards) {\n const cardCss = generateCardsCss(config, corners, shadows);\n cssChunks.push(cardCss);\n }\n\n if (config.components?.inputs) {\n const inputCss = generateInputsCss(config, corners, shadows);\n cssChunks.push(inputCss);\n }\n\n // -------------------------------------------------------------------------\n // Custom Overrides\n // -------------------------------------------------------------------------\n\n if (config.overrides) {\n const overrideCss = generateOverrideCss(config.overrides);\n cssChunks.push(overrideCss);\n }\n\n return {\n cssVars,\n css: cssChunks.join('\\n\\n'),\n };\n}\n\n// ============================================================================\n// Component CSS Generators\n// ============================================================================\n\nfunction generateButtonsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const buttonConfig = config.components?.buttons;\n\n // Get variants to generate\n let variants = getDefaultButtonVariants();\n\n if (typeof buttonConfig === 'object' && buttonConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(buttonConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: ButtonCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n fontWeight: 500,\n textTransform: 'none',\n };\n\n return generateButtonCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateCardsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const cardConfig = config.components?.cards;\n\n // Get variants to generate\n let variants = getDefaultCardVariants();\n\n if (typeof cardConfig === 'object' && cardConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(cardConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: CardCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n };\n\n return generateCardCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateInputsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const settings = getDefaultInputSettings();\n\n // Override with theme settings\n settings.corners = corners;\n settings.shadow = shadows === 'none' ? 'none' : 'low';\n\n return generateInputCoreCss(SCOPE_ID, settings);\n}\n\nfunction generateOverrideCss(overrides: Record<string, string>): string {\n const chunks: string[] = [];\n\n for (const [selector, rules] of Object.entries(overrides)) {\n chunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) ${selector} {\\n ${rules}\\n}`);\n }\n\n return chunks.join('\\n\\n');\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/theme-bridge/ThemeBridgeProvider.tsx","../../src/theme-bridge/generateCssVars.ts"],"sourcesContent":["/**\n * ThemeBridgeProvider\n *\n * A lightweight theme provider for SDK sites that want to style Builder blocks\n * without using the full CMS theme system. Generates CSS variables from a\n * simplified configuration.\n *\n * @example Simple tokens only\n * ```tsx\n * import { ThemeBridgeProvider } from '@riverbankcms/sdk/theme-bridge';\n *\n * export default function RootLayout({ children }) {\n * return (\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * background: '#ffffff',\n * text: '#1e293b',\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * );\n * }\n * ```\n *\n * @example With component CSS\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: '#6d28d9',\n * secondary: '#4c1d95',\n * white: '#ffffff',\n * surface: '#f8fafc',\n * text: '#1e293b',\n * border: '#e2e8f0',\n * },\n * corners: 'rounded',\n * shadows: 'medium',\n * components: {\n * buttons: true,\n * cards: true,\n * inputs: true,\n * },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n *\n * @example Pass-through to existing design system\n * ```tsx\n * <ThemeBridgeProvider\n * config={{\n * tokens: {\n * primary: 'var(--brand-purple)',\n * secondary: 'var(--brand-navy)',\n * background: 'var(--ds-bg)',\n * },\n * components: { buttons: true },\n * }}\n * >\n * {children}\n * </ThemeBridgeProvider>\n * ```\n */\n\nimport * as React from 'react';\nimport { generateThemeBridgeCss } from './generateCssVars';\nimport type { ThemeBridgeConfig } from './types';\n\nexport interface ThemeBridgeProviderProps {\n /** Theme configuration */\n config: ThemeBridgeConfig;\n /** Child elements to wrap */\n children: React.ReactNode;\n /** Additional class name for the wrapper */\n className?: string;\n /** HTML element to use for wrapper (defaults to 'div') */\n as?: keyof React.JSX.IntrinsicElements;\n}\n\n/**\n * Wraps content and injects CSS variables for Builder block styling.\n *\n * This component generates CSS variables from a simplified theme config\n * and injects them into a wrapper element. All Builder blocks rendered\n * inside will pick up these variables for colors, typography, spacing, etc.\n *\n * Optionally generates component CSS for buttons, cards, and inputs when\n * `config.components` is specified.\n */\nexport function ThemeBridgeProvider({\n config,\n children,\n className = '',\n as: Tag = 'div',\n}: ThemeBridgeProviderProps) {\n // Generate CSS variables and stylesheet\n const { css, cssVars } = React.useMemo(\n () => generateThemeBridgeCss(config),\n [config]\n );\n\n // Convert cssVars to inline style format\n const inlineStyle = React.useMemo(() => {\n const style: Record<string, string> = {};\n for (const [key, value] of Object.entries(cssVars)) {\n style[key] = value;\n }\n return style;\n }, [cssVars]);\n\n return (\n <>\n {/* Inject CSS for theme scope */}\n <style dangerouslySetInnerHTML={{ __html: css }} />\n\n {/* Wrapper with theme scope attribute and inline CSS variables */}\n {React.createElement(\n Tag,\n {\n 'data-theme-scope': 'sdk',\n className: `theme-scope ${className}`.trim(),\n style: inlineStyle as React.CSSProperties,\n },\n children\n )}\n </>\n );\n}\n\n/**\n * Hook to access generated CSS variables from theme config.\n * Useful for custom components that need theme values.\n */\nexport function useThemeBridgeCss(config: ThemeBridgeConfig) {\n return React.useMemo(() => generateThemeBridgeCss(config), [config]);\n}\n","/**\n * CSS Variable Generator for Theme Bridge\n *\n * Generates the CSS variables that Builder blocks expect,\n * from a simplified ThemeBridgeConfig.\n *\n * Key differences from the full CMS theme system:\n * - No shade generation (SDK sites define their own tokens)\n * - Supports arbitrary token names\n * - Supports pass-through of CSS variable references\n * - Opt-in component CSS generation using core generators from @riverbankcms/blocks\n */\n\nimport {\n generateButtonCoreCss,\n getDefaultButtonVariants,\n generateCardCoreCss,\n getDefaultCardVariants,\n generateInputCoreCss,\n getDefaultInputSettings,\n type ButtonCoreSettings,\n type CardCoreSettings,\n} from '@riverbankcms/blocks';\n\nimport type {\n ThemeBridgeConfig,\n ThemeBridgeOutput,\n ThemeBridgeSpacing,\n ThemeBridgeCorners,\n ThemeBridgeShadows,\n} from './types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst SCOPE_ID = 'sdk';\n\nconst SYSTEM_FONT_STACK = 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\"';\n\nconst SPACING_CONFIG: Record<ThemeBridgeSpacing, { mult: number; rhythm: string }> = {\n comfortable: { mult: 1.15, rhythm: '1.2rem' },\n standard: { mult: 1.0, rhythm: '1rem' },\n dense: { mult: 0.88, rhythm: '0.75rem' },\n};\n\nconst CORNERS_CONFIG: Record<ThemeBridgeCorners, { control: string; card: string }> = {\n square: { control: '0px', card: '0px' },\n soft: { control: '4px', card: '8px' },\n rounded: { control: '8px', card: '12px' },\n pill: { control: '9999px', card: '16px' },\n};\n\nconst SHADOWS_CONFIG: Record<ThemeBridgeShadows, {\n sm: string;\n md: string;\n lg: string;\n elev: string;\n}> = {\n none: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n elev: 'none',\n },\n low: {\n sm: '0 1px 2px rgba(0,0,0,0.04)',\n md: '0 2px 4px rgba(0,0,0,0.06)',\n lg: '0 4px 8px rgba(0,0,0,0.08)',\n elev: '0 1px 3px rgba(0,0,0,0.06)',\n },\n medium: {\n sm: '0 1px 2px rgba(0,0,0,0.06)',\n md: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n lg: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n elev: '0 2px 6px rgba(0,0,0,0.08)',\n },\n high: {\n sm: '0 1px 3px rgba(0,0,0,0.08)',\n md: '0 6px 12px -2px rgba(0,0,0,0.15), 0 3px 6px -3px rgba(0,0,0,0.1)',\n lg: '0 20px 25px -5px rgba(0,0,0,0.15), 0 8px 10px -6px rgba(0,0,0,0.1)',\n elev: '0 4px 12px rgba(0,0,0,0.12)',\n },\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Convert hex color to RGB channel format (e.g., \"109 40 217\")\n */\nfunction hexToRgb(hex: string): string {\n const h = hex.replace(/^#/, '');\n const m = h.length === 3 ? h.split('').map(c => c + c).join('') : h;\n if (m.length !== 6) {\n console.warn(`[ThemeBridge] Invalid hex color: ${hex}`);\n return '0 0 0';\n }\n const int = parseInt(m, 16);\n const r = (int >> 16) & 255;\n const g = (int >> 8) & 255;\n const b = int & 255;\n return `${r} ${g} ${b}`;\n}\n\n/**\n * Normalize token value to CSS-ready format.\n *\n * - Hex colors are converted to RGB channels\n * - CSS variable references are passed through\n * - Already-formatted RGB values are passed through\n */\nfunction normalizeTokenValue(value: string): string {\n // Pass through CSS variable references\n if (value.startsWith('var(')) {\n return value;\n }\n\n // Convert hex to RGB\n if (value.startsWith('#')) {\n return hexToRgb(value);\n }\n\n // Already RGB or other format - use directly\n return value;\n}\n\n// ============================================================================\n// Main Generator\n// ============================================================================\n\n/**\n * Generate CSS variables from a ThemeBridgeConfig.\n */\nexport function generateThemeBridgeCss(config: ThemeBridgeConfig): ThemeBridgeOutput {\n // Validate required config\n if (!config || typeof config !== 'object') {\n throw new Error(\n '[ThemeBridge] Invalid config: expected an object with a \"tokens\" property.'\n );\n }\n\n if (!config.tokens || typeof config.tokens !== 'object' || Array.isArray(config.tokens)) {\n throw new Error(\n '[ThemeBridge] Missing \"tokens\" property in config. ' +\n 'ThemeBridgeConfig requires a \"tokens\" object with color definitions. ' +\n 'Example: { tokens: { primary: \"#6d28d9\", background: \"#ffffff\" } }'\n );\n }\n\n const cssVars: Record<string, string> = {};\n const cssChunks: string[] = [];\n\n // -------------------------------------------------------------------------\n // Color Tokens\n // -------------------------------------------------------------------------\n\n for (const [name, value] of Object.entries(config.tokens)) {\n cssVars[`--tb-${name}`] = normalizeTokenValue(value);\n }\n\n // -------------------------------------------------------------------------\n // Typography\n // -------------------------------------------------------------------------\n\n const typography = config.typography ?? {};\n cssVars['--tb-font-heading'] = typography.headingFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-body'] = typography.bodyFamily ?? SYSTEM_FONT_STACK;\n cssVars['--tb-font-weight-heading'] = String(typography.headingWeight ?? 600);\n cssVars['--tb-font-weight-body'] = String(typography.bodyWeight ?? 400);\n\n // Font sizes (standard scale)\n cssVars['--tb-fs-h1'] = '2.5rem';\n cssVars['--tb-fs-h2'] = '2rem';\n cssVars['--tb-fs-h3'] = '1.5rem';\n cssVars['--tb-fs-body'] = '1rem';\n\n // Letter spacing and line height\n cssVars['--tb-ls-heading'] = '-0.02em';\n cssVars['--tb-ls-body'] = '0';\n cssVars['--tb-lh-heading'] = '1.2';\n cssVars['--tb-lh-body'] = '1.6';\n\n // Text transforms\n cssVars['--tb-tt-heading'] = 'none';\n cssVars['--tb-fv-heading'] = 'normal';\n\n // -------------------------------------------------------------------------\n // Spacing\n // -------------------------------------------------------------------------\n\n const spacingPreset = SPACING_CONFIG[config.spacing ?? 'standard'];\n cssVars['--tb-space-mult'] = String(spacingPreset.mult);\n cssVars['--tb-rt-space-y'] = spacingPreset.rhythm;\n\n // -------------------------------------------------------------------------\n // Corners\n // -------------------------------------------------------------------------\n\n const corners = config.corners ?? 'rounded';\n const cornersPreset = CORNERS_CONFIG[corners];\n cssVars['--tb-radius-control'] = cornersPreset.control;\n cssVars['--tb-radius-card'] = cornersPreset.card;\n\n // -------------------------------------------------------------------------\n // Shadows\n // -------------------------------------------------------------------------\n\n const shadows = config.shadows ?? 'medium';\n const shadowsPreset = SHADOWS_CONFIG[shadows];\n cssVars['--tb-shadow-sm'] = shadowsPreset.sm;\n cssVars['--tb-shadow-md'] = shadowsPreset.md;\n cssVars['--tb-shadow-lg'] = shadowsPreset.lg;\n cssVars['--tb-shadow-elev'] = shadowsPreset.elev;\n\n // -------------------------------------------------------------------------\n // Motion\n // -------------------------------------------------------------------------\n\n cssVars['--tb-motion-duration'] = '180ms';\n cssVars['--tb-motion-ease'] = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\n\n // -------------------------------------------------------------------------\n // Generate CSS Variables Block\n // -------------------------------------------------------------------------\n\n const cssLines = Object.entries(cssVars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n\n cssChunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) {\\n${cssLines}\\n}`);\n\n // -------------------------------------------------------------------------\n // Component CSS (opt-in)\n // -------------------------------------------------------------------------\n\n if (config.components?.buttons) {\n const buttonCss = generateButtonsCss(config, corners, shadows);\n cssChunks.push(buttonCss);\n }\n\n if (config.components?.cards) {\n const cardCss = generateCardsCss(config, corners, shadows);\n cssChunks.push(cardCss);\n }\n\n if (config.components?.inputs) {\n const inputCss = generateInputsCss(config, corners, shadows);\n cssChunks.push(inputCss);\n }\n\n // -------------------------------------------------------------------------\n // Custom Overrides\n // -------------------------------------------------------------------------\n\n if (config.overrides) {\n const overrideCss = generateOverrideCss(config.overrides);\n cssChunks.push(overrideCss);\n }\n\n return {\n cssVars,\n css: cssChunks.join('\\n\\n'),\n };\n}\n\n// ============================================================================\n// Component CSS Generators\n// ============================================================================\n\nfunction generateButtonsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const buttonConfig = config.components?.buttons;\n\n // Get variants to generate\n let variants = getDefaultButtonVariants();\n\n if (typeof buttonConfig === 'object' && buttonConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(buttonConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: ButtonCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n fontWeight: 500,\n textTransform: 'none',\n };\n\n return generateButtonCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateCardsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const cardConfig = config.components?.cards;\n\n // Get variants to generate\n let variants = getDefaultCardVariants();\n\n if (typeof cardConfig === 'object' && cardConfig.variants) {\n // Filter to only requested variants\n const requestedIds = new Set(cardConfig.variants);\n variants = variants.filter(v => requestedIds.has(v.id as any));\n }\n\n const settings: CardCoreSettings = {\n corners,\n shadow: shadows,\n borderWidth: 'thin',\n };\n\n return generateCardCoreCss(SCOPE_ID, variants, settings);\n}\n\nfunction generateInputsCss(\n config: ThemeBridgeConfig,\n corners: ThemeBridgeCorners,\n shadows: ThemeBridgeShadows\n): string {\n const settings = getDefaultInputSettings();\n\n // Override with theme settings\n settings.corners = corners;\n settings.shadow = shadows === 'none' ? 'none' : 'low';\n\n return generateInputCoreCss(SCOPE_ID, settings);\n}\n\nfunction generateOverrideCss(overrides: Record<string, string>): string {\n const chunks: string[] = [];\n\n for (const [selector, rules] of Object.entries(overrides)) {\n chunks.push(`:where([data-theme-scope=\"${SCOPE_ID}\"]) ${selector} {\\n ${rules}\\n}`);\n }\n\n return chunks.join('\\n\\n');\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,6 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/theme/index.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }require('./chunk-DGUM43GV.js');
2
+
3
+ // src/theme/index.ts
2
4
  function applyTheme(theme, element) {
3
5
  const targetElement = _nullishCoalesce(element, () => ( (typeof document !== "undefined" ? document.documentElement : null)));
4
6
  if (!targetElement) {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme.js","../../src/theme/index.ts"],"names":[],"mappings":"AAAA;ACkBO,SAAS,UAAA,CAAW,KAAA,EAAgC,OAAA,EAA6B;AACtF,EAAA,MAAM,cAAA,mBAAgB,OAAA,UAAA,CAAY,OAAO,SAAA,IAAa,YAAA,EAAc,QAAA,CAAS,gBAAA,EAAkB,IAAA,GAAA;AAE/F,EAAA,GAAA,CAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAA,CAAQ,IAAA,CAAK,yDAAyD,CAAA;AACtE,IAAA,MAAA;AAAA,EACF;AAIA,EAAA,aAAA,CAAc,YAAA,CAAa,oBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAIxE;AAiBO,SAAS,WAAA,CAAY,QAAA,EAAmC,CAAC,CAAA,EAA4B;AAI1F,EAAA,OAAO,EAAE,GAAG,QAAQ,CAAA;AACtB;AD1CA;AACE;AACA;AACF,mEAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme.js","sourcesContent":[null,"/**\n * Theme utilities for Riverbank CMS\n *\n * These utilities help you work with Builder themes in your application.\n */\n\n/**\n * Apply a Builder theme to the DOM by injecting CSS variables\n *\n * @param theme - The theme object from Riverbank CMS\n * @param element - The element to apply the theme to (default: document.documentElement)\n *\n * @example\n * ```ts\n * const site = await client.getSite({ slug: 'my-site' });\n * applyTheme(site.theme);\n * ```\n */\nexport function applyTheme(theme: Record<string, unknown>, element?: HTMLElement): void {\n const targetElement = element ?? (typeof document !== 'undefined' ? document.documentElement : null);\n\n if (!targetElement) {\n console.warn('[Builder SDK] Cannot apply theme: no document available');\n return;\n }\n\n // Theme application will use the theme runtime from @riverbankcms/blocks\n // For now, we'll set a data attribute that the theme runtime can pick up\n targetElement.setAttribute('data-builder-theme', JSON.stringify(theme));\n\n // Note: Full CSS variable injection will be implemented once we\n // finalize the theme transformation API from @riverbankcms/blocks\n}\n\n/**\n * Create a theme object with type-safe defaults\n *\n * @param partial - Partial theme configuration\n * @returns Complete theme object\n *\n * @example\n * ```ts\n * const customTheme = createTheme({\n * colors: {\n * primary: '#007bff',\n * },\n * });\n * ```\n */\nexport function createTheme(partial: Record<string, unknown> = {}): Record<string, unknown> {\n // For now, return the partial as-is\n // Full theme creation with defaults will be implemented once we\n // finalize the theme structure from @riverbankcms/blocks\n return { ...partial };\n}\n\n/**\n * Re-export theme types from @riverbankcms/blocks when available\n */\nexport type Theme = Record<string, unknown>;\n"]}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme.js","../../src/theme/index.ts"],"names":[],"mappings":"AAAA,4MAA4B;AAC5B;AACA;ACgBO,SAAS,UAAA,CAAW,KAAA,EAAgC,OAAA,EAA6B;AACtF,EAAA,MAAM,cAAA,mBAAgB,OAAA,UAAA,CAAY,OAAO,SAAA,IAAa,YAAA,EAAc,QAAA,CAAS,gBAAA,EAAkB,IAAA,GAAA;AAE/F,EAAA,GAAA,CAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAA,CAAQ,IAAA,CAAK,yDAAyD,CAAA;AACtE,IAAA,MAAA;AAAA,EACF;AAIA,EAAA,aAAA,CAAc,YAAA,CAAa,oBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAIxE;AAiBO,SAAS,WAAA,CAAY,QAAA,EAAmC,CAAC,CAAA,EAA4B;AAI1F,EAAA,OAAO,EAAE,GAAG,QAAQ,CAAA;AACtB;ADxCA;AACE;AACA;AACF,mEAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/theme.js","sourcesContent":[null,"/**\n * Theme utilities for Riverbank CMS\n *\n * These utilities help you work with Builder themes in your application.\n */\n\n/**\n * Apply a Builder theme to the DOM by injecting CSS variables\n *\n * @param theme - The theme object from Riverbank CMS\n * @param element - The element to apply the theme to (default: document.documentElement)\n *\n * @example\n * ```ts\n * const site = await client.getSite({ slug: 'my-site' });\n * applyTheme(site.theme);\n * ```\n */\nexport function applyTheme(theme: Record<string, unknown>, element?: HTMLElement): void {\n const targetElement = element ?? (typeof document !== 'undefined' ? document.documentElement : null);\n\n if (!targetElement) {\n console.warn('[Builder SDK] Cannot apply theme: no document available');\n return;\n }\n\n // Theme application will use the theme runtime from @riverbankcms/blocks\n // For now, we'll set a data attribute that the theme runtime can pick up\n targetElement.setAttribute('data-builder-theme', JSON.stringify(theme));\n\n // Note: Full CSS variable injection will be implemented once we\n // finalize the theme transformation API from @riverbankcms/blocks\n}\n\n/**\n * Create a theme object with type-safe defaults\n *\n * @param partial - Partial theme configuration\n * @returns Complete theme object\n *\n * @example\n * ```ts\n * const customTheme = createTheme({\n * colors: {\n * primary: '#007bff',\n * },\n * });\n * ```\n */\nexport function createTheme(partial: Record<string, unknown> = {}): Record<string, unknown> {\n // For now, return the partial as-is\n // Full theme creation with defaults will be implemented once we\n // finalize the theme structure from @riverbankcms/blocks\n return { ...partial };\n}\n\n/**\n * Re-export theme types from @riverbankcms/blocks when available\n */\nexport type Theme = Record<string, unknown>;\n"]}
@@ -1,3 +1,5 @@
1
+ import "./chunk-BJTO5JO5.mjs";
2
+
1
3
  // src/theme/index.ts
2
4
  function applyTheme(theme, element) {
3
5
  const targetElement = element ?? (typeof document !== "undefined" ? document.documentElement : null);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme/index.ts"],"sourcesContent":["/**\n * Theme utilities for Riverbank CMS\n *\n * These utilities help you work with Builder themes in your application.\n */\n\n/**\n * Apply a Builder theme to the DOM by injecting CSS variables\n *\n * @param theme - The theme object from Riverbank CMS\n * @param element - The element to apply the theme to (default: document.documentElement)\n *\n * @example\n * ```ts\n * const site = await client.getSite({ slug: 'my-site' });\n * applyTheme(site.theme);\n * ```\n */\nexport function applyTheme(theme: Record<string, unknown>, element?: HTMLElement): void {\n const targetElement = element ?? (typeof document !== 'undefined' ? document.documentElement : null);\n\n if (!targetElement) {\n console.warn('[Builder SDK] Cannot apply theme: no document available');\n return;\n }\n\n // Theme application will use the theme runtime from @riverbankcms/blocks\n // For now, we'll set a data attribute that the theme runtime can pick up\n targetElement.setAttribute('data-builder-theme', JSON.stringify(theme));\n\n // Note: Full CSS variable injection will be implemented once we\n // finalize the theme transformation API from @riverbankcms/blocks\n}\n\n/**\n * Create a theme object with type-safe defaults\n *\n * @param partial - Partial theme configuration\n * @returns Complete theme object\n *\n * @example\n * ```ts\n * const customTheme = createTheme({\n * colors: {\n * primary: '#007bff',\n * },\n * });\n * ```\n */\nexport function createTheme(partial: Record<string, unknown> = {}): Record<string, unknown> {\n // For now, return the partial as-is\n // Full theme creation with defaults will be implemented once we\n // finalize the theme structure from @riverbankcms/blocks\n return { ...partial };\n}\n\n/**\n * Re-export theme types from @riverbankcms/blocks when available\n */\nexport type Theme = Record<string, unknown>;\n"],"mappings":";AAkBO,SAAS,WAAW,OAAgC,SAA6B;AACtF,QAAM,gBAAgB,YAAY,OAAO,aAAa,cAAc,SAAS,kBAAkB;AAE/F,MAAI,CAAC,eAAe;AAClB,YAAQ,KAAK,yDAAyD;AACtE;AAAA,EACF;AAIA,gBAAc,aAAa,sBAAsB,KAAK,UAAU,KAAK,CAAC;AAIxE;AAiBO,SAAS,YAAY,UAAmC,CAAC,GAA4B;AAI1F,SAAO,EAAE,GAAG,QAAQ;AACtB;","names":[]}
1
+ {"version":3,"sources":["../../src/theme/index.ts"],"sourcesContent":["/**\n * Theme utilities for Riverbank CMS\n *\n * These utilities help you work with Builder themes in your application.\n */\n\n/**\n * Apply a Builder theme to the DOM by injecting CSS variables\n *\n * @param theme - The theme object from Riverbank CMS\n * @param element - The element to apply the theme to (default: document.documentElement)\n *\n * @example\n * ```ts\n * const site = await client.getSite({ slug: 'my-site' });\n * applyTheme(site.theme);\n * ```\n */\nexport function applyTheme(theme: Record<string, unknown>, element?: HTMLElement): void {\n const targetElement = element ?? (typeof document !== 'undefined' ? document.documentElement : null);\n\n if (!targetElement) {\n console.warn('[Builder SDK] Cannot apply theme: no document available');\n return;\n }\n\n // Theme application will use the theme runtime from @riverbankcms/blocks\n // For now, we'll set a data attribute that the theme runtime can pick up\n targetElement.setAttribute('data-builder-theme', JSON.stringify(theme));\n\n // Note: Full CSS variable injection will be implemented once we\n // finalize the theme transformation API from @riverbankcms/blocks\n}\n\n/**\n * Create a theme object with type-safe defaults\n *\n * @param partial - Partial theme configuration\n * @returns Complete theme object\n *\n * @example\n * ```ts\n * const customTheme = createTheme({\n * colors: {\n * primary: '#007bff',\n * },\n * });\n * ```\n */\nexport function createTheme(partial: Record<string, unknown> = {}): Record<string, unknown> {\n // For now, return the partial as-is\n // Full theme creation with defaults will be implemented once we\n // finalize the theme structure from @riverbankcms/blocks\n return { ...partial };\n}\n\n/**\n * Re-export theme types from @riverbankcms/blocks when available\n */\nexport type Theme = Record<string, unknown>;\n"],"mappings":";;;AAkBO,SAAS,WAAW,OAAgC,SAA6B;AACtF,QAAM,gBAAgB,YAAY,OAAO,aAAa,cAAc,SAAS,kBAAkB;AAE/F,MAAI,CAAC,eAAe;AAClB,YAAQ,KAAK,yDAAyD;AACtE;AAAA,EACF;AAIA,gBAAc,aAAa,sBAAsB,KAAK,UAAU,KAAK,CAAC;AAIxE;AAiBO,SAAS,YAAY,UAAmC,CAAC,GAA4B;AAI1F,SAAO,EAAE,GAAG,QAAQ;AACtB;","names":[]}
@@ -1,4 +1,4 @@
1
- import { SdkCustomBlock, FieldDefinition } from '@riverbankcms/blocks';
1
+ import { S as SdkCustomBlock, F as FieldDefinition } from './schema-Bpy9N5ZI.js';
2
2
 
3
3
  /**
4
4
  * SDK Site Configuration Types