@riverbankcms/sdk 0.4.0 → 0.4.2

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 (124) 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 +80 -170
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/client/client.mjs +80 -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 +80 -142
  15. package/dist/client/rendering/client.js.map +1 -1
  16. package/dist/client/rendering/client.mjs +80 -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-BC8Q2E3t.d.mts +6431 -0
  21. package/dist/client/usePage-CHEybPMD.d.ts +6429 -0
  22. package/dist/client/usePage-D4fxZbRR.d.mts +6429 -0
  23. package/dist/client/usePage-DpRNZUtP.d.ts +6431 -0
  24. package/dist/server/{Layout-B_zUr9ci.d.mts → Layout-ByUnm35V.d.mts} +1 -1
  25. package/dist/server/{Layout-CHG77dhK.d.ts → Layout-kRv5sU81.d.ts} +1 -1
  26. package/dist/server/{chunk-ZIM53VP6.js → chunk-6JBKKV3G.js} +27 -4
  27. package/dist/server/chunk-6JBKKV3G.js.map +1 -0
  28. package/dist/server/{chunk-SFQ7VF3G.mjs → chunk-7BOIO2S7.mjs} +7 -5
  29. package/dist/server/{chunk-SFQ7VF3G.mjs.map → chunk-7BOIO2S7.mjs.map} +1 -1
  30. package/dist/server/{chunk-M5KTLZTD.mjs → chunk-A2FZMRDW.mjs} +3 -2
  31. package/dist/server/chunk-A2FZMRDW.mjs.map +1 -0
  32. package/dist/server/{chunk-P6CDRJN3.js → chunk-BLKVTULP.js} +13 -11
  33. package/dist/server/chunk-BLKVTULP.js.map +1 -0
  34. package/dist/server/{chunk-BOHTTHY5.mjs → chunk-I6K5REFT.mjs} +27 -4
  35. package/dist/server/chunk-I6K5REFT.mjs.map +1 -0
  36. package/dist/server/{chunk-BUCJWG6G.js → chunk-NW5KHH4A.js} +5 -5
  37. package/dist/server/{chunk-BUCJWG6G.js.map → chunk-NW5KHH4A.js.map} +1 -1
  38. package/dist/server/{chunk-XK2YIISA.mjs → chunk-SPXMMX3C.mjs} +2 -2
  39. package/dist/server/{chunk-FPYK6527.js → chunk-SWPHIUVE.js} +7 -6
  40. package/dist/server/chunk-SWPHIUVE.js.map +1 -0
  41. package/dist/server/{chunk-IT5ICP43.js → chunk-TKMA6D6U.js} +139 -229
  42. package/dist/server/chunk-TKMA6D6U.js.map +1 -0
  43. package/dist/server/{chunk-NKXS4TBK.mjs → chunk-TNRADRPH.mjs} +79 -169
  44. package/dist/server/chunk-TNRADRPH.mjs.map +1 -0
  45. package/dist/server/{chunk-G4CKM4EN.js → chunk-Y7347JMZ.js} +3 -2
  46. package/dist/server/chunk-Y7347JMZ.js.map +1 -0
  47. package/dist/server/{chunk-VVFYHAUD.mjs → chunk-ZEAJW6T3.mjs} +5 -4
  48. package/dist/server/chunk-ZEAJW6T3.mjs.map +1 -0
  49. package/dist/server/{components-Ci5nlyUj.d.mts → components-CY8jDQjv.d.mts} +20 -12
  50. package/dist/server/{components-BYxloYJm.d.ts → components-D1Z2mSDr.d.ts} +20 -12
  51. package/dist/server/components.d.mts +6 -6
  52. package/dist/server/components.d.ts +6 -6
  53. package/dist/server/components.js +3 -3
  54. package/dist/server/components.mjs +2 -2
  55. package/dist/server/config-validation.d.mts +2 -2
  56. package/dist/server/config-validation.d.ts +2 -2
  57. package/dist/server/config-validation.js +3 -3
  58. package/dist/server/config-validation.mjs +2 -2
  59. package/dist/server/config.d.mts +3 -3
  60. package/dist/server/config.d.ts +3 -3
  61. package/dist/server/config.js +3 -3
  62. package/dist/server/config.mjs +2 -2
  63. package/dist/server/data.d.mts +7 -5
  64. package/dist/server/data.d.ts +7 -5
  65. package/dist/server/data.js +2 -2
  66. package/dist/server/data.mjs +1 -1
  67. package/dist/server/{index-DbSfrRA0.d.ts → index-DCIz9Ptv.d.ts} +1 -1
  68. package/dist/server/{index-Dj7VKH34.d.mts → index-DFQwtj3J.d.mts} +1 -1
  69. package/dist/server/index.d.mts +4 -4
  70. package/dist/server/index.d.ts +4 -4
  71. package/dist/server/{loadContent-Czu7xTOU.d.mts → loadContent-CWuE8FCx.d.mts} +4 -4
  72. package/dist/server/{loadContent-BqQ-VPMW.d.ts → loadContent-DynBuR5f.d.ts} +4 -4
  73. package/dist/server/{loadPage-Dw57_n5N.d.mts → loadPage-B8RmlYgV.d.mts} +80 -28
  74. package/dist/server/{loadPage-BElEkA_J.d.ts → loadPage-BTkKpizX.d.ts} +80 -28
  75. package/dist/server/loadPage-DUHBXDEW.js +11 -0
  76. package/dist/server/{loadPage-E3ZC6NHB.js.map → loadPage-DUHBXDEW.js.map} +1 -1
  77. package/dist/server/{loadPage-E7L7NMR3.mjs → loadPage-LYVKY3WZ.mjs} +3 -3
  78. package/dist/server/metadata.d.mts +4 -4
  79. package/dist/server/metadata.d.ts +4 -4
  80. package/dist/server/navigation.d.mts +2 -2
  81. package/dist/server/navigation.d.ts +2 -2
  82. package/dist/server/rendering/server.d.mts +5 -5
  83. package/dist/server/rendering/server.d.ts +5 -5
  84. package/dist/server/rendering/server.js +4 -4
  85. package/dist/server/rendering/server.mjs +3 -3
  86. package/dist/server/rendering.d.mts +8 -8
  87. package/dist/server/rendering.d.ts +8 -8
  88. package/dist/server/rendering.js +6 -6
  89. package/dist/server/rendering.mjs +5 -5
  90. package/dist/server/routing.d.mts +79 -6
  91. package/dist/server/routing.d.ts +79 -6
  92. package/dist/server/routing.js +57 -3
  93. package/dist/server/routing.js.map +1 -1
  94. package/dist/server/routing.mjs +55 -1
  95. package/dist/server/routing.mjs.map +1 -1
  96. package/dist/server/server.d.mts +6 -6
  97. package/dist/server/server.d.ts +6 -6
  98. package/dist/server/server.js +3 -3
  99. package/dist/server/server.mjs +2 -2
  100. package/dist/server/theme-bridge.js +7 -7
  101. package/dist/server/theme-bridge.mjs +1 -1
  102. package/dist/server/{types-5XdVD2J1.d.ts → types-BiRZnxDx.d.ts} +17 -6
  103. package/dist/server/{types-CMqVHYLG.d.ts → types-CL916r6x.d.ts} +23 -1
  104. package/dist/server/{types-BuZJWVmj.d.mts → types-CbagRQ_7.d.mts} +15 -0
  105. package/dist/server/{types-BA-J9K8r.d.mts → types-CdrJqlKx.d.mts} +17 -6
  106. package/dist/server/{types-BC9eB2KH.d.mts → types-DkKEctWn.d.mts} +1 -1
  107. package/dist/server/{types-DSFvXKhO.d.ts → types-DuQCNVV0.d.ts} +15 -0
  108. package/dist/server/{types-CAnC529E.d.ts → types-oCM-fw4O.d.ts} +1 -1
  109. package/dist/server/{types-CYfHxUhe.d.mts → types-txWsSxN7.d.mts} +23 -1
  110. package/dist/server/{validation-C7W2Fe0i.d.ts → validation-CoU8uAiu.d.ts} +1 -1
  111. package/dist/server/{validation-hg1sqhrt.d.mts → validation-DzvDwwRo.d.mts} +1 -1
  112. package/package.json +1 -1
  113. package/dist/server/chunk-BOHTTHY5.mjs.map +0 -1
  114. package/dist/server/chunk-FPYK6527.js.map +0 -1
  115. package/dist/server/chunk-G4CKM4EN.js.map +0 -1
  116. package/dist/server/chunk-IT5ICP43.js.map +0 -1
  117. package/dist/server/chunk-M5KTLZTD.mjs.map +0 -1
  118. package/dist/server/chunk-NKXS4TBK.mjs.map +0 -1
  119. package/dist/server/chunk-P6CDRJN3.js.map +0 -1
  120. package/dist/server/chunk-VVFYHAUD.mjs.map +0 -1
  121. package/dist/server/chunk-ZIM53VP6.js.map +0 -1
  122. package/dist/server/loadPage-E3ZC6NHB.js +0 -11
  123. /package/dist/server/{chunk-XK2YIISA.mjs.map → chunk-SPXMMX3C.mjs.map} +0 -0
  124. /package/dist/server/{loadPage-E7L7NMR3.mjs.map → loadPage-LYVKY3WZ.mjs.map} +0 -0
@@ -57,121 +57,46 @@ function clsx() {
57
57
  }
58
58
  var clsx_default = clsx;
59
59
 
60
- // ../media-core/dist/chunk-JAKU4BKA.mjs
61
- var DEFAULT_BASE_PATH = "/api/img";
62
- var formatNumber = (value) => Number.isInteger(value) ? value.toString() : value.toFixed(6).replace(/0+$/, "").replace(/\.$/, "");
63
- var addParam = (search, key, value) => {
64
- if (value === void 0) return;
65
- switch (key) {
66
- case "fpX":
67
- search.set("fp-x", formatNumber(value));
68
- break;
69
- case "fpY":
70
- search.set("fp-y", formatNumber(value));
71
- break;
72
- case "rect": {
73
- const rect = value;
74
- if (!rect) break;
75
- search.set("rect", rect.map(formatNumber).join(","));
76
- break;
77
- }
78
- case "autoFormat":
79
- if (value) {
80
- search.append("auto", "format");
81
- }
82
- break;
83
- case "invert":
84
- search.set("invert", value ? "true" : "false");
85
- break;
86
- default:
87
- search.set(
88
- key,
89
- typeof value === "number" ? formatNumber(value) : String(value)
90
- );
91
- }
92
- };
93
- var ORDER = [
94
- "w",
95
- "h",
96
- "dpr",
97
- "fit",
98
- "crop",
99
- "fpX",
100
- "fpY",
101
- "rect",
102
- "q",
103
- "fm",
104
- "autoFormat",
105
- "bg",
106
- "flip",
107
- "or",
108
- "pad",
109
- "blur",
110
- "sharp",
111
- "invert",
112
- "sat",
113
- "cs"
114
- ];
115
- var getImageUrl = (asset, params = {}, basePath = DEFAULT_BASE_PATH) => {
116
- const trimmedBase = basePath.endsWith("/") ? basePath.slice(0, Math.max(basePath.length - 1, 0)) : basePath;
117
- const path = `${trimmedBase}/${encodeURIComponent(asset.id)}`;
118
- const searchParams = new URLSearchParams();
119
- ORDER.forEach((key) => {
120
- addParam(searchParams, key, params[key]);
121
- });
122
- const query = searchParams.toString();
123
- return query ? `${path}?${query}` : path;
124
- };
125
-
126
- // ../blocks/src/system/runtime/utils/api-url.ts
127
- function resolveMultiEnvDashboardUrl() {
128
- const env = process.env.RIVERBANK_ENV;
129
- if (!env) return null;
130
- const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`;
131
- const dashboardUrl = process.env[envKey];
132
- if (dashboardUrl) {
133
- return dashboardUrl.replace(/\/$/, "");
134
- }
135
- return null;
136
- }
137
- function getCmsApiUrl() {
138
- const multiEnvDashboard = resolveMultiEnvDashboardUrl();
139
- if (multiEnvDashboard) {
140
- return `${multiEnvDashboard}/api`;
141
- }
142
- const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL;
143
- if (builderApiUrl) {
144
- return builderApiUrl.replace(/\/$/, "");
145
- }
146
- const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;
147
- if (dashboardUrl) {
148
- const base = dashboardUrl.replace(/\/$/, "");
149
- return `${base}/api`;
150
- }
151
- const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
152
- if (legacyApiUrl) {
153
- return legacyApiUrl.replace(/\/$/, "");
154
- }
155
- throw new Error(
156
- "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)"
157
- );
60
+ // ../media-core/dist/chunk-ZBK775TB.mjs
61
+ function getDirectImageUrl(supabaseUrl, storagePath, storageBucket = "media", options) {
62
+ const baseUrl = supabaseUrl.replace(/\/$/, "");
63
+ const encodedPath = storagePath.split("/").map((segment) => encodeURIComponent(segment)).join("/");
64
+ const isSvg = storagePath.toLowerCase().endsWith(".svg");
65
+ if (options && !isSvg && (options.width || options.height)) {
66
+ const params = new URLSearchParams();
67
+ if (options.width) params.set("width", String(options.width));
68
+ if (options.height) params.set("height", String(options.height));
69
+ if (options.quality) params.set("quality", String(options.quality));
70
+ if (options.resize) params.set("resize", options.resize);
71
+ return `${baseUrl}/storage/v1/render/image/public/${storageBucket}/${encodedPath}?${params.toString()}`;
72
+ }
73
+ return `${baseUrl}/storage/v1/object/public/${storageBucket}/${encodedPath}`;
158
74
  }
159
75
 
160
76
  // ../blocks/src/system/runtime/nodes/media.tsx
161
77
  import { jsx } from "react/jsx-runtime";
78
+ function getSupabaseUrl() {
79
+ const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
80
+ if (!url) {
81
+ throw new Error(
82
+ "NEXT_PUBLIC_SUPABASE_URL is not configured. Set it to your Supabase project URL (e.g., https://xxx.supabase.co)"
83
+ );
84
+ }
85
+ return url.replace(/\/$/, "");
86
+ }
162
87
  var debugMediaNodeLog = (...args) => {
163
88
  if (typeof window !== "undefined" && window.__DEBUG_MEDIA_NODE__) {
164
89
  console.log("[MediaNode]", ...args);
165
90
  }
166
91
  };
167
- var MediaNode = ({ value, className, style, previewKey }) => {
92
+ var MediaNode = ({ value, className, style }) => {
168
93
  if (!value) return null;
169
94
  if (value.type === "video") {
170
95
  const src = value.src;
171
96
  if (!src) return null;
172
97
  return /* @__PURE__ */ jsx("video", { className, style, src, autoPlay: true, muted: true, loop: true, playsInline: true, "aria-label": value.alt ?? "" });
173
98
  }
174
- const imageUrl = resolveImageUrl(value, { previewKey });
99
+ const imageUrl = resolveImageUrl(value);
175
100
  if (!imageUrl) {
176
101
  return /* @__PURE__ */ jsx(
177
102
  "div",
@@ -182,56 +107,36 @@ var MediaNode = ({ value, className, style, previewKey }) => {
182
107
  }
183
108
  );
184
109
  }
185
- const isCrossOrigin = typeof window !== "undefined" && imageUrl.startsWith("http") && !imageUrl.startsWith(window.location.origin);
186
- const isApiRoute = imageUrl.includes("/api/img") || imageUrl.includes("/api/public/img");
187
- const crossOriginMode = isCrossOrigin && isApiRoute ? "use-credentials" : isCrossOrigin ? "anonymous" : void 0;
110
+ const hotspotStyle = value.transform?.hotspot ? { objectPosition: `${value.transform.hotspot.x * 100}% ${value.transform.hotspot.y * 100}%` } : void 0;
188
111
  return /* @__PURE__ */ jsx(
189
112
  "img",
190
113
  {
191
114
  src: imageUrl,
192
115
  alt: value.alt ?? "",
193
116
  className,
194
- style,
195
- loading: "lazy",
196
- crossOrigin: crossOriginMode
117
+ style: mergeStyles(style, hotspotStyle),
118
+ loading: "lazy"
197
119
  }
198
120
  );
199
121
  };
200
- function resolveImageUrl(value, options = {}) {
122
+ function resolveImageUrl(value) {
201
123
  if (value.type !== "image") return void 0;
202
- const params = {};
203
- const rect = value.transform?.rect;
204
- const hotspot = value.transform?.hotspot;
205
- if (rect && Array.isArray(rect) && rect.length === 4) {
206
- params.rect = rect.join(",");
207
- }
208
- if (hotspot && typeof hotspot.x === "number" && typeof hotspot.y === "number") {
209
- const x = clamp(hotspot.x);
210
- const y = clamp(hotspot.y);
211
- params.hotspot = `${x.toFixed(4)},${y.toFixed(4)}`;
212
- }
213
124
  debugMediaNodeLog("resolveImageUrl input", {
214
125
  assetId: value.assetId,
126
+ storagePath: value.storagePath,
215
127
  src: value.src,
216
- type: value.type,
217
- hasPreviewKey: !!options.previewKey
128
+ type: value.type
218
129
  });
219
- if (value.assetId) {
220
- const cmsApiBase = getCmsApiUrl();
221
- const basePath = `${cmsApiBase}/public/img`;
222
- let resolved = getImageUrl({ id: value.assetId }, params, basePath);
223
- if (options.previewKey) {
224
- const separator = resolved.includes("?") ? "&" : "?";
225
- resolved = `${resolved}${separator}preview_key=${encodeURIComponent(options.previewKey)}`;
226
- }
227
- debugMediaNodeLog("resolve:asset-id", {
228
- assetId: value.assetId,
229
- cmsApiBase,
230
- basePath,
231
- resolvedUrl: resolved,
232
- hasPreviewKey: !!options.previewKey
130
+ if (value.storagePath && value.storagePath.length > 0) {
131
+ const supabaseUrl = getSupabaseUrl();
132
+ const bucket = value.storageBucket ?? "media";
133
+ const directUrl = getDirectImageUrl(supabaseUrl, value.storagePath, bucket);
134
+ debugMediaNodeLog("resolve:direct-supabase", {
135
+ storagePath: value.storagePath,
136
+ bucket,
137
+ directUrl
233
138
  });
234
- return resolved;
139
+ return directUrl;
235
140
  }
236
141
  if (typeof value.src === "string" && value.src.length > 0) {
237
142
  debugMediaNodeLog("resolve:explicit-src", { src: value.src });
@@ -240,9 +145,6 @@ function resolveImageUrl(value, options = {}) {
240
145
  debugMediaNodeLog("resolve:fallback-url", { fallbackUrl: value.url ?? null });
241
146
  return value.url ?? void 0;
242
147
  }
243
- function clamp(v, min6 = 0, max6 = 1) {
244
- return Math.min(Math.max(v, min6), max6);
245
- }
246
148
 
247
149
  // ../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/limit.js
248
150
  var { min, max } = Math;
@@ -8942,8 +8844,6 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
8942
8844
  return wrapBlock && block.id ? /* @__PURE__ */ jsx21(Fragment2, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx21(Fragment2, { children: rendered });
8943
8845
  }
8944
8846
  try {
8945
- const BlockComponent = OverrideComponent ?? getCachedBlockComponent(definition.manifest);
8946
- const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
8947
8847
  const routes = routeMap ?? dataContext?.routes;
8948
8848
  const hydratedContent = routes ? hydrateManifestLinks(definition.manifest, data, routes) : data;
8949
8849
  const resolved = resolveBlockData({
@@ -8951,35 +8851,45 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
8951
8851
  definition,
8952
8852
  dataContext
8953
8853
  });
8954
- const rootContext = {
8955
- $root: {
8956
- siteId: dataContext?.siteId ?? null,
8957
- pageId: dataContext?.pageId ?? null,
8958
- previewStage: dataContext?.previewStage ?? "published",
8959
- ...routes ? { routes } : {},
8960
- // Occurrence and content entry context for template pages
8961
- occurrenceContext: dataContext?.occurrenceContext ?? null,
8962
- contentEntry: dataContext?.contentEntry ?? null
8963
- }
8854
+ const baseProps = {
8855
+ content: hydratedContent,
8856
+ theme: themeTokens,
8857
+ themeConfig,
8858
+ data: resolved,
8859
+ blockId: block.id ?? null,
8860
+ blockKind: block.kind
8964
8861
  };
8965
- const blockBindings = block.bindings ?? void 0;
8966
- const fragmentRegistry2 = getFragmentRegistry();
8967
- const rendered = /* @__PURE__ */ jsx21(
8968
- BlockComponent,
8969
- {
8970
- content: hydratedContent,
8971
- theme: themeTokens,
8972
- themeConfig,
8973
- registry,
8974
- pathBase,
8975
- data: resolved,
8976
- blockId: block.id ?? null,
8977
- blockKind: block.kind,
8978
- blockBindings,
8979
- viewModelOverrides: rootContext,
8980
- fragmentRegistry: fragmentRegistry2
8981
- }
8982
- );
8862
+ let rendered;
8863
+ if (OverrideComponent) {
8864
+ rendered = /* @__PURE__ */ jsx21(OverrideComponent, { ...baseProps });
8865
+ } else {
8866
+ const BlockComponent = getCachedBlockComponent(definition.manifest);
8867
+ const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
8868
+ const rootContext = {
8869
+ $root: {
8870
+ siteId: dataContext?.siteId ?? null,
8871
+ pageId: dataContext?.pageId ?? null,
8872
+ previewStage: dataContext?.previewStage ?? "published",
8873
+ ...routes ? { routes } : {},
8874
+ // Occurrence and content entry context for template pages
8875
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
8876
+ contentEntry: dataContext?.contentEntry ?? null
8877
+ }
8878
+ };
8879
+ const blockBindings = block.bindings ?? void 0;
8880
+ const fragmentRegistry2 = getFragmentRegistry();
8881
+ rendered = /* @__PURE__ */ jsx21(
8882
+ BlockComponent,
8883
+ {
8884
+ ...baseProps,
8885
+ registry,
8886
+ pathBase,
8887
+ blockBindings,
8888
+ viewModelOverrides: rootContext,
8889
+ fragmentRegistry: fragmentRegistry2
8890
+ }
8891
+ );
8892
+ }
8983
8893
  if (wrapBlock && block.id) {
8984
8894
  return /* @__PURE__ */ jsx21(Fragment2, { children: wrapBlock(block.id, rendered) });
8985
8895
  }
@@ -9623,4 +9533,4 @@ chroma-js/src/utils/contrastAPCA.js:
9623
9533
  * https://readtech.org/ARC/
9624
9534
  *)
9625
9535
  */
9626
- //# sourceMappingURL=chunk-NKXS4TBK.mjs.map
9536
+ //# sourceMappingURL=chunk-TNRADRPH.mjs.map