unframer 3.0.6 → 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 (87) 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 +3 -2
  5. package/dist/exporter.d.ts.map +1 -1
  6. package/dist/exporter.js +45 -23
  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 +282 -103
  33. package/dist/react.d.ts.map +1 -1
  34. package/dist/react.js +21 -16
  35. package/dist/react.js.map +1 -1
  36. package/dist/version.d.ts +1 -1
  37. package/dist/version.js +1 -1
  38. package/esm/cli.d.ts.map +1 -1
  39. package/esm/cli.js +3 -0
  40. package/esm/cli.js.map +1 -1
  41. package/esm/exporter.d.ts +2 -1
  42. package/esm/exporter.d.ts.map +1 -1
  43. package/esm/exporter.js +46 -24
  44. package/esm/exporter.js.map +1 -1
  45. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.d.ts +634 -0
  46. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.d.ts.map +1 -0
  47. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js +5 -0
  48. package/esm/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js.map +1 -0
  49. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.d.ts +115 -0
  50. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.d.ts.map +1 -0
  51. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js +5 -0
  52. package/esm/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js.map +1 -0
  53. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.d.ts +781 -0
  54. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.d.ts.map +1 -0
  55. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js +5 -0
  56. package/esm/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js.map +1 -0
  57. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.d.ts +1566 -0
  58. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.d.ts.map +1 -0
  59. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.js +5 -0
  60. package/esm/framer-chunks/google-2KFYDWCN-PJC2DDXK.js.map +1 -0
  61. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.d.ts +10293 -0
  62. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.d.ts.map +1 -0
  63. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.js +5 -0
  64. package/esm/framer-chunks/google-HSMCYMMG-DWNQGSHN.js.map +1 -0
  65. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.d.ts +3588 -0
  66. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.d.ts.map +1 -0
  67. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.js +5 -0
  68. package/esm/framer-chunks/google-S367OFIE-AWJEPMSF.js.map +1 -0
  69. package/esm/framer.js +281 -102
  70. package/esm/react.d.ts.map +1 -1
  71. package/esm/react.js +21 -16
  72. package/esm/react.js.map +1 -1
  73. package/esm/version.d.ts +1 -1
  74. package/esm/version.js +1 -1
  75. package/package.json +2 -2
  76. package/src/cli.ts +3 -0
  77. package/src/exporter.ts +61 -23
  78. package/src/framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js +7 -0
  79. package/src/framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js +7 -0
  80. package/src/framer-chunks/fontshare-Y53BJZLK-EUQIV252.js +7 -0
  81. package/src/framer-chunks/google-2KFYDWCN-PJC2DDXK.js +7 -0
  82. package/src/framer-chunks/google-HSMCYMMG-DWNQGSHN.js +7 -0
  83. package/src/framer-chunks/google-S367OFIE-AWJEPMSF.js +7 -0
  84. package/src/framer.js +291 -104
  85. package/src/react.tsx +52 -16
  86. package/src/styles/framer.css +52 -1
  87. package/src/version.ts +1 -1
package/dist/framer.js CHANGED
@@ -10959,7 +10959,7 @@ function stagger(duration = 0.1, { startDelay = 0, from = 0, ease: ease2, } = {}
10959
10959
  return startDelay + delay2;
10960
10960
  };
10961
10961
  }
10962
- // /:https://app.framerstatic.com/framer.JQQVEEM4.mjs
10962
+ // /:https://app.framerstatic.com/framer.UWLYDHV3.mjs
10963
10963
  const react_10 = require("react");
10964
10964
  const react_11 = __importDefault(require("react"));
10965
10965
  const react_12 = require("react");
@@ -12431,33 +12431,10 @@ function useRouteHandler(routeId, preload = false, elementId) {
12431
12431
  const handler = react_11.default.useCallback(() => navigate == null ? void 0 : navigate(routeId, elementId), [navigate, elementId, routeId,]);
12432
12432
  return handler;
12433
12433
  }
12434
- var timezone;
12435
- var visitorLocale;
12436
- function setTimezoneAndLocaleForTracking() {
12437
- const resolvedDateTimeOptions = Intl.DateTimeFormat().resolvedOptions();
12438
- timezone = resolvedDateTimeOptions.timeZone;
12439
- visitorLocale = resolvedDateTimeOptions.locale;
12440
- }
12441
- requestIdleCallback(setTimezoneAndLocaleForTracking);
12434
+ var pageviewEventVersion = 2;
12442
12435
  function sendTrackingEvent(eventType, eventData, sendOn = 'lazy') {
12443
- if (!safeWindow.__framer_events)
12444
- return;
12445
- if (!timezone || !visitorLocale)
12446
- setTimezoneAndLocaleForTracking();
12447
- safeWindow.__framer_events.push([eventType, {
12448
- // Base properties common to all events
12449
- referrer: null,
12450
- // The first pageview event will always be sent before hydration, in a script in `exportToHTML.ts`.
12451
- url: safeWindow.location.href,
12452
- hostname: safeWindow.location.hostname || null,
12453
- pathname: safeWindow.location.pathname || null,
12454
- hash: safeWindow.location.hash || null,
12455
- search: safeWindow.location.search || null,
12456
- timezone,
12457
- locale: visitorLocale,
12458
- // Additional properties specific to custom events
12459
- ...eventData,
12460
- }, sendOn,]);
12436
+ var _a;
12437
+ (_a = safeWindow.__framer_events) == null ? void 0 : _a.push([eventType, eventData, sendOn,]);
12461
12438
  switch (eventType) {
12462
12439
  case 'published_site_click': {
12463
12440
  const { trackingId, href, } = eventData;
@@ -13361,7 +13338,7 @@ function usePopStateHandler(currentRouteId, setCurrentRouteId) {
13361
13338
  const stopMonitoringINPRelatedInputs = monitorINPRelatedInputs();
13362
13339
  void nextRender.promise.finally(stopMonitoringINPRelatedInputs);
13363
13340
  const changeRoute = () => {
13364
- setCurrentRouteId(routeId, isString(localeId) ? localeId : void 0, isString(hash2) ? hash2 : void 0, isObject2(pathVariables) ? pathVariables : void 0, true, nextRender, false);
13341
+ setCurrentRouteId(routeId, isString(localeId) ? localeId : void 0, isString(hash2) ? hash2 : void 0, window.location.pathname + window.location.search + window.location.hash, isObject2(pathVariables) ? pathVariables : void 0, true, nextRender, false);
13365
13342
  };
13366
13343
  const viewTransition = await startViewTransition2(currentRouteId.current, routeId, changeRoute);
13367
13344
  const navigationTransition = (_d = window.navigation) == null ? void 0 : _d.transition;
@@ -16175,6 +16152,14 @@ var P3Color = class _P3Color {
16175
16152
  return color2;
16176
16153
  return value.toString('srgb');
16177
16154
  }
16155
+ static multiplyAlpha(color2, alpha2) {
16156
+ return new _P3Color({
16157
+ r: color2.r,
16158
+ g: color2.g,
16159
+ b: color2.b,
16160
+ a: color2.a * alpha2,
16161
+ });
16162
+ }
16178
16163
  };
16179
16164
  function clampRGB(color2) {
16180
16165
  return P3Color.srgbFromValue(color2);
@@ -18845,9 +18830,15 @@ var DimensionType = /* @__PURE__ */ ((DimensionType2) => {
18845
18830
  DimensionType2[DimensionType2['Auto'] = 2] = 'Auto';
18846
18831
  DimensionType2[DimensionType2['FractionOfFreeSpace'] = 3] = 'FractionOfFreeSpace';
18847
18832
  DimensionType2[DimensionType2['Viewport'] = 4] = 'Viewport';
18833
+ DimensionType2[DimensionType2['FitImage'] = 5] = 'FitImage';
18848
18834
  return DimensionType2;
18849
18835
  })(DimensionType || {});
18850
18836
  exports.DimensionType = DimensionType;
18837
+ function isAutoDimensionType(dimensionType) {
18838
+ if (isUndefined(dimensionType))
18839
+ return false;
18840
+ return dimensionType === 2 || dimensionType === 5;
18841
+ }
18851
18842
  function isConstraintSupportingChild(child) {
18852
18843
  if (!isReactChild(child) || !isReactElement(child)) {
18853
18844
  return false;
@@ -18858,7 +18849,7 @@ var ConstraintMask = {
18858
18849
  // Modifies the constraint mask to remove invalid (mutually exclusive) options and returns the original.
18859
18850
  // TODO: this removes major inconsistencies but probably needs to be merged with ConstraintSolver.
18860
18851
  quickfix: (constraints) => {
18861
- if (constraints.widthType === 2 || constraints.heightType === 2) {
18852
+ if (isAutoDimensionType(constraints.widthType) || isAutoDimensionType(constraints.heightType)) {
18862
18853
  constraints.aspectRatio = null;
18863
18854
  }
18864
18855
  if (isFiniteNumber(constraints.aspectRatio)) {
@@ -18876,13 +18867,13 @@ var ConstraintMask = {
18876
18867
  }
18877
18868
  }
18878
18869
  if (constraints.left && constraints.right) {
18879
- if (constraints.fixedSize || constraints.widthType === 2 || isFiniteNumber(constraints.maxWidth)) {
18870
+ if (constraints.fixedSize || isAutoDimensionType(constraints.widthType) || isFiniteNumber(constraints.maxWidth)) {
18880
18871
  constraints.right = false;
18881
18872
  }
18882
18873
  constraints.widthType = 0;
18883
18874
  }
18884
18875
  if (constraints.top && constraints.bottom) {
18885
- if (constraints.fixedSize || constraints.heightType === 2 || isFiniteNumber(constraints.maxHeight)) {
18876
+ if (constraints.fixedSize || isAutoDimensionType(constraints.heightType) || isFiniteNumber(constraints.maxHeight)) {
18886
18877
  constraints.bottom = false;
18887
18878
  }
18888
18879
  constraints.heightType = 0;
@@ -18992,7 +18983,7 @@ var ConstraintValues = {
18992
18983
  if (parentWidth && isFiniteNumber(hOpposingPinsOffset)) {
18993
18984
  width = parentWidth - hOpposingPinsOffset;
18994
18985
  }
18995
- else if (autoSize && values.widthType === 2) {
18986
+ else if (autoSize && isAutoDimensionType(values.widthType)) {
18996
18987
  width = autoSize.width;
18997
18988
  }
18998
18989
  else if (isFiniteNumber(values.width)) {
@@ -19010,6 +19001,7 @@ var ConstraintValues = {
19010
19001
  }
19011
19002
  break;
19012
19003
  case 2:
19004
+ case 5:
19013
19005
  break;
19014
19006
  default:
19015
19007
  assertNever(values.widthType);
@@ -19019,7 +19011,7 @@ var ConstraintValues = {
19019
19011
  if (parentHeight && isFiniteNumber(vOpposingPinsOffset)) {
19020
19012
  height = parentHeight - vOpposingPinsOffset;
19021
19013
  }
19022
- else if (autoSize && values.heightType === 2) {
19014
+ else if (autoSize && isAutoDimensionType(values.heightType)) {
19023
19015
  height = autoSize.height;
19024
19016
  }
19025
19017
  else if (isFiniteNumber(values.height)) {
@@ -19037,6 +19029,7 @@ var ConstraintValues = {
19037
19029
  }
19038
19030
  break;
19039
19031
  case 2:
19032
+ case 5:
19040
19033
  break;
19041
19034
  default:
19042
19035
  assertNever(values.heightType);
@@ -19912,6 +19905,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19912
19905
  li.framer-text,
19913
19906
  ol.framer-text,
19914
19907
  ul.framer-text,
19908
+ mark.framer-text,
19915
19909
  span.framer-text:not([data-text-fill]) {
19916
19910
  font-family: var(--framer-blockquote-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif));
19917
19911
  font-style: var(--framer-blockquote-font-style, var(--framer-font-style, normal));
@@ -19937,6 +19931,24 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19937
19931
  text-wrap: var(--framer-text-wrap-override, var(--framer-text-wrap));
19938
19932
  }
19939
19933
  `, /* css */
19934
+ `
19935
+ mark.framer-text,
19936
+ p.framer-text,
19937
+ div.framer-text,
19938
+ h1.framer-text,
19939
+ h2.framer-text,
19940
+ h3.framer-text,
19941
+ h4.framer-text,
19942
+ h5.framer-text,
19943
+ h6.framer-text,
19944
+ li.framer-text,
19945
+ ol.framer-text,
19946
+ ul.framer-text {
19947
+ background-color: var(--framer-blockquote-text-background-color, var(--framer-text-background-color, initial));
19948
+ border-radius: var(--framer-blockquote-text-background-radius, var(--framer-text-background-radius, initial));
19949
+ padding: var(--framer-blockquote-text-background-padding, var(--framer-text-background-padding, initial));
19950
+ }
19951
+ `, /* css */
19940
19952
  `
19941
19953
  @supports not (color: color(display-p3 1 1 1)) {
19942
19954
  p.framer-text,
@@ -19954,6 +19966,10 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19954
19966
  color: ${createRGBVariableFallbacks(['--framer-blockquote-text-color', '--framer-text-color',], '#000')};
19955
19967
  -webkit-text-stroke-color: ${createRGBVariableFallbacks(['--framer-text-stroke-color',], 'initial')};
19956
19968
  }
19969
+
19970
+ mark.framer-text {
19971
+ background-color: ${createRGBVariableFallbacks(['--framer-blockquote-text-background-color', '--framer-text-background-color',], 'initial')};
19972
+ }
19957
19973
  }
19958
19974
  `, /* css */
19959
19975
  `
@@ -20076,6 +20092,10 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20076
20092
  text-transform: var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
20077
20093
  /* Cursor inherit to overwrite the user agent stylesheet on rich text links. */
20078
20094
  cursor: var(--framer-custom-cursors, pointer);
20095
+ /* Don't inherit background styles from any parent text style. */
20096
+ background-color: var(--framer-link-text-background-color, initial);
20097
+ border-radius: var(--framer-link-text-background-radius, initial);
20098
+ padding: var(--framer-link-text-background-padding, initial);
20079
20099
  }
20080
20100
  `,
20081
20101
  // Text decoration can't be applied to the nested spans of links because it breaks animations
@@ -20098,6 +20118,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20098
20118
  span.framer-text[data-nested-link],
20099
20119
  span.framer-text[data-nested-link] span.framer-text:not([data-text-fill]) {
20100
20120
  color: ${createRGBVariableFallbacks(['--framer-blockquote-text-color', '--framer-link-text-color', '--framer-text-color',], '#000')};
20121
+ background-color: ${createRGBVariableFallbacks(['--framer-link-text-background-color',], 'initial')};
20101
20122
  }
20102
20123
  }
20103
20124
  `, /* css */
@@ -20139,6 +20160,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20139
20160
  color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
20140
20161
  font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
20141
20162
  text-transform: var(--framer-link-hover-text-transform, var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
20163
+ background-color: var(--framer-link-hover-text-background-color, var(--framer-link-text-background-color, var(--framer-text-background-color, initial)));
20164
+ border-radius: var(--framer-link-hover-text-background-radius, var(--framer-link-text-background-radius, var(--framer-text-background-radius, initial)));
20165
+ padding: var(--framer-link-hover-text-background-padding, var(--framer-link-text-background-padding, var(--framer-text-background-padding, initial)));
20142
20166
  }
20143
20167
  `, /* css */
20144
20168
  `
@@ -20164,6 +20188,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20164
20188
  '--framer-link-text-color',
20165
20189
  '--framer-text-color',
20166
20190
  ], '#000')};
20191
+ background-color: ${createRGBVariableFallbacks([
20192
+ '--framer-link-hover-text-background-color',
20193
+ '--framer-link-text-background-color',
20194
+ '--framer-text-background-color',
20195
+ ], 'initial')};
20167
20196
  }
20168
20197
  }
20169
20198
  `, /* css */
@@ -20205,6 +20234,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20205
20234
  color: var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
20206
20235
  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));
20207
20236
  text-transform: var(--framer-link-current-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
20237
+ background-color: var(--framer-link-current-text-background-color, var(--framer-link-text-background-color, initial));
20238
+ border-radius: var(--framer-link-current-text-background-radius, var(--framer-link-text-background-radius, initial));
20239
+ padding: var(--framer-link-current-text-background-padding, var(--framer-link-text-background-padding, initial));
20208
20240
  }
20209
20241
  `, /* css */
20210
20242
  `
@@ -20225,6 +20257,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20225
20257
  span.framer-text[data-framer-page-link-current],
20226
20258
  span.framer-text[data-framer-page-link-current] span.framer-text:not([data-text-fill]) {
20227
20259
  color: ${createRGBVariableFallbacks(['--framer-link-current-text-color', '--framer-link-text-color', '--framer-text-color',], '#000')};
20260
+ background-color: ${createRGBVariableFallbacks([
20261
+ '--framer-link-current-text-background-color',
20262
+ '--framer-link-text-background-color',
20263
+ '--framer-text-background-color',
20264
+ ], 'initial')};
20228
20265
  }
20229
20266
  }
20230
20267
  `, /* css */
@@ -20252,6 +20289,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20252
20289
  '--framer-code-text-color',
20253
20290
  '--framer-text-color',
20254
20291
  ], '#000')};
20292
+ background-color: ${createRGBVariableFallbacks([
20293
+ '--framer-link-current-text-background-color',
20294
+ '--framer-link-text-background-color',
20295
+ '--framer-text-background-color',
20296
+ ], 'initial')};
20255
20297
  }
20256
20298
  }
20257
20299
  `, /* css */
@@ -20266,6 +20308,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20266
20308
  color: var(--framer-link-hover-text-color, var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
20267
20309
  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));
20268
20310
  text-transform: var(--framer-link-hover-text-transform, var(--framer-link-current-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
20311
+ background-color: var(--framer-link-hover-text-background-color, var(--framer-link-current-text-background-color, var(--framer-link-text-background-color, initial)));
20312
+ border-radius: var(--framer-link-hover-text-background-radius, var(--framer-link-current-text-background-radius, var(--framer-link-text-background-radius, initial)));
20313
+ padding: var(--framer-link-hover-text-background-padding, var(--framer-link-current-text-background-padding, var(--framer-link-text-background-padding, initial)));
20269
20314
  }
20270
20315
  `, /* css */
20271
20316
  `
@@ -20292,6 +20337,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20292
20337
  '--framer-code-text-color',
20293
20338
  '--framer-text-color',
20294
20339
  ], '#000')};
20340
+ background-color: ${createRGBVariableFallbacks([
20341
+ '--framer-link-hover-text-background-color',
20342
+ '--framer-link-current-text-background-color',
20343
+ '--framer-link-text-background-color',
20344
+ ], 'initial')};
20295
20345
  }
20296
20346
  }
20297
20347
  `, /* css */
@@ -20305,6 +20355,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20305
20355
  font-weight: var(--framer-code-font-weight, var(--framer-font-weight, 400));
20306
20356
  color: var(--framer-link-hover-text-color, var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)))));
20307
20357
  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));
20358
+ 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))));
20359
+ 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))));
20360
+ 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))));
20308
20361
  }
20309
20362
  `, /* css */
20310
20363
  `
@@ -20320,6 +20373,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20320
20373
  '--framer-code-text-color',
20321
20374
  '--framer-text-color',
20322
20375
  ], '#000')};
20376
+ background-color: ${createRGBVariableFallbacks([
20377
+ '--framer-link-hover-text-background-color',
20378
+ '--framer-link-current-text-background-color',
20379
+ '--framer-link-text-background-color',
20380
+ ], 'initial')};
20323
20381
  }
20324
20382
  }
20325
20383
  `, /* css */
@@ -20348,6 +20406,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
20348
20406
  --framer-line-height: 1.2em;
20349
20407
  --framer-text-alignment: start;
20350
20408
  --framer-font-open-type-features: normal;
20409
+ --framer-text-background-color: initial;
20410
+ --framer-text-background-radius: initial;
20411
+ --framer-text-background-padding: initial;
20351
20412
  }
20352
20413
  `, /* css */
20353
20414
  `
@@ -20801,6 +20862,10 @@ var frameCSSRules = (isPreview) => {
20801
20862
  return isPreview ? frameCSS : [];
20802
20863
  };
20803
20864
  var svgCSSRules = [`.svgContainer svg { display: block; }`,];
20865
+ var overflowClipFallbackCSSVariable = '--overflow-clip-fallback';
20866
+ var overflowClipFallbackCSSRules = /* @__PURE__ */ (() => [`@supports (not (overflow: clip)) {
20867
+ :root { ${overflowClipFallbackCSSVariable}: hidden; }
20868
+ }`,])();
20804
20869
  var combineCSSRules = (isPreview) => [
20805
20870
  ...willChangeTransformRules(isPreview),
20806
20871
  ...componentCSSRules,
@@ -20819,6 +20884,7 @@ var combineCSSRules = (isPreview) => [
20819
20884
  ...svgCSSRules,
20820
20885
  ...resetCSS,
20821
20886
  ...hideScrollbars,
20887
+ ...overflowClipFallbackCSSRules,
20822
20888
  ];
20823
20889
  exports.combinedCSSRules = combineCSSRules(false);
20824
20890
  var combinedCSSRulesForPreview = /* @__PURE__ */ combineCSSRules(true);
@@ -22536,14 +22602,6 @@ var reactPropsRegex = /^(?:children|dangerouslySetInnerHTML|key|ref|autoFocus|de
22536
22602
  var isPropValid = /* @__PURE__ */ memoize((prop) => reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 && prop.charCodeAt(1) === 110 && prop.charCodeAt(2) < 91
22537
22603
  /* Z+1 */
22538
22604
  );
22539
- var LibraryFeaturesContext = /* @__PURE__ */ react_11.default.createContext(void 0);
22540
- LibraryFeaturesContext.displayName = 'LibraryFeaturesContext';
22541
- var LibraryFeaturesProvider = /* @__PURE__ */ (() => LibraryFeaturesContext.Provider)();
22542
- exports.LibraryFeaturesProvider = LibraryFeaturesProvider;
22543
- var useLibraryFeatures = () => {
22544
- const context = react_11.default.useContext(LibraryFeaturesContext);
22545
- return context ?? {};
22546
- };
22547
22605
  var mockWithWarning = (message) => {
22548
22606
  return () => {
22549
22607
  warnOnce2(message);
@@ -22573,6 +22631,7 @@ var implementation = {
22573
22631
  canRenderOptimizedCanvasImage() {
22574
22632
  return false;
22575
22633
  },
22634
+ isOnPageCanvas: false,
22576
22635
  };
22577
22636
  var isRuntimeInjected = false;
22578
22637
  var runtimeProxy = {
@@ -22594,6 +22653,14 @@ function _injectRuntime(injectedRuntime) {
22594
22653
  Object.assign(implementation, injectedRuntime);
22595
22654
  isRuntimeInjected = true;
22596
22655
  }
22656
+ var LibraryFeaturesContext = /* @__PURE__ */ react_11.default.createContext(void 0);
22657
+ LibraryFeaturesContext.displayName = 'LibraryFeaturesContext';
22658
+ var LibraryFeaturesProvider = /* @__PURE__ */ (() => LibraryFeaturesContext.Provider)();
22659
+ exports.LibraryFeaturesProvider = LibraryFeaturesProvider;
22660
+ var useLibraryFeatures = () => {
22661
+ const context = react_11.default.useContext(LibraryFeaturesContext);
22662
+ return context ?? {};
22663
+ };
22597
22664
  var wrapperStyle = {
22598
22665
  position: 'absolute',
22599
22666
  borderRadius: 'inherit',
@@ -22835,7 +22902,7 @@ var BackgroundImage = {
22835
22902
  isImageObject: function (image) {
22836
22903
  if (!image || typeof image === 'string')
22837
22904
  return false;
22838
- return key in image;
22905
+ return typeof image === 'object' && key in image;
22839
22906
  },
22840
22907
  };
22841
22908
  exports.BackgroundImage = BackgroundImage;
@@ -22871,6 +22938,31 @@ function backgroundImageFromProps(props) {
22871
22938
  }
22872
22939
  return applyForwardOverrides(backgroundImage, props);
22873
22940
  }
22941
+ function getIntrinsicSizeForBackgroundImage(background) {
22942
+ if (!background)
22943
+ return void 0;
22944
+ if (background.pixelHeight && background.pixelWidth) {
22945
+ return {
22946
+ width: background.pixelWidth,
22947
+ height: background.pixelHeight,
22948
+ };
22949
+ }
22950
+ return parseImageSizeFromSrc(background.src);
22951
+ }
22952
+ function parseImageSizeFromSrc(src) {
22953
+ if (!src)
22954
+ return void 0;
22955
+ const url = new URL(src);
22956
+ const width = url.searchParams.get('width');
22957
+ const height = url.searchParams.get('height');
22958
+ if (width && height) {
22959
+ return {
22960
+ width: parseInt(width),
22961
+ height: parseInt(height),
22962
+ };
22963
+ }
22964
+ return void 0;
22965
+ }
22874
22966
  function htmlElementAsMotionComponent(asElem) {
22875
22967
  return asElem && asElem !== 'search' && asElem !== 'slot' && asElem !== 'template' ? motion[asElem] : motion['div'];
22876
22968
  }
@@ -23864,7 +23956,7 @@ function useStyleAndRect(props) {
23864
23956
  }
23865
23957
  const isRenderingStaticContent = isStaticRenderer();
23866
23958
  if (props.positionSticky) {
23867
- if (!isRenderingStaticContent || inCodeComponent) {
23959
+ if (!isRenderingStaticContent || runtime.isOnPageCanvas || inCodeComponent) {
23868
23960
  resultStyle.position = 'sticky';
23869
23961
  resultStyle.willChange = 'transform';
23870
23962
  resultStyle.zIndex = 1;
@@ -23874,8 +23966,13 @@ function useStyleAndRect(props) {
23874
23966
  resultStyle.left = props.positionStickyLeft;
23875
23967
  }
23876
23968
  }
23877
- else if (isRenderingStaticContent && (props.positionFixed || props.positionAbsolute)) {
23878
- resultStyle.position = 'absolute';
23969
+ else if (isRenderingStaticContent) {
23970
+ if (props.positionFixed) {
23971
+ resultStyle.position = runtime.isOnPageCanvas ? 'fixed' : 'absolute';
23972
+ }
23973
+ else if (props.positionAbsolute) {
23974
+ resultStyle.position = 'absolute';
23975
+ }
23879
23976
  }
23880
23977
  if ('rotate' in resultStyle && resultStyle.rotate === void 0) {
23881
23978
  delete resultStyle.rotate;
@@ -23980,6 +24077,11 @@ var VisibleFrame = /* @__PURE__ */ (0, react_7.forwardRef)(function VisibleFrame
23980
24077
  ],
23981
24078
  }), parentSize);
23982
24079
  const MotionComponent = htmlElementAsMotionComponent(props.as);
24080
+ const intrinsicSize = getIntrinsicSizeForBackgroundImage(backgroundImage);
24081
+ if (props.fitImageDimension && intrinsicSize) {
24082
+ currentStyle[props.fitImageDimension] = 'auto';
24083
+ currentStyle.aspectRatio = intrinsicSize.width / intrinsicSize.height;
24084
+ }
23983
24085
  return /* @__PURE__ */ (0, jsx_runtime_2.jsxs)(MotionComponent, {
23984
24086
  ...dataProps,
23985
24087
  ...motionProps,
@@ -33331,15 +33433,15 @@ function domWriteCreateUpdateSafeArea(safeAreaRef) {
33331
33433
  Object.assign(safeAreaRef.current.style, floatingPositionSafeAreaStyle(x, y, placement, anchorRect, calculatedRect));
33332
33434
  };
33333
33435
  }
33334
- function domWriteUpdatePosition(floatingPositionRef, position, rect) {
33436
+ function domWriteUpdatePosition(floatingPositionRef, position, rect, scrollX, scrollY) {
33335
33437
  if (!floatingPositionRef.current)
33336
33438
  return;
33337
33439
  Object.assign(floatingPositionRef.current.style, {
33338
33440
  position,
33339
33441
  visibility: 'visible',
33340
33442
  // Append "px" because we are assigning this object straight to style.
33341
- left: ((rect == null ? void 0 : rect.x) ?? 0) + (position === 'fixed' ? 0 : safeWindow.scrollX) + 'px',
33342
- top: ((rect == null ? void 0 : rect.y) ?? 0) + (position === 'fixed' ? 0 : safeWindow.scrollY) + 'px',
33443
+ left: ((rect == null ? void 0 : rect.x) ?? 0) + scrollX + 'px',
33444
+ top: ((rect == null ? void 0 : rect.y) ?? 0) + scrollY + 'px',
33343
33445
  });
33344
33446
  }
33345
33447
  var FloatingStackingContext = /* @__PURE__ */ (() => {
@@ -33466,13 +33568,14 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
33466
33568
  let elementRect;
33467
33569
  let safePlacement;
33468
33570
  let calculatedRect;
33469
- let scrolls;
33470
33571
  let latestEvent;
33471
33572
  let updateSafeArea;
33573
+ let scrollX = 0;
33574
+ let scrollY = 0;
33472
33575
  const onRender = () => {
33473
33576
  if (cleanupHasRun)
33474
33577
  return;
33475
- domWriteUpdatePosition(floatingPositionRef, position, calculatedRect);
33578
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect, scrollX, scrollY);
33476
33579
  if (safeArea)
33477
33580
  updateSafeArea(anchorRect, calculatedRect, safePlacement, latestEvent);
33478
33581
  latestEvent = void 0;
@@ -33483,7 +33586,7 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
33483
33586
  onRender();
33484
33587
  }
33485
33588
  else {
33486
- domWriteUpdatePosition(floatingPositionRef, position, calculatedRect);
33589
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect, scrollX, scrollY);
33487
33590
  }
33488
33591
  initialUpdateHasRun = true;
33489
33592
  };
@@ -33495,6 +33598,14 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
33495
33598
  const domReadUpdateSafePlacementAndRect = () => {
33496
33599
  if (!getSafePlacementRect || cleanupHasRun)
33497
33600
  return;
33601
+ if (position === 'fixed') {
33602
+ scrollX = 0;
33603
+ scrollY = 0;
33604
+ }
33605
+ else {
33606
+ scrollX = safeWindow.scrollX;
33607
+ scrollY = safeWindow.scrollY;
33608
+ }
33498
33609
  anchorRect = anchorRef.current.getBoundingClientRect();
33499
33610
  const safePlacementAndRect = getSafePlacementRect(anchorRect, elementRect);
33500
33611
  safePlacement = safePlacementAndRect[0];
@@ -35067,57 +35178,79 @@ function isSamePage(a, b) {
35067
35178
  return aPathVariables.length === bPathVariables.length &&
35068
35179
  Object.keys(aPathVariables).every((key7) => aPathVariables[key7] === bPathVariables[key7]);
35069
35180
  }
35070
- function getPageviewEventData({ abTestId, framerSiteId, routeId, routePath, collectionItemId, localeCode, }) {
35071
- return {
35072
- abTestId,
35073
- framerSiteId,
35074
- routePath: routePath || '/',
35075
- collectionItemId,
35076
- framerLocale: localeCode,
35077
- webPageId: routeId,
35078
- };
35181
+ var timezone = null;
35182
+ var visitorLocale = null;
35183
+ function setTimezoneAndLocaleForTracking() {
35184
+ const resolvedDateTimeOptions = Intl.DateTimeFormat().resolvedOptions();
35185
+ timezone = resolvedDateTimeOptions.timeZone;
35186
+ visitorLocale = resolvedDateTimeOptions.locale;
35079
35187
  }
35080
- var useSendPageView = (currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale) => {
35188
+ requestIdleCallback(setTimezoneAndLocaleForTracking);
35189
+ var useSendPageView = (currentRoute, currentRouteId, currentPathnameWithHash, currentPathVariables, collectionUtils, activeLocale) => {
35081
35190
  const framerSiteId = (0, react_3.useContext)(FormContext);
35082
35191
  const pageviewEventData = (0, react_4.useRef)();
35083
35192
  const skipFirstPageView = (0, react_4.useRef)(true);
35084
35193
  (0, react_2.useEffect)(() => {
35085
- const getFullPageviewEventData = async () => {
35086
- var _a;
35087
- let collectionItemId = null;
35088
- if ((currentRoute == null ? void 0 : currentRoute.collectionId) && collectionUtils && currentPathVariables) {
35089
- const utils = await ((_a = collectionUtils[currentRoute.collectionId]) == null ? void 0 : _a.call(collectionUtils));
35090
- const [slug,] = Object.values(currentPathVariables);
35091
- if (utils && typeof slug === 'string') {
35092
- collectionItemId = (await utils.getRecordIdBySlug(slug, activeLocale || void 0)) ?? null;
35093
- }
35094
- }
35095
- return getPageviewEventData({
35194
+ function getFullPageviewEventData() {
35195
+ if (!timezone || !visitorLocale)
35196
+ setTimezoneAndLocaleForTracking();
35197
+ const currentLocation = currentPathnameWithHash
35198
+ ? new URL(safeWindow.location.origin + currentPathnameWithHash)
35199
+ : safeWindow.location;
35200
+ const eventData = {
35201
+ version: pageviewEventVersion,
35096
35202
  abTestId: currentRoute == null ? void 0 : currentRoute.abTestId,
35097
35203
  framerSiteId: framerSiteId ?? null,
35098
35204
  // 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.
35099
- routeId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
35100
- routePath: currentRoute == null ? void 0 : currentRoute.path,
35101
- collectionItemId,
35102
- localeCode: (activeLocale == null ? void 0 : activeLocale.code) || null,
35103
- });
35104
- };
35205
+ webPageId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
35206
+ routePath: (currentRoute == null ? void 0 : currentRoute.path) || '/',
35207
+ collectionItemId: null,
35208
+ framerLocale: (activeLocale == null ? void 0 : activeLocale.code) || null,
35209
+ referrer: null,
35210
+ // The first pageview event will always be sent before hydration, in a script in `exportToHTML.ts`.
35211
+ url: currentLocation.href,
35212
+ hostname: currentLocation.hostname,
35213
+ // Capture the current location before the user moves to a new page to prevent
35214
+ // tracking wrong pathnames due to a race condition caused by async operations
35215
+ // when resolving the collection item ID below
35216
+ pathname: currentLocation.pathname,
35217
+ search: currentLocation.search || null,
35218
+ hash: currentLocation.hash || null,
35219
+ timezone,
35220
+ locale: visitorLocale,
35221
+ };
35222
+ return (currentRoute == null ? void 0 : currentRoute.collectionId) && collectionUtils && currentPathVariables
35223
+ ? (async () => {
35224
+ var _a;
35225
+ let collectionItemId = null;
35226
+ const utils = currentRoute.collectionId &&
35227
+ (await ((_a = collectionUtils[currentRoute.collectionId]) == null ? void 0 : _a.call(collectionUtils)));
35228
+ const [slug,] = Object.values(currentPathVariables);
35229
+ if (utils && typeof slug === 'string') {
35230
+ collectionItemId = (await utils.getRecordIdBySlug(slug, activeLocale || void 0)) ?? null;
35231
+ }
35232
+ return {
35233
+ ...eventData,
35234
+ collectionItemId,
35235
+ };
35236
+ })()
35237
+ : eventData;
35238
+ }
35105
35239
  void (async () => {
35106
- const pageviewEventDataPromise = getFullPageviewEventData();
35107
- pageviewEventData.current = pageviewEventDataPromise;
35240
+ const eventDataOrPromise = pageviewEventData.current = getFullPageviewEventData();
35241
+ const eventData = eventDataOrPromise instanceof Promise ? await eventDataOrPromise : eventDataOrPromise;
35242
+ pageviewEventData.current = eventData;
35108
35243
  if (skipFirstPageView.current) {
35109
35244
  skipFirstPageView.current = false;
35110
- return;
35111
35245
  }
35112
- const eventData = await pageviewEventDataPromise;
35113
- pageviewEventData.current = eventData;
35114
- sendTrackingEvent('published_site_pageview', eventData, 'eager');
35246
+ else {
35247
+ sendTrackingEvent('published_site_pageview', eventData, 'eager');
35248
+ }
35115
35249
  })();
35116
35250
  const listener = async (event) => {
35117
35251
  if (event.persisted) {
35118
- const pageviewEventDataPromise = getFullPageviewEventData();
35119
- pageviewEventData.current = pageviewEventDataPromise;
35120
- const eventData = await getFullPageviewEventData();
35252
+ const eventDataOrPromise = pageviewEventData.current = getFullPageviewEventData();
35253
+ const eventData = eventDataOrPromise instanceof Promise ? await eventDataOrPromise : eventDataOrPromise;
35121
35254
  pageviewEventData.current = eventData;
35122
35255
  sendTrackingEvent('published_site_pageview', eventData, 'eager');
35123
35256
  }
@@ -35126,7 +35259,7 @@ var useSendPageView = (currentRoute, currentRouteId, currentPathVariables, colle
35126
35259
  return () => {
35127
35260
  window.removeEventListener('pageshow', listener);
35128
35261
  };
35129
- }, [currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale, framerSiteId,]);
35262
+ }, [currentRoute, currentRouteId, currentPathnameWithHash, currentPathVariables, collectionUtils, activeLocale, framerSiteId,]);
35130
35263
  return pageviewEventData;
35131
35264
  };
35132
35265
  var defaultLocaleId = 'default';
@@ -35229,6 +35362,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
35229
35362
  return (fn) => fn();
35230
35363
  }, [synchronousNavigationOnDesktop,]);
35231
35364
  const isInitialNavigationRef = (0, react_4.useRef)(true);
35365
+ const currentPathnameWithHashRef = (0, react_4.useRef)();
35232
35366
  const currentRouteRef = (0, react_4.useRef)(initialRoute);
35233
35367
  const currentPathVariablesRef = (0, react_4.useRef)(initialPathVariables);
35234
35368
  const currentLocaleIdRef = (0, react_4.useRef)(initialLocaleId);
@@ -35314,12 +35448,13 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
35314
35448
  monitorNextPaintAfterRender,
35315
35449
  transitionFn,
35316
35450
  ]);
35317
- const setCurrentRouteId = (0, react_3.useCallback)((routeId, localeId, hash2, pathVariables, isHistoryTransition, nextRender, smoothScroll = false, updateURL) => {
35451
+ const setCurrentRouteId = (0, react_3.useCallback)((routeId, localeId, hash2, pathnameWithHash, pathVariables, isHistoryTransition, nextRender, smoothScroll = false, updateURL) => {
35318
35452
  isInitialNavigationRef.current = false;
35319
35453
  const currentRouteId2 = currentRouteRef.current;
35320
35454
  currentRouteRef.current = routeId;
35321
35455
  currentPathVariablesRef.current = pathVariables;
35322
35456
  currentLocaleIdRef.current = localeId;
35457
+ currentPathnameWithHashRef.current = pathnameWithHash;
35323
35458
  scheduleSideEffect(() => {
35324
35459
  updateScrollPosition(hash2, smoothScroll, isHistoryTransition);
35325
35460
  });
@@ -35405,14 +35540,26 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
35405
35540
  siteCanonicalURL,
35406
35541
  }, ignorePushStateWrapper);
35407
35542
  };
35408
- setCurrentRouteId(routeId, currentRouteLocaleId, routeElementId, pathVariables, false, nextRender, smoothScroll, disableHistory ? void 0 : updateURL);
35543
+ const pathnameWithHash = getSitePrefix(siteCanonicalURL) + getPathForRoute(newRoute, {
35544
+ currentRoutePath: currentRoute2 == null ? void 0 : currentRoute2.path,
35545
+ currentPathVariables: currentPathVariables2,
35546
+ hash: hash2,
35547
+ pathVariables,
35548
+ localeId: currentRouteLocaleId,
35549
+ preserveQueryParams,
35550
+ siteCanonicalURL,
35551
+ relative: false,
35552
+ // We need an absolute path for the hash
35553
+ });
35554
+ setCurrentRouteId(routeId, currentRouteLocaleId, routeElementId, pathnameWithHash, pathVariables, false, nextRender, smoothScroll, disableHistory ? void 0 : updateURL);
35409
35555
  }, [routes, setCurrentRouteId, disableHistory, preserveQueryParams, siteCanonicalURL, monitorNextPaintAfterRender,]);
35410
35556
  const getRoute = useGetRouteCallback(routes);
35411
35557
  const currentRouteId = currentRouteRef.current;
35558
+ const currentPathnameWithHash = currentPathnameWithHashRef.current;
35412
35559
  const currentPathVariables = currentPathVariablesRef.current;
35413
35560
  const currentRoute = routes[currentRouteId];
35414
35561
  const currentRoutePath = currentRoute == null ? void 0 : currentRoute.path;
35415
- const pageviewEventData = useSendPageView(currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale);
35562
+ const pageviewEventData = useSendPageView(currentRoute, currentRouteId, currentPathnameWithHash, currentPathVariables, collectionUtils, activeLocale);
35416
35563
  const isInitialNavigation = isInitialNavigationRef.current;
35417
35564
  const api = (0, react_4.useMemo)(() => ({
35418
35565
  navigate,
@@ -35465,7 +35612,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
35465
35612
  /* @__PURE__ */ (0, jsx_runtime_1.jsx)(MarkSuspenseEffects.Start, {}),
35466
35613
  /* @__PURE__ */ (0, jsx_runtime_1.jsx)(WithLayoutTemplate, {
35467
35614
  LayoutTemplate,
35468
- routeId: currentRouteId,
35615
+ routeId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
35469
35616
  style: defaultPageStyle,
35470
35617
  children: (inLayoutTemplate) => {
35471
35618
  return /* @__PURE__ */ (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {
@@ -42889,6 +43036,9 @@ function assert2(condition, ...msg) {
42889
43036
  }
42890
43037
  var missing = Symbol('missing');
42891
43038
  var frozenEmptyArray = Object.freeze([]);
43039
+ function emptyArray() {
43040
+ return frozenEmptyArray;
43041
+ }
42892
43042
  var errorReporter;
42893
43043
  function reportError({ error: maybeError, tags, extras, critical, caller, }) {
42894
43044
  assert2(errorReporter, 'Set up an error callback with setErrorReporter, or configure Sentry with initializeEnvironment');
@@ -43191,7 +43341,9 @@ try {
43191
43341
  catch { }
43192
43342
  var postLogEntry;
43193
43343
  try {
43194
- if (typeof window !== 'undefined' && !!window.postMessage && window.top !== window) {
43344
+ if (typeof window !== 'undefined' && !!window.postMessage && window.parent !== window &&
43345
+ // Don't post messages to the top-level site from the Editor Bar
43346
+ !window.location.pathname.startsWith('/edit')) {
43195
43347
  postLogEntry = (entry) => {
43196
43348
  var _a;
43197
43349
  try {
@@ -43205,7 +43357,7 @@ try {
43205
43357
  parts,
43206
43358
  printed,
43207
43359
  };
43208
- (_a = window.top) == null ? void 0 : _a.postMessage(data2, getServiceMap().app);
43360
+ (_a = window.parent) == null ? void 0 : _a.postMessage(data2, getServiceMap().app);
43209
43361
  }
43210
43362
  catch { }
43211
43363
  };
@@ -44287,11 +44439,11 @@ function getAssetOwnerType(asset) {
44287
44439
  async function loadFontsWithOpenType(source) {
44288
44440
  switch (source) {
44289
44441
  case 'google': {
44290
- const supportedFonts = await import('./framer-chunks/google-3ASCFEEO-3R47BR2A.js');
44442
+ const supportedFonts = await import('./framer-chunks/google-2KFYDWCN-PJC2DDXK.js');
44291
44443
  return supportedFonts == null ? void 0 : supportedFonts.default;
44292
44444
  }
44293
44445
  case 'fontshare': {
44294
- const supportedFonts = await import('./framer-chunks/fontshare-4J2ZFRBB-H5VQLZTM.js');
44446
+ const supportedFonts = await import('./framer-chunks/fontshare-EOIRPPWV-VDFFNW4K.js');
44295
44447
  return supportedFonts == null ? void 0 : supportedFonts.default;
44296
44448
  }
44297
44449
  default:
@@ -44301,11 +44453,11 @@ async function loadFontsWithOpenType(source) {
44301
44453
  async function loadFontToOpenTypeFeatures(source) {
44302
44454
  switch (source) {
44303
44455
  case 'google': {
44304
- const features = await import('./framer-chunks/google-FDB6LUFQ-PFSUZGKF.js');
44456
+ const features = await import('./framer-chunks/google-HSMCYMMG-DWNQGSHN.js');
44305
44457
  return features == null ? void 0 : features.default;
44306
44458
  }
44307
44459
  case 'fontshare': {
44308
- const features = await import('./framer-chunks/fontshare-622CVMZZ-HFPH543A.js');
44460
+ const features = await import('./framer-chunks/fontshare-Y53BJZLK-EUQIV252.js');
44309
44461
  return features == null ? void 0 : features.default;
44310
44462
  }
44311
44463
  case 'framer': {
@@ -44830,10 +44982,10 @@ function loadVariationAxes(source) {
44830
44982
  const axes = (async () => {
44831
44983
  switch (source) {
44832
44984
  case 'google': {
44833
- return (await import('./framer-chunks/google-C62SNV32-LCI4F7VO.js')).default;
44985
+ return (await import('./framer-chunks/google-S367OFIE-AWJEPMSF.js')).default;
44834
44986
  }
44835
44987
  case 'fontshare': {
44836
- return (await import('./framer-chunks/fontshare-JGEKH7YN-QOX3MC3K.js')).default;
44988
+ return (await import('./framer-chunks/fontshare-2X4LZ75B-D2V5BX73.js')).default;
44837
44989
  }
44838
44990
  default:
44839
44991
  assertNever(source);
@@ -45770,10 +45922,35 @@ var styles3 = /* @__PURE__ */ (() => [
45770
45922
  var FormSelect = /* @__PURE__ */ withCSS(Select, styles3, 'framer-lib-form-select');
45771
45923
  exports.FormSelect = FormSelect;
45772
45924
  var Image2 = /* @__PURE__ */ react_11.default.forwardRef(function Image3(props, ref) {
45773
- const { background, children, alt, draggable, style: styleFromProps, ...rest } = props;
45925
+ const { background, children, alt, draggable, fitImageDimension, style: styleFromProps, ...rest } = props;
45774
45926
  const style2 = {
45775
45927
  ...styleFromProps,
45776
45928
  };
45929
+ const intrinsicSize = (0, react_4.useMemo)(() => getIntrinsicSizeForBackgroundImage(background), [background,]);
45930
+ const [fallbackIntrinsicSize, setFallbackIntrinsicSize,] = (0, react_4.useState)();
45931
+ react_11.default.useLayoutEffect(() => {
45932
+ if (!(background == null ? void 0 : background.src))
45933
+ return;
45934
+ if (!fitImageDimension)
45935
+ return;
45936
+ if (intrinsicSize)
45937
+ return;
45938
+ const img = document.createElement('img');
45939
+ img.onload = () => {
45940
+ if (img.naturalWidth && img.naturalHeight) {
45941
+ setFallbackIntrinsicSize({
45942
+ width: img.naturalWidth,
45943
+ height: img.naturalHeight,
45944
+ });
45945
+ }
45946
+ };
45947
+ img.src = background.src;
45948
+ }, [background == null ? void 0 : background.src, fitImageDimension, intrinsicSize,]);
45949
+ const size = intrinsicSize ?? fallbackIntrinsicSize;
45950
+ if (fitImageDimension && size) {
45951
+ style2[fitImageDimension] = 'auto';
45952
+ style2.aspectRatio = size.width / size.height;
45953
+ }
45777
45954
  if (background) {
45778
45955
  delete style2.background;
45779
45956
  }
@@ -47899,7 +48076,7 @@ var TextComponent = /* @__PURE__ */ (() => {
47899
48076
  if (this.props.transformTemplate)
47900
48077
  return this.props.transformTemplate;
47901
48078
  const frame2 = this.frame;
47902
- const isDOMLayoutAutoSized = _usesDOMRect && (widthType === 2 || heightType === 2);
48079
+ const isDOMLayoutAutoSized = _usesDOMRect && (isAutoDimensionType(widthType) || isAutoDimensionType(heightType));
47903
48080
  const hasTransformTemplate = !frame2 || !RenderTarget.hasRestrictions() || __fromCanvasComponent || isDOMLayoutAutoSized;
47904
48081
  if (hasTransformTemplate)
47905
48082
  return transformTemplate(this.props.center);
@@ -48839,8 +49016,10 @@ function addFonts(component, passedFonts, flags) {
48839
49016
  });
48840
49017
  }
48841
49018
  function getFonts(component) {
49019
+ if (!component)
49020
+ return emptyArray();
48842
49021
  const fonts = component.fonts;
48843
- return fonts ?? [];
49022
+ return fonts ?? emptyArray();
48844
49023
  }
48845
49024
  function getFontsFromSharedStyle(fonts) {
48846
49025
  if (fonts.length === 0) {