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/src/framer.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  __toESM,
14
14
  } from './framer-chunks/chunk-A2PMVMFI.js';
15
15
 
16
- // /:https://app.framerstatic.com/chunk-A6RUM2JZ.mjs
16
+ // /:https://app.framerstatic.com/chunk-BLFSVU7M.mjs
17
17
  import { createContext, } from 'react';
18
18
  import { useEffect, useLayoutEffect, } from 'react';
19
19
  import { useCallback, useContext, useId, } from 'react';
@@ -3542,6 +3542,97 @@ function getComputedStyle2(element, name,) {
3542
3542
  const computedStyle = window.getComputedStyle(element,);
3543
3543
  return isCSSVar(name,) ? computedStyle.getPropertyValue(name,) : computedStyle[name];
3544
3544
  }
3545
+ function isSVGElement(element,) {
3546
+ return isObject(element,) && 'ownerSVGElement' in element;
3547
+ }
3548
+ var resizeHandlers = /* @__PURE__ */ new WeakMap();
3549
+ var observer;
3550
+ var getSize = (borderBoxAxis, svgAxis, htmlAxis,) => (target, borderBoxSize,) => {
3551
+ if (borderBoxSize && borderBoxSize[0]) {
3552
+ return borderBoxSize[0][borderBoxAxis + 'Size'];
3553
+ } else if (isSVGElement(target,) && 'getBBox' in target) {
3554
+ return target.getBBox()[svgAxis];
3555
+ } else {
3556
+ return target[htmlAxis];
3557
+ }
3558
+ };
3559
+ var getWidth = /* @__PURE__ */ getSize('inline', 'width', 'offsetWidth',);
3560
+ var getHeight = /* @__PURE__ */ getSize('block', 'height', 'offsetHeight',);
3561
+ function notifyTarget({
3562
+ target,
3563
+ borderBoxSize,
3564
+ },) {
3565
+ var _a;
3566
+ (_a = resizeHandlers.get(target,)) == null ? void 0 : _a.forEach((handler) => {
3567
+ handler(target, {
3568
+ get width() {
3569
+ return getWidth(target, borderBoxSize,);
3570
+ },
3571
+ get height() {
3572
+ return getHeight(target, borderBoxSize,);
3573
+ },
3574
+ },);
3575
+ },);
3576
+ }
3577
+ function notifyAll(entries,) {
3578
+ entries.forEach(notifyTarget,);
3579
+ }
3580
+ function createResizeObserver() {
3581
+ if (typeof ResizeObserver === 'undefined') return;
3582
+ observer = new ResizeObserver(notifyAll,);
3583
+ }
3584
+ function resizeElement(target, handler,) {
3585
+ if (!observer) createResizeObserver();
3586
+ const elements = resolveElements(target,);
3587
+ elements.forEach((element) => {
3588
+ let elementHandlers = resizeHandlers.get(element,);
3589
+ if (!elementHandlers) {
3590
+ elementHandlers = /* @__PURE__ */ new Set();
3591
+ resizeHandlers.set(element, elementHandlers,);
3592
+ }
3593
+ elementHandlers.add(handler,);
3594
+ observer == null ? void 0 : observer.observe(element,);
3595
+ },);
3596
+ return () => {
3597
+ elements.forEach((element) => {
3598
+ const elementHandlers = resizeHandlers.get(element,);
3599
+ elementHandlers == null ? void 0 : elementHandlers.delete(handler,);
3600
+ if (!(elementHandlers == null ? void 0 : elementHandlers.size)) {
3601
+ observer == null ? void 0 : observer.unobserve(element,);
3602
+ }
3603
+ },);
3604
+ };
3605
+ }
3606
+ var windowCallbacks = /* @__PURE__ */ new Set();
3607
+ var windowResizeHandler;
3608
+ function createWindowResizeHandler() {
3609
+ windowResizeHandler = () => {
3610
+ const info = {
3611
+ get width() {
3612
+ return window.innerWidth;
3613
+ },
3614
+ get height() {
3615
+ return window.innerHeight;
3616
+ },
3617
+ };
3618
+ windowCallbacks.forEach((callback) => callback(info,));
3619
+ };
3620
+ window.addEventListener('resize', windowResizeHandler,);
3621
+ }
3622
+ function resizeWindow(callback,) {
3623
+ windowCallbacks.add(callback,);
3624
+ if (!windowResizeHandler) createWindowResizeHandler();
3625
+ return () => {
3626
+ windowCallbacks.delete(callback,);
3627
+ if (!windowCallbacks.size && typeof windowResizeHandler === 'function') {
3628
+ window.removeEventListener('resize', windowResizeHandler,);
3629
+ windowResizeHandler = void 0;
3630
+ }
3631
+ };
3632
+ }
3633
+ function resize(a, b,) {
3634
+ return typeof a === 'function' ? resizeWindow(a,) : resizeElement(a, b,);
3635
+ }
3545
3636
  function observeTimeline(update, timeline,) {
3546
3637
  let prevProgress;
3547
3638
  const onFrame = () => {
@@ -3674,9 +3765,6 @@ function recordStats() {
3674
3765
  frame.postRender(record, true,);
3675
3766
  return reportStats;
3676
3767
  }
3677
- function isSVGElement(element,) {
3678
- return isObject(element,) && 'ownerSVGElement' in element;
3679
- }
3680
3768
  function isSVGSVGElement(element,) {
3681
3769
  return isSVGElement(element,) && element.tagName === 'svg';
3682
3770
  }
@@ -8576,6 +8664,7 @@ function createProjectionNode2({
8576
8664
  this.motionValue || (this.motionValue = motionValue(0,));
8577
8665
  this.currentAnimation = animateSingleValue(this.motionValue, [0, 1e3,], {
8578
8666
  ...options,
8667
+ velocity: 0,
8579
8668
  isSync: true,
8580
8669
  onUpdate: (latest) => {
8581
8670
  this.mixTargetDelta(latest,);
@@ -9435,102 +9524,6 @@ var domMin = {
9435
9524
  function useMotionValueEvent(value, event, callback,) {
9436
9525
  useInsertionEffect(() => value.on(event, callback,), [value, event, callback,],);
9437
9526
  }
9438
- var resizeHandlers = /* @__PURE__ */ new WeakMap();
9439
- var observer;
9440
- function getElementSize(target, borderBoxSize,) {
9441
- if (borderBoxSize) {
9442
- const {
9443
- inlineSize,
9444
- blockSize,
9445
- } = borderBoxSize[0];
9446
- return {
9447
- width: inlineSize,
9448
- height: blockSize,
9449
- };
9450
- } else if (isSVGElement(target,) && 'getBBox' in target) {
9451
- return target.getBBox();
9452
- } else {
9453
- return {
9454
- width: target.offsetWidth,
9455
- height: target.offsetHeight,
9456
- };
9457
- }
9458
- }
9459
- function notifyTarget({
9460
- target,
9461
- contentRect,
9462
- borderBoxSize,
9463
- },) {
9464
- var _a;
9465
- (_a = resizeHandlers.get(target,)) == null ? void 0 : _a.forEach((handler) => {
9466
- handler({
9467
- target,
9468
- contentSize: contentRect,
9469
- get size() {
9470
- return getElementSize(target, borderBoxSize,);
9471
- },
9472
- },);
9473
- },);
9474
- }
9475
- function notifyAll(entries,) {
9476
- entries.forEach(notifyTarget,);
9477
- }
9478
- function createResizeObserver() {
9479
- if (typeof ResizeObserver === 'undefined') return;
9480
- observer = new ResizeObserver(notifyAll,);
9481
- }
9482
- function resizeElement(target, handler,) {
9483
- if (!observer) createResizeObserver();
9484
- const elements = resolveElements(target,);
9485
- elements.forEach((element) => {
9486
- let elementHandlers = resizeHandlers.get(element,);
9487
- if (!elementHandlers) {
9488
- elementHandlers = /* @__PURE__ */ new Set();
9489
- resizeHandlers.set(element, elementHandlers,);
9490
- }
9491
- elementHandlers.add(handler,);
9492
- observer == null ? void 0 : observer.observe(element,);
9493
- },);
9494
- return () => {
9495
- elements.forEach((element) => {
9496
- const elementHandlers = resizeHandlers.get(element,);
9497
- elementHandlers == null ? void 0 : elementHandlers.delete(handler,);
9498
- if (!(elementHandlers == null ? void 0 : elementHandlers.size)) {
9499
- observer == null ? void 0 : observer.unobserve(element,);
9500
- }
9501
- },);
9502
- };
9503
- }
9504
- var windowCallbacks = /* @__PURE__ */ new Set();
9505
- var windowResizeHandler;
9506
- function createWindowResizeHandler() {
9507
- windowResizeHandler = () => {
9508
- const size = {
9509
- width: window.innerWidth,
9510
- height: window.innerHeight,
9511
- };
9512
- const info = {
9513
- target: window,
9514
- size,
9515
- contentSize: size,
9516
- };
9517
- windowCallbacks.forEach((callback) => callback(info,));
9518
- };
9519
- window.addEventListener('resize', windowResizeHandler,);
9520
- }
9521
- function resizeWindow(callback,) {
9522
- windowCallbacks.add(callback,);
9523
- if (!windowResizeHandler) createWindowResizeHandler();
9524
- return () => {
9525
- windowCallbacks.delete(callback,);
9526
- if (!windowCallbacks.size && windowResizeHandler) {
9527
- windowResizeHandler = void 0;
9528
- }
9529
- };
9530
- }
9531
- function resize(a, b,) {
9532
- return typeof a === 'function' ? resizeWindow(a,) : resizeElement(a, b,);
9533
- }
9534
9527
  var maxElapsed2 = 50;
9535
9528
  var createAxisInfo = () => ({
9536
9529
  current: 0,
@@ -11221,7 +11214,7 @@ function stagger(duration = 0.1, {
11221
11214
  };
11222
11215
  }
11223
11216
 
11224
- // /:https://app.framerstatic.com/framer.C2MZBAEL.mjs
11217
+ // /:https://app.framerstatic.com/framer.6RBAH774.mjs
11225
11218
  import { lazy as ReactLazy, } from 'react';
11226
11219
  import React4 from 'react';
11227
11220
  import { startTransition as startTransition2, } from 'react';
@@ -14624,6 +14617,213 @@ function patchRoutesForABTesting(routes, initialRouteId,) {
14624
14617
  removeRoutesVariants(routes,);
14625
14618
  return resolvedInitialRouteId;
14626
14619
  }
14620
+ var mainTagId = 'main';
14621
+ var generatedPageDatasetKey = 'framerGeneratedPage';
14622
+ var searchIndexMetaName = 'framer-search-index';
14623
+ var searchIndexMetaSelector = `meta[name="${searchIndexMetaName}"]`;
14624
+ var endOfHeadStartMarker = '<!-- End of headStart -->';
14625
+ var endOfHeadEndMarker = '<!-- End of headEnd -->';
14626
+ var endOfBodyStartMarker = '<!-- End of bodyStart -->';
14627
+ var endOfBodyEndMarker = '<!-- End of bodyEnd -->';
14628
+ function assert(condition, ...msg) {
14629
+ var _a, _b;
14630
+ if (condition) return;
14631
+ const e = Error('Assertion Error' + (msg.length > 0 ? ': ' + msg.join(' ',) : ''),);
14632
+ if (e.stack) {
14633
+ try {
14634
+ const lines = e.stack.split('\n',);
14635
+ if ((_a = lines[1]) == null ? void 0 : _a.includes('assert',)) {
14636
+ lines.splice(1, 1,);
14637
+ e.stack = lines.join('\n',);
14638
+ } else if ((_b = lines[0]) == null ? void 0 : _b.includes('assert',)) {
14639
+ lines.splice(0, 1,);
14640
+ e.stack = lines.join('\n',);
14641
+ }
14642
+ } catch {}
14643
+ }
14644
+ throw e;
14645
+ }
14646
+ function assertNever(x, error,) {
14647
+ throw error || new Error(x ? `Unexpected value: ${x}` : 'Application entered invalid state',);
14648
+ }
14649
+ async function insertHTML(html, referenceNode, position = 'beforeend',) {
14650
+ let insertionParent, insertionPoint;
14651
+ switch (position) {
14652
+ case 'beforebegin':
14653
+ assert(referenceNode.parentNode, 'Can\'t use \'beforebegin\' with a referenceNode at the top level',);
14654
+ insertionParent = referenceNode.parentNode;
14655
+ insertionPoint = referenceNode;
14656
+ break;
14657
+ case 'afterend':
14658
+ assert(referenceNode.parentNode, 'Can\'t use \'afterend\' with a referenceNode at the top level',);
14659
+ insertionParent = referenceNode.parentNode;
14660
+ insertionPoint = referenceNode.nextSibling;
14661
+ break;
14662
+ case 'afterbegin':
14663
+ insertionParent = referenceNode;
14664
+ insertionPoint = referenceNode.firstChild;
14665
+ break;
14666
+ case 'beforeend':
14667
+ insertionParent = referenceNode;
14668
+ insertionPoint = null;
14669
+ break;
14670
+ default:
14671
+ assertNever(position,);
14672
+ }
14673
+ const range = document.createRange();
14674
+ range.selectNodeContents(insertionParent,);
14675
+ const fragment = range.createContextualFragment(html,);
14676
+ await pump(fragment, insertionParent, insertionPoint,);
14677
+ }
14678
+ async function pump(sourceNode, targetParent, beforeNode,) {
14679
+ for (let node = sourceNode.firstChild; node; node = node.nextSibling) {
14680
+ if (node instanceof HTMLScriptElement) {
14681
+ await handleScript(node, targetParent, beforeNode,);
14682
+ continue;
14683
+ }
14684
+ const clone = node.cloneNode(false,);
14685
+ targetParent.insertBefore(clone, beforeNode,);
14686
+ if (node.firstChild) {
14687
+ await pump(node, clone, null,);
14688
+ }
14689
+ }
14690
+ }
14691
+ async function handleScript(node, parent, beforeNode,) {
14692
+ var _a;
14693
+ const script = node.cloneNode(true,);
14694
+ const isExternal = script.hasAttribute('src',);
14695
+ const isAsync = script.hasAttribute('async',);
14696
+ const isDefer = script.hasAttribute('defer',);
14697
+ const isModule = ((_a = script.getAttribute('type',)) == null ? void 0 : _a.toLowerCase()) === 'module';
14698
+ if (!isExternal || isAsync || isDefer || isModule) {
14699
+ parent.insertBefore(script, beforeNode,);
14700
+ } else {
14701
+ await execExternalBlockingScript(script, parent, beforeNode,);
14702
+ }
14703
+ }
14704
+ function execExternalBlockingScript(script, parent, beforeNode,) {
14705
+ return new Promise((resolve) => {
14706
+ script.onload = () => resolve();
14707
+ script.onerror = () => resolve();
14708
+ parent.insertBefore(script, beforeNode,);
14709
+ },);
14710
+ }
14711
+ function useMetadata(metadata,) {
14712
+ const {
14713
+ isInitialNavigation,
14714
+ } = useRouter();
14715
+ React2.useEffect(() => {
14716
+ if (metadata.robots) {
14717
+ let robotsTag = document.querySelector('meta[name="robots"]',);
14718
+ if (robotsTag) {
14719
+ robotsTag.setAttribute('content', metadata.robots,);
14720
+ } else {
14721
+ robotsTag = document.createElement('meta',);
14722
+ robotsTag.setAttribute('name', 'robots',);
14723
+ robotsTag.setAttribute('content', metadata.robots,);
14724
+ document.head.appendChild(robotsTag,);
14725
+ }
14726
+ }
14727
+ }, [metadata.robots,],);
14728
+ React2.useInsertionEffect(() => {
14729
+ var _a;
14730
+ document.title = metadata.title || '';
14731
+ if (metadata.viewport) {
14732
+ (_a = document.querySelector('meta[name="viewport"]',)) == null ? void 0 : _a.setAttribute('content', metadata.viewport,);
14733
+ }
14734
+ }, [metadata.title, metadata.viewport,],);
14735
+ React2.useEffect(() => {
14736
+ if (!isInitialNavigation) return;
14737
+ const mainTag = document.getElementById(mainTagId,);
14738
+ const isGeneratedPage = mainTag && mainTag.dataset[generatedPageDatasetKey] !== void 0;
14739
+ if (isGeneratedPage) return;
14740
+ void insertCustomHTML(
14741
+ metadata.customHTMLHeadStart,
14742
+ metadata.customHTMLHeadEnd,
14743
+ metadata.customHTMLBodyStart,
14744
+ metadata.customHTMLBodyEnd,
14745
+ );
14746
+ }, [],);
14747
+ }
14748
+ async function insertCustomHTML(customHTMLHeadStart, customHTMLHeadEnd, customHTMLBodyStart, customHTMLBodyEnd,) {
14749
+ let endOfHeadStart;
14750
+ let endOfHeadEnd;
14751
+ let endOfBodyStart;
14752
+ let endOfBodyEnd;
14753
+ if (customHTMLHeadStart || customHTMLHeadEnd) {
14754
+ const {
14755
+ start: start2,
14756
+ end,
14757
+ } = findCommentMarkers(
14758
+ document.head.childNodes,
14759
+ customHTMLHeadStart ? endOfHeadStartMarker : void 0,
14760
+ customHTMLHeadEnd ? endOfHeadEndMarker : void 0,
14761
+ );
14762
+ endOfHeadStart = start2;
14763
+ endOfHeadEnd = end;
14764
+ }
14765
+ if (customHTMLBodyStart || customHTMLBodyEnd) {
14766
+ const {
14767
+ start: start2,
14768
+ end,
14769
+ } = findCommentMarkers(
14770
+ document.body.childNodes,
14771
+ customHTMLBodyStart ? endOfBodyStartMarker : void 0,
14772
+ customHTMLBodyEnd ? endOfBodyEndMarker : void 0,
14773
+ );
14774
+ endOfBodyStart = start2;
14775
+ endOfBodyEnd = end;
14776
+ }
14777
+ if (customHTMLHeadStart && endOfHeadStart) {
14778
+ await insertHTML(customHTMLHeadStart, endOfHeadStart, 'beforebegin',);
14779
+ }
14780
+ if (customHTMLHeadEnd && endOfHeadEnd) {
14781
+ await insertHTML(customHTMLHeadEnd, endOfHeadEnd, 'beforebegin',);
14782
+ }
14783
+ if (customHTMLBodyStart && endOfBodyStart) {
14784
+ await insertHTML(customHTMLBodyStart, endOfBodyStart, 'beforebegin',);
14785
+ }
14786
+ if (customHTMLBodyEnd && endOfBodyEnd) {
14787
+ await insertHTML(customHTMLBodyEnd, endOfBodyEnd, 'beforebegin',);
14788
+ }
14789
+ }
14790
+ function findCommentMarkers(nodes, startMarker, endMarker,) {
14791
+ if (!startMarker && !endMarker) {
14792
+ return {
14793
+ start: void 0,
14794
+ end: void 0,
14795
+ };
14796
+ }
14797
+ let start2;
14798
+ let end;
14799
+ let i = 0;
14800
+ let j = nodes.length - 1;
14801
+ while (i <= j) {
14802
+ const startNode = nodes[i];
14803
+ const endNode = nodes[j];
14804
+ if (
14805
+ !start2 && (startNode == null ? void 0 : startNode.nodeType) === Node.COMMENT_NODE && startMarker &&
14806
+ `<!--${startNode.nodeValue}-->` === startMarker
14807
+ ) {
14808
+ start2 = startNode;
14809
+ if (!endMarker) break;
14810
+ }
14811
+ if (
14812
+ !end && (endNode == null ? void 0 : endNode.nodeType) === Node.COMMENT_NODE && endMarker &&
14813
+ `<!--${endNode.nodeValue}-->` === endMarker
14814
+ ) {
14815
+ end = endNode;
14816
+ if (!startMarker) break;
14817
+ }
14818
+ if (start2 && end) break;
14819
+ i++;
14820
+ j--;
14821
+ }
14822
+ return {
14823
+ start: start2,
14824
+ end,
14825
+ };
14826
+ }
14627
14827
  var warningMessages = /* @__PURE__ */ new Set();
14628
14828
  function warnOnce2(keyMessage, ...rest) {
14629
14829
  if (warningMessages.has(keyMessage,)) return;
@@ -14806,6 +15006,9 @@ function roundWithOffset(value, offset,) {
14806
15006
  }
14807
15007
  return Math.round(value - offset,) + offset;
14808
15008
  }
15009
+ function roundToHalfPixel(value,) {
15010
+ return Math.round(value * 2,) / 2;
15011
+ }
14809
15012
  function Point(x, y,) {
14810
15013
  return {
14811
15014
  x,
@@ -14933,27 +15136,6 @@ function Point(x, y,) {
14933
15136
  }
14934
15137
  Point2.sortClockwise = sortClockwise;
14935
15138
  })(Point || (Point = {}),);
14936
- function assert(condition, ...msg) {
14937
- var _a, _b;
14938
- if (condition) return;
14939
- const e = Error('Assertion Error' + (msg.length > 0 ? ': ' + msg.join(' ',) : ''),);
14940
- if (e.stack) {
14941
- try {
14942
- const lines = e.stack.split('\n',);
14943
- if ((_a = lines[1]) == null ? void 0 : _a.includes('assert',)) {
14944
- lines.splice(1, 1,);
14945
- e.stack = lines.join('\n',);
14946
- } else if ((_b = lines[0]) == null ? void 0 : _b.includes('assert',)) {
14947
- lines.splice(0, 1,);
14948
- e.stack = lines.join('\n',);
14949
- }
14950
- } catch {}
14951
- }
14952
- throw e;
14953
- }
14954
- function assertNever(x, error,) {
14955
- throw error || new Error(x ? `Unexpected value: ${x}` : 'Application entered invalid state',);
14956
- }
14957
15139
  var BezierDefaults = {
14958
15140
  curve: 'ease',
14959
15141
  duration: 1,
@@ -17190,7 +17372,10 @@ var Loop = class extends EventEmitter {
17190
17372
  };
17191
17373
  var MainLoop = /* @__PURE__ */ new Loop();
17192
17374
  var RenderEnvironment = {
17193
- target: 'PREVIEW',
17375
+ target:
17376
+ // Enable static renderer when taking screenshots
17377
+ // in screenshot-site lambda
17378
+ safeWindow.location.origin === 'https://screenshot.framer.invalid' ? 'EXPORT' : 'PREVIEW',
17194
17379
  zoom: 1,
17195
17380
  };
17196
17381
  function executeInRenderEnvironment(customEnvironment, task,) {
@@ -18449,11 +18634,21 @@ var Rect = {
18449
18634
  return rect.x === other.x && rect.y === other.y && rect.width === other.width && rect.height === other.height;
18450
18635
  },
18451
18636
  /** @internal */
18637
+ from: (rect) => {
18638
+ return {
18639
+ x: rect.x,
18640
+ y: rect.y,
18641
+ width: rect.width,
18642
+ height: rect.height,
18643
+ };
18644
+ },
18645
+ /** @internal */
18452
18646
  atOrigin: (size) => {
18453
18647
  return {
18454
- ...size,
18455
18648
  x: 0,
18456
18649
  y: 0,
18650
+ width: size.width,
18651
+ height: size.height,
18457
18652
  };
18458
18653
  },
18459
18654
  /** @internal */
@@ -18616,13 +18811,13 @@ var Rect = {
18616
18811
  };
18617
18812
  },
18618
18813
  /** @internal */
18619
- boundingRectFromPoints: (ps) => {
18814
+ boundingRectFromPoints: (points) => {
18620
18815
  let minX = Infinity;
18621
18816
  let maxX = -Infinity;
18622
18817
  let minY = Infinity;
18623
18818
  let maxY = -Infinity;
18624
- for (let i = 0; i < ps.length; i++) {
18625
- const point2 = ps[i];
18819
+ for (let i = 0; i < points.length; i++) {
18820
+ const point2 = points[i];
18626
18821
  minX = Math.min(minX, point2.x,);
18627
18822
  maxX = Math.max(maxX, point2.x,);
18628
18823
  minY = Math.min(minY, point2.y,);
@@ -18939,20 +19134,6 @@ var Rect = {
18939
19134
  y: 0,
18940
19135
  },);
18941
19136
  },
18942
- /** @internal */
18943
- fromAny: (rect, defaults = {
18944
- x: 0,
18945
- y: 0,
18946
- width: 0,
18947
- height: 0,
18948
- },) => {
18949
- return {
18950
- x: rect.x || defaults.x,
18951
- y: rect.y || defaults.y,
18952
- width: rect.width || defaults.width,
18953
- height: rect.height || defaults.height,
18954
- };
18955
- },
18956
19137
  delta: (a, b,) => {
18957
19138
  const pointA = {
18958
19139
  x: Rect.minX(a,),
@@ -19683,6 +19864,7 @@ var ControlType = /* @__PURE__ */ ((ControlType2) => {
19683
19864
  ControlType2['MultiCollectionReference'] = 'multicollectionreference';
19684
19865
  ControlType2['TrackingId'] = 'trackingid';
19685
19866
  ControlType2['VectorSetItem'] = 'vectorsetitem';
19867
+ ControlType2['LinkRelValues'] = 'linkrelvalues';
19686
19868
  return ControlType2;
19687
19869
  })(ControlType || {},);
19688
19870
  var isFlexboxGapSupportedCached;
@@ -21056,6 +21238,8 @@ function getControlDefaultValue(control,) {
21056
21238
  return isObject2(control.defaultValue,) ? control.defaultValue : void 0;
21057
21239
  case 'font':
21058
21240
  return isObject2(control.defaultValue,) ? control.defaultValue : void 0;
21241
+ case 'linkrelvalues':
21242
+ return isArray(control.defaultValue,) ? control.defaultValue : void 0;
21059
21243
  case 'object': {
21060
21244
  const value = isObject2(control.defaultValue,) ? control.defaultValue : {};
21061
21245
  if (isObject2(control.controls,)) {
@@ -22913,7 +23097,7 @@ function BackgroundImageComponent({
22913
23097
  ...props
22914
23098
  },) {
22915
23099
  const {
22916
- motionDivToDiv,
23100
+ motionDivToDivBackgroundImage,
22917
23101
  } = useLibraryFeatures();
22918
23102
  if (layoutId) {
22919
23103
  layoutId += '-background';
@@ -22928,6 +23112,7 @@ function BackgroundImageComponent({
22928
23112
  width: Math.round(backgroundSize * image.pixelWidth,),
22929
23113
  height: Math.round(backgroundSize * image.pixelHeight,),
22930
23114
  };
23115
+ const roundedBackgroundSize = roundToHalfPixel(backgroundSize * (image.pixelWidth / 2),);
22931
23116
  const imageSource = runtime.useImageSource(image, tileSize,);
22932
23117
  fallbackWrapperStyles = {
22933
23118
  ...wrapperStyle,
@@ -22936,15 +23121,7 @@ function BackgroundImageComponent({
22936
23121
  backgroundPosition: cssObjectPosition(image.positionX, image.positionY,),
22937
23122
  opacity: void 0,
22938
23123
  border: 0,
22939
- // image.backgroundSize is a floating point number like 0.05
22940
- // so we need to multiply it by the pixelWidth to get the pixel
22941
- // value for the backgroundSize so that the size of the tile is
22942
- // a function of the image width + background size percentage.
22943
- // e.g image is 64px/64px and backgroundSize is 0.05, the tile size
22944
- // should be 3.2px
22945
- // We divide the pixel width by 2 because we assume that most designers
22946
- // will be working with 2x (retina) assets.
22947
- backgroundSize: `${(backgroundSize * (image.pixelWidth / 2)).toFixed(2,)}px auto`,
23124
+ backgroundSize: `${roundedBackgroundSize}px auto`,
22948
23125
  };
22949
23126
  imageNode = null;
22950
23127
  needsMotion = true;
@@ -22973,7 +23150,7 @@ function BackgroundImageComponent({
22973
23150
  ...wrapperStyle,
22974
23151
  ...getPlaceholderStyle(),
22975
23152
  };
22976
- return needsMotion || !motionDivToDiv
23153
+ return needsMotion || !motionDivToDivBackgroundImage
22977
23154
  ? /* @__PURE__ */ jsx3(motion.div, {
22978
23155
  layoutId,
22979
23156
  style: style2,
@@ -23130,7 +23307,13 @@ var isFirefox = () => safeNavigator && /Firefox\/\d+\.\d+$/u.test(safeNavigator.
23130
23307
  var isFramerX = () => safeNavigator && /FramerX/u.test(safeNavigator.userAgent,);
23131
23308
  var isEdge = () => safeNavigator && /Edg\//u.test(safeNavigator.userAgent,);
23132
23309
  var isAndroid = () => safeNavigator && /android/iu.test(safeNavigator.userAgent,);
23133
- var isIOS = () => safeNavigator && /iPhone|iPod|iPad/iu.test(safeNavigator.platform,);
23310
+ var iOSRegex = /iPhone|iPod|iPad/iu;
23311
+ var macIntelRegex = /MacIntel/iu;
23312
+ var isIOS = () => {
23313
+ if (!safeNavigator) return false;
23314
+ if (iOSRegex.test(safeNavigator.platform,)) return true;
23315
+ return macIntelRegex.test(safeNavigator.platform,) && safeNavigator.maxTouchPoints && safeNavigator.maxTouchPoints > 2;
23316
+ };
23134
23317
  var isMacOS = () => safeNavigator && /Mac/u.test(safeNavigator.platform,);
23135
23318
  var isWindows = () => safeNavigator && /Win/u.test(safeNavigator.platform,);
23136
23319
  var isTouch = () => safeWindow.ontouchstart === null && safeWindow.ontouchmove === null && safeWindow.ontouchend === null;
@@ -24472,32 +24655,53 @@ function useStableRefWithObserver() {
24472
24655
  return ref.current;
24473
24656
  },
24474
24657
  set current(value,) {
24475
- if (refCallback) refCallback(value,);
24658
+ if (value === ref.current) return;
24476
24659
  ref.current = value;
24477
- const needsCleanup = value === null;
24478
- callbacks.forEach((callback) => {
24479
- if (needsCleanup && cleanups.has(callback,)) return;
24480
- const cleanup = callback(value,);
24481
- if (cleanup) cleanups.set(callback, cleanup,);
24660
+ if (refCallback) refCallback(value,);
24661
+ cleanups.forEach((cleanup, callback,) => {
24662
+ if (cleanup) {
24663
+ cleanup();
24664
+ } else {
24665
+ callback(null,);
24666
+ }
24482
24667
  },);
24483
- if (needsCleanup) {
24484
- cleanups.forEach((cleanup) => cleanup());
24668
+ if (value === null) {
24485
24669
  cleanups.clear();
24670
+ callbacks.clear();
24671
+ return;
24486
24672
  }
24673
+ callbacks.forEach((callback) => {
24674
+ const cleanup = callback(value,);
24675
+ cleanups.set(callback, cleanup,);
24676
+ },);
24487
24677
  },
24488
- observe(fn, skipCall = false,) {
24489
- if (callbacks.has(fn,)) return;
24678
+ /**
24679
+ * Adds `fn` to the list of callbacks to be called when the ref is updated.
24680
+ * Executes `fn` immediately if the ref already has a value.
24681
+ */
24682
+ observe(fn,) {
24490
24683
  callbacks.add(fn,);
24491
- if (!skipCall && ref.current) fn(ref.current,);
24684
+ const value = ref.current;
24685
+ if (value) {
24686
+ const cleanup = fn(value,);
24687
+ cleanups.set(fn, cleanup,);
24688
+ }
24492
24689
  },
24690
+ /**
24691
+ * Removes `fn` from the list of callbacks.
24692
+ * Runs the cleanup for `fn` if it has been called before.
24693
+ */
24493
24694
  unobserve(fn,) {
24494
- if (fn) callbacks.delete(fn,);
24495
- },
24496
- cleanup(fn,) {
24497
- var _a;
24498
- if (!fn || !cleanups.has(fn,)) return false;
24499
- (_a = cleanups.get(fn,)) == null ? void 0 : _a();
24500
- return true;
24695
+ if (!fn) return;
24696
+ callbacks.delete(fn,);
24697
+ if (!cleanups.has(fn,)) return;
24698
+ const cleanupFn = cleanups.get(fn,);
24699
+ if (cleanupFn) {
24700
+ cleanupFn();
24701
+ } else {
24702
+ fn(null,);
24703
+ }
24704
+ cleanups.delete(fn,);
24501
24705
  },
24502
24706
  };
24503
24707
  });
@@ -24512,27 +24716,20 @@ function useObserverRef(forwardedRef,) {
24512
24716
  },);
24513
24717
  }
24514
24718
  function useRefEffect(ref, effect, deps,) {
24515
- var _a;
24516
24719
  const effectRef = useRef3();
24517
24720
  const depsChangedRef = useRef3();
24518
24721
  useMemoOne(() => {
24519
- if (depsChangedRef.current !== void 0) depsChangedRef.current = true;
24722
+ if (depsChangedRef.current !== void 0) {
24723
+ depsChangedRef.current = true;
24724
+ }
24520
24725
  }, deps ?? [{},],);
24521
24726
  if (!ref) return;
24522
24727
  const depsChanged = depsChangedRef.current;
24523
- if (depsChanged) {
24524
- depsChangedRef.current = false;
24525
- if (!ref.cleanup(effectRef.current,)) {
24526
- (_a = effectRef.current) == null ? void 0 : _a.call(effectRef, null,);
24527
- }
24528
- const value = ref.current;
24529
- if (value) effect == null ? void 0 : effect(value,);
24530
- }
24531
- if (effectRef.current === effect) return;
24728
+ if (depsChanged === false) return;
24729
+ depsChangedRef.current = false;
24532
24730
  ref.unobserve(effectRef.current,);
24731
+ ref.observe(effect,);
24533
24732
  effectRef.current = effect;
24534
- ref.observe(effect, depsChanged,);
24535
- if (depsChangedRef.current === void 0) depsChangedRef.current = false;
24536
24733
  }
24537
24734
  var SharedIntersectionObserver = class {
24538
24735
  constructor(options,) {
@@ -27377,7 +27574,7 @@ function collectBoxShadowsForProps(props, style2,) {
27377
27574
  if (!boxShadow) return;
27378
27575
  style2.boxShadow = boxShadow;
27379
27576
  }
27380
- function shadowForShape(boxShadows, rect, shapeId, strokeAlpha, strokeWidth, strokeClipId, svgStrokeAttributes,) {
27577
+ function shadowForShape(boxShadows, rect, shapeId, fillEnabled, strokeEnabled, strokeWidth, strokeClipId, svgStrokeAttributes,) {
27381
27578
  const definition = [];
27382
27579
  let outsetElement = null;
27383
27580
  let insetElement = null;
@@ -27461,6 +27658,7 @@ function shadowForShape(boxShadows, rect, shapeId, strokeAlpha, strokeWidth, str
27461
27658
  /* @__PURE__ */ jsx3('use', {
27462
27659
  href: shapeId.link,
27463
27660
  fill: 'black',
27661
+ fillOpacity: fillEnabled ? void 0 : 0,
27464
27662
  },),
27465
27663
  ],
27466
27664
  },);
@@ -27471,9 +27669,10 @@ function shadowForShape(boxShadows, rect, shapeId, strokeAlpha, strokeWidth, str
27471
27669
  children: /* @__PURE__ */ jsx3('use', {
27472
27670
  ...svgStrokeAttributes,
27473
27671
  fill: 'black',
27672
+ fillOpacity: fillEnabled ? void 0 : 0,
27474
27673
  stroke: 'black',
27475
- strokeOpacity: strokeAlpha <= 0 ? 0 : 1,
27476
- strokeWidth: strokeAlpha > 0 ? strokeWidth : 0,
27674
+ strokeOpacity: strokeEnabled ? void 0 : 0,
27675
+ strokeWidth: strokeEnabled ? strokeWidth : 0,
27477
27676
  xlinkHref: shapeId.link,
27478
27677
  clipPath: strokeClipId.urlLink,
27479
27678
  },),
@@ -31956,7 +32155,7 @@ function useParallax(options, ref, visibilityStyle,) {
31956
32155
  const visibility = useMotionValue(adjustPosition && originalPosition.current === null ? 'hidden' : visibilityStyle,);
31957
32156
  const defaultValue = useMotionValue(0,);
31958
32157
  useRefEffect(ref, (element) => {
31959
- if (element === null) return;
32158
+ if (element === null || !parallaxTransformEnabled) return;
31960
32159
  frame.read(() => {
31961
32160
  var _a;
31962
32161
  originalPosition.current = ((_a = element.getBoundingClientRect()) == null ? void 0 : _a.top) ?? 0;
@@ -31967,8 +32166,11 @@ function useParallax(options, ref, visibilityStyle,) {
31967
32166
  visibility.set(visibilityStyle ?? 'initial',);
31968
32167
  }
31969
32168
  },);
31970
- }, [adjustPosition,],);
31971
- useOnRouteChange(() => parallaxY.set(0,));
32169
+ }, [adjustPosition, parallaxTransformEnabled,],);
32170
+ useOnRouteChange(() => {
32171
+ if (!parallaxTransformEnabled) return;
32172
+ parallaxY.set(0,);
32173
+ },);
31972
32174
  return {
31973
32175
  values: {
31974
32176
  y: shouldReduceMotion || !parallaxTransformEnabled ? defaultValue : parallaxY,
@@ -32594,8 +32796,12 @@ function extractFXOptions(props,) {
32594
32796
  },
32595
32797
  loop: {},
32596
32798
  forwardedProps: {},
32799
+ targetOpacityValue: props.__targetOpacity,
32800
+ withPerspective: props.__perspectiveFX,
32801
+ inSmartComponent: props.__smartComponentFX,
32597
32802
  };
32598
32803
  for (const key7 in props) {
32804
+ if (key7 === '__targetOpacity' || key7 === '__perspectiveFX' || key7 === '__smartComponentFX') continue;
32599
32805
  const strippedKey = stripPrefixFromPrefixedKey(key7,);
32600
32806
  if (strippedKey) {
32601
32807
  for (const group of groupValues) {
@@ -32662,13 +32868,10 @@ var withFX = (Component17) =>
32662
32868
  presence = {},
32663
32869
  loop = {},
32664
32870
  forwardedProps,
32871
+ targetOpacityValue,
32872
+ withPerspective,
32873
+ inSmartComponent = false,
32665
32874
  } = extractFXOptions(props,);
32666
- const {
32667
- __targetOpacity: targetOpacityValue,
32668
- __perspectiveFX: withPerspective,
32669
- __smartComponentFX: inSmartComponent = false,
32670
- } = props;
32671
- const targetOpacity = useMotionValue(targetOpacityValue ?? 1,);
32672
32875
  const observerRef = useObserverRef(forwardedRef,);
32673
32876
  const {
32674
32877
  values: presenceEffectValues,
@@ -32691,16 +32894,10 @@ var withFX = (Component17) =>
32691
32894
  style: loopStyle,
32692
32895
  } = useLoop(loop, observerRef,);
32693
32896
  const fxValues = React4.useMemo(() => {
32897
+ const layerOpacity = new MotionValue(targetOpacityValue ?? 1,);
32694
32898
  return {
32695
32899
  scale: [appearEffectValues.scale, loopValues.scale, presenceEffectValues.scale, transformValues2.scale,],
32696
- opacity: [
32697
- appearEffectValues.opacity,
32698
- loopValues.opacity,
32699
- presenceEffectValues.opacity,
32700
- // Ensure that the layers opacity is always represented.
32701
- targetOpacity,
32702
- transformValues2.opacity,
32703
- ],
32900
+ opacity: [appearEffectValues.opacity, loopValues.opacity, presenceEffectValues.opacity, layerOpacity, transformValues2.opacity,],
32704
32901
  x: [appearEffectValues.x, loopValues.x, presenceEffectValues.x, transformValues2.x,],
32705
32902
  y: [appearEffectValues.y, loopValues.y, parallaxValues.y, presenceEffectValues.y, transformValues2.y,],
32706
32903
  rotate: [appearEffectValues.rotate, loopValues.rotate, presenceEffectValues.rotate, transformValues2.rotate,],
@@ -32714,7 +32911,7 @@ var withFX = (Component17) =>
32714
32911
  // value here on purpose.
32715
32912
  ],
32716
32913
  };
32717
- }, [targetOpacity, transformValues2, parallaxValues, appearEffectValues, loopValues, presenceEffectValues,],);
32914
+ }, [targetOpacityValue, transformValues2, parallaxValues, appearEffectValues, loopValues, presenceEffectValues,],);
32718
32915
  addMotionValueStyle(props.style, fxValues,);
32719
32916
  const scale2 = useTransform(fxValues.scale, multiply,);
32720
32917
  const opacity = useTransform(fxValues.opacity, multiply,);
@@ -33883,7 +34080,7 @@ function motionOriginFromFloatingPosition(placement = 'bottom', alignment = 'cen
33883
34080
  assertNever(placement,);
33884
34081
  }
33885
34082
  }
33886
- function getAncestorInfo(anchorRef,) {
34083
+ function domReadGetAncestorInfo(anchorRef,) {
33887
34084
  var _a;
33888
34085
  let el = anchorRef.current;
33889
34086
  const info = {
@@ -33899,12 +34096,11 @@ function getAncestorInfo(anchorRef,) {
33899
34096
  }
33900
34097
  return info;
33901
34098
  }
33902
- function createAnimationFrameLoop(onRead,) {
33903
- const startLoop = () => frame.read(onRead, true,);
33904
- const cancelLoop = () => cancelFrame(onRead,);
33905
- return [startLoop, cancelLoop,];
34099
+ function domReadStartAnimationFrameLoop(onRead,) {
34100
+ frame.read(onRead, true,);
34101
+ return () => cancelFrame(onRead,);
33906
34102
  }
33907
- function createUpdateSafeArea(safeAreaRef,) {
34103
+ function domWriteCreateUpdateSafeArea(safeAreaRef,) {
33908
34104
  let x = 0;
33909
34105
  let y = 0;
33910
34106
  return (anchorRect, calculatedRect, placement, event,) => {
@@ -33915,7 +34111,7 @@ function createUpdateSafeArea(safeAreaRef,) {
33915
34111
  Object.assign(safeAreaRef.current.style, floatingPositionSafeAreaStyle(x, y, placement, anchorRect, calculatedRect,),);
33916
34112
  };
33917
34113
  }
33918
- function updatePosition(floatingPositionRef, position, rect,) {
34114
+ function domWriteUpdatePosition(floatingPositionRef, position, rect,) {
33919
34115
  if (!floatingPositionRef.current) return;
33920
34116
  Object.assign(floatingPositionRef.current.style, {
33921
34117
  position,
@@ -33925,7 +34121,11 @@ function updatePosition(floatingPositionRef, position, rect,) {
33925
34121
  top: ((rect == null ? void 0 : rect.y) ?? 0) + (position === 'fixed' ? 0 : safeWindow.scrollY) + 'px',
33926
34122
  },);
33927
34123
  }
33928
- var FloatingStackingContext = /* @__PURE__ */ React4.createContext(/* @__PURE__ */ new Set(),);
34124
+ var FloatingStackingContext = /* @__PURE__ */ (() => {
34125
+ const Context2 = React4.createContext(/* @__PURE__ */ new Set(),);
34126
+ Context2.displayName = 'FloatingStackingContext';
34127
+ return Context2;
34128
+ })();
33929
34129
  function useDismissFloatingLayer(anchorRef, floatingPositionRef, safeAreaRef, {
33930
34130
  safeArea,
33931
34131
  onDismiss,
@@ -34050,69 +34250,90 @@ function Floating({
34050
34250
  const [origin, updateOrigin,] = useDynamicMotionOrigin(placement, alignment,);
34051
34251
  React4.useLayoutEffect(() => {
34052
34252
  if (!refHasValue(anchorRef,) || !contentRef.current || !placement || !alignment) return;
34053
- const {
34054
- position,
34055
- scrolls,
34056
- } = getAncestorInfo(anchorRef,);
34057
- const elementRect = contentRef.current.getBoundingClientRect();
34058
- const initialAnchorRect = anchorRef.current.getBoundingClientRect();
34059
34253
  const offset = {
34060
34254
  x: offsetX ?? 0,
34061
34255
  y: offsetY ?? 0,
34062
34256
  };
34063
- const getSafePlacementRect = makeGetSafePlacementFloatingPositionRect({
34064
- placement,
34065
- alignment,
34066
- offset,
34067
- collisionDetectionSize: collisionDetection
34068
- ? {
34069
- width: safeWindow.innerWidth,
34070
- height: safeWindow.innerHeight,
34071
- }
34072
- : void 0,
34073
- collisionDetectionPadding,
34074
- },);
34075
- const [initialSafePlacement, initialCalculatedRect,] = getSafePlacementRect(initialAnchorRect, elementRect,);
34076
- frame.update(() => {
34077
- updateOrigin(initialSafePlacement,);
34078
- },);
34079
- frame.render(() => {
34080
- if (!floatingPositionRef.current) return;
34081
- updatePosition(floatingPositionRef, position, initialCalculatedRect,);
34082
- },);
34083
- const updateSafeArea = createUpdateSafeArea(safeAreaRef,);
34084
- let anchorRect = initialAnchorRect;
34257
+ let getSafePlacementRect;
34258
+ let position;
34259
+ let cleanup;
34260
+ let cleanupHasRun = false;
34261
+ let initialUpdateHasRun = false;
34262
+ let anchorRect;
34263
+ let elementRect;
34085
34264
  let safePlacement;
34086
34265
  let calculatedRect;
34266
+ let scrolls;
34087
34267
  let latestEvent;
34088
- const onUpdate = () => {
34089
- updateOrigin(safePlacement,);
34090
- };
34268
+ let updateSafeArea;
34091
34269
  const onRender = () => {
34092
- updatePosition(floatingPositionRef, position, calculatedRect,);
34270
+ if (cleanupHasRun) return;
34271
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect,);
34093
34272
  if (safeArea) updateSafeArea(anchorRect, calculatedRect, safePlacement, latestEvent,);
34094
34273
  latestEvent = void 0;
34095
34274
  };
34096
- const onRead = () => {
34275
+ const initialRender = () => {
34276
+ updateSafeArea = domWriteCreateUpdateSafeArea(safeAreaRef,);
34277
+ if (latestEvent) {
34278
+ onRender();
34279
+ } else {
34280
+ domWriteUpdatePosition(floatingPositionRef, position, calculatedRect,);
34281
+ }
34282
+ initialUpdateHasRun = true;
34283
+ };
34284
+ const onUpdate = () => {
34285
+ if (cleanupHasRun) return;
34286
+ updateOrigin(safePlacement,);
34287
+ };
34288
+ const domReadUpdateSafePlacementAndRect = () => {
34289
+ if (!getSafePlacementRect || cleanupHasRun) return;
34097
34290
  anchorRect = anchorRef.current.getBoundingClientRect();
34098
34291
  const safePlacementAndRect = getSafePlacementRect(anchorRect, elementRect,);
34099
34292
  safePlacement = safePlacementAndRect[0];
34100
34293
  calculatedRect = safePlacementAndRect[1];
34101
- frame.update(onUpdate,);
34102
- frame.render(onRender,);
34103
34294
  };
34104
- const [loop, cancelAnimationFrameLoop,] = createAnimationFrameLoop(onRead,);
34105
- if (scrolls) loop == null ? void 0 : loop();
34106
- if (!safeArea) return () => cancelAnimationFrameLoop == null ? void 0 : cancelAnimationFrameLoop();
34295
+ frame.read(() => {
34296
+ if (cleanupHasRun || !contentRef.current) return;
34297
+ const ancestorInfo = domReadGetAncestorInfo(anchorRef,);
34298
+ position = ancestorInfo.position;
34299
+ elementRect = contentRef.current.getBoundingClientRect();
34300
+ getSafePlacementRect = makeGetSafePlacementFloatingPositionRect({
34301
+ placement,
34302
+ alignment,
34303
+ offset,
34304
+ collisionDetectionSize: collisionDetection
34305
+ ? {
34306
+ width: safeWindow.innerWidth,
34307
+ height: safeWindow.innerHeight,
34308
+ }
34309
+ : void 0,
34310
+ collisionDetectionPadding,
34311
+ },);
34312
+ domReadUpdateSafePlacementAndRect();
34313
+ frame.update(onUpdate,);
34314
+ frame.render(initialRender,);
34315
+ if (!ancestorInfo.scrolls) return;
34316
+ cleanup = domReadStartAnimationFrameLoop(domReadUpdateSafePlacementAndRect,);
34317
+ },);
34318
+ if (!safeArea) {
34319
+ return () => {
34320
+ cleanup == null ? void 0 : cleanup();
34321
+ cleanupHasRun = true;
34322
+ };
34323
+ }
34107
34324
  const handleMouseMove = (event) => {
34108
34325
  latestEvent = event;
34109
- frame.read(onRead,);
34326
+ if (!initialUpdateHasRun) return;
34327
+ frame.read(domReadUpdateSafePlacementAndRect,);
34328
+ frame.update(onUpdate, false, true,);
34329
+ frame.render(onRender, false, true,);
34110
34330
  };
34111
34331
  const anchor = anchorRef.current;
34112
34332
  anchor.addEventListener('mousemove', handleMouseMove,);
34113
34333
  return () => {
34114
- cancelAnimationFrameLoop == null ? void 0 : cancelAnimationFrameLoop();
34115
34334
  anchor.removeEventListener('mousemove', handleMouseMove,);
34335
+ cleanup == null ? void 0 : cleanup();
34336
+ cleanupHasRun = true;
34116
34337
  };
34117
34338
  }, [safeArea, placement, alignment, offsetX, offsetY, anchorRef, collisionDetection, collisionDetectionPadding, updateOrigin,],);
34118
34339
  const descendantContext = useDismissFloatingLayer(anchorRef, floatingPositionRef, safeAreaRef, {
@@ -34785,25 +35006,23 @@ var AnchorLinkTarget = /* @__PURE__ */ ((AnchorLinkTarget2) => {
34785
35006
  AnchorLinkTarget2['_self'] = '_self';
34786
35007
  return AnchorLinkTarget2;
34787
35008
  })(AnchorLinkTarget || {},);
34788
- function propsForLink(href, openInNewTab = void 0, trackLinkClick,) {
35009
+ function propsForLink(href, options,) {
34789
35010
  const isInternal = isInternalURL(href,);
34790
- const target = getTargetAttrValue(openInNewTab, isInternal,);
34791
- const rel = !isInternal ? 'noopener' : void 0;
34792
- href = href === '' || isValidURL(href, isInternal,) ? href : `https://${href}`;
34793
- return trackLinkClick
34794
- ? {
34795
- href,
34796
- target,
34797
- rel,
34798
- onClick() {
34799
- void trackLinkClick(href,);
34800
- },
34801
- }
34802
- : {
34803
- href,
34804
- target,
34805
- rel,
35011
+ const props = {
35012
+ href: href === '' || isValidURL(href, isInternal,) ? href : `https://${href}`,
35013
+ target: getTargetAttrValue(options == null ? void 0 : options.openInNewTab, isInternal,),
35014
+ rel: !isInternal ? combineRels('noopener', options == null ? void 0 : options.rel,) : void 0,
35015
+ };
35016
+ if (options == null ? void 0 : options.preserveParams) {
35017
+ props.href = forwardCurrentQueryParams(props.href ?? href,);
35018
+ props['data-framer-preserve-params'] = true;
35019
+ }
35020
+ if (options == null ? void 0 : options.trackLinkClick) {
35021
+ props.onClick = () => {
35022
+ void options.trackLinkClick(href,);
34806
35023
  };
35024
+ }
35025
+ return props;
34807
35026
  }
34808
35027
  function getTargetAttrValue(openInNewTab, isInternal,) {
34809
35028
  if (openInNewTab !== void 0) {
@@ -34811,6 +35030,12 @@ function getTargetAttrValue(openInNewTab, isInternal,) {
34811
35030
  }
34812
35031
  return isInternal ? void 0 : '_blank';
34813
35032
  }
35033
+ function combineRels(rel, otherRel,) {
35034
+ if (rel && !otherRel) return rel;
35035
+ if (!rel && otherRel) return otherRel;
35036
+ if (rel && otherRel) return `${rel} ${otherRel}`;
35037
+ return void 0;
35038
+ }
34814
35039
  function linkInfoKey(link,) {
34815
35040
  var _a, _b;
34816
35041
  return `${link.scopeId}:${link.nodeId}:${(_a = link.furthestExternalComponent) == null ? void 0 : _a.scopeId}:${
@@ -35076,17 +35301,17 @@ function createOnClickLinkHandler(router, routeId, href, trackLinkClick, element
35076
35301
  performNavigation(router, routeId, elementId, combinedPathVariables, smoothScroll, track,);
35077
35302
  };
35078
35303
  }
35079
- function propsForRoutePath(href, openInNewTab, router, currentRoute, trackLinkClick, implicitPathVariables, smoothScroll,) {
35080
- if (!currentRoute) return propsForLink(href, openInNewTab, trackLinkClick,);
35304
+ function propsForRoutePath(href, router, currentRoute, linkOptions, implicitPathVariables,) {
35305
+ if (!currentRoute) return propsForLink(href, linkOptions,);
35081
35306
  const matchedRoute = findMatchingRouteAttributesForResolvedPath(router, href, implicitPathVariables,);
35082
- if (!matchedRoute) return propsForLink(href, openInNewTab, trackLinkClick,);
35307
+ if (!matchedRoute) return propsForLink(href, linkOptions,);
35083
35308
  const {
35084
35309
  routeId,
35085
35310
  route,
35086
35311
  elementId,
35087
35312
  pathVariables,
35088
35313
  } = matchedRoute;
35089
- if (!route) return propsForLink(href, openInNewTab, trackLinkClick,);
35314
+ if (!route) return propsForLink(href, linkOptions,);
35090
35315
  const path = getPathForRoute(route, {
35091
35316
  // If the link is resolved, we trust that the slugs are resolved.
35092
35317
  currentRoutePath: currentRoute.path,
@@ -35099,12 +35324,20 @@ function propsForRoutePath(href, openInNewTab, router, currentRoute, trackLinkCl
35099
35324
  // don't preserve query params for bots
35100
35325
  siteCanonicalURL: router.siteCanonicalURL,
35101
35326
  },);
35102
- const anchorTarget = getTargetAttrValue(openInNewTab, true,);
35327
+ const anchorTarget = getTargetAttrValue(linkOptions.openInNewTab, true,);
35103
35328
  return {
35104
35329
  href: path,
35105
35330
  target: anchorTarget,
35106
- onClick: createOnClickLinkHandler(router, routeId, path, trackLinkClick, elementId, pathVariables, smoothScroll,),
35107
- navigate: () => performNavigation(router, routeId, elementId, pathVariables, smoothScroll,),
35331
+ onClick: createOnClickLinkHandler(
35332
+ router,
35333
+ routeId,
35334
+ path,
35335
+ linkOptions.trackLinkClick,
35336
+ elementId,
35337
+ pathVariables,
35338
+ linkOptions.smoothScroll,
35339
+ ),
35340
+ navigate: () => performNavigation(router, routeId, elementId, pathVariables, linkOptions.smoothScroll,),
35108
35341
  'data-framer-page-link-current': !elementId && currentRoute.id === routeId || void 0,
35109
35342
  };
35110
35343
  }
@@ -35114,6 +35347,8 @@ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(fun
35114
35347
  openInNewTab,
35115
35348
  smoothScroll,
35116
35349
  clickTrackingId,
35350
+ relValues,
35351
+ preserveParams,
35117
35352
  nodeId,
35118
35353
  scopeId,
35119
35354
  motionChild,
@@ -35137,7 +35372,13 @@ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(fun
35137
35372
  const pageLink = isLinkToWebPage(href,) ? href : linkFromFramerPageLink(href,);
35138
35373
  if (!pageLink) return {};
35139
35374
  if (isString(pageLink,)) {
35140
- return propsForRoutePath(pageLink, openInNewTab, router, currentRoute, trackLinkClick, implicitPathVariables, smoothScroll,);
35375
+ return propsForRoutePath(pageLink, router, currentRoute, {
35376
+ openInNewTab,
35377
+ trackLinkClick,
35378
+ rel: relValues == null ? void 0 : relValues.join(' ',),
35379
+ preserveParams,
35380
+ smoothScroll,
35381
+ }, implicitPathVariables,);
35141
35382
  }
35142
35383
  const {
35143
35384
  routeId,
@@ -35153,7 +35394,18 @@ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(fun
35153
35394
  navigate: () => performNavigation(router, routeId, elementId, pathVariables, smoothScroll,),
35154
35395
  'data-framer-page-link-current': currentRoute && linkMatchesRoute(currentRoute, pageLink, implicitPathVariables,) || void 0,
35155
35396
  };
35156
- }, [href, router, activeLocale, implicitPathVariables, openInNewTab, currentRoute, smoothScroll, trackLinkClick,],);
35397
+ }, [
35398
+ href,
35399
+ router,
35400
+ activeLocale,
35401
+ implicitPathVariables,
35402
+ openInNewTab,
35403
+ currentRoute,
35404
+ smoothScroll,
35405
+ trackLinkClick,
35406
+ relValues,
35407
+ preserveParams,
35408
+ ],);
35157
35409
  const hasRef = isValidElement(children,) && 'ref' in children;
35158
35410
  const observerRef = useObserverRef(hasRef ? children.ref : void 0,);
35159
35411
  useRefEffect(observerRef, (node) => {
@@ -35794,6 +36046,7 @@ function Router({
35794
36046
  const scheduleSideEffect = useScheduleRenderSideEffects(dep,);
35795
36047
  const startNavigation = useNavigationTransition();
35796
36048
  const monitorNextPaintAfterRender = useMonitorNextPaintAfterRender('framer-route-change',);
36049
+ const isInitialNavigationRef = useRef3(true,);
35797
36050
  const currentRouteRef = useRef3(initialRoute,);
35798
36051
  const currentPathVariablesRef = useRef3(initialPathVariables,);
35799
36052
  const currentLocaleIdRef = useRef3(initialLocaleId,);
@@ -35848,6 +36101,7 @@ function Router({
35848
36101
  if (!localeResult) return;
35849
36102
  const currentStatePaginationInfo = isHistoryState(window.history.state,) ? window.history.state.paginationInfo : void 0;
35850
36103
  const currentPath = localeResult.path;
36104
+ isInitialNavigationRef.current = false;
35851
36105
  currentPathVariablesRef.current = localeResult.pathVariables;
35852
36106
  currentLocaleIdRef.current = nextLocale.id;
35853
36107
  const updateURL = async (ignorePushStateWrapper = false,) => {
@@ -35888,6 +36142,7 @@ function Router({
35888
36142
  ],);
35889
36143
  const setCurrentRouteId = useCallback(
35890
36144
  (routeId, localeId, hash2, pathVariables, isHistoryTransition, nextRender, smoothScroll = false, updateURL,) => {
36145
+ isInitialNavigationRef.current = false;
35891
36146
  const currentRouteId2 = currentRouteRef.current;
35892
36147
  currentRouteRef.current = routeId;
35893
36148
  currentPathVariablesRef.current = pathVariables;
@@ -36002,6 +36257,7 @@ function Router({
36002
36257
  const currentRoute = routes[currentRouteId];
36003
36258
  const currentRoutePath = currentRoute == null ? void 0 : currentRoute.path;
36004
36259
  const pageviewEventData = useSendPageView(currentRoute, currentRouteId, currentPathVariables, collectionUtils, activeLocale,);
36260
+ const isInitialNavigation = isInitialNavigationRef.current;
36005
36261
  const api = useMemo2(() => ({
36006
36262
  navigate,
36007
36263
  getRoute,
@@ -36012,6 +36268,7 @@ function Router({
36012
36268
  preserveQueryParams,
36013
36269
  pageviewEventData,
36014
36270
  siteCanonicalURL,
36271
+ isInitialNavigation,
36015
36272
  }), [
36016
36273
  navigate,
36017
36274
  getRoute,
@@ -36022,6 +36279,7 @@ function Router({
36022
36279
  preserveQueryParams,
36023
36280
  siteCanonicalURL,
36024
36281
  pageviewEventData,
36282
+ isInitialNavigation,
36025
36283
  ],);
36026
36284
  if (!currentRoute) {
36027
36285
  throw new Error(`Router cannot find route for ${currentRouteId}`,);
@@ -36831,6 +37089,7 @@ var CompatibilityDatabaseCollection = class {
36831
37089
  assert(definition.type !== 'unknown', 'Invalid definition type',);
36832
37090
  data2[key7] = {
36833
37091
  type: definition.type,
37092
+ // biome-ignore lint/suspicious/noExplicitAny: Existing.
36834
37093
  value,
36835
37094
  };
36836
37095
  }
@@ -37109,6 +37368,21 @@ function castRichText(value,) {
37109
37368
  }
37110
37369
  return null;
37111
37370
  }
37371
+ function compareVectorSetItem(left, right,) {
37372
+ const leftValue = left.value;
37373
+ const rightValue = right.value;
37374
+ if (leftValue < rightValue) return -1;
37375
+ if (leftValue > rightValue) return 1;
37376
+ return 0;
37377
+ }
37378
+ function castVectorSetItem(value,) {
37379
+ switch (value == null ? void 0 : value.type) {
37380
+ case 'vectorsetitem': {
37381
+ return value;
37382
+ }
37383
+ }
37384
+ return null;
37385
+ }
37112
37386
  function compareString(left, right, collation11,) {
37113
37387
  let leftValue = left.value;
37114
37388
  let rightValue = right.value;
@@ -37168,6 +37442,8 @@ var DatabaseValue = {
37168
37442
  return castRichText(value,);
37169
37443
  case 'string':
37170
37444
  return castString(value,);
37445
+ case 'vectorsetitem':
37446
+ return castVectorSetItem(value,);
37171
37447
  case 'unknown':
37172
37448
  return value;
37173
37449
  default:
@@ -37341,6 +37617,8 @@ var DatabaseValue = {
37341
37617
  return `'${value.value}' /* Date */`;
37342
37618
  case 'richtext':
37343
37619
  return 'RichText';
37620
+ case 'vectorsetitem':
37621
+ return 'VectorSetItem';
37344
37622
  case 'responsiveimage':
37345
37623
  return 'ResponsiveImage';
37346
37624
  case 'file':
@@ -37404,6 +37682,10 @@ function compare(left, right, collation11,) {
37404
37682
  assert(left.type === right.type,);
37405
37683
  return compareRichText(left, right,);
37406
37684
  }
37685
+ case 'vectorsetitem': {
37686
+ assert(left.type === right.type,);
37687
+ return compareVectorSetItem(left, right,);
37688
+ }
37407
37689
  case 'string': {
37408
37690
  assert(left.type === right.type,);
37409
37691
  return compareString(left, right, collation11,);
@@ -37641,7 +37923,7 @@ function calculateHash(name, ...values) {
37641
37923
  },);
37642
37924
  return Hash(`${name}(${hashes.join(', ',)})`,);
37643
37925
  }
37644
- var RichText = class {
37926
+ var RichTextResolver = class {
37645
37927
  constructor(data2, pointer,) {
37646
37928
  this.data = data2;
37647
37929
  this.pointer = pointer;
@@ -37652,6 +37934,18 @@ var RichText = class {
37652
37934
  return this.cached;
37653
37935
  }
37654
37936
  };
37937
+ var VectorSetItemResolver = class {
37938
+ constructor(data2, pointer,) {
37939
+ this.data = data2;
37940
+ this.pointer = pointer;
37941
+ __publicField(this, 'cached',);
37942
+ }
37943
+ resolve() {
37944
+ assert(this.data.resolveVectorSetItem, 'Can\'t resolve vector set item.',);
37945
+ this.cached ??= this.data.resolveVectorSetItem(this.pointer,);
37946
+ return this.cached;
37947
+ }
37948
+ };
37655
37949
  var VIRTUAL_INDEX_FIELD = 'index';
37656
37950
  var Metadata = class extends Set {
37657
37951
  merge(other,) {
@@ -37740,7 +38034,14 @@ var FieldMetadata = class {
37740
38034
  assert(this.collection, 'Rich text field must have a collection',);
37741
38035
  return {
37742
38036
  type: 'richtext',
37743
- value: new RichText(this.collection.data, value.value,),
38037
+ value: new RichTextResolver(this.collection.data, value.value,),
38038
+ };
38039
+ }
38040
+ if ((value == null ? void 0 : value.type) === 'vectorsetitem') {
38041
+ assert(this.collection, 'Vector set item field must have a collection',);
38042
+ return {
38043
+ type: 'vectorsetitem',
38044
+ value: new VectorSetItemResolver(this.collection.data, value.value,),
37744
38045
  };
37745
38046
  }
37746
38047
  return value ?? null;
@@ -40878,9 +41179,13 @@ var EnforcerResolve = class _EnforcerResolve extends EnforcerNode {
40878
41179
  for (const tuple of input.tuples) {
40879
41180
  for (const field of this.fields) {
40880
41181
  const value = tuple.getValue(field,);
40881
- if ((value == null ? void 0 : value.type) !== 'richtext') continue;
40882
- assert(value.value instanceof RichText, 'Pointer must be wrapped',);
40883
- void value.value.resolve();
41182
+ if ((value == null ? void 0 : value.type) === 'richtext') {
41183
+ assert(value.value instanceof RichTextResolver, 'Pointer must be wrapped',);
41184
+ void value.value.resolve();
41185
+ } else if ((value == null ? void 0 : value.type) === 'vectorsetitem') {
41186
+ assert(value.value instanceof VectorSetItemResolver, 'Pointer must be wrapped',);
41187
+ void value.value.resolve();
41188
+ }
40884
41189
  }
40885
41190
  }
40886
41191
  const collectionItems = yield Promise.all(
@@ -41220,7 +41525,11 @@ ${stringifyQuery(query,)}`,);
41220
41525
  }
41221
41526
  async resolveValue(value,) {
41222
41527
  if ((value == null ? void 0 : value.type) === 'richtext') {
41223
- assert(value.value instanceof RichText, 'Pointer must be wrapped',);
41528
+ assert(value.value instanceof RichTextResolver, 'Pointer must be wrapped',);
41529
+ return value.value.resolve();
41530
+ }
41531
+ if ((value == null ? void 0 : value.type) === 'vectorsetitem') {
41532
+ assert(value.value instanceof VectorSetItemResolver, 'Pointer must be wrapped',);
41224
41533
  return value.value.resolve();
41225
41534
  }
41226
41535
  if ((value == null ? void 0 : value.type) === 'array') {
@@ -42169,8 +42478,8 @@ function useRunCallbackIfElementIsInView() {
42169
42478
  queuedMicrotask = true;
42170
42479
  queueMicrotask(() => {
42171
42480
  var _a;
42172
- if (!isInViewRef.current) return;
42173
42481
  queuedMicrotask = false;
42482
+ if (!isInViewRef.current) return;
42174
42483
  (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef,);
42175
42484
  },);
42176
42485
  };
@@ -42519,6 +42828,11 @@ function tryToApplyOverride(Component17, override,) {
42519
42828
  function valueWithMirroring(value, mirror,) {
42520
42829
  return mirror ? wrap(0, 2, value,) : value;
42521
42830
  }
42831
+ function singleFrame() {
42832
+ return new Promise((resolve) => {
42833
+ frame.postRender(() => resolve());
42834
+ },);
42835
+ }
42522
42836
  var withV1StrokeFX = (Component17) =>
42523
42837
  forwardRef((props, forwardedRef,) => {
42524
42838
  const {
@@ -42547,11 +42861,11 @@ var withV1StrokeFX = (Component17) =>
42547
42861
  let index = 0;
42548
42862
  while (true) {
42549
42863
  if (signal.signal.aborted) break;
42550
- const mirror = strokeEffectLoopType === 'mirror';
42864
+ const mirror = strokeEffectLoop && strokeEffectLoopType === 'mirror';
42551
42865
  const from = valueWithMirroring(index, mirror,);
42552
42866
  const to = valueWithMirroring(index + 1, mirror,);
42553
- await animate(offset, [from, to,], pathLengthTransition,);
42554
- if (!strokeEffectLoop && !mirror) break;
42867
+ await Promise.all([animate(offset, [from, to,], pathLengthTransition,), singleFrame(),],);
42868
+ if (!strokeEffectLoop) break;
42555
42869
  if (strokeEffectLoop && strokeEffectLoopType === 'repeat') continue;
42556
42870
  index++;
42557
42871
  }
@@ -43712,6 +44026,8 @@ var variantsNameToWeight = {
43712
44026
  extrabold: 800,
43713
44027
  'extrabold-italic': 800,
43714
44028
  black: 900,
44029
+ extralight: 100,
44030
+ 'extralight-italic': 100,
43715
44031
  'black-italic': 900,
43716
44032
  'extra-italic': 900,
43717
44033
  'extra-italic-bold': 900,
@@ -43965,7 +44281,7 @@ async function loadFontsWithOpenType(source,) {
43965
44281
  return supportedFonts == null ? void 0 : supportedFonts.default;
43966
44282
  }
43967
44283
  case 'fontshare': {
43968
- const supportedFonts = await import('./framer-chunks/fontshare-G3KSKQMF-6RG7QQ3J.js');
44284
+ const supportedFonts = await import('./framer-chunks/fontshare-GSJIWLGZ-3DSFZVD7.js');
43969
44285
  return supportedFonts == null ? void 0 : supportedFonts.default;
43970
44286
  }
43971
44287
  default:
@@ -43979,7 +44295,7 @@ async function loadFontToOpenTypeFeatures(source,) {
43979
44295
  return features == null ? void 0 : features.default;
43980
44296
  }
43981
44297
  case 'fontshare': {
43982
- const features = await import('./framer-chunks/fontshare-PSV545VO-KUZ52D7F.js');
44298
+ const features = await import('./framer-chunks/fontshare-SSHBFVID-JIQZ2OLR.js');
43983
44299
  return features == null ? void 0 : features.default;
43984
44300
  }
43985
44301
  case 'framer': {
@@ -44527,10 +44843,10 @@ function loadVariationAxes(source,) {
44527
44843
  const axes = (async () => {
44528
44844
  switch (source) {
44529
44845
  case 'google': {
44530
- return (await import('./framer-chunks/google-LMM7WH6E-5EU2EAFQ.js')).default;
44846
+ return (await import('./framer-chunks/google-42BCYVR5-QT55MZO3.js')).default;
44531
44847
  }
44532
44848
  case 'fontshare': {
44533
- return (await import('./framer-chunks/fontshare-YYTAVKI7-DXLAG4CY.js')).default;
44849
+ return (await import('./framer-chunks/fontshare-X6MCIXW5-UOB5XTBQ.js')).default;
44534
44850
  }
44535
44851
  default:
44536
44852
  assertNever(source,);
@@ -44719,11 +45035,12 @@ var FontStore = class {
44719
45035
  if (builtInFontLocator) {
44720
45036
  const fontVariant = BuiltInFontSource.parseVariant(builtInFontLocator.variant,);
44721
45037
  if (isSuccessfullyParsedFontVariant(fontVariant,)) {
45038
+ const family = builtInFontLocator.isVariable ? createVariableFontFamilyName(builtInFontLocator.name,) : builtInFontLocator.name;
44722
45039
  return {
44723
45040
  style: fontVariant.style,
44724
45041
  weight: fontVariant.weight,
44725
45042
  variant: builtInFontLocator.variant,
44726
- family: builtInFontLocator.name,
45043
+ family,
44727
45044
  source: 'builtIn',
44728
45045
  category: void 0,
44729
45046
  };
@@ -45644,16 +45961,105 @@ var trimSlugRegExp = /^-+|-+$/gu;
45644
45961
  function slugify(value,) {
45645
45962
  return value.toLowerCase().replace(nonSlugCharactersRegExp, '-',).replace(trimSlugRegExp, '',);
45646
45963
  }
45647
- var htmlRegExp = /[&<>'"]/gu;
45648
- var escapeHTML = (str) =>
45649
- str.replace(htmlRegExp, (tag) =>
45650
- ({
45651
- '&': '&amp;',
45652
- '<': '&lt;',
45653
- '>': '&gt;',
45654
- '\'': '&#39;',
45655
- '"': '&quot;',
45656
- })[tag] || tag,);
45964
+ var frameFromElement = (element) => {
45965
+ const frame2 = Rect.fromRect(element.getBoundingClientRect(),);
45966
+ frame2.x = frame2.x + safeWindow.scrollX;
45967
+ frame2.y = frame2.y + safeWindow.scrollY;
45968
+ return frame2;
45969
+ };
45970
+ var frameFromElements = (elements) => {
45971
+ return Rect.merge(...elements.map(frameFromElement,),);
45972
+ };
45973
+ var convertToPageFrame = (frame2, element,) => {
45974
+ const point2 = convertToPagePoint(frame2, element,);
45975
+ return {
45976
+ x: point2.x,
45977
+ y: point2.y,
45978
+ width: frame2.width,
45979
+ height: frame2.height,
45980
+ };
45981
+ };
45982
+ var convertFromPageFrame = (frame2, element,) => {
45983
+ const point2 = convertFromPagePoint(frame2, element,);
45984
+ return {
45985
+ x: point2.x,
45986
+ y: point2.y,
45987
+ width: frame2.width,
45988
+ height: frame2.height,
45989
+ };
45990
+ };
45991
+ var getPageFrame = (element) => {
45992
+ const rect = element.getBoundingClientRect();
45993
+ return {
45994
+ x: rect.left + safeWindow.scrollX,
45995
+ y: rect.top + safeWindow.scrollY,
45996
+ width: rect.width,
45997
+ height: rect.height,
45998
+ };
45999
+ };
46000
+ var fromEventForPage = (event) => {
46001
+ return {
46002
+ x: event.pageX,
46003
+ y: event.pageY,
46004
+ };
46005
+ };
46006
+ var fromEventForClient = (event) => {
46007
+ return {
46008
+ x: event.clientX,
46009
+ y: event.clientY,
46010
+ };
46011
+ };
46012
+ var convertToPagePoint = (point2, element,) => {
46013
+ const frame2 = getPageFrame(element,);
46014
+ return {
46015
+ x: point2.x + frame2.x,
46016
+ y: point2.y + frame2.y,
46017
+ };
46018
+ };
46019
+ var convertFromPagePoint = (point2, element,) => {
46020
+ const frame2 = getPageFrame(element,);
46021
+ return {
46022
+ x: point2.x - frame2.x,
46023
+ y: point2.y - frame2.y,
46024
+ };
46025
+ };
46026
+ var dispatchKeyDownEvent = (keyCode, options = {},) => {
46027
+ const keyboardEvent = new KeyboardEvent('keydown', {
46028
+ bubbles: true,
46029
+ keyCode,
46030
+ ...options,
46031
+ },);
46032
+ const activeElement = document.activeElement;
46033
+ if (activeElement) {
46034
+ activeElement.dispatchEvent(keyboardEvent,);
46035
+ }
46036
+ };
46037
+ var DOM = {
46038
+ frameFromElement,
46039
+ frameFromElements,
46040
+ convertToPageFrame,
46041
+ convertFromPageFrame,
46042
+ getPageFrame,
46043
+ fromEventForPage,
46044
+ fromEventForClient,
46045
+ convertToPagePoint,
46046
+ convertFromPagePoint,
46047
+ };
46048
+ var parser;
46049
+ var supportsNativeParseHTML = /* @__PURE__ */ (() =>
46050
+ // Firefox has rare-random issues with the native parser: https://framer-team.slack.com/archives/C01B14R6E22/p1724159313153969
46051
+ !isFirefox() && typeof Document !== 'undefined' && typeof Document.parseHTMLUnsafe === 'function')();
46052
+ function domParser(html, type,) {
46053
+ if (supportsNativeParseHTML && !type) return Document.parseHTMLUnsafe(html,);
46054
+ parser ??= new DOMParser();
46055
+ return parser.parseFromString(html, type ?? 'text/html',);
46056
+ }
46057
+ function escapeHTML(value,) {
46058
+ return value.replaceAll('&', '&amp;',).replaceAll('<', '&lt;',).replaceAll('>', '&gt;',).replaceAll('"', '&quot;',).replaceAll(
46059
+ '\'',
46060
+ '&#39;',
46061
+ );
46062
+ }
45657
46063
  var regex =
45658
46064
  /(<([a-z]+)(?:\s+(?!href[\s=])[^=\s]+=(?:'[^']*'|"[^"]*"))*)(?:(\s+href\s*=)(?:'([^']*)'|"([^"]*)"))?((?:\s+[^=\s]+=(?:'[^']*'|"[^"]*"))*>)/gi;
45659
46065
  function replaceFramerPageLinks(rawHTML, getRoute, currentRoute, implicitPathVariables,) {
@@ -45694,18 +46100,6 @@ function replaceFramerPageLinks(rawHTML, getRoute, currentRoute, implicitPathVar
45694
46100
  function isShallowEqualArray(a, b,) {
45695
46101
  return a.length === b.length && a.every((v, i,) => v === b[i]);
45696
46102
  }
45697
- var htmlEscapes = {
45698
- '&': '&amp;',
45699
- '<': '&lt;',
45700
- '>': '&gt;',
45701
- '"': '&quot;',
45702
- '\'': '&#39;',
45703
- };
45704
- var reUnescapedHtml = /[&<>"']/gu;
45705
- var reHasUnescapedHtml = /* @__PURE__ */ (() => new RegExp(reUnescapedHtml.source,))();
45706
- function escapeHTML2(str,) {
45707
- return str && reHasUnescapedHtml.test(str,) ? str.replace(reUnescapedHtml, (chr) => htmlEscapes[chr] ?? '',) : str || '';
45708
- }
45709
46103
  var deprecatedRichTextPlaceholder = '{{ text-placeholder }}';
45710
46104
  var richTextWrapperClassName = 'rich-text-wrapper';
45711
46105
  var DeprecatedRichText = /* @__PURE__ */ React2.forwardRef(function Text(props, forwardedRef,) {
@@ -45769,12 +46163,12 @@ var DeprecatedRichText = /* @__PURE__ */ React2.forwardRef(function Text(props,
45769
46163
  }
45770
46164
  let innerHTML = '';
45771
46165
  if (textOrOverride) {
45772
- const escapedText = escapeHTML2(textOrOverride,);
46166
+ const escapedText = escapeHTML(textOrOverride,);
45773
46167
  innerHTML = __htmlStructure ? __htmlStructure.replace(deprecatedRichTextPlaceholder, escapedText,) : `<p>${escapedText}</p>`;
45774
46168
  } else if (html) {
45775
46169
  innerHTML = html;
45776
46170
  } else if (textFromDesign) {
45777
- const escapedText = escapeHTML2(textFromDesign,);
46171
+ const escapedText = escapeHTML(textFromDesign,);
45778
46172
  innerHTML = __htmlStructure ? __htmlStructure.replace(deprecatedRichTextPlaceholder, escapedText,) : `<p>${escapedText}</p>`;
45779
46173
  } else if (htmlFromDesign) {
45780
46174
  innerHTML = htmlFromDesign;
@@ -46333,34 +46727,44 @@ function createLineGroups(elements,) {
46333
46727
  groups2.push(currentGroup,);
46334
46728
  return groups2;
46335
46729
  }
46336
- var FitText = /* @__PURE__ */ forwardRef(({
46337
- viewBoxScale,
46338
- viewBox,
46339
- children,
46340
- ...props
46341
- }, ref,) => {
46730
+ var BaseSVG = /* @__PURE__ */ forwardRef(function BaseSVG2(props, forwardedRef,) {
46342
46731
  return (
46343
46732
  // biome-ignore lint/a11y/noSvgWithoutTitle: FIXME: FitText might be inaccessible to screen readers because it’s wrapped in an svg
46344
46733
  /* @__PURE__ */
46345
- jsx3(motion.svg, {
46346
- ref,
46734
+ jsx3('svg', {
46347
46735
  ...props,
46348
- viewBox,
46349
- children: /* @__PURE__ */ jsx3(motion.foreignObject, {
46350
- width: '100%',
46351
- height: '100%',
46352
- className: 'framer-fit-text',
46353
- transform: `scale(${viewBoxScale})`,
46354
- style: {
46355
- overflow: 'visible',
46356
- transformOrigin: 'center center',
46357
- },
46358
- children,
46359
- },),
46736
+ ref: forwardedRef,
46737
+ children: props.children,
46360
46738
  },)
46361
46739
  );
46362
46740
  },);
46363
- var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(props, ref,) {
46741
+ var MotionSVG = /* @__PURE__ */ motion.create(BaseSVG,);
46742
+ var FitText = /* @__PURE__ */ forwardRef(function FitText2({
46743
+ viewBoxScale,
46744
+ viewBox,
46745
+ children,
46746
+ ...props
46747
+ }, forwardedRef,) {
46748
+ return /* @__PURE__ */ jsx3(MotionSVG, {
46749
+ ...props,
46750
+ ref: forwardedRef,
46751
+ viewBox,
46752
+ children: /* @__PURE__ */ jsx3(motion.foreignObject, {
46753
+ width: '100%',
46754
+ height: '100%',
46755
+ className: 'framer-fit-text',
46756
+ transform: `scale(${viewBoxScale})`,
46757
+ style: {
46758
+ overflow: 'visible',
46759
+ transformOrigin: 'center center',
46760
+ },
46761
+ children,
46762
+ },),
46763
+ },);
46764
+ },);
46765
+ var defaultFonts = [];
46766
+ var richTextContainerComponentType = 'RichTextContainer';
46767
+ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(props, forwardedRef,) {
46364
46768
  const {
46365
46769
  __fromCanvasComponent = false,
46366
46770
  _forwardedOverrideId,
@@ -46372,7 +46776,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
46372
46776
  center,
46373
46777
  children,
46374
46778
  environment: environment2 = RenderTarget.current,
46375
- fonts = [],
46779
+ fonts = defaultFonts,
46376
46780
  height,
46377
46781
  isEditable = false,
46378
46782
  left,
@@ -46404,7 +46808,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
46404
46808
  const inCodeComponent = useContext(ComponentContainerContext,);
46405
46809
  const layoutId = useLayoutId2(props,);
46406
46810
  const fallbackRef = useRef3(null,);
46407
- const containerRef = ref ?? fallbackRef;
46811
+ const containerRef = forwardedRef ?? fallbackRef;
46408
46812
  useMeasureLayout(props, containerRef,);
46409
46813
  useLoadFonts(fonts, __fromCanvasComponent, containerRef,);
46410
46814
  useInsertionEffect(() => {
@@ -46469,6 +46873,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
46469
46873
  rest.layout = 'preserve-aspect';
46470
46874
  }
46471
46875
  const Component17 = htmlElementAsMotionComponent(props.as,);
46876
+ const dataFramerName = rest['data-framer-name'] ?? name;
46472
46877
  if (isString(props.viewBox,)) {
46473
46878
  if (props.as !== void 0) {
46474
46879
  return /* @__PURE__ */ jsx3(Component17, {
@@ -46477,8 +46882,8 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
46477
46882
  style: containerStyle,
46478
46883
  layoutId,
46479
46884
  transformTemplate: template,
46480
- 'data-framer-name': rest['data-framer-name'] ?? name,
46481
- 'data-framer-component-type': 'RichTextContainer',
46885
+ 'data-framer-name': dataFramerName,
46886
+ 'data-framer-component-type': richTextContainerComponentType,
46482
46887
  children: /* @__PURE__ */ jsx3(FitText, {
46483
46888
  viewBox,
46484
46889
  viewBoxScale,
@@ -46498,8 +46903,8 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
46498
46903
  viewBox,
46499
46904
  viewBoxScale,
46500
46905
  transformTemplate: template,
46501
- 'data-framer-name': rest['data-framer-name'] ?? name,
46502
- 'data-framer-component-type': 'RichTextContainer',
46906
+ 'data-framer-name': dataFramerName,
46907
+ 'data-framer-component-type': richTextContainerComponentType,
46503
46908
  children: processedChildren,
46504
46909
  },);
46505
46910
  }
@@ -46510,8 +46915,8 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
46510
46915
  style: containerStyle,
46511
46916
  layoutId,
46512
46917
  transformTemplate: template,
46513
- 'data-framer-name': rest['data-framer-name'] ?? name,
46514
- 'data-framer-component-type': 'RichTextContainer',
46918
+ 'data-framer-name': dataFramerName,
46919
+ 'data-framer-component-type': richTextContainerComponentType,
46515
46920
  children: processedChildren,
46516
46921
  },);
46517
46922
  },);
@@ -46596,12 +47001,12 @@ function extractTextFromReactNode(node,) {
46596
47001
  }
46597
47002
  return '';
46598
47003
  }
46599
- var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({
47004
+ var RichText = /* @__PURE__ */ forwardRef(function RichText2({
46600
47005
  children,
46601
47006
  html,
46602
47007
  htmlFromDesign,
46603
47008
  ...props
46604
- }, ref,) {
47009
+ }, forwardedRef,) {
46605
47010
  const content = html || children || htmlFromDesign;
46606
47011
  if (isString(content,)) {
46607
47012
  if (!props.stylesPresetsClassName && isObject2(props.stylesPresetsClassNames,)) {
@@ -46614,7 +47019,7 @@ var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({
46614
47019
  return /* @__PURE__ */ jsx3(DeprecatedRichText, {
46615
47020
  ...props,
46616
47021
  ...contentProp,
46617
- ref,
47022
+ ref: forwardedRef,
46618
47023
  },);
46619
47024
  }
46620
47025
  if (!props.stylesPresetsClassNames && isString(props.stylesPresetsClassName,)) {
@@ -46633,7 +47038,7 @@ var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({
46633
47038
  }
46634
47039
  return /* @__PURE__ */ jsx3(RichTextContainer, {
46635
47040
  ...props,
46636
- ref,
47041
+ ref: forwardedRef,
46637
47042
  children: isValidElement(content,) ? content : void 0,
46638
47043
  },);
46639
47044
  },);
@@ -46833,99 +47238,6 @@ var ImagePatternElement = ({
46833
47238
  }, href,),
46834
47239
  },);
46835
47240
  };
46836
- var frameFromElement = (element) => {
46837
- const frame2 = Rect.fromRect(element.getBoundingClientRect(),);
46838
- frame2.x = frame2.x + safeWindow.scrollX;
46839
- frame2.y = frame2.y + safeWindow.scrollY;
46840
- return frame2;
46841
- };
46842
- var frameFromElements = (elements) => {
46843
- return Rect.merge(...elements.map(frameFromElement,),);
46844
- };
46845
- var convertToPageFrame = (frame2, element,) => {
46846
- const point2 = convertToPagePoint(frame2, element,);
46847
- return {
46848
- x: point2.x,
46849
- y: point2.y,
46850
- width: frame2.width,
46851
- height: frame2.height,
46852
- };
46853
- };
46854
- var convertFromPageFrame = (frame2, element,) => {
46855
- const point2 = convertFromPagePoint(frame2, element,);
46856
- return {
46857
- x: point2.x,
46858
- y: point2.y,
46859
- width: frame2.width,
46860
- height: frame2.height,
46861
- };
46862
- };
46863
- var getPageFrame = (element) => {
46864
- const rect = element.getBoundingClientRect();
46865
- return {
46866
- x: rect.left + safeWindow.scrollX,
46867
- y: rect.top + safeWindow.scrollY,
46868
- width: rect.width,
46869
- height: rect.height,
46870
- };
46871
- };
46872
- var fromEventForPage = (event) => {
46873
- return {
46874
- x: event.pageX,
46875
- y: event.pageY,
46876
- };
46877
- };
46878
- var fromEventForClient = (event) => {
46879
- return {
46880
- x: event.clientX,
46881
- y: event.clientY,
46882
- };
46883
- };
46884
- var convertToPagePoint = (point2, element,) => {
46885
- const frame2 = getPageFrame(element,);
46886
- return {
46887
- x: point2.x + frame2.x,
46888
- y: point2.y + frame2.y,
46889
- };
46890
- };
46891
- var convertFromPagePoint = (point2, element,) => {
46892
- const frame2 = getPageFrame(element,);
46893
- return {
46894
- x: point2.x - frame2.x,
46895
- y: point2.y - frame2.y,
46896
- };
46897
- };
46898
- var dispatchKeyDownEvent = (keyCode, options = {},) => {
46899
- const keyboardEvent = new KeyboardEvent('keydown', {
46900
- bubbles: true,
46901
- keyCode,
46902
- ...options,
46903
- },);
46904
- const activeElement = document.activeElement;
46905
- if (activeElement) {
46906
- activeElement.dispatchEvent(keyboardEvent,);
46907
- }
46908
- };
46909
- var DOM = {
46910
- frameFromElement,
46911
- frameFromElements,
46912
- convertToPageFrame,
46913
- convertFromPageFrame,
46914
- getPageFrame,
46915
- fromEventForPage,
46916
- fromEventForClient,
46917
- convertToPagePoint,
46918
- convertFromPagePoint,
46919
- };
46920
- var parser;
46921
- var supportsNativeParseHTML = /* @__PURE__ */ (() =>
46922
- // Firefox has rare-random issues with the native parser: https://framer-team.slack.com/archives/C01B14R6E22/p1724159313153969
46923
- !isFirefox() && typeof Document !== 'undefined' && typeof Document.parseHTMLUnsafe === 'function')();
46924
- function domParser(html, type,) {
46925
- if (supportsNativeParseHTML && !type) return Document.parseHTMLUnsafe(html,);
46926
- parser ??= new DOMParser();
46927
- return parser.parseFromString(html, type ?? 'text/html',);
46928
- }
46929
47241
  var useDOM = /* @__PURE__ */ isBrowser2();
46930
47242
  var SharedSVGEntry = class {
46931
47243
  constructor(id3, svg, innerHTML, viewBox, count = 0,) {
@@ -48392,7 +48704,6 @@ var Vector = /* @__PURE__ */ (() => {
48392
48704
  strokeWidth,
48393
48705
  idAttribute,
48394
48706
  shadows,
48395
- strokeAlpha,
48396
48707
  name,
48397
48708
  includeTransform,
48398
48709
  isRootVectorNode,
@@ -48511,7 +48822,8 @@ var Vector = /* @__PURE__ */ (() => {
48511
48822
  // can be larger than the path bounding box.
48512
48823
  calculatedPathBoundingBox,
48513
48824
  internalShapeId,
48514
- strokeAlpha,
48825
+ Boolean(fill,),
48826
+ strokeEnabled,
48515
48827
  strokeWidth,
48516
48828
  internalStrokeClipId,
48517
48829
  svgStrokeAttributes,
@@ -49105,8 +49417,8 @@ var package_default = {
49105
49417
  scripts: {
49106
49418
  coverage: 'yarn :jest --coverage',
49107
49419
  lint: 'yarn :eslint ./src --ext .ts,.tsx --format codeframe --quiet --cache',
49108
- 'lint:ci': 'yarn :eslint ./src --ext .ts,.tsx --format codeframe --quiet --cache --cache-strategy content',
49109
- 'lint:fix': 'yarn lint --fix --cache',
49420
+ 'lint:ci': 'yarn lint --cache-strategy content --cache-location $HOME/.cache/eslint/framer-library',
49421
+ 'lint:fix': 'yarn lint --fix',
49110
49422
  test: 'yarn :jest',
49111
49423
  watch: 'yarn :jest --watch',
49112
49424
  postinstall: 'node postinstall.cjs',
@@ -49517,6 +49829,7 @@ export {
49517
49829
  removeHiddenBreakpointLayersV2,
49518
49830
  removeItem,
49519
49831
  RenderTarget,
49832
+ resize,
49520
49833
  resolveElements,
49521
49834
  resolveLink,
49522
49835
  ResolveLinks,
@@ -49525,7 +49838,7 @@ export {
49525
49838
  reverseEasing,
49526
49839
  rgba,
49527
49840
  rgbUnit,
49528
- RichText2 as RichText,
49841
+ RichText,
49529
49842
  roundedNumber,
49530
49843
  roundedNumberString,
49531
49844
  roundWithOffset,
@@ -49630,6 +49943,7 @@ export {
49630
49943
  useLocalesForCurrentRoute,
49631
49944
  useLocalizationInfo,
49632
49945
  useMeasureLayout,
49946
+ useMetadata,
49633
49947
  useMotionTemplate,
49634
49948
  useMotionValue,
49635
49949
  useMotionValueEvent,