unframer 3.2.1 → 3.2.4
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.
- package/README.md +4 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +106 -7
- package/dist/cli.js.map +1 -1
- package/dist/css.d.ts +5 -0
- package/dist/css.d.ts.map +1 -1
- package/dist/css.js +25 -0
- package/dist/css.js.map +1 -1
- package/dist/exporter.js +1 -1
- package/dist/exporter.js.map +1 -1
- package/dist/framer-chunks/chunk-VUHWYTYT.d.ts +15 -0
- package/dist/framer-chunks/chunk-VUHWYTYT.d.ts.map +1 -0
- package/dist/framer-chunks/chunk-VUHWYTYT.js +111 -0
- package/dist/framer-chunks/chunk-VUHWYTYT.js.map +1 -0
- package/dist/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.d.ts +634 -0
- package/dist/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.d.ts.map +1 -0
- package/dist/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.js +8 -0
- package/dist/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.js.map +1 -0
- package/dist/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.d.ts +115 -0
- package/dist/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.d.ts.map +1 -0
- package/dist/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.js +8 -0
- package/dist/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.js.map +1 -0
- package/dist/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.d.ts +781 -0
- package/dist/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.d.ts.map +1 -0
- package/dist/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.js +8 -0
- package/dist/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.js.map +1 -0
- package/dist/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.d.ts +18 -0
- package/dist/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.d.ts.map +1 -0
- package/dist/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.js +8 -0
- package/dist/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.js.map +1 -0
- package/dist/framer-chunks/google-63PUBKA6-AMAUIPXM.d.ts +1566 -0
- package/dist/framer-chunks/google-63PUBKA6-AMAUIPXM.d.ts.map +1 -0
- package/dist/framer-chunks/google-63PUBKA6-AMAUIPXM.js +8 -0
- package/dist/framer-chunks/google-63PUBKA6-AMAUIPXM.js.map +1 -0
- package/dist/framer-chunks/google-7QNFQWAU-FKX5MRKV.d.ts +3588 -0
- package/dist/framer-chunks/google-7QNFQWAU-FKX5MRKV.d.ts.map +1 -0
- package/dist/framer-chunks/google-7QNFQWAU-FKX5MRKV.js +8 -0
- package/dist/framer-chunks/google-7QNFQWAU-FKX5MRKV.js.map +1 -0
- package/dist/framer-chunks/google-KTMKGB4J-RA7CAZTC.d.ts +10293 -0
- package/dist/framer-chunks/google-KTMKGB4J-RA7CAZTC.d.ts.map +1 -0
- package/dist/framer-chunks/google-KTMKGB4J-RA7CAZTC.js +8 -0
- package/dist/framer-chunks/google-KTMKGB4J-RA7CAZTC.js.map +1 -0
- package/dist/framer.js +1477 -910
- package/dist/generated/api-client.d.ts +1 -1
- package/dist/generated/api-client.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/package-manager.d.ts +1 -1
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js.map +1 -1
- package/dist/stackblitz.d.ts +9 -0
- package/dist/stackblitz.d.ts.map +1 -0
- package/dist/stackblitz.js +182 -0
- package/dist/stackblitz.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/esm/cli.d.ts.map +1 -1
- package/esm/cli.js +108 -9
- package/esm/cli.js.map +1 -1
- package/esm/css.d.ts +5 -0
- package/esm/css.d.ts.map +1 -1
- package/esm/css.js +24 -0
- package/esm/css.js.map +1 -1
- package/esm/exporter.js +1 -1
- package/esm/exporter.js.map +1 -1
- package/esm/framer-chunks/chunk-VUHWYTYT.d.ts +15 -0
- package/esm/framer-chunks/chunk-VUHWYTYT.d.ts.map +1 -0
- package/esm/framer-chunks/chunk-VUHWYTYT.js +96 -0
- package/esm/framer-chunks/chunk-VUHWYTYT.js.map +1 -0
- package/esm/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.d.ts +634 -0
- package/esm/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.d.ts.map +1 -0
- package/esm/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.js +5 -0
- package/esm/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.js.map +1 -0
- package/esm/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.d.ts +115 -0
- package/esm/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.d.ts.map +1 -0
- package/esm/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.js +5 -0
- package/esm/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.js.map +1 -0
- package/esm/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.d.ts +781 -0
- package/esm/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.d.ts.map +1 -0
- package/esm/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.js +5 -0
- package/esm/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.js.map +1 -0
- package/esm/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.d.ts +18 -0
- package/esm/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.d.ts.map +1 -0
- package/esm/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.js +5 -0
- package/esm/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.js.map +1 -0
- package/esm/framer-chunks/google-63PUBKA6-AMAUIPXM.d.ts +1566 -0
- package/esm/framer-chunks/google-63PUBKA6-AMAUIPXM.d.ts.map +1 -0
- package/esm/framer-chunks/google-63PUBKA6-AMAUIPXM.js +5 -0
- package/esm/framer-chunks/google-63PUBKA6-AMAUIPXM.js.map +1 -0
- package/esm/framer-chunks/google-7QNFQWAU-FKX5MRKV.d.ts +3588 -0
- package/esm/framer-chunks/google-7QNFQWAU-FKX5MRKV.d.ts.map +1 -0
- package/esm/framer-chunks/google-7QNFQWAU-FKX5MRKV.js +5 -0
- package/esm/framer-chunks/google-7QNFQWAU-FKX5MRKV.js.map +1 -0
- package/esm/framer-chunks/google-KTMKGB4J-RA7CAZTC.d.ts +10293 -0
- package/esm/framer-chunks/google-KTMKGB4J-RA7CAZTC.d.ts.map +1 -0
- package/esm/framer-chunks/google-KTMKGB4J-RA7CAZTC.js +5 -0
- package/esm/framer-chunks/google-KTMKGB4J-RA7CAZTC.js.map +1 -0
- package/esm/framer.js +1214 -650
- package/esm/index.d.ts +3 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -0
- package/esm/index.js.map +1 -1
- package/esm/package-manager.d.ts +1 -1
- package/esm/package-manager.d.ts.map +1 -1
- package/esm/package-manager.js.map +1 -1
- package/esm/stackblitz.d.ts +9 -0
- package/esm/stackblitz.d.ts.map +1 -0
- package/esm/stackblitz.js +179 -0
- package/esm/stackblitz.js.map +1 -0
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/package.json +3 -3
- package/src/cli.ts +122 -11
- package/src/{css.ts → css.tsx} +38 -0
- package/src/exporter.ts +8 -8
- package/src/framer-chunks/chunk-VUHWYTYT.js +105 -0
- package/src/framer-chunks/fontshare-SWUWNY3H-GSSY33IO.js +7 -0
- package/src/framer-chunks/fontshare-V2SGEFJT-AVIABYEX.js +7 -0
- package/src/framer-chunks/fontshare-YCG7BCG4-T3OENDSJ.js +7 -0
- package/src/framer-chunks/framer-font-T5XNAHJ3-SBU5UWOY.js +7 -0
- package/src/framer-chunks/google-63PUBKA6-AMAUIPXM.js +7 -0
- package/src/framer-chunks/google-7QNFQWAU-FKX5MRKV.js +7 -0
- package/src/framer-chunks/google-KTMKGB4J-RA7CAZTC.js +7 -0
- package/src/framer.js +1207 -634
- package/src/index.ts +6 -0
- package/src/package-manager.ts +2 -4
- package/src/stackblitz.ts +193 -0
- package/src/styles/framer.css +24 -0
- 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-
|
|
2
|
+
// /:https://app.framerstatic.com/chunk-VDW2YK33.mjs
|
|
3
3
|
import { createContext, } from 'react';
|
|
4
4
|
import { useEffect, useLayoutEffect, } from 'react';
|
|
5
5
|
import { useCallback, useContext, useId, } from 'react';
|
|
@@ -340,11 +340,11 @@ function createRenderBatcher(scheduleNextBatch, allowKeepAlive) {
|
|
|
340
340
|
isProcessing: false,
|
|
341
341
|
};
|
|
342
342
|
const flagRunNextFrame = () => runNextFrame = true;
|
|
343
|
-
const
|
|
343
|
+
const steps22 = stepsOrder.reduce((acc, key7) => {
|
|
344
344
|
acc[key7] = createRenderStep(flagRunNextFrame, allowKeepAlive ? key7 : void 0);
|
|
345
345
|
return acc;
|
|
346
346
|
}, {});
|
|
347
|
-
const { setup, read, resolveKeyframes, preUpdate, update, preRender, render, postRender, } =
|
|
347
|
+
const { setup, read, resolveKeyframes, preUpdate, update, preRender, render, postRender, } = steps22;
|
|
348
348
|
const processBatch = () => {
|
|
349
349
|
const timestamp = MotionGlobalConfig.useManualTiming ? state.timestamp : performance.now();
|
|
350
350
|
runNextFrame = false;
|
|
@@ -375,7 +375,7 @@ function createRenderBatcher(scheduleNextBatch, allowKeepAlive) {
|
|
|
375
375
|
}
|
|
376
376
|
};
|
|
377
377
|
const schedule = stepsOrder.reduce((acc, key7) => {
|
|
378
|
-
const step2 =
|
|
378
|
+
const step2 = steps22[key7];
|
|
379
379
|
acc[key7] = (process2, keepAlive = false, immediate = false) => {
|
|
380
380
|
if (!runNextFrame)
|
|
381
381
|
wake();
|
|
@@ -385,14 +385,14 @@ function createRenderBatcher(scheduleNextBatch, allowKeepAlive) {
|
|
|
385
385
|
}, {});
|
|
386
386
|
const cancel = (process2) => {
|
|
387
387
|
for (let i = 0; i < stepsOrder.length; i++) {
|
|
388
|
-
|
|
388
|
+
steps22[stepsOrder[i]].cancel(process2);
|
|
389
389
|
}
|
|
390
390
|
};
|
|
391
391
|
return {
|
|
392
392
|
schedule,
|
|
393
393
|
cancel,
|
|
394
394
|
state,
|
|
395
|
-
steps:
|
|
395
|
+
steps: steps22,
|
|
396
396
|
};
|
|
397
397
|
}
|
|
398
398
|
var { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = /* @__PURE__ */ createRenderBatcher(typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame : noop, true);
|
|
@@ -544,6 +544,11 @@ var color = {
|
|
|
544
544
|
transform: (v) => {
|
|
545
545
|
return typeof v === 'string' ? v : v.hasOwnProperty('red') ? rgba.transform(v) : hsla.transform(v);
|
|
546
546
|
},
|
|
547
|
+
getAnimatableNone: (v) => {
|
|
548
|
+
const parsed = color.parse(v);
|
|
549
|
+
parsed.alpha = 0;
|
|
550
|
+
return color.transform(parsed);
|
|
551
|
+
},
|
|
547
552
|
};
|
|
548
553
|
var colorRegex = /(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;
|
|
549
554
|
function test(v) {
|
|
@@ -621,7 +626,7 @@ function createTransformer(source) {
|
|
|
621
626
|
return output;
|
|
622
627
|
};
|
|
623
628
|
}
|
|
624
|
-
var convertNumbersToZero = (v) => typeof v === 'number' ? 0 : v;
|
|
629
|
+
var convertNumbersToZero = (v) => typeof v === 'number' ? 0 : color.test(v) ? color.getAnimatableNone(v) : v;
|
|
625
630
|
function getAnimatableNone(v) {
|
|
626
631
|
const parsed = parseComplexValue(v);
|
|
627
632
|
const transformer = createTransformer(v);
|
|
@@ -812,7 +817,7 @@ var generateLinearEasing = (easing, duration, resolution = 10) => {
|
|
|
812
817
|
let points = '';
|
|
813
818
|
const numPoints = Math.max(Math.round(duration / resolution), 2);
|
|
814
819
|
for (let i = 0; i < numPoints; i++) {
|
|
815
|
-
points += easing(i / (numPoints - 1)) + ', ';
|
|
820
|
+
points += Math.round(easing(i / (numPoints - 1)) * 1e4) / 1e4 + ', ';
|
|
816
821
|
}
|
|
817
822
|
return `linear(${points.substring(0, points.length - 2)})`;
|
|
818
823
|
};
|
|
@@ -3896,7 +3901,7 @@ function addToQueue(builder) {
|
|
|
3896
3901
|
}
|
|
3897
3902
|
var ViewTransitionBuilder = class {
|
|
3898
3903
|
constructor(update, options = {}) {
|
|
3899
|
-
this.
|
|
3904
|
+
this.currentSubject = 'root';
|
|
3900
3905
|
this.targets = /* @__PURE__ */ new Map();
|
|
3901
3906
|
this.notifyReady = noop;
|
|
3902
3907
|
this.readyPromise = new Promise((resolve) => {
|
|
@@ -3909,8 +3914,8 @@ var ViewTransitionBuilder = class {
|
|
|
3909
3914
|
};
|
|
3910
3915
|
addToQueue(this);
|
|
3911
3916
|
}
|
|
3912
|
-
get(
|
|
3913
|
-
this.
|
|
3917
|
+
get(subject) {
|
|
3918
|
+
this.currentSubject = subject;
|
|
3914
3919
|
return this;
|
|
3915
3920
|
}
|
|
3916
3921
|
layout(keyframes2, options) {
|
|
@@ -3943,11 +3948,11 @@ var ViewTransitionBuilder = class {
|
|
|
3943
3948
|
return this;
|
|
3944
3949
|
}
|
|
3945
3950
|
updateTarget(target, keyframes2, options = {}) {
|
|
3946
|
-
const {
|
|
3947
|
-
if (!targets.has(
|
|
3948
|
-
targets.set(
|
|
3951
|
+
const { currentSubject, targets, } = this;
|
|
3952
|
+
if (!targets.has(currentSubject)) {
|
|
3953
|
+
targets.set(currentSubject, {});
|
|
3949
3954
|
}
|
|
3950
|
-
const targetData = targets.get(
|
|
3955
|
+
const targetData = targets.get(currentSubject);
|
|
3951
3956
|
targetData[target] = {
|
|
3952
3957
|
keyframes: keyframes2,
|
|
3953
3958
|
options,
|
|
@@ -4020,7 +4025,7 @@ var PopChildMeasure = class extends React2.Component {
|
|
|
4020
4025
|
return this.props.children;
|
|
4021
4026
|
}
|
|
4022
4027
|
};
|
|
4023
|
-
function PopChild({ children, isPresent: isPresent2, anchorX, }) {
|
|
4028
|
+
function PopChild({ children, isPresent: isPresent2, anchorX, root, }) {
|
|
4024
4029
|
const id4 = useId();
|
|
4025
4030
|
const ref = useRef3(null);
|
|
4026
4031
|
const size = useRef3({
|
|
@@ -4040,7 +4045,8 @@ function PopChild({ children, isPresent: isPresent2, anchorX, }) {
|
|
|
4040
4045
|
const style2 = document.createElement('style');
|
|
4041
4046
|
if (nonce)
|
|
4042
4047
|
style2.nonce = nonce;
|
|
4043
|
-
document.head
|
|
4048
|
+
const parent = root ?? document.head;
|
|
4049
|
+
parent.appendChild(style2);
|
|
4044
4050
|
if (style2.sheet) {
|
|
4045
4051
|
style2.sheet.insertRule(`
|
|
4046
4052
|
[data-motion-pop-id="${id4}"] {
|
|
@@ -4053,8 +4059,9 @@ function PopChild({ children, isPresent: isPresent2, anchorX, }) {
|
|
|
4053
4059
|
`);
|
|
4054
4060
|
}
|
|
4055
4061
|
return () => {
|
|
4056
|
-
|
|
4057
|
-
|
|
4062
|
+
parent.removeChild(style2);
|
|
4063
|
+
if (parent.contains(style2)) {
|
|
4064
|
+
parent.removeChild(style2);
|
|
4058
4065
|
}
|
|
4059
4066
|
};
|
|
4060
4067
|
}, [isPresent2,]);
|
|
@@ -4067,7 +4074,7 @@ function PopChild({ children, isPresent: isPresent2, anchorX, }) {
|
|
|
4067
4074
|
}),
|
|
4068
4075
|
});
|
|
4069
4076
|
}
|
|
4070
|
-
var PresenceChild = ({ children, initial, isPresent: isPresent2, onExitComplete, custom, presenceAffectsLayout, mode, anchorX, }) => {
|
|
4077
|
+
var PresenceChild = ({ children, initial, isPresent: isPresent2, onExitComplete, custom, presenceAffectsLayout, mode, anchorX, root, }) => {
|
|
4071
4078
|
const presenceChildren = useConstant(newChildrenMap);
|
|
4072
4079
|
const id4 = useId();
|
|
4073
4080
|
let isReusedContext = true;
|
|
@@ -4107,6 +4114,7 @@ var PresenceChild = ({ children, initial, isPresent: isPresent2, onExitComplete,
|
|
|
4107
4114
|
children = jsx3(PopChild, {
|
|
4108
4115
|
isPresent: isPresent2,
|
|
4109
4116
|
anchorX,
|
|
4117
|
+
root,
|
|
4110
4118
|
children,
|
|
4111
4119
|
});
|
|
4112
4120
|
}
|
|
@@ -4127,7 +4135,7 @@ function onlyElements(children) {
|
|
|
4127
4135
|
});
|
|
4128
4136
|
return filtered;
|
|
4129
4137
|
}
|
|
4130
|
-
var AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = 'sync', propagate = false, anchorX = 'left', }) => {
|
|
4138
|
+
var AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = 'sync', propagate = false, anchorX = 'left', root, }) => {
|
|
4131
4139
|
const [isParentPresent, safeToRemove,] = usePresence(propagate);
|
|
4132
4140
|
const presentChildren = useMemo2(() => onlyElements(children), [children,]);
|
|
4133
4141
|
const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);
|
|
@@ -4202,6 +4210,7 @@ var AnimatePresence = ({ children, custom, initial = true, onExitComplete, prese
|
|
|
4202
4210
|
custom,
|
|
4203
4211
|
presenceAffectsLayout,
|
|
4204
4212
|
mode,
|
|
4213
|
+
root,
|
|
4205
4214
|
onExitComplete: isPresent2 ? void 0 : onExit,
|
|
4206
4215
|
anchorX,
|
|
4207
4216
|
children: child,
|
|
@@ -4371,7 +4380,7 @@ function isValidMotionProp(key7) {
|
|
|
4371
4380
|
}
|
|
4372
4381
|
var shouldForward = (key7) => !isValidMotionProp(key7);
|
|
4373
4382
|
function loadExternalIsValidProp(isValidProp) {
|
|
4374
|
-
if (
|
|
4383
|
+
if (typeof isValidProp !== 'function')
|
|
4375
4384
|
return;
|
|
4376
4385
|
shouldForward = (key7) => key7.startsWith('on') ? !isValidMotionProp(key7) : isValidProp(key7);
|
|
4377
4386
|
}
|
|
@@ -7443,6 +7452,7 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
|
|
|
7443
7452
|
constructor(latestValues = {}, parent = defaultParent == null ? void 0 : defaultParent()) {
|
|
7444
7453
|
this.id = id2++;
|
|
7445
7454
|
this.animationId = 0;
|
|
7455
|
+
this.animationCommitId = 0;
|
|
7446
7456
|
this.children = /* @__PURE__ */ new Set();
|
|
7447
7457
|
this.options = {};
|
|
7448
7458
|
this.isTreeAnimating = false;
|
|
@@ -7662,9 +7672,14 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
|
|
|
7662
7672
|
this.nodes.forEach(clearMeasurements);
|
|
7663
7673
|
return;
|
|
7664
7674
|
}
|
|
7675
|
+
if (this.animationId <= this.animationCommitId) {
|
|
7676
|
+
this.nodes.forEach(clearIsLayoutDirty);
|
|
7677
|
+
return;
|
|
7678
|
+
}
|
|
7665
7679
|
if (!this.isUpdating) {
|
|
7666
7680
|
this.nodes.forEach(clearIsLayoutDirty);
|
|
7667
7681
|
}
|
|
7682
|
+
this.animationCommitId = this.animationId;
|
|
7668
7683
|
this.isUpdating = false;
|
|
7669
7684
|
this.nodes.forEach(resetTransformStyle);
|
|
7670
7685
|
this.nodes.forEach(updateLayout);
|
|
@@ -9541,6 +9556,9 @@ function calcNextTime(current2, next2, prev, labels) {
|
|
|
9541
9556
|
else if (next2 === '<') {
|
|
9542
9557
|
return prev;
|
|
9543
9558
|
}
|
|
9559
|
+
else if (next2.startsWith('<')) {
|
|
9560
|
+
return Math.max(0, prev + parseFloat(next2.slice(1)));
|
|
9561
|
+
}
|
|
9544
9562
|
else {
|
|
9545
9563
|
return labels.get(next2) ?? current2;
|
|
9546
9564
|
}
|
|
@@ -9613,7 +9631,7 @@ function createAnimationsFromSequence(sequence2, { defaultTransition = {}, ...se
|
|
|
9613
9631
|
let { ease: ease2 = defaultTransition.ease || 'easeOut', duration, } = valueTransition;
|
|
9614
9632
|
const calculatedDelay = typeof delay2 === 'function' ? delay2(elementIndex, numSubjects) : delay2;
|
|
9615
9633
|
const numKeyframes = valueKeyframesAsList.length;
|
|
9616
|
-
const createGenerator = isGenerator(type) ? type : generators == null ? void 0 : generators[type];
|
|
9634
|
+
const createGenerator = isGenerator(type) ? type : generators == null ? void 0 : generators[type || 'keyframes'];
|
|
9617
9635
|
if (numKeyframes <= 2 && createGenerator) {
|
|
9618
9636
|
let absoluteDelta = 100;
|
|
9619
9637
|
if (numKeyframes === 2 && isNumberKeyframesArray(valueKeyframesAsList)) {
|
|
@@ -9872,6 +9890,9 @@ function createScopedAnimate(scope) {
|
|
|
9872
9890
|
const animation = new GroupAnimationWithThen(animations2);
|
|
9873
9891
|
if (scope) {
|
|
9874
9892
|
scope.animations.push(animation);
|
|
9893
|
+
animation.finished.then(() => {
|
|
9894
|
+
removeItem(scope.animations, animation);
|
|
9895
|
+
});
|
|
9875
9896
|
}
|
|
9876
9897
|
return animation;
|
|
9877
9898
|
}
|
|
@@ -9887,6 +9908,7 @@ function useAnimate() {
|
|
|
9887
9908
|
const animate22 = useConstant(() => createScopedAnimate(scope));
|
|
9888
9909
|
useUnmountEffect(() => {
|
|
9889
9910
|
scope.animations.forEach((animation) => animation.stop());
|
|
9911
|
+
scope.animations.length = 0;
|
|
9890
9912
|
});
|
|
9891
9913
|
return [scope, animate22,];
|
|
9892
9914
|
}
|
|
@@ -10144,6 +10166,20 @@ function useInstantTransition() {
|
|
|
10144
10166
|
function disableInstantTransitions() {
|
|
10145
10167
|
MotionGlobalConfig.instantAnimations = false;
|
|
10146
10168
|
}
|
|
10169
|
+
function usePageInView() {
|
|
10170
|
+
const [isInView, setIsInView,] = useState(true);
|
|
10171
|
+
useEffect(() => {
|
|
10172
|
+
const handleVisibilityChange = () => setIsInView(!document.hidden);
|
|
10173
|
+
if (document.hidden) {
|
|
10174
|
+
handleVisibilityChange();
|
|
10175
|
+
}
|
|
10176
|
+
document.addEventListener('visibilitychange', handleVisibilityChange);
|
|
10177
|
+
return () => {
|
|
10178
|
+
document.removeEventListener('visibilitychange', handleVisibilityChange);
|
|
10179
|
+
};
|
|
10180
|
+
}, []);
|
|
10181
|
+
return isInView;
|
|
10182
|
+
}
|
|
10147
10183
|
var appearAnimationStore = /* @__PURE__ */ new Map();
|
|
10148
10184
|
var appearComplete = /* @__PURE__ */ new Map();
|
|
10149
10185
|
var appearStoreId = (elementId, valueName) => {
|
|
@@ -10499,15 +10535,16 @@ function stagger(duration = 0.1, { startDelay = 0, from = 0, ease: ease2, } = {}
|
|
|
10499
10535
|
return startDelay + delay2;
|
|
10500
10536
|
};
|
|
10501
10537
|
}
|
|
10502
|
-
// /:https://app.framerstatic.com/framer.
|
|
10503
|
-
import { lazy as ReactLazy, } from 'react';
|
|
10538
|
+
// /:https://app.framerstatic.com/framer.L7DRXRFF.mjs
|
|
10504
10539
|
import React4 from 'react';
|
|
10505
10540
|
import { startTransition as startTransition2, } from 'react';
|
|
10506
10541
|
import { Suspense as Suspense2, } from 'react';
|
|
10507
10542
|
import { memo as memo2, } from 'react';
|
|
10508
10543
|
import ReactDOM from 'react-dom';
|
|
10544
|
+
import { useSyncExternalStore, } from 'react';
|
|
10509
10545
|
import { createRef, } from 'react';
|
|
10510
10546
|
import { useTransition, } from 'react';
|
|
10547
|
+
import { createPortal, } from 'react-dom';
|
|
10511
10548
|
import { cloneElement as cloneElement32, } from 'react';
|
|
10512
10549
|
var __unframerNavigator2 = typeof window !== 'undefined' ? navigator : void 0;
|
|
10513
10550
|
var require_hsluv = __commonJS({
|
|
@@ -11443,37 +11480,47 @@ var preloadKey = 'preload';
|
|
|
11443
11480
|
function isLazyComponentType(componentType) {
|
|
11444
11481
|
return typeof componentType === 'object' && componentType !== null && !isValidElement(componentType) && preloadKey in componentType;
|
|
11445
11482
|
}
|
|
11446
|
-
function lazy(factory) {
|
|
11447
|
-
const LazyComponent = ReactLazy(factory);
|
|
11483
|
+
function lazy(factory, moduleName = 'default') {
|
|
11448
11484
|
let factoryPromise;
|
|
11449
11485
|
let LoadedComponent;
|
|
11450
11486
|
let hasRendered = false;
|
|
11451
|
-
|
|
11452
|
-
|
|
11453
|
-
hasRendered = true;
|
|
11454
|
-
}, []);
|
|
11455
|
-
const Comp = LoadedComponent ?? LazyComponent;
|
|
11456
|
-
return /* @__PURE__ */ jsx3(Comp, {
|
|
11457
|
-
ref,
|
|
11458
|
-
...props,
|
|
11459
|
-
});
|
|
11460
|
-
});
|
|
11461
|
-
Component17.preload = () => {
|
|
11487
|
+
let error;
|
|
11488
|
+
const load = () => {
|
|
11462
11489
|
if (!factoryPromise) {
|
|
11463
11490
|
factoryPromise = factory().then((module) => {
|
|
11464
|
-
|
|
11491
|
+
if (!(moduleName in module))
|
|
11492
|
+
throw new Error(`Module does not contain export '${moduleName}'`);
|
|
11493
|
+
LoadedComponent = module[moduleName];
|
|
11465
11494
|
return LoadedComponent;
|
|
11495
|
+
}).catch((err) => {
|
|
11496
|
+
error = err;
|
|
11466
11497
|
});
|
|
11467
11498
|
}
|
|
11468
11499
|
return factoryPromise;
|
|
11469
11500
|
};
|
|
11470
|
-
|
|
11501
|
+
const Component18 = forwardRef(function LazyWithPreload(props, ref) {
|
|
11502
|
+
useEffect(() => {
|
|
11503
|
+
hasRendered = true;
|
|
11504
|
+
}, []);
|
|
11505
|
+
if (error) {
|
|
11506
|
+
throw error;
|
|
11507
|
+
}
|
|
11508
|
+
if (!LoadedComponent) {
|
|
11509
|
+
throw load();
|
|
11510
|
+
}
|
|
11511
|
+
return /* @__PURE__ */ jsx3(LoadedComponent, {
|
|
11512
|
+
ref,
|
|
11513
|
+
...props,
|
|
11514
|
+
});
|
|
11515
|
+
});
|
|
11516
|
+
Component18.preload = load;
|
|
11517
|
+
Component18.getStatus = () => {
|
|
11471
11518
|
return {
|
|
11472
11519
|
hasLoaded: LoadedComponent !== void 0,
|
|
11473
11520
|
hasRendered,
|
|
11474
11521
|
};
|
|
11475
11522
|
};
|
|
11476
|
-
return
|
|
11523
|
+
return Component18;
|
|
11477
11524
|
}
|
|
11478
11525
|
var objectKeys = Object.keys;
|
|
11479
11526
|
function hasProp(o, prop) {
|
|
@@ -12167,23 +12214,28 @@ function forwardCurrentQueryParams(href) {
|
|
|
12167
12214
|
}
|
|
12168
12215
|
return forwardQueryParams(queryParamsString, href);
|
|
12169
12216
|
}
|
|
12217
|
+
var FRAMER_VARIANT_KEY = 'framer_variant';
|
|
12170
12218
|
function forwardQueryParams(queryParamsString, href) {
|
|
12171
12219
|
const startOfHash = href.indexOf('#');
|
|
12172
12220
|
const hrefWithoutHash = startOfHash === -1 ? href : href.substring(0, startOfHash);
|
|
12173
12221
|
const hash2 = startOfHash === -1 ? '' : href.substring(startOfHash);
|
|
12174
12222
|
const startOfSearch = hrefWithoutHash.indexOf('?');
|
|
12175
|
-
|
|
12176
|
-
|
|
12177
|
-
|
|
12223
|
+
const baseUrl = startOfSearch === -1 ? hrefWithoutHash : hrefWithoutHash.substring(0, startOfSearch);
|
|
12224
|
+
const searchString = startOfSearch === -1 ? '' : hrefWithoutHash.substring(startOfSearch);
|
|
12225
|
+
const newSearchParams = new URLSearchParams(searchString);
|
|
12178
12226
|
const currentSearchParams = new URLSearchParams(queryParamsString);
|
|
12179
|
-
const newSearchString = hrefWithoutHash.substring(startOfSearch + 1);
|
|
12180
|
-
const newSearchParams = new URLSearchParams(newSearchString);
|
|
12181
12227
|
for (const [key7, value,] of currentSearchParams) {
|
|
12182
|
-
if (
|
|
12183
|
-
|
|
12184
|
-
|
|
12228
|
+
if (newSearchParams.has(key7))
|
|
12229
|
+
continue;
|
|
12230
|
+
if (key7 === FRAMER_VARIANT_KEY)
|
|
12231
|
+
continue;
|
|
12232
|
+
newSearchParams.append(key7, value);
|
|
12185
12233
|
}
|
|
12186
|
-
|
|
12234
|
+
const newSearchString = newSearchParams.toString();
|
|
12235
|
+
if (newSearchString === '') {
|
|
12236
|
+
return hrefWithoutHash + hash2;
|
|
12237
|
+
}
|
|
12238
|
+
return baseUrl + '?' + newSearchString + hash2;
|
|
12187
12239
|
}
|
|
12188
12240
|
async function replacePathVariables(path, currentLocale, nextLocale, defaultLocale, collectionId, pathVariables, collectionUtils) {
|
|
12189
12241
|
var _a;
|
|
@@ -19392,8 +19444,38 @@ var inputIconCSSDeclaration = {
|
|
|
19392
19444
|
function createRGBVariableFallbacks(variables, fallback) {
|
|
19393
19445
|
return css2.variable(...variables.flatMap((variable) => [`${variable}-rgb`, variable,]), fallback);
|
|
19394
19446
|
}
|
|
19447
|
+
var defaultRichTextContainerStyle = {
|
|
19448
|
+
display: 'flex',
|
|
19449
|
+
flexDirection: 'column',
|
|
19450
|
+
justifyContent: 'flex-start',
|
|
19451
|
+
};
|
|
19452
|
+
var defaultTextFillStyle = {
|
|
19453
|
+
display: 'inline-block',
|
|
19454
|
+
};
|
|
19455
|
+
var defaultImageStyle = {
|
|
19456
|
+
display: 'block',
|
|
19457
|
+
};
|
|
19395
19458
|
var richTextCSSRules = /* @__PURE__ */ (() => [
|
|
19459
|
+
/**
|
|
19460
|
+
* RichTextContainer styles can get overridden by other static or inline styles collected in
|
|
19461
|
+
* style collectors, as well as styles defined directly in the @link{RichText.tsx} component.
|
|
19462
|
+
*
|
|
19463
|
+
* NOTE: `display: flex` can get overridden with `display: -webkit-box` in
|
|
19464
|
+
* @link{collectTextTruncation.ts} if the text is truncated. In this case, the flex-specific
|
|
19465
|
+
* properties are not supported, e.g. `justify-content`. This is ok because truncated text has
|
|
19466
|
+
* auto height and doesn't support vertical alignment. In any case, keep this in mind when
|
|
19467
|
+
* using other flex-specific properties.
|
|
19468
|
+
*/
|
|
19396
19469
|
/* css */
|
|
19470
|
+
`
|
|
19471
|
+
[data-framer-component-type="RichTextContainer"] {
|
|
19472
|
+
display: ${defaultRichTextContainerStyle.display};
|
|
19473
|
+
flex-direction: ${defaultRichTextContainerStyle.flexDirection};
|
|
19474
|
+
justify-content: ${defaultRichTextContainerStyle.justifyContent};
|
|
19475
|
+
outline: none;
|
|
19476
|
+
flex-shrink: 0;
|
|
19477
|
+
}
|
|
19478
|
+
`, /* css */
|
|
19397
19479
|
`
|
|
19398
19480
|
p.framer-text,
|
|
19399
19481
|
div.framer-text,
|
|
@@ -19558,7 +19640,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
|
|
|
19558
19640
|
/* css */
|
|
19559
19641
|
`
|
|
19560
19642
|
.framer-text[data-text-fill] {
|
|
19561
|
-
display:
|
|
19643
|
+
display: ${defaultTextFillStyle.display};
|
|
19562
19644
|
background-clip: text;
|
|
19563
19645
|
-webkit-background-clip: text;
|
|
19564
19646
|
/* make this a transparent color if you want to visualise the clipping */
|
|
@@ -19900,7 +19982,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
|
|
|
19900
19982
|
`, /* css */
|
|
19901
19983
|
`
|
|
19902
19984
|
.framer-image.framer-text {
|
|
19903
|
-
display:
|
|
19985
|
+
display: ${defaultImageStyle.display};
|
|
19904
19986
|
max-width: 100%;
|
|
19905
19987
|
height: auto;
|
|
19906
19988
|
}
|
|
@@ -20058,6 +20140,40 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
|
|
|
20058
20140
|
}
|
|
20059
20141
|
`,
|
|
20060
20142
|
])();
|
|
20143
|
+
var textTruncationDisplayInlineVariableForSafari16 = '--text-truncation-display-inline-for-safari-16';
|
|
20144
|
+
var textTruncationDisplayNoneVariableForSafari16 = '--text-truncation-display-none-for-safari-16';
|
|
20145
|
+
var textTruncationLineBreakVariableForSafari16 = '--text-truncation-line-break-for-safari-16';
|
|
20146
|
+
var blockLikeElementSelectors = [
|
|
20147
|
+
'div.framer-text',
|
|
20148
|
+
'p.framer-text',
|
|
20149
|
+
'h1.framer-text',
|
|
20150
|
+
'h2.framer-text',
|
|
20151
|
+
'h3.framer-text',
|
|
20152
|
+
'h4.framer-text',
|
|
20153
|
+
'h5.framer-text',
|
|
20154
|
+
'h6.framer-text',
|
|
20155
|
+
'ol.framer-text',
|
|
20156
|
+
'ul.framer-text',
|
|
20157
|
+
'li.framer-text',
|
|
20158
|
+
'blockquote.framer-text',
|
|
20159
|
+
'.framer-text.framer-image',
|
|
20160
|
+
];
|
|
20161
|
+
var anySafariVersion = '(background: -webkit-named-image(i))';
|
|
20162
|
+
var safari17OrGreater = '(contain-intrinsic-size: inherit)';
|
|
20163
|
+
var safari16TextTruncationFix = /* @__PURE__ */ (() => [`@supports ${anySafariVersion} and (not ${safari17OrGreater}) {
|
|
20164
|
+
/* Render block-like elements inline when text is truncated, otherwise default to user agent (revert) */
|
|
20165
|
+
${blockLikeElementSelectors.join(', ')} { display: var(${textTruncationDisplayInlineVariableForSafari16}, revert) }
|
|
20166
|
+
|
|
20167
|
+
/* Add a line break after each block-like element that we render inline, to resemble the block-like behavior */
|
|
20168
|
+
${blockLikeElementSelectors.map((selector) => `${selector}::after`).join(', ')} { content: var(${textTruncationLineBreakVariableForSafari16}); white-space: pre; }
|
|
20169
|
+
|
|
20170
|
+
/* Don't render modules (e.g. videos, code-blocks), or tables when text is truncated, because often these can't be truncated and their children might be block elements */
|
|
20171
|
+
.framer-text.framer-text-module,
|
|
20172
|
+
.framer-text.framer-table-wrapper { display: var(${textTruncationDisplayNoneVariableForSafari16}, revert) }
|
|
20173
|
+
|
|
20174
|
+
/* Render text-fill elements inline when text is truncated, otherwise default to their default value (e.g. inline-block) */
|
|
20175
|
+
p.framer-text[data-text-fill] { display: var(${textTruncationDisplayInlineVariableForSafari16}, ${defaultTextFillStyle.display}) }
|
|
20176
|
+
}`,])();
|
|
20061
20177
|
var defaultCache = /* @__PURE__ */ new Set();
|
|
20062
20178
|
var defaultSheet;
|
|
20063
20179
|
function injectCSSRule(cssRule, sheet, cache2 = defaultCache) {
|
|
@@ -20335,6 +20451,7 @@ var pageContentWrapperWrapperCSSRules = [
|
|
|
20335
20451
|
`[data-framer-component-type="PageContentWrapper"] > *, [data-framer-component-type="PageContentWrapper"] > [data-framer-component-type] { position: relative; }`,
|
|
20336
20452
|
];
|
|
20337
20453
|
var presenceCSS = [`[data-is-present="false"], [data-is-present="false"] * { pointer-events: none !important; }`,];
|
|
20454
|
+
var lightboxCSS = [`.framer-lightbox-container { opacity: 1 !important; pointer-events: auto !important; }`,];
|
|
20338
20455
|
var cursorCSS = [
|
|
20339
20456
|
`[data-framer-cursor="pointer"] { cursor: pointer; }`,
|
|
20340
20457
|
`[data-framer-cursor="grab"] { cursor: grab; }`,
|
|
@@ -20367,12 +20484,12 @@ var hideScrollbars = [
|
|
|
20367
20484
|
];
|
|
20368
20485
|
var willChangeOverrideCSSVariable = '--framer-will-change-override';
|
|
20369
20486
|
var willChangeEffectOverrideCSSVariable = '--framer-will-change-effect-override';
|
|
20370
|
-
var
|
|
20487
|
+
var anySafariVersion2 = '(background: -webkit-named-image(i))';
|
|
20371
20488
|
var safari16OrGreater = '(grid-template-rows: subgrid)';
|
|
20372
20489
|
var willChangeTransformRules = (isPreview) => isPreview
|
|
20373
20490
|
? [
|
|
20374
20491
|
`body { ${willChangeOverrideCSSVariable}: none; }`,
|
|
20375
|
-
`@supports ${
|
|
20492
|
+
`@supports ${anySafariVersion2} and (not ${safari16OrGreater}) { body { ${willChangeOverrideCSSVariable}: transform; } }`,
|
|
20376
20493
|
]
|
|
20377
20494
|
: [`body { ${willChangeOverrideCSSVariable}: none; ${willChangeEffectOverrideCSSVariable}: none; }`,];
|
|
20378
20495
|
var frameCSSRules = (isPreview) => {
|
|
@@ -20402,6 +20519,8 @@ var combineCSSRules = (isPreview) => [
|
|
|
20402
20519
|
...resetCSS,
|
|
20403
20520
|
...hideScrollbars,
|
|
20404
20521
|
...overflowClipFallbackCSSRules,
|
|
20522
|
+
...lightboxCSS,
|
|
20523
|
+
...safari16TextTruncationFix,
|
|
20405
20524
|
];
|
|
20406
20525
|
export var combinedCSSRules = /* @__PURE__ */ combineCSSRules(false);
|
|
20407
20526
|
var combinedCSSRulesForPreview = /* @__PURE__ */ combineCSSRules(true);
|
|
@@ -22216,16 +22335,35 @@ function getImageStyle(image) {
|
|
|
22216
22335
|
objectFit: cssObjectFit(image.fit),
|
|
22217
22336
|
};
|
|
22218
22337
|
}
|
|
22219
|
-
function
|
|
22338
|
+
function useDecodingAttribute(avoidAsyncDecoding) {
|
|
22339
|
+
const currentDecoding = React4.useRef(avoidAsyncDecoding ? 'auto' : 'async');
|
|
22340
|
+
const switchDecodingToAuto = useCallback((node) => {
|
|
22341
|
+
currentDecoding.current = 'auto';
|
|
22342
|
+
node.decoding = 'auto';
|
|
22343
|
+
}, []);
|
|
22344
|
+
const onImageLoad = useCallback((event) => {
|
|
22345
|
+
switchDecodingToAuto(event.currentTarget);
|
|
22346
|
+
}, [switchDecodingToAuto,]);
|
|
22347
|
+
const onImageMount = useCallback((node) => {
|
|
22348
|
+
if (node == null ? void 0 : node.complete)
|
|
22349
|
+
switchDecodingToAuto(node);
|
|
22350
|
+
}, [switchDecodingToAuto,]);
|
|
22351
|
+
return {
|
|
22352
|
+
decoding: currentDecoding.current,
|
|
22353
|
+
onImageLoad,
|
|
22354
|
+
onImageMount,
|
|
22355
|
+
};
|
|
22356
|
+
}
|
|
22357
|
+
function StaticImage({ image, containerSize, nodeId, alt, draggable, avoidAsyncDecoding, }) {
|
|
22220
22358
|
const source = runtime.useImageSource(image, containerSize, nodeId);
|
|
22221
22359
|
const imageStyle = getImageStyle(image);
|
|
22222
|
-
const
|
|
22360
|
+
const { decoding, onImageLoad, onImageMount, } = useDecodingAttribute(avoidAsyncDecoding);
|
|
22223
22361
|
return (
|
|
22224
22362
|
// eslint-disable-next-line framer-studio/require-async-decoding -- we conditionally apply it
|
|
22225
22363
|
/* @__PURE__ */
|
|
22226
22364
|
jsx3('img', {
|
|
22227
|
-
ref:
|
|
22228
|
-
decoding
|
|
22365
|
+
ref: onImageMount,
|
|
22366
|
+
decoding,
|
|
22229
22367
|
fetchPriority: image.fetchPriority,
|
|
22230
22368
|
loading: image.loading,
|
|
22231
22369
|
width: image.pixelWidth,
|
|
@@ -22233,6 +22371,7 @@ function StaticImage({ image, containerSize, nodeId, alt, draggable, syncDecodin
|
|
|
22233
22371
|
sizes: image.sizes,
|
|
22234
22372
|
srcSet: image.srcSet,
|
|
22235
22373
|
src: source,
|
|
22374
|
+
onLoad: onImageLoad,
|
|
22236
22375
|
alt: alt ?? image.alt ?? '',
|
|
22237
22376
|
style: imageStyle,
|
|
22238
22377
|
draggable,
|
|
@@ -22310,7 +22449,7 @@ function BackgroundImageComponent({ layoutId, image, ...props }) {
|
|
|
22310
22449
|
else if (RenderTarget.current() !== RenderTarget.canvas) {
|
|
22311
22450
|
imageNode = /* @__PURE__ */ jsx3(StaticImage, {
|
|
22312
22451
|
image,
|
|
22313
|
-
|
|
22452
|
+
avoidAsyncDecoding: RenderTarget.current() === RenderTarget.export,
|
|
22314
22453
|
...props,
|
|
22315
22454
|
});
|
|
22316
22455
|
}
|
|
@@ -22458,24 +22597,10 @@ function getIntrinsicSizeForBackgroundImage(background) {
|
|
|
22458
22597
|
height: background.pixelHeight,
|
|
22459
22598
|
};
|
|
22460
22599
|
}
|
|
22461
|
-
|
|
22462
|
-
}
|
|
22463
|
-
function parseImageSizeFromSrc(src) {
|
|
22464
|
-
if (!src)
|
|
22465
|
-
return void 0;
|
|
22466
|
-
let url;
|
|
22467
|
-
try {
|
|
22468
|
-
url = new URL(src);
|
|
22469
|
-
}
|
|
22470
|
-
catch {
|
|
22471
|
-
return void 0;
|
|
22472
|
-
}
|
|
22473
|
-
const width = url.searchParams.get('width');
|
|
22474
|
-
const height = url.searchParams.get('height');
|
|
22475
|
-
if (width && height) {
|
|
22600
|
+
if (background.src === void 0) {
|
|
22476
22601
|
return {
|
|
22477
|
-
width:
|
|
22478
|
-
height:
|
|
22602
|
+
width: 1,
|
|
22603
|
+
height: 1,
|
|
22479
22604
|
};
|
|
22480
22605
|
}
|
|
22481
22606
|
return void 0;
|
|
@@ -22790,7 +22915,7 @@ function useMeasuredSize(ref) {
|
|
|
22790
22915
|
return size.current;
|
|
22791
22916
|
}
|
|
22792
22917
|
var SIZE_COMPATIBILITY_WRAPPER_ATTRIBUTE = 'data-framer-size-compatibility-wrapper';
|
|
22793
|
-
var withMeasuredSize = (
|
|
22918
|
+
var withMeasuredSize = (Component18) => (props) => {
|
|
22794
22919
|
const ref = React4.useRef(null);
|
|
22795
22920
|
const size = useMeasuredSize(ref);
|
|
22796
22921
|
const dataProps = {
|
|
@@ -22807,7 +22932,7 @@ var withMeasuredSize = (Component17) => (props) => {
|
|
|
22807
22932
|
},
|
|
22808
22933
|
ref,
|
|
22809
22934
|
...dataProps,
|
|
22810
|
-
children: shouldRender && /* @__PURE__ */ jsx3(
|
|
22935
|
+
children: shouldRender && /* @__PURE__ */ jsx3(Component18, {
|
|
22811
22936
|
...props,
|
|
22812
22937
|
width: (size == null ? void 0 : size.width) ?? fallbackWidth,
|
|
22813
22938
|
height: (size == null ? void 0 : size.height) ?? fallbackHeight,
|
|
@@ -25727,7 +25852,7 @@ var clamp2 = (value, a, b) => {
|
|
|
25727
25852
|
var DraggingContext = /* @__PURE__ */ React4.createContext({
|
|
25728
25853
|
dragging: false,
|
|
25729
25854
|
});
|
|
25730
|
-
function WithDragging(
|
|
25855
|
+
function WithDragging(Component18) {
|
|
25731
25856
|
const _WithDraggingHOC = class _WithDraggingHOC2 extends React4.Component {
|
|
25732
25857
|
constructor(props, defaultProps) {
|
|
25733
25858
|
super(props, defaultProps);
|
|
@@ -26297,7 +26422,7 @@ function WithDragging(Component17) {
|
|
|
26297
26422
|
value: {
|
|
26298
26423
|
dragging: this.state.isDragging,
|
|
26299
26424
|
},
|
|
26300
|
-
children: /* @__PURE__ */ jsx3(
|
|
26425
|
+
children: /* @__PURE__ */ jsx3(Component18, {
|
|
26301
26426
|
...originalProps,
|
|
26302
26427
|
}),
|
|
26303
26428
|
});
|
|
@@ -26334,10 +26459,10 @@ function WithDragging(Component17) {
|
|
|
26334
26459
|
constraints: {},
|
|
26335
26460
|
mouseWheel: false,
|
|
26336
26461
|
});
|
|
26337
|
-
__publicField(_WithDraggingHOC, 'defaultProps', Object.assign({},
|
|
26462
|
+
__publicField(_WithDraggingHOC, 'defaultProps', Object.assign({}, Component18.defaultProps, _WithDraggingHOC.draggingDefaultProps));
|
|
26338
26463
|
let WithDraggingHOC = _WithDraggingHOC;
|
|
26339
26464
|
const withDragging = WithDraggingHOC;
|
|
26340
|
-
(0, import_hoist_non_react_statics2.default)(withDragging,
|
|
26465
|
+
(0, import_hoist_non_react_statics2.default)(withDragging, Component18);
|
|
26341
26466
|
return withDragging;
|
|
26342
26467
|
}
|
|
26343
26468
|
var hoverProps = {
|
|
@@ -27603,7 +27728,7 @@ function useInfiniteScroll({ ref: observerRef, loadMore, rootMargin = '0px', pag
|
|
|
27603
27728
|
enabled: paginationInfo.currentPage < paginationInfo.totalPages,
|
|
27604
27729
|
});
|
|
27605
27730
|
}
|
|
27606
|
-
function withInfiniteScroll(
|
|
27731
|
+
function withInfiniteScroll(Component18) {
|
|
27607
27732
|
return React4.forwardRef(({ __paginationInfo, __loadMore, ...props }, ref) => {
|
|
27608
27733
|
const infiniteScrollRef = useObserverRef(ref);
|
|
27609
27734
|
useInfiniteScroll({
|
|
@@ -27612,7 +27737,7 @@ function withInfiniteScroll(Component17) {
|
|
|
27612
27737
|
ref: infiniteScrollRef,
|
|
27613
27738
|
paginationInfo: __paginationInfo,
|
|
27614
27739
|
});
|
|
27615
|
-
return /* @__PURE__ */ jsx3(
|
|
27740
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
27616
27741
|
...props,
|
|
27617
27742
|
ref: infiniteScrollRef,
|
|
27618
27743
|
});
|
|
@@ -30351,20 +30476,20 @@ function convertColorProps(props) {
|
|
|
30351
30476
|
}
|
|
30352
30477
|
return props;
|
|
30353
30478
|
}
|
|
30354
|
-
function WithOverride(
|
|
30479
|
+
function WithOverride(Component18, override) {
|
|
30355
30480
|
const useOverride = typeof override === 'function' ? (props) => override(convertColorProps(props)) : () => convertColorProps(override);
|
|
30356
30481
|
const ComponentWithOverride = function (props) {
|
|
30357
30482
|
useContext(DataObserverContext);
|
|
30358
30483
|
const overrideProps = useOverride(props);
|
|
30359
30484
|
const { style: style2, ...rest } = props;
|
|
30360
|
-
return /* @__PURE__ */ jsx3(
|
|
30485
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
30361
30486
|
...rest,
|
|
30362
30487
|
...overrideProps,
|
|
30363
30488
|
_initialStyle: style2,
|
|
30364
30489
|
});
|
|
30365
30490
|
};
|
|
30366
|
-
(0, import_hoist_non_react_statics4.default)(ComponentWithOverride,
|
|
30367
|
-
ComponentWithOverride['displayName'] = `WithOverride(${
|
|
30491
|
+
(0, import_hoist_non_react_statics4.default)(ComponentWithOverride, Component18);
|
|
30492
|
+
ComponentWithOverride['displayName'] = `WithOverride(${Component18.displayName || Component18.name})`;
|
|
30368
30493
|
return ComponentWithOverride;
|
|
30369
30494
|
}
|
|
30370
30495
|
var prefix = '__framer__';
|
|
@@ -30502,30 +30627,14 @@ var componentsWithServerRenderedStyles = /* @__PURE__ */ (() => {
|
|
|
30502
30627
|
return new Set(componentsWithSSRStylesAttr.split(' '));
|
|
30503
30628
|
})();
|
|
30504
30629
|
var framerCSSMarker = 'data-framer-css-ssr';
|
|
30505
|
-
var withCSS = (
|
|
30630
|
+
var withCSS = (Component18, escapedCSS, componentSerializationId) => React4.forwardRef((props, ref) => {
|
|
30506
30631
|
const { sheet, cache: cache2, } = React4.useContext(StyleSheetContext) ?? {};
|
|
30507
30632
|
const id3 = componentSerializationId;
|
|
30508
30633
|
if (!isBrowser2()) {
|
|
30509
30634
|
if (isFunction(escapedCSS))
|
|
30510
30635
|
escapedCSS = escapedCSS(RenderTarget.current());
|
|
30511
30636
|
const concatenatedCSS = Array.isArray(escapedCSS) ? escapedCSS.join('\n') : escapedCSS;
|
|
30512
|
-
|
|
30513
|
-
children: [
|
|
30514
|
-
/* @__PURE__ */ jsx3('style', {
|
|
30515
|
-
...{
|
|
30516
|
-
[framerCSSMarker]: true,
|
|
30517
|
-
},
|
|
30518
|
-
'data-framer-component': id3,
|
|
30519
|
-
dangerouslySetInnerHTML: {
|
|
30520
|
-
__html: concatenatedCSS,
|
|
30521
|
-
},
|
|
30522
|
-
}),
|
|
30523
|
-
/* @__PURE__ */ jsx3(Component17, {
|
|
30524
|
-
...props,
|
|
30525
|
-
ref,
|
|
30526
|
-
}),
|
|
30527
|
-
],
|
|
30528
|
-
});
|
|
30637
|
+
cssCollector.add(concatenatedCSS, id3);
|
|
30529
30638
|
}
|
|
30530
30639
|
useInsertionEffect(() => {
|
|
30531
30640
|
if (id3 && componentsWithServerRenderedStyles.has(id3))
|
|
@@ -30537,11 +30646,33 @@ var withCSS = (Component17, escapedCSS, componentSerializationId) => React4.forw
|
|
|
30537
30646
|
: escapedCSS.split('\n');
|
|
30538
30647
|
css22.forEach((rule) => rule && injectCSSRule(rule, sheet, cache2));
|
|
30539
30648
|
}, []);
|
|
30540
|
-
return /* @__PURE__ */ jsx3(
|
|
30649
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
30541
30650
|
...props,
|
|
30542
30651
|
ref,
|
|
30543
30652
|
});
|
|
30544
30653
|
});
|
|
30654
|
+
var CSSCollector = class {
|
|
30655
|
+
constructor() {
|
|
30656
|
+
__publicField(this, 'styles', /* @__PURE__ */ new Set());
|
|
30657
|
+
__publicField(this, 'componentIds', /* @__PURE__ */ new Set());
|
|
30658
|
+
}
|
|
30659
|
+
add(css22, componentId) {
|
|
30660
|
+
this.styles.add(css22);
|
|
30661
|
+
if (componentId)
|
|
30662
|
+
this.componentIds.add(componentId);
|
|
30663
|
+
}
|
|
30664
|
+
getStyles() {
|
|
30665
|
+
return this.styles;
|
|
30666
|
+
}
|
|
30667
|
+
getComponentIds() {
|
|
30668
|
+
return this.componentIds;
|
|
30669
|
+
}
|
|
30670
|
+
clear() {
|
|
30671
|
+
this.styles.clear();
|
|
30672
|
+
this.componentIds.clear();
|
|
30673
|
+
}
|
|
30674
|
+
};
|
|
30675
|
+
var cssCollector = /* @__PURE__ */ new CSSCollector();
|
|
30545
30676
|
var SSRParentVariantsContext = /* @__PURE__ */ React4.createContext(void 0);
|
|
30546
30677
|
var SSRVariantClassName = 'ssr-variant';
|
|
30547
30678
|
function renderBranchedChildrenFromPropertyOverrides(overrides, children, props, variantClassNames, primaryVariantId, parentVariants, cloneChildren, activeVariantId) {
|
|
@@ -30789,7 +30920,7 @@ var AnimationCollector = class {
|
|
|
30789
30920
|
};
|
|
30790
30921
|
_variantHashes = /* @__PURE__ */ new WeakMap();
|
|
30791
30922
|
var framerAppearEffects = /* @__PURE__ */ new AnimationCollector();
|
|
30792
|
-
function withOptimizedAppearEffect(
|
|
30923
|
+
function withOptimizedAppearEffect(Component18) {
|
|
30793
30924
|
return React4.forwardRef(({ optimized, ...props }, ref) => {
|
|
30794
30925
|
var _a;
|
|
30795
30926
|
const generatedComponentContext = React4.useContext(GeneratedComponentContext);
|
|
@@ -30805,7 +30936,7 @@ function withOptimizedAppearEffect(Component17) {
|
|
|
30805
30936
|
optimized ? props : null, generatedComponentContext);
|
|
30806
30937
|
}
|
|
30807
30938
|
const disabledProps = getDisabledFXPropsInStaticRenderer(props);
|
|
30808
|
-
return /* @__PURE__ */ jsx3(
|
|
30939
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
30809
30940
|
ref,
|
|
30810
30941
|
...props,
|
|
30811
30942
|
...disabledProps,
|
|
@@ -31105,8 +31236,11 @@ function useParallax(options, ref, visibilityStyle) {
|
|
|
31105
31236
|
: effectDisabledStyle,
|
|
31106
31237
|
};
|
|
31107
31238
|
}
|
|
31239
|
+
function isTargetAndTransition(value) {
|
|
31240
|
+
return typeof value === 'object' && value !== null;
|
|
31241
|
+
}
|
|
31108
31242
|
function getTransition(value) {
|
|
31109
|
-
if (
|
|
31243
|
+
if (!isTargetAndTransition(value))
|
|
31110
31244
|
return void 0;
|
|
31111
31245
|
return value == null ? void 0 : value.transition;
|
|
31112
31246
|
}
|
|
@@ -31118,7 +31252,9 @@ function runEffectAnimation(target, effect, shouldReduceMotion, ref, appearId, i
|
|
|
31118
31252
|
return resolve();
|
|
31119
31253
|
const motionValue2 = effect.values[key7];
|
|
31120
31254
|
motionValue2.stop();
|
|
31121
|
-
let value = !
|
|
31255
|
+
let value = !isTargetAndTransition(target)
|
|
31256
|
+
? defaultFXValues[key7]
|
|
31257
|
+
: (target == null ? void 0 : target[key7]) ?? defaultFXValues[key7];
|
|
31122
31258
|
if (isMotionValue(value))
|
|
31123
31259
|
value = value.get();
|
|
31124
31260
|
if (!isNumber2(value))
|
|
@@ -31736,10 +31872,10 @@ function addMotionValueStyle(style2, values) {
|
|
|
31736
31872
|
function isVariantOrVariantList2(value) {
|
|
31737
31873
|
return isString(value) || Array.isArray(value);
|
|
31738
31874
|
}
|
|
31739
|
-
var withFX = (
|
|
31875
|
+
var withFX = (Component18) => React4.forwardRef((props, forwardedRef) => {
|
|
31740
31876
|
var _a;
|
|
31741
31877
|
if (props.__withFX) {
|
|
31742
|
-
return /* @__PURE__ */ jsx3(
|
|
31878
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
31743
31879
|
...props,
|
|
31744
31880
|
animate: void 0,
|
|
31745
31881
|
initial: void 0,
|
|
@@ -31749,7 +31885,7 @@ var withFX = (Component17) => React4.forwardRef((props, forwardedRef) => {
|
|
|
31749
31885
|
}
|
|
31750
31886
|
const disabledProps = getDisabledFXPropsInStaticRenderer(props);
|
|
31751
31887
|
if (disabledProps) {
|
|
31752
|
-
return /* @__PURE__ */ jsx3(
|
|
31888
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
31753
31889
|
...props,
|
|
31754
31890
|
...disabledProps,
|
|
31755
31891
|
ref: forwardedRef,
|
|
@@ -31817,7 +31953,7 @@ var withFX = (Component17) => React4.forwardRef((props, forwardedRef) => {
|
|
|
31817
31953
|
exit,
|
|
31818
31954
|
}
|
|
31819
31955
|
: {};
|
|
31820
|
-
return /* @__PURE__ */ jsx3(
|
|
31956
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
31821
31957
|
...forwardedProps,
|
|
31822
31958
|
...motionGestures,
|
|
31823
31959
|
__withFX: true,
|
|
@@ -31870,9 +32006,9 @@ var ComponentViewportProvider = /* @__PURE__ */ React4.forwardRef(function Compo
|
|
|
31870
32006
|
children: cloneWithPropsAndRef(children, rest),
|
|
31871
32007
|
});
|
|
31872
32008
|
});
|
|
31873
|
-
var withGeneratedLayoutId = (
|
|
32009
|
+
var withGeneratedLayoutId = (Component18) => React4.forwardRef((props, ref) => {
|
|
31874
32010
|
const layoutId = useLayoutId2(props);
|
|
31875
|
-
return /* @__PURE__ */ jsx3(
|
|
32011
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
31876
32012
|
layoutId,
|
|
31877
32013
|
...props,
|
|
31878
32014
|
layoutIdKey: void 0,
|
|
@@ -31902,7 +32038,7 @@ var SynchronousSuspenseErrorBoundary = class extends Component2 {
|
|
|
31902
32038
|
if (!isSuspense426Error(error))
|
|
31903
32039
|
return;
|
|
31904
32040
|
const componentStack = errorInfo == null ? void 0 : errorInfo.componentStack;
|
|
31905
|
-
console.error('Caught an error in SynchronousSuspenseErrorBoundary:\n\n', error, '\n\nComponent stack:\n', componentStack, '\n\nThis error indicates a state update wasn\u2019t wrapped with startTransition
|
|
32041
|
+
console.error('Caught an error in SynchronousSuspenseErrorBoundary:\n\n', error, '\n\nComponent stack:\n', componentStack, '\n\nThis error indicates a state update wasn\u2019t wrapped with `startTransition`. Some of the UI might flash as a result. If you are the author of this website, update external components and check recently added custom code or code overrides. In case the issue persists, report it to the Framer team via https://www.framer.com/contact/.');
|
|
31906
32042
|
const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : void 0;
|
|
31907
32043
|
sendTrackingEvent('published_site_load_recoverable_error', {
|
|
31908
32044
|
message: String(error),
|
|
@@ -32201,10 +32337,10 @@ var SmartComponentScopedContainer = /* @__PURE__ */ React4.forwardRef((props, re
|
|
|
32201
32337
|
const childrenWithCodeBoundary = useMaybeWrapComponentWithCodeBoundary(children, scopeId, nodeId, isAuthoredByUser, isModuleExternal, inComponentSlot);
|
|
32202
32338
|
const tagName = props.as ?? 'div';
|
|
32203
32339
|
if (props.rendersWithMotion) {
|
|
32204
|
-
const
|
|
32340
|
+
const Component18 = htmlElementAsMotionComponent(tagName);
|
|
32205
32341
|
return /* @__PURE__ */ jsx3(NodeIdContext.Provider, {
|
|
32206
32342
|
value: nodeId ?? null,
|
|
32207
|
-
children: /* @__PURE__ */ jsx3(
|
|
32343
|
+
children: /* @__PURE__ */ jsx3(Component18, {
|
|
32208
32344
|
...otherProps,
|
|
32209
32345
|
ref,
|
|
32210
32346
|
style: props.style,
|
|
@@ -32213,11 +32349,11 @@ var SmartComponentScopedContainer = /* @__PURE__ */ React4.forwardRef((props, re
|
|
|
32213
32349
|
});
|
|
32214
32350
|
}
|
|
32215
32351
|
else {
|
|
32216
|
-
const
|
|
32352
|
+
const Component18 = tagName;
|
|
32217
32353
|
const { layoutId, layoutDependency, ...plainHTMLRenderableProps } = otherProps;
|
|
32218
32354
|
return /* @__PURE__ */ jsx3(NodeIdContext.Provider, {
|
|
32219
32355
|
value: nodeId ?? null,
|
|
32220
|
-
children: /* @__PURE__ */ jsx3(
|
|
32356
|
+
children: /* @__PURE__ */ jsx3(Component18, {
|
|
32221
32357
|
...plainHTMLRenderableProps,
|
|
32222
32358
|
ref,
|
|
32223
32359
|
style: props.style,
|
|
@@ -32516,6 +32652,340 @@ function useCustomCursors(webPageCursors) {
|
|
|
32516
32652
|
return registerCursors(cursors, id3);
|
|
32517
32653
|
}, [registerCursors, id3,]);
|
|
32518
32654
|
}
|
|
32655
|
+
var linkKey = 'webPageId';
|
|
32656
|
+
function isLinkToWebPage(link) {
|
|
32657
|
+
return Boolean(link && typeof link === 'object' && linkKey in link);
|
|
32658
|
+
}
|
|
32659
|
+
function linkInfoKey(link) {
|
|
32660
|
+
var _a, _b;
|
|
32661
|
+
return `${link.scopeId}:${link.nodeId}:${(_a = link.furthestExternalComponent) == null ? void 0 : _a.scopeId}:${(_b = link.furthestExternalComponent) == null ? void 0 : _b.nodeId}`;
|
|
32662
|
+
}
|
|
32663
|
+
var NestedLinksCollector = class {
|
|
32664
|
+
constructor() {
|
|
32665
|
+
__publicField(this, 'collectedLinks', /* @__PURE__ */ new Map());
|
|
32666
|
+
__publicField(this, 'nestingInfo', /* @__PURE__ */ new Map());
|
|
32667
|
+
}
|
|
32668
|
+
clear() {
|
|
32669
|
+
this.collectedLinks.clear();
|
|
32670
|
+
this.nestingInfo.clear();
|
|
32671
|
+
}
|
|
32672
|
+
/**
|
|
32673
|
+
* Returns a Map of outer links to their inner links.
|
|
32674
|
+
*
|
|
32675
|
+
* NOTE: This function is called in the SSG renderer sandbox (<root>/src/ssg/src/ssg-sandbox-renderer/sandbox/worker/renderer.ts)
|
|
32676
|
+
*/
|
|
32677
|
+
getLinks() {
|
|
32678
|
+
const result = /* @__PURE__ */ new Map();
|
|
32679
|
+
for (const [outerLinkKey, innerLinkKeys,] of this.nestingInfo) {
|
|
32680
|
+
const outerLinkInfo = this.collectedLinks.get(outerLinkKey);
|
|
32681
|
+
assert(outerLinkInfo, `Outer link not found: ${outerLinkKey}`);
|
|
32682
|
+
const links = Array.from(innerLinkKeys).map((innerLinkKey) => {
|
|
32683
|
+
const innerLinkInfo = this.collectedLinks.get(innerLinkKey);
|
|
32684
|
+
assert(innerLinkInfo, `Inner link not found: ${innerLinkKey}`);
|
|
32685
|
+
return innerLinkInfo;
|
|
32686
|
+
});
|
|
32687
|
+
result.set(outerLinkInfo, links);
|
|
32688
|
+
}
|
|
32689
|
+
return result;
|
|
32690
|
+
}
|
|
32691
|
+
collectNestedLink(outerLink, innerLink) {
|
|
32692
|
+
if (isWindow && !isTest() || !outerLink.nodeId || !innerLink.nodeId) {
|
|
32693
|
+
return;
|
|
32694
|
+
}
|
|
32695
|
+
this.collectedLinks.set(linkInfoKey(outerLink), outerLink);
|
|
32696
|
+
this.collectedLinks.set(linkInfoKey(innerLink), innerLink);
|
|
32697
|
+
const outerLinkNestingInfo = this.nestingInfo.get(linkInfoKey(outerLink)) ?? /* @__PURE__ */ new Set();
|
|
32698
|
+
outerLinkNestingInfo.add(linkInfoKey(innerLink));
|
|
32699
|
+
this.nestingInfo.set(linkInfoKey(outerLink), outerLinkNestingInfo);
|
|
32700
|
+
}
|
|
32701
|
+
};
|
|
32702
|
+
var nestedLinksCollector = /* @__PURE__ */ new NestedLinksCollector();
|
|
32703
|
+
function useIsOnFramerCanvas() {
|
|
32704
|
+
return RenderTarget.current() === RenderTarget.canvas;
|
|
32705
|
+
}
|
|
32706
|
+
function isInternalURL(href) {
|
|
32707
|
+
if (href === void 0)
|
|
32708
|
+
return false;
|
|
32709
|
+
if (href.startsWith('#') || href.startsWith('/') || href.startsWith('.'))
|
|
32710
|
+
return true;
|
|
32711
|
+
return false;
|
|
32712
|
+
}
|
|
32713
|
+
function isValidURL(href, isInternal) {
|
|
32714
|
+
try {
|
|
32715
|
+
const url = new URL(href);
|
|
32716
|
+
return Boolean(url.protocol);
|
|
32717
|
+
}
|
|
32718
|
+
catch { }
|
|
32719
|
+
return isInternal;
|
|
32720
|
+
}
|
|
32721
|
+
function getRouteFromPageLink(pageLink, router, currentRoute) {
|
|
32722
|
+
var _a;
|
|
32723
|
+
if (isString(pageLink)) {
|
|
32724
|
+
const isInternal = isInternalURL(pageLink);
|
|
32725
|
+
if (!router.routes || !router.getRoute || !currentRoute || !isInternal) {
|
|
32726
|
+
return;
|
|
32727
|
+
}
|
|
32728
|
+
const [pathnameWithQueryParams,] = pageLink.split('#', 2);
|
|
32729
|
+
if (pathnameWithQueryParams === void 0)
|
|
32730
|
+
return;
|
|
32731
|
+
const [pathname,] = pathnameWithQueryParams.split('?', 2);
|
|
32732
|
+
if (pathname === void 0)
|
|
32733
|
+
return;
|
|
32734
|
+
const { routeId, } = inferInitialRouteFromPath(router.routes, pathname);
|
|
32735
|
+
return router.getRoute(routeId);
|
|
32736
|
+
}
|
|
32737
|
+
const { webPageId, } = pageLink;
|
|
32738
|
+
return (_a = router.getRoute) == null ? void 0 : _a.call(router, webPageId);
|
|
32739
|
+
}
|
|
32740
|
+
var elementKey = 'element';
|
|
32741
|
+
var collectionKey = 'collection';
|
|
32742
|
+
var collectionItemIdKey = 'collectionItemId';
|
|
32743
|
+
var pathVariablesKey = 'pathVariables';
|
|
32744
|
+
var mediaType = 'framer/page-link,';
|
|
32745
|
+
function isFramerPageLink(value) {
|
|
32746
|
+
return isString(value) && value.startsWith(`data:${mediaType}`);
|
|
32747
|
+
}
|
|
32748
|
+
function createFramerPageLink(targetId = null, options = {}) {
|
|
32749
|
+
const target = targetId ? targetId : 'none';
|
|
32750
|
+
const link = new URL(`data:${mediaType}${target}`);
|
|
32751
|
+
if (options.element) {
|
|
32752
|
+
link.searchParams.append(elementKey, options.element);
|
|
32753
|
+
}
|
|
32754
|
+
if (options.collectionItem) {
|
|
32755
|
+
link.searchParams.append(collectionKey, options.collectionItem.collection);
|
|
32756
|
+
link.searchParams.append(collectionItemIdKey, options.collectionItem.collectionItemId);
|
|
32757
|
+
link.searchParams.append(pathVariablesKey, new URLSearchParams(options.collectionItem.pathVariables).toString());
|
|
32758
|
+
}
|
|
32759
|
+
return link.href;
|
|
32760
|
+
}
|
|
32761
|
+
function parseFramerPageLink(link) {
|
|
32762
|
+
if (!isFramerPageLink(link))
|
|
32763
|
+
return;
|
|
32764
|
+
try {
|
|
32765
|
+
const url = new URL(link);
|
|
32766
|
+
const target = url.pathname.substring(mediaType.length);
|
|
32767
|
+
const searchParams = url.searchParams;
|
|
32768
|
+
const element = searchParams.has(elementKey) ? searchParams.get(elementKey) : void 0;
|
|
32769
|
+
let collectionItem;
|
|
32770
|
+
const collection = searchParams.get(collectionKey);
|
|
32771
|
+
const collectionItemId = searchParams.get(collectionItemIdKey);
|
|
32772
|
+
const pathVariablesValue = searchParams.get(pathVariablesKey);
|
|
32773
|
+
if (collection && collectionItemId && pathVariablesValue) {
|
|
32774
|
+
const pathVariables = Object.fromEntries(new URLSearchParams(pathVariablesValue).entries());
|
|
32775
|
+
collectionItem = {
|
|
32776
|
+
collection,
|
|
32777
|
+
collectionItemId,
|
|
32778
|
+
pathVariables,
|
|
32779
|
+
};
|
|
32780
|
+
}
|
|
32781
|
+
return {
|
|
32782
|
+
target: target === 'none' ? null : target,
|
|
32783
|
+
/**
|
|
32784
|
+
* For historical reason we used to set "element=none" into the
|
|
32785
|
+
* datalink, we no longer do that today, but we still keep this code
|
|
32786
|
+
* so we could parse legacy links correctly.
|
|
32787
|
+
*/
|
|
32788
|
+
element: element === 'none' ? void 0 : element,
|
|
32789
|
+
collectionItem,
|
|
32790
|
+
};
|
|
32791
|
+
}
|
|
32792
|
+
catch {
|
|
32793
|
+
return;
|
|
32794
|
+
}
|
|
32795
|
+
}
|
|
32796
|
+
function shouldOpenLinkInNewTab(link) {
|
|
32797
|
+
return !isFramerPageLink(link);
|
|
32798
|
+
}
|
|
32799
|
+
function navigateFromAttributes(navigate, element, implicitPathVariables) {
|
|
32800
|
+
var _a;
|
|
32801
|
+
let routeId = element.getAttribute('data-framer-page-link-target');
|
|
32802
|
+
let elementId;
|
|
32803
|
+
let pathVariables;
|
|
32804
|
+
if (routeId) {
|
|
32805
|
+
elementId = element.getAttribute('data-framer-page-link-element') ?? void 0;
|
|
32806
|
+
const pathVariablesRaw = element.getAttribute('data-framer-page-link-path-variables');
|
|
32807
|
+
if (pathVariablesRaw) {
|
|
32808
|
+
pathVariables = Object.fromEntries(new URLSearchParams(pathVariablesRaw).entries());
|
|
32809
|
+
}
|
|
32810
|
+
}
|
|
32811
|
+
else {
|
|
32812
|
+
const href = element.getAttribute('href');
|
|
32813
|
+
if (!href)
|
|
32814
|
+
return false;
|
|
32815
|
+
const link = parseFramerPageLink(href);
|
|
32816
|
+
if (!link || !link.target)
|
|
32817
|
+
return false;
|
|
32818
|
+
routeId = link.target;
|
|
32819
|
+
elementId = link.element ?? void 0;
|
|
32820
|
+
pathVariables = (_a = link.collectionItem) == null ? void 0 : _a.pathVariables;
|
|
32821
|
+
}
|
|
32822
|
+
const smoothScroll = elementId ? element.dataset.framerSmoothScroll !== void 0 : void 0;
|
|
32823
|
+
navigate(routeId, elementId, Object.assign({}, implicitPathVariables, pathVariables), smoothScroll);
|
|
32824
|
+
return true;
|
|
32825
|
+
}
|
|
32826
|
+
function linkFromFramerPageLink(link) {
|
|
32827
|
+
if (!isFramerPageLink(link))
|
|
32828
|
+
return link;
|
|
32829
|
+
const parsed = parseFramerPageLink(link);
|
|
32830
|
+
if (!parsed)
|
|
32831
|
+
return void 0;
|
|
32832
|
+
const { target, element, collectionItem, } = parsed;
|
|
32833
|
+
if (!target)
|
|
32834
|
+
return void 0;
|
|
32835
|
+
return {
|
|
32836
|
+
webPageId: target,
|
|
32837
|
+
hash: element ?? void 0,
|
|
32838
|
+
pathVariables: createVariablesFromPageLinkCollectionItem(collectionItem),
|
|
32839
|
+
};
|
|
32840
|
+
}
|
|
32841
|
+
function createVariablesFromPageLinkCollectionItem(collectionItem) {
|
|
32842
|
+
if (!collectionItem)
|
|
32843
|
+
return void 0;
|
|
32844
|
+
const variables = {};
|
|
32845
|
+
for (const pathVariablesKey2 in collectionItem.pathVariables) {
|
|
32846
|
+
const value = collectionItem.pathVariables[pathVariablesKey2];
|
|
32847
|
+
if (value)
|
|
32848
|
+
variables[pathVariablesKey2] = value;
|
|
32849
|
+
}
|
|
32850
|
+
return variables;
|
|
32851
|
+
}
|
|
32852
|
+
var OuterLinkContext = /* @__PURE__ */ createContext(void 0);
|
|
32853
|
+
function ResetOuterLinkContext({ children, }) {
|
|
32854
|
+
return /* @__PURE__ */ jsx3(OuterLinkContext.Provider, {
|
|
32855
|
+
value: void 0,
|
|
32856
|
+
children,
|
|
32857
|
+
});
|
|
32858
|
+
}
|
|
32859
|
+
function useReplaceNestedLinks(children, scopeId, nodeId, href, propsAddedByLink, observerRef) {
|
|
32860
|
+
const outerLink = useContext(OuterLinkContext);
|
|
32861
|
+
const furthestExternalComponent = useFurthestExternalComponent();
|
|
32862
|
+
const innerLink = useMemo2(() => ({
|
|
32863
|
+
scopeId,
|
|
32864
|
+
nodeId,
|
|
32865
|
+
furthestExternalComponent,
|
|
32866
|
+
}), [scopeId, nodeId, furthestExternalComponent,]);
|
|
32867
|
+
const router = useRouter();
|
|
32868
|
+
const currentRoute = useCurrentRoute();
|
|
32869
|
+
const route = useMemo2(() => {
|
|
32870
|
+
const pageLink = isLinkToWebPage(href) ? href : linkFromFramerPageLink(href);
|
|
32871
|
+
if (!pageLink)
|
|
32872
|
+
return;
|
|
32873
|
+
return getRouteFromPageLink(pageLink, router, currentRoute);
|
|
32874
|
+
}, [currentRoute, href, router,]);
|
|
32875
|
+
const isOnFramerCanvas = useIsOnFramerCanvas();
|
|
32876
|
+
const shouldReplaceLink = Boolean(!isOnFramerCanvas && (outerLink == null ? void 0 : outerLink.nodeId) && innerLink.nodeId);
|
|
32877
|
+
const onClick = useCallback((event) => {
|
|
32878
|
+
var _a;
|
|
32879
|
+
if (!propsAddedByLink.href)
|
|
32880
|
+
return;
|
|
32881
|
+
event.preventDefault();
|
|
32882
|
+
event.stopPropagation();
|
|
32883
|
+
const isAppleDevice = /Mac|iPod|iPhone|iPad/u.test(__unframerNavigator2.userAgent);
|
|
32884
|
+
if (isAppleDevice ? event.metaKey : event.ctrlKey) {
|
|
32885
|
+
openExternalLink(propsAddedByLink.href, '', '_blank');
|
|
32886
|
+
return;
|
|
32887
|
+
}
|
|
32888
|
+
if (route) {
|
|
32889
|
+
(_a = propsAddedByLink.navigate) == null ? void 0 : _a.call(propsAddedByLink);
|
|
32890
|
+
}
|
|
32891
|
+
else {
|
|
32892
|
+
openExternalLink(propsAddedByLink.href, propsAddedByLink.rel, propsAddedByLink.target);
|
|
32893
|
+
}
|
|
32894
|
+
}, [propsAddedByLink, route,]);
|
|
32895
|
+
const onAuxClick = useCallback((event) => {
|
|
32896
|
+
if (!propsAddedByLink.href)
|
|
32897
|
+
return;
|
|
32898
|
+
event.preventDefault();
|
|
32899
|
+
event.stopPropagation();
|
|
32900
|
+
openExternalLink(propsAddedByLink.href, '', '_blank');
|
|
32901
|
+
}, [propsAddedByLink,]);
|
|
32902
|
+
const onKeyDown = useCallback((event) => {
|
|
32903
|
+
var _a;
|
|
32904
|
+
if (!propsAddedByLink.href)
|
|
32905
|
+
return;
|
|
32906
|
+
if (event.key !== 'Enter')
|
|
32907
|
+
return;
|
|
32908
|
+
event.preventDefault();
|
|
32909
|
+
event.stopPropagation();
|
|
32910
|
+
if (route) {
|
|
32911
|
+
(_a = propsAddedByLink.navigate) == null ? void 0 : _a.call(propsAddedByLink);
|
|
32912
|
+
}
|
|
32913
|
+
else {
|
|
32914
|
+
openExternalLink(propsAddedByLink.href, propsAddedByLink.rel, propsAddedByLink.target);
|
|
32915
|
+
}
|
|
32916
|
+
}, [propsAddedByLink, route,]);
|
|
32917
|
+
useRefEffect(observerRef, (node) => {
|
|
32918
|
+
if (node === null)
|
|
32919
|
+
return;
|
|
32920
|
+
if (!shouldReplaceLink)
|
|
32921
|
+
return;
|
|
32922
|
+
node.dataset.hydrated = 'true';
|
|
32923
|
+
}, [shouldReplaceLink,]);
|
|
32924
|
+
let replacedChildren = children;
|
|
32925
|
+
if (shouldReplaceLink) {
|
|
32926
|
+
Children.forEach(children, (child) => {
|
|
32927
|
+
if (!isChildReplaceable(child))
|
|
32928
|
+
return;
|
|
32929
|
+
assert(linkInfoIsCollectable(outerLink), 'outerLink must have nodeId defined at this point; this was verified with `shouldReplaceLink` above');
|
|
32930
|
+
assert(linkInfoIsCollectable(innerLink), 'innerLink must have nodeId defined at this point; this was verified with `shouldReplaceLink` above');
|
|
32931
|
+
nestedLinksCollector.collectNestedLink(outerLink, innerLink);
|
|
32932
|
+
});
|
|
32933
|
+
replacedChildren = Children.map(children, (child) => {
|
|
32934
|
+
if (!isChildReplaceable(child))
|
|
32935
|
+
return child;
|
|
32936
|
+
const tag = maybeReplaceAnchorWithSpan(child.type);
|
|
32937
|
+
const { children: childChildren, ...childProps } = child.props;
|
|
32938
|
+
const props = {
|
|
32939
|
+
...childProps,
|
|
32940
|
+
// This attribute is used in `ssg/src/ssg-sandbox-renderer/worker/nestedLinks.ts` to handle the nested links clicks
|
|
32941
|
+
'data-nested-link': true,
|
|
32942
|
+
role: 'link',
|
|
32943
|
+
tabIndex: 0,
|
|
32944
|
+
onClick,
|
|
32945
|
+
onAuxClick,
|
|
32946
|
+
onKeyDown,
|
|
32947
|
+
as: childProps.as && maybeReplaceAnchorWithSpan(childProps.as),
|
|
32948
|
+
};
|
|
32949
|
+
const ref = 'ref' in child ? child.ref : void 0;
|
|
32950
|
+
return createElement(tag, // We need to pass the ref here again, otherwise it will be lost
|
|
32951
|
+
{
|
|
32952
|
+
...props,
|
|
32953
|
+
ref,
|
|
32954
|
+
}, childChildren);
|
|
32955
|
+
});
|
|
32956
|
+
}
|
|
32957
|
+
return /* @__PURE__ */ jsx3(OuterLinkContext.Provider, {
|
|
32958
|
+
value: innerLink,
|
|
32959
|
+
children: replacedChildren,
|
|
32960
|
+
});
|
|
32961
|
+
}
|
|
32962
|
+
function linkInfoIsCollectable(linkInfo) {
|
|
32963
|
+
return !isUndefined(linkInfo == null ? void 0 : linkInfo.nodeId);
|
|
32964
|
+
}
|
|
32965
|
+
function isChildReplaceable(child) {
|
|
32966
|
+
return isValidElement(child) &&
|
|
32967
|
+
(maybeReplaceAnchorWithSpan(child.type) !== child.type || maybeReplaceAnchorWithSpan(child.props.as) !== child.props.as);
|
|
32968
|
+
}
|
|
32969
|
+
function openExternalLink(href, rel, target) {
|
|
32970
|
+
const link = document.createElement('a');
|
|
32971
|
+
link.href = href;
|
|
32972
|
+
if (rel) {
|
|
32973
|
+
link.rel = rel;
|
|
32974
|
+
}
|
|
32975
|
+
if (target) {
|
|
32976
|
+
link.target = target;
|
|
32977
|
+
}
|
|
32978
|
+
document.body.appendChild(link);
|
|
32979
|
+
link.click();
|
|
32980
|
+
link.remove();
|
|
32981
|
+
}
|
|
32982
|
+
function maybeReplaceAnchorWithSpan(component) {
|
|
32983
|
+
if (component === 'a')
|
|
32984
|
+
return 'span';
|
|
32985
|
+
if (isMotionComponent(component) && unwrapMotionComponent(component) === 'a')
|
|
32986
|
+
return motion.span;
|
|
32987
|
+
return component;
|
|
32988
|
+
}
|
|
32519
32989
|
var Polygon = {
|
|
32520
32990
|
/**
|
|
32521
32991
|
* Determine if the vertices are ordered clockwise or counter-clockwise. This works for simple
|
|
@@ -33025,19 +33495,31 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
|
|
|
33025
33495
|
x: offsetX ?? 0,
|
|
33026
33496
|
y: offsetY ?? 0,
|
|
33027
33497
|
};
|
|
33028
|
-
let getSafePlacementRect;
|
|
33029
|
-
let position;
|
|
33030
33498
|
let cleanup;
|
|
33031
33499
|
let cleanupHasRun = false;
|
|
33032
33500
|
let initialUpdateHasRun = false;
|
|
33033
33501
|
let anchorRect;
|
|
33034
|
-
let elementRect;
|
|
33035
33502
|
let safePlacement;
|
|
33036
33503
|
let calculatedRect;
|
|
33037
33504
|
let latestEvent;
|
|
33038
33505
|
let updateSafeArea;
|
|
33039
33506
|
let scrollX = 0;
|
|
33040
33507
|
let scrollY = 0;
|
|
33508
|
+
const ancestorInfo = domReadGetAncestorInfo(anchorRef);
|
|
33509
|
+
const position = ancestorInfo.position;
|
|
33510
|
+
const elementRect = contentRef.current.getBoundingClientRect();
|
|
33511
|
+
const getSafePlacementRect = makeGetSafePlacementFloatingPositionRect({
|
|
33512
|
+
placement,
|
|
33513
|
+
alignment,
|
|
33514
|
+
offset,
|
|
33515
|
+
collisionDetectionSize: collisionDetection
|
|
33516
|
+
? {
|
|
33517
|
+
width: safeWindow.innerWidth,
|
|
33518
|
+
height: safeWindow.innerHeight,
|
|
33519
|
+
}
|
|
33520
|
+
: void 0,
|
|
33521
|
+
collisionDetectionPadding,
|
|
33522
|
+
});
|
|
33041
33523
|
const onRender = () => {
|
|
33042
33524
|
if (cleanupHasRun)
|
|
33043
33525
|
return;
|
|
@@ -33077,31 +33559,12 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
|
|
|
33077
33559
|
safePlacement = safePlacementAndRect[0];
|
|
33078
33560
|
calculatedRect = safePlacementAndRect[1];
|
|
33079
33561
|
};
|
|
33080
|
-
|
|
33081
|
-
|
|
33082
|
-
|
|
33083
|
-
|
|
33084
|
-
position = ancestorInfo.position;
|
|
33085
|
-
elementRect = contentRef.current.getBoundingClientRect();
|
|
33086
|
-
getSafePlacementRect = makeGetSafePlacementFloatingPositionRect({
|
|
33087
|
-
placement,
|
|
33088
|
-
alignment,
|
|
33089
|
-
offset,
|
|
33090
|
-
collisionDetectionSize: collisionDetection
|
|
33091
|
-
? {
|
|
33092
|
-
width: safeWindow.innerWidth,
|
|
33093
|
-
height: safeWindow.innerHeight,
|
|
33094
|
-
}
|
|
33095
|
-
: void 0,
|
|
33096
|
-
collisionDetectionPadding,
|
|
33097
|
-
});
|
|
33098
|
-
domReadUpdateSafePlacementAndRect();
|
|
33099
|
-
frame.update(onUpdate);
|
|
33100
|
-
frame.render(initialRender);
|
|
33101
|
-
if (!ancestorInfo.scrolls)
|
|
33102
|
-
return;
|
|
33562
|
+
domReadUpdateSafePlacementAndRect();
|
|
33563
|
+
onUpdate();
|
|
33564
|
+
initialRender();
|
|
33565
|
+
if (ancestorInfo.scrolls) {
|
|
33103
33566
|
cleanup = domReadStartAnimationFrameLoop(domReadUpdateSafePlacementAndRect);
|
|
33104
|
-
}
|
|
33567
|
+
}
|
|
33105
33568
|
if (!safeArea) {
|
|
33106
33569
|
return () => {
|
|
33107
33570
|
cleanup == null ? void 0 : cleanup();
|
|
@@ -33167,17 +33630,19 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
|
|
|
33167
33630
|
}),
|
|
33168
33631
|
/* @__PURE__ */ jsx3(FloatingStackingContext.Provider, {
|
|
33169
33632
|
value: descendantContext,
|
|
33170
|
-
children: /* @__PURE__ */ jsx3(
|
|
33171
|
-
|
|
33172
|
-
|
|
33633
|
+
children: /* @__PURE__ */ jsx3(ResetOuterLinkContext, {
|
|
33634
|
+
children: /* @__PURE__ */ jsx3('div', {
|
|
33635
|
+
ref: contentRef,
|
|
33636
|
+
children: childrenWithOrigin(children, origin),
|
|
33637
|
+
}),
|
|
33173
33638
|
}),
|
|
33174
33639
|
}),
|
|
33175
33640
|
],
|
|
33176
33641
|
}), getPortalContainer(portalSelector, inComponent));
|
|
33177
33642
|
}
|
|
33178
|
-
var Instance = /* @__PURE__ */ React4.forwardRef(function Instance2({ Component:
|
|
33179
|
-
return
|
|
33180
|
-
? /* @__PURE__ */ jsx3(
|
|
33643
|
+
var Instance = /* @__PURE__ */ React4.forwardRef(function Instance2({ Component: Component18, ...props }, ref) {
|
|
33644
|
+
return Component18
|
|
33645
|
+
? /* @__PURE__ */ jsx3(Component18, {
|
|
33181
33646
|
...props,
|
|
33182
33647
|
ref,
|
|
33183
33648
|
})
|
|
@@ -33328,20 +33793,16 @@ function ChildrenCanSuspend({ children, }) {
|
|
|
33328
33793
|
children,
|
|
33329
33794
|
});
|
|
33330
33795
|
}
|
|
33331
|
-
function withChildrenCanSuspend(
|
|
33796
|
+
function withChildrenCanSuspend(Component18) {
|
|
33332
33797
|
return forwardRef(function withChildrenCanSuspendInner(props, ref) {
|
|
33333
33798
|
return /* @__PURE__ */ jsx3(ChildrenCanSuspend, {
|
|
33334
|
-
children: /* @__PURE__ */ jsx3(
|
|
33799
|
+
children: /* @__PURE__ */ jsx3(Component18, {
|
|
33335
33800
|
...props,
|
|
33336
33801
|
ref,
|
|
33337
33802
|
}),
|
|
33338
33803
|
});
|
|
33339
33804
|
});
|
|
33340
33805
|
}
|
|
33341
|
-
var linkKey = 'webPageId';
|
|
33342
|
-
function isLinkToWebPage(link) {
|
|
33343
|
-
return Boolean(link && typeof link === 'object' && linkKey in link);
|
|
33344
|
-
}
|
|
33345
33806
|
var PRELOAD_AFTER_MS = 500;
|
|
33346
33807
|
var OBSERVER_THRESHOLD = 0.9;
|
|
33347
33808
|
var LOW_MEMORY_THRESHOLD = 1.7;
|
|
@@ -33527,21 +33988,6 @@ function resolveSlugsWithSuspense(unresolvedPathSlugs, unresolvedHashSlugs, coll
|
|
|
33527
33988
|
}
|
|
33528
33989
|
return result;
|
|
33529
33990
|
}
|
|
33530
|
-
function isInternalURL(href) {
|
|
33531
|
-
if (href === void 0)
|
|
33532
|
-
return false;
|
|
33533
|
-
if (href.startsWith('#') || href.startsWith('/') || href.startsWith('.'))
|
|
33534
|
-
return true;
|
|
33535
|
-
return false;
|
|
33536
|
-
}
|
|
33537
|
-
function isValidURL(href, isInternal) {
|
|
33538
|
-
try {
|
|
33539
|
-
const url = new URL(href);
|
|
33540
|
-
return Boolean(url.protocol);
|
|
33541
|
-
}
|
|
33542
|
-
catch { }
|
|
33543
|
-
return isInternal;
|
|
33544
|
-
}
|
|
33545
33991
|
async function findMatchingRouteAttributesForWebPageLink(router, currentRoute, pageLink, activeLocale, implicitPathVariables) {
|
|
33546
33992
|
const { webPageId, hash: hash2, pathVariables, hashVariables, unresolvedHashSlugs, unresolvedPathSlugs, } = pageLink;
|
|
33547
33993
|
const resolvedSlugs = await resolveSlugs(unresolvedPathSlugs, unresolvedHashSlugs, router.collectionUtils, activeLocale);
|
|
@@ -33613,137 +34059,6 @@ function getRouteAttributes(router, currentRoute, routeId, hash2, implicitPathVa
|
|
|
33613
34059
|
pathVariables: combinedPathVariables,
|
|
33614
34060
|
};
|
|
33615
34061
|
}
|
|
33616
|
-
function getRouteFromPageLink(pageLink, router, currentRoute) {
|
|
33617
|
-
var _a;
|
|
33618
|
-
if (isString(pageLink)) {
|
|
33619
|
-
const isInternal = isInternalURL(pageLink);
|
|
33620
|
-
if (!router.routes || !router.getRoute || !currentRoute || !isInternal) {
|
|
33621
|
-
return;
|
|
33622
|
-
}
|
|
33623
|
-
const [pathnameWithQueryParams,] = pageLink.split('#', 2);
|
|
33624
|
-
if (pathnameWithQueryParams === void 0)
|
|
33625
|
-
return;
|
|
33626
|
-
const [pathname,] = pathnameWithQueryParams.split('?', 2);
|
|
33627
|
-
if (pathname === void 0)
|
|
33628
|
-
return;
|
|
33629
|
-
const { routeId, } = inferInitialRouteFromPath(router.routes, pathname);
|
|
33630
|
-
return router.getRoute(routeId);
|
|
33631
|
-
}
|
|
33632
|
-
const { webPageId, } = pageLink;
|
|
33633
|
-
return (_a = router.getRoute) == null ? void 0 : _a.call(router, webPageId);
|
|
33634
|
-
}
|
|
33635
|
-
var elementKey = 'element';
|
|
33636
|
-
var collectionKey = 'collection';
|
|
33637
|
-
var collectionItemIdKey = 'collectionItemId';
|
|
33638
|
-
var pathVariablesKey = 'pathVariables';
|
|
33639
|
-
var mediaType = 'framer/page-link,';
|
|
33640
|
-
function isFramerPageLink(value) {
|
|
33641
|
-
return isString(value) && value.startsWith(`data:${mediaType}`);
|
|
33642
|
-
}
|
|
33643
|
-
function createFramerPageLink(targetId = null, options = {}) {
|
|
33644
|
-
const target = targetId ? targetId : 'none';
|
|
33645
|
-
const link = new URL(`data:${mediaType}${target}`);
|
|
33646
|
-
if (options.element) {
|
|
33647
|
-
link.searchParams.append(elementKey, options.element);
|
|
33648
|
-
}
|
|
33649
|
-
if (options.collectionItem) {
|
|
33650
|
-
link.searchParams.append(collectionKey, options.collectionItem.collection);
|
|
33651
|
-
link.searchParams.append(collectionItemIdKey, options.collectionItem.collectionItemId);
|
|
33652
|
-
link.searchParams.append(pathVariablesKey, new URLSearchParams(options.collectionItem.pathVariables).toString());
|
|
33653
|
-
}
|
|
33654
|
-
return link.href;
|
|
33655
|
-
}
|
|
33656
|
-
function parseFramerPageLink(link) {
|
|
33657
|
-
if (!isFramerPageLink(link))
|
|
33658
|
-
return;
|
|
33659
|
-
try {
|
|
33660
|
-
const url = new URL(link);
|
|
33661
|
-
const target = url.pathname.substring(mediaType.length);
|
|
33662
|
-
const searchParams = url.searchParams;
|
|
33663
|
-
const element = searchParams.has(elementKey) ? searchParams.get(elementKey) : void 0;
|
|
33664
|
-
let collectionItem;
|
|
33665
|
-
const collection = searchParams.get(collectionKey);
|
|
33666
|
-
const collectionItemId = searchParams.get(collectionItemIdKey);
|
|
33667
|
-
const pathVariablesValue = searchParams.get(pathVariablesKey);
|
|
33668
|
-
if (collection && collectionItemId && pathVariablesValue) {
|
|
33669
|
-
const pathVariables = Object.fromEntries(new URLSearchParams(pathVariablesValue).entries());
|
|
33670
|
-
collectionItem = {
|
|
33671
|
-
collection,
|
|
33672
|
-
collectionItemId,
|
|
33673
|
-
pathVariables,
|
|
33674
|
-
};
|
|
33675
|
-
}
|
|
33676
|
-
return {
|
|
33677
|
-
target: target === 'none' ? null : target,
|
|
33678
|
-
/**
|
|
33679
|
-
* For historical reason we used to set "element=none" into the
|
|
33680
|
-
* datalink, we no longer do that today, but we still keep this code
|
|
33681
|
-
* so we could parse legacy links correctly.
|
|
33682
|
-
*/
|
|
33683
|
-
element: element === 'none' ? void 0 : element,
|
|
33684
|
-
collectionItem,
|
|
33685
|
-
};
|
|
33686
|
-
}
|
|
33687
|
-
catch {
|
|
33688
|
-
return;
|
|
33689
|
-
}
|
|
33690
|
-
}
|
|
33691
|
-
function shouldOpenLinkInNewTab(link) {
|
|
33692
|
-
return !isFramerPageLink(link);
|
|
33693
|
-
}
|
|
33694
|
-
function navigateFromAttributes(navigate, element, implicitPathVariables) {
|
|
33695
|
-
var _a;
|
|
33696
|
-
let routeId = element.getAttribute('data-framer-page-link-target');
|
|
33697
|
-
let elementId;
|
|
33698
|
-
let pathVariables;
|
|
33699
|
-
if (routeId) {
|
|
33700
|
-
elementId = element.getAttribute('data-framer-page-link-element') ?? void 0;
|
|
33701
|
-
const pathVariablesRaw = element.getAttribute('data-framer-page-link-path-variables');
|
|
33702
|
-
if (pathVariablesRaw) {
|
|
33703
|
-
pathVariables = Object.fromEntries(new URLSearchParams(pathVariablesRaw).entries());
|
|
33704
|
-
}
|
|
33705
|
-
}
|
|
33706
|
-
else {
|
|
33707
|
-
const href = element.getAttribute('href');
|
|
33708
|
-
if (!href)
|
|
33709
|
-
return false;
|
|
33710
|
-
const link = parseFramerPageLink(href);
|
|
33711
|
-
if (!link || !link.target)
|
|
33712
|
-
return false;
|
|
33713
|
-
routeId = link.target;
|
|
33714
|
-
elementId = link.element ?? void 0;
|
|
33715
|
-
pathVariables = (_a = link.collectionItem) == null ? void 0 : _a.pathVariables;
|
|
33716
|
-
}
|
|
33717
|
-
const smoothScroll = elementId ? element.dataset.framerSmoothScroll !== void 0 : void 0;
|
|
33718
|
-
navigate(routeId, elementId, Object.assign({}, implicitPathVariables, pathVariables), smoothScroll);
|
|
33719
|
-
return true;
|
|
33720
|
-
}
|
|
33721
|
-
function linkFromFramerPageLink(link) {
|
|
33722
|
-
if (!isFramerPageLink(link))
|
|
33723
|
-
return link;
|
|
33724
|
-
const parsed = parseFramerPageLink(link);
|
|
33725
|
-
if (!parsed)
|
|
33726
|
-
return void 0;
|
|
33727
|
-
const { target, element, collectionItem, } = parsed;
|
|
33728
|
-
if (!target)
|
|
33729
|
-
return void 0;
|
|
33730
|
-
return {
|
|
33731
|
-
webPageId: target,
|
|
33732
|
-
hash: element ?? void 0,
|
|
33733
|
-
pathVariables: createVariablesFromPageLinkCollectionItem(collectionItem),
|
|
33734
|
-
};
|
|
33735
|
-
}
|
|
33736
|
-
function createVariablesFromPageLinkCollectionItem(collectionItem) {
|
|
33737
|
-
if (!collectionItem)
|
|
33738
|
-
return void 0;
|
|
33739
|
-
const variables = {};
|
|
33740
|
-
for (const pathVariablesKey2 in collectionItem.pathVariables) {
|
|
33741
|
-
const value = collectionItem.pathVariables[pathVariablesKey2];
|
|
33742
|
-
if (value)
|
|
33743
|
-
variables[pathVariablesKey2] = value;
|
|
33744
|
-
}
|
|
33745
|
-
return variables;
|
|
33746
|
-
}
|
|
33747
34062
|
var pathVariablesRegExp2 = /:([a-z]\w*)/gi;
|
|
33748
34063
|
var PathVariablesContext = /* @__PURE__ */ createContext(void 0);
|
|
33749
34064
|
function useImplicitPathVariables() {
|
|
@@ -33816,185 +34131,6 @@ function combineRels(rel, otherRel) {
|
|
|
33816
34131
|
return `${rel} ${otherRel}`;
|
|
33817
34132
|
return void 0;
|
|
33818
34133
|
}
|
|
33819
|
-
function linkInfoKey(link) {
|
|
33820
|
-
var _a, _b;
|
|
33821
|
-
return `${link.scopeId}:${link.nodeId}:${(_a = link.furthestExternalComponent) == null ? void 0 : _a.scopeId}:${(_b = link.furthestExternalComponent) == null ? void 0 : _b.nodeId}`;
|
|
33822
|
-
}
|
|
33823
|
-
var NestedLinksCollector = class {
|
|
33824
|
-
constructor() {
|
|
33825
|
-
__publicField(this, 'collectedLinks', /* @__PURE__ */ new Map());
|
|
33826
|
-
__publicField(this, 'nestingInfo', /* @__PURE__ */ new Map());
|
|
33827
|
-
}
|
|
33828
|
-
clear() {
|
|
33829
|
-
this.collectedLinks.clear();
|
|
33830
|
-
this.nestingInfo.clear();
|
|
33831
|
-
}
|
|
33832
|
-
/**
|
|
33833
|
-
* Returns a Map of outer links to their inner links.
|
|
33834
|
-
*
|
|
33835
|
-
* NOTE: This function is called in the SSG renderer sandbox (<root>/src/ssg/src/ssg-sandbox-renderer/sandbox/worker/renderer.ts)
|
|
33836
|
-
*/
|
|
33837
|
-
getLinks() {
|
|
33838
|
-
const result = /* @__PURE__ */ new Map();
|
|
33839
|
-
for (const [outerLinkKey, innerLinkKeys,] of this.nestingInfo) {
|
|
33840
|
-
const outerLinkInfo = this.collectedLinks.get(outerLinkKey);
|
|
33841
|
-
assert(outerLinkInfo, `Outer link not found: ${outerLinkKey}`);
|
|
33842
|
-
const links = Array.from(innerLinkKeys).map((innerLinkKey) => {
|
|
33843
|
-
const innerLinkInfo = this.collectedLinks.get(innerLinkKey);
|
|
33844
|
-
assert(innerLinkInfo, `Inner link not found: ${innerLinkKey}`);
|
|
33845
|
-
return innerLinkInfo;
|
|
33846
|
-
});
|
|
33847
|
-
result.set(outerLinkInfo, links);
|
|
33848
|
-
}
|
|
33849
|
-
return result;
|
|
33850
|
-
}
|
|
33851
|
-
collectNestedLink(outerLink, innerLink) {
|
|
33852
|
-
if (isWindow && !isTest() || !outerLink.nodeId || !innerLink.nodeId) {
|
|
33853
|
-
return;
|
|
33854
|
-
}
|
|
33855
|
-
this.collectedLinks.set(linkInfoKey(outerLink), outerLink);
|
|
33856
|
-
this.collectedLinks.set(linkInfoKey(innerLink), innerLink);
|
|
33857
|
-
const outerLinkNestingInfo = this.nestingInfo.get(linkInfoKey(outerLink)) ?? /* @__PURE__ */ new Set();
|
|
33858
|
-
outerLinkNestingInfo.add(linkInfoKey(innerLink));
|
|
33859
|
-
this.nestingInfo.set(linkInfoKey(outerLink), outerLinkNestingInfo);
|
|
33860
|
-
}
|
|
33861
|
-
};
|
|
33862
|
-
var nestedLinksCollector = /* @__PURE__ */ new NestedLinksCollector();
|
|
33863
|
-
function useIsOnFramerCanvas() {
|
|
33864
|
-
return RenderTarget.current() === RenderTarget.canvas;
|
|
33865
|
-
}
|
|
33866
|
-
var OuterLinkContext = /* @__PURE__ */ createContext(void 0);
|
|
33867
|
-
function useReplaceNestedLinks(children, scopeId, nodeId, href, propsAddedByLink, observerRef) {
|
|
33868
|
-
const outerLink = useContext(OuterLinkContext);
|
|
33869
|
-
const furthestExternalComponent = useFurthestExternalComponent();
|
|
33870
|
-
const innerLink = useMemo2(() => ({
|
|
33871
|
-
scopeId,
|
|
33872
|
-
nodeId,
|
|
33873
|
-
furthestExternalComponent,
|
|
33874
|
-
}), [scopeId, nodeId, furthestExternalComponent,]);
|
|
33875
|
-
const router = useRouter();
|
|
33876
|
-
const currentRoute = useCurrentRoute();
|
|
33877
|
-
const route = useMemo2(() => {
|
|
33878
|
-
const pageLink = isLinkToWebPage(href) ? href : linkFromFramerPageLink(href);
|
|
33879
|
-
if (!pageLink)
|
|
33880
|
-
return;
|
|
33881
|
-
return getRouteFromPageLink(pageLink, router, currentRoute);
|
|
33882
|
-
}, [currentRoute, href, router,]);
|
|
33883
|
-
const { replaceNestedLinks, } = useLibraryFeatures();
|
|
33884
|
-
const isOnFramerCanvas = useIsOnFramerCanvas();
|
|
33885
|
-
const shouldReplaceLink = Boolean(replaceNestedLinks && !isOnFramerCanvas && (outerLink == null ? void 0 : outerLink.nodeId) && innerLink.nodeId);
|
|
33886
|
-
const onClick = useCallback((event) => {
|
|
33887
|
-
var _a;
|
|
33888
|
-
if (!propsAddedByLink.href)
|
|
33889
|
-
return;
|
|
33890
|
-
event.preventDefault();
|
|
33891
|
-
event.stopPropagation();
|
|
33892
|
-
const isAppleDevice = /Mac|iPod|iPhone|iPad/u.test(__unframerNavigator2.userAgent);
|
|
33893
|
-
if (isAppleDevice ? event.metaKey : event.ctrlKey) {
|
|
33894
|
-
openExternalLink(propsAddedByLink.href, '', '_blank');
|
|
33895
|
-
return;
|
|
33896
|
-
}
|
|
33897
|
-
if (route) {
|
|
33898
|
-
(_a = propsAddedByLink.navigate) == null ? void 0 : _a.call(propsAddedByLink);
|
|
33899
|
-
}
|
|
33900
|
-
else {
|
|
33901
|
-
openExternalLink(propsAddedByLink.href, propsAddedByLink.rel, propsAddedByLink.target);
|
|
33902
|
-
}
|
|
33903
|
-
}, [propsAddedByLink, route,]);
|
|
33904
|
-
const onAuxClick = useCallback((event) => {
|
|
33905
|
-
if (!propsAddedByLink.href)
|
|
33906
|
-
return;
|
|
33907
|
-
event.preventDefault();
|
|
33908
|
-
event.stopPropagation();
|
|
33909
|
-
openExternalLink(propsAddedByLink.href, '', '_blank');
|
|
33910
|
-
}, [propsAddedByLink,]);
|
|
33911
|
-
const onKeyDown = useCallback((event) => {
|
|
33912
|
-
var _a;
|
|
33913
|
-
if (!propsAddedByLink.href)
|
|
33914
|
-
return;
|
|
33915
|
-
if (event.key !== 'Enter')
|
|
33916
|
-
return;
|
|
33917
|
-
event.preventDefault();
|
|
33918
|
-
event.stopPropagation();
|
|
33919
|
-
if (route) {
|
|
33920
|
-
(_a = propsAddedByLink.navigate) == null ? void 0 : _a.call(propsAddedByLink);
|
|
33921
|
-
}
|
|
33922
|
-
else {
|
|
33923
|
-
openExternalLink(propsAddedByLink.href, propsAddedByLink.rel, propsAddedByLink.target);
|
|
33924
|
-
}
|
|
33925
|
-
}, [propsAddedByLink, route,]);
|
|
33926
|
-
useRefEffect(observerRef, (node) => {
|
|
33927
|
-
if (node === null)
|
|
33928
|
-
return;
|
|
33929
|
-
if (!shouldReplaceLink)
|
|
33930
|
-
return;
|
|
33931
|
-
node.dataset.hydrated = 'true';
|
|
33932
|
-
}, [shouldReplaceLink,]);
|
|
33933
|
-
let replacedChildren = children;
|
|
33934
|
-
if (shouldReplaceLink) {
|
|
33935
|
-
Children.forEach(children, (child) => {
|
|
33936
|
-
if (!isChildReplaceable(child))
|
|
33937
|
-
return;
|
|
33938
|
-
assert(linkInfoIsCollectable(outerLink), 'outerLink must have nodeId defined at this point; this was verified with `shouldReplaceLink` above');
|
|
33939
|
-
assert(linkInfoIsCollectable(innerLink), 'innerLink must have nodeId defined at this point; this was verified with `shouldReplaceLink` above');
|
|
33940
|
-
nestedLinksCollector.collectNestedLink(outerLink, innerLink);
|
|
33941
|
-
});
|
|
33942
|
-
replacedChildren = Children.map(children, (child) => {
|
|
33943
|
-
if (!isChildReplaceable(child))
|
|
33944
|
-
return child;
|
|
33945
|
-
const tag = maybeReplaceAnchorWithSpan(child.type);
|
|
33946
|
-
const { children: childChildren, ...childProps } = child.props;
|
|
33947
|
-
const props = {
|
|
33948
|
-
...childProps,
|
|
33949
|
-
// This attribute is used in `ssg/src/ssg-sandbox-renderer/worker/nestedLinks.ts` to handle the nested links clicks
|
|
33950
|
-
'data-nested-link': true,
|
|
33951
|
-
role: 'link',
|
|
33952
|
-
tabIndex: 0,
|
|
33953
|
-
onClick,
|
|
33954
|
-
onAuxClick,
|
|
33955
|
-
onKeyDown,
|
|
33956
|
-
as: childProps.as && maybeReplaceAnchorWithSpan(childProps.as),
|
|
33957
|
-
};
|
|
33958
|
-
const ref = 'ref' in child ? child.ref : void 0;
|
|
33959
|
-
return createElement(tag, // We need to pass the ref here again, otherwise it will be lost
|
|
33960
|
-
{
|
|
33961
|
-
...props,
|
|
33962
|
-
ref,
|
|
33963
|
-
}, childChildren);
|
|
33964
|
-
});
|
|
33965
|
-
}
|
|
33966
|
-
return /* @__PURE__ */ jsx3(OuterLinkContext.Provider, {
|
|
33967
|
-
value: innerLink,
|
|
33968
|
-
children: replacedChildren,
|
|
33969
|
-
});
|
|
33970
|
-
}
|
|
33971
|
-
function linkInfoIsCollectable(linkInfo) {
|
|
33972
|
-
return !isUndefined(linkInfo == null ? void 0 : linkInfo.nodeId);
|
|
33973
|
-
}
|
|
33974
|
-
function isChildReplaceable(child) {
|
|
33975
|
-
return isValidElement(child) &&
|
|
33976
|
-
(maybeReplaceAnchorWithSpan(child.type) !== child.type || maybeReplaceAnchorWithSpan(child.props.as) !== child.props.as);
|
|
33977
|
-
}
|
|
33978
|
-
function openExternalLink(href, rel, target) {
|
|
33979
|
-
const link = document.createElement('a');
|
|
33980
|
-
link.href = href;
|
|
33981
|
-
if (rel) {
|
|
33982
|
-
link.rel = rel;
|
|
33983
|
-
}
|
|
33984
|
-
if (target) {
|
|
33985
|
-
link.target = target;
|
|
33986
|
-
}
|
|
33987
|
-
document.body.appendChild(link);
|
|
33988
|
-
link.click();
|
|
33989
|
-
link.remove();
|
|
33990
|
-
}
|
|
33991
|
-
function maybeReplaceAnchorWithSpan(component) {
|
|
33992
|
-
if (component === 'a')
|
|
33993
|
-
return 'span';
|
|
33994
|
-
if (isMotionComponent(component) && unwrapMotionComponent(component) === 'a')
|
|
33995
|
-
return motion.span;
|
|
33996
|
-
return component;
|
|
33997
|
-
}
|
|
33998
34134
|
function useTrackLinkClick({ nodeId, clickTrackingId, router, href, activeLocale, }) {
|
|
33999
34135
|
return useCallback(async (hrefAttribute) => {
|
|
34000
34136
|
var _a, _b, _c, _d, _e;
|
|
@@ -34279,24 +34415,6 @@ function resolvePageScope(pageLink, router) {
|
|
|
34279
34415
|
siteCanonicalURL: void 0,
|
|
34280
34416
|
});
|
|
34281
34417
|
}
|
|
34282
|
-
var IgnoreErrors = class extends Component2 {
|
|
34283
|
-
constructor() {
|
|
34284
|
-
super(...arguments);
|
|
34285
|
-
__publicField(this, 'state', {
|
|
34286
|
-
error: void 0,
|
|
34287
|
-
});
|
|
34288
|
-
}
|
|
34289
|
-
static getDerivedStateFromError(error) {
|
|
34290
|
-
return {
|
|
34291
|
-
error,
|
|
34292
|
-
};
|
|
34293
|
-
}
|
|
34294
|
-
render() {
|
|
34295
|
-
if (this.state.error)
|
|
34296
|
-
return null;
|
|
34297
|
-
return this.props.children;
|
|
34298
|
-
}
|
|
34299
|
-
};
|
|
34300
34418
|
var salt = 'framer';
|
|
34301
34419
|
var difficulty = 3;
|
|
34302
34420
|
var tokenLength = 30;
|
|
@@ -34489,6 +34607,7 @@ var FormContainer = /* @__PURE__ */ React4.forwardRef(function FormContainer2({
|
|
|
34489
34607
|
onError,
|
|
34490
34608
|
onLoading,
|
|
34491
34609
|
};
|
|
34610
|
+
const submissionInProgressRef = React4.useRef(false);
|
|
34492
34611
|
async function redirectTo(link) {
|
|
34493
34612
|
var _a, _b;
|
|
34494
34613
|
if (isString(link)) {
|
|
@@ -34509,16 +34628,17 @@ var FormContainer = /* @__PURE__ */ React4.forwardRef(function FormContainer2({
|
|
|
34509
34628
|
const handleSubmit = async (event) => {
|
|
34510
34629
|
var _a, _b, _c, _d, _e, _f;
|
|
34511
34630
|
event.preventDefault();
|
|
34512
|
-
if (!action || !projectHash)
|
|
34631
|
+
if (!action || !projectHash || submissionInProgressRef.current)
|
|
34513
34632
|
return;
|
|
34514
|
-
|
|
34515
|
-
type: 'submit',
|
|
34516
|
-
});
|
|
34633
|
+
submissionInProgressRef.current = true;
|
|
34517
34634
|
const data2 = new FormData(event.currentTarget);
|
|
34518
34635
|
await yieldToMain({
|
|
34519
|
-
priority: 'user-
|
|
34636
|
+
priority: 'user-visible',
|
|
34520
34637
|
continueAfter: 'paint',
|
|
34521
34638
|
});
|
|
34639
|
+
startTransition2(() => dispatch({
|
|
34640
|
+
type: 'submit',
|
|
34641
|
+
}));
|
|
34522
34642
|
addUTMTagsToFormData(data2, safeWindow.document);
|
|
34523
34643
|
for (const [key7, value,] of data2) {
|
|
34524
34644
|
if (value instanceof File)
|
|
@@ -34548,6 +34668,7 @@ var FormContainer = /* @__PURE__ */ React4.forwardRef(function FormContainer2({
|
|
|
34548
34668
|
(_f = (_e = callbacks.current).onError) == null ? void 0 : _f.call(_e);
|
|
34549
34669
|
console.error(error);
|
|
34550
34670
|
}
|
|
34671
|
+
submissionInProgressRef.current = false;
|
|
34551
34672
|
};
|
|
34552
34673
|
const handleKeyDown = (event) => {
|
|
34553
34674
|
const { target: input, currentTarget: form, key: key7, } = event;
|
|
@@ -34624,6 +34745,61 @@ function responseHasError(response) {
|
|
|
34624
34745
|
return typeof response === 'object' && response !== null && 'error' in response && isObject2(response.error) &&
|
|
34625
34746
|
'message' in response.error && typeof response.error.message === 'string';
|
|
34626
34747
|
}
|
|
34748
|
+
var FORCE_SHOW_EDITORBAR_LOCALSTORAGE_KEY = '__framer_force_showing_editorbar_since';
|
|
34749
|
+
var IgnoreErrors = class extends Component2 {
|
|
34750
|
+
constructor() {
|
|
34751
|
+
super(...arguments);
|
|
34752
|
+
__publicField(this, 'state', {
|
|
34753
|
+
error: void 0,
|
|
34754
|
+
});
|
|
34755
|
+
}
|
|
34756
|
+
static getDerivedStateFromError(error) {
|
|
34757
|
+
return {
|
|
34758
|
+
error,
|
|
34759
|
+
};
|
|
34760
|
+
}
|
|
34761
|
+
render() {
|
|
34762
|
+
if (this.state.error)
|
|
34763
|
+
return null;
|
|
34764
|
+
return this.props.children;
|
|
34765
|
+
}
|
|
34766
|
+
};
|
|
34767
|
+
var isPrioritized = () => {
|
|
34768
|
+
try {
|
|
34769
|
+
return !!localStorage[FORCE_SHOW_EDITORBAR_LOCALSTORAGE_KEY];
|
|
34770
|
+
}
|
|
34771
|
+
catch (e) {
|
|
34772
|
+
return false;
|
|
34773
|
+
}
|
|
34774
|
+
};
|
|
34775
|
+
var isntPrioritized = () => !isPrioritized();
|
|
34776
|
+
var getServerSnapshot = () => false;
|
|
34777
|
+
var noOpSubscribe = () => () => { };
|
|
34778
|
+
function EditorBarLauncher({ EditorBar, fast = false, }) {
|
|
34779
|
+
const libraryFeatures = useLibraryFeatures();
|
|
34780
|
+
const framerSiteId = useContext(FormContext);
|
|
34781
|
+
const enabled = useSyncExternalStore(noOpSubscribe, fast ? isPrioritized : isntPrioritized, getServerSnapshot);
|
|
34782
|
+
const editorBarFeatures = useMemo2(() => {
|
|
34783
|
+
const features = {};
|
|
34784
|
+
let key7;
|
|
34785
|
+
for (key7 in libraryFeatures) {
|
|
34786
|
+
if (libraryFeatures.hasOwnProperty(key7) && key7.startsWith('editorBar')) {
|
|
34787
|
+
features[key7] = libraryFeatures[key7];
|
|
34788
|
+
}
|
|
34789
|
+
}
|
|
34790
|
+
return features;
|
|
34791
|
+
}, [libraryFeatures,]);
|
|
34792
|
+
if (!EditorBar || !framerSiteId || !enabled)
|
|
34793
|
+
return null;
|
|
34794
|
+
return /* @__PURE__ */ jsx3(IgnoreErrors, {
|
|
34795
|
+
children: /* @__PURE__ */ jsx3(Suspense2, {
|
|
34796
|
+
children: /* @__PURE__ */ jsx3(EditorBar, {
|
|
34797
|
+
framerSiteId,
|
|
34798
|
+
features: editorBarFeatures,
|
|
34799
|
+
}),
|
|
34800
|
+
}),
|
|
34801
|
+
});
|
|
34802
|
+
}
|
|
34627
34803
|
function isSamePage(a, b) {
|
|
34628
34804
|
if (a.routeId !== b.routeId)
|
|
34629
34805
|
return false;
|
|
@@ -34797,7 +34973,7 @@ function useNavigationTransition() {
|
|
|
34797
34973
|
announceNavigation();
|
|
34798
34974
|
}, [startNativeSpinner,]);
|
|
34799
34975
|
}
|
|
34800
|
-
function Router({ defaultPageStyle, disableHistory, initialPathVariables, initialRoute, notFoundPage, collectionUtils, routes, initialLocaleId, locales = EMPTY_ARRAY, preserveQueryParams = false, LayoutTemplate,
|
|
34976
|
+
function Router({ defaultPageStyle, disableHistory, initialPathVariables, initialRoute, notFoundPage, collectionUtils, routes, initialLocaleId, locales = EMPTY_ARRAY, preserveQueryParams = false, LayoutTemplate, EditorBar, siteCanonicalURL, }) {
|
|
34801
34977
|
useMarkRouterEffects();
|
|
34802
34978
|
useReplaceInitialState({
|
|
34803
34979
|
disabled: disableHistory,
|
|
@@ -35055,38 +35231,46 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
|
|
|
35055
35231
|
}));
|
|
35056
35232
|
return /* @__PURE__ */ jsx3(RouterAPIProvider, {
|
|
35057
35233
|
api,
|
|
35058
|
-
children: /* @__PURE__ */
|
|
35234
|
+
children: /* @__PURE__ */ jsxs(LocaleInfoContext.Provider, {
|
|
35059
35235
|
value: localeInfo,
|
|
35060
|
-
children:
|
|
35061
|
-
|
|
35062
|
-
|
|
35063
|
-
|
|
35064
|
-
notFoundPage,
|
|
35065
|
-
defaultPageStyle,
|
|
35066
|
-
forceUpdateKey: dep,
|
|
35067
|
-
children: [
|
|
35068
|
-
/* @__PURE__ */ jsx3(MarkSuspenseEffects.Start, {}),
|
|
35069
|
-
/* @__PURE__ */ jsx3(WithLayoutTemplate, {
|
|
35070
|
-
LayoutTemplate,
|
|
35071
|
-
routeId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
|
|
35072
|
-
style: defaultPageStyle,
|
|
35073
|
-
children: (inLayoutTemplate) => {
|
|
35074
|
-
return /* @__PURE__ */ jsx3(Fragment, {
|
|
35075
|
-
children: pageExistsInCurrentLocale
|
|
35076
|
-
? renderPage(currentRoute.page, inLayoutTemplate ? templatePageStyle : defaultPageStyle)
|
|
35077
|
-
: // LAYOUT_TEMPLATE @TODO: display: content for not found page?
|
|
35078
|
-
notFoundPage && renderPage(notFoundPage, defaultPageStyle),
|
|
35079
|
-
}, remountKey);
|
|
35080
|
-
},
|
|
35081
|
-
}),
|
|
35082
|
-
],
|
|
35083
|
-
}),
|
|
35084
|
-
editorBar,
|
|
35085
|
-
/* @__PURE__ */ jsx3(TurnOnReactEventHandling, {}),
|
|
35086
|
-
/* @__PURE__ */ jsx3(MarkSuspenseEffects.End, {}),
|
|
35087
|
-
],
|
|
35236
|
+
children: [
|
|
35237
|
+
EditorBar && /* @__PURE__ */ jsx3(EditorBarLauncher, {
|
|
35238
|
+
EditorBar,
|
|
35239
|
+
fast: true,
|
|
35088
35240
|
}),
|
|
35089
|
-
|
|
35241
|
+
/* @__PURE__ */ jsx3(SynchronousSuspenseErrorBoundary, {
|
|
35242
|
+
children: /* @__PURE__ */ jsxs(SuspenseThatPreservesDom, {
|
|
35243
|
+
children: [
|
|
35244
|
+
/* @__PURE__ */ jsxs(NotFoundErrorBoundary, {
|
|
35245
|
+
notFoundPage,
|
|
35246
|
+
defaultPageStyle,
|
|
35247
|
+
forceUpdateKey: dep,
|
|
35248
|
+
children: [
|
|
35249
|
+
/* @__PURE__ */ jsx3(MarkSuspenseEffects.Start, {}),
|
|
35250
|
+
/* @__PURE__ */ jsx3(WithLayoutTemplate, {
|
|
35251
|
+
LayoutTemplate,
|
|
35252
|
+
routeId: (currentRoute == null ? void 0 : currentRoute.abTestingVariantId) ?? currentRouteId,
|
|
35253
|
+
style: defaultPageStyle,
|
|
35254
|
+
children: (inLayoutTemplate) => {
|
|
35255
|
+
return /* @__PURE__ */ jsx3(Fragment, {
|
|
35256
|
+
children: pageExistsInCurrentLocale
|
|
35257
|
+
? renderPage(currentRoute.page, inLayoutTemplate ? templatePageStyle : defaultPageStyle)
|
|
35258
|
+
: // LAYOUT_TEMPLATE @TODO: display: content for not found page?
|
|
35259
|
+
notFoundPage && renderPage(notFoundPage, defaultPageStyle),
|
|
35260
|
+
}, remountKey);
|
|
35261
|
+
},
|
|
35262
|
+
}),
|
|
35263
|
+
],
|
|
35264
|
+
}),
|
|
35265
|
+
EditorBar && /* @__PURE__ */ jsx3(EditorBarLauncher, {
|
|
35266
|
+
EditorBar,
|
|
35267
|
+
}),
|
|
35268
|
+
/* @__PURE__ */ jsx3(TurnOnReactEventHandling, {}),
|
|
35269
|
+
/* @__PURE__ */ jsx3(MarkSuspenseEffects.End, {}),
|
|
35270
|
+
],
|
|
35271
|
+
}),
|
|
35272
|
+
}),
|
|
35273
|
+
],
|
|
35090
35274
|
}),
|
|
35091
35275
|
});
|
|
35092
35276
|
}
|
|
@@ -35185,20 +35369,12 @@ function resolveFetchDataValue(result, request) {
|
|
|
35185
35369
|
}
|
|
35186
35370
|
return resolvedValue;
|
|
35187
35371
|
}
|
|
35372
|
+
var minimumCacheDurationMs = 5e3;
|
|
35188
35373
|
function isCacheExpired(insertionTimestamp, cacheDuration) {
|
|
35189
35374
|
if (RenderTarget.current() === RenderTarget.canvas) {
|
|
35190
35375
|
return false;
|
|
35191
35376
|
}
|
|
35192
|
-
const cacheDurationMs = cacheDuration
|
|
35193
|
-
? // When the cache is set to 0 seconds we set use a 500ms cache delay
|
|
35194
|
-
// to avoid triggering refetching when a variant switches from
|
|
35195
|
-
// preloading to rendering the component (and
|
|
35196
|
-
// resubscribing to the fetch client). When another component
|
|
35197
|
-
// relying on the same endpoint (eg another page) is mounted again
|
|
35198
|
-
// and the cache time is set to 0, the the data will be fetched
|
|
35199
|
-
// again.
|
|
35200
|
-
500
|
|
35201
|
-
: cacheDuration * 1e3;
|
|
35377
|
+
const cacheDurationMs = Math.max(cacheDuration * 1e3, minimumCacheDurationMs);
|
|
35202
35378
|
const currentTimestamp = Date.now();
|
|
35203
35379
|
const expirationTimestamp = insertionTimestamp + cacheDurationMs;
|
|
35204
35380
|
return currentTimestamp >= expirationTimestamp;
|
|
@@ -35638,9 +35814,7 @@ function PageRoot({ RootComponent, isWebsite, routeId, framerSiteId, pathVariabl
|
|
|
35638
35814
|
width: 'auto',
|
|
35639
35815
|
},
|
|
35640
35816
|
preserveQueryParams,
|
|
35641
|
-
|
|
35642
|
-
EditorBar,
|
|
35643
|
-
}),
|
|
35817
|
+
EditorBar,
|
|
35644
35818
|
disableHistory,
|
|
35645
35819
|
LayoutTemplate,
|
|
35646
35820
|
siteCanonicalURL,
|
|
@@ -35667,36 +35841,6 @@ function PageRoot({ RootComponent, isWebsite, routeId, framerSiteId, pathVariabl
|
|
|
35667
35841
|
});
|
|
35668
35842
|
}
|
|
35669
35843
|
}
|
|
35670
|
-
function EditorBarLauncher({ EditorBar, }) {
|
|
35671
|
-
const libraryFeatures = useLibraryFeatures();
|
|
35672
|
-
const [mounted, setMounted,] = useState(false);
|
|
35673
|
-
const framerSiteId = useContext(FormContext);
|
|
35674
|
-
const editorBarFeatures = useMemo2(() => {
|
|
35675
|
-
const features = {};
|
|
35676
|
-
let key7;
|
|
35677
|
-
for (key7 in libraryFeatures) {
|
|
35678
|
-
if (libraryFeatures.hasOwnProperty(key7) && key7.startsWith('editorBar')) {
|
|
35679
|
-
features[key7] = libraryFeatures[key7];
|
|
35680
|
-
}
|
|
35681
|
-
}
|
|
35682
|
-
return features;
|
|
35683
|
-
}, [libraryFeatures,]);
|
|
35684
|
-
useEffect(() => {
|
|
35685
|
-
startTransition2(() => {
|
|
35686
|
-
setMounted(true);
|
|
35687
|
-
});
|
|
35688
|
-
}, []);
|
|
35689
|
-
if (!EditorBar || !framerSiteId || !mounted)
|
|
35690
|
-
return null;
|
|
35691
|
-
return /* @__PURE__ */ jsx3(IgnoreErrors, {
|
|
35692
|
-
children: /* @__PURE__ */ jsx3(Suspense2, {
|
|
35693
|
-
children: /* @__PURE__ */ jsx3(EditorBar, {
|
|
35694
|
-
framerSiteId,
|
|
35695
|
-
features: editorBarFeatures,
|
|
35696
|
-
}),
|
|
35697
|
-
}),
|
|
35698
|
-
});
|
|
35699
|
-
}
|
|
35700
35844
|
var ResolveLinks = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(function ResolveLinksInner({ links, children, ...rest }, ref) {
|
|
35701
35845
|
const router = useRouter();
|
|
35702
35846
|
const { activeLocale, } = useLocaleInfo();
|
|
@@ -40872,51 +41016,51 @@ function usePrototypeNavigate({ preload, } = {}) {
|
|
|
40872
41016
|
navigation.goBack();
|
|
40873
41017
|
return false;
|
|
40874
41018
|
}
|
|
40875
|
-
const
|
|
41019
|
+
const Component18 = typeof target === 'string'
|
|
40876
41020
|
? await componentForRoute(getRoute == null ? void 0 : getRoute(target)).catch(() => { })
|
|
40877
41021
|
: React4.isValidElement(target)
|
|
40878
41022
|
? target
|
|
40879
41023
|
: null;
|
|
40880
|
-
if (!
|
|
41024
|
+
if (!Component18)
|
|
40881
41025
|
return;
|
|
40882
41026
|
const { appearsFrom, backdropColor, animation, } = options;
|
|
40883
41027
|
const transitionType = options.transition || 'instant';
|
|
40884
41028
|
switch (transitionType) {
|
|
40885
41029
|
case 'instant':
|
|
40886
|
-
navigation.instant(
|
|
41030
|
+
navigation.instant(Component18);
|
|
40887
41031
|
break;
|
|
40888
41032
|
case 'fade':
|
|
40889
|
-
navigation.fade(
|
|
41033
|
+
navigation.fade(Component18, {
|
|
40890
41034
|
animation,
|
|
40891
41035
|
});
|
|
40892
41036
|
break;
|
|
40893
41037
|
case 'push':
|
|
40894
|
-
navigation.push(
|
|
41038
|
+
navigation.push(Component18, {
|
|
40895
41039
|
appearsFrom,
|
|
40896
41040
|
animation,
|
|
40897
41041
|
});
|
|
40898
41042
|
break;
|
|
40899
41043
|
case 'flip':
|
|
40900
|
-
navigation.flip(
|
|
41044
|
+
navigation.flip(Component18, {
|
|
40901
41045
|
appearsFrom,
|
|
40902
41046
|
animation,
|
|
40903
41047
|
});
|
|
40904
41048
|
break;
|
|
40905
41049
|
case 'magicMotion':
|
|
40906
|
-
navigation.magicMotion(
|
|
41050
|
+
navigation.magicMotion(Component18, {
|
|
40907
41051
|
animation,
|
|
40908
41052
|
});
|
|
40909
41053
|
break;
|
|
40910
41054
|
// Overlay stack navigation doesn't support updating the browser's
|
|
40911
41055
|
// path.
|
|
40912
41056
|
case 'modal':
|
|
40913
|
-
navigation.modal(
|
|
41057
|
+
navigation.modal(Component18, {
|
|
40914
41058
|
backdropColor,
|
|
40915
41059
|
animation,
|
|
40916
41060
|
});
|
|
40917
41061
|
break;
|
|
40918
41062
|
case 'overlay':
|
|
40919
|
-
navigation.overlay(
|
|
41063
|
+
navigation.overlay(Component18, {
|
|
40920
41064
|
appearsFrom,
|
|
40921
41065
|
backdropColor,
|
|
40922
41066
|
animation,
|
|
@@ -41409,11 +41553,11 @@ function safeCSSValue(value) {
|
|
|
41409
41553
|
return 'none';
|
|
41410
41554
|
return value;
|
|
41411
41555
|
}
|
|
41412
|
-
function withCodeBoundaryForOverrides(
|
|
41556
|
+
function withCodeBoundaryForOverrides(Component18, { scopeId, nodeId, override, inComponentSlot, }) {
|
|
41413
41557
|
if (!shouldEnableCodeBoundaries()) {
|
|
41414
|
-
return override(
|
|
41558
|
+
return override(Component18);
|
|
41415
41559
|
}
|
|
41416
|
-
const appliedOverride = tryToApplyOverride(
|
|
41560
|
+
const appliedOverride = tryToApplyOverride(Component18, override);
|
|
41417
41561
|
let hasErrorBeenLogged = false;
|
|
41418
41562
|
function CodeBoundaryForOverrides(props, ref) {
|
|
41419
41563
|
const nearestExternalComponent = useNearestExternalComponent();
|
|
@@ -41424,7 +41568,7 @@ function withCodeBoundaryForOverrides(Component17, { scopeId, nodeId, override,
|
|
|
41424
41568
|
value: nodeId,
|
|
41425
41569
|
children: /* @__PURE__ */ jsx3(CodeComponentBoundary, {
|
|
41426
41570
|
getErrorMessage: getErrorMessageForOverride.bind(null, scopeId, nodeId),
|
|
41427
|
-
fallback: /* @__PURE__ */ jsx3(
|
|
41571
|
+
fallback: /* @__PURE__ */ jsx3(Component18, {
|
|
41428
41572
|
...props,
|
|
41429
41573
|
ref,
|
|
41430
41574
|
}),
|
|
@@ -41442,7 +41586,7 @@ function withCodeBoundaryForOverrides(Component17, { scopeId, nodeId, override,
|
|
|
41442
41586
|
collectErrorToAnalytics(appliedOverride.error);
|
|
41443
41587
|
hasErrorBeenLogged = true;
|
|
41444
41588
|
}
|
|
41445
|
-
return /* @__PURE__ */ jsx3(
|
|
41589
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41446
41590
|
...props,
|
|
41447
41591
|
ref,
|
|
41448
41592
|
});
|
|
@@ -41465,9 +41609,9 @@ function withCodeBoundaryForOverrides(Component17, { scopeId, nodeId, override,
|
|
|
41465
41609
|
}
|
|
41466
41610
|
return React4.forwardRef(CodeBoundaryForOverrides);
|
|
41467
41611
|
}
|
|
41468
|
-
function tryToApplyOverride(
|
|
41612
|
+
function tryToApplyOverride(Component18, override) {
|
|
41469
41613
|
try {
|
|
41470
|
-
const ComponentWithOverrides = override(
|
|
41614
|
+
const ComponentWithOverrides = override(Component18);
|
|
41471
41615
|
return {
|
|
41472
41616
|
status: 'success',
|
|
41473
41617
|
Component: ComponentWithOverrides,
|
|
@@ -41488,7 +41632,7 @@ function singleFrame() {
|
|
|
41488
41632
|
frame.postRender(() => resolve());
|
|
41489
41633
|
});
|
|
41490
41634
|
}
|
|
41491
|
-
var withV1StrokeFX = (
|
|
41635
|
+
var withV1StrokeFX = (Component18) => forwardRef((props, forwardedRef) => {
|
|
41492
41636
|
const { strokeEffectLength, strokeEffectGap, strokeEffectOffset, strokeEffectLoop, strokeEffectTotalLength, strokeEffectLoopType, pathLengthTransition, ...restProps } = props;
|
|
41493
41637
|
const isCanvas = isStaticRenderer();
|
|
41494
41638
|
const offset = useMotionValue(0);
|
|
@@ -41532,7 +41676,7 @@ var withV1StrokeFX = (Component17) => forwardRef((props, forwardedRef) => {
|
|
|
41532
41676
|
strokeDashoffset: value,
|
|
41533
41677
|
}
|
|
41534
41678
|
: void 0;
|
|
41535
|
-
return /* @__PURE__ */ jsx3(
|
|
41679
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41536
41680
|
...restProps,
|
|
41537
41681
|
...effect,
|
|
41538
41682
|
ref: forwardedRef,
|
|
@@ -41550,14 +41694,14 @@ function extractMappingFromInfo(info) {
|
|
|
41550
41694
|
return void 0;
|
|
41551
41695
|
}
|
|
41552
41696
|
}
|
|
41553
|
-
function withMappedReactProps(
|
|
41697
|
+
function withMappedReactProps(Component18, info) {
|
|
41554
41698
|
return (rawProps) => {
|
|
41555
41699
|
const props = {};
|
|
41556
41700
|
const mapping = extractMappingFromInfo(info);
|
|
41557
41701
|
for (const key7 in rawProps) {
|
|
41558
41702
|
asRecord(props)[(mapping == null ? void 0 : mapping[key7]) ?? key7] = rawProps[key7];
|
|
41559
41703
|
}
|
|
41560
|
-
return /* @__PURE__ */ jsx3(
|
|
41704
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41561
41705
|
...props,
|
|
41562
41706
|
});
|
|
41563
41707
|
};
|
|
@@ -41600,9 +41744,9 @@ function createInputOutputRanges2(transformTargets, threshold, exitTarget) {
|
|
|
41600
41744
|
outputRange: [-1, -1, ...outputRange,],
|
|
41601
41745
|
};
|
|
41602
41746
|
}
|
|
41603
|
-
var withVariantAppearEffect = (
|
|
41747
|
+
var withVariantAppearEffect = (Component18) => React4.forwardRef((props, forwardedRef) => {
|
|
41604
41748
|
if (RenderTarget.current() === RenderTarget.canvas) {
|
|
41605
|
-
return /* @__PURE__ */ jsx3(
|
|
41749
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41606
41750
|
...props,
|
|
41607
41751
|
ref: forwardedRef,
|
|
41608
41752
|
});
|
|
@@ -41671,26 +41815,26 @@ var withVariantAppearEffect = (Component17) => React4.forwardRef((props, forward
|
|
|
41671
41815
|
startTransition2(() => setVariant(target));
|
|
41672
41816
|
});
|
|
41673
41817
|
if (!('variantAppearEffectEnabled' in options) || variantAppearEffectEnabled === true) {
|
|
41674
|
-
return /* @__PURE__ */ jsx3(
|
|
41818
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41675
41819
|
...rest,
|
|
41676
41820
|
variant: activeVariant ?? props.variant,
|
|
41677
41821
|
ref: observerRef,
|
|
41678
41822
|
});
|
|
41679
41823
|
}
|
|
41680
41824
|
else {
|
|
41681
|
-
return /* @__PURE__ */ jsx3(
|
|
41825
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41682
41826
|
...rest,
|
|
41683
41827
|
});
|
|
41684
41828
|
}
|
|
41685
41829
|
});
|
|
41686
|
-
var withVariantFX = (
|
|
41830
|
+
var withVariantFX = (Component18) => React4.forwardRef(({ initial, animate: animate3, exit, ...props }, forwardedRef) => {
|
|
41687
41831
|
const observerRef = useObserverRef(forwardedRef);
|
|
41688
41832
|
const effect = usePresenceAnimation({
|
|
41689
41833
|
initial,
|
|
41690
41834
|
animate: animate3,
|
|
41691
41835
|
exit,
|
|
41692
41836
|
}, observerRef, true);
|
|
41693
|
-
return /* @__PURE__ */ jsx3(
|
|
41837
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
41694
41838
|
...props,
|
|
41695
41839
|
style: {
|
|
41696
41840
|
...(props == null ? void 0 : props.style),
|
|
@@ -42440,6 +42584,27 @@ function createVariantName(weight, style2) {
|
|
|
42440
42584
|
}
|
|
42441
42585
|
return `${fontWeightNames[weight]}`;
|
|
42442
42586
|
}
|
|
42587
|
+
var MapWithHash = class extends Map {
|
|
42588
|
+
constructor() {
|
|
42589
|
+
super(...arguments);
|
|
42590
|
+
__publicField(this, '_hash', 0);
|
|
42591
|
+
}
|
|
42592
|
+
get hash() {
|
|
42593
|
+
return this._hash;
|
|
42594
|
+
}
|
|
42595
|
+
set(key7, value) {
|
|
42596
|
+
this._hash++;
|
|
42597
|
+
return super.set(key7, value);
|
|
42598
|
+
}
|
|
42599
|
+
delete(key7) {
|
|
42600
|
+
this._hash++;
|
|
42601
|
+
return super.delete(key7);
|
|
42602
|
+
}
|
|
42603
|
+
clear() {
|
|
42604
|
+
this._hash++;
|
|
42605
|
+
return super.clear();
|
|
42606
|
+
}
|
|
42607
|
+
};
|
|
42443
42608
|
function isVariableFont(font) {
|
|
42444
42609
|
return Boolean(font.variationAxes);
|
|
42445
42610
|
}
|
|
@@ -42999,8 +43164,10 @@ var Mixed = Symbol('Mixed');
|
|
|
42999
43164
|
var DEPENDENCIES_MODULE_NAME = 'dependencies';
|
|
43000
43165
|
var DEPENDENCIES_MODULE_TYPE = 'config';
|
|
43001
43166
|
var DEPENDENCIES_MODULE_TYPE_SLASH_NAME = `${DEPENDENCIES_MODULE_TYPE}/${DEPENDENCIES_MODULE_NAME}`;
|
|
43002
|
-
var
|
|
43003
|
-
var
|
|
43167
|
+
var IMPORT_MAP_FILE_NAME = 'importMap.json';
|
|
43168
|
+
var DEPENDENCIES_FILE_NAME = 'dependencies.json';
|
|
43169
|
+
var IMPORT_MAP_FILE_ID = `${DEPENDENCIES_MODULE_TYPE_SLASH_NAME}/${IMPORT_MAP_FILE_NAME}`;
|
|
43170
|
+
var DEPENDENCIES_FILE_ID = `${DEPENDENCIES_MODULE_TYPE_SLASH_NAME}/${DEPENDENCIES_FILE_NAME}`;
|
|
43004
43171
|
var USE_FREEZE = false;
|
|
43005
43172
|
var List;
|
|
43006
43173
|
((List2) => {
|
|
@@ -44451,7 +44618,7 @@ function isValidVariationAxes(data2) {
|
|
|
44451
44618
|
var FontStore = class {
|
|
44452
44619
|
constructor() {
|
|
44453
44620
|
__publicField(this, 'enabled', false);
|
|
44454
|
-
__publicField(this, 'bySelector',
|
|
44621
|
+
__publicField(this, 'bySelector', new MapWithHash());
|
|
44455
44622
|
__publicField(this, 'loadedSelectors', /* @__PURE__ */ new Set());
|
|
44456
44623
|
__publicField(this, 'getGoogleFontsListPromise');
|
|
44457
44624
|
__publicField(this, 'getFontshareFontsListPromise');
|
|
@@ -44465,20 +44632,29 @@ var FontStore = class {
|
|
|
44465
44632
|
__publicField(this, 'builtIn');
|
|
44466
44633
|
__publicField(this, 'framer');
|
|
44467
44634
|
__publicField(this, 'custom');
|
|
44635
|
+
__publicField(this, 'bySelectorValuesCache');
|
|
44468
44636
|
this.local = new LocalFontSource();
|
|
44469
44637
|
this.google = new GoogleFontSource();
|
|
44470
44638
|
this.fontshare = new FontshareSource();
|
|
44471
44639
|
this.framer = new FramerFontSource();
|
|
44472
44640
|
this.custom = new CustomFontSource();
|
|
44473
44641
|
this.builtIn = new BuiltInFontSource();
|
|
44474
|
-
this.bySelector = /* @__PURE__ */ new Map();
|
|
44475
44642
|
this.importLocalFonts();
|
|
44476
44643
|
}
|
|
44644
|
+
get hash() {
|
|
44645
|
+
return this.bySelector.hash;
|
|
44646
|
+
}
|
|
44477
44647
|
addFont(font) {
|
|
44478
44648
|
this.bySelector.set(font.selector, font);
|
|
44479
44649
|
}
|
|
44480
44650
|
getAvailableFonts() {
|
|
44481
|
-
|
|
44651
|
+
if (!this.bySelectorValuesCache || this.bySelectorValuesCache.hash !== this.bySelector.hash) {
|
|
44652
|
+
this.bySelectorValuesCache = {
|
|
44653
|
+
result: Array.from(this.bySelector.values()),
|
|
44654
|
+
hash: this.bySelector.hash,
|
|
44655
|
+
};
|
|
44656
|
+
}
|
|
44657
|
+
return this.bySelectorValuesCache.result;
|
|
44482
44658
|
}
|
|
44483
44659
|
importLocalFonts() {
|
|
44484
44660
|
for (const font of this.local.importFonts()) {
|
|
@@ -45354,7 +45530,369 @@ var styles3 = /* @__PURE__ */ (() => [
|
|
|
45354
45530
|
}),
|
|
45355
45531
|
])();
|
|
45356
45532
|
var FormSelect = /* @__PURE__ */ withCSS(Select, styles3, 'framer-lib-form-select');
|
|
45357
|
-
|
|
45533
|
+
function useEscToClose(isOpen, close) {
|
|
45534
|
+
useEffect(() => {
|
|
45535
|
+
function handleKeyDown(e) {
|
|
45536
|
+
if (e.key === 'Escape' && isOpen) {
|
|
45537
|
+
e.preventDefault();
|
|
45538
|
+
e.stopPropagation();
|
|
45539
|
+
close();
|
|
45540
|
+
}
|
|
45541
|
+
}
|
|
45542
|
+
window.addEventListener('keyup', handleKeyDown);
|
|
45543
|
+
return () => window.removeEventListener('keyup', handleKeyDown);
|
|
45544
|
+
}, [isOpen, close,]);
|
|
45545
|
+
}
|
|
45546
|
+
var steps2 = [512, 1024, 2048, 4096,];
|
|
45547
|
+
function calculateImageWidth(aspectRatio2, maxWidth, totalHorizontalPadding, totalVerticalPadding) {
|
|
45548
|
+
const availableHeight = window.innerHeight - totalVerticalPadding;
|
|
45549
|
+
const availableWidth = Math.min(window.innerWidth - totalHorizontalPadding, maxWidth);
|
|
45550
|
+
const maxWidthBasedOnHeight = availableHeight / aspectRatio2;
|
|
45551
|
+
return Math.min(availableWidth, maxWidthBasedOnHeight);
|
|
45552
|
+
}
|
|
45553
|
+
function optimisticallyDecodeImage(image, { width, height, }) {
|
|
45554
|
+
if (!image.src || !image.srcSet)
|
|
45555
|
+
return;
|
|
45556
|
+
const i = new window.Image();
|
|
45557
|
+
i.src = image.src;
|
|
45558
|
+
i.srcset = image.srcSet;
|
|
45559
|
+
i.width = width;
|
|
45560
|
+
i.height = height;
|
|
45561
|
+
return i.decode();
|
|
45562
|
+
}
|
|
45563
|
+
function getPortalContainer2() {
|
|
45564
|
+
return document.getElementById(templateOverlayContainerId) ?? document.getElementById(overlayContainerId) ?? document.body;
|
|
45565
|
+
}
|
|
45566
|
+
function getSidePadding(value, padding) {
|
|
45567
|
+
if (isNumber2(value))
|
|
45568
|
+
return value;
|
|
45569
|
+
return padding ?? 0;
|
|
45570
|
+
}
|
|
45571
|
+
function getTotalVerticalPadding(lightbox) {
|
|
45572
|
+
return getSidePadding(lightbox == null ? void 0 : lightbox.paddingTop, lightbox == null ? void 0 : lightbox.padding) +
|
|
45573
|
+
getSidePadding(lightbox == null ? void 0 : lightbox.paddingBottom, lightbox == null ? void 0 : lightbox.padding);
|
|
45574
|
+
}
|
|
45575
|
+
function getTotalHorizontalPadding(lightbox) {
|
|
45576
|
+
return getSidePadding(lightbox == null ? void 0 : lightbox.paddingLeft, lightbox == null ? void 0 : lightbox.padding) +
|
|
45577
|
+
getSidePadding(lightbox == null ? void 0 : lightbox.paddingRight, lightbox == null ? void 0 : lightbox.padding);
|
|
45578
|
+
}
|
|
45579
|
+
function useStableCallback(callback) {
|
|
45580
|
+
const latest = useRef3(callback);
|
|
45581
|
+
latest.current = callback;
|
|
45582
|
+
return useCallback((...args) => latest.current(...args), []);
|
|
45583
|
+
}
|
|
45584
|
+
function createImageWithSrcSet(lightbox, background) {
|
|
45585
|
+
if (!lightbox || !background || !background.src)
|
|
45586
|
+
return background;
|
|
45587
|
+
const base = new URL(background.src);
|
|
45588
|
+
base.searchParams.delete('scale-down-to');
|
|
45589
|
+
base.searchParams.delete('lossless');
|
|
45590
|
+
return {
|
|
45591
|
+
...background,
|
|
45592
|
+
sizes: `min(100vw, ${lightbox.maxWidth - getTotalHorizontalPadding(lightbox)}px)`,
|
|
45593
|
+
// Use all steps since the lightbox can scale up and down with the viewport.
|
|
45594
|
+
srcSet: steps2.map((size) => {
|
|
45595
|
+
const src = new URL(base);
|
|
45596
|
+
src.searchParams.set('scale-down-to', size.toString());
|
|
45597
|
+
return `${src.toString()} ${size}w`;
|
|
45598
|
+
}).join(', '),
|
|
45599
|
+
};
|
|
45600
|
+
}
|
|
45601
|
+
var distortionTransforms = /* @__PURE__ */ (() => ({
|
|
45602
|
+
x: void 0,
|
|
45603
|
+
y: void 0,
|
|
45604
|
+
z: 0,
|
|
45605
|
+
translateX: void 0,
|
|
45606
|
+
translateY: void 0,
|
|
45607
|
+
translateZ: 0,
|
|
45608
|
+
rotate: void 0,
|
|
45609
|
+
rotateX: 0,
|
|
45610
|
+
rotateY: 0,
|
|
45611
|
+
rotateZ: void 0,
|
|
45612
|
+
scale: 1,
|
|
45613
|
+
scaleX: 1,
|
|
45614
|
+
scaleY: 1,
|
|
45615
|
+
scaleZ: 1,
|
|
45616
|
+
skew: 0,
|
|
45617
|
+
skewX: 0,
|
|
45618
|
+
skewY: 0,
|
|
45619
|
+
originX: void 0,
|
|
45620
|
+
originY: void 0,
|
|
45621
|
+
originZ: void 0,
|
|
45622
|
+
perspective: 0,
|
|
45623
|
+
transformPerspective: 0,
|
|
45624
|
+
}))();
|
|
45625
|
+
function isDistortionTransform(values) {
|
|
45626
|
+
if (!values)
|
|
45627
|
+
return false;
|
|
45628
|
+
for (const k in values) {
|
|
45629
|
+
if (!(k in distortionTransforms))
|
|
45630
|
+
continue;
|
|
45631
|
+
const identityValue = distortionTransforms[k];
|
|
45632
|
+
const value = values[k];
|
|
45633
|
+
if (!isNumber2(identityValue) || !isNumber2(value))
|
|
45634
|
+
continue;
|
|
45635
|
+
if (identityValue === value)
|
|
45636
|
+
continue;
|
|
45637
|
+
return true;
|
|
45638
|
+
}
|
|
45639
|
+
return false;
|
|
45640
|
+
}
|
|
45641
|
+
function isDistorted(ref) {
|
|
45642
|
+
var _a, _b;
|
|
45643
|
+
const element = visualElementStore.get(ref.current);
|
|
45644
|
+
if (!element)
|
|
45645
|
+
return false;
|
|
45646
|
+
if (isDistortionTransform((_a = element.projection) == null ? void 0 : _a.latestValues))
|
|
45647
|
+
return true;
|
|
45648
|
+
const path = (_b = element.projection) == null ? void 0 : _b.path;
|
|
45649
|
+
if (!path || path.length === 0)
|
|
45650
|
+
return false;
|
|
45651
|
+
for (const p of path) {
|
|
45652
|
+
if (isDistortionTransform(p.latestValues))
|
|
45653
|
+
return true;
|
|
45654
|
+
}
|
|
45655
|
+
return false;
|
|
45656
|
+
}
|
|
45657
|
+
var enterExitBackdropAnimation = {
|
|
45658
|
+
opacity: 0,
|
|
45659
|
+
};
|
|
45660
|
+
var targetBackdropAnimation = {
|
|
45661
|
+
opacity: 1,
|
|
45662
|
+
};
|
|
45663
|
+
function withLightboxEffect(Component18) {
|
|
45664
|
+
return forwardRef(function LightboxEffect({ lightbox, lightboxClassName, onClick, ...props }, forwardedRef) {
|
|
45665
|
+
const config = useContext(MotionConfigContext);
|
|
45666
|
+
const fallbackRef = useRef3(null);
|
|
45667
|
+
const ref = forwardedRef ?? fallbackRef;
|
|
45668
|
+
const decodePromiseRef = useRef3();
|
|
45669
|
+
const image = useMemo2(() => createImageWithSrcSet(lightbox, props.background), [lightbox, props.background,]);
|
|
45670
|
+
const [open, setOpen,] = useState(false);
|
|
45671
|
+
const [openOverrides, setOpenOverrides,] = useState();
|
|
45672
|
+
const onOpen = useCallback(() => {
|
|
45673
|
+
if (!lightbox)
|
|
45674
|
+
return;
|
|
45675
|
+
if (open) {
|
|
45676
|
+
startTransition2(() => {
|
|
45677
|
+
setOpen(true);
|
|
45678
|
+
});
|
|
45679
|
+
return;
|
|
45680
|
+
}
|
|
45681
|
+
frame.read(() => {
|
|
45682
|
+
if (!ref.current)
|
|
45683
|
+
return;
|
|
45684
|
+
const style22 = getComputedStyle(ref.current);
|
|
45685
|
+
const hasBorder = ref.current.getAttribute('data-border') === 'true';
|
|
45686
|
+
const borderStyle2 = hasBorder ? getComputedStyle(ref.current, '::after') : void 0;
|
|
45687
|
+
const width = ref.current.offsetWidth ?? 1;
|
|
45688
|
+
const height = ref.current.offsetHeight ?? 1;
|
|
45689
|
+
const transition2 = isDistorted(ref)
|
|
45690
|
+
? {
|
|
45691
|
+
duration: 0,
|
|
45692
|
+
}
|
|
45693
|
+
: lightbox.transition;
|
|
45694
|
+
startTransition2(() => {
|
|
45695
|
+
setOpenOverrides({
|
|
45696
|
+
borderRadius: style22.borderRadius,
|
|
45697
|
+
aspectRatio: width / (height || 1),
|
|
45698
|
+
borderTop: borderStyle2 == null ? void 0 : borderStyle2.borderTopWidth,
|
|
45699
|
+
borderRight: borderStyle2 == null ? void 0 : borderStyle2.borderRightWidth,
|
|
45700
|
+
borderBottom: borderStyle2 == null ? void 0 : borderStyle2.borderBottomWidth,
|
|
45701
|
+
borderLeft: borderStyle2 == null ? void 0 : borderStyle2.borderLeftWidth,
|
|
45702
|
+
borderStyle: borderStyle2 == null ? void 0 : borderStyle2.borderStyle,
|
|
45703
|
+
borderColor: borderStyle2 == null ? void 0 : borderStyle2.borderColor,
|
|
45704
|
+
transition: transition2,
|
|
45705
|
+
imageRendering: style22.imageRendering,
|
|
45706
|
+
filter: style22.filter,
|
|
45707
|
+
});
|
|
45708
|
+
setOpen(true);
|
|
45709
|
+
});
|
|
45710
|
+
});
|
|
45711
|
+
}, [lightbox, open, ref,]);
|
|
45712
|
+
const aspectRatio2 = (openOverrides == null ? void 0 : openOverrides.aspectRatio) ?? 1;
|
|
45713
|
+
const decode = useStableCallback(() => {
|
|
45714
|
+
var _a;
|
|
45715
|
+
if (!lightbox || !image || !image.src)
|
|
45716
|
+
return;
|
|
45717
|
+
const srcDecodePromise = (_a = decodePromiseRef.current) == null ? void 0 : _a[image.src];
|
|
45718
|
+
if (srcDecodePromise)
|
|
45719
|
+
return srcDecodePromise;
|
|
45720
|
+
const width = calculateImageWidth(aspectRatio2, lightbox.maxWidth, getTotalHorizontalPadding(lightbox), getTotalVerticalPadding(lightbox));
|
|
45721
|
+
const promise = optimisticallyDecodeImage(image, {
|
|
45722
|
+
width,
|
|
45723
|
+
height: width * aspectRatio2,
|
|
45724
|
+
});
|
|
45725
|
+
decodePromiseRef.current = {
|
|
45726
|
+
[image.src]: promise,
|
|
45727
|
+
};
|
|
45728
|
+
return promise;
|
|
45729
|
+
});
|
|
45730
|
+
const handleClick = useCallback(async (e) => {
|
|
45731
|
+
onClick == null ? void 0 : onClick(e);
|
|
45732
|
+
if (open || !lightbox || !image)
|
|
45733
|
+
return;
|
|
45734
|
+
await decode();
|
|
45735
|
+
onOpen();
|
|
45736
|
+
}, [onClick, onOpen, open, image, lightbox, decode,]);
|
|
45737
|
+
const onClose = useCallback((e) => {
|
|
45738
|
+
e == null ? void 0 : e.stopPropagation();
|
|
45739
|
+
startTransition2(() => {
|
|
45740
|
+
setOpen(false);
|
|
45741
|
+
});
|
|
45742
|
+
}, []);
|
|
45743
|
+
useEscToClose(open, onClose);
|
|
45744
|
+
useEffect(() => {
|
|
45745
|
+
if (!lightbox)
|
|
45746
|
+
return;
|
|
45747
|
+
let timer;
|
|
45748
|
+
function enter() {
|
|
45749
|
+
timer = setTimeout(() => {
|
|
45750
|
+
void decode();
|
|
45751
|
+
}, 50);
|
|
45752
|
+
}
|
|
45753
|
+
function clear() {
|
|
45754
|
+
clearTimeout(timer);
|
|
45755
|
+
}
|
|
45756
|
+
const currentRef = ref.current;
|
|
45757
|
+
currentRef == null ? void 0 : currentRef.addEventListener('mouseenter', enter);
|
|
45758
|
+
currentRef == null ? void 0 : currentRef.addEventListener('mouseleave', clear);
|
|
45759
|
+
currentRef == null ? void 0 : currentRef.addEventListener('pointerdown', decode);
|
|
45760
|
+
return () => {
|
|
45761
|
+
clear();
|
|
45762
|
+
currentRef == null ? void 0 : currentRef.removeEventListener('mouseenter', enter);
|
|
45763
|
+
currentRef == null ? void 0 : currentRef.removeEventListener('mouseleave', clear);
|
|
45764
|
+
currentRef == null ? void 0 : currentRef.removeEventListener('pointerdown', decode);
|
|
45765
|
+
};
|
|
45766
|
+
}, [decode, ref, lightbox,]);
|
|
45767
|
+
const fallbackLayoutId = useId();
|
|
45768
|
+
const transition = (openOverrides == null ? void 0 : openOverrides.transition) ?? props.transition ?? config.transition;
|
|
45769
|
+
const borderRadius2 = openOverrides == null ? void 0 : openOverrides.borderRadius;
|
|
45770
|
+
const imageRendering = openOverrides == null ? void 0 : openOverrides.imageRendering;
|
|
45771
|
+
const filter2 = openOverrides == null ? void 0 : openOverrides.filter;
|
|
45772
|
+
const borderTop = openOverrides == null ? void 0 : openOverrides.borderTop;
|
|
45773
|
+
const borderRight = openOverrides == null ? void 0 : openOverrides.borderRight;
|
|
45774
|
+
const borderBottom = openOverrides == null ? void 0 : openOverrides.borderBottom;
|
|
45775
|
+
const borderLeft = openOverrides == null ? void 0 : openOverrides.borderLeft;
|
|
45776
|
+
const borderStyle = openOverrides == null ? void 0 : openOverrides.borderStyle;
|
|
45777
|
+
const borderColor = openOverrides == null ? void 0 : openOverrides.borderColor;
|
|
45778
|
+
const hasAnyBorder = Boolean(borderTop || borderRight || borderBottom || borderLeft || borderStyle || borderColor);
|
|
45779
|
+
const border = hasAnyBorder
|
|
45780
|
+
? {
|
|
45781
|
+
'--border-top-width': borderTop,
|
|
45782
|
+
'--border-right-width': borderRight,
|
|
45783
|
+
'--border-bottom-width': borderBottom,
|
|
45784
|
+
'--border-left-width': borderLeft,
|
|
45785
|
+
'--border-style': borderStyle,
|
|
45786
|
+
'--border-color': borderColor,
|
|
45787
|
+
}
|
|
45788
|
+
: void 0;
|
|
45789
|
+
const portalProps = {
|
|
45790
|
+
[portalIdAttribute]: props.id,
|
|
45791
|
+
};
|
|
45792
|
+
const paddingTop = getSidePadding(lightbox == null ? void 0 : lightbox.paddingTop, lightbox == null ? void 0 : lightbox.padding);
|
|
45793
|
+
const paddingBottom = getSidePadding(lightbox == null ? void 0 : lightbox.paddingBottom, lightbox == null ? void 0 : lightbox.padding);
|
|
45794
|
+
const paddingLeft = getSidePadding(lightbox == null ? void 0 : lightbox.paddingLeft, lightbox == null ? void 0 : lightbox.padding);
|
|
45795
|
+
const paddingRight = getSidePadding(lightbox == null ? void 0 : lightbox.paddingRight, lightbox == null ? void 0 : lightbox.padding);
|
|
45796
|
+
const style2 = (openOverrides == null ? void 0 : openOverrides.borderRadius)
|
|
45797
|
+
? {
|
|
45798
|
+
...props.style,
|
|
45799
|
+
borderRadius: openOverrides.borderRadius,
|
|
45800
|
+
}
|
|
45801
|
+
: props.style;
|
|
45802
|
+
const layoutDependency = open ? props.layoutDependency ? `${props.layoutDependency}-open` : 'open' : props.layoutDependency;
|
|
45803
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
45804
|
+
children: [
|
|
45805
|
+
/* @__PURE__ */ jsx3(Component18, {
|
|
45806
|
+
...props,
|
|
45807
|
+
style: style2,
|
|
45808
|
+
onClick: handleClick,
|
|
45809
|
+
layoutId: props.layoutId ?? (lightbox ? fallbackLayoutId : void 0),
|
|
45810
|
+
ref,
|
|
45811
|
+
layoutDependency,
|
|
45812
|
+
transition,
|
|
45813
|
+
}),
|
|
45814
|
+
/* @__PURE__ */ jsx3(AnimatePresence, {
|
|
45815
|
+
children: open && lightbox && image && /* @__PURE__ */ jsx3(Fragment, {
|
|
45816
|
+
children: createPortal(
|
|
45817
|
+
/* @__PURE__ */ jsxs(Fragment, {
|
|
45818
|
+
children: [
|
|
45819
|
+
/* @__PURE__ */ jsx3(motion.div, {
|
|
45820
|
+
...portalProps,
|
|
45821
|
+
className: lightboxClassName,
|
|
45822
|
+
onClick: onClose,
|
|
45823
|
+
style: {
|
|
45824
|
+
position: 'fixed',
|
|
45825
|
+
inset: 0,
|
|
45826
|
+
zIndex: lightbox.zIndex,
|
|
45827
|
+
backgroundColor: lightbox.backdrop ?? 'transparent',
|
|
45828
|
+
},
|
|
45829
|
+
transition,
|
|
45830
|
+
initial: enterExitBackdropAnimation,
|
|
45831
|
+
animate: targetBackdropAnimation,
|
|
45832
|
+
exit: enterExitBackdropAnimation,
|
|
45833
|
+
onTransitionEnd: () => {
|
|
45834
|
+
startTransition2(() => {
|
|
45835
|
+
setOpenOverrides(void 0);
|
|
45836
|
+
});
|
|
45837
|
+
},
|
|
45838
|
+
}),
|
|
45839
|
+
/* @__PURE__ */ jsx3('div', {
|
|
45840
|
+
...portalProps,
|
|
45841
|
+
className: lightboxClassName,
|
|
45842
|
+
style: {
|
|
45843
|
+
alignItems: 'center',
|
|
45844
|
+
display: 'flex',
|
|
45845
|
+
inset: `${paddingTop}px ${paddingRight}px ${paddingBottom}px ${paddingLeft}px`,
|
|
45846
|
+
justifyContent: 'center',
|
|
45847
|
+
pointerEvents: 'none',
|
|
45848
|
+
position: 'fixed',
|
|
45849
|
+
zIndex: lightbox.zIndex,
|
|
45850
|
+
},
|
|
45851
|
+
children: /* @__PURE__ */ jsx3('div', {
|
|
45852
|
+
style: {
|
|
45853
|
+
alignItems: 'center',
|
|
45854
|
+
aspectRatio: aspectRatio2,
|
|
45855
|
+
display: 'flex',
|
|
45856
|
+
justifyContent: 'center',
|
|
45857
|
+
maxHeight: '100%',
|
|
45858
|
+
position: 'relative',
|
|
45859
|
+
width: '100%',
|
|
45860
|
+
maxWidth: lightbox.maxWidth,
|
|
45861
|
+
},
|
|
45862
|
+
children: /* @__PURE__ */ jsx3(motion.div, {
|
|
45863
|
+
layoutId: props.layoutId ?? fallbackLayoutId,
|
|
45864
|
+
transition,
|
|
45865
|
+
onClick: onOpen,
|
|
45866
|
+
className: 'framer-lightbox-container',
|
|
45867
|
+
'data-border': hasAnyBorder,
|
|
45868
|
+
style: {
|
|
45869
|
+
aspectRatio: aspectRatio2,
|
|
45870
|
+
borderRadius: borderRadius2,
|
|
45871
|
+
bottom: 0,
|
|
45872
|
+
position: 'absolute',
|
|
45873
|
+
top: 0,
|
|
45874
|
+
userSelect: 'none',
|
|
45875
|
+
imageRendering,
|
|
45876
|
+
filter: filter2,
|
|
45877
|
+
...border,
|
|
45878
|
+
},
|
|
45879
|
+
children: /* @__PURE__ */ jsx3(BackgroundImageComponent, {
|
|
45880
|
+
image,
|
|
45881
|
+
alt: image.alt,
|
|
45882
|
+
draggable: props.draggable,
|
|
45883
|
+
}),
|
|
45884
|
+
}),
|
|
45885
|
+
}),
|
|
45886
|
+
}),
|
|
45887
|
+
],
|
|
45888
|
+
}), getPortalContainer2()),
|
|
45889
|
+
}, 'backdrop'),
|
|
45890
|
+
}),
|
|
45891
|
+
],
|
|
45892
|
+
});
|
|
45893
|
+
});
|
|
45894
|
+
}
|
|
45895
|
+
var Component16 = /* @__PURE__ */ React4.forwardRef(function Image2(props, ref) {
|
|
45358
45896
|
const { background, children, alt, draggable, fitImageDimension, style: styleFromProps, ...rest } = props;
|
|
45359
45897
|
const style2 = {
|
|
45360
45898
|
...styleFromProps,
|
|
@@ -45402,6 +45940,7 @@ var Image2 = /* @__PURE__ */ React4.forwardRef(function Image3(props, ref) {
|
|
|
45402
45940
|
],
|
|
45403
45941
|
});
|
|
45404
45942
|
});
|
|
45943
|
+
var Image3 = /* @__PURE__ */ withLightboxEffect(Component16);
|
|
45405
45944
|
var frameFromElement = (element) => {
|
|
45406
45945
|
const frame2 = Rect.fromRect(element.getBoundingClientRect());
|
|
45407
45946
|
frame2.x = frame2.x + safeWindow.scrollX;
|
|
@@ -45744,7 +46283,7 @@ var defaultValues2 = {
|
|
|
45744
46283
|
function isEffectKey(key7) {
|
|
45745
46284
|
return key7 in defaultValues2;
|
|
45746
46285
|
}
|
|
45747
|
-
function createKeyframes(effect) {
|
|
46286
|
+
function createKeyframes(effect, shouldReduceMotion) {
|
|
45748
46287
|
const out = {};
|
|
45749
46288
|
for (const key7 in effect) {
|
|
45750
46289
|
if (!isEffectKey(key7))
|
|
@@ -45753,6 +46292,8 @@ function createKeyframes(effect) {
|
|
|
45753
46292
|
const defaultValue = defaultValues2[key7];
|
|
45754
46293
|
if (isUndefined(effectValue) || isUndefined(defaultValue))
|
|
45755
46294
|
continue;
|
|
46295
|
+
if (shouldReduceMotion && key7 !== 'opacity')
|
|
46296
|
+
continue;
|
|
45756
46297
|
out[key7] = [effectValue, defaultValue,];
|
|
45757
46298
|
}
|
|
45758
46299
|
return out;
|
|
@@ -45760,7 +46301,16 @@ function createKeyframes(effect) {
|
|
|
45760
46301
|
var emojiSplitRe = /* @__PURE__ */ (() => {
|
|
45761
46302
|
return new RegExp('\\p{Regional_Indicator}{2}|\\p{Emoji}\\p{Emoji_Modifier}?\\p{Variation_Selector}?(?:\\u{200d}\\p{Emoji}\\p{Emoji_Modifier}?\\p{Variation_Selector}?)*|.', 'gu');
|
|
45762
46303
|
})();
|
|
45763
|
-
function tokenizeText(text, tokenization = 'character', elements, style2) {
|
|
46304
|
+
function tokenizeText(text, tokenization = 'character', elements, shouldReduceMotion, style2) {
|
|
46305
|
+
if (shouldReduceMotion) {
|
|
46306
|
+
const ref = newOverrideableRef();
|
|
46307
|
+
elements.add(ref);
|
|
46308
|
+
return /* @__PURE__ */ jsx3('span', {
|
|
46309
|
+
ref,
|
|
46310
|
+
style: style2,
|
|
46311
|
+
children: text,
|
|
46312
|
+
});
|
|
46313
|
+
}
|
|
45764
46314
|
switch (tokenization) {
|
|
45765
46315
|
case 'character':
|
|
45766
46316
|
// When we want to animate "lines" that aren't split by newlines, but
|
|
@@ -45853,7 +46403,7 @@ function transformString(effect) {
|
|
|
45853
46403
|
transforms.push(`skewY(${effect.skewY}deg)`);
|
|
45854
46404
|
return transforms.join(' ');
|
|
45855
46405
|
}
|
|
45856
|
-
function getInitialEffectStyle(canPlay, canAnimate2, effect) {
|
|
46406
|
+
function getInitialEffectStyle(canPlay, canAnimate2, effect, shouldReduceMotion) {
|
|
45857
46407
|
if (!effect || !effect.effect)
|
|
45858
46408
|
return void 0;
|
|
45859
46409
|
const type = effect.type;
|
|
@@ -45865,8 +46415,8 @@ function getInitialEffectStyle(canPlay, canAnimate2, effect) {
|
|
|
45865
46415
|
return void 0;
|
|
45866
46416
|
return {
|
|
45867
46417
|
opacity: effect.effect.opacity,
|
|
45868
|
-
filter: effect.effect.filter,
|
|
45869
|
-
transform: transformString(effect.effect),
|
|
46418
|
+
filter: shouldReduceMotion ? void 0 : effect.effect.filter,
|
|
46419
|
+
transform: shouldReduceMotion ? void 0 : transformString(effect.effect),
|
|
45870
46420
|
};
|
|
45871
46421
|
case 'line':
|
|
45872
46422
|
case 'word':
|
|
@@ -45880,8 +46430,8 @@ function getInitialEffectStyle(canPlay, canAnimate2, effect) {
|
|
|
45880
46430
|
return {
|
|
45881
46431
|
display: 'inline-block',
|
|
45882
46432
|
opacity: effect.effect.opacity,
|
|
45883
|
-
filter: effect.effect.filter,
|
|
45884
|
-
transform: transformString(effect.effect),
|
|
46433
|
+
filter: shouldReduceMotion ? void 0 : effect.effect.filter,
|
|
46434
|
+
transform: shouldReduceMotion ? void 0 : transformString(effect.effect),
|
|
45885
46435
|
};
|
|
45886
46436
|
}
|
|
45887
46437
|
default:
|
|
@@ -45892,6 +46442,7 @@ function useTextEffect(config, ref, preview) {
|
|
|
45892
46442
|
const elements = useConstant2(() => /* @__PURE__ */ new Set());
|
|
45893
46443
|
const isRenderingStaticContent = isStaticRenderer();
|
|
45894
46444
|
const canPlay = preview || !isRenderingStaticContent;
|
|
46445
|
+
const shouldReduceMotion = useReducedMotionConfig();
|
|
45895
46446
|
const state = React2.useRef({
|
|
45896
46447
|
hasMounted: false,
|
|
45897
46448
|
hasAnimatedOnce: false,
|
|
@@ -45925,7 +46476,7 @@ function useTextEffect(config, ref, preview) {
|
|
|
45925
46476
|
const cleanupRef = {
|
|
45926
46477
|
current: void 0,
|
|
45927
46478
|
};
|
|
45928
|
-
void runAppearEffect(tokenization2, effect.effect, elements, transition, startDelay, repeat, () => {
|
|
46479
|
+
void runAppearEffect(tokenization2, effect.effect, elements, transition, startDelay, repeat, shouldReduceMotion, () => {
|
|
45929
46480
|
Object.assign(state.current, {
|
|
45930
46481
|
isAnimating: false,
|
|
45931
46482
|
});
|
|
@@ -45976,9 +46527,9 @@ function useTextEffect(config, ref, preview) {
|
|
|
45976
46527
|
if (!effectEnabled)
|
|
45977
46528
|
return void 0;
|
|
45978
46529
|
const { hasMounted, hasAnimatedOnce, effect, } = state.current;
|
|
45979
|
-
const effectStyle = getInitialEffectStyle(canPlay, preview || mayAnimate(hasMounted, hasAnimatedOnce, effect), state.current.effect);
|
|
46530
|
+
const effectStyle = getInitialEffectStyle(canPlay, preview || mayAnimate(hasMounted, hasAnimatedOnce, effect), state.current.effect, shouldReduceMotion);
|
|
45980
46531
|
return {
|
|
45981
|
-
text: (text) => tokenizeText(text, tokenization, elements, effectStyle),
|
|
46532
|
+
text: (text) => tokenizeText(text, tokenization, elements, shouldReduceMotion, effectStyle),
|
|
45982
46533
|
props: (style2) => {
|
|
45983
46534
|
if ((effect == null ? void 0 : effect.tokenization) !== 'element')
|
|
45984
46535
|
return void 0;
|
|
@@ -46002,7 +46553,7 @@ function useTextEffect(config, ref, preview) {
|
|
|
46002
46553
|
switch (type) {
|
|
46003
46554
|
case 'appear': {
|
|
46004
46555
|
const { transition, startDelay, } = effect;
|
|
46005
|
-
void runAppearEffect(tokenization, effect.effect, elements, transition, startDelay);
|
|
46556
|
+
void runAppearEffect(tokenization, effect.effect, elements, transition, startDelay, false, shouldReduceMotion);
|
|
46006
46557
|
break;
|
|
46007
46558
|
}
|
|
46008
46559
|
default:
|
|
@@ -46022,8 +46573,8 @@ function mayAnimate(hasMounted, hasAnimatedOnce, effect) {
|
|
|
46022
46573
|
hasAnimatedOnce && !(effect == null ? void 0 : effect.repeat) &&
|
|
46023
46574
|
((effect == null ? void 0 : effect.trigger) === 'onInView' || (effect == null ? void 0 : effect.trigger) === 'onScrollTarget'));
|
|
46024
46575
|
}
|
|
46025
|
-
async function runAppearEffect(tokenization = 'character', effect, elements, transition, startDelay = 0, repeat = false, callback, cleanupRef) {
|
|
46026
|
-
const enter = createKeyframes(effect);
|
|
46576
|
+
async function runAppearEffect(tokenization = 'character', effect, elements, transition, startDelay = 0, repeat = false, shouldReduceMotion, callback, cleanupRef) {
|
|
46577
|
+
const enter = createKeyframes(effect, shouldReduceMotion);
|
|
46027
46578
|
const controller = new AbortController();
|
|
46028
46579
|
if (cleanupRef)
|
|
46029
46580
|
cleanupRef.current = () => controller.abort();
|
|
@@ -46043,13 +46594,20 @@ async function runAppearEffect(tokenization = 'character', effect, elements, tra
|
|
|
46043
46594
|
}).then(() => callback == null ? void 0 : callback());
|
|
46044
46595
|
if (!repeat || !cleanupRef)
|
|
46045
46596
|
return;
|
|
46046
|
-
cleanupRef.current = () =>
|
|
46047
|
-
|
|
46048
|
-
|
|
46049
|
-
|
|
46050
|
-
|
|
46051
|
-
|
|
46052
|
-
|
|
46597
|
+
cleanupRef.current = () => {
|
|
46598
|
+
const actualEffect = shouldReduceMotion
|
|
46599
|
+
? {
|
|
46600
|
+
opacity: effect.opacity,
|
|
46601
|
+
}
|
|
46602
|
+
: effect;
|
|
46603
|
+
void animate(list, actualEffect, {
|
|
46604
|
+
...transition,
|
|
46605
|
+
restDelta: 1e-3,
|
|
46606
|
+
delay: stagger((transition == null ? void 0 : transition.delay) ?? 0, {
|
|
46607
|
+
startDelay,
|
|
46608
|
+
}),
|
|
46609
|
+
});
|
|
46610
|
+
};
|
|
46053
46611
|
return;
|
|
46054
46612
|
}
|
|
46055
46613
|
case 'line': {
|
|
@@ -46086,8 +46644,13 @@ async function runAppearEffect(tokenization = 'character', effect, elements, tra
|
|
|
46086
46644
|
cleanupRef.current = () => {
|
|
46087
46645
|
if (list.length === 0)
|
|
46088
46646
|
return;
|
|
46647
|
+
const actualEffect = shouldReduceMotion
|
|
46648
|
+
? {
|
|
46649
|
+
opacity: effect.opacity,
|
|
46650
|
+
}
|
|
46651
|
+
: effect;
|
|
46089
46652
|
list.forEach((group, i) => {
|
|
46090
|
-
void animate(group,
|
|
46653
|
+
void animate(group, actualEffect, {
|
|
46091
46654
|
...transition,
|
|
46092
46655
|
restDelta: 1e-3,
|
|
46093
46656
|
delay: startDelay + i * ((transition == null ? void 0 : transition.delay) ?? 0),
|
|
@@ -46192,13 +46755,12 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
|
|
|
46192
46755
|
return null;
|
|
46193
46756
|
const isHidden = isEditable && environment2() === RenderTarget.canvas;
|
|
46194
46757
|
const containerStyle = {
|
|
46195
|
-
outline: 'none',
|
|
46196
|
-
display: 'flex',
|
|
46197
|
-
flexDirection: 'column',
|
|
46198
|
-
justifyContent: convertVerticalAlignment(verticalAlignment),
|
|
46199
46758
|
opacity: isHidden ? 0 : opacity,
|
|
46200
|
-
flexShrink: 0,
|
|
46201
46759
|
};
|
|
46760
|
+
const justifyContent = convertVerticalAlignment(verticalAlignment);
|
|
46761
|
+
if (justifyContent !== defaultRichTextContainerStyle.justifyContent) {
|
|
46762
|
+
containerStyle.justifyContent = justifyContent;
|
|
46763
|
+
}
|
|
46202
46764
|
const positionStyle = {};
|
|
46203
46765
|
const restrictedRenderTarget = RenderTarget.hasRestrictions();
|
|
46204
46766
|
const frame2 = calculateRect(props, parentSize || 0, false);
|
|
@@ -46244,11 +46806,11 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
|
|
|
46244
46806
|
if (layoutId) {
|
|
46245
46807
|
rest.layout = 'preserve-aspect';
|
|
46246
46808
|
}
|
|
46247
|
-
const
|
|
46809
|
+
const Component18 = htmlElementAsMotionComponent(props.as);
|
|
46248
46810
|
const dataFramerName = rest['data-framer-name'] ?? name;
|
|
46249
46811
|
if (isString(props.viewBox)) {
|
|
46250
46812
|
if (props.as !== void 0) {
|
|
46251
|
-
return /* @__PURE__ */ jsx3(
|
|
46813
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
46252
46814
|
...rest,
|
|
46253
46815
|
ref: containerRef,
|
|
46254
46816
|
style: containerStyle,
|
|
@@ -46282,7 +46844,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
|
|
|
46282
46844
|
});
|
|
46283
46845
|
}
|
|
46284
46846
|
}
|
|
46285
|
-
return /* @__PURE__ */ jsx3(
|
|
46847
|
+
return /* @__PURE__ */ jsx3(Component18, {
|
|
46286
46848
|
...rest,
|
|
46287
46849
|
ref: containerRef,
|
|
46288
46850
|
style: containerStyle,
|
|
@@ -48611,10 +49173,13 @@ function initialRouteComponent(component) {
|
|
|
48611
49173
|
function useInitialRouteComponent(routes, homeNodeId) {
|
|
48612
49174
|
var _a;
|
|
48613
49175
|
const InitialRouteComponent = (_a = routes[homeNodeId]) == null ? void 0 : _a.page;
|
|
48614
|
-
const [RouteComponent, setRouteComponent,] = useState(initialRouteComponent(InitialRouteComponent));
|
|
49176
|
+
const [RouteComponent, setRouteComponent,] = useState(() => initialRouteComponent(InitialRouteComponent));
|
|
48615
49177
|
useEffect(() => {
|
|
48616
49178
|
if (withPreload(InitialRouteComponent)) {
|
|
48617
|
-
void
|
|
49179
|
+
void (async () => {
|
|
49180
|
+
await InitialRouteComponent.preload();
|
|
49181
|
+
setRouteComponent(InitialRouteComponent);
|
|
49182
|
+
})();
|
|
48618
49183
|
}
|
|
48619
49184
|
}, []);
|
|
48620
49185
|
return RouteComponent;
|
|
@@ -48651,7 +49216,7 @@ var package_default = {
|
|
|
48651
49216
|
'@types/dom-navigation': '^1.0.5',
|
|
48652
49217
|
'@types/fontfaceobserver': '2.1',
|
|
48653
49218
|
'@types/google.fonts': '1.0',
|
|
48654
|
-
'@types/node': '22.
|
|
49219
|
+
'@types/node': '22.18',
|
|
48655
49220
|
'@types/react': '18.2',
|
|
48656
49221
|
'@types/react-dom': '18.2',
|
|
48657
49222
|
'@types/yargs': '^17.0.33',
|
|
@@ -48665,7 +49230,6 @@ var package_default = {
|
|
|
48665
49230
|
'jest-diff': '^29.3.1',
|
|
48666
49231
|
'jest-environment-jsdom': '^29.3.1',
|
|
48667
49232
|
'jest-environment-jsdom-global': '^4.0.0',
|
|
48668
|
-
'jest-junit': '^15.0.0',
|
|
48669
49233
|
react: '^18.2.0',
|
|
48670
49234
|
'react-dom': '^18.2.0',
|
|
48671
49235
|
semver: '^7.7.1',
|
|
@@ -48673,7 +49237,7 @@ var package_default = {
|
|
|
48673
49237
|
yargs: '^17.7.2',
|
|
48674
49238
|
},
|
|
48675
49239
|
peerDependencies: {
|
|
48676
|
-
'framer-motion': '
|
|
49240
|
+
'framer-motion': '12.20.2',
|
|
48677
49241
|
react: '^18.2.0',
|
|
48678
49242
|
'react-dom': '^18.2.0',
|
|
48679
49243
|
},
|
|
@@ -48691,7 +49255,7 @@ MotionValue.prototype.addChild = function ({ transformer = (v) => v, }) {
|
|
|
48691
49255
|
if (false) {
|
|
48692
49256
|
MainLoop2.start();
|
|
48693
49257
|
}
|
|
48694
|
-
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,
|
|
49258
|
+
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, cssCollector, 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, Image3 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, ResetOuterLinkContext, 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, usePageInView, usePrefetch, usePreloadQuery, usePresence, usePresenceData, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSiteRefs, useSpring, useSVGTemplate, useTime, useTracking, 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, };
|
|
48695
49259
|
//! Credit to Astro | MIT License
|
|
48696
49260
|
/**
|
|
48697
49261
|
* @license Emotion v11.0.0
|