@riverbankcms/sdk 0.4.1 → 0.4.3

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 (116) hide show
  1. package/README.md +73 -0
  2. package/dist/cli/index.js +46 -5
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/client.d.mts +3 -3
  5. package/dist/client/client.d.ts +3 -3
  6. package/dist/client/client.js +90 -170
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/client/client.mjs +90 -170
  9. package/dist/client/client.mjs.map +1 -1
  10. package/dist/client/hooks.d.mts +3 -3
  11. package/dist/client/hooks.d.ts +3 -3
  12. package/dist/client/rendering/client.d.mts +1 -1
  13. package/dist/client/rendering/client.d.ts +1 -1
  14. package/dist/client/rendering/client.js +84 -142
  15. package/dist/client/rendering/client.js.map +1 -1
  16. package/dist/client/rendering/client.mjs +84 -142
  17. package/dist/client/rendering/client.mjs.map +1 -1
  18. package/dist/client/resolver-CYyfzTQ9.d.mts +61 -0
  19. package/dist/client/resolver-CYyfzTQ9.d.ts +61 -0
  20. package/dist/client/usePage--fGlyrgj.d.mts +6439 -0
  21. package/dist/client/usePage-BC8Q2E3t.d.mts +6431 -0
  22. package/dist/client/usePage-CE7X5NcN.d.ts +6439 -0
  23. package/dist/client/usePage-CHEybPMD.d.ts +6429 -0
  24. package/dist/client/usePage-D4fxZbRR.d.mts +6429 -0
  25. package/dist/client/usePage-DpRNZUtP.d.ts +6431 -0
  26. package/dist/server/{Layout-CHG77dhK.d.ts → Layout-CXI_VkhN.d.ts} +1 -1
  27. package/dist/server/{Layout-B_zUr9ci.d.mts → Layout-p6f3TLw9.d.mts} +1 -1
  28. package/dist/server/{chunk-XK2YIISA.mjs → chunk-24F6FTCI.mjs} +2 -2
  29. package/dist/server/{chunk-BUCJWG6G.js → chunk-2SSEBAHC.js} +5 -5
  30. package/dist/server/{chunk-BUCJWG6G.js.map → chunk-2SSEBAHC.js.map} +1 -1
  31. package/dist/server/{chunk-ZIM53VP6.js → chunk-6JBKKV3G.js} +27 -4
  32. package/dist/server/chunk-6JBKKV3G.js.map +1 -0
  33. package/dist/server/{chunk-ZEAJW6T3.mjs → chunk-ES6QDZUX.mjs} +3 -2
  34. package/dist/server/chunk-ES6QDZUX.mjs.map +1 -0
  35. package/dist/server/{chunk-SWPHIUVE.js → chunk-G35R7N7B.js} +3 -2
  36. package/dist/server/chunk-G35R7N7B.js.map +1 -0
  37. package/dist/server/{chunk-BOHTTHY5.mjs → chunk-I6K5REFT.mjs} +27 -4
  38. package/dist/server/chunk-I6K5REFT.mjs.map +1 -0
  39. package/dist/server/{chunk-SFQ7VF3G.mjs → chunk-LCYGQDAB.mjs} +10 -6
  40. package/dist/server/chunk-LCYGQDAB.mjs.map +1 -0
  41. package/dist/server/{chunk-P6CDRJN3.js → chunk-TNYU5EIO.js} +16 -12
  42. package/dist/server/chunk-TNYU5EIO.js.map +1 -0
  43. package/dist/server/{chunk-NKXS4TBK.mjs → chunk-U2NI3TS3.mjs} +87 -169
  44. package/dist/server/chunk-U2NI3TS3.mjs.map +1 -0
  45. package/dist/server/{chunk-IT5ICP43.js → chunk-VHDDXCK6.js} +94 -176
  46. package/dist/server/chunk-VHDDXCK6.js.map +1 -0
  47. package/dist/server/{components-Bo3LPpVb.d.mts → components-C75e4poV.d.mts} +20 -12
  48. package/dist/server/{components-ClFs4PUa.d.ts → components-Dhiemsjd.d.ts} +20 -12
  49. package/dist/server/components.d.mts +5 -5
  50. package/dist/server/components.d.ts +5 -5
  51. package/dist/server/components.js +3 -3
  52. package/dist/server/components.mjs +2 -2
  53. package/dist/server/config-validation.d.mts +2 -2
  54. package/dist/server/config-validation.d.ts +2 -2
  55. package/dist/server/config-validation.js +3 -3
  56. package/dist/server/config-validation.mjs +2 -2
  57. package/dist/server/config.d.mts +3 -3
  58. package/dist/server/config.d.ts +3 -3
  59. package/dist/server/config.js +3 -3
  60. package/dist/server/config.mjs +2 -2
  61. package/dist/server/data.d.mts +2 -2
  62. package/dist/server/data.d.ts +2 -2
  63. package/dist/server/{index-Dj7VKH34.d.mts → index-C6o9LPvq.d.mts} +1 -1
  64. package/dist/server/{index-DbSfrRA0.d.ts → index-CAwBj3-A.d.ts} +1 -1
  65. package/dist/server/index.d.mts +4 -4
  66. package/dist/server/index.d.ts +4 -4
  67. package/dist/server/{loadContent-C_FipaAC.d.mts → loadContent-CdXfuCuE.d.mts} +3 -3
  68. package/dist/server/{loadContent-C2SwqmXy.d.ts → loadContent-CsvQRoxb.d.ts} +3 -3
  69. package/dist/server/{loadPage-naVvoua8.d.ts → loadPage-BA0HiT-6.d.ts} +72 -28
  70. package/dist/server/{loadPage-DUHBXDEW.js → loadPage-DLC7DJZP.js} +3 -3
  71. package/dist/server/{loadPage-DUHBXDEW.js.map → loadPage-DLC7DJZP.js.map} +1 -1
  72. package/dist/server/{loadPage-LYVKY3WZ.mjs → loadPage-GEGN4UAL.mjs} +2 -2
  73. package/dist/server/{loadPage-mavT3Jae.d.mts → loadPage-p3AWwwrd.d.mts} +72 -28
  74. package/dist/server/metadata.d.mts +3 -3
  75. package/dist/server/metadata.d.ts +3 -3
  76. package/dist/server/navigation.d.mts +2 -2
  77. package/dist/server/navigation.d.ts +2 -2
  78. package/dist/server/rendering/server.d.mts +4 -4
  79. package/dist/server/rendering/server.d.ts +4 -4
  80. package/dist/server/rendering/server.js +4 -4
  81. package/dist/server/rendering/server.mjs +3 -3
  82. package/dist/server/rendering.d.mts +7 -7
  83. package/dist/server/rendering.d.ts +7 -7
  84. package/dist/server/rendering.js +5 -5
  85. package/dist/server/rendering.mjs +4 -4
  86. package/dist/server/routing.d.mts +78 -5
  87. package/dist/server/routing.d.ts +78 -5
  88. package/dist/server/routing.js +57 -3
  89. package/dist/server/routing.js.map +1 -1
  90. package/dist/server/routing.mjs +55 -1
  91. package/dist/server/routing.mjs.map +1 -1
  92. package/dist/server/server.d.mts +5 -5
  93. package/dist/server/server.d.ts +5 -5
  94. package/dist/server/server.js +2 -2
  95. package/dist/server/server.mjs +1 -1
  96. package/dist/server/theme-bridge.js +7 -7
  97. package/dist/server/theme-bridge.mjs +1 -1
  98. package/dist/server/{types-BA-J9K8r.d.mts → types-BLf-hE50.d.mts} +19 -6
  99. package/dist/server/{types-5XdVD2J1.d.ts → types-BWQ-TohG.d.ts} +19 -6
  100. package/dist/server/{types-CMqVHYLG.d.ts → types-CL916r6x.d.ts} +23 -1
  101. package/dist/server/{types-BC9eB2KH.d.mts → types-CdhKJrB0.d.mts} +1 -1
  102. package/dist/server/{types-CAnC529E.d.ts → types-Dj8B3QRb.d.ts} +1 -1
  103. package/dist/server/{types-CYfHxUhe.d.mts → types-txWsSxN7.d.mts} +23 -1
  104. package/dist/server/{validation-C7W2Fe0i.d.ts → validation-CoU8uAiu.d.ts} +1 -1
  105. package/dist/server/{validation-hg1sqhrt.d.mts → validation-DzvDwwRo.d.mts} +1 -1
  106. package/package.json +3 -3
  107. package/dist/server/chunk-BOHTTHY5.mjs.map +0 -1
  108. package/dist/server/chunk-IT5ICP43.js.map +0 -1
  109. package/dist/server/chunk-NKXS4TBK.mjs.map +0 -1
  110. package/dist/server/chunk-P6CDRJN3.js.map +0 -1
  111. package/dist/server/chunk-SFQ7VF3G.mjs.map +0 -1
  112. package/dist/server/chunk-SWPHIUVE.js.map +0 -1
  113. package/dist/server/chunk-ZEAJW6T3.mjs.map +0 -1
  114. package/dist/server/chunk-ZIM53VP6.js.map +0 -1
  115. /package/dist/server/{chunk-XK2YIISA.mjs.map → chunk-24F6FTCI.mjs.map} +0 -0
  116. /package/dist/server/{loadPage-LYVKY3WZ.mjs.map → loadPage-GEGN4UAL.mjs.map} +0 -0
@@ -1,12 +1,12 @@
1
- import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-BcjWPXvh.mjs';
2
- export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-BcjWPXvh.mjs';
1
+ import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage--fGlyrgj.mjs';
2
+ export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage--fGlyrgj.mjs';
3
3
  import '@riverbankcms/ai';
4
4
  import 'zod';
5
5
  import '@riverbankcms/media-storage-supabase';
6
6
  import '@riverbankcms/db';
7
7
  import 'react/jsx-runtime';
8
8
  import 'react';
9
- import './resolver-BhueZVxZ.mjs';
9
+ import './resolver-CYyfzTQ9.mjs';
10
10
 
11
11
  /**
12
12
  * Server-side helper to fetch content (page or entry) by path.
@@ -1,12 +1,12 @@
1
- import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-CyYpOJud.js';
2
- export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-CyYpOJud.js';
1
+ import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-CE7X5NcN.js';
2
+ export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-CE7X5NcN.js';
3
3
  import '@riverbankcms/ai';
4
4
  import 'zod';
5
5
  import '@riverbankcms/media-storage-supabase';
6
6
  import '@riverbankcms/db';
7
7
  import 'react/jsx-runtime';
8
8
  import 'react';
9
- import './resolver-BhueZVxZ.js';
9
+ import './resolver-CYyfzTQ9.js';
10
10
 
11
11
  /**
12
12
  * Server-side helper to fetch content (page or entry) by path.
@@ -7161,121 +7161,53 @@ var LinkNode = ({
7161
7161
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("a", { href, ...rest, children });
7162
7162
  };
7163
7163
 
7164
- // ../media-core/dist/chunk-JAKU4BKA.mjs
7165
- var DEFAULT_BASE_PATH = "/api/img";
7166
- var formatNumber = (value) => Number.isInteger(value) ? value.toString() : value.toFixed(6).replace(/0+$/, "").replace(/\.$/, "");
7167
- var addParam = (search, key, value) => {
7168
- if (value === void 0) return;
7169
- switch (key) {
7170
- case "fpX":
7171
- search.set("fp-x", formatNumber(value));
7172
- break;
7173
- case "fpY":
7174
- search.set("fp-y", formatNumber(value));
7175
- break;
7176
- case "rect": {
7177
- const rect = value;
7178
- if (!rect) break;
7179
- search.set("rect", rect.map(formatNumber).join(","));
7180
- break;
7181
- }
7182
- case "autoFormat":
7183
- if (value) {
7184
- search.append("auto", "format");
7185
- }
7186
- break;
7187
- case "invert":
7188
- search.set("invert", value ? "true" : "false");
7189
- break;
7190
- default:
7191
- search.set(
7192
- key,
7193
- typeof value === "number" ? formatNumber(value) : String(value)
7194
- );
7195
- }
7196
- };
7197
- var ORDER = [
7198
- "w",
7199
- "h",
7200
- "dpr",
7201
- "fit",
7202
- "crop",
7203
- "fpX",
7204
- "fpY",
7205
- "rect",
7206
- "q",
7207
- "fm",
7208
- "autoFormat",
7209
- "bg",
7210
- "flip",
7211
- "or",
7212
- "pad",
7213
- "blur",
7214
- "sharp",
7215
- "invert",
7216
- "sat",
7217
- "cs"
7218
- ];
7219
- var getImageUrl = (asset, params = {}, basePath = DEFAULT_BASE_PATH) => {
7220
- const trimmedBase = basePath.endsWith("/") ? basePath.slice(0, Math.max(basePath.length - 1, 0)) : basePath;
7221
- const path = `${trimmedBase}/${encodeURIComponent(asset.id)}`;
7222
- const searchParams = new URLSearchParams();
7223
- ORDER.forEach((key) => {
7224
- addParam(searchParams, key, params[key]);
7225
- });
7226
- const query = searchParams.toString();
7227
- return query ? `${path}?${query}` : path;
7228
- };
7164
+ // ../media-core/dist/chunk-ZBK775TB.mjs
7165
+ function getDirectImageUrl(supabaseUrl, storagePath, storageBucket = "media", options) {
7166
+ const baseUrl = supabaseUrl.replace(/\/$/, "");
7167
+ const encodedPath = storagePath.split("/").map((segment) => encodeURIComponent(segment)).join("/");
7168
+ const isSvg = storagePath.toLowerCase().endsWith(".svg");
7169
+ if (options && !isSvg && (options.width || options.height)) {
7170
+ const params = new URLSearchParams();
7171
+ if (options.width) params.set("width", String(options.width));
7172
+ if (options.height) params.set("height", String(options.height));
7173
+ if (options.quality) params.set("quality", String(options.quality));
7174
+ if (options.resize) params.set("resize", options.resize);
7175
+ return `${baseUrl}/storage/v1/render/image/public/${storageBucket}/${encodedPath}?${params.toString()}`;
7176
+ }
7177
+ return `${baseUrl}/storage/v1/object/public/${storageBucket}/${encodedPath}`;
7178
+ }
7229
7179
 
7230
- // ../blocks/src/system/runtime/utils/api-url.ts
7231
- function resolveMultiEnvDashboardUrl() {
7232
- const env = process.env.RIVERBANK_ENV;
7233
- if (!env) return null;
7234
- const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`;
7235
- const dashboardUrl = process.env[envKey];
7236
- if (dashboardUrl) {
7237
- return dashboardUrl.replace(/\/$/, "");
7238
- }
7239
- return null;
7180
+ // ../blocks/src/system/runtime/nodes/media.tsx
7181
+ var import_jsx_runtime9 = require("react/jsx-runtime");
7182
+ var _contextSupabaseUrl;
7183
+ function setContextSupabaseUrl(url) {
7184
+ _contextSupabaseUrl = url?.replace(/\/$/, "");
7240
7185
  }
7241
- function getCmsApiUrl() {
7242
- const multiEnvDashboard = resolveMultiEnvDashboardUrl();
7243
- if (multiEnvDashboard) {
7244
- return `${multiEnvDashboard}/api`;
7186
+ function getSupabaseUrl() {
7187
+ if (_contextSupabaseUrl) {
7188
+ return _contextSupabaseUrl;
7245
7189
  }
7246
- const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL;
7247
- if (builderApiUrl) {
7248
- return builderApiUrl.replace(/\/$/, "");
7249
- }
7250
- const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;
7251
- if (dashboardUrl) {
7252
- const base = dashboardUrl.replace(/\/$/, "");
7253
- return `${base}/api`;
7254
- }
7255
- const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
7256
- if (legacyApiUrl) {
7257
- return legacyApiUrl.replace(/\/$/, "");
7190
+ const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
7191
+ if (!url) {
7192
+ throw new Error(
7193
+ "NEXT_PUBLIC_SUPABASE_URL is not configured. Set it to your Supabase project URL (e.g., https://xxx.supabase.co)"
7194
+ );
7258
7195
  }
7259
- throw new Error(
7260
- "Dashboard URL not configured. Either:\n 1. Set RIVERBANK_ENV with RIVERBANK_LOCAL_DASHBOARD_URL / RIVERBANK_REMOTE_DASHBOARD_URL\n 2. Set NEXT_PUBLIC_BUILDER_API_URL (SDK sites)\n 3. Set NEXT_PUBLIC_DASHBOARD_URL (frontend app)"
7261
- );
7196
+ return url.replace(/\/$/, "");
7262
7197
  }
7263
-
7264
- // ../blocks/src/system/runtime/nodes/media.tsx
7265
- var import_jsx_runtime9 = require("react/jsx-runtime");
7266
7198
  var debugMediaNodeLog = (...args) => {
7267
7199
  if (typeof window !== "undefined" && window.__DEBUG_MEDIA_NODE__) {
7268
7200
  console.log("[MediaNode]", ...args);
7269
7201
  }
7270
7202
  };
7271
- var MediaNode = ({ value, className, style, previewKey }) => {
7203
+ var MediaNode = ({ value, className, style }) => {
7272
7204
  if (!value) return null;
7273
7205
  if (value.type === "video") {
7274
7206
  const src = value.src;
7275
7207
  if (!src) return null;
7276
7208
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("video", { className, style, src, autoPlay: true, muted: true, loop: true, playsInline: true, "aria-label": value.alt ?? "" });
7277
7209
  }
7278
- const imageUrl = resolveImageUrl(value, { previewKey });
7210
+ const imageUrl = resolveImageUrl(value);
7279
7211
  if (!imageUrl) {
7280
7212
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
7281
7213
  "div",
@@ -7286,56 +7218,36 @@ var MediaNode = ({ value, className, style, previewKey }) => {
7286
7218
  }
7287
7219
  );
7288
7220
  }
7289
- const isCrossOrigin = typeof window !== "undefined" && imageUrl.startsWith("http") && !imageUrl.startsWith(window.location.origin);
7290
- const isApiRoute = imageUrl.includes("/api/img") || imageUrl.includes("/api/public/img");
7291
- const crossOriginMode = isCrossOrigin && isApiRoute ? "use-credentials" : isCrossOrigin ? "anonymous" : void 0;
7221
+ const hotspotStyle = value.transform?.hotspot ? { objectPosition: `${value.transform.hotspot.x * 100}% ${value.transform.hotspot.y * 100}%` } : void 0;
7292
7222
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
7293
7223
  "img",
7294
7224
  {
7295
7225
  src: imageUrl,
7296
7226
  alt: value.alt ?? "",
7297
7227
  className,
7298
- style,
7299
- loading: "lazy",
7300
- crossOrigin: crossOriginMode
7228
+ style: mergeStyles(style, hotspotStyle),
7229
+ loading: "lazy"
7301
7230
  }
7302
7231
  );
7303
7232
  };
7304
- function resolveImageUrl(value, options = {}) {
7233
+ function resolveImageUrl(value) {
7305
7234
  if (value.type !== "image") return void 0;
7306
- const params = {};
7307
- const rect = value.transform?.rect;
7308
- const hotspot = value.transform?.hotspot;
7309
- if (rect && Array.isArray(rect) && rect.length === 4) {
7310
- params.rect = rect.join(",");
7311
- }
7312
- if (hotspot && typeof hotspot.x === "number" && typeof hotspot.y === "number") {
7313
- const x = clamp(hotspot.x);
7314
- const y = clamp(hotspot.y);
7315
- params.hotspot = `${x.toFixed(4)},${y.toFixed(4)}`;
7316
- }
7317
7235
  debugMediaNodeLog("resolveImageUrl input", {
7318
7236
  assetId: value.assetId,
7237
+ storagePath: value.storagePath,
7319
7238
  src: value.src,
7320
- type: value.type,
7321
- hasPreviewKey: !!options.previewKey
7239
+ type: value.type
7322
7240
  });
7323
- if (value.assetId) {
7324
- const cmsApiBase = getCmsApiUrl();
7325
- const basePath = `${cmsApiBase}/public/img`;
7326
- let resolved = getImageUrl({ id: value.assetId }, params, basePath);
7327
- if (options.previewKey) {
7328
- const separator = resolved.includes("?") ? "&" : "?";
7329
- resolved = `${resolved}${separator}preview_key=${encodeURIComponent(options.previewKey)}`;
7330
- }
7331
- debugMediaNodeLog("resolve:asset-id", {
7332
- assetId: value.assetId,
7333
- cmsApiBase,
7334
- basePath,
7335
- resolvedUrl: resolved,
7336
- hasPreviewKey: !!options.previewKey
7241
+ if (value.storagePath && value.storagePath.length > 0) {
7242
+ const supabaseUrl = getSupabaseUrl();
7243
+ const bucket = value.storageBucket ?? "media";
7244
+ const directUrl = getDirectImageUrl(supabaseUrl, value.storagePath, bucket);
7245
+ debugMediaNodeLog("resolve:direct-supabase", {
7246
+ storagePath: value.storagePath,
7247
+ bucket,
7248
+ directUrl
7337
7249
  });
7338
- return resolved;
7250
+ return directUrl;
7339
7251
  }
7340
7252
  if (typeof value.src === "string" && value.src.length > 0) {
7341
7253
  debugMediaNodeLog("resolve:explicit-src", { src: value.src });
@@ -7344,9 +7256,6 @@ function resolveImageUrl(value, options = {}) {
7344
7256
  debugMediaNodeLog("resolve:fallback-url", { fallbackUrl: value.url ?? null });
7345
7257
  return value.url ?? void 0;
7346
7258
  }
7347
- function clamp(v, min6 = 0, max6 = 1) {
7348
- return Math.min(Math.max(v, min6), max6);
7349
- }
7350
7259
 
7351
7260
  // ../blocks/src/system/runtime/nodes/form.server.tsx
7352
7261
  var import_jsx_runtime10 = require("react/jsx-runtime");
@@ -14777,6 +14686,7 @@ function PageRenderer({
14777
14686
  blockOverrides,
14778
14687
  sdkConfig
14779
14688
  }) {
14689
+ setContextSupabaseUrl(dataContext?.supabaseUrl);
14780
14690
  if (!page || page.blocks.length === 0) {
14781
14691
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "p-6 text-sm", style: textColorStyle("mutedText"), children: "No blocks found." });
14782
14692
  }
@@ -14889,8 +14799,6 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
14889
14799
  return wrapBlock && block.id ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: rendered });
14890
14800
  }
14891
14801
  try {
14892
- const BlockComponent = OverrideComponent ?? getCachedBlockComponent(definition.manifest);
14893
- const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
14894
14802
  const routes = routeMap ?? dataContext?.routes;
14895
14803
  const hydratedContent = routes ? hydrateManifestLinks(definition.manifest, data, routes) : data;
14896
14804
  const resolved = resolveBlockData({
@@ -14898,35 +14806,45 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
14898
14806
  definition,
14899
14807
  dataContext
14900
14808
  });
14901
- const rootContext = {
14902
- $root: {
14903
- siteId: dataContext?.siteId ?? null,
14904
- pageId: dataContext?.pageId ?? null,
14905
- previewStage: dataContext?.previewStage ?? "published",
14906
- ...routes ? { routes } : {},
14907
- // Occurrence and content entry context for template pages
14908
- occurrenceContext: dataContext?.occurrenceContext ?? null,
14909
- contentEntry: dataContext?.contentEntry ?? null
14910
- }
14809
+ const baseProps = {
14810
+ content: hydratedContent,
14811
+ theme: themeTokens,
14812
+ themeConfig,
14813
+ data: resolved,
14814
+ blockId: block.id ?? null,
14815
+ blockKind: block.kind
14911
14816
  };
14912
- const blockBindings = block.bindings ?? void 0;
14913
- const fragmentRegistry2 = getFragmentRegistry();
14914
- const rendered = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
14915
- BlockComponent,
14916
- {
14917
- content: hydratedContent,
14918
- theme: themeTokens,
14919
- themeConfig,
14920
- registry,
14921
- pathBase,
14922
- data: resolved,
14923
- blockId: block.id ?? null,
14924
- blockKind: block.kind,
14925
- blockBindings,
14926
- viewModelOverrides: rootContext,
14927
- fragmentRegistry: fragmentRegistry2
14928
- }
14929
- );
14817
+ let rendered;
14818
+ if (OverrideComponent) {
14819
+ rendered = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(OverrideComponent, { ...baseProps });
14820
+ } else {
14821
+ const BlockComponent = getCachedBlockComponent(definition.manifest);
14822
+ const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
14823
+ const rootContext = {
14824
+ $root: {
14825
+ siteId: dataContext?.siteId ?? null,
14826
+ pageId: dataContext?.pageId ?? null,
14827
+ previewStage: dataContext?.previewStage ?? "published",
14828
+ ...routes ? { routes } : {},
14829
+ // Occurrence and content entry context for template pages
14830
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
14831
+ contentEntry: dataContext?.contentEntry ?? null
14832
+ }
14833
+ };
14834
+ const blockBindings = block.bindings ?? void 0;
14835
+ const fragmentRegistry2 = getFragmentRegistry();
14836
+ rendered = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
14837
+ BlockComponent,
14838
+ {
14839
+ ...baseProps,
14840
+ registry,
14841
+ pathBase,
14842
+ blockBindings,
14843
+ viewModelOverrides: rootContext,
14844
+ fragmentRegistry: fragmentRegistry2
14845
+ }
14846
+ );
14847
+ }
14930
14848
  if (wrapBlock && block.id) {
14931
14849
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_jsx_runtime21.Fragment, { children: wrapBlock(block.id, rendered) });
14932
14850
  }
@@ -15005,6 +14923,7 @@ function Page({
15005
14923
  usePlaceholders = false,
15006
14924
  blockOverrides,
15007
14925
  sdkConfig,
14926
+ supabaseUrl,
15008
14927
  dataContext
15009
14928
  }) {
15010
14929
  const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
@@ -15021,7 +14940,8 @@ function Page({
15021
14940
  resolvedData,
15022
14941
  routes: routeMap,
15023
14942
  occurrenceContext: dataContext?.occurrenceContext ?? null,
15024
- contentEntry: dataContext?.contentEntry ?? null
14943
+ contentEntry: dataContext?.contentEntry ?? null,
14944
+ supabaseUrl
15025
14945
  },
15026
14946
  routeMap,
15027
14947
  wrapBlock,
@@ -16626,7 +16546,7 @@ var ENDPOINT_DEFINITIONS = {
16626
16546
  var API_ENDPOINTS = ENDPOINT_DEFINITIONS;
16627
16547
 
16628
16548
  // ../api/src/url.ts
16629
- function getCmsApiUrl2() {
16549
+ function getCmsApiUrl() {
16630
16550
  if (typeof window !== "undefined") {
16631
16551
  return "/api";
16632
16552
  }
@@ -16648,7 +16568,7 @@ function getCmsApiUrl2() {
16648
16568
  );
16649
16569
  }
16650
16570
  function resolveApiBaseUrl() {
16651
- return getCmsApiUrl2();
16571
+ return getCmsApiUrl();
16652
16572
  }
16653
16573
 
16654
16574
  // ../api/src/request.ts