unframer 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/exporter.d.ts +2 -1
  5. package/dist/exporter.d.ts.map +1 -1
  6. package/dist/exporter.js +39 -28
  7. package/dist/exporter.js.map +1 -1
  8. package/dist/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.d.ts +634 -0
  9. package/dist/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.d.ts.map +1 -0
  10. package/dist/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js +8 -0
  11. package/dist/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js.map +1 -0
  12. package/dist/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.d.ts +115 -0
  13. package/dist/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.d.ts.map +1 -0
  14. package/dist/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js +8 -0
  15. package/dist/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js.map +1 -0
  16. package/dist/framer-chunks/fontshare-Y53BJZLK-EUQIV252.d.ts +781 -0
  17. package/dist/framer-chunks/fontshare-Y53BJZLK-EUQIV252.d.ts.map +1 -0
  18. package/dist/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js +8 -0
  19. package/dist/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js.map +1 -0
  20. package/dist/framer-chunks/google-2KFYDWCN-PJC2DDXK.d.ts +1566 -0
  21. package/dist/framer-chunks/google-2KFYDWCN-PJC2DDXK.d.ts.map +1 -0
  22. package/dist/framer-chunks/google-2KFYDWCN-PJC2DDXK.js +8 -0
  23. package/dist/framer-chunks/google-2KFYDWCN-PJC2DDXK.js.map +1 -0
  24. package/dist/framer-chunks/google-HSMCYMMG-DWNQGSHN.d.ts +10293 -0
  25. package/dist/framer-chunks/google-HSMCYMMG-DWNQGSHN.d.ts.map +1 -0
  26. package/dist/framer-chunks/google-HSMCYMMG-DWNQGSHN.js +8 -0
  27. package/dist/framer-chunks/google-HSMCYMMG-DWNQGSHN.js.map +1 -0
  28. package/dist/framer-chunks/google-S367OFIE-AWJEPMSF.d.ts +3588 -0
  29. package/dist/framer-chunks/google-S367OFIE-AWJEPMSF.d.ts.map +1 -0
  30. package/dist/framer-chunks/google-S367OFIE-AWJEPMSF.js +8 -0
  31. package/dist/framer-chunks/google-S367OFIE-AWJEPMSF.js.map +1 -0
  32. package/dist/framer.js +189 -103
  33. package/dist/version.d.ts +1 -1
  34. package/dist/version.js +1 -1
  35. package/esm/cli.d.ts.map +1 -1
  36. package/esm/cli.js +3 -0
  37. package/esm/cli.js.map +1 -1
  38. package/esm/exporter.d.ts +2 -1
  39. package/esm/exporter.d.ts.map +1 -1
  40. package/esm/exporter.js +40 -29
  41. package/esm/exporter.js.map +1 -1
  42. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.d.ts +634 -0
  43. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.d.ts.map +1 -0
  44. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js +5 -0
  45. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js.map +1 -0
  46. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.d.ts +115 -0
  47. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.d.ts.map +1 -0
  48. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js +5 -0
  49. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js.map +1 -0
  50. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.d.ts +781 -0
  51. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.d.ts.map +1 -0
  52. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js +5 -0
  53. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js.map +1 -0
  54. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.d.ts +1566 -0
  55. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.d.ts.map +1 -0
  56. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.js +5 -0
  57. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.js.map +1 -0
  58. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.d.ts +10293 -0
  59. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.d.ts.map +1 -0
  60. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.js +5 -0
  61. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.js.map +1 -0
  62. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.d.ts +3588 -0
  63. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.d.ts.map +1 -0
  64. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.js +5 -0
  65. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.js.map +1 -0
  66. package/esm/framer.js +189 -103
  67. package/esm/version.d.ts +1 -1
  68. package/esm/version.js +1 -1
  69. package/package.json +1 -1
  70. package/src/cli.ts +3 -0
  71. package/src/exporter.ts +58 -31
  72. package/src/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js +7 -0
  73. package/src/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js +7 -0
  74. package/src/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js +7 -0
  75. package/src/framer-chunks/google-2KFYDWCN-PJC2DDXK.js +7 -0
  76. package/src/framer-chunks/google-HSMCYMMG-DWNQGSHN.js +7 -0
  77. package/src/framer-chunks/google-S367OFIE-AWJEPMSF.js +7 -0
  78. package/src/framer.js +189 -107
  79. package/src/styles/framer.css +13 -12
  80. package/src/version.ts +1 -1
package/src/framer.js CHANGED
@@ -11214,7 +11214,7 @@ function stagger(duration = 0.1, {
11214
11214
  };
11215
11215
  }
11216
11216
 
11217
- // /:https://app.framerstatic.com/framer.O23R7WUO.mjs
11217
+ // /:https://app.framerstatic.com/framer.UWLYDHV3.mjs
11218
11218
  import { lazy as ReactLazy, } from 'react';
11219
11219
  import React4 from 'react';
11220
11220
  import { startTransition as startTransition2, } from 'react';
@@ -12649,31 +12649,10 @@ function useRouteHandler(routeId, preload = false, elementId,) {
12649
12649
  const handler = React4.useCallback(() => navigate == null ? void 0 : navigate(routeId, elementId,), [navigate, elementId, routeId,],);
12650
12650
  return handler;
12651
12651
  }
12652
- var timezone;
12653
- var visitorLocale;
12654
- function setTimezoneAndLocaleForTracking() {
12655
- const resolvedDateTimeOptions = Intl.DateTimeFormat().resolvedOptions();
12656
- timezone = resolvedDateTimeOptions.timeZone;
12657
- visitorLocale = resolvedDateTimeOptions.locale;
12658
- }
12659
- requestIdleCallback(setTimezoneAndLocaleForTracking,);
12652
+ var pageviewEventVersion = 2;
12660
12653
  function sendTrackingEvent(eventType, eventData, sendOn = 'lazy',) {
12661
- if (!safeWindow.__framer_events) return;
12662
- if (!timezone || !visitorLocale) setTimezoneAndLocaleForTracking();
12663
- safeWindow.__framer_events.push([eventType, {
12664
- // Base properties common to all events
12665
- referrer: null,
12666
- // The first pageview event will always be sent before hydration, in a script in `exportToHTML.ts`.
12667
- url: safeWindow.location.href,
12668
- hostname: safeWindow.location.hostname || null,
12669
- pathname: safeWindow.location.pathname || null,
12670
- hash: safeWindow.location.hash || null,
12671
- search: safeWindow.location.search || null,
12672
- timezone,
12673
- locale: visitorLocale,
12674
- // Additional properties specific to custom events
12675
- ...eventData,
12676
- }, sendOn,],);
12654
+ var _a;
12655
+ (_a = safeWindow.__framer_events) == null ? void 0 : _a.push([eventType, eventData, sendOn,],);
12677
12656
  switch (eventType) {
12678
12657
  case 'published_site_click': {
12679
12658
  const {
@@ -13646,6 +13625,7 @@ function usePopStateHandler(currentRouteId, setCurrentRouteId,) {
13646
13625
  routeId,
13647
13626
  isString(localeId,) ? localeId : void 0,
13648
13627
  isString(hash2,) ? hash2 : void 0,
13628
+ window.location.pathname + window.location.search + window.location.hash,
13649
13629
  isObject2(pathVariables,) ? pathVariables : void 0,
13650
13630
  true,
13651
13631
  nextRender,
@@ -19314,8 +19294,13 @@ var DimensionType = /* @__PURE__ */ ((DimensionType2) => {
19314
19294
  DimensionType2[DimensionType2['Auto'] = 2] = 'Auto';
19315
19295
  DimensionType2[DimensionType2['FractionOfFreeSpace'] = 3] = 'FractionOfFreeSpace';
19316
19296
  DimensionType2[DimensionType2['Viewport'] = 4] = 'Viewport';
19297
+ DimensionType2[DimensionType2['FitImage'] = 5] = 'FitImage';
19317
19298
  return DimensionType2;
19318
19299
  })(DimensionType || {},);
19300
+ function isAutoDimensionType(dimensionType,) {
19301
+ if (isUndefined(dimensionType,)) return false;
19302
+ return dimensionType === 2 || dimensionType === 5;
19303
+ }
19319
19304
  function isConstraintSupportingChild(child,) {
19320
19305
  if (!isReactChild(child,) || !isReactElement(child,)) {
19321
19306
  return false;
@@ -19326,7 +19311,7 @@ var ConstraintMask = {
19326
19311
  // Modifies the constraint mask to remove invalid (mutually exclusive) options and returns the original.
19327
19312
  // TODO: this removes major inconsistencies but probably needs to be merged with ConstraintSolver.
19328
19313
  quickfix: (constraints) => {
19329
- if (constraints.widthType === 2 || constraints.heightType === 2) {
19314
+ if (isAutoDimensionType(constraints.widthType,) || isAutoDimensionType(constraints.heightType,)) {
19330
19315
  constraints.aspectRatio = null;
19331
19316
  }
19332
19317
  if (isFiniteNumber(constraints.aspectRatio,)) {
@@ -19344,13 +19329,13 @@ var ConstraintMask = {
19344
19329
  }
19345
19330
  }
19346
19331
  if (constraints.left && constraints.right) {
19347
- if (constraints.fixedSize || constraints.widthType === 2 || isFiniteNumber(constraints.maxWidth,)) {
19332
+ if (constraints.fixedSize || isAutoDimensionType(constraints.widthType,) || isFiniteNumber(constraints.maxWidth,)) {
19348
19333
  constraints.right = false;
19349
19334
  }
19350
19335
  constraints.widthType = 0;
19351
19336
  }
19352
19337
  if (constraints.top && constraints.bottom) {
19353
- if (constraints.fixedSize || constraints.heightType === 2 || isFiniteNumber(constraints.maxHeight,)) {
19338
+ if (constraints.fixedSize || isAutoDimensionType(constraints.heightType,) || isFiniteNumber(constraints.maxHeight,)) {
19354
19339
  constraints.bottom = false;
19355
19340
  }
19356
19341
  constraints.heightType = 0;
@@ -19459,7 +19444,7 @@ var ConstraintValues = {
19459
19444
  const hOpposingPinsOffset = pinnedOffset(values.left, values.right,);
19460
19445
  if (parentWidth && isFiniteNumber(hOpposingPinsOffset,)) {
19461
19446
  width = parentWidth - hOpposingPinsOffset;
19462
- } else if (autoSize && values.widthType === 2) {
19447
+ } else if (autoSize && isAutoDimensionType(values.widthType,)) {
19463
19448
  width = autoSize.width;
19464
19449
  } else if (isFiniteNumber(values.width,)) {
19465
19450
  switch (values.widthType) {
@@ -19476,6 +19461,7 @@ var ConstraintValues = {
19476
19461
  }
19477
19462
  break;
19478
19463
  case 2:
19464
+ case 5:
19479
19465
  break;
19480
19466
  default:
19481
19467
  assertNever(values.widthType,);
@@ -19484,7 +19470,7 @@ var ConstraintValues = {
19484
19470
  const vOpposingPinsOffset = pinnedOffset(values.top, values.bottom,);
19485
19471
  if (parentHeight && isFiniteNumber(vOpposingPinsOffset,)) {
19486
19472
  height = parentHeight - vOpposingPinsOffset;
19487
- } else if (autoSize && values.heightType === 2) {
19473
+ } else if (autoSize && isAutoDimensionType(values.heightType,)) {
19488
19474
  height = autoSize.height;
19489
19475
  } else if (isFiniteNumber(values.height,)) {
19490
19476
  switch (values.heightType) {
@@ -19501,6 +19487,7 @@ var ConstraintValues = {
19501
19487
  }
19502
19488
  break;
19503
19489
  case 2:
19490
+ case 5:
19504
19491
  break;
19505
19492
  default:
19506
19493
  assertNever(values.heightType,);
@@ -20565,9 +20552,10 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20565
20552
  text-transform: var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
20566
20553
  /* Cursor inherit to overwrite the user agent stylesheet on rich text links. */
20567
20554
  cursor: var(--framer-custom-cursors, pointer);
20568
- background-color: var(--framer-link-text-background-color, var(--framer-text-background-color, initial));
20569
- border-radius: var(--framer-link-text-background-radius, var(--framer-text-background-radius, initial));
20570
- padding: var(--framer-link-text-background-padding, var(--framer-text-background-padding, initial));
20555
+ /* Don't inherit background styles from any parent text style. */
20556
+ background-color: var(--framer-link-text-background-color, initial);
20557
+ border-radius: var(--framer-link-text-background-radius, initial);
20558
+ padding: var(--framer-link-text-background-padding, initial);
20571
20559
  }
20572
20560
  `,
20573
20561
  // Text decoration can't be applied to the nested spans of links because it breaks animations
@@ -20592,9 +20580,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20592
20580
  color: ${
20593
20581
  createRGBVariableFallbacks(['--framer-blockquote-text-color', '--framer-link-text-color', '--framer-text-color',], '#000',)
20594
20582
  };
20595
- background-color: ${
20596
- createRGBVariableFallbacks(['--framer-link-text-background-color', '--framer-text-background-color',], 'initial',)
20597
- };
20583
+ background-color: ${createRGBVariableFallbacks(['--framer-link-text-background-color',], 'initial',)};
20598
20584
  }
20599
20585
  }
20600
20586
  `, /* css */
@@ -20718,9 +20704,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20718
20704
  color: var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
20719
20705
  font-size: calc(var(--framer-link-current-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
20720
20706
  text-transform: var(--framer-link-current-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
20721
- background-color: var(--framer-link-current-text-background-color, var(--framer-link-text-background-color, var(--framer-text-background-color, initial)));
20722
- border-radius: var(--framer-link-current-text-background-radius, var(--framer-link-text-background-radius, var(--framer-text-background-radius, initial)));
20723
- padding: var(--framer-link-current-text-background-padding, var(--framer-link-text-background-padding, var(--framer-text-background-padding, initial)));
20707
+ background-color: var(--framer-link-current-text-background-color, var(--framer-link-text-background-color, initial));
20708
+ border-radius: var(--framer-link-current-text-background-radius, var(--framer-link-text-background-radius, initial));
20709
+ padding: var(--framer-link-current-text-background-padding, var(--framer-link-text-background-padding, initial));
20724
20710
  }
20725
20711
  `, /* css */
20726
20712
  `
@@ -20800,9 +20786,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20800
20786
  color: var(--framer-link-hover-text-color, var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
20801
20787
  font-size: calc(var(--framer-link-hover-font-size, var(--framer-link-current-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px)))) * var(--framer-font-size-scale, 1));
20802
20788
  text-transform: var(--framer-link-hover-text-transform, var(--framer-link-current-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
20803
- background-color: var(--framer-link-hover-text-background-color, var(--framer-link-current-text-background-color, var(--framer-link-text-background-color, var(--framer-text-background-color, initial))));
20804
- border-radius: var(--framer-link-hover-text-background-radius, var(--framer-link-current-text-background-radius, var(--framer-link-text-background-radius, var(--framer-text-background-radius, initial))));
20805
- padding: var(--framer-link-hover-text-background-padding, var(--framer-link-current-text-background-padding, var(--framer-link-text-background-padding, var(--framer-text-background-padding, initial))));
20789
+ background-color: var(--framer-link-hover-text-background-color, var(--framer-link-current-text-background-color, var(--framer-link-text-background-color, initial)));
20790
+ border-radius: var(--framer-link-hover-text-background-radius, var(--framer-link-current-text-background-radius, var(--framer-link-text-background-radius, initial)));
20791
+ padding: var(--framer-link-hover-text-background-padding, var(--framer-link-current-text-background-padding, var(--framer-link-text-background-padding, initial)));
20806
20792
  }
20807
20793
  `, /* css */
20808
20794
  `
@@ -20836,7 +20822,6 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20836
20822
  '--framer-link-hover-text-background-color',
20837
20823
  '--framer-link-current-text-background-color',
20838
20824
  '--framer-link-text-background-color',
20839
- '--framer-text-background-color',
20840
20825
  ], 'initial',)
20841
20826
  };
20842
20827
  }
@@ -20877,7 +20862,6 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20877
20862
  '--framer-link-hover-text-background-color',
20878
20863
  '--framer-link-current-text-background-color',
20879
20864
  '--framer-link-text-background-color',
20880
- '--framer-text-background-color',
20881
20865
  ], 'initial',)
20882
20866
  };
20883
20867
  }
@@ -23433,7 +23417,7 @@ var key = 'src';
23433
23417
  var BackgroundImage = {
23434
23418
  isImageObject: function (image,) {
23435
23419
  if (!image || typeof image === 'string') return false;
23436
- return key in image;
23420
+ return typeof image === 'object' && key in image;
23437
23421
  },
23438
23422
  };
23439
23423
  function applyForwardOverrides(background, props,) {
@@ -23474,6 +23458,29 @@ function backgroundImageFromProps(props,) {
23474
23458
  }
23475
23459
  return applyForwardOverrides(backgroundImage, props,);
23476
23460
  }
23461
+ function getIntrinsicSizeForBackgroundImage(background,) {
23462
+ if (!background) return void 0;
23463
+ if (background.pixelHeight && background.pixelWidth) {
23464
+ return {
23465
+ width: background.pixelWidth,
23466
+ height: background.pixelHeight,
23467
+ };
23468
+ }
23469
+ return parseImageSizeFromSrc(background.src,);
23470
+ }
23471
+ function parseImageSizeFromSrc(src,) {
23472
+ if (!src) return void 0;
23473
+ const url = new URL(src,);
23474
+ const width = url.searchParams.get('width',);
23475
+ const height = url.searchParams.get('height',);
23476
+ if (width && height) {
23477
+ return {
23478
+ width: parseInt(width,),
23479
+ height: parseInt(height,),
23480
+ };
23481
+ }
23482
+ return void 0;
23483
+ }
23477
23484
  function htmlElementAsMotionComponent(asElem,) {
23478
23485
  return asElem && asElem !== 'search' && asElem !== 'slot' && asElem !== 'template' ? motion[asElem] : motion['div'];
23479
23486
  }
@@ -24582,6 +24589,11 @@ var VisibleFrame = /* @__PURE__ */ forwardRef(function VisibleFrame2(props, forw
24582
24589
  parentSize,
24583
24590
  );
24584
24591
  const MotionComponent = htmlElementAsMotionComponent(props.as,);
24592
+ const intrinsicSize = getIntrinsicSizeForBackgroundImage(backgroundImage,);
24593
+ if (props.fitImageDimension && intrinsicSize) {
24594
+ currentStyle[props.fitImageDimension] = 'auto';
24595
+ currentStyle.aspectRatio = intrinsicSize.width / intrinsicSize.height;
24596
+ }
24585
24597
  return /* @__PURE__ */ jsxs(MotionComponent, {
24586
24598
  ...dataProps,
24587
24599
  ...motionProps,
@@ -34332,14 +34344,14 @@ function domWriteCreateUpdateSafeArea(safeAreaRef,) {
34332
34344
  Object.assign(safeAreaRef.current.style, floatingPositionSafeAreaStyle(x, y, placement, anchorRect, calculatedRect,),);
34333
34345
  };
34334
34346
  }
34335
- function domWriteUpdatePosition(floatingPositionRef, position, rect,) {
34347
+ function domWriteUpdatePosition(floatingPositionRef, position, rect, scrollX, scrollY,) {
34336
34348
  if (!floatingPositionRef.current) return;
34337
34349
  Object.assign(floatingPositionRef.current.style, {
34338
34350
  position,
34339
34351
  visibility: 'visible',
34340
34352
  // Append "px" because we are assigning this object straight to style.
34341
- left: ((rect == null ? void 0 : rect.x) ?? 0) + (position === 'fixed' ? 0 : safeWindow.scrollX) + 'px',
34342
- top: ((rect == null ? void 0 : rect.y) ?? 0) + (position === 'fixed' ? 0 : safeWindow.scrollY) + 'px',
34353
+ left: ((rect == null ? void 0 : rect.x) ?? 0) + scrollX + 'px',
34354
+ top: ((rect == null ? void 0 : rect.y) ?? 0) + scrollY + 'px',
34343
34355
  },);
34344
34356
  }
34345
34357
  var FloatingStackingContext = /* @__PURE__ */ (() => {
@@ -34484,12 +34496,13 @@ function Floating({
34484
34496
  let elementRect;
34485
34497
  let safePlacement;
34486
34498
  let calculatedRect;
34487
- let scrolls;
34488
34499
  let latestEvent;
34489
34500
  let updateSafeArea;
34501
+ let scrollX = 0;
34502
+ let scrollY = 0;
34490
34503
  const onRender = () => {
34491
34504
  if (cleanupHasRun) return;
34492
- domWriteUpdatePosition(floatingPositionRef, position, calculatedRect,);
34505
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect, scrollX, scrollY,);
34493
34506
  if (safeArea) updateSafeArea(anchorRect, calculatedRect, safePlacement, latestEvent,);
34494
34507
  latestEvent = void 0;
34495
34508
  };
@@ -34498,7 +34511,7 @@ function Floating({
34498
34511
  if (latestEvent) {
34499
34512
  onRender();
34500
34513
  } else {
34501
- domWriteUpdatePosition(floatingPositionRef, position, calculatedRect,);
34514
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect, scrollX, scrollY,);
34502
34515
  }
34503
34516
  initialUpdateHasRun = true;
34504
34517
  };
@@ -34508,6 +34521,13 @@ function Floating({
34508
34521
  };
34509
34522
  const domReadUpdateSafePlacementAndRect = () => {
34510
34523
  if (!getSafePlacementRect || cleanupHasRun) return;
34524
+ if (position === 'fixed') {
34525
+ scrollX = 0;
34526
+ scrollY = 0;
34527
+ } else {
34528
+ scrollX = safeWindow.scrollX;
34529
+ scrollY = safeWindow.scrollY;
34530
+ }
34511
34531
  anchorRect = anchorRef.current.getBoundingClientRect();
34512
34532
  const safePlacementAndRect = getSafePlacementRect(anchorRect, elementRect,);
34513
34533
  safePlacement = safePlacementAndRect[0];
@@ -36165,64 +36185,77 @@ function isSamePage(a, b,) {
36165
36185
  return aPathVariables.length === bPathVariables.length &&
36166
36186
  Object.keys(aPathVariables,).every((key7) => aPathVariables[key7] === bPathVariables[key7]);
36167
36187
  }
36168
- function getPageviewEventData({
36169
- abTestId,
36170
- framerSiteId,
36171
- routeId,
36172
- routePath,
36173
- collectionItemId,
36174
- localeCode,
36175
- },) {
36176
- return {
36177
- abTestId,
36178
- framerSiteId,
36179
- routePath: routePath || '/',
36180
- collectionItemId,
36181
- framerLocale: localeCode,
36182
- webPageId: routeId,
36183
- };
36188
+ var timezone = null;
36189
+ var visitorLocale = null;
36190
+ function setTimezoneAndLocaleForTracking() {
36191
+ const resolvedDateTimeOptions = Intl.DateTimeFormat().resolvedOptions();
36192
+ timezone = resolvedDateTimeOptions.timeZone;
36193
+ visitorLocale = resolvedDateTimeOptions.locale;
36184
36194
  }
36185
- var useSendPageView = (currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale,) => {
36195
+ requestIdleCallback(setTimezoneAndLocaleForTracking,);
36196
+ var useSendPageView = (currentRoute, currentRouteId, currentPathnameWithHash, currentPathVariables, collectionUtils, activeLocale,) => {
36186
36197
  const framerSiteId = useContext(FormContext,);
36187
36198
  const pageviewEventData = useRef3();
36188
36199
  const skipFirstPageView = useRef3(true,);
36189
36200
  useEffect(() => {
36190
- const getFullPageviewEventData = async () => {
36191
- var _a;
36192
- let collectionItemId = null;
36193
- if ((currentRoute == null ? void 0 : currentRoute.collectionId) && collectionUtils && currentPathVariables) {
36194
- const utils = await ((_a = collectionUtils[currentRoute.collectionId]) == null ? void 0 : _a.call(collectionUtils,));
36195
- const [slug,] = Object.values(currentPathVariables,);
36196
- if (utils && typeof slug === 'string') {
36197
- collectionItemId = (await utils.getRecordIdBySlug(slug, activeLocale || void 0,)) ?? null;
36198
- }
36199
- }
36200
- return getPageviewEventData({
36201
+ function getFullPageviewEventData() {
36202
+ if (!timezone || !visitorLocale) setTimezoneAndLocaleForTracking();
36203
+ const currentLocation = currentPathnameWithHash
36204
+ ? new URL(safeWindow.location.origin + currentPathnameWithHash,)
36205
+ : safeWindow.location;
36206
+ const eventData = {
36207
+ version: pageviewEventVersion,
36201
36208
  abTestId: currentRoute == null ? void 0 : currentRoute.abTestId,
36202
36209
  framerSiteId: framerSiteId ?? null,
36203
36210
  // If we are in a variant route, let's use the variant ID as the route ID instead, so that the analytics panel will be able to show the correct tracking data.
36204
- routeId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
36205
- routePath: currentRoute == null ? void 0 : currentRoute.path,
36206
- collectionItemId,
36207
- localeCode: (activeLocale == null ? void 0 : activeLocale.code) || null,
36208
- },);
36209
- };
36211
+ webPageId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
36212
+ routePath: (currentRoute == null ? void 0 : currentRoute.path) || '/',
36213
+ collectionItemId: null,
36214
+ framerLocale: (activeLocale == null ? void 0 : activeLocale.code) || null,
36215
+ referrer: null,
36216
+ // The first pageview event will always be sent before hydration, in a script in `exportToHTML.ts`.
36217
+ url: currentLocation.href,
36218
+ hostname: currentLocation.hostname,
36219
+ // Capture the current location before the user moves to a new page to prevent
36220
+ // tracking wrong pathnames due to a race condition caused by async operations
36221
+ // when resolving the collection item ID below
36222
+ pathname: currentLocation.pathname,
36223
+ search: currentLocation.search || null,
36224
+ hash: currentLocation.hash || null,
36225
+ timezone,
36226
+ locale: visitorLocale,
36227
+ };
36228
+ return (currentRoute == null ? void 0 : currentRoute.collectionId) && collectionUtils && currentPathVariables
36229
+ ? (async () => {
36230
+ var _a;
36231
+ let collectionItemId = null;
36232
+ const utils = currentRoute.collectionId &&
36233
+ (await ((_a = collectionUtils[currentRoute.collectionId]) == null ? void 0 : _a.call(collectionUtils,)));
36234
+ const [slug,] = Object.values(currentPathVariables,);
36235
+ if (utils && typeof slug === 'string') {
36236
+ collectionItemId = (await utils.getRecordIdBySlug(slug, activeLocale || void 0,)) ?? null;
36237
+ }
36238
+ return {
36239
+ ...eventData,
36240
+ collectionItemId,
36241
+ };
36242
+ })()
36243
+ : eventData;
36244
+ }
36210
36245
  void (async () => {
36211
- const pageviewEventDataPromise = getFullPageviewEventData();
36212
- pageviewEventData.current = pageviewEventDataPromise;
36246
+ const eventDataOrPromise = pageviewEventData.current = getFullPageviewEventData();
36247
+ const eventData = eventDataOrPromise instanceof Promise ? await eventDataOrPromise : eventDataOrPromise;
36248
+ pageviewEventData.current = eventData;
36213
36249
  if (skipFirstPageView.current) {
36214
36250
  skipFirstPageView.current = false;
36215
- return;
36251
+ } else {
36252
+ sendTrackingEvent('published_site_pageview', eventData, 'eager',);
36216
36253
  }
36217
- const eventData = await pageviewEventDataPromise;
36218
- pageviewEventData.current = eventData;
36219
- sendTrackingEvent('published_site_pageview', eventData, 'eager',);
36220
36254
  })();
36221
36255
  const listener = async (event) => {
36222
36256
  if (event.persisted) {
36223
- const pageviewEventDataPromise = getFullPageviewEventData();
36224
- pageviewEventData.current = pageviewEventDataPromise;
36225
- const eventData = await getFullPageviewEventData();
36257
+ const eventDataOrPromise = pageviewEventData.current = getFullPageviewEventData();
36258
+ const eventData = eventDataOrPromise instanceof Promise ? await eventDataOrPromise : eventDataOrPromise;
36226
36259
  pageviewEventData.current = eventData;
36227
36260
  sendTrackingEvent('published_site_pageview', eventData, 'eager',);
36228
36261
  }
@@ -36231,7 +36264,7 @@ var useSendPageView = (currentRoute, currentRouteId, currentPathVariables, colle
36231
36264
  return () => {
36232
36265
  window.removeEventListener('pageshow', listener,);
36233
36266
  };
36234
- }, [currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale, framerSiteId,],);
36267
+ }, [currentRoute, currentRouteId, currentPathnameWithHash, currentPathVariables, collectionUtils, activeLocale, framerSiteId,],);
36235
36268
  return pageviewEventData;
36236
36269
  };
36237
36270
  var defaultLocaleId = 'default';
@@ -36343,6 +36376,7 @@ function Router({
36343
36376
  return (fn) => fn();
36344
36377
  }, [synchronousNavigationOnDesktop,],);
36345
36378
  const isInitialNavigationRef = useRef3(true,);
36379
+ const currentPathnameWithHashRef = useRef3();
36346
36380
  const currentRouteRef = useRef3(initialRoute,);
36347
36381
  const currentPathVariablesRef = useRef3(initialPathVariables,);
36348
36382
  const currentLocaleIdRef = useRef3(initialLocaleId,);
@@ -36438,12 +36472,13 @@ function Router({
36438
36472
  transitionFn,
36439
36473
  ],);
36440
36474
  const setCurrentRouteId = useCallback(
36441
- (routeId, localeId, hash2, pathVariables, isHistoryTransition, nextRender, smoothScroll = false, updateURL,) => {
36475
+ (routeId, localeId, hash2, pathnameWithHash, pathVariables, isHistoryTransition, nextRender, smoothScroll = false, updateURL,) => {
36442
36476
  isInitialNavigationRef.current = false;
36443
36477
  const currentRouteId2 = currentRouteRef.current;
36444
36478
  currentRouteRef.current = routeId;
36445
36479
  currentPathVariablesRef.current = pathVariables;
36446
36480
  currentLocaleIdRef.current = localeId;
36481
+ currentPathnameWithHashRef.current = pathnameWithHash;
36447
36482
  scheduleSideEffect(() => {
36448
36483
  updateScrollPosition(hash2, smoothScroll, isHistoryTransition,);
36449
36484
  },);
@@ -36537,10 +36572,22 @@ function Router({
36537
36572
  siteCanonicalURL,
36538
36573
  }, ignorePushStateWrapper,);
36539
36574
  };
36575
+ const pathnameWithHash = getSitePrefix(siteCanonicalURL,) + getPathForRoute(newRoute, {
36576
+ currentRoutePath: currentRoute2 == null ? void 0 : currentRoute2.path,
36577
+ currentPathVariables: currentPathVariables2,
36578
+ hash: hash2,
36579
+ pathVariables,
36580
+ localeId: currentRouteLocaleId,
36581
+ preserveQueryParams,
36582
+ siteCanonicalURL,
36583
+ relative: false,
36584
+ // We need an absolute path for the hash
36585
+ },);
36540
36586
  setCurrentRouteId(
36541
36587
  routeId,
36542
36588
  currentRouteLocaleId,
36543
36589
  routeElementId,
36590
+ pathnameWithHash,
36544
36591
  pathVariables,
36545
36592
  false,
36546
36593
  nextRender,
@@ -36550,10 +36597,18 @@ function Router({
36550
36597
  }, [routes, setCurrentRouteId, disableHistory, preserveQueryParams, siteCanonicalURL, monitorNextPaintAfterRender,],);
36551
36598
  const getRoute = useGetRouteCallback(routes,);
36552
36599
  const currentRouteId = currentRouteRef.current;
36600
+ const currentPathnameWithHash = currentPathnameWithHashRef.current;
36553
36601
  const currentPathVariables = currentPathVariablesRef.current;
36554
36602
  const currentRoute = routes[currentRouteId];
36555
36603
  const currentRoutePath = currentRoute == null ? void 0 : currentRoute.path;
36556
- const pageviewEventData = useSendPageView(currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale,);
36604
+ const pageviewEventData = useSendPageView(
36605
+ currentRoute,
36606
+ currentRouteId,
36607
+ currentPathnameWithHash,
36608
+ currentPathVariables,
36609
+ collectionUtils,
36610
+ activeLocale,
36611
+ );
36557
36612
  const isInitialNavigation = isInitialNavigationRef.current;
36558
36613
  const api = useMemo2(() => ({
36559
36614
  navigate,
@@ -36606,7 +36661,7 @@ function Router({
36606
36661
  /* @__PURE__ */ jsx3(MarkSuspenseEffects.Start, {},),
36607
36662
  /* @__PURE__ */ jsx3(WithLayoutTemplate, {
36608
36663
  LayoutTemplate,
36609
- routeId: currentRouteId,
36664
+ routeId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
36610
36665
  style: defaultPageStyle,
36611
36666
  children: (inLayoutTemplate) => {
36612
36667
  return /* @__PURE__ */ jsx3(Fragment, {
@@ -44446,7 +44501,11 @@ try {
44446
44501
  } catch {}
44447
44502
  var postLogEntry;
44448
44503
  try {
44449
- if (typeof window !== 'undefined' && !!window.postMessage && window.top !== window) {
44504
+ if (
44505
+ typeof window !== 'undefined' && !!window.postMessage && window.parent !== window &&
44506
+ // Don't post messages to the top-level site from the Editor Bar
44507
+ !window.location.pathname.startsWith('/edit',)
44508
+ ) {
44450
44509
  postLogEntry = (entry) => {
44451
44510
  var _a;
44452
44511
  try {
@@ -44460,7 +44519,7 @@ try {
44460
44519
  parts,
44461
44520
  printed,
44462
44521
  };
44463
- (_a = window.top) == null ? void 0 : _a.postMessage(data2, getServiceMap().app,);
44522
+ (_a = window.parent) == null ? void 0 : _a.postMessage(data2, getServiceMap().app,);
44464
44523
  } catch {}
44465
44524
  };
44466
44525
  }
@@ -45481,11 +45540,11 @@ function getAssetOwnerType(asset,) {
45481
45540
  async function loadFontsWithOpenType(source,) {
45482
45541
  switch (source) {
45483
45542
  case 'google': {
45484
- const supportedFonts = await import('./framer-chunks/google-3ASCFEEO-3R47BR2A.js');
45543
+ const supportedFonts = await import('./framer-chunks/google-2KFYDWCN-PJC2DDXK.js');
45485
45544
  return supportedFonts == null ? void 0 : supportedFonts.default;
45486
45545
  }
45487
45546
  case 'fontshare': {
45488
- const supportedFonts = await import('./framer-chunks/fontshare-4J2ZFRBB-H5VQLZTM.js');
45547
+ const supportedFonts = await import('./framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js');
45489
45548
  return supportedFonts == null ? void 0 : supportedFonts.default;
45490
45549
  }
45491
45550
  default:
@@ -45495,11 +45554,11 @@ async function loadFontsWithOpenType(source,) {
45495
45554
  async function loadFontToOpenTypeFeatures(source,) {
45496
45555
  switch (source) {
45497
45556
  case 'google': {
45498
- const features = await import('./framer-chunks/google-FDB6LUFQ-PFSUZGKF.js');
45557
+ const features = await import('./framer-chunks/google-HSMCYMMG-DWNQGSHN.js');
45499
45558
  return features == null ? void 0 : features.default;
45500
45559
  }
45501
45560
  case 'fontshare': {
45502
- const features = await import('./framer-chunks/fontshare-622CVMZZ-HFPH543A.js');
45561
+ const features = await import('./framer-chunks/fontshare-Y53BJZLK-EUQIV252.js');
45503
45562
  return features == null ? void 0 : features.default;
45504
45563
  }
45505
45564
  case 'framer': {
@@ -46047,10 +46106,10 @@ function loadVariationAxes(source,) {
46047
46106
  const axes = (async () => {
46048
46107
  switch (source) {
46049
46108
  case 'google': {
46050
- return (await import('./framer-chunks/google-C62SNV32-LCI4F7VO.js')).default;
46109
+ return (await import('./framer-chunks/google-S367OFIE-AWJEPMSF.js')).default;
46051
46110
  }
46052
46111
  case 'fontshare': {
46053
- return (await import('./framer-chunks/fontshare-JGEKH7YN-QOX3MC3K.js')).default;
46112
+ return (await import('./framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js')).default;
46054
46113
  }
46055
46114
  default:
46056
46115
  assertNever(source,);
@@ -47143,12 +47202,35 @@ var Image2 = /* @__PURE__ */ React4.forwardRef(function Image3(props, ref,) {
47143
47202
  children,
47144
47203
  alt,
47145
47204
  draggable,
47205
+ fitImageDimension,
47146
47206
  style: styleFromProps,
47147
47207
  ...rest
47148
47208
  } = props;
47149
47209
  const style2 = {
47150
47210
  ...styleFromProps,
47151
47211
  };
47212
+ const intrinsicSize = useMemo2(() => getIntrinsicSizeForBackgroundImage(background,), [background,],);
47213
+ const [fallbackIntrinsicSize, setFallbackIntrinsicSize,] = useState();
47214
+ React4.useLayoutEffect(() => {
47215
+ if (!(background == null ? void 0 : background.src)) return;
47216
+ if (!fitImageDimension) return;
47217
+ if (intrinsicSize) return;
47218
+ const img = document.createElement('img',);
47219
+ img.onload = () => {
47220
+ if (img.naturalWidth && img.naturalHeight) {
47221
+ setFallbackIntrinsicSize({
47222
+ width: img.naturalWidth,
47223
+ height: img.naturalHeight,
47224
+ },);
47225
+ }
47226
+ };
47227
+ img.src = background.src;
47228
+ }, [background == null ? void 0 : background.src, fitImageDimension, intrinsicSize,],);
47229
+ const size = intrinsicSize ?? fallbackIntrinsicSize;
47230
+ if (fitImageDimension && size) {
47231
+ style2[fitImageDimension] = 'auto';
47232
+ style2.aspectRatio = size.width / size.height;
47233
+ }
47152
47234
  if (background) {
47153
47235
  delete style2.background;
47154
47236
  }
@@ -49408,7 +49490,7 @@ var TextComponent = /* @__PURE__ */ (() => {
49408
49490
  } = this.props;
49409
49491
  if (this.props.transformTemplate) return this.props.transformTemplate;
49410
49492
  const frame2 = this.frame;
49411
- const isDOMLayoutAutoSized = _usesDOMRect && (widthType === 2 || heightType === 2);
49493
+ const isDOMLayoutAutoSized = _usesDOMRect && (isAutoDimensionType(widthType,) || isAutoDimensionType(heightType,));
49412
49494
  const hasTransformTemplate = !frame2 || !RenderTarget.hasRestrictions() || __fromCanvasComponent || isDOMLayoutAutoSized;
49413
49495
  if (hasTransformTemplate) return transformTemplate(this.props.center,);
49414
49496
  }