@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
@@ -329,121 +329,50 @@ var LinkNode = ({
329
329
  return /* @__PURE__ */ jsx8("a", { href, ...rest, children });
330
330
  };
331
331
 
332
- // ../media-core/dist/chunk-JAKU4BKA.mjs
333
- var DEFAULT_BASE_PATH = "/api/img";
334
- var formatNumber = (value) => Number.isInteger(value) ? value.toString() : value.toFixed(6).replace(/0+$/, "").replace(/\.$/, "");
335
- var addParam = (search, key, value) => {
336
- if (value === void 0) return;
337
- switch (key) {
338
- case "fpX":
339
- search.set("fp-x", formatNumber(value));
340
- break;
341
- case "fpY":
342
- search.set("fp-y", formatNumber(value));
343
- break;
344
- case "rect": {
345
- const rect = value;
346
- if (!rect) break;
347
- search.set("rect", rect.map(formatNumber).join(","));
348
- break;
349
- }
350
- case "autoFormat":
351
- if (value) {
352
- search.append("auto", "format");
353
- }
354
- break;
355
- case "invert":
356
- search.set("invert", value ? "true" : "false");
357
- break;
358
- default:
359
- search.set(
360
- key,
361
- typeof value === "number" ? formatNumber(value) : String(value)
362
- );
363
- }
364
- };
365
- var ORDER = [
366
- "w",
367
- "h",
368
- "dpr",
369
- "fit",
370
- "crop",
371
- "fpX",
372
- "fpY",
373
- "rect",
374
- "q",
375
- "fm",
376
- "autoFormat",
377
- "bg",
378
- "flip",
379
- "or",
380
- "pad",
381
- "blur",
382
- "sharp",
383
- "invert",
384
- "sat",
385
- "cs"
386
- ];
387
- var getImageUrl = (asset, params = {}, basePath = DEFAULT_BASE_PATH) => {
388
- const trimmedBase = basePath.endsWith("/") ? basePath.slice(0, Math.max(basePath.length - 1, 0)) : basePath;
389
- const path = `${trimmedBase}/${encodeURIComponent(asset.id)}`;
390
- const searchParams = new URLSearchParams();
391
- ORDER.forEach((key) => {
392
- addParam(searchParams, key, params[key]);
393
- });
394
- const query = searchParams.toString();
395
- return query ? `${path}?${query}` : path;
396
- };
397
-
398
- // ../blocks/src/system/runtime/utils/api-url.ts
399
- function resolveMultiEnvDashboardUrl() {
400
- const env = process.env.RIVERBANK_ENV;
401
- if (!env) return null;
402
- const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`;
403
- const dashboardUrl = process.env[envKey];
404
- if (dashboardUrl) {
405
- return dashboardUrl.replace(/\/$/, "");
406
- }
407
- return null;
408
- }
409
- function getCmsApiUrl() {
410
- const multiEnvDashboard = resolveMultiEnvDashboardUrl();
411
- if (multiEnvDashboard) {
412
- return `${multiEnvDashboard}/api`;
413
- }
414
- const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL;
415
- if (builderApiUrl) {
416
- return builderApiUrl.replace(/\/$/, "");
417
- }
418
- const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;
419
- if (dashboardUrl) {
420
- const base = dashboardUrl.replace(/\/$/, "");
421
- return `${base}/api`;
422
- }
423
- const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
424
- if (legacyApiUrl) {
425
- return legacyApiUrl.replace(/\/$/, "");
426
- }
427
- throw new Error(
428
- "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)"
429
- );
332
+ // ../media-core/dist/chunk-ZBK775TB.mjs
333
+ function getDirectImageUrl(supabaseUrl, storagePath, storageBucket = "media", options) {
334
+ const baseUrl = supabaseUrl.replace(/\/$/, "");
335
+ const encodedPath = storagePath.split("/").map((segment) => encodeURIComponent(segment)).join("/");
336
+ const isSvg = storagePath.toLowerCase().endsWith(".svg");
337
+ if (options && !isSvg && (options.width || options.height)) {
338
+ const params = new URLSearchParams();
339
+ if (options.width) params.set("width", String(options.width));
340
+ if (options.height) params.set("height", String(options.height));
341
+ if (options.quality) params.set("quality", String(options.quality));
342
+ if (options.resize) params.set("resize", options.resize);
343
+ return `${baseUrl}/storage/v1/render/image/public/${storageBucket}/${encodedPath}?${params.toString()}`;
344
+ }
345
+ return `${baseUrl}/storage/v1/object/public/${storageBucket}/${encodedPath}`;
430
346
  }
431
347
 
432
348
  // ../blocks/src/system/runtime/nodes/media.tsx
433
349
  import { jsx as jsx9 } from "react/jsx-runtime";
350
+ var _contextSupabaseUrl;
351
+ function getSupabaseUrl() {
352
+ if (_contextSupabaseUrl) {
353
+ return _contextSupabaseUrl;
354
+ }
355
+ const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
356
+ if (!url) {
357
+ throw new Error(
358
+ "NEXT_PUBLIC_SUPABASE_URL is not configured. Set it to your Supabase project URL (e.g., https://xxx.supabase.co)"
359
+ );
360
+ }
361
+ return url.replace(/\/$/, "");
362
+ }
434
363
  var debugMediaNodeLog = (...args) => {
435
364
  if (typeof window !== "undefined" && window.__DEBUG_MEDIA_NODE__) {
436
365
  console.log("[MediaNode]", ...args);
437
366
  }
438
367
  };
439
- var MediaNode = ({ value, className, style, previewKey }) => {
368
+ var MediaNode = ({ value, className, style }) => {
440
369
  if (!value) return null;
441
370
  if (value.type === "video") {
442
371
  const src = value.src;
443
372
  if (!src) return null;
444
373
  return /* @__PURE__ */ jsx9("video", { className, style, src, autoPlay: true, muted: true, loop: true, playsInline: true, "aria-label": value.alt ?? "" });
445
374
  }
446
- const imageUrl = resolveImageUrl(value, { previewKey });
375
+ const imageUrl = resolveImageUrl(value);
447
376
  if (!imageUrl) {
448
377
  return /* @__PURE__ */ jsx9(
449
378
  "div",
@@ -454,56 +383,36 @@ var MediaNode = ({ value, className, style, previewKey }) => {
454
383
  }
455
384
  );
456
385
  }
457
- const isCrossOrigin = typeof window !== "undefined" && imageUrl.startsWith("http") && !imageUrl.startsWith(window.location.origin);
458
- const isApiRoute = imageUrl.includes("/api/img") || imageUrl.includes("/api/public/img");
459
- const crossOriginMode = isCrossOrigin && isApiRoute ? "use-credentials" : isCrossOrigin ? "anonymous" : void 0;
386
+ const hotspotStyle = value.transform?.hotspot ? { objectPosition: `${value.transform.hotspot.x * 100}% ${value.transform.hotspot.y * 100}%` } : void 0;
460
387
  return /* @__PURE__ */ jsx9(
461
388
  "img",
462
389
  {
463
390
  src: imageUrl,
464
391
  alt: value.alt ?? "",
465
392
  className,
466
- style,
467
- loading: "lazy",
468
- crossOrigin: crossOriginMode
393
+ style: mergeStyles(style, hotspotStyle),
394
+ loading: "lazy"
469
395
  }
470
396
  );
471
397
  };
472
- function resolveImageUrl(value, options = {}) {
398
+ function resolveImageUrl(value) {
473
399
  if (value.type !== "image") return void 0;
474
- const params = {};
475
- const rect = value.transform?.rect;
476
- const hotspot = value.transform?.hotspot;
477
- if (rect && Array.isArray(rect) && rect.length === 4) {
478
- params.rect = rect.join(",");
479
- }
480
- if (hotspot && typeof hotspot.x === "number" && typeof hotspot.y === "number") {
481
- const x2 = clamp(hotspot.x);
482
- const y2 = clamp(hotspot.y);
483
- params.hotspot = `${x2.toFixed(4)},${y2.toFixed(4)}`;
484
- }
485
400
  debugMediaNodeLog("resolveImageUrl input", {
486
401
  assetId: value.assetId,
402
+ storagePath: value.storagePath,
487
403
  src: value.src,
488
- type: value.type,
489
- hasPreviewKey: !!options.previewKey
404
+ type: value.type
490
405
  });
491
- if (value.assetId) {
492
- const cmsApiBase = getCmsApiUrl();
493
- const basePath = `${cmsApiBase}/public/img`;
494
- let resolved = getImageUrl({ id: value.assetId }, params, basePath);
495
- if (options.previewKey) {
496
- const separator = resolved.includes("?") ? "&" : "?";
497
- resolved = `${resolved}${separator}preview_key=${encodeURIComponent(options.previewKey)}`;
498
- }
499
- debugMediaNodeLog("resolve:asset-id", {
500
- assetId: value.assetId,
501
- cmsApiBase,
502
- basePath,
503
- resolvedUrl: resolved,
504
- hasPreviewKey: !!options.previewKey
406
+ if (value.storagePath && value.storagePath.length > 0) {
407
+ const supabaseUrl = getSupabaseUrl();
408
+ const bucket = value.storageBucket ?? "media";
409
+ const directUrl = getDirectImageUrl(supabaseUrl, value.storagePath, bucket);
410
+ debugMediaNodeLog("resolve:direct-supabase", {
411
+ storagePath: value.storagePath,
412
+ bucket,
413
+ directUrl
505
414
  });
506
- return resolved;
415
+ return directUrl;
507
416
  }
508
417
  if (typeof value.src === "string" && value.src.length > 0) {
509
418
  debugMediaNodeLog("resolve:explicit-src", { src: value.src });
@@ -512,9 +421,6 @@ function resolveImageUrl(value, options = {}) {
512
421
  debugMediaNodeLog("resolve:fallback-url", { fallbackUrl: value.url ?? null });
513
422
  return value.url ?? void 0;
514
423
  }
515
- function clamp(v2, min2 = 0, max2 = 1) {
516
- return Math.min(Math.max(v2, min2), max2);
517
- }
518
424
 
519
425
  // ../blocks/src/system/runtime/nodes/form.server.tsx
520
426
  import { jsx as jsx10, jsxs } from "react/jsx-runtime";
@@ -1157,6 +1063,42 @@ var EventListingSSR = ({
1157
1063
 
1158
1064
  // ../blocks/src/system/runtime/hooks/useEventPagination.ts
1159
1065
  import { useState, useCallback, useRef } from "react";
1066
+
1067
+ // ../blocks/src/system/runtime/utils/api-url.ts
1068
+ function resolveMultiEnvDashboardUrl() {
1069
+ const env = process.env.RIVERBANK_ENV;
1070
+ if (!env) return null;
1071
+ const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`;
1072
+ const dashboardUrl = process.env[envKey];
1073
+ if (dashboardUrl) {
1074
+ return dashboardUrl.replace(/\/$/, "");
1075
+ }
1076
+ return null;
1077
+ }
1078
+ function getCmsApiUrl() {
1079
+ const multiEnvDashboard = resolveMultiEnvDashboardUrl();
1080
+ if (multiEnvDashboard) {
1081
+ return `${multiEnvDashboard}/api`;
1082
+ }
1083
+ const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL;
1084
+ if (builderApiUrl) {
1085
+ return builderApiUrl.replace(/\/$/, "");
1086
+ }
1087
+ const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;
1088
+ if (dashboardUrl) {
1089
+ const base = dashboardUrl.replace(/\/$/, "");
1090
+ return `${base}/api`;
1091
+ }
1092
+ const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
1093
+ if (legacyApiUrl) {
1094
+ return legacyApiUrl.replace(/\/$/, "");
1095
+ }
1096
+ throw new Error(
1097
+ "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)"
1098
+ );
1099
+ }
1100
+
1101
+ // ../blocks/src/system/runtime/hooks/useEventPagination.ts
1160
1102
  function useEventPagination({
1161
1103
  siteId,
1162
1104
  initialEvents = [],
@@ -9762,7 +9704,7 @@ var oppositeAlignmentMap = {
9762
9704
  start: "end",
9763
9705
  end: "start"
9764
9706
  };
9765
- function clamp2(start, value, end) {
9707
+ function clamp(start, value, end) {
9766
9708
  return max(start, min(value, end));
9767
9709
  }
9768
9710
  function evaluate(value, param) {
@@ -10115,7 +10057,7 @@ var arrow = (options) => ({
10115
10057
  const min$1 = minPadding;
10116
10058
  const max2 = clientSize - arrowDimensions[length] - maxPadding;
10117
10059
  const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
10118
- const offset4 = clamp2(min$1, center, max2);
10060
+ const offset4 = clamp(min$1, center, max2);
10119
10061
  const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
10120
10062
  const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max2 : 0;
10121
10063
  return {
@@ -10412,14 +10354,14 @@ var shift = function(options) {
10412
10354
  const maxSide = mainAxis === "y" ? "bottom" : "right";
10413
10355
  const min2 = mainAxisCoord + overflow[minSide];
10414
10356
  const max2 = mainAxisCoord - overflow[maxSide];
10415
- mainAxisCoord = clamp2(min2, mainAxisCoord, max2);
10357
+ mainAxisCoord = clamp(min2, mainAxisCoord, max2);
10416
10358
  }
10417
10359
  if (checkCrossAxis) {
10418
10360
  const minSide = crossAxis === "y" ? "top" : "left";
10419
10361
  const maxSide = crossAxis === "y" ? "bottom" : "right";
10420
10362
  const min2 = crossAxisCoord + overflow[minSide];
10421
10363
  const max2 = crossAxisCoord - overflow[maxSide];
10422
- crossAxisCoord = clamp2(min2, crossAxisCoord, max2);
10364
+ crossAxisCoord = clamp(min2, crossAxisCoord, max2);
10423
10365
  }
10424
10366
  const limitedCoords = limiter.fn({
10425
10367
  ...state,