unframer 2.26.0 → 2.27.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 (102) hide show
  1. package/dist/css.d.ts.map +1 -1
  2. package/dist/css.js +7 -6
  3. package/dist/css.js.map +1 -1
  4. package/dist/exporter.d.ts.map +1 -1
  5. package/dist/exporter.js +0 -1
  6. package/dist/exporter.js.map +1 -1
  7. package/dist/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.d.ts +115 -0
  8. package/dist/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.d.ts.map +1 -0
  9. package/dist/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js +8 -0
  10. package/dist/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js.map +1 -0
  11. package/dist/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.d.ts +781 -0
  12. package/dist/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.d.ts.map +1 -0
  13. package/dist/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js +8 -0
  14. package/dist/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js.map +1 -0
  15. package/dist/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.d.ts +634 -0
  16. package/dist/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.d.ts.map +1 -0
  17. package/dist/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js +8 -0
  18. package/dist/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js.map +1 -0
  19. package/dist/framer-chunks/google-42BCYVR5-QT55MZO3.d.ts +3231 -0
  20. package/dist/framer-chunks/google-42BCYVR5-QT55MZO3.d.ts.map +1 -0
  21. package/dist/framer-chunks/google-42BCYVR5-QT55MZO3.js +8 -0
  22. package/dist/framer-chunks/google-42BCYVR5-QT55MZO3.js.map +1 -0
  23. package/dist/framer.d.ts.map +1 -1
  24. package/dist/framer.js +745 -443
  25. package/dist/framer.js.map +1 -1
  26. package/dist/react.d.ts.map +1 -1
  27. package/dist/react.js +18 -0
  28. package/dist/react.js.map +1 -1
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/esm/css.d.ts.map +1 -1
  32. package/esm/css.js +7 -6
  33. package/esm/css.js.map +1 -1
  34. package/esm/exporter.d.ts.map +1 -1
  35. package/esm/exporter.js +1 -2
  36. package/esm/exporter.js.map +1 -1
  37. package/esm/framer-chunks/chunk-22NYTOTD.d.ts +14 -0
  38. package/esm/framer-chunks/chunk-22NYTOTD.d.ts.map +1 -0
  39. package/esm/framer-chunks/chunk-22NYTOTD.js +99 -0
  40. package/esm/framer-chunks/chunk-22NYTOTD.js.map +1 -0
  41. package/esm/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.d.ts +115 -0
  42. package/esm/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.d.ts.map +1 -0
  43. package/esm/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js +5 -0
  44. package/esm/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js.map +1 -0
  45. package/esm/framer-chunks/fontshare-GSJIWLGZ-7BHTUG6K.d.ts +115 -0
  46. package/esm/framer-chunks/fontshare-GSJIWLGZ-7BHTUG6K.d.ts.map +1 -0
  47. package/esm/framer-chunks/fontshare-GSJIWLGZ-7BHTUG6K.js +5 -0
  48. package/esm/framer-chunks/fontshare-GSJIWLGZ-7BHTUG6K.js.map +1 -0
  49. package/esm/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.d.ts +781 -0
  50. package/esm/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.d.ts.map +1 -0
  51. package/esm/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js +5 -0
  52. package/esm/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js.map +1 -0
  53. package/esm/framer-chunks/fontshare-SSHBFVID-ZX5Y6FJ4.d.ts +781 -0
  54. package/esm/framer-chunks/fontshare-SSHBFVID-ZX5Y6FJ4.d.ts.map +1 -0
  55. package/esm/framer-chunks/fontshare-SSHBFVID-ZX5Y6FJ4.js +5 -0
  56. package/esm/framer-chunks/fontshare-SSHBFVID-ZX5Y6FJ4.js.map +1 -0
  57. package/esm/framer-chunks/fontshare-X6MCIXW5-FUMOBUA2.d.ts +634 -0
  58. package/esm/framer-chunks/fontshare-X6MCIXW5-FUMOBUA2.d.ts.map +1 -0
  59. package/esm/framer-chunks/fontshare-X6MCIXW5-FUMOBUA2.js +5 -0
  60. package/esm/framer-chunks/fontshare-X6MCIXW5-FUMOBUA2.js.map +1 -0
  61. package/esm/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.d.ts +634 -0
  62. package/esm/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.d.ts.map +1 -0
  63. package/esm/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js +5 -0
  64. package/esm/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js.map +1 -0
  65. package/esm/framer-chunks/framer-font-TNC5DMGA-XVG7BST3.d.ts +18 -0
  66. package/esm/framer-chunks/framer-font-TNC5DMGA-XVG7BST3.d.ts.map +1 -0
  67. package/esm/framer-chunks/framer-font-TNC5DMGA-XVG7BST3.js +5 -0
  68. package/esm/framer-chunks/framer-font-TNC5DMGA-XVG7BST3.js.map +1 -0
  69. package/esm/framer-chunks/google-3GQMHAEU-KEOTHDV6.d.ts +9827 -0
  70. package/esm/framer-chunks/google-3GQMHAEU-KEOTHDV6.d.ts.map +1 -0
  71. package/esm/framer-chunks/google-3GQMHAEU-KEOTHDV6.js +5 -0
  72. package/esm/framer-chunks/google-3GQMHAEU-KEOTHDV6.js.map +1 -0
  73. package/esm/framer-chunks/google-42BCYVR5-PDCHFNPY.d.ts +3231 -0
  74. package/esm/framer-chunks/google-42BCYVR5-PDCHFNPY.d.ts.map +1 -0
  75. package/esm/framer-chunks/google-42BCYVR5-PDCHFNPY.js +5 -0
  76. package/esm/framer-chunks/google-42BCYVR5-PDCHFNPY.js.map +1 -0
  77. package/esm/framer-chunks/google-42BCYVR5-QT55MZO3.d.ts +3231 -0
  78. package/esm/framer-chunks/google-42BCYVR5-QT55MZO3.d.ts.map +1 -0
  79. package/esm/framer-chunks/google-42BCYVR5-QT55MZO3.js +5 -0
  80. package/esm/framer-chunks/google-42BCYVR5-QT55MZO3.js.map +1 -0
  81. package/esm/framer-chunks/google-LHIHIYDX-FZZ6UXE7.d.ts +1499 -0
  82. package/esm/framer-chunks/google-LHIHIYDX-FZZ6UXE7.d.ts.map +1 -0
  83. package/esm/framer-chunks/google-LHIHIYDX-FZZ6UXE7.js +5 -0
  84. package/esm/framer-chunks/google-LHIHIYDX-FZZ6UXE7.js.map +1 -0
  85. package/esm/framer.d.ts.map +1 -1
  86. package/esm/framer.js +739 -439
  87. package/esm/framer.js.map +1 -1
  88. package/esm/react.d.ts.map +1 -1
  89. package/esm/react.js +18 -0
  90. package/esm/react.js.map +1 -1
  91. package/esm/version.d.ts +1 -1
  92. package/esm/version.js +1 -1
  93. package/package.json +1 -1
  94. package/src/css.ts +7 -6
  95. package/src/exporter.ts +0 -1
  96. package/src/framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js +7 -0
  97. package/src/framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js +7 -0
  98. package/src/framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js +7 -0
  99. package/src/framer-chunks/google-42BCYVR5-QT55MZO3.js +7 -0
  100. package/src/framer.js +763 -449
  101. package/src/react.tsx +24 -0
  102. package/src/version.ts +1 -1
package/esm/framer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __commonJS, __decorateElement, __decoratorMetadata, __decoratorStart, __export, __privateAdd, __privateGet, __privateMethod, __privateSet, __publicField, __runInitializers, __toESM, } from './framer-chunks/chunk-A2PMVMFI.js';
2
- // /:https://app.framerstatic.com/chunk-A6RUM2JZ.mjs
2
+ // /:https://app.framerstatic.com/chunk-BLFSVU7M.mjs
3
3
  import { createContext, } from 'react';
4
4
  import { useEffect, useLayoutEffect, } from 'react';
5
5
  import { useCallback, useContext, useId, } from 'react';
@@ -3385,6 +3385,99 @@ function getComputedStyle2(element, name) {
3385
3385
  const computedStyle = window.getComputedStyle(element);
3386
3386
  return isCSSVar(name) ? computedStyle.getPropertyValue(name) : computedStyle[name];
3387
3387
  }
3388
+ function isSVGElement(element) {
3389
+ return isObject(element) && 'ownerSVGElement' in element;
3390
+ }
3391
+ var resizeHandlers = /* @__PURE__ */ new WeakMap();
3392
+ var observer;
3393
+ var getSize = (borderBoxAxis, svgAxis, htmlAxis) => (target, borderBoxSize) => {
3394
+ if (borderBoxSize && borderBoxSize[0]) {
3395
+ return borderBoxSize[0][borderBoxAxis + 'Size'];
3396
+ }
3397
+ else if (isSVGElement(target) && 'getBBox' in target) {
3398
+ return target.getBBox()[svgAxis];
3399
+ }
3400
+ else {
3401
+ return target[htmlAxis];
3402
+ }
3403
+ };
3404
+ var getWidth = /* @__PURE__ */ getSize('inline', 'width', 'offsetWidth');
3405
+ var getHeight = /* @__PURE__ */ getSize('block', 'height', 'offsetHeight');
3406
+ function notifyTarget({ target, borderBoxSize, }) {
3407
+ var _a;
3408
+ (_a = resizeHandlers.get(target)) == null ? void 0 : _a.forEach((handler) => {
3409
+ handler(target, {
3410
+ get width() {
3411
+ return getWidth(target, borderBoxSize);
3412
+ },
3413
+ get height() {
3414
+ return getHeight(target, borderBoxSize);
3415
+ },
3416
+ });
3417
+ });
3418
+ }
3419
+ function notifyAll(entries) {
3420
+ entries.forEach(notifyTarget);
3421
+ }
3422
+ function createResizeObserver() {
3423
+ if (typeof ResizeObserver === 'undefined')
3424
+ return;
3425
+ observer = new ResizeObserver(notifyAll);
3426
+ }
3427
+ function resizeElement(target, handler) {
3428
+ if (!observer)
3429
+ createResizeObserver();
3430
+ const elements = resolveElements(target);
3431
+ elements.forEach((element) => {
3432
+ let elementHandlers = resizeHandlers.get(element);
3433
+ if (!elementHandlers) {
3434
+ elementHandlers = /* @__PURE__ */ new Set();
3435
+ resizeHandlers.set(element, elementHandlers);
3436
+ }
3437
+ elementHandlers.add(handler);
3438
+ observer == null ? void 0 : observer.observe(element);
3439
+ });
3440
+ return () => {
3441
+ elements.forEach((element) => {
3442
+ const elementHandlers = resizeHandlers.get(element);
3443
+ elementHandlers == null ? void 0 : elementHandlers.delete(handler);
3444
+ if (!(elementHandlers == null ? void 0 : elementHandlers.size)) {
3445
+ observer == null ? void 0 : observer.unobserve(element);
3446
+ }
3447
+ });
3448
+ };
3449
+ }
3450
+ var windowCallbacks = /* @__PURE__ */ new Set();
3451
+ var windowResizeHandler;
3452
+ function createWindowResizeHandler() {
3453
+ windowResizeHandler = () => {
3454
+ const info = {
3455
+ get width() {
3456
+ return window.innerWidth;
3457
+ },
3458
+ get height() {
3459
+ return window.innerHeight;
3460
+ },
3461
+ };
3462
+ windowCallbacks.forEach((callback) => callback(info));
3463
+ };
3464
+ window.addEventListener('resize', windowResizeHandler);
3465
+ }
3466
+ function resizeWindow(callback) {
3467
+ windowCallbacks.add(callback);
3468
+ if (!windowResizeHandler)
3469
+ createWindowResizeHandler();
3470
+ return () => {
3471
+ windowCallbacks.delete(callback);
3472
+ if (!windowCallbacks.size && typeof windowResizeHandler === 'function') {
3473
+ window.removeEventListener('resize', windowResizeHandler);
3474
+ windowResizeHandler = void 0;
3475
+ }
3476
+ };
3477
+ }
3478
+ function resize(a, b) {
3479
+ return typeof a === 'function' ? resizeWindow(a) : resizeElement(a, b);
3480
+ }
3388
3481
  function observeTimeline(update, timeline) {
3389
3482
  let prevProgress;
3390
3483
  const onFrame = () => {
@@ -3507,9 +3600,6 @@ function recordStats() {
3507
3600
  frame.postRender(record, true);
3508
3601
  return reportStats;
3509
3602
  }
3510
- function isSVGElement(element) {
3511
- return isObject(element) && 'ownerSVGElement' in element;
3512
- }
3513
3603
  function isSVGSVGElement(element) {
3514
3604
  return isSVGElement(element) && element.tagName === 'svg';
3515
3605
  }
@@ -8023,6 +8113,7 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
8023
8113
  this.motionValue || (this.motionValue = motionValue(0));
8024
8114
  this.currentAnimation = animateSingleValue(this.motionValue, [0, 1e3,], {
8025
8115
  ...options,
8116
+ velocity: 0,
8026
8117
  isSync: true,
8027
8118
  onUpdate: (latest) => {
8028
8119
  this.mixTargetDelta(latest);
@@ -8811,100 +8902,6 @@ var domMin = {
8811
8902
  function useMotionValueEvent(value, event, callback) {
8812
8903
  useInsertionEffect(() => value.on(event, callback), [value, event, callback,]);
8813
8904
  }
8814
- var resizeHandlers = /* @__PURE__ */ new WeakMap();
8815
- var observer;
8816
- function getElementSize(target, borderBoxSize) {
8817
- if (borderBoxSize) {
8818
- const { inlineSize, blockSize, } = borderBoxSize[0];
8819
- return {
8820
- width: inlineSize,
8821
- height: blockSize,
8822
- };
8823
- }
8824
- else if (isSVGElement(target) && 'getBBox' in target) {
8825
- return target.getBBox();
8826
- }
8827
- else {
8828
- return {
8829
- width: target.offsetWidth,
8830
- height: target.offsetHeight,
8831
- };
8832
- }
8833
- }
8834
- function notifyTarget({ target, contentRect, borderBoxSize, }) {
8835
- var _a;
8836
- (_a = resizeHandlers.get(target)) == null ? void 0 : _a.forEach((handler) => {
8837
- handler({
8838
- target,
8839
- contentSize: contentRect,
8840
- get size() {
8841
- return getElementSize(target, borderBoxSize);
8842
- },
8843
- });
8844
- });
8845
- }
8846
- function notifyAll(entries) {
8847
- entries.forEach(notifyTarget);
8848
- }
8849
- function createResizeObserver() {
8850
- if (typeof ResizeObserver === 'undefined')
8851
- return;
8852
- observer = new ResizeObserver(notifyAll);
8853
- }
8854
- function resizeElement(target, handler) {
8855
- if (!observer)
8856
- createResizeObserver();
8857
- const elements = resolveElements(target);
8858
- elements.forEach((element) => {
8859
- let elementHandlers = resizeHandlers.get(element);
8860
- if (!elementHandlers) {
8861
- elementHandlers = /* @__PURE__ */ new Set();
8862
- resizeHandlers.set(element, elementHandlers);
8863
- }
8864
- elementHandlers.add(handler);
8865
- observer == null ? void 0 : observer.observe(element);
8866
- });
8867
- return () => {
8868
- elements.forEach((element) => {
8869
- const elementHandlers = resizeHandlers.get(element);
8870
- elementHandlers == null ? void 0 : elementHandlers.delete(handler);
8871
- if (!(elementHandlers == null ? void 0 : elementHandlers.size)) {
8872
- observer == null ? void 0 : observer.unobserve(element);
8873
- }
8874
- });
8875
- };
8876
- }
8877
- var windowCallbacks = /* @__PURE__ */ new Set();
8878
- var windowResizeHandler;
8879
- function createWindowResizeHandler() {
8880
- windowResizeHandler = () => {
8881
- const size = {
8882
- width: window.innerWidth,
8883
- height: window.innerHeight,
8884
- };
8885
- const info = {
8886
- target: window,
8887
- size,
8888
- contentSize: size,
8889
- };
8890
- windowCallbacks.forEach((callback) => callback(info));
8891
- };
8892
- window.addEventListener('resize', windowResizeHandler);
8893
- }
8894
- function resizeWindow(callback) {
8895
- windowCallbacks.add(callback);
8896
- if (!windowResizeHandler)
8897
- createWindowResizeHandler();
8898
- return () => {
8899
- windowCallbacks.delete(callback);
8900
- if (!windowCallbacks.size && windowResizeHandler) {
8901
- windowResizeHandler = void 0;
8902
- }
8903
- };
8904
- }
8905
- function resize(a, b) {
8906
- return typeof a === 'function' ? resizeWindow(a) : resizeElement(a, b);
8907
- }
8908
8905
  var maxElapsed2 = 50;
8909
8906
  var createAxisInfo = () => ({
8910
8907
  current: 0,
@@ -10502,7 +10499,7 @@ function stagger(duration = 0.1, { startDelay = 0, from = 0, ease: ease2, } = {}
10502
10499
  return startDelay + delay2;
10503
10500
  };
10504
10501
  }
10505
- // /:https://app.framerstatic.com/framer.C2MZBAEL.mjs
10502
+ // /:https://app.framerstatic.com/framer.6RBAH774.mjs
10506
10503
  import { lazy as ReactLazy, } from 'react';
10507
10504
  import React4 from 'react';
10508
10505
  import { startTransition as startTransition2, } from 'react';
@@ -13790,6 +13787,198 @@ function patchRoutesForABTesting(routes, initialRouteId) {
13790
13787
  removeRoutesVariants(routes);
13791
13788
  return resolvedInitialRouteId;
13792
13789
  }
13790
+ var mainTagId = 'main';
13791
+ var generatedPageDatasetKey = 'framerGeneratedPage';
13792
+ var searchIndexMetaName = 'framer-search-index';
13793
+ var searchIndexMetaSelector = `meta[name="${searchIndexMetaName}"]`;
13794
+ var endOfHeadStartMarker = '<!-- End of headStart -->';
13795
+ var endOfHeadEndMarker = '<!-- End of headEnd -->';
13796
+ var endOfBodyStartMarker = '<!-- End of bodyStart -->';
13797
+ var endOfBodyEndMarker = '<!-- End of bodyEnd -->';
13798
+ function assert(condition, ...msg) {
13799
+ var _a, _b;
13800
+ if (condition)
13801
+ return;
13802
+ const e = Error('Assertion Error' + (msg.length > 0 ? ': ' + msg.join(' ') : ''));
13803
+ if (e.stack) {
13804
+ try {
13805
+ const lines = e.stack.split('\n');
13806
+ if ((_a = lines[1]) == null ? void 0 : _a.includes('assert')) {
13807
+ lines.splice(1, 1);
13808
+ e.stack = lines.join('\n');
13809
+ }
13810
+ else if ((_b = lines[0]) == null ? void 0 : _b.includes('assert')) {
13811
+ lines.splice(0, 1);
13812
+ e.stack = lines.join('\n');
13813
+ }
13814
+ }
13815
+ catch { }
13816
+ }
13817
+ throw e;
13818
+ }
13819
+ function assertNever(x, error) {
13820
+ throw error || new Error(x ? `Unexpected value: ${x}` : 'Application entered invalid state');
13821
+ }
13822
+ async function insertHTML(html, referenceNode, position = 'beforeend') {
13823
+ let insertionParent, insertionPoint;
13824
+ switch (position) {
13825
+ case 'beforebegin':
13826
+ assert(referenceNode.parentNode, 'Can\'t use \'beforebegin\' with a referenceNode at the top level');
13827
+ insertionParent = referenceNode.parentNode;
13828
+ insertionPoint = referenceNode;
13829
+ break;
13830
+ case 'afterend':
13831
+ assert(referenceNode.parentNode, 'Can\'t use \'afterend\' with a referenceNode at the top level');
13832
+ insertionParent = referenceNode.parentNode;
13833
+ insertionPoint = referenceNode.nextSibling;
13834
+ break;
13835
+ case 'afterbegin':
13836
+ insertionParent = referenceNode;
13837
+ insertionPoint = referenceNode.firstChild;
13838
+ break;
13839
+ case 'beforeend':
13840
+ insertionParent = referenceNode;
13841
+ insertionPoint = null;
13842
+ break;
13843
+ default:
13844
+ assertNever(position);
13845
+ }
13846
+ const range = document.createRange();
13847
+ range.selectNodeContents(insertionParent);
13848
+ const fragment = range.createContextualFragment(html);
13849
+ await pump(fragment, insertionParent, insertionPoint);
13850
+ }
13851
+ async function pump(sourceNode, targetParent, beforeNode) {
13852
+ for (let node = sourceNode.firstChild; node; node = node.nextSibling) {
13853
+ if (node instanceof HTMLScriptElement) {
13854
+ await handleScript(node, targetParent, beforeNode);
13855
+ continue;
13856
+ }
13857
+ const clone = node.cloneNode(false);
13858
+ targetParent.insertBefore(clone, beforeNode);
13859
+ if (node.firstChild) {
13860
+ await pump(node, clone, null);
13861
+ }
13862
+ }
13863
+ }
13864
+ async function handleScript(node, parent, beforeNode) {
13865
+ var _a;
13866
+ const script = node.cloneNode(true);
13867
+ const isExternal = script.hasAttribute('src');
13868
+ const isAsync = script.hasAttribute('async');
13869
+ const isDefer = script.hasAttribute('defer');
13870
+ const isModule = ((_a = script.getAttribute('type')) == null ? void 0 : _a.toLowerCase()) === 'module';
13871
+ if (!isExternal || isAsync || isDefer || isModule) {
13872
+ parent.insertBefore(script, beforeNode);
13873
+ }
13874
+ else {
13875
+ await execExternalBlockingScript(script, parent, beforeNode);
13876
+ }
13877
+ }
13878
+ function execExternalBlockingScript(script, parent, beforeNode) {
13879
+ return new Promise((resolve) => {
13880
+ script.onload = () => resolve();
13881
+ script.onerror = () => resolve();
13882
+ parent.insertBefore(script, beforeNode);
13883
+ });
13884
+ }
13885
+ function useMetadata(metadata) {
13886
+ const { isInitialNavigation, } = useRouter();
13887
+ React2.useEffect(() => {
13888
+ if (metadata.robots) {
13889
+ let robotsTag = document.querySelector('meta[name="robots"]');
13890
+ if (robotsTag) {
13891
+ robotsTag.setAttribute('content', metadata.robots);
13892
+ }
13893
+ else {
13894
+ robotsTag = document.createElement('meta');
13895
+ robotsTag.setAttribute('name', 'robots');
13896
+ robotsTag.setAttribute('content', metadata.robots);
13897
+ document.head.appendChild(robotsTag);
13898
+ }
13899
+ }
13900
+ }, [metadata.robots,]);
13901
+ React2.useInsertionEffect(() => {
13902
+ var _a;
13903
+ document.title = metadata.title || '';
13904
+ if (metadata.viewport) {
13905
+ (_a = document.querySelector('meta[name="viewport"]')) == null ? void 0 : _a.setAttribute('content', metadata.viewport);
13906
+ }
13907
+ }, [metadata.title, metadata.viewport,]);
13908
+ React2.useEffect(() => {
13909
+ if (!isInitialNavigation)
13910
+ return;
13911
+ const mainTag = document.getElementById(mainTagId);
13912
+ const isGeneratedPage = mainTag && mainTag.dataset[generatedPageDatasetKey] !== void 0;
13913
+ if (isGeneratedPage)
13914
+ return;
13915
+ void insertCustomHTML(metadata.customHTMLHeadStart, metadata.customHTMLHeadEnd, metadata.customHTMLBodyStart, metadata.customHTMLBodyEnd);
13916
+ }, []);
13917
+ }
13918
+ async function insertCustomHTML(customHTMLHeadStart, customHTMLHeadEnd, customHTMLBodyStart, customHTMLBodyEnd) {
13919
+ let endOfHeadStart;
13920
+ let endOfHeadEnd;
13921
+ let endOfBodyStart;
13922
+ let endOfBodyEnd;
13923
+ if (customHTMLHeadStart || customHTMLHeadEnd) {
13924
+ const { start: start2, end, } = findCommentMarkers(document.head.childNodes, customHTMLHeadStart ? endOfHeadStartMarker : void 0, customHTMLHeadEnd ? endOfHeadEndMarker : void 0);
13925
+ endOfHeadStart = start2;
13926
+ endOfHeadEnd = end;
13927
+ }
13928
+ if (customHTMLBodyStart || customHTMLBodyEnd) {
13929
+ const { start: start2, end, } = findCommentMarkers(document.body.childNodes, customHTMLBodyStart ? endOfBodyStartMarker : void 0, customHTMLBodyEnd ? endOfBodyEndMarker : void 0);
13930
+ endOfBodyStart = start2;
13931
+ endOfBodyEnd = end;
13932
+ }
13933
+ if (customHTMLHeadStart && endOfHeadStart) {
13934
+ await insertHTML(customHTMLHeadStart, endOfHeadStart, 'beforebegin');
13935
+ }
13936
+ if (customHTMLHeadEnd && endOfHeadEnd) {
13937
+ await insertHTML(customHTMLHeadEnd, endOfHeadEnd, 'beforebegin');
13938
+ }
13939
+ if (customHTMLBodyStart && endOfBodyStart) {
13940
+ await insertHTML(customHTMLBodyStart, endOfBodyStart, 'beforebegin');
13941
+ }
13942
+ if (customHTMLBodyEnd && endOfBodyEnd) {
13943
+ await insertHTML(customHTMLBodyEnd, endOfBodyEnd, 'beforebegin');
13944
+ }
13945
+ }
13946
+ function findCommentMarkers(nodes, startMarker, endMarker) {
13947
+ if (!startMarker && !endMarker) {
13948
+ return {
13949
+ start: void 0,
13950
+ end: void 0,
13951
+ };
13952
+ }
13953
+ let start2;
13954
+ let end;
13955
+ let i = 0;
13956
+ let j = nodes.length - 1;
13957
+ while (i <= j) {
13958
+ const startNode = nodes[i];
13959
+ const endNode = nodes[j];
13960
+ if (!start2 && (startNode == null ? void 0 : startNode.nodeType) === Node.COMMENT_NODE && startMarker &&
13961
+ `<!--${startNode.nodeValue}-->` === startMarker) {
13962
+ start2 = startNode;
13963
+ if (!endMarker)
13964
+ break;
13965
+ }
13966
+ if (!end && (endNode == null ? void 0 : endNode.nodeType) === Node.COMMENT_NODE && endMarker &&
13967
+ `<!--${endNode.nodeValue}-->` === endMarker) {
13968
+ end = endNode;
13969
+ if (!startMarker)
13970
+ break;
13971
+ }
13972
+ if (start2 && end)
13973
+ break;
13974
+ i++;
13975
+ j--;
13976
+ }
13977
+ return {
13978
+ start: start2,
13979
+ end,
13980
+ };
13981
+ }
13793
13982
  var warningMessages = /* @__PURE__ */ new Set();
13794
13983
  function warnOnce2(keyMessage, ...rest) {
13795
13984
  if (warningMessages.has(keyMessage))
@@ -13976,6 +14165,9 @@ function roundWithOffset(value, offset) {
13976
14165
  }
13977
14166
  return Math.round(value - offset) + offset;
13978
14167
  }
14168
+ function roundToHalfPixel(value) {
14169
+ return Math.round(value * 2) / 2;
14170
+ }
13979
14171
  function Point(x, y) {
13980
14172
  return {
13981
14173
  x,
@@ -14104,30 +14296,6 @@ function Point(x, y) {
14104
14296
  }
14105
14297
  Point2.sortClockwise = sortClockwise;
14106
14298
  })(Point || (Point = {}));
14107
- function assert(condition, ...msg) {
14108
- var _a, _b;
14109
- if (condition)
14110
- return;
14111
- const e = Error('Assertion Error' + (msg.length > 0 ? ': ' + msg.join(' ') : ''));
14112
- if (e.stack) {
14113
- try {
14114
- const lines = e.stack.split('\n');
14115
- if ((_a = lines[1]) == null ? void 0 : _a.includes('assert')) {
14116
- lines.splice(1, 1);
14117
- e.stack = lines.join('\n');
14118
- }
14119
- else if ((_b = lines[0]) == null ? void 0 : _b.includes('assert')) {
14120
- lines.splice(0, 1);
14121
- e.stack = lines.join('\n');
14122
- }
14123
- }
14124
- catch { }
14125
- }
14126
- throw e;
14127
- }
14128
- function assertNever(x, error) {
14129
- throw error || new Error(x ? `Unexpected value: ${x}` : 'Application entered invalid state');
14130
- }
14131
14299
  var BezierDefaults = {
14132
14300
  curve: 'ease',
14133
14301
  duration: 1,
@@ -16321,7 +16489,10 @@ var Loop = class extends EventEmitter {
16321
16489
  };
16322
16490
  var MainLoop = /* @__PURE__ */ new Loop();
16323
16491
  var RenderEnvironment = {
16324
- target: 'PREVIEW',
16492
+ target:
16493
+ // Enable static renderer when taking screenshots
16494
+ // in screenshot-site lambda
16495
+ safeWindow.location.origin === 'https://screenshot.framer.invalid' ? 'EXPORT' : 'PREVIEW',
16325
16496
  zoom: 1,
16326
16497
  };
16327
16498
  function executeInRenderEnvironment(customEnvironment, task) {
@@ -17539,11 +17710,21 @@ var Rect = {
17539
17710
  return rect.x === other.x && rect.y === other.y && rect.width === other.width && rect.height === other.height;
17540
17711
  },
17541
17712
  /** @internal */
17713
+ from: (rect) => {
17714
+ return {
17715
+ x: rect.x,
17716
+ y: rect.y,
17717
+ width: rect.width,
17718
+ height: rect.height,
17719
+ };
17720
+ },
17721
+ /** @internal */
17542
17722
  atOrigin: (size) => {
17543
17723
  return {
17544
- ...size,
17545
17724
  x: 0,
17546
17725
  y: 0,
17726
+ width: size.width,
17727
+ height: size.height,
17547
17728
  };
17548
17729
  },
17549
17730
  /** @internal */
@@ -17707,13 +17888,13 @@ var Rect = {
17707
17888
  };
17708
17889
  },
17709
17890
  /** @internal */
17710
- boundingRectFromPoints: (ps) => {
17891
+ boundingRectFromPoints: (points) => {
17711
17892
  let minX = Infinity;
17712
17893
  let maxX = -Infinity;
17713
17894
  let minY = Infinity;
17714
17895
  let maxY = -Infinity;
17715
- for (let i = 0; i < ps.length; i++) {
17716
- const point2 = ps[i];
17896
+ for (let i = 0; i < points.length; i++) {
17897
+ const point2 = points[i];
17717
17898
  minX = Math.min(minX, point2.x);
17718
17899
  maxX = Math.max(maxX, point2.x);
17719
17900
  minY = Math.min(minY, point2.y);
@@ -18017,20 +18198,6 @@ var Rect = {
18017
18198
  y: 0,
18018
18199
  });
18019
18200
  },
18020
- /** @internal */
18021
- fromAny: (rect, defaults = {
18022
- x: 0,
18023
- y: 0,
18024
- width: 0,
18025
- height: 0,
18026
- }) => {
18027
- return {
18028
- x: rect.x || defaults.x,
18029
- y: rect.y || defaults.y,
18030
- width: rect.width || defaults.width,
18031
- height: rect.height || defaults.height,
18032
- };
18033
- },
18034
18201
  delta: (a, b) => {
18035
18202
  const pointA = {
18036
18203
  x: Rect.minX(a),
@@ -18750,6 +18917,7 @@ var ControlType = /* @__PURE__ */ ((ControlType2) => {
18750
18917
  ControlType2['MultiCollectionReference'] = 'multicollectionreference';
18751
18918
  ControlType2['TrackingId'] = 'trackingid';
18752
18919
  ControlType2['VectorSetItem'] = 'vectorsetitem';
18920
+ ControlType2['LinkRelValues'] = 'linkrelvalues';
18753
18921
  return ControlType2;
18754
18922
  })(ControlType || {});
18755
18923
  var isFlexboxGapSupportedCached;
@@ -20118,6 +20286,8 @@ function getControlDefaultValue(control) {
20118
20286
  return isObject2(control.defaultValue) ? control.defaultValue : void 0;
20119
20287
  case 'font':
20120
20288
  return isObject2(control.defaultValue) ? control.defaultValue : void 0;
20289
+ case 'linkrelvalues':
20290
+ return isArray(control.defaultValue) ? control.defaultValue : void 0;
20121
20291
  case 'object': {
20122
20292
  const value = isObject2(control.defaultValue) ? control.defaultValue : {};
20123
20293
  if (isObject2(control.controls)) {
@@ -21938,7 +22108,7 @@ function OptimizedCanvasImage({ nodeId, image, containerSize, }) {
21938
22108
  });
21939
22109
  }
21940
22110
  function BackgroundImageComponent({ layoutId, image, ...props }) {
21941
- const { motionDivToDiv, } = useLibraryFeatures();
22111
+ const { motionDivToDivBackgroundImage, } = useLibraryFeatures();
21942
22112
  if (layoutId) {
21943
22113
  layoutId += '-background';
21944
22114
  }
@@ -21952,6 +22122,7 @@ function BackgroundImageComponent({ layoutId, image, ...props }) {
21952
22122
  width: Math.round(backgroundSize * image.pixelWidth),
21953
22123
  height: Math.round(backgroundSize * image.pixelHeight),
21954
22124
  };
22125
+ const roundedBackgroundSize = roundToHalfPixel(backgroundSize * (image.pixelWidth / 2));
21955
22126
  const imageSource = runtime.useImageSource(image, tileSize);
21956
22127
  fallbackWrapperStyles = {
21957
22128
  ...wrapperStyle,
@@ -21960,15 +22131,7 @@ function BackgroundImageComponent({ layoutId, image, ...props }) {
21960
22131
  backgroundPosition: cssObjectPosition(image.positionX, image.positionY),
21961
22132
  opacity: void 0,
21962
22133
  border: 0,
21963
- // image.backgroundSize is a floating point number like 0.05
21964
- // so we need to multiply it by the pixelWidth to get the pixel
21965
- // value for the backgroundSize so that the size of the tile is
21966
- // a function of the image width + background size percentage.
21967
- // e.g image is 64px/64px and backgroundSize is 0.05, the tile size
21968
- // should be 3.2px
21969
- // We divide the pixel width by 2 because we assume that most designers
21970
- // will be working with 2x (retina) assets.
21971
- backgroundSize: `${(backgroundSize * (image.pixelWidth / 2)).toFixed(2)}px auto`,
22134
+ backgroundSize: `${roundedBackgroundSize}px auto`,
21972
22135
  };
21973
22136
  imageNode = null;
21974
22137
  needsMotion = true;
@@ -21999,7 +22162,7 @@ function BackgroundImageComponent({ layoutId, image, ...props }) {
21999
22162
  ...wrapperStyle,
22000
22163
  ...getPlaceholderStyle(),
22001
22164
  };
22002
- return needsMotion || !motionDivToDiv
22165
+ return needsMotion || !motionDivToDivBackgroundImage
22003
22166
  ? /* @__PURE__ */ jsx3(motion.div, {
22004
22167
  layoutId,
22005
22168
  style: style2,
@@ -22148,7 +22311,15 @@ var isFirefox = () => safeNavigator && /Firefox\/\d+\.\d+$/u.test(safeNavigator.
22148
22311
  var isFramerX = () => safeNavigator && /FramerX/u.test(safeNavigator.userAgent);
22149
22312
  var isEdge = () => safeNavigator && /Edg\//u.test(safeNavigator.userAgent);
22150
22313
  var isAndroid = () => safeNavigator && /android/iu.test(safeNavigator.userAgent);
22151
- var isIOS = () => safeNavigator && /iPhone|iPod|iPad/iu.test(safeNavigator.platform);
22314
+ var iOSRegex = /iPhone|iPod|iPad/iu;
22315
+ var macIntelRegex = /MacIntel/iu;
22316
+ var isIOS = () => {
22317
+ if (!safeNavigator)
22318
+ return false;
22319
+ if (iOSRegex.test(safeNavigator.platform))
22320
+ return true;
22321
+ return macIntelRegex.test(safeNavigator.platform) && safeNavigator.maxTouchPoints && safeNavigator.maxTouchPoints > 2;
22322
+ };
22152
22323
  var isMacOS = () => safeNavigator && /Mac/u.test(safeNavigator.platform);
22153
22324
  var isWindows = () => safeNavigator && /Win/u.test(safeNavigator.platform);
22154
22325
  var isTouch = () => safeWindow.ontouchstart === null && safeWindow.ontouchmove === null && safeWindow.ontouchend === null;
@@ -23471,39 +23642,59 @@ function useStableRefWithObserver() {
23471
23642
  return ref.current;
23472
23643
  },
23473
23644
  set current(value) {
23645
+ if (value === ref.current)
23646
+ return;
23647
+ ref.current = value;
23474
23648
  if (refCallback)
23475
23649
  refCallback(value);
23476
- ref.current = value;
23477
- const needsCleanup = value === null;
23478
- callbacks.forEach((callback) => {
23479
- if (needsCleanup && cleanups.has(callback))
23480
- return;
23481
- const cleanup = callback(value);
23482
- if (cleanup)
23483
- cleanups.set(callback, cleanup);
23650
+ cleanups.forEach((cleanup, callback) => {
23651
+ if (cleanup) {
23652
+ cleanup();
23653
+ }
23654
+ else {
23655
+ callback(null);
23656
+ }
23484
23657
  });
23485
- if (needsCleanup) {
23486
- cleanups.forEach((cleanup) => cleanup());
23658
+ if (value === null) {
23487
23659
  cleanups.clear();
23660
+ callbacks.clear();
23661
+ return;
23488
23662
  }
23663
+ callbacks.forEach((callback) => {
23664
+ const cleanup = callback(value);
23665
+ cleanups.set(callback, cleanup);
23666
+ });
23489
23667
  },
23490
- observe(fn, skipCall = false) {
23491
- if (callbacks.has(fn))
23492
- return;
23668
+ /**
23669
+ * Adds `fn` to the list of callbacks to be called when the ref is updated.
23670
+ * Executes `fn` immediately if the ref already has a value.
23671
+ */
23672
+ observe(fn) {
23493
23673
  callbacks.add(fn);
23494
- if (!skipCall && ref.current)
23495
- fn(ref.current);
23674
+ const value = ref.current;
23675
+ if (value) {
23676
+ const cleanup = fn(value);
23677
+ cleanups.set(fn, cleanup);
23678
+ }
23496
23679
  },
23680
+ /**
23681
+ * Removes `fn` from the list of callbacks.
23682
+ * Runs the cleanup for `fn` if it has been called before.
23683
+ */
23497
23684
  unobserve(fn) {
23498
- if (fn)
23499
- callbacks.delete(fn);
23500
- },
23501
- cleanup(fn) {
23502
- var _a;
23503
- if (!fn || !cleanups.has(fn))
23504
- return false;
23505
- (_a = cleanups.get(fn)) == null ? void 0 : _a();
23506
- return true;
23685
+ if (!fn)
23686
+ return;
23687
+ callbacks.delete(fn);
23688
+ if (!cleanups.has(fn))
23689
+ return;
23690
+ const cleanupFn = cleanups.get(fn);
23691
+ if (cleanupFn) {
23692
+ cleanupFn();
23693
+ }
23694
+ else {
23695
+ fn(null);
23696
+ }
23697
+ cleanups.delete(fn);
23507
23698
  },
23508
23699
  };
23509
23700
  });
@@ -23520,32 +23711,22 @@ function useObserverRef(forwardedRef) {
23520
23711
  });
23521
23712
  }
23522
23713
  function useRefEffect(ref, effect, deps) {
23523
- var _a;
23524
23714
  const effectRef = useRef3();
23525
23715
  const depsChangedRef = useRef3();
23526
23716
  useMemoOne(() => {
23527
- if (depsChangedRef.current !== void 0)
23717
+ if (depsChangedRef.current !== void 0) {
23528
23718
  depsChangedRef.current = true;
23719
+ }
23529
23720
  }, deps ?? [{},]);
23530
23721
  if (!ref)
23531
23722
  return;
23532
23723
  const depsChanged = depsChangedRef.current;
23533
- if (depsChanged) {
23534
- depsChangedRef.current = false;
23535
- if (!ref.cleanup(effectRef.current)) {
23536
- (_a = effectRef.current) == null ? void 0 : _a.call(effectRef, null);
23537
- }
23538
- const value = ref.current;
23539
- if (value)
23540
- effect == null ? void 0 : effect(value);
23541
- }
23542
- if (effectRef.current === effect)
23724
+ if (depsChanged === false)
23543
23725
  return;
23726
+ depsChangedRef.current = false;
23544
23727
  ref.unobserve(effectRef.current);
23728
+ ref.observe(effect);
23545
23729
  effectRef.current = effect;
23546
- ref.observe(effect, depsChanged);
23547
- if (depsChangedRef.current === void 0)
23548
- depsChangedRef.current = false;
23549
23730
  }
23550
23731
  var SharedIntersectionObserver = class {
23551
23732
  constructor(options) {
@@ -26315,7 +26496,7 @@ function collectBoxShadowsForProps(props, style2) {
26315
26496
  return;
26316
26497
  style2.boxShadow = boxShadow;
26317
26498
  }
26318
- function shadowForShape(boxShadows, rect, shapeId, strokeAlpha, strokeWidth, strokeClipId, svgStrokeAttributes) {
26499
+ function shadowForShape(boxShadows, rect, shapeId, fillEnabled, strokeEnabled, strokeWidth, strokeClipId, svgStrokeAttributes) {
26319
26500
  const definition = [];
26320
26501
  let outsetElement = null;
26321
26502
  let insetElement = null;
@@ -26402,6 +26583,7 @@ function shadowForShape(boxShadows, rect, shapeId, strokeAlpha, strokeWidth, str
26402
26583
  /* @__PURE__ */ jsx3('use', {
26403
26584
  href: shapeId.link,
26404
26585
  fill: 'black',
26586
+ fillOpacity: fillEnabled ? void 0 : 0,
26405
26587
  }),
26406
26588
  ],
26407
26589
  });
@@ -26412,9 +26594,10 @@ function shadowForShape(boxShadows, rect, shapeId, strokeAlpha, strokeWidth, str
26412
26594
  children: /* @__PURE__ */ jsx3('use', {
26413
26595
  ...svgStrokeAttributes,
26414
26596
  fill: 'black',
26597
+ fillOpacity: fillEnabled ? void 0 : 0,
26415
26598
  stroke: 'black',
26416
- strokeOpacity: strokeAlpha <= 0 ? 0 : 1,
26417
- strokeWidth: strokeAlpha > 0 ? strokeWidth : 0,
26599
+ strokeOpacity: strokeEnabled ? void 0 : 0,
26600
+ strokeWidth: strokeEnabled ? strokeWidth : 0,
26418
26601
  xlinkHref: shapeId.link,
26419
26602
  clipPath: strokeClipId.urlLink,
26420
26603
  }),
@@ -30677,7 +30860,7 @@ function useParallax(options, ref, visibilityStyle) {
30677
30860
  const visibility = useMotionValue(adjustPosition && originalPosition.current === null ? 'hidden' : visibilityStyle);
30678
30861
  const defaultValue = useMotionValue(0);
30679
30862
  useRefEffect(ref, (element) => {
30680
- if (element === null)
30863
+ if (element === null || !parallaxTransformEnabled)
30681
30864
  return;
30682
30865
  frame.read(() => {
30683
30866
  var _a;
@@ -30689,8 +30872,12 @@ function useParallax(options, ref, visibilityStyle) {
30689
30872
  visibility.set(visibilityStyle ?? 'initial');
30690
30873
  }
30691
30874
  });
30692
- }, [adjustPosition,]);
30693
- useOnRouteChange(() => parallaxY.set(0));
30875
+ }, [adjustPosition, parallaxTransformEnabled,]);
30876
+ useOnRouteChange(() => {
30877
+ if (!parallaxTransformEnabled)
30878
+ return;
30879
+ parallaxY.set(0);
30880
+ });
30694
30881
  return {
30695
30882
  values: {
30696
30883
  y: shouldReduceMotion || !parallaxTransformEnabled ? defaultValue : parallaxY,
@@ -31288,8 +31475,13 @@ function extractFXOptions(props) {
31288
31475
  },
31289
31476
  loop: {},
31290
31477
  forwardedProps: {},
31478
+ targetOpacityValue: props.__targetOpacity,
31479
+ withPerspective: props.__perspectiveFX,
31480
+ inSmartComponent: props.__smartComponentFX,
31291
31481
  };
31292
31482
  for (const key7 in props) {
31483
+ if (key7 === '__targetOpacity' || key7 === '__perspectiveFX' || key7 === '__smartComponentFX')
31484
+ continue;
31293
31485
  const strippedKey = stripPrefixFromPrefixedKey(key7);
31294
31486
  if (strippedKey) {
31295
31487
  for (const group of groupValues) {
@@ -31348,9 +31540,7 @@ var withFX = (Component17) => React4.forwardRef((props, forwardedRef) => {
31348
31540
  ref: forwardedRef,
31349
31541
  });
31350
31542
  }
31351
- const { parallax = {}, styleAppear = {}, styleTransform = {}, presence = {}, loop = {}, forwardedProps, } = extractFXOptions(props);
31352
- const { __targetOpacity: targetOpacityValue, __perspectiveFX: withPerspective, __smartComponentFX: inSmartComponent = false, } = props;
31353
- const targetOpacity = useMotionValue(targetOpacityValue ?? 1);
31543
+ const { parallax = {}, styleAppear = {}, styleTransform = {}, presence = {}, loop = {}, forwardedProps, targetOpacityValue, withPerspective, inSmartComponent = false, } = extractFXOptions(props);
31354
31544
  const observerRef = useObserverRef(forwardedRef);
31355
31545
  const { values: presenceEffectValues, style: presenceEffectStyle, } = usePresenceAnimation(presence, observerRef, inSmartComponent, props.style, props[optimizedAppearDataAttribute]);
31356
31546
  const { values: parallaxValues, style: parallaxStyle, } = useParallax(parallax, observerRef, (_a = props.style) == null ? void 0 : _a.visibility);
@@ -31358,16 +31548,10 @@ var withFX = (Component17) => React4.forwardRef((props, forwardedRef) => {
31358
31548
  const { values: appearEffectValues, style: scrollAppearStyle, } = useStyleAppearEffect(styleAppear, observerRef);
31359
31549
  const { values: loopValues, style: loopStyle, } = useLoop(loop, observerRef);
31360
31550
  const fxValues = React4.useMemo(() => {
31551
+ const layerOpacity = new MotionValue(targetOpacityValue ?? 1);
31361
31552
  return {
31362
31553
  scale: [appearEffectValues.scale, loopValues.scale, presenceEffectValues.scale, transformValues2.scale,],
31363
- opacity: [
31364
- appearEffectValues.opacity,
31365
- loopValues.opacity,
31366
- presenceEffectValues.opacity,
31367
- // Ensure that the layers opacity is always represented.
31368
- targetOpacity,
31369
- transformValues2.opacity,
31370
- ],
31554
+ opacity: [appearEffectValues.opacity, loopValues.opacity, presenceEffectValues.opacity, layerOpacity, transformValues2.opacity,],
31371
31555
  x: [appearEffectValues.x, loopValues.x, presenceEffectValues.x, transformValues2.x,],
31372
31556
  y: [appearEffectValues.y, loopValues.y, parallaxValues.y, presenceEffectValues.y, transformValues2.y,],
31373
31557
  rotate: [appearEffectValues.rotate, loopValues.rotate, presenceEffectValues.rotate, transformValues2.rotate,],
@@ -31381,7 +31565,7 @@ var withFX = (Component17) => React4.forwardRef((props, forwardedRef) => {
31381
31565
  // value here on purpose.
31382
31566
  ],
31383
31567
  };
31384
- }, [targetOpacity, transformValues2, parallaxValues, appearEffectValues, loopValues, presenceEffectValues,]);
31568
+ }, [targetOpacityValue, transformValues2, parallaxValues, appearEffectValues, loopValues, presenceEffectValues,]);
31385
31569
  addMotionValueStyle(props.style, fxValues);
31386
31570
  const scale2 = useTransform(fxValues.scale, multiply);
31387
31571
  const opacity = useTransform(fxValues.opacity, multiply);
@@ -32449,7 +32633,7 @@ function motionOriginFromFloatingPosition(placement = 'bottom', alignment = 'cen
32449
32633
  assertNever(placement);
32450
32634
  }
32451
32635
  }
32452
- function getAncestorInfo(anchorRef) {
32636
+ function domReadGetAncestorInfo(anchorRef) {
32453
32637
  var _a;
32454
32638
  let el = anchorRef.current;
32455
32639
  const info = {
@@ -32469,12 +32653,11 @@ function getAncestorInfo(anchorRef) {
32469
32653
  }
32470
32654
  return info;
32471
32655
  }
32472
- function createAnimationFrameLoop(onRead) {
32473
- const startLoop = () => frame.read(onRead, true);
32474
- const cancelLoop = () => cancelFrame(onRead);
32475
- return [startLoop, cancelLoop,];
32656
+ function domReadStartAnimationFrameLoop(onRead) {
32657
+ frame.read(onRead, true);
32658
+ return () => cancelFrame(onRead);
32476
32659
  }
32477
- function createUpdateSafeArea(safeAreaRef) {
32660
+ function domWriteCreateUpdateSafeArea(safeAreaRef) {
32478
32661
  let x = 0;
32479
32662
  let y = 0;
32480
32663
  return (anchorRect, calculatedRect, placement, event) => {
@@ -32486,7 +32669,7 @@ function createUpdateSafeArea(safeAreaRef) {
32486
32669
  Object.assign(safeAreaRef.current.style, floatingPositionSafeAreaStyle(x, y, placement, anchorRect, calculatedRect));
32487
32670
  };
32488
32671
  }
32489
- function updatePosition(floatingPositionRef, position, rect) {
32672
+ function domWriteUpdatePosition(floatingPositionRef, position, rect) {
32490
32673
  if (!floatingPositionRef.current)
32491
32674
  return;
32492
32675
  Object.assign(floatingPositionRef.current.style, {
@@ -32497,7 +32680,11 @@ function updatePosition(floatingPositionRef, position, rect) {
32497
32680
  top: ((rect == null ? void 0 : rect.y) ?? 0) + (position === 'fixed' ? 0 : safeWindow.scrollY) + 'px',
32498
32681
  });
32499
32682
  }
32500
- var FloatingStackingContext = /* @__PURE__ */ React4.createContext(/* @__PURE__ */ new Set());
32683
+ var FloatingStackingContext = /* @__PURE__ */ (() => {
32684
+ const Context2 = React4.createContext(/* @__PURE__ */ new Set());
32685
+ Context2.displayName = 'FloatingStackingContext';
32686
+ return Context2;
32687
+ })();
32501
32688
  function useDismissFloatingLayer(anchorRef, floatingPositionRef, safeAreaRef, { safeArea, onDismiss, }) {
32502
32689
  const descendantStackingContext = useConstant2(() => /* @__PURE__ */ new Set());
32503
32690
  const ancestorStackingContext = React4.useContext(FloatingStackingContext);
@@ -32604,70 +32791,98 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
32604
32791
  React4.useLayoutEffect(() => {
32605
32792
  if (!refHasValue(anchorRef) || !contentRef.current || !placement || !alignment)
32606
32793
  return;
32607
- const { position, scrolls, } = getAncestorInfo(anchorRef);
32608
- const elementRect = contentRef.current.getBoundingClientRect();
32609
- const initialAnchorRect = anchorRef.current.getBoundingClientRect();
32610
32794
  const offset = {
32611
32795
  x: offsetX ?? 0,
32612
32796
  y: offsetY ?? 0,
32613
32797
  };
32614
- const getSafePlacementRect = makeGetSafePlacementFloatingPositionRect({
32615
- placement,
32616
- alignment,
32617
- offset,
32618
- collisionDetectionSize: collisionDetection
32619
- ? {
32620
- width: safeWindow.innerWidth,
32621
- height: safeWindow.innerHeight,
32622
- }
32623
- : void 0,
32624
- collisionDetectionPadding,
32625
- });
32626
- const [initialSafePlacement, initialCalculatedRect,] = getSafePlacementRect(initialAnchorRect, elementRect);
32627
- frame.update(() => {
32628
- updateOrigin(initialSafePlacement);
32629
- });
32630
- frame.render(() => {
32631
- if (!floatingPositionRef.current)
32632
- return;
32633
- updatePosition(floatingPositionRef, position, initialCalculatedRect);
32634
- });
32635
- const updateSafeArea = createUpdateSafeArea(safeAreaRef);
32636
- let anchorRect = initialAnchorRect;
32798
+ let getSafePlacementRect;
32799
+ let position;
32800
+ let cleanup;
32801
+ let cleanupHasRun = false;
32802
+ let initialUpdateHasRun = false;
32803
+ let anchorRect;
32804
+ let elementRect;
32637
32805
  let safePlacement;
32638
32806
  let calculatedRect;
32807
+ let scrolls;
32639
32808
  let latestEvent;
32640
- const onUpdate = () => {
32641
- updateOrigin(safePlacement);
32642
- };
32809
+ let updateSafeArea;
32643
32810
  const onRender = () => {
32644
- updatePosition(floatingPositionRef, position, calculatedRect);
32811
+ if (cleanupHasRun)
32812
+ return;
32813
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect);
32645
32814
  if (safeArea)
32646
32815
  updateSafeArea(anchorRect, calculatedRect, safePlacement, latestEvent);
32647
32816
  latestEvent = void 0;
32648
32817
  };
32649
- const onRead = () => {
32818
+ const initialRender = () => {
32819
+ updateSafeArea = domWriteCreateUpdateSafeArea(safeAreaRef);
32820
+ if (latestEvent) {
32821
+ onRender();
32822
+ }
32823
+ else {
32824
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect);
32825
+ }
32826
+ initialUpdateHasRun = true;
32827
+ };
32828
+ const onUpdate = () => {
32829
+ if (cleanupHasRun)
32830
+ return;
32831
+ updateOrigin(safePlacement);
32832
+ };
32833
+ const domReadUpdateSafePlacementAndRect = () => {
32834
+ if (!getSafePlacementRect || cleanupHasRun)
32835
+ return;
32650
32836
  anchorRect = anchorRef.current.getBoundingClientRect();
32651
32837
  const safePlacementAndRect = getSafePlacementRect(anchorRect, elementRect);
32652
32838
  safePlacement = safePlacementAndRect[0];
32653
32839
  calculatedRect = safePlacementAndRect[1];
32654
- frame.update(onUpdate);
32655
- frame.render(onRender);
32656
32840
  };
32657
- const [loop, cancelAnimationFrameLoop,] = createAnimationFrameLoop(onRead);
32658
- if (scrolls)
32659
- loop == null ? void 0 : loop();
32660
- if (!safeArea)
32661
- return () => cancelAnimationFrameLoop == null ? void 0 : cancelAnimationFrameLoop();
32841
+ frame.read(() => {
32842
+ if (cleanupHasRun || !contentRef.current)
32843
+ return;
32844
+ const ancestorInfo = domReadGetAncestorInfo(anchorRef);
32845
+ position = ancestorInfo.position;
32846
+ elementRect = contentRef.current.getBoundingClientRect();
32847
+ getSafePlacementRect = makeGetSafePlacementFloatingPositionRect({
32848
+ placement,
32849
+ alignment,
32850
+ offset,
32851
+ collisionDetectionSize: collisionDetection
32852
+ ? {
32853
+ width: safeWindow.innerWidth,
32854
+ height: safeWindow.innerHeight,
32855
+ }
32856
+ : void 0,
32857
+ collisionDetectionPadding,
32858
+ });
32859
+ domReadUpdateSafePlacementAndRect();
32860
+ frame.update(onUpdate);
32861
+ frame.render(initialRender);
32862
+ if (!ancestorInfo.scrolls)
32863
+ return;
32864
+ cleanup = domReadStartAnimationFrameLoop(domReadUpdateSafePlacementAndRect);
32865
+ });
32866
+ if (!safeArea) {
32867
+ return () => {
32868
+ cleanup == null ? void 0 : cleanup();
32869
+ cleanupHasRun = true;
32870
+ };
32871
+ }
32662
32872
  const handleMouseMove = (event) => {
32663
32873
  latestEvent = event;
32664
- frame.read(onRead);
32874
+ if (!initialUpdateHasRun)
32875
+ return;
32876
+ frame.read(domReadUpdateSafePlacementAndRect);
32877
+ frame.update(onUpdate, false, true);
32878
+ frame.render(onRender, false, true);
32665
32879
  };
32666
32880
  const anchor = anchorRef.current;
32667
32881
  anchor.addEventListener('mousemove', handleMouseMove);
32668
32882
  return () => {
32669
- cancelAnimationFrameLoop == null ? void 0 : cancelAnimationFrameLoop();
32670
32883
  anchor.removeEventListener('mousemove', handleMouseMove);
32884
+ cleanup == null ? void 0 : cleanup();
32885
+ cleanupHasRun = true;
32671
32886
  };
32672
32887
  }, [safeArea, placement, alignment, offsetX, offsetY, anchorRef, collisionDetection, collisionDetectionPadding, updateOrigin,]);
32673
32888
  const descendantContext = useDismissFloatingLayer(anchorRef, floatingPositionRef, safeAreaRef, {
@@ -33325,25 +33540,23 @@ var AnchorLinkTarget = /* @__PURE__ */ ((AnchorLinkTarget2) => {
33325
33540
  AnchorLinkTarget2['_self'] = '_self';
33326
33541
  return AnchorLinkTarget2;
33327
33542
  })(AnchorLinkTarget || {});
33328
- function propsForLink(href, openInNewTab = void 0, trackLinkClick) {
33543
+ function propsForLink(href, options) {
33329
33544
  const isInternal = isInternalURL(href);
33330
- const target = getTargetAttrValue(openInNewTab, isInternal);
33331
- const rel = !isInternal ? 'noopener' : void 0;
33332
- href = href === '' || isValidURL(href, isInternal) ? href : `https://${href}`;
33333
- return trackLinkClick
33334
- ? {
33335
- href,
33336
- target,
33337
- rel,
33338
- onClick() {
33339
- void trackLinkClick(href);
33340
- },
33341
- }
33342
- : {
33343
- href,
33344
- target,
33345
- rel,
33545
+ const props = {
33546
+ href: href === '' || isValidURL(href, isInternal) ? href : `https://${href}`,
33547
+ target: getTargetAttrValue(options == null ? void 0 : options.openInNewTab, isInternal),
33548
+ rel: !isInternal ? combineRels('noopener', options == null ? void 0 : options.rel) : void 0,
33549
+ };
33550
+ if (options == null ? void 0 : options.preserveParams) {
33551
+ props.href = forwardCurrentQueryParams(props.href ?? href);
33552
+ props['data-framer-preserve-params'] = true;
33553
+ }
33554
+ if (options == null ? void 0 : options.trackLinkClick) {
33555
+ props.onClick = () => {
33556
+ void options.trackLinkClick(href);
33346
33557
  };
33558
+ }
33559
+ return props;
33347
33560
  }
33348
33561
  function getTargetAttrValue(openInNewTab, isInternal) {
33349
33562
  if (openInNewTab !== void 0) {
@@ -33351,6 +33564,15 @@ function getTargetAttrValue(openInNewTab, isInternal) {
33351
33564
  }
33352
33565
  return isInternal ? void 0 : '_blank';
33353
33566
  }
33567
+ function combineRels(rel, otherRel) {
33568
+ if (rel && !otherRel)
33569
+ return rel;
33570
+ if (!rel && otherRel)
33571
+ return otherRel;
33572
+ if (rel && otherRel)
33573
+ return `${rel} ${otherRel}`;
33574
+ return void 0;
33575
+ }
33354
33576
  function linkInfoKey(link) {
33355
33577
  var _a, _b;
33356
33578
  return `${link.scopeId}:${link.nodeId}:${(_a = link.furthestExternalComponent) == null ? void 0 : _a.scopeId}:${(_b = link.furthestExternalComponent) == null ? void 0 : _b.nodeId}`;
@@ -33608,15 +33830,15 @@ function createOnClickLinkHandler(router, routeId, href, trackLinkClick, element
33608
33830
  performNavigation(router, routeId, elementId, combinedPathVariables, smoothScroll, track);
33609
33831
  };
33610
33832
  }
33611
- function propsForRoutePath(href, openInNewTab, router, currentRoute, trackLinkClick, implicitPathVariables, smoothScroll) {
33833
+ function propsForRoutePath(href, router, currentRoute, linkOptions, implicitPathVariables) {
33612
33834
  if (!currentRoute)
33613
- return propsForLink(href, openInNewTab, trackLinkClick);
33835
+ return propsForLink(href, linkOptions);
33614
33836
  const matchedRoute = findMatchingRouteAttributesForResolvedPath(router, href, implicitPathVariables);
33615
33837
  if (!matchedRoute)
33616
- return propsForLink(href, openInNewTab, trackLinkClick);
33838
+ return propsForLink(href, linkOptions);
33617
33839
  const { routeId, route, elementId, pathVariables, } = matchedRoute;
33618
33840
  if (!route)
33619
- return propsForLink(href, openInNewTab, trackLinkClick);
33841
+ return propsForLink(href, linkOptions);
33620
33842
  const path = getPathForRoute(route, {
33621
33843
  // If the link is resolved, we trust that the slugs are resolved.
33622
33844
  currentRoutePath: currentRoute.path,
@@ -33629,16 +33851,16 @@ function propsForRoutePath(href, openInNewTab, router, currentRoute, trackLinkCl
33629
33851
  // don't preserve query params for bots
33630
33852
  siteCanonicalURL: router.siteCanonicalURL,
33631
33853
  });
33632
- const anchorTarget = getTargetAttrValue(openInNewTab, true);
33854
+ const anchorTarget = getTargetAttrValue(linkOptions.openInNewTab, true);
33633
33855
  return {
33634
33856
  href: path,
33635
33857
  target: anchorTarget,
33636
- onClick: createOnClickLinkHandler(router, routeId, path, trackLinkClick, elementId, pathVariables, smoothScroll),
33637
- navigate: () => performNavigation(router, routeId, elementId, pathVariables, smoothScroll),
33858
+ onClick: createOnClickLinkHandler(router, routeId, path, linkOptions.trackLinkClick, elementId, pathVariables, linkOptions.smoothScroll),
33859
+ navigate: () => performNavigation(router, routeId, elementId, pathVariables, linkOptions.smoothScroll),
33638
33860
  'data-framer-page-link-current': !elementId && currentRoute.id === routeId || void 0,
33639
33861
  };
33640
33862
  }
33641
- var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(function Link2({ children, href, openInNewTab, smoothScroll, clickTrackingId, nodeId, scopeId, motionChild, ...restProps }, forwardedRef) {
33863
+ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(function Link2({ children, href, openInNewTab, smoothScroll, clickTrackingId, relValues, preserveParams, nodeId, scopeId, motionChild, ...restProps }, forwardedRef) {
33642
33864
  const router = useRouter();
33643
33865
  const currentRoute = useCurrentRoute();
33644
33866
  const implicitPathVariables = useImplicitPathVariables();
@@ -33657,7 +33879,13 @@ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(fun
33657
33879
  if (!pageLink)
33658
33880
  return {};
33659
33881
  if (isString(pageLink)) {
33660
- return propsForRoutePath(pageLink, openInNewTab, router, currentRoute, trackLinkClick, implicitPathVariables, smoothScroll);
33882
+ return propsForRoutePath(pageLink, router, currentRoute, {
33883
+ openInNewTab,
33884
+ trackLinkClick,
33885
+ rel: relValues == null ? void 0 : relValues.join(' '),
33886
+ preserveParams,
33887
+ smoothScroll,
33888
+ }, implicitPathVariables);
33661
33889
  }
33662
33890
  const { routeId, href: resolvedHref, elementId, pathVariables, } = findMatchingRouteAttributesForWebPageLinkWithSuspense(router, currentRoute, pageLink, activeLocale, implicitPathVariables);
33663
33891
  const anchorTarget = getTargetAttrValue(openInNewTab, true);
@@ -33668,7 +33896,18 @@ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(fun
33668
33896
  navigate: () => performNavigation(router, routeId, elementId, pathVariables, smoothScroll),
33669
33897
  'data-framer-page-link-current': currentRoute && linkMatchesRoute(currentRoute, pageLink, implicitPathVariables) || void 0,
33670
33898
  };
33671
- }, [href, router, activeLocale, implicitPathVariables, openInNewTab, currentRoute, smoothScroll, trackLinkClick,]);
33899
+ }, [
33900
+ href,
33901
+ router,
33902
+ activeLocale,
33903
+ implicitPathVariables,
33904
+ openInNewTab,
33905
+ currentRoute,
33906
+ smoothScroll,
33907
+ trackLinkClick,
33908
+ relValues,
33909
+ preserveParams,
33910
+ ]);
33672
33911
  const hasRef = isValidElement(children) && 'ref' in children;
33673
33912
  const observerRef = useObserverRef(hasRef ? children.ref : void 0);
33674
33913
  useRefEffect(observerRef, (node) => {
@@ -34249,6 +34488,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34249
34488
  const scheduleSideEffect = useScheduleRenderSideEffects(dep);
34250
34489
  const startNavigation = useNavigationTransition();
34251
34490
  const monitorNextPaintAfterRender = useMonitorNextPaintAfterRender('framer-route-change');
34491
+ const isInitialNavigationRef = useRef3(true);
34252
34492
  const currentRouteRef = useRef3(initialRoute);
34253
34493
  const currentPathVariablesRef = useRef3(initialPathVariables);
34254
34494
  const currentLocaleIdRef = useRef3(initialLocaleId);
@@ -34302,6 +34542,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34302
34542
  return;
34303
34543
  const currentStatePaginationInfo = isHistoryState(window.history.state) ? window.history.state.paginationInfo : void 0;
34304
34544
  const currentPath = localeResult.path;
34545
+ isInitialNavigationRef.current = false;
34305
34546
  currentPathVariablesRef.current = localeResult.pathVariables;
34306
34547
  currentLocaleIdRef.current = nextLocale.id;
34307
34548
  const updateURL = async (ignorePushStateWrapper = false) => {
@@ -34333,6 +34574,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34333
34574
  monitorNextPaintAfterRender,
34334
34575
  ]);
34335
34576
  const setCurrentRouteId = useCallback((routeId, localeId, hash2, pathVariables, isHistoryTransition, nextRender, smoothScroll = false, updateURL) => {
34577
+ isInitialNavigationRef.current = false;
34336
34578
  const currentRouteId2 = currentRouteRef.current;
34337
34579
  currentRouteRef.current = routeId;
34338
34580
  currentPathVariablesRef.current = pathVariables;
@@ -34430,6 +34672,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34430
34672
  const currentRoute = routes[currentRouteId];
34431
34673
  const currentRoutePath = currentRoute == null ? void 0 : currentRoute.path;
34432
34674
  const pageviewEventData = useSendPageView(currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale);
34675
+ const isInitialNavigation = isInitialNavigationRef.current;
34433
34676
  const api = useMemo2(() => ({
34434
34677
  navigate,
34435
34678
  getRoute,
@@ -34440,6 +34683,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34440
34683
  preserveQueryParams,
34441
34684
  pageviewEventData,
34442
34685
  siteCanonicalURL,
34686
+ isInitialNavigation,
34443
34687
  }), [
34444
34688
  navigate,
34445
34689
  getRoute,
@@ -34450,6 +34694,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34450
34694
  preserveQueryParams,
34451
34695
  siteCanonicalURL,
34452
34696
  pageviewEventData,
34697
+ isInitialNavigation,
34453
34698
  ]);
34454
34699
  if (!currentRoute) {
34455
34700
  throw new Error(`Router cannot find route for ${currentRouteId}`);
@@ -35249,6 +35494,7 @@ var CompatibilityDatabaseCollection = class {
35249
35494
  assert(definition.type !== 'unknown', 'Invalid definition type');
35250
35495
  data2[key7] = {
35251
35496
  type: definition.type,
35497
+ // biome-ignore lint/suspicious/noExplicitAny: Existing.
35252
35498
  value,
35253
35499
  };
35254
35500
  }
@@ -35553,6 +35799,23 @@ function castRichText(value) {
35553
35799
  }
35554
35800
  return null;
35555
35801
  }
35802
+ function compareVectorSetItem(left, right) {
35803
+ const leftValue = left.value;
35804
+ const rightValue = right.value;
35805
+ if (leftValue < rightValue)
35806
+ return -1;
35807
+ if (leftValue > rightValue)
35808
+ return 1;
35809
+ return 0;
35810
+ }
35811
+ function castVectorSetItem(value) {
35812
+ switch (value == null ? void 0 : value.type) {
35813
+ case 'vectorsetitem': {
35814
+ return value;
35815
+ }
35816
+ }
35817
+ return null;
35818
+ }
35556
35819
  function compareString(left, right, collation11) {
35557
35820
  let leftValue = left.value;
35558
35821
  let rightValue = right.value;
@@ -35614,6 +35877,8 @@ var DatabaseValue = {
35614
35877
  return castRichText(value);
35615
35878
  case 'string':
35616
35879
  return castString(value);
35880
+ case 'vectorsetitem':
35881
+ return castVectorSetItem(value);
35617
35882
  case 'unknown':
35618
35883
  return value;
35619
35884
  default:
@@ -35795,6 +36060,8 @@ var DatabaseValue = {
35795
36060
  return `'${value.value}' /* Date */`;
35796
36061
  case 'richtext':
35797
36062
  return 'RichText';
36063
+ case 'vectorsetitem':
36064
+ return 'VectorSetItem';
35798
36065
  case 'responsiveimage':
35799
36066
  return 'ResponsiveImage';
35800
36067
  case 'file':
@@ -35858,6 +36125,10 @@ function compare(left, right, collation11) {
35858
36125
  assert(left.type === right.type);
35859
36126
  return compareRichText(left, right);
35860
36127
  }
36128
+ case 'vectorsetitem': {
36129
+ assert(left.type === right.type);
36130
+ return compareVectorSetItem(left, right);
36131
+ }
35861
36132
  case 'string': {
35862
36133
  assert(left.type === right.type);
35863
36134
  return compareString(left, right, collation11);
@@ -36098,7 +36369,7 @@ function calculateHash(name, ...values) {
36098
36369
  });
36099
36370
  return Hash(`${name}(${hashes.join(', ')})`);
36100
36371
  }
36101
- var RichText = class {
36372
+ var RichTextResolver = class {
36102
36373
  constructor(data2, pointer) {
36103
36374
  this.data = data2;
36104
36375
  this.pointer = pointer;
@@ -36109,6 +36380,18 @@ var RichText = class {
36109
36380
  return this.cached;
36110
36381
  }
36111
36382
  };
36383
+ var VectorSetItemResolver = class {
36384
+ constructor(data2, pointer) {
36385
+ this.data = data2;
36386
+ this.pointer = pointer;
36387
+ __publicField(this, 'cached');
36388
+ }
36389
+ resolve() {
36390
+ assert(this.data.resolveVectorSetItem, 'Can\'t resolve vector set item.');
36391
+ this.cached ??= this.data.resolveVectorSetItem(this.pointer);
36392
+ return this.cached;
36393
+ }
36394
+ };
36112
36395
  var VIRTUAL_INDEX_FIELD = 'index';
36113
36396
  var Metadata = class extends Set {
36114
36397
  merge(other) {
@@ -36203,7 +36486,14 @@ var FieldMetadata = class {
36203
36486
  assert(this.collection, 'Rich text field must have a collection');
36204
36487
  return {
36205
36488
  type: 'richtext',
36206
- value: new RichText(this.collection.data, value.value),
36489
+ value: new RichTextResolver(this.collection.data, value.value),
36490
+ };
36491
+ }
36492
+ if ((value == null ? void 0 : value.type) === 'vectorsetitem') {
36493
+ assert(this.collection, 'Vector set item field must have a collection');
36494
+ return {
36495
+ type: 'vectorsetitem',
36496
+ value: new VectorSetItemResolver(this.collection.data, value.value),
36207
36497
  };
36208
36498
  }
36209
36499
  return value ?? null;
@@ -39207,10 +39497,14 @@ var EnforcerResolve = class _EnforcerResolve extends EnforcerNode {
39207
39497
  for (const tuple of input.tuples) {
39208
39498
  for (const field of this.fields) {
39209
39499
  const value = tuple.getValue(field);
39210
- if ((value == null ? void 0 : value.type) !== 'richtext')
39211
- continue;
39212
- assert(value.value instanceof RichText, 'Pointer must be wrapped');
39213
- void value.value.resolve();
39500
+ if ((value == null ? void 0 : value.type) === 'richtext') {
39501
+ assert(value.value instanceof RichTextResolver, 'Pointer must be wrapped');
39502
+ void value.value.resolve();
39503
+ }
39504
+ else if ((value == null ? void 0 : value.type) === 'vectorsetitem') {
39505
+ assert(value.value instanceof VectorSetItemResolver, 'Pointer must be wrapped');
39506
+ void value.value.resolve();
39507
+ }
39214
39508
  }
39215
39509
  }
39216
39510
  const collectionItems = yield Promise.all(Array.from(collections).map(async (collection) => {
@@ -39543,7 +39837,11 @@ ${stringifyQuery(query)}`);
39543
39837
  }
39544
39838
  async resolveValue(value) {
39545
39839
  if ((value == null ? void 0 : value.type) === 'richtext') {
39546
- assert(value.value instanceof RichText, 'Pointer must be wrapped');
39840
+ assert(value.value instanceof RichTextResolver, 'Pointer must be wrapped');
39841
+ return value.value.resolve();
39842
+ }
39843
+ if ((value == null ? void 0 : value.type) === 'vectorsetitem') {
39844
+ assert(value.value instanceof VectorSetItemResolver, 'Pointer must be wrapped');
39547
39845
  return value.value.resolve();
39548
39846
  }
39549
39847
  if ((value == null ? void 0 : value.type) === 'array') {
@@ -40520,9 +40818,9 @@ function useRunCallbackIfElementIsInView() {
40520
40818
  queuedMicrotask = true;
40521
40819
  queueMicrotask(() => {
40522
40820
  var _a;
40821
+ queuedMicrotask = false;
40523
40822
  if (!isInViewRef.current)
40524
40823
  return;
40525
- queuedMicrotask = false;
40526
40824
  (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef);
40527
40825
  });
40528
40826
  };
@@ -40812,6 +41110,11 @@ function tryToApplyOverride(Component17, override) {
40812
41110
  function valueWithMirroring(value, mirror) {
40813
41111
  return mirror ? wrap(0, 2, value) : value;
40814
41112
  }
41113
+ function singleFrame() {
41114
+ return new Promise((resolve) => {
41115
+ frame.postRender(() => resolve());
41116
+ });
41117
+ }
40815
41118
  var withV1StrokeFX = (Component17) => forwardRef((props, forwardedRef) => {
40816
41119
  const { strokeEffectLength, strokeEffectGap, strokeEffectOffset, strokeEffectLoop, strokeEffectTotalLength, strokeEffectLoopType, pathLengthTransition, ...restProps } = props;
40817
41120
  const isCanvas = isStaticRenderer();
@@ -40829,11 +41132,11 @@ var withV1StrokeFX = (Component17) => forwardRef((props, forwardedRef) => {
40829
41132
  while (true) {
40830
41133
  if (signal.signal.aborted)
40831
41134
  break;
40832
- const mirror = strokeEffectLoopType === 'mirror';
41135
+ const mirror = strokeEffectLoop && strokeEffectLoopType === 'mirror';
40833
41136
  const from = valueWithMirroring(index, mirror);
40834
41137
  const to = valueWithMirroring(index + 1, mirror);
40835
- await animate(offset, [from, to,], pathLengthTransition);
40836
- if (!strokeEffectLoop && !mirror)
41138
+ await Promise.all([animate(offset, [from, to,], pathLengthTransition), singleFrame(),]);
41139
+ if (!strokeEffectLoop)
40837
41140
  break;
40838
41141
  if (strokeEffectLoop && strokeEffectLoopType === 'repeat')
40839
41142
  continue;
@@ -42002,6 +42305,8 @@ var variantsNameToWeight = {
42002
42305
  extrabold: 800,
42003
42306
  'extrabold-italic': 800,
42004
42307
  black: 900,
42308
+ extralight: 100,
42309
+ 'extralight-italic': 100,
42005
42310
  'black-italic': 900,
42006
42311
  'extra-italic': 900,
42007
42312
  'extra-italic-bold': 900,
@@ -42270,7 +42575,7 @@ async function loadFontsWithOpenType(source) {
42270
42575
  return supportedFonts == null ? void 0 : supportedFonts.default;
42271
42576
  }
42272
42577
  case 'fontshare': {
42273
- const supportedFonts = await import('./framer-chunks/fontshare-G3KSKQMF-6RG7QQ3J.js');
42578
+ const supportedFonts = await import('./framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js');
42274
42579
  return supportedFonts == null ? void 0 : supportedFonts.default;
42275
42580
  }
42276
42581
  default:
@@ -42284,7 +42589,7 @@ async function loadFontToOpenTypeFeatures(source) {
42284
42589
  return features == null ? void 0 : features.default;
42285
42590
  }
42286
42591
  case 'fontshare': {
42287
- const features = await import('./framer-chunks/fontshare-PSV545VO-KUZ52D7F.js');
42592
+ const features = await import('./framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js');
42288
42593
  return features == null ? void 0 : features.default;
42289
42594
  }
42290
42595
  case 'framer': {
@@ -42808,10 +43113,10 @@ function loadVariationAxes(source) {
42808
43113
  const axes = (async () => {
42809
43114
  switch (source) {
42810
43115
  case 'google': {
42811
- return (await import('./framer-chunks/google-LMM7WH6E-5EU2EAFQ.js')).default;
43116
+ return (await import('./framer-chunks/google-42BCYVR5-QT55MZO3.js')).default;
42812
43117
  }
42813
43118
  case 'fontshare': {
42814
- return (await import('./framer-chunks/fontshare-YYTAVKI7-DXLAG4CY.js')).default;
43119
+ return (await import('./framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js')).default;
42815
43120
  }
42816
43121
  default:
42817
43122
  assertNever(source);
@@ -42993,11 +43298,12 @@ var FontStore = class {
42993
43298
  if (builtInFontLocator) {
42994
43299
  const fontVariant = BuiltInFontSource.parseVariant(builtInFontLocator.variant);
42995
43300
  if (isSuccessfullyParsedFontVariant(fontVariant)) {
43301
+ const family = builtInFontLocator.isVariable ? createVariableFontFamilyName(builtInFontLocator.name) : builtInFontLocator.name;
42996
43302
  return {
42997
43303
  style: fontVariant.style,
42998
43304
  weight: fontVariant.weight,
42999
43305
  variant: builtInFontLocator.variant,
43000
- family: builtInFontLocator.name,
43306
+ family,
43001
43307
  source: 'builtIn',
43002
43308
  category: void 0,
43003
43309
  };
@@ -43762,14 +44068,103 @@ var trimSlugRegExp = /^-+|-+$/gu;
43762
44068
  function slugify(value) {
43763
44069
  return value.toLowerCase().replace(nonSlugCharactersRegExp, '-').replace(trimSlugRegExp, '');
43764
44070
  }
43765
- var htmlRegExp = /[&<>'"]/gu;
43766
- var escapeHTML = (str) => str.replace(htmlRegExp, (tag) => ({
43767
- '&': '&amp;',
43768
- '<': '&lt;',
43769
- '>': '&gt;',
43770
- '\'': '&#39;',
43771
- '"': '&quot;',
43772
- })[tag] || tag);
44071
+ var frameFromElement = (element) => {
44072
+ const frame2 = Rect.fromRect(element.getBoundingClientRect());
44073
+ frame2.x = frame2.x + safeWindow.scrollX;
44074
+ frame2.y = frame2.y + safeWindow.scrollY;
44075
+ return frame2;
44076
+ };
44077
+ var frameFromElements = (elements) => {
44078
+ return Rect.merge(...elements.map(frameFromElement));
44079
+ };
44080
+ var convertToPageFrame = (frame2, element) => {
44081
+ const point2 = convertToPagePoint(frame2, element);
44082
+ return {
44083
+ x: point2.x,
44084
+ y: point2.y,
44085
+ width: frame2.width,
44086
+ height: frame2.height,
44087
+ };
44088
+ };
44089
+ var convertFromPageFrame = (frame2, element) => {
44090
+ const point2 = convertFromPagePoint(frame2, element);
44091
+ return {
44092
+ x: point2.x,
44093
+ y: point2.y,
44094
+ width: frame2.width,
44095
+ height: frame2.height,
44096
+ };
44097
+ };
44098
+ var getPageFrame = (element) => {
44099
+ const rect = element.getBoundingClientRect();
44100
+ return {
44101
+ x: rect.left + safeWindow.scrollX,
44102
+ y: rect.top + safeWindow.scrollY,
44103
+ width: rect.width,
44104
+ height: rect.height,
44105
+ };
44106
+ };
44107
+ var fromEventForPage = (event) => {
44108
+ return {
44109
+ x: event.pageX,
44110
+ y: event.pageY,
44111
+ };
44112
+ };
44113
+ var fromEventForClient = (event) => {
44114
+ return {
44115
+ x: event.clientX,
44116
+ y: event.clientY,
44117
+ };
44118
+ };
44119
+ var convertToPagePoint = (point2, element) => {
44120
+ const frame2 = getPageFrame(element);
44121
+ return {
44122
+ x: point2.x + frame2.x,
44123
+ y: point2.y + frame2.y,
44124
+ };
44125
+ };
44126
+ var convertFromPagePoint = (point2, element) => {
44127
+ const frame2 = getPageFrame(element);
44128
+ return {
44129
+ x: point2.x - frame2.x,
44130
+ y: point2.y - frame2.y,
44131
+ };
44132
+ };
44133
+ var dispatchKeyDownEvent = (keyCode, options = {}) => {
44134
+ const keyboardEvent = new KeyboardEvent('keydown', {
44135
+ bubbles: true,
44136
+ keyCode,
44137
+ ...options,
44138
+ });
44139
+ const activeElement = document.activeElement;
44140
+ if (activeElement) {
44141
+ activeElement.dispatchEvent(keyboardEvent);
44142
+ }
44143
+ };
44144
+ var DOM = {
44145
+ frameFromElement,
44146
+ frameFromElements,
44147
+ convertToPageFrame,
44148
+ convertFromPageFrame,
44149
+ getPageFrame,
44150
+ fromEventForPage,
44151
+ fromEventForClient,
44152
+ convertToPagePoint,
44153
+ convertFromPagePoint,
44154
+ };
44155
+ var parser;
44156
+ var supportsNativeParseHTML = /* @__PURE__ */ (() =>
44157
+ // Firefox has rare-random issues with the native parser: https://framer-team.slack.com/archives/C01B14R6E22/p1724159313153969
44158
+ !isFirefox() && typeof Document !== 'undefined' && typeof Document.parseHTMLUnsafe === 'function')();
44159
+ function domParser(html, type) {
44160
+ if (supportsNativeParseHTML && !type)
44161
+ return Document.parseHTMLUnsafe(html);
44162
+ parser ??= new DOMParser();
44163
+ return parser.parseFromString(html, type ?? 'text/html');
44164
+ }
44165
+ function escapeHTML(value) {
44166
+ return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;').replaceAll('\'', '&#39;');
44167
+ }
43773
44168
  var regex = /(<([a-z]+)(?:\s+(?!href[\s=])[^=\s]+=(?:'[^']*'|"[^"]*"))*)(?:(\s+href\s*=)(?:'([^']*)'|"([^"]*)"))?((?:\s+[^=\s]+=(?:'[^']*'|"[^"]*"))*>)/gi;
43774
44169
  function replaceFramerPageLinks(rawHTML, getRoute, currentRoute, implicitPathVariables) {
43775
44170
  return rawHTML.replace(regex, (original, pre1, tag, pre2, value1, value2, post) => {
@@ -43814,18 +44209,6 @@ function replaceFramerPageLinks(rawHTML, getRoute, currentRoute, implicitPathVar
43814
44209
  function isShallowEqualArray(a, b) {
43815
44210
  return a.length === b.length && a.every((v, i) => v === b[i]);
43816
44211
  }
43817
- var htmlEscapes = {
43818
- '&': '&amp;',
43819
- '<': '&lt;',
43820
- '>': '&gt;',
43821
- '"': '&quot;',
43822
- '\'': '&#39;',
43823
- };
43824
- var reUnescapedHtml = /[&<>"']/gu;
43825
- var reHasUnescapedHtml = /* @__PURE__ */ (() => new RegExp(reUnescapedHtml.source))();
43826
- function escapeHTML2(str) {
43827
- return str && reHasUnescapedHtml.test(str) ? str.replace(reUnescapedHtml, (chr) => htmlEscapes[chr] ?? '') : str || '';
43828
- }
43829
44212
  var deprecatedRichTextPlaceholder = '{{ text-placeholder }}';
43830
44213
  var richTextWrapperClassName = 'rich-text-wrapper';
43831
44214
  var DeprecatedRichText = /* @__PURE__ */ React2.forwardRef(function Text(props, forwardedRef) {
@@ -43850,14 +44233,14 @@ var DeprecatedRichText = /* @__PURE__ */ React2.forwardRef(function Text(props,
43850
44233
  }
43851
44234
  let innerHTML = '';
43852
44235
  if (textOrOverride) {
43853
- const escapedText = escapeHTML2(textOrOverride);
44236
+ const escapedText = escapeHTML(textOrOverride);
43854
44237
  innerHTML = __htmlStructure ? __htmlStructure.replace(deprecatedRichTextPlaceholder, escapedText) : `<p>${escapedText}</p>`;
43855
44238
  }
43856
44239
  else if (html) {
43857
44240
  innerHTML = html;
43858
44241
  }
43859
44242
  else if (textFromDesign) {
43860
- const escapedText = escapeHTML2(textFromDesign);
44243
+ const escapedText = escapeHTML(textFromDesign);
43861
44244
  innerHTML = __htmlStructure ? __htmlStructure.replace(deprecatedRichTextPlaceholder, escapedText) : `<p>${escapedText}</p>`;
43862
44245
  }
43863
44246
  else if (htmlFromDesign) {
@@ -44421,13 +44804,21 @@ function createLineGroups(elements) {
44421
44804
  groups2.push(currentGroup);
44422
44805
  return groups2;
44423
44806
  }
44424
- var FitText = /* @__PURE__ */ forwardRef(({ viewBoxScale, viewBox, children, ...props }, ref) => {
44807
+ var BaseSVG = /* @__PURE__ */ forwardRef(function BaseSVG2(props, forwardedRef) {
44425
44808
  return (
44426
44809
  // biome-ignore lint/a11y/noSvgWithoutTitle: FIXME: FitText might be inaccessible to screen readers because it’s wrapped in an svg
44427
44810
  /* @__PURE__ */
44428
- jsx3(motion.svg, {
44429
- ref,
44811
+ jsx3('svg', {
44430
44812
  ...props,
44813
+ ref: forwardedRef,
44814
+ children: props.children,
44815
+ }));
44816
+ });
44817
+ var MotionSVG = /* @__PURE__ */ motion.create(BaseSVG);
44818
+ var FitText = /* @__PURE__ */ forwardRef(function FitText2({ viewBoxScale, viewBox, children, ...props }, forwardedRef) {
44819
+ return /* @__PURE__ */ jsx3(MotionSVG, {
44820
+ ...props,
44821
+ ref: forwardedRef,
44431
44822
  viewBox,
44432
44823
  children: /* @__PURE__ */ jsx3(motion.foreignObject, {
44433
44824
  width: '100%',
@@ -44440,16 +44831,18 @@ var FitText = /* @__PURE__ */ forwardRef(({ viewBoxScale, viewBox, children, ...
44440
44831
  },
44441
44832
  children,
44442
44833
  }),
44443
- }));
44834
+ });
44444
44835
  });
44445
- var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(props, ref) {
44446
- const { __fromCanvasComponent = false, _forwardedOverrideId, _forwardedOverrides, _usesDOMRect, anchorLinkOffsetY, as: _as, bottom, center, children, environment: environment2 = RenderTarget.current, fonts = [], height, isEditable = false, left, name, opacity, positionSticky, positionStickyBottom, positionStickyLeft, positionStickyRight, positionStickyTop, right, rotation = 0, style: style2, _initialStyle, stylesPresetsClassNames, text: plainText, top, verticalAlignment = 'top', visible = true, width, withExternalLayout = false, viewBox, viewBoxScale = 1, effect, ...rest } = props;
44836
+ var defaultFonts = [];
44837
+ var richTextContainerComponentType = 'RichTextContainer';
44838
+ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(props, forwardedRef) {
44839
+ const { __fromCanvasComponent = false, _forwardedOverrideId, _forwardedOverrides, _usesDOMRect, anchorLinkOffsetY, as: _as, bottom, center, children, environment: environment2 = RenderTarget.current, fonts = defaultFonts, height, isEditable = false, left, name, opacity, positionSticky, positionStickyBottom, positionStickyLeft, positionStickyRight, positionStickyTop, right, rotation = 0, style: style2, _initialStyle, stylesPresetsClassNames, text: plainText, top, verticalAlignment = 'top', visible = true, width, withExternalLayout = false, viewBox, viewBoxScale = 1, effect, ...rest } = props;
44447
44840
  const parentSize = useParentSize();
44448
44841
  const isOnCanvas = useIsOnFramerCanvas();
44449
44842
  const inCodeComponent = useContext(ComponentContainerContext);
44450
44843
  const layoutId = useLayoutId2(props);
44451
44844
  const fallbackRef = useRef3(null);
44452
- const containerRef = ref ?? fallbackRef;
44845
+ const containerRef = forwardedRef ?? fallbackRef;
44453
44846
  useMeasureLayout(props, containerRef);
44454
44847
  useLoadFonts(fonts, __fromCanvasComponent, containerRef);
44455
44848
  useInsertionEffect(() => {
@@ -44518,6 +44911,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
44518
44911
  rest.layout = 'preserve-aspect';
44519
44912
  }
44520
44913
  const Component17 = htmlElementAsMotionComponent(props.as);
44914
+ const dataFramerName = rest['data-framer-name'] ?? name;
44521
44915
  if (isString(props.viewBox)) {
44522
44916
  if (props.as !== void 0) {
44523
44917
  return /* @__PURE__ */ jsx3(Component17, {
@@ -44526,8 +44920,8 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
44526
44920
  style: containerStyle,
44527
44921
  layoutId,
44528
44922
  transformTemplate: template,
44529
- 'data-framer-name': rest['data-framer-name'] ?? name,
44530
- 'data-framer-component-type': 'RichTextContainer',
44923
+ 'data-framer-name': dataFramerName,
44924
+ 'data-framer-component-type': richTextContainerComponentType,
44531
44925
  children: /* @__PURE__ */ jsx3(FitText, {
44532
44926
  viewBox,
44533
44927
  viewBoxScale,
@@ -44548,8 +44942,8 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
44548
44942
  viewBox,
44549
44943
  viewBoxScale,
44550
44944
  transformTemplate: template,
44551
- 'data-framer-name': rest['data-framer-name'] ?? name,
44552
- 'data-framer-component-type': 'RichTextContainer',
44945
+ 'data-framer-name': dataFramerName,
44946
+ 'data-framer-component-type': richTextContainerComponentType,
44553
44947
  children: processedChildren,
44554
44948
  });
44555
44949
  }
@@ -44560,8 +44954,8 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
44560
44954
  style: containerStyle,
44561
44955
  layoutId,
44562
44956
  transformTemplate: template,
44563
- 'data-framer-name': rest['data-framer-name'] ?? name,
44564
- 'data-framer-component-type': 'RichTextContainer',
44957
+ 'data-framer-name': dataFramerName,
44958
+ 'data-framer-component-type': richTextContainerComponentType,
44565
44959
  children: processedChildren,
44566
44960
  });
44567
44961
  });
@@ -44637,7 +45031,7 @@ function extractTextFromReactNode(node) {
44637
45031
  }
44638
45032
  return '';
44639
45033
  }
44640
- var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({ children, html, htmlFromDesign, ...props }, ref) {
45034
+ var RichText = /* @__PURE__ */ forwardRef(function RichText2({ children, html, htmlFromDesign, ...props }, forwardedRef) {
44641
45035
  const content = html || children || htmlFromDesign;
44642
45036
  if (isString(content)) {
44643
45037
  if (!props.stylesPresetsClassName && isObject2(props.stylesPresetsClassNames)) {
@@ -44650,7 +45044,7 @@ var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({ children, html,
44650
45044
  return /* @__PURE__ */ jsx3(DeprecatedRichText, {
44651
45045
  ...props,
44652
45046
  ...contentProp,
44653
- ref,
45047
+ ref: forwardedRef,
44654
45048
  });
44655
45049
  }
44656
45050
  if (!props.stylesPresetsClassNames && isString(props.stylesPresetsClassName)) {
@@ -44670,7 +45064,7 @@ var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({ children, html,
44670
45064
  }
44671
45065
  return /* @__PURE__ */ jsx3(RichTextContainer, {
44672
45066
  ...props,
44673
- ref,
45067
+ ref: forwardedRef,
44674
45068
  children: isValidElement(content) ? content : void 0,
44675
45069
  });
44676
45070
  });
@@ -44876,100 +45270,6 @@ var ImagePatternElement = ({ id: id3, path, transform: transform2, repeat, width
44876
45270
  }, href),
44877
45271
  });
44878
45272
  };
44879
- var frameFromElement = (element) => {
44880
- const frame2 = Rect.fromRect(element.getBoundingClientRect());
44881
- frame2.x = frame2.x + safeWindow.scrollX;
44882
- frame2.y = frame2.y + safeWindow.scrollY;
44883
- return frame2;
44884
- };
44885
- var frameFromElements = (elements) => {
44886
- return Rect.merge(...elements.map(frameFromElement));
44887
- };
44888
- var convertToPageFrame = (frame2, element) => {
44889
- const point2 = convertToPagePoint(frame2, element);
44890
- return {
44891
- x: point2.x,
44892
- y: point2.y,
44893
- width: frame2.width,
44894
- height: frame2.height,
44895
- };
44896
- };
44897
- var convertFromPageFrame = (frame2, element) => {
44898
- const point2 = convertFromPagePoint(frame2, element);
44899
- return {
44900
- x: point2.x,
44901
- y: point2.y,
44902
- width: frame2.width,
44903
- height: frame2.height,
44904
- };
44905
- };
44906
- var getPageFrame = (element) => {
44907
- const rect = element.getBoundingClientRect();
44908
- return {
44909
- x: rect.left + safeWindow.scrollX,
44910
- y: rect.top + safeWindow.scrollY,
44911
- width: rect.width,
44912
- height: rect.height,
44913
- };
44914
- };
44915
- var fromEventForPage = (event) => {
44916
- return {
44917
- x: event.pageX,
44918
- y: event.pageY,
44919
- };
44920
- };
44921
- var fromEventForClient = (event) => {
44922
- return {
44923
- x: event.clientX,
44924
- y: event.clientY,
44925
- };
44926
- };
44927
- var convertToPagePoint = (point2, element) => {
44928
- const frame2 = getPageFrame(element);
44929
- return {
44930
- x: point2.x + frame2.x,
44931
- y: point2.y + frame2.y,
44932
- };
44933
- };
44934
- var convertFromPagePoint = (point2, element) => {
44935
- const frame2 = getPageFrame(element);
44936
- return {
44937
- x: point2.x - frame2.x,
44938
- y: point2.y - frame2.y,
44939
- };
44940
- };
44941
- var dispatchKeyDownEvent = (keyCode, options = {}) => {
44942
- const keyboardEvent = new KeyboardEvent('keydown', {
44943
- bubbles: true,
44944
- keyCode,
44945
- ...options,
44946
- });
44947
- const activeElement = document.activeElement;
44948
- if (activeElement) {
44949
- activeElement.dispatchEvent(keyboardEvent);
44950
- }
44951
- };
44952
- var DOM = {
44953
- frameFromElement,
44954
- frameFromElements,
44955
- convertToPageFrame,
44956
- convertFromPageFrame,
44957
- getPageFrame,
44958
- fromEventForPage,
44959
- fromEventForClient,
44960
- convertToPagePoint,
44961
- convertFromPagePoint,
44962
- };
44963
- var parser;
44964
- var supportsNativeParseHTML = /* @__PURE__ */ (() =>
44965
- // Firefox has rare-random issues with the native parser: https://framer-team.slack.com/archives/C01B14R6E22/p1724159313153969
44966
- !isFirefox() && typeof Document !== 'undefined' && typeof Document.parseHTMLUnsafe === 'function')();
44967
- function domParser(html, type) {
44968
- if (supportsNativeParseHTML && !type)
44969
- return Document.parseHTMLUnsafe(html);
44970
- parser ??= new DOMParser();
44971
- return parser.parseFromString(html, type ?? 'text/html');
44972
- }
44973
45273
  var useDOM = /* @__PURE__ */ isBrowser2();
44974
45274
  var SharedSVGEntry = class {
44975
45275
  constructor(id3, svg, innerHTML, viewBox, count = 0) {
@@ -46326,7 +46626,7 @@ var Vector = /* @__PURE__ */ (() => {
46326
46626
  return _a = class extends Layer {
46327
46627
  render() {
46328
46628
  countNodeRender();
46329
- const { opacity, calculatedPath, calculatedPathBoundingBox, d, insideStroke, strokeEnabled, strokeClipId, strokeWidth, idAttribute, shadows, strokeAlpha, name, includeTransform, isRootVectorNode, rotation, id: id3, lineCap, lineJoin, strokeColor, strokeMiterLimit, strokeDashArray, strokeDashOffset, fill, variants, transition, fillOpacity, visible, x, y, width, height, } = this.props;
46629
+ const { opacity, calculatedPath, calculatedPathBoundingBox, d, insideStroke, strokeEnabled, strokeClipId, strokeWidth, idAttribute, shadows, name, includeTransform, isRootVectorNode, rotation, id: id3, lineCap, lineJoin, strokeColor, strokeMiterLimit, strokeDashArray, strokeDashOffset, fill, variants, transition, fillOpacity, visible, x, y, width, height, } = this.props;
46330
46630
  if (!visible)
46331
46631
  return null;
46332
46632
  if (!id3 || !strokeClipId)
@@ -46425,7 +46725,7 @@ var Vector = /* @__PURE__ */ (() => {
46425
46725
  // Shadow filter uses 'objectBoundingBox' as filter units, so calculations should be
46426
46726
  // relative to the referenced object itself (path), instead of the node rect, which
46427
46727
  // can be larger than the path bounding box.
46428
- calculatedPathBoundingBox, internalShapeId, strokeAlpha, strokeWidth, internalStrokeClipId, svgStrokeAttributes);
46728
+ calculatedPathBoundingBox, internalShapeId, Boolean(fill), strokeEnabled, strokeWidth, internalStrokeClipId, svgStrokeAttributes);
46429
46729
  const currentName = target === RenderTarget.preview ? name || void 0 : void 0;
46430
46730
  if (shadow.insetElement !== null || shadow.outsetElement !== null || insideStroke) {
46431
46731
  pathAttributes.id = internalShapeId.id;
@@ -46993,8 +47293,8 @@ var package_default = {
46993
47293
  scripts: {
46994
47294
  coverage: 'yarn :jest --coverage',
46995
47295
  lint: 'yarn :eslint ./src --ext .ts,.tsx --format codeframe --quiet --cache',
46996
- 'lint:ci': 'yarn :eslint ./src --ext .ts,.tsx --format codeframe --quiet --cache --cache-strategy content',
46997
- 'lint:fix': 'yarn lint --fix --cache',
47296
+ 'lint:ci': 'yarn lint --cache-strategy content --cache-location $HOME/.cache/eslint/framer-library',
47297
+ 'lint:fix': 'yarn lint --fix',
46998
47298
  test: 'yarn :jest',
46999
47299
  watch: 'yarn :jest --watch',
47000
47300
  postinstall: 'node postinstall.cjs',
@@ -47053,7 +47353,7 @@ MotionValue.prototype.addChild = function ({ transformer = (v) => v, }) {
47053
47353
  if (false) {
47054
47354
  MainLoop2.start();
47055
47355
  }
47056
- export { _injectRuntime, acceleratedValues2 as acceleratedValues, activeAnimations, addActionControls, addAttrValue, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, addStyleValue, addUniqueItem, alpha, analyseComplexValue, AnchorLinkTarget, Animatable, animate2 as animate, animateMini, AnimatePresence, AnimateSharedLayout, animateValue, animateView, animateVisualElement, animationControls, animationMapKey, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, applyPxDefaults, AsyncMotionValueAnimation, attachSpring, attrEffect, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform2 as buildTransform, calcGeneratorDuration, calcLength, calculateRect, callEach, cancelFrame, cancelMicrotask, cancelSync, ChildrenCanSuspend, circIn, circInOut, circOut, clamp, clampRGB, collectMotionValues, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertOffsetToTimes, convertPropsToDeviceOptions, createBox, createData, createFramerPageLink, createGeneratorEasing, createRenderBatcher, createRendererMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, cubicBezierAsString, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, defaultEasing, defaultOffset, defaultTransformValue, defaultValueTypes, degrees, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, dimensionValueTypes, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, DOMKeyframesResolver, domMax, domMin, DragControls, Draggable, easeIn, easeInOut, easeOut, easingDefinitionToFunction, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, fillOffset, fillWildcards, filterProps, findDimensionValueType, findValueType, finiteNumber, FlatTree, Floating, flushKeyframeResolvers, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, frameSteps, FrameWithMotion, GamepadContext, GeneratedComponentContext, generateLinearEasing, getAnimatableNone2 as getAnimatableNone, getAnimationMap, getComponentSize, getComputedStyle2 as getComputedStyle, getDefaultValueType, getDevicePreset, getEasingForSegment, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getLoadingLazyAtYPosition, getMeasurableCodeComponentChildren, getMixer, getPropertyControls, getValueAsType, getValueTransition, getVariableValue, getWhereExpressionFromPathVariables, GracefullyDegradingErrorBoundary, gradientForShape, GroupAnimation, GroupAnimationWithThen, hasWarned, hex, hover, hsla, hslaToRgba, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inertia, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, Instance, InternalID, interpolate, invariant, inView, invisibleValues, isAnimatable2 as isAnimatable, isBezierDefinition, isBrowser, isCSSVariableName, isCSSVariableToken, isDesignDefinition, isDragActive, isDragging, isEasingArray, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isGenerator, isHTMLElement, isMotionComponent, isMotionValue2 as isMotionValue, isNodeOrChild, isNumericalString, isObject, isOfAnnotatedType, isOverride, isPrimaryPointer, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStaticRenderer, isStraightCurve, isSVGElement, isSVGSVGElement, isValidMotionProp, isWaapiSupportedEasing, isZeroValueString, JSAnimation, KeyframeResolver, keyframes, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, mapEasingToNativeEasing, mapValue, markHydrationStart, maxGeneratorDuration, memo, memoize2 as memoize, microtask, millisecondsToSeconds, mirrorEasing, mix, mixArray, mixColor, mixComplex, mixImmediate, mixLinearColor, mixNumber, mixObject, mixVisibility, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, moveItem, namespace_exports as Reorder, NativeAnimation, NativeAnimationExtended, NativeAnimationWrapper, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, nestedLinksCollector, noop, NotFoundError, number, numberValueTypes, ObservableObject, observeTimeline, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseCSSVariable, parseFramerPageLink, parseValueFromTransform, patchRoutesForABTesting, pathDefaults, PathSegment, PathVariablesContext, percent, pipe, Point, Polygon, positionalKeys, preloadImage, PresenceContext, press, print, progress, progressPercentage, propEffect, PropertyOverrides2 as PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryCache, QueryEngine, RadialGradient, readTransformValue, recordStats, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, removeItem, RenderTarget, resolveElements, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, rgba, rgbUnit, RichText2 as RichText, roundedNumber, roundedNumberString, roundWithOffset, safeCSSValue, scale, Scroll, scroll, scrollInfo, secondsToMilliseconds, setDragLock, setGlobalRenderEnvironment, setStyle, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, SmartComponentScopedContainer, spring, SpringAnimator, springValue, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, startWaapiAnimation, statsBuffer, steps, styleEffect, StyleSheetContext, SubscriptionManager, supportedWaapiEasing, supportsBrowserAnimation, supportsFlags, supportsLinearEasing, supportsPartialKeyframes, supportsScrollTimeline, SVG, svgEffect, SwitchLayoutGroupContext, sync, systemFontFamilyName, testValueType, Text2 as Text, throttle, time, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformPropOrder, transformProps, transformString2 as transformString, transformTemplate, transformValue, transformValueTypes, turnOffReactEventHandling, unwrapMotionComponent, useActiveTargetCallback, useActiveVariantCallback, useAddVariantProps, useAnimate, useAnimatedState, useAnimatedState as useDeprecatedAnimatedState, useAnimateMini, useAnimation, useAnimationControls, useAnimationFrame, useBreakpointVariants, useComponentViewport, useConstant2 as useConstant, useCurrentPathVariables, useCurrentRoute, useCurrentRouteId, useCustomCursors, useCycle, useDataRecord, useDomEvent, useDragControls, useDynamicRefs, useElementScroll, useForceUpdate, useGamepad, useHotkey, useHydratedBreakpointVariants, useInitialRouteComponent, useInstantLayoutTransition, useInstantTransition, useInvertedScale, useInvertedScale as useDeprecatedInvertedScale, useInView, useIsInCurrentNavigationTarget, useIsomorphicLayoutEffect, useIsOnFramerCanvas, useIsPresent, useIsStaticRenderer, useLoadMorePaginatedQuery, useLoadMorePagination, useLocale, useLocaleCode, useLocaleInfo, useLocalesForCurrentRoute, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePresenceData, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSiteRefs, useSpring, useSVGTemplate, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, velocityPerSecond, version, vh, ViewTransitionBuilder, VisualElement, visualElementStore, vw, warning, warnOnce, WillChangeMotionValue, WindowContext, withCodeBoundaryForOverrides, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, withOptimizedAppearEffect, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withV1StrokeFX, withVariantAppearEffect, withVariantFX, wrap, yieldToMain, };
47356
+ export { _injectRuntime, acceleratedValues2 as acceleratedValues, activeAnimations, addActionControls, addAttrValue, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, addStyleValue, addUniqueItem, alpha, analyseComplexValue, AnchorLinkTarget, Animatable, animate2 as animate, animateMini, AnimatePresence, AnimateSharedLayout, animateValue, animateView, animateVisualElement, animationControls, animationMapKey, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, applyPxDefaults, AsyncMotionValueAnimation, attachSpring, attrEffect, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform2 as buildTransform, calcGeneratorDuration, calcLength, calculateRect, callEach, cancelFrame, cancelMicrotask, cancelSync, ChildrenCanSuspend, circIn, circInOut, circOut, clamp, clampRGB, collectMotionValues, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertOffsetToTimes, convertPropsToDeviceOptions, createBox, createData, createFramerPageLink, createGeneratorEasing, createRenderBatcher, createRendererMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, cubicBezierAsString, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, defaultEasing, defaultOffset, defaultTransformValue, defaultValueTypes, degrees, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, dimensionValueTypes, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, DOMKeyframesResolver, domMax, domMin, DragControls, Draggable, easeIn, easeInOut, easeOut, easingDefinitionToFunction, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, fillOffset, fillWildcards, filterProps, findDimensionValueType, findValueType, finiteNumber, FlatTree, Floating, flushKeyframeResolvers, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, frameSteps, FrameWithMotion, GamepadContext, GeneratedComponentContext, generateLinearEasing, getAnimatableNone2 as getAnimatableNone, getAnimationMap, getComponentSize, getComputedStyle2 as getComputedStyle, getDefaultValueType, getDevicePreset, getEasingForSegment, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getLoadingLazyAtYPosition, getMeasurableCodeComponentChildren, getMixer, getPropertyControls, getValueAsType, getValueTransition, getVariableValue, getWhereExpressionFromPathVariables, GracefullyDegradingErrorBoundary, gradientForShape, GroupAnimation, GroupAnimationWithThen, hasWarned, hex, hover, hsla, hslaToRgba, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inertia, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, Instance, InternalID, interpolate, invariant, inView, invisibleValues, isAnimatable2 as isAnimatable, isBezierDefinition, isBrowser, isCSSVariableName, isCSSVariableToken, isDesignDefinition, isDragActive, isDragging, isEasingArray, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isGenerator, isHTMLElement, isMotionComponent, isMotionValue2 as isMotionValue, isNodeOrChild, isNumericalString, isObject, isOfAnnotatedType, isOverride, isPrimaryPointer, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStaticRenderer, isStraightCurve, isSVGElement, isSVGSVGElement, isValidMotionProp, isWaapiSupportedEasing, isZeroValueString, JSAnimation, KeyframeResolver, keyframes, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, mapEasingToNativeEasing, mapValue, markHydrationStart, maxGeneratorDuration, memo, memoize2 as memoize, microtask, millisecondsToSeconds, mirrorEasing, mix, mixArray, mixColor, mixComplex, mixImmediate, mixLinearColor, mixNumber, mixObject, mixVisibility, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, moveItem, namespace_exports as Reorder, NativeAnimation, NativeAnimationExtended, NativeAnimationWrapper, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, nestedLinksCollector, noop, NotFoundError, number, numberValueTypes, ObservableObject, observeTimeline, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseCSSVariable, parseFramerPageLink, parseValueFromTransform, patchRoutesForABTesting, pathDefaults, PathSegment, PathVariablesContext, percent, pipe, Point, Polygon, positionalKeys, preloadImage, PresenceContext, press, print, progress, progressPercentage, propEffect, PropertyOverrides2 as PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryCache, QueryEngine, RadialGradient, readTransformValue, recordStats, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, removeItem, RenderTarget, resize, resolveElements, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, rgba, rgbUnit, RichText, roundedNumber, roundedNumberString, roundWithOffset, safeCSSValue, scale, Scroll, scroll, scrollInfo, secondsToMilliseconds, setDragLock, setGlobalRenderEnvironment, setStyle, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, SmartComponentScopedContainer, spring, SpringAnimator, springValue, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, startWaapiAnimation, statsBuffer, steps, styleEffect, StyleSheetContext, SubscriptionManager, supportedWaapiEasing, supportsBrowserAnimation, supportsFlags, supportsLinearEasing, supportsPartialKeyframes, supportsScrollTimeline, SVG, svgEffect, SwitchLayoutGroupContext, sync, systemFontFamilyName, testValueType, Text2 as Text, throttle, time, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformPropOrder, transformProps, transformString2 as transformString, transformTemplate, transformValue, transformValueTypes, turnOffReactEventHandling, unwrapMotionComponent, useActiveTargetCallback, useActiveVariantCallback, useAddVariantProps, useAnimate, useAnimatedState, useAnimatedState as useDeprecatedAnimatedState, useAnimateMini, useAnimation, useAnimationControls, useAnimationFrame, useBreakpointVariants, useComponentViewport, useConstant2 as useConstant, useCurrentPathVariables, useCurrentRoute, useCurrentRouteId, useCustomCursors, useCycle, useDataRecord, useDomEvent, useDragControls, useDynamicRefs, useElementScroll, useForceUpdate, useGamepad, useHotkey, useHydratedBreakpointVariants, useInitialRouteComponent, useInstantLayoutTransition, useInstantTransition, useInvertedScale, useInvertedScale as useDeprecatedInvertedScale, useInView, useIsInCurrentNavigationTarget, useIsomorphicLayoutEffect, useIsOnFramerCanvas, useIsPresent, useIsStaticRenderer, useLoadMorePaginatedQuery, useLoadMorePagination, useLocale, useLocaleCode, useLocaleInfo, useLocalesForCurrentRoute, useLocalizationInfo, useMeasureLayout, useMetadata, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePresenceData, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSiteRefs, useSpring, useSVGTemplate, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, velocityPerSecond, version, vh, ViewTransitionBuilder, VisualElement, visualElementStore, vw, warning, warnOnce, WillChangeMotionValue, WindowContext, withCodeBoundaryForOverrides, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, withOptimizedAppearEffect, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withV1StrokeFX, withVariantAppearEffect, withVariantFX, wrap, yieldToMain, };
47057
47357
  //! Credit to Astro | MIT License
47058
47358
  /**
47059
47359
  * @license Emotion v11.0.0