unframer 2.6.1 → 2.6.2
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/dist/exporter.d.ts.map +1 -1
- package/dist/exporter.js +2 -1
- package/dist/exporter.js.map +1 -1
- package/dist/framer.d.ts.map +1 -1
- package/dist/framer.js +1272 -583
- package/dist/framer.js.map +1 -1
- package/esm/exporter.d.ts.map +1 -1
- package/esm/exporter.js +2 -1
- package/esm/exporter.js.map +1 -1
- package/esm/framer.d.ts.map +1 -1
- package/esm/framer.js +1257 -574
- package/esm/framer.js.map +1 -1
- package/package.json +1 -1
- package/src/exporter.ts +1 -0
- package/src/framer.js +1280 -574
package/esm/framer.js
CHANGED
|
@@ -18,7 +18,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
18
|
}
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
-
// https :https://app.framerstatic.com/chunk-
|
|
21
|
+
// https :https://app.framerstatic.com/chunk-VBDYROES.js
|
|
22
22
|
import { createContext, } from 'react';
|
|
23
23
|
import { useEffect, useLayoutEffect, } from 'react';
|
|
24
24
|
import { jsx, jsxs, } from 'react/jsx-runtime';
|
|
@@ -153,8 +153,23 @@ var MotionGlobalConfig = {
|
|
|
153
153
|
skipAnimations: false,
|
|
154
154
|
useManualTiming: false,
|
|
155
155
|
};
|
|
156
|
-
var LayoutGroupContext = createContext({});
|
|
157
156
|
var SwitchLayoutGroupContext = createContext({});
|
|
157
|
+
var LayoutGroupContext = createContext({});
|
|
158
|
+
var noop = (any) => any;
|
|
159
|
+
var warning = noop;
|
|
160
|
+
var invariant = noop;
|
|
161
|
+
if (false) {
|
|
162
|
+
warning = (check, message) => {
|
|
163
|
+
if (!check && typeof console !== 'undefined') {
|
|
164
|
+
console.warn(message);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
invariant = (check, message) => {
|
|
168
|
+
if (!check) {
|
|
169
|
+
throw new Error(message);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
158
173
|
var LazyContext = createContext({
|
|
159
174
|
strict: false,
|
|
160
175
|
});
|
|
@@ -309,7 +324,11 @@ function createRenderBatcher(scheduleNextBatch, allowKeepAlive) {
|
|
|
309
324
|
};
|
|
310
325
|
}
|
|
311
326
|
var { schedule: microtask, cancel: cancelMicrotask, } = createRenderBatcher(queueMicrotask, false);
|
|
312
|
-
function
|
|
327
|
+
function isRefObject(ref) {
|
|
328
|
+
return ref && typeof ref === 'object' && Object.prototype.hasOwnProperty.call(ref, 'current');
|
|
329
|
+
}
|
|
330
|
+
var scheduleHandoffComplete = false;
|
|
331
|
+
function useVisualElement(Component33, visualState, props, createVisualElement2, ProjectionNodeConstructor) {
|
|
313
332
|
const { visualElement: parent, } = useContext3(MotionContext);
|
|
314
333
|
const lazyContext = useContext3(LazyContext);
|
|
315
334
|
const presenceContext = useContext3(PresenceContext);
|
|
@@ -327,6 +346,11 @@ function useVisualElement(Component33, visualState, props, createVisualElement2)
|
|
|
327
346
|
});
|
|
328
347
|
}
|
|
329
348
|
const visualElement = visualElementRef.current;
|
|
349
|
+
const initialLayoutGroupConfig = useContext3(SwitchLayoutGroupContext);
|
|
350
|
+
if (visualElement && !visualElement.projection && ProjectionNodeConstructor &&
|
|
351
|
+
(visualElement.type === 'html' || visualElement.type === 'svg')) {
|
|
352
|
+
createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);
|
|
353
|
+
}
|
|
330
354
|
useInsertionEffect(() => {
|
|
331
355
|
visualElement && visualElement.update(props, presenceContext);
|
|
332
356
|
});
|
|
@@ -334,6 +358,7 @@ function useVisualElement(Component33, visualState, props, createVisualElement2)
|
|
|
334
358
|
useIsomorphicLayoutEffect(() => {
|
|
335
359
|
if (!visualElement)
|
|
336
360
|
return;
|
|
361
|
+
visualElement.updateFeatures();
|
|
337
362
|
microtask.render(visualElement.render);
|
|
338
363
|
if (wantsHandoff.current && visualElement.animationState) {
|
|
339
364
|
visualElement.animationState.animateChanges();
|
|
@@ -342,25 +367,58 @@ function useVisualElement(Component33, visualState, props, createVisualElement2)
|
|
|
342
367
|
useEffect(() => {
|
|
343
368
|
if (!visualElement)
|
|
344
369
|
return;
|
|
345
|
-
visualElement.updateFeatures();
|
|
346
370
|
if (!wantsHandoff.current && visualElement.animationState) {
|
|
347
371
|
visualElement.animationState.animateChanges();
|
|
348
372
|
}
|
|
349
373
|
if (wantsHandoff.current) {
|
|
350
374
|
wantsHandoff.current = false;
|
|
351
|
-
|
|
375
|
+
if (!scheduleHandoffComplete) {
|
|
376
|
+
scheduleHandoffComplete = true;
|
|
377
|
+
queueMicrotask(completeHandoff);
|
|
378
|
+
}
|
|
352
379
|
}
|
|
353
380
|
});
|
|
354
381
|
return visualElement;
|
|
355
382
|
}
|
|
356
|
-
function
|
|
357
|
-
|
|
383
|
+
function completeHandoff() {
|
|
384
|
+
window.HandoffComplete = true;
|
|
385
|
+
}
|
|
386
|
+
function createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {
|
|
387
|
+
const { layoutId, layout: layout2, drag: drag2, dragConstraints, layoutScroll, layoutRoot, } = props;
|
|
388
|
+
visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props['data-framer-portal-id'] ? void 0 : getClosestProjectingNode(visualElement.parent));
|
|
389
|
+
visualElement.projection.setOptions({
|
|
390
|
+
layoutId,
|
|
391
|
+
layout: layout2,
|
|
392
|
+
alwaysMeasureLayout: Boolean(drag2) || dragConstraints && isRefObject(dragConstraints),
|
|
393
|
+
visualElement,
|
|
394
|
+
scheduleRender: () => visualElement.scheduleRender(),
|
|
395
|
+
/**
|
|
396
|
+
* TODO: Update options in an effect. This could be tricky as it'll be too late
|
|
397
|
+
* to update by the time layout animations run.
|
|
398
|
+
* We also need to fix this safeToRemove by linking it up to the one returned by usePresence,
|
|
399
|
+
* ensuring it gets called if there's no potential layout animations.
|
|
400
|
+
*/
|
|
401
|
+
animationType: typeof layout2 === 'string' ? layout2 : 'both',
|
|
402
|
+
initialPromotionConfig,
|
|
403
|
+
layoutScroll,
|
|
404
|
+
layoutRoot,
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
function getClosestProjectingNode(visualElement) {
|
|
408
|
+
if (!visualElement)
|
|
409
|
+
return void 0;
|
|
410
|
+
return visualElement.options.allowProjection !== false ? visualElement.projection : getClosestProjectingNode(visualElement.parent);
|
|
358
411
|
}
|
|
359
412
|
function useMotionRef(visualState, visualElement, externalRef) {
|
|
360
413
|
return useCallback((instance) => {
|
|
361
414
|
instance && visualState.mount && visualState.mount(instance);
|
|
362
415
|
if (visualElement) {
|
|
363
|
-
|
|
416
|
+
if (instance) {
|
|
417
|
+
visualElement.mount(instance);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
visualElement.unmount();
|
|
421
|
+
}
|
|
364
422
|
}
|
|
365
423
|
if (externalRef) {
|
|
366
424
|
if (typeof externalRef === 'function') {
|
|
@@ -442,14 +500,10 @@ function createMotionComponent({ preloadedFeatures: preloadedFeatures2, createVi
|
|
|
442
500
|
const context = useCreateMotionContext(props);
|
|
443
501
|
const visualState = useVisualState2(props, isStatic);
|
|
444
502
|
if (!isStatic && isBrowser) {
|
|
445
|
-
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
MeasureLayout2 = context.visualElement.loadFeatures(
|
|
450
|
-
// Note: Pass the full new combined props to correctly re-render dynamic feature components.
|
|
451
|
-
configAndProps, isStrict, preloadedFeatures2, initialLayoutGroupConfig);
|
|
452
|
-
}
|
|
503
|
+
useStrictMode(configAndProps, preloadedFeatures2);
|
|
504
|
+
const layoutProjection = getProjectionFunctionality(configAndProps);
|
|
505
|
+
MeasureLayout2 = layoutProjection.MeasureLayout;
|
|
506
|
+
context.visualElement = useVisualElement(Component33, visualState, configAndProps, createVisualElement2, layoutProjection.ProjectionNode);
|
|
453
507
|
}
|
|
454
508
|
return jsxs(MotionContext.Provider, {
|
|
455
509
|
value: context,
|
|
@@ -469,6 +523,26 @@ function useLayoutId({ layoutId, }) {
|
|
|
469
523
|
const layoutGroupId = useContext3(LayoutGroupContext).id;
|
|
470
524
|
return layoutGroupId && layoutId !== void 0 ? layoutGroupId + '-' + layoutId : layoutId;
|
|
471
525
|
}
|
|
526
|
+
function useStrictMode(configAndProps, preloadedFeatures2) {
|
|
527
|
+
const isStrict = useContext3(LazyContext).strict;
|
|
528
|
+
if (false) {
|
|
529
|
+
const strictMessage = 'You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.';
|
|
530
|
+
configAndProps.ignoreStrict ? warning(false, strictMessage) : invariant(false, strictMessage);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
function getProjectionFunctionality(props) {
|
|
534
|
+
const { drag: drag2, layout: layout2, } = featureDefinitions;
|
|
535
|
+
if (!drag2 && !layout2)
|
|
536
|
+
return {};
|
|
537
|
+
const combined = Object.assign(Object.assign({}, drag2), layout2);
|
|
538
|
+
return {
|
|
539
|
+
MeasureLayout: (drag2 === null || drag2 === void 0 ? void 0 : drag2.isEnabled(props)) ||
|
|
540
|
+
(layout2 === null || layout2 === void 0 ? void 0 : layout2.isEnabled(props))
|
|
541
|
+
? combined.MeasureLayout
|
|
542
|
+
: void 0,
|
|
543
|
+
ProjectionNode: combined.ProjectionNode,
|
|
544
|
+
};
|
|
545
|
+
}
|
|
472
546
|
var scaleCorrectors = {};
|
|
473
547
|
function addScaleCorrector(correctors) {
|
|
474
548
|
Object.assign(scaleCorrectors, correctors);
|
|
@@ -536,6 +610,9 @@ var singleColorRegex = /^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}
|
|
|
536
610
|
function isString(v) {
|
|
537
611
|
return typeof v === 'string';
|
|
538
612
|
}
|
|
613
|
+
function isNullish(v) {
|
|
614
|
+
return v == null;
|
|
615
|
+
}
|
|
539
616
|
var createUnitType = (unit) => ({
|
|
540
617
|
test: (v) => isString(v) && v.endsWith(unit) && v.split(' ').length === 1,
|
|
541
618
|
parse: parseFloat,
|
|
@@ -705,7 +782,6 @@ function makeLatestValues(props, context, presenceContext, scrapeMotionValues) {
|
|
|
705
782
|
}
|
|
706
783
|
return values;
|
|
707
784
|
}
|
|
708
|
-
var noop = (any) => any;
|
|
709
785
|
var { schedule: frame, cancel: cancelFrame, state: frameData, steps, } = createRenderBatcher(typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame : noop, true);
|
|
710
786
|
var isPrimaryPointer = (event) => {
|
|
711
787
|
if (event.pointerType === 'mouse') {
|
|
@@ -785,20 +861,6 @@ function isDragActive() {
|
|
|
785
861
|
openGestureLock();
|
|
786
862
|
return false;
|
|
787
863
|
}
|
|
788
|
-
var warning = noop;
|
|
789
|
-
var invariant = noop;
|
|
790
|
-
if (false) {
|
|
791
|
-
warning = (check, message) => {
|
|
792
|
-
if (!check && typeof console !== 'undefined') {
|
|
793
|
-
console.warn(message);
|
|
794
|
-
}
|
|
795
|
-
};
|
|
796
|
-
invariant = (check, message) => {
|
|
797
|
-
if (!check) {
|
|
798
|
-
throw new Error(message);
|
|
799
|
-
}
|
|
800
|
-
};
|
|
801
|
-
}
|
|
802
864
|
var number = {
|
|
803
865
|
test: (v) => typeof v === 'number',
|
|
804
866
|
parse: parseFloat,
|
|
@@ -807,7 +869,8 @@ var number = {
|
|
|
807
869
|
var alpha = Object.assign(Object.assign({}, number), { transform: (v) => clamp(0, 1, v) });
|
|
808
870
|
var scale = Object.assign(Object.assign({}, number), { default: 1 });
|
|
809
871
|
var isColorString = (type, testProp) => (v) => {
|
|
810
|
-
return Boolean(isString(v) && singleColorRegex.test(v) && v.startsWith(type) ||
|
|
872
|
+
return Boolean(isString(v) && singleColorRegex.test(v) && v.startsWith(type) ||
|
|
873
|
+
testProp && !isNullish(v) && Object.prototype.hasOwnProperty.call(v, testProp));
|
|
811
874
|
};
|
|
812
875
|
var splitColor = (aName, bName, cName) => (v) => {
|
|
813
876
|
if (!isString(v))
|
|
@@ -2704,7 +2767,7 @@ var MotionValue = class {
|
|
|
2704
2767
|
* @internal
|
|
2705
2768
|
*/
|
|
2706
2769
|
constructor(init, options = {}) {
|
|
2707
|
-
this.version = '11.2.
|
|
2770
|
+
this.version = '11.2.13';
|
|
2708
2771
|
this.canTrackVelocity = null;
|
|
2709
2772
|
this.events = {};
|
|
2710
2773
|
this.updateAndNotify = (v, render = true) => {
|
|
@@ -3297,7 +3360,7 @@ function animateList(visualElement) {
|
|
|
3297
3360
|
}
|
|
3298
3361
|
function createAnimationState(visualElement) {
|
|
3299
3362
|
let animate22 = animateList(visualElement);
|
|
3300
|
-
|
|
3363
|
+
let state = createState();
|
|
3301
3364
|
let isInitialRender = true;
|
|
3302
3365
|
const buildResolvedTypeValues = (type) => (acc, definition) => {
|
|
3303
3366
|
var _a;
|
|
@@ -3448,6 +3511,10 @@ function createAnimationState(visualElement) {
|
|
|
3448
3511
|
setActive,
|
|
3449
3512
|
setAnimateFunction,
|
|
3450
3513
|
getState: () => state,
|
|
3514
|
+
reset: () => {
|
|
3515
|
+
state = createState();
|
|
3516
|
+
isInitialRender = true;
|
|
3517
|
+
},
|
|
3451
3518
|
};
|
|
3452
3519
|
}
|
|
3453
3520
|
function checkVariantsDidChange(prev, next) {
|
|
@@ -3497,9 +3564,8 @@ var AnimationFeature = class extends Feature {
|
|
|
3497
3564
|
}
|
|
3498
3565
|
updateAnimationControlsSubscription() {
|
|
3499
3566
|
const { animate: animate22, } = this.node.getProps();
|
|
3500
|
-
this.unmount();
|
|
3501
3567
|
if (isAnimationControls(animate22)) {
|
|
3502
|
-
this.
|
|
3568
|
+
this.unmountControls = animate22.subscribe(this.node);
|
|
3503
3569
|
}
|
|
3504
3570
|
}
|
|
3505
3571
|
/**
|
|
@@ -3515,7 +3581,11 @@ var AnimationFeature = class extends Feature {
|
|
|
3515
3581
|
this.updateAnimationControlsSubscription();
|
|
3516
3582
|
}
|
|
3517
3583
|
}
|
|
3518
|
-
unmount() {
|
|
3584
|
+
unmount() {
|
|
3585
|
+
var _a;
|
|
3586
|
+
this.node.animationState.reset();
|
|
3587
|
+
(_a = this.unmountControls) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
3588
|
+
}
|
|
3519
3589
|
};
|
|
3520
3590
|
var id = 0;
|
|
3521
3591
|
var ExitAnimationFeature = class extends Feature {
|
|
@@ -3692,7 +3762,7 @@ function updateMotionValuesFromProps(element, next, prev) {
|
|
|
3692
3762
|
willChange.add(key7);
|
|
3693
3763
|
}
|
|
3694
3764
|
if (false) {
|
|
3695
|
-
warnOnce(nextValue.version === '11.2.
|
|
3765
|
+
warnOnce(nextValue.version === '11.2.13', `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.13 may not work as expected.`);
|
|
3696
3766
|
}
|
|
3697
3767
|
}
|
|
3698
3768
|
else if (isMotionValue(prevValue)) {
|
|
@@ -3729,8 +3799,6 @@ function updateMotionValuesFromProps(element, next, prev) {
|
|
|
3729
3799
|
}
|
|
3730
3800
|
var valueTypes = [...dimensionValueTypes, color, complex,];
|
|
3731
3801
|
var findValueType = (v) => valueTypes.find(testValueType(v));
|
|
3732
|
-
var featureNames = Object.keys(featureDefinitions);
|
|
3733
|
-
var numFeatures = featureNames.length;
|
|
3734
3802
|
var propEventHandlers = [
|
|
3735
3803
|
'AnimationStart',
|
|
3736
3804
|
'AnimationComplete',
|
|
@@ -3741,11 +3809,6 @@ var propEventHandlers = [
|
|
|
3741
3809
|
'LayoutAnimationComplete',
|
|
3742
3810
|
];
|
|
3743
3811
|
var numVariantProps = variantProps.length;
|
|
3744
|
-
function getClosestProjectingNode(visualElement) {
|
|
3745
|
-
if (!visualElement)
|
|
3746
|
-
return void 0;
|
|
3747
|
-
return visualElement.options.allowProjection !== false ? visualElement.projection : getClosestProjectingNode(visualElement.parent);
|
|
3748
|
-
}
|
|
3749
3812
|
var VisualElement = class {
|
|
3750
3813
|
/**
|
|
3751
3814
|
* This method takes React props and returns found MotionValues. For example, HTML
|
|
@@ -3837,7 +3900,6 @@ var VisualElement = class {
|
|
|
3837
3900
|
this.update(this.props, this.presenceContext);
|
|
3838
3901
|
}
|
|
3839
3902
|
unmount() {
|
|
3840
|
-
var _a;
|
|
3841
3903
|
visualElementStore.delete(this.current);
|
|
3842
3904
|
this.projection && this.projection.unmount();
|
|
3843
3905
|
cancelFrame(this.notifyUpdate);
|
|
@@ -3849,7 +3911,11 @@ var VisualElement = class {
|
|
|
3849
3911
|
this.events[key7].clear();
|
|
3850
3912
|
}
|
|
3851
3913
|
for (const key7 in this.features) {
|
|
3852
|
-
|
|
3914
|
+
const feature = this.features[key7];
|
|
3915
|
+
if (feature) {
|
|
3916
|
+
feature.unmount();
|
|
3917
|
+
feature.isMounted = false;
|
|
3918
|
+
}
|
|
3853
3919
|
}
|
|
3854
3920
|
this.current = null;
|
|
3855
3921
|
}
|
|
@@ -3876,60 +3942,25 @@ var VisualElement = class {
|
|
|
3876
3942
|
}
|
|
3877
3943
|
return this.sortInstanceNodePosition(this.current, other.current);
|
|
3878
3944
|
}
|
|
3879
|
-
loadFeatures(_j, isStrict, preloadedFeatures2, initialLayoutGroupConfig) {
|
|
3880
|
-
var { children } = _j, renderedProps = __rest(_j, ["children"]);
|
|
3881
|
-
let ProjectionNodeConstructor;
|
|
3882
|
-
let MeasureLayout2;
|
|
3883
|
-
if (false) {
|
|
3884
|
-
const strictMessage = 'You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.';
|
|
3885
|
-
renderedProps.ignoreStrict ? warning(false, strictMessage) : invariant(false, strictMessage);
|
|
3886
|
-
}
|
|
3887
|
-
for (let i = 0; i < numFeatures; i++) {
|
|
3888
|
-
const name = featureNames[i];
|
|
3889
|
-
const { isEnabled, Feature: FeatureConstructor, ProjectionNode, MeasureLayout: MeasureLayoutComponent, } = featureDefinitions[name];
|
|
3890
|
-
if (ProjectionNode)
|
|
3891
|
-
ProjectionNodeConstructor = ProjectionNode;
|
|
3892
|
-
if (isEnabled(renderedProps)) {
|
|
3893
|
-
if (!this.features[name] && FeatureConstructor) {
|
|
3894
|
-
this.features[name] = new FeatureConstructor(this);
|
|
3895
|
-
}
|
|
3896
|
-
if (MeasureLayoutComponent) {
|
|
3897
|
-
MeasureLayout2 = MeasureLayoutComponent;
|
|
3898
|
-
}
|
|
3899
|
-
}
|
|
3900
|
-
}
|
|
3901
|
-
if ((this.type === 'html' || this.type === 'svg') && !this.projection && ProjectionNodeConstructor) {
|
|
3902
|
-
const { layoutId, layout: layout2, drag: drag2, dragConstraints, layoutScroll, layoutRoot, } = renderedProps;
|
|
3903
|
-
this.projection = new ProjectionNodeConstructor(this.latestValues, renderedProps['data-framer-portal-id'] ? void 0 : getClosestProjectingNode(this.parent));
|
|
3904
|
-
this.projection.setOptions({
|
|
3905
|
-
layoutId,
|
|
3906
|
-
layout: layout2,
|
|
3907
|
-
alwaysMeasureLayout: Boolean(drag2) || dragConstraints && isRefObject(dragConstraints),
|
|
3908
|
-
visualElement: this,
|
|
3909
|
-
scheduleRender: () => this.scheduleRender(),
|
|
3910
|
-
/**
|
|
3911
|
-
* TODO: Update options in an effect. This could be tricky as it'll be too late
|
|
3912
|
-
* to update by the time layout animations run.
|
|
3913
|
-
* We also need to fix this safeToRemove by linking it up to the one returned by usePresence,
|
|
3914
|
-
* ensuring it gets called if there's no potential layout animations.
|
|
3915
|
-
*/
|
|
3916
|
-
animationType: typeof layout2 === 'string' ? layout2 : 'both',
|
|
3917
|
-
initialPromotionConfig: initialLayoutGroupConfig,
|
|
3918
|
-
layoutScroll,
|
|
3919
|
-
layoutRoot,
|
|
3920
|
-
});
|
|
3921
|
-
}
|
|
3922
|
-
return MeasureLayout2;
|
|
3923
|
-
}
|
|
3924
3945
|
updateFeatures() {
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3946
|
+
let key7 = 'animation';
|
|
3947
|
+
for (key7 in featureDefinitions) {
|
|
3948
|
+
const featureDefinition = featureDefinitions[key7];
|
|
3949
|
+
if (!featureDefinition)
|
|
3950
|
+
continue;
|
|
3951
|
+
const { isEnabled, Feature: FeatureConstructor, } = featureDefinition;
|
|
3952
|
+
if (!this.features[key7] && FeatureConstructor && isEnabled(this.props)) {
|
|
3953
|
+
this.features[key7] = new FeatureConstructor(this);
|
|
3929
3954
|
}
|
|
3930
|
-
|
|
3931
|
-
feature.
|
|
3932
|
-
feature.isMounted
|
|
3955
|
+
if (this.features[key7]) {
|
|
3956
|
+
const feature = this.features[key7];
|
|
3957
|
+
if (feature.isMounted) {
|
|
3958
|
+
feature.update();
|
|
3959
|
+
}
|
|
3960
|
+
else {
|
|
3961
|
+
feature.mount();
|
|
3962
|
+
feature.isMounted = true;
|
|
3963
|
+
}
|
|
3933
3964
|
}
|
|
3934
3965
|
}
|
|
3935
3966
|
}
|
|
@@ -5430,7 +5461,7 @@ var VisualElementDragControls = class {
|
|
|
5430
5461
|
});
|
|
5431
5462
|
const measureDragConstraints = () => {
|
|
5432
5463
|
const { dragConstraints, } = this.getProps();
|
|
5433
|
-
if (isRefObject(dragConstraints)) {
|
|
5464
|
+
if (isRefObject(dragConstraints) && dragConstraints.current) {
|
|
5434
5465
|
this.constraints = this.resolveRefConstraints();
|
|
5435
5466
|
}
|
|
5436
5467
|
};
|
|
@@ -5440,7 +5471,7 @@ var VisualElementDragControls = class {
|
|
|
5440
5471
|
projection.root && projection.root.updateScroll();
|
|
5441
5472
|
projection.updateLayout();
|
|
5442
5473
|
}
|
|
5443
|
-
measureDragConstraints
|
|
5474
|
+
frame.read(measureDragConstraints);
|
|
5444
5475
|
const stopResizeListener = addDomEvent(window, 'resize', () => this.scalePositionWithinConstraints());
|
|
5445
5476
|
const stopLayoutUpdateListener = projection.addEventListener('didUpdate', ({ delta, hasLayoutChanged, }) => {
|
|
5446
5477
|
if (this.isDragging && hasLayoutChanged) {
|
|
@@ -5975,7 +6006,7 @@ function isOptimisedAppearTree(projectionNode) {
|
|
|
5975
6006
|
return false;
|
|
5976
6007
|
}
|
|
5977
6008
|
}
|
|
5978
|
-
function
|
|
6009
|
+
function createProjectionNode2({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {
|
|
5979
6010
|
return class ProjectionNode {
|
|
5980
6011
|
constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {
|
|
5981
6012
|
this.id = id2++;
|
|
@@ -6002,6 +6033,7 @@ function createProjectionNode({ attachResizeListener, defaultParent, measureScro
|
|
|
6002
6033
|
this.eventHandlers = /* @__PURE__ */ new Map();
|
|
6003
6034
|
this.hasTreeAnimated = false;
|
|
6004
6035
|
this.updateScheduled = false;
|
|
6036
|
+
this.scheduleUpdate = () => this.update();
|
|
6005
6037
|
this.projectionUpdateScheduled = false;
|
|
6006
6038
|
this.checkUpdateFailed = () => {
|
|
6007
6039
|
if (this.isUpdating) {
|
|
@@ -6208,7 +6240,7 @@ function createProjectionNode({ attachResizeListener, defaultParent, measureScro
|
|
|
6208
6240
|
didUpdate() {
|
|
6209
6241
|
if (!this.updateScheduled) {
|
|
6210
6242
|
this.updateScheduled = true;
|
|
6211
|
-
microtask.read(
|
|
6243
|
+
microtask.read(this.scheduleUpdate);
|
|
6212
6244
|
}
|
|
6213
6245
|
}
|
|
6214
6246
|
clearAllSnapshots() {
|
|
@@ -6278,7 +6310,7 @@ function createProjectionNode({ attachResizeListener, defaultParent, measureScro
|
|
|
6278
6310
|
resetTransform() {
|
|
6279
6311
|
if (!resetTransform)
|
|
6280
6312
|
return;
|
|
6281
|
-
const isResetRequested = this.isLayoutDirty || this.shouldResetTransform;
|
|
6313
|
+
const isResetRequested = this.isLayoutDirty || this.shouldResetTransform || this.options.alwaysMeasureLayout;
|
|
6282
6314
|
const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);
|
|
6283
6315
|
const transformTemplate2 = this.getTransformTemplate();
|
|
6284
6316
|
const transformTemplateValue = transformTemplate2 ? transformTemplate2(this.latestValues, '') : void 0;
|
|
@@ -6990,7 +7022,7 @@ function shouldAnimatePositionOnly(animationType, snapshot, layout2) {
|
|
|
6990
7022
|
return animationType === 'position' ||
|
|
6991
7023
|
animationType === 'preserve-aspect' && !isNear(aspectRatio(snapshot), aspectRatio(layout2), 0.2);
|
|
6992
7024
|
}
|
|
6993
|
-
var DocumentProjectionNode =
|
|
7025
|
+
var DocumentProjectionNode = createProjectionNode2({
|
|
6994
7026
|
attachResizeListener: (ref, notify2) => addDomEvent(ref, 'resize', notify2),
|
|
6995
7027
|
measureScroll: () => ({
|
|
6996
7028
|
x: document.documentElement.scrollLeft || document.body.scrollLeft,
|
|
@@ -7001,7 +7033,7 @@ var DocumentProjectionNode = createProjectionNode({
|
|
|
7001
7033
|
var rootProjectionNode = {
|
|
7002
7034
|
current: void 0,
|
|
7003
7035
|
};
|
|
7004
|
-
var HTMLProjectionNode =
|
|
7036
|
+
var HTMLProjectionNode = createProjectionNode2({
|
|
7005
7037
|
measureScroll: (instance) => ({
|
|
7006
7038
|
x: instance.scrollLeft,
|
|
7007
7039
|
y: instance.scrollTop,
|
|
@@ -8990,7 +9022,7 @@ var cancelSync = stepsOrder.reduce((acc, key7) => {
|
|
|
8990
9022
|
acc[key7] = (process2) => cancelFrame(process2);
|
|
8991
9023
|
return acc;
|
|
8992
9024
|
}, {});
|
|
8993
|
-
// https :https://app.framerstatic.com/framer.
|
|
9025
|
+
// https :https://app.framerstatic.com/framer.E3XQPBSV.js
|
|
8994
9026
|
import React4 from 'react';
|
|
8995
9027
|
import { startTransition as startTransition2, } from 'react';
|
|
8996
9028
|
import { Suspense as Suspense2, } from 'react';
|
|
@@ -9673,16 +9705,16 @@ var require_browser = __commonJS({
|
|
|
9673
9705
|
process5.argv = [];
|
|
9674
9706
|
process5.version = '';
|
|
9675
9707
|
process5.versions = {};
|
|
9676
|
-
function
|
|
9677
|
-
process5.on =
|
|
9678
|
-
process5.addListener =
|
|
9679
|
-
process5.once =
|
|
9680
|
-
process5.off =
|
|
9681
|
-
process5.removeListener =
|
|
9682
|
-
process5.removeAllListeners =
|
|
9683
|
-
process5.emit =
|
|
9684
|
-
process5.prependListener =
|
|
9685
|
-
process5.prependOnceListener =
|
|
9708
|
+
function noop3() { }
|
|
9709
|
+
process5.on = noop3;
|
|
9710
|
+
process5.addListener = noop3;
|
|
9711
|
+
process5.once = noop3;
|
|
9712
|
+
process5.off = noop3;
|
|
9713
|
+
process5.removeListener = noop3;
|
|
9714
|
+
process5.removeAllListeners = noop3;
|
|
9715
|
+
process5.emit = noop3;
|
|
9716
|
+
process5.prependListener = noop3;
|
|
9717
|
+
process5.prependOnceListener = noop3;
|
|
9686
9718
|
process5.listeners = function (name) {
|
|
9687
9719
|
return [];
|
|
9688
9720
|
};
|
|
@@ -10948,25 +10980,47 @@ function getRouteElementId(route, hash2) {
|
|
|
10948
10980
|
return void 0;
|
|
10949
10981
|
}
|
|
10950
10982
|
function isBot(userAgent) {
|
|
10951
|
-
return /bot|
|
|
10983
|
+
return /bot|-google|google-|yandex|ia_archiver/iu.test(userAgent);
|
|
10952
10984
|
}
|
|
10953
|
-
function yieldToMain(
|
|
10985
|
+
function yieldToMain(options) {
|
|
10954
10986
|
if ('scheduler' in window) {
|
|
10955
|
-
const options = {
|
|
10956
|
-
priority: isHighPriority ? 'user-blocking' : 'user-visible',
|
|
10957
|
-
};
|
|
10958
10987
|
if ('yield' in scheduler)
|
|
10959
10988
|
return scheduler.yield(options);
|
|
10960
10989
|
if ('postTask' in scheduler)
|
|
10961
10990
|
return scheduler.postTask(() => { }, options);
|
|
10962
10991
|
}
|
|
10963
|
-
if (
|
|
10992
|
+
if ((options === null || options === void 0 ? void 0 : options.priority) === 'user-blocking') {
|
|
10964
10993
|
return Promise.resolve();
|
|
10965
10994
|
}
|
|
10966
10995
|
return new Promise((resolve) => {
|
|
10967
|
-
setTimeout(resolve
|
|
10996
|
+
setTimeout(resolve);
|
|
10997
|
+
});
|
|
10998
|
+
}
|
|
10999
|
+
function yieldBefore(fn, options) {
|
|
11000
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11001
|
+
yield yieldToMain(options);
|
|
11002
|
+
return fn();
|
|
10968
11003
|
});
|
|
10969
11004
|
}
|
|
11005
|
+
function interactionResponse(options, fallback = true) {
|
|
11006
|
+
return new Promise((resolve) => {
|
|
11007
|
+
if (fallback)
|
|
11008
|
+
setTimeout(resolve, 100);
|
|
11009
|
+
requestAnimationFrame(() => {
|
|
11010
|
+
void yieldBefore(resolve, options);
|
|
11011
|
+
});
|
|
11012
|
+
});
|
|
11013
|
+
}
|
|
11014
|
+
function useAfterPaintEffect(fn, deps, options) {
|
|
11015
|
+
useLayoutEffect(() => {
|
|
11016
|
+
const runAfterPaint = () => __awaiter(this, void 0, void 0, function* () {
|
|
11017
|
+
yield interactionResponse(options, false);
|
|
11018
|
+
fn();
|
|
11019
|
+
});
|
|
11020
|
+
void runAfterPaint();
|
|
11021
|
+
}, deps);
|
|
11022
|
+
}
|
|
11023
|
+
var noop2 = () => { };
|
|
10970
11024
|
function replacePathVariables(path, currentLocale, nextLocale, defaultLocale, collectionId, pathVariables, collectionUtils) {
|
|
10971
11025
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10972
11026
|
var _a, _b, _c;
|
|
@@ -11357,24 +11411,52 @@ function createViewTransitionStylesheet({ exit = defaultPageTransition, enter, }
|
|
|
11357
11411
|
document.head.appendChild(styleElement);
|
|
11358
11412
|
}
|
|
11359
11413
|
function removeViewTransitionStylesheet() {
|
|
11360
|
-
|
|
11361
|
-
|
|
11362
|
-
|
|
11363
|
-
document.
|
|
11364
|
-
|
|
11414
|
+
requestIdleCallback(() => {
|
|
11415
|
+
frame.render(() => {
|
|
11416
|
+
performance.mark('framer-vt-remove');
|
|
11417
|
+
const element = document.getElementById(VIEW_TRANSITION_STYLES_ID);
|
|
11418
|
+
if (element) {
|
|
11419
|
+
document.head.removeChild(element);
|
|
11420
|
+
}
|
|
11421
|
+
});
|
|
11365
11422
|
});
|
|
11366
11423
|
}
|
|
11367
11424
|
function supportsViewTransitions() {
|
|
11368
11425
|
return Boolean(document.startViewTransition);
|
|
11369
11426
|
}
|
|
11370
|
-
function
|
|
11371
|
-
|
|
11372
|
-
|
|
11373
|
-
|
|
11374
|
-
|
|
11375
|
-
|
|
11376
|
-
|
|
11377
|
-
|
|
11427
|
+
function addVTStylesheetAfterInRender(effect) {
|
|
11428
|
+
return new Promise((resolve) => {
|
|
11429
|
+
frame.render(() => {
|
|
11430
|
+
performance.mark('framer-vt-style');
|
|
11431
|
+
createViewTransitionStylesheet(effect);
|
|
11432
|
+
resolve();
|
|
11433
|
+
});
|
|
11434
|
+
});
|
|
11435
|
+
}
|
|
11436
|
+
function startViewTransition(updateView, effect, signal) {
|
|
11437
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11438
|
+
if (!supportsViewTransitions()) {
|
|
11439
|
+
void updateView();
|
|
11440
|
+
return;
|
|
11441
|
+
}
|
|
11442
|
+
yield addVTStylesheetAfterInRender(effect);
|
|
11443
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted)
|
|
11444
|
+
return;
|
|
11445
|
+
performance.mark('framer-vt');
|
|
11446
|
+
const transition = document.startViewTransition(() => {
|
|
11447
|
+
performance.mark('framer-vt-freeze');
|
|
11448
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted)
|
|
11449
|
+
return;
|
|
11450
|
+
else
|
|
11451
|
+
signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', () => transition.skipTransition());
|
|
11452
|
+
void updateView();
|
|
11453
|
+
});
|
|
11454
|
+
Promise.all([transition.ready, transition.finished,]).then(() => {
|
|
11455
|
+
performance.mark('framer-vt-unfreeze');
|
|
11456
|
+
removeViewTransitionStylesheet();
|
|
11457
|
+
}).catch(() => { });
|
|
11458
|
+
return transition;
|
|
11459
|
+
});
|
|
11378
11460
|
}
|
|
11379
11461
|
function useViewTransition() {
|
|
11380
11462
|
const sitePageEffects = usePageEffects();
|
|
@@ -11385,7 +11467,7 @@ function useViewTransition() {
|
|
|
11385
11467
|
resolveHasPainted.current = void 0;
|
|
11386
11468
|
}
|
|
11387
11469
|
});
|
|
11388
|
-
return useCallback((currentRouteId, nextRouteId, update) => {
|
|
11470
|
+
return useCallback((currentRouteId, nextRouteId, update, yieldBeforeFreezePeriod, signal) => {
|
|
11389
11471
|
const pageEffect = getPageEffectForRoute(currentRouteId, nextRouteId, sitePageEffects);
|
|
11390
11472
|
if (pageEffect) {
|
|
11391
11473
|
const hasPainted = new Promise((resolve) => {
|
|
@@ -11395,6 +11477,15 @@ function useViewTransition() {
|
|
|
11395
11477
|
update();
|
|
11396
11478
|
yield hasPainted;
|
|
11397
11479
|
});
|
|
11480
|
+
const yieldBeforeViewTransition = () => __awaiter(this, void 0, void 0, function* () {
|
|
11481
|
+
yield interactionResponse({
|
|
11482
|
+
priority: 'user-blocking',
|
|
11483
|
+
signal,
|
|
11484
|
+
}, false).catch(noop2);
|
|
11485
|
+
return startViewTransition(asyncUpdate, pageEffect, signal);
|
|
11486
|
+
});
|
|
11487
|
+
if (yieldBeforeFreezePeriod)
|
|
11488
|
+
return yieldBeforeViewTransition();
|
|
11398
11489
|
return startViewTransition(asyncUpdate, pageEffect);
|
|
11399
11490
|
}
|
|
11400
11491
|
else {
|
|
@@ -11402,47 +11493,62 @@ function useViewTransition() {
|
|
|
11402
11493
|
}
|
|
11403
11494
|
}, [sitePageEffects,]);
|
|
11404
11495
|
}
|
|
11405
|
-
function pushRouteState(
|
|
11406
|
-
|
|
11407
|
-
|
|
11408
|
-
|
|
11409
|
-
|
|
11410
|
-
|
|
11411
|
-
|
|
11412
|
-
|
|
11413
|
-
|
|
11414
|
-
|
|
11415
|
-
|
|
11416
|
-
|
|
11417
|
-
|
|
11418
|
-
|
|
11419
|
-
|
|
11420
|
-
|
|
11421
|
-
|
|
11422
|
-
|
|
11423
|
-
|
|
11424
|
-
|
|
11496
|
+
function pushRouteState(routeId_1, route_1, _j) {
|
|
11497
|
+
return __awaiter(this, arguments, void 0, function* (routeId, route, { currentRoutePath, currentPathVariables, hash: hash2, pathVariables, localeId, preserveQueryParams, }, enableAsyncURLUpdate = false, ignorePushStateWrapper = false) {
|
|
11498
|
+
const { path, } = route;
|
|
11499
|
+
if (!path)
|
|
11500
|
+
return;
|
|
11501
|
+
try {
|
|
11502
|
+
const newPath = getPathForRoute(route, {
|
|
11503
|
+
currentRoutePath,
|
|
11504
|
+
currentPathVariables,
|
|
11505
|
+
hash: hash2,
|
|
11506
|
+
pathVariables,
|
|
11507
|
+
preserveQueryParams,
|
|
11508
|
+
});
|
|
11509
|
+
const urlUpdatePromise = pushHistoryState({
|
|
11510
|
+
routeId,
|
|
11511
|
+
hash: hash2,
|
|
11512
|
+
pathVariables,
|
|
11513
|
+
localeId,
|
|
11514
|
+
}, newPath, enableAsyncURLUpdate, ignorePushStateWrapper);
|
|
11515
|
+
if (!enableAsyncURLUpdate)
|
|
11516
|
+
yield urlUpdatePromise;
|
|
11517
|
+
}
|
|
11518
|
+
catch (_k) { }
|
|
11519
|
+
});
|
|
11425
11520
|
}
|
|
11426
11521
|
function isHistoryState(data2) {
|
|
11427
11522
|
const routeIdKey = 'routeId';
|
|
11428
11523
|
return isObject(data2) && isString2(data2[routeIdKey]);
|
|
11429
11524
|
}
|
|
11430
11525
|
function replaceHistoryState(data2, url) {
|
|
11526
|
+
performance.mark('framer-history-replace');
|
|
11431
11527
|
window.history.replaceState(data2,
|
|
11432
11528
|
// Second arg is unused and exists for historical purposes only
|
|
11433
11529
|
// https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState#unused
|
|
11434
11530
|
'', url);
|
|
11435
11531
|
}
|
|
11436
|
-
function pushHistoryState(
|
|
11437
|
-
|
|
11438
|
-
|
|
11439
|
-
|
|
11440
|
-
|
|
11532
|
+
function pushHistoryState(data2_1, url_1) {
|
|
11533
|
+
return __awaiter(this, arguments, void 0, function* (data2, url, awaitPaintBeforeUpdate = false, ignorePushStateWrapper = false) {
|
|
11534
|
+
if (awaitPaintBeforeUpdate) {
|
|
11535
|
+
yield interactionResponse({
|
|
11536
|
+
priority: 'user-blocking',
|
|
11537
|
+
});
|
|
11538
|
+
}
|
|
11539
|
+
performance.mark('framer-history-push');
|
|
11540
|
+
const pushState = ignorePushStateWrapper ? window.history.__proto__.pushState : window.history.pushState;
|
|
11541
|
+
pushState.call(window.history, data2,
|
|
11542
|
+
// Second arg is unused and exists for historical purposes only
|
|
11543
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/History/pushState#unused
|
|
11544
|
+
'', url);
|
|
11545
|
+
});
|
|
11441
11546
|
}
|
|
11442
11547
|
function useReplaceInitialState({ disabled, routeId, initialPathVariables, initialLocaleId, }) {
|
|
11443
|
-
|
|
11548
|
+
useLayoutEffect(() => {
|
|
11444
11549
|
if (disabled)
|
|
11445
11550
|
return;
|
|
11551
|
+
performance.mark('framer-history-set-initial-state');
|
|
11446
11552
|
replaceHistoryState({
|
|
11447
11553
|
routeId,
|
|
11448
11554
|
pathVariables: initialPathVariables,
|
|
@@ -11452,8 +11558,8 @@ function useReplaceInitialState({ disabled, routeId, initialPathVariables, initi
|
|
|
11452
11558
|
}
|
|
11453
11559
|
function usePopStateHandler(currentRouteId, setCurrentRouteId) {
|
|
11454
11560
|
const startViewTransition2 = useViewTransition();
|
|
11455
|
-
const viewTransitionReady =
|
|
11456
|
-
const popStateHandler =
|
|
11561
|
+
const viewTransitionReady = useRef(void 0);
|
|
11562
|
+
const popStateHandler = useCallback((_j) => __awaiter(this, [_j], void 0, function* ({ state, }) {
|
|
11457
11563
|
var _a, _b, _c;
|
|
11458
11564
|
if (!isObject(state))
|
|
11459
11565
|
return;
|
|
@@ -11463,14 +11569,14 @@ function usePopStateHandler(currentRouteId, setCurrentRouteId) {
|
|
|
11463
11569
|
const changeRoute = () => {
|
|
11464
11570
|
setCurrentRouteId(routeId, isString2(localeId) ? localeId : void 0, isString2(hash2) ? hash2 : void 0, isObject(pathVariables) ? pathVariables : void 0, false, true);
|
|
11465
11571
|
};
|
|
11466
|
-
const transition = startViewTransition2(currentRouteId.current, routeId, changeRoute);
|
|
11572
|
+
const transition = yield startViewTransition2(currentRouteId.current, routeId, changeRoute, false);
|
|
11467
11573
|
if (transition) {
|
|
11468
11574
|
void transition.updateCallbackDone.then((_a = viewTransitionReady.current) === null || _a === void 0 ? void 0 : _a.resolve).catch((_b = viewTransitionReady.current) === null || _b === void 0 ? void 0 : _b.reject);
|
|
11469
11575
|
}
|
|
11470
11576
|
else {
|
|
11471
11577
|
(_c = viewTransitionReady.current) === null || _c === void 0 ? void 0 : _c.resolve();
|
|
11472
11578
|
}
|
|
11473
|
-
}, [currentRouteId, setCurrentRouteId, startViewTransition2,]);
|
|
11579
|
+
}), [currentRouteId, setCurrentRouteId, startViewTransition2,]);
|
|
11474
11580
|
const traversalHandler = useCallback((event) => {
|
|
11475
11581
|
if (event.navigationType !== 'traverse')
|
|
11476
11582
|
return;
|
|
@@ -11488,7 +11594,7 @@ function usePopStateHandler(currentRouteId, setCurrentRouteId) {
|
|
|
11488
11594
|
scroll: 'after-transition',
|
|
11489
11595
|
});
|
|
11490
11596
|
}, []);
|
|
11491
|
-
|
|
11597
|
+
useEffect(() => {
|
|
11492
11598
|
var _a;
|
|
11493
11599
|
window.addEventListener('popstate', popStateHandler);
|
|
11494
11600
|
(_a = window.navigation) === null || _a === void 0 ? void 0 : _a.addEventListener('navigate', traversalHandler);
|
|
@@ -11561,9 +11667,9 @@ function switchLocale(options) {
|
|
|
11561
11667
|
try {
|
|
11562
11668
|
localStorage.setItem('preferredLocale', options.nextLocale.code);
|
|
11563
11669
|
}
|
|
11564
|
-
catch (
|
|
11670
|
+
catch (_j) { }
|
|
11565
11671
|
try {
|
|
11566
|
-
if (
|
|
11672
|
+
if (!isString2(result.path)) {
|
|
11567
11673
|
throw new Error('Expected result.path to be a string');
|
|
11568
11674
|
}
|
|
11569
11675
|
if (result.isMissingInLocale) {
|
|
@@ -11571,14 +11677,8 @@ function switchLocale(options) {
|
|
|
11571
11677
|
if (hasRedirect)
|
|
11572
11678
|
return;
|
|
11573
11679
|
}
|
|
11574
|
-
pushHistoryState({
|
|
11575
|
-
routeId: options.routeId,
|
|
11576
|
-
pathVariables: result.pathVariables,
|
|
11577
|
-
localeId: options.nextLocale.id,
|
|
11578
|
-
paginationInfo: window.history.state.paginationInfo,
|
|
11579
|
-
}, result.path);
|
|
11580
11680
|
}
|
|
11581
|
-
catch (
|
|
11681
|
+
catch (_k) { }
|
|
11582
11682
|
return result;
|
|
11583
11683
|
});
|
|
11584
11684
|
}
|
|
@@ -11592,16 +11692,193 @@ function pushLoadMoreHistory(hash2, paginationInfo) {
|
|
|
11592
11692
|
}
|
|
11593
11693
|
catch (_j) { }
|
|
11594
11694
|
}
|
|
11595
|
-
function
|
|
11596
|
-
|
|
11597
|
-
|
|
11598
|
-
|
|
11599
|
-
|
|
11600
|
-
|
|
11601
|
-
|
|
11602
|
-
|
|
11603
|
-
|
|
11695
|
+
function useNativeLoadingSpinner() {
|
|
11696
|
+
const navigationPromise = useRef(Promise.resolve());
|
|
11697
|
+
const navigationController = useRef();
|
|
11698
|
+
const navigateListener = useCallback((navigateEvent) => {
|
|
11699
|
+
if (
|
|
11700
|
+
// we want to intercept non-user triggered replaceState and pushState while the navigation is on-going
|
|
11701
|
+
// but we don't want to intercept e.g. 'traverse' (= browser back/forward) events, as we do this in the usePopStateHandler listener.
|
|
11702
|
+
navigateEvent.userInitiated)
|
|
11703
|
+
return;
|
|
11704
|
+
const controller = navigationController.current;
|
|
11705
|
+
controller === null || controller === void 0 ? void 0 : controller.signal.addEventListener('abort', () => {
|
|
11706
|
+
controller.abort('user aborted');
|
|
11707
|
+
});
|
|
11708
|
+
navigateEvent.intercept({
|
|
11709
|
+
handler: () => navigationPromise.current,
|
|
11710
|
+
});
|
|
11711
|
+
}, []);
|
|
11712
|
+
return useCallback((promise, updateURL, controller) => {
|
|
11713
|
+
if (!window.navigation) {
|
|
11714
|
+
void updateURL();
|
|
11715
|
+
return;
|
|
11716
|
+
}
|
|
11717
|
+
navigationPromise.current = promise;
|
|
11718
|
+
navigationController.current = controller;
|
|
11719
|
+
window.navigation.addEventListener('navigate', navigateListener);
|
|
11720
|
+
void updateURL(true);
|
|
11721
|
+
promise.catch(noop2).finally(() => {
|
|
11722
|
+
window.navigation.removeEventListener('navigate', navigateListener);
|
|
11723
|
+
});
|
|
11724
|
+
}, [navigateListener,]);
|
|
11725
|
+
}
|
|
11726
|
+
function measureSafe(name, start, end) {
|
|
11727
|
+
try {
|
|
11728
|
+
performance.measure(name, start, end);
|
|
11729
|
+
}
|
|
11730
|
+
catch (e) {
|
|
11731
|
+
console.warn(`Could not measure ${name}`, e);
|
|
11732
|
+
}
|
|
11604
11733
|
}
|
|
11734
|
+
var shouldMark = false;
|
|
11735
|
+
function markHydrationStart() {
|
|
11736
|
+
shouldMark = true;
|
|
11737
|
+
performance.mark('framer-hydration-start');
|
|
11738
|
+
}
|
|
11739
|
+
var routerHydrationInsertionEffectStartHasRun = false;
|
|
11740
|
+
var routerHydrationLayoutEffectStartHasRun = false;
|
|
11741
|
+
var routerHydrationEffectStartHasRun = false;
|
|
11742
|
+
function useMarkRouterEffects() {
|
|
11743
|
+
const hydrationMarkPrefix = 'framer-hydration-router';
|
|
11744
|
+
useInsertionEffect(() => {
|
|
11745
|
+
if (routerHydrationInsertionEffectStartHasRun || !shouldMark)
|
|
11746
|
+
return;
|
|
11747
|
+
routerHydrationInsertionEffectStartHasRun = true;
|
|
11748
|
+
performance.mark(`${hydrationMarkPrefix}-insertion-effect`);
|
|
11749
|
+
}, []);
|
|
11750
|
+
useLayoutEffect(() => {
|
|
11751
|
+
if (routerHydrationLayoutEffectStartHasRun || !shouldMark)
|
|
11752
|
+
return;
|
|
11753
|
+
routerHydrationLayoutEffectStartHasRun = true;
|
|
11754
|
+
performance.mark(`${hydrationMarkPrefix}-layout-effect`);
|
|
11755
|
+
}, []);
|
|
11756
|
+
useEffect(() => {
|
|
11757
|
+
if (routerHydrationEffectStartHasRun || !shouldMark)
|
|
11758
|
+
return;
|
|
11759
|
+
routerHydrationEffectStartHasRun = true;
|
|
11760
|
+
performance.mark(`${hydrationMarkPrefix}-effect`);
|
|
11761
|
+
}, []);
|
|
11762
|
+
}
|
|
11763
|
+
var hydrationInsertionEffectStartHasRun = false;
|
|
11764
|
+
var hydrationLayoutEffectStartHasRun = false;
|
|
11765
|
+
var hydrationEffectStartHasRun = false;
|
|
11766
|
+
function useMarkSuspenseEffectsStart() {
|
|
11767
|
+
const hydrationMarkPrefix = 'framer-hydration-';
|
|
11768
|
+
const hydrationLayoutEffectsEnd = `${hydrationMarkPrefix}layout-effects-end`;
|
|
11769
|
+
const hydrationEffectsEnd = `${hydrationMarkPrefix}effects-end`;
|
|
11770
|
+
const hydrationBrowserRenderStart = `${hydrationMarkPrefix}browser-render-start`;
|
|
11771
|
+
const hydrationRenderEnd = `${hydrationMarkPrefix}render-end`;
|
|
11772
|
+
useInsertionEffect(() => {
|
|
11773
|
+
if (hydrationInsertionEffectStartHasRun || !shouldMark)
|
|
11774
|
+
return;
|
|
11775
|
+
hydrationInsertionEffectStartHasRun = true;
|
|
11776
|
+
performance.mark(hydrationRenderEnd);
|
|
11777
|
+
measureSafe(`${hydrationMarkPrefix}render`, `${hydrationMarkPrefix}start`, hydrationRenderEnd);
|
|
11778
|
+
performance.mark(`${hydrationMarkPrefix}insertion-effects-start`);
|
|
11779
|
+
}, []);
|
|
11780
|
+
useLayoutEffect(() => {
|
|
11781
|
+
if (hydrationLayoutEffectStartHasRun || !shouldMark)
|
|
11782
|
+
return;
|
|
11783
|
+
hydrationLayoutEffectStartHasRun = true;
|
|
11784
|
+
performance.mark(`${hydrationMarkPrefix}layout-effects-start`);
|
|
11785
|
+
requestAnimationFrame(() => {
|
|
11786
|
+
var _a, _b, _c;
|
|
11787
|
+
performance.mark(hydrationBrowserRenderStart);
|
|
11788
|
+
measureSafe(`${hydrationMarkPrefix}uho`, (_b = (_a = performance.getEntriesByName(hydrationEffectsEnd)[0]) === null || _a === void 0 ? void 0 : _a.name) !== null &&
|
|
11789
|
+
_b !== void 0
|
|
11790
|
+
? _b
|
|
11791
|
+
: (_c = performance.getEntriesByName(hydrationLayoutEffectsEnd)[0]) === null || _c === void 0
|
|
11792
|
+
? void 0
|
|
11793
|
+
: _c.name, hydrationBrowserRenderStart);
|
|
11794
|
+
});
|
|
11795
|
+
}, []);
|
|
11796
|
+
useEffect(() => {
|
|
11797
|
+
var _a;
|
|
11798
|
+
if (hydrationEffectStartHasRun || !shouldMark)
|
|
11799
|
+
return;
|
|
11800
|
+
hydrationEffectStartHasRun = true;
|
|
11801
|
+
const hydrationEffectsStart = `${hydrationMarkPrefix}effects-start`;
|
|
11802
|
+
performance.mark(hydrationEffectsStart);
|
|
11803
|
+
const hasPaintStarted = (_a = performance.getEntriesByName(hydrationBrowserRenderStart)[0]) === null || _a === void 0
|
|
11804
|
+
? void 0
|
|
11805
|
+
: _a.name;
|
|
11806
|
+
if (!hasPaintStarted) {
|
|
11807
|
+
measureSafe(`${hydrationMarkPrefix}commit`, hydrationLayoutEffectsEnd, hydrationEffectsStart);
|
|
11808
|
+
performance.mark(`${hydrationMarkPrefix}effects-sync`);
|
|
11809
|
+
}
|
|
11810
|
+
}, []);
|
|
11811
|
+
return null;
|
|
11812
|
+
}
|
|
11813
|
+
var hydrationInsertionEffectHasRun = false;
|
|
11814
|
+
var hydrationLayoutEffectHasRun = false;
|
|
11815
|
+
var hydrationEffectHasRun = false;
|
|
11816
|
+
var hydrationPaintEffectHasRun = false;
|
|
11817
|
+
function useMarkSuspenseEffectEnd() {
|
|
11818
|
+
const hydrationMarkPrefix = 'framer-hydration-';
|
|
11819
|
+
const hydrationLayoutEffectsEnd = `${hydrationMarkPrefix}layout-effects-end`;
|
|
11820
|
+
const hydrationEffectsEnd = `${hydrationMarkPrefix}effects-end`;
|
|
11821
|
+
const hydrationBrowserRenderStart = `${hydrationMarkPrefix}browser-render-start`;
|
|
11822
|
+
const hydrationStart = `${hydrationMarkPrefix}start`;
|
|
11823
|
+
const hydrationInsertionEffectsEnd = `${hydrationMarkPrefix}insertion-effects-end`;
|
|
11824
|
+
const hydrationFP = `${hydrationMarkPrefix}first-paint`;
|
|
11825
|
+
const hydrationAnimationFrameEnd = `${hydrationMarkPrefix}browser-raf-end`;
|
|
11826
|
+
useInsertionEffect(() => {
|
|
11827
|
+
if (hydrationInsertionEffectHasRun || !shouldMark)
|
|
11828
|
+
return;
|
|
11829
|
+
hydrationInsertionEffectHasRun = true;
|
|
11830
|
+
performance.mark(hydrationInsertionEffectsEnd);
|
|
11831
|
+
measureSafe(`${hydrationMarkPrefix}insertion-effects`, `${hydrationMarkPrefix}insertion-effects-start`, hydrationInsertionEffectsEnd);
|
|
11832
|
+
}, []);
|
|
11833
|
+
useLayoutEffect(() => {
|
|
11834
|
+
if (hydrationLayoutEffectHasRun || !shouldMark)
|
|
11835
|
+
return;
|
|
11836
|
+
hydrationLayoutEffectHasRun = true;
|
|
11837
|
+
performance.mark(hydrationLayoutEffectsEnd);
|
|
11838
|
+
measureSafe(`${hydrationMarkPrefix}layout-effects`, `${hydrationMarkPrefix}layout-effects-start`, hydrationLayoutEffectsEnd);
|
|
11839
|
+
requestAnimationFrame(() => {
|
|
11840
|
+
performance.mark(hydrationAnimationFrameEnd);
|
|
11841
|
+
measureSafe(`${hydrationMarkPrefix}raf`, hydrationBrowserRenderStart, hydrationAnimationFrameEnd);
|
|
11842
|
+
});
|
|
11843
|
+
}, []);
|
|
11844
|
+
useEffect(() => {
|
|
11845
|
+
var _a, _b, _c;
|
|
11846
|
+
if (hydrationEffectHasRun || !shouldMark)
|
|
11847
|
+
return;
|
|
11848
|
+
hydrationEffectHasRun = true;
|
|
11849
|
+
performance.mark(hydrationEffectsEnd);
|
|
11850
|
+
measureSafe(`${hydrationMarkPrefix}effects`, (_b = (_a = performance.getEntriesByName(hydrationFP)[0]) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0
|
|
11851
|
+
? _b
|
|
11852
|
+
: (_c = performance.getEntriesByName(`${hydrationMarkPrefix}effects-start`)[0]) === null || _c === void 0
|
|
11853
|
+
? void 0
|
|
11854
|
+
: _c.name, hydrationEffectsEnd);
|
|
11855
|
+
}, []);
|
|
11856
|
+
useAfterPaintEffect(() => {
|
|
11857
|
+
if (hydrationPaintEffectHasRun || !shouldMark)
|
|
11858
|
+
return;
|
|
11859
|
+
hydrationPaintEffectHasRun = true;
|
|
11860
|
+
performance.mark(hydrationFP);
|
|
11861
|
+
measureSafe(`${hydrationMarkPrefix}time-to-first-paint`, hydrationStart, hydrationFP);
|
|
11862
|
+
measureSafe(`${hydrationMarkPrefix}browser-render`, hydrationAnimationFrameEnd, hydrationFP);
|
|
11863
|
+
}, [],
|
|
11864
|
+
// user-blocking ensures we get the correct timings here. Other priorites might delay this effect a little bit.
|
|
11865
|
+
{
|
|
11866
|
+
priority: 'user-blocking',
|
|
11867
|
+
});
|
|
11868
|
+
return null;
|
|
11869
|
+
}
|
|
11870
|
+
function MarkSuspenseEffectsStart() {
|
|
11871
|
+
useMarkSuspenseEffectsStart();
|
|
11872
|
+
return null;
|
|
11873
|
+
}
|
|
11874
|
+
function MarkSuspenseEffectsEnd() {
|
|
11875
|
+
useMarkSuspenseEffectEnd();
|
|
11876
|
+
return null;
|
|
11877
|
+
}
|
|
11878
|
+
var MarkSuspenseEffects = {
|
|
11879
|
+
Start: MarkSuspenseEffectsStart,
|
|
11880
|
+
End: MarkSuspenseEffectsEnd,
|
|
11881
|
+
};
|
|
11605
11882
|
var eventsToStop = [
|
|
11606
11883
|
'mousedown',
|
|
11607
11884
|
'mouseup',
|
|
@@ -11639,104 +11916,44 @@ var stopFn = (event) => {
|
|
|
11639
11916
|
event.stopPropagation();
|
|
11640
11917
|
performance.mark('framer-react-event-handling-prevented');
|
|
11641
11918
|
};
|
|
11642
|
-
|
|
11643
|
-
|
|
11644
|
-
if (!eventsToStop)
|
|
11645
|
-
return;
|
|
11646
|
-
const options = {
|
|
11647
|
-
capture: true,
|
|
11648
|
-
};
|
|
11649
|
-
eventsToStop.forEach((event) => document.body.addEventListener(event, stopFn, options));
|
|
11650
|
-
window.__FRAMER_TURN_OFF_REACT_EVENT_HANDLING__ = void 0;
|
|
11651
|
-
};
|
|
11652
|
-
}
|
|
11653
|
-
function turnOnReactEventHandling() {
|
|
11919
|
+
var shouldTurnOnEventHandling = false;
|
|
11920
|
+
function turnOffReactEventHandling() {
|
|
11654
11921
|
if (!eventsToStop)
|
|
11655
11922
|
return;
|
|
11923
|
+
shouldTurnOnEventHandling = true;
|
|
11924
|
+
performance.mark('framer-react-event-handling-start');
|
|
11656
11925
|
const options = {
|
|
11657
11926
|
capture: true,
|
|
11658
11927
|
};
|
|
11659
|
-
eventsToStop.forEach((event) => document.body.
|
|
11660
|
-
eventsToStop = void 0;
|
|
11661
|
-
}
|
|
11662
|
-
function measureSafe(name, start, end) {
|
|
11663
|
-
try {
|
|
11664
|
-
performance.measure(name, start, end);
|
|
11665
|
-
}
|
|
11666
|
-
catch (e) {
|
|
11667
|
-
console.warn(`Could not measure ${name}`, e);
|
|
11668
|
-
}
|
|
11928
|
+
eventsToStop.forEach((event) => document.body.addEventListener(event, stopFn, options));
|
|
11669
11929
|
}
|
|
11670
|
-
|
|
11671
|
-
|
|
11672
|
-
|
|
11673
|
-
function OnHydrationEnd({ addHydrationMarkers, turnOffEventHandlerHack, }) {
|
|
11674
|
-
const hydrationMarkPrefix = 'framer-hydration-';
|
|
11675
|
-
const hydrationStart = `${hydrationMarkPrefix}start`;
|
|
11676
|
-
const hydrationRenderEnd = `${hydrationMarkPrefix}render-end`;
|
|
11677
|
-
const hydrationLayoutEffectsEnd = `${hydrationMarkPrefix}layout-effects-end`;
|
|
11678
|
-
const hydrationEffectsEnd = `${hydrationMarkPrefix}effects-end`;
|
|
11679
|
-
const hydrationFP = `${hydrationMarkPrefix}first-paint`;
|
|
11680
|
-
useInsertionEffect(() => {
|
|
11681
|
-
if (hydrationInsertionEffectHasRun)
|
|
11682
|
-
return;
|
|
11683
|
-
hydrationInsertionEffectHasRun = true;
|
|
11684
|
-
if (addHydrationMarkers) {
|
|
11685
|
-
performance.mark(hydrationRenderEnd);
|
|
11686
|
-
measureSafe(`${hydrationMarkPrefix}render`, hydrationStart, hydrationRenderEnd);
|
|
11687
|
-
}
|
|
11688
|
-
}, []);
|
|
11689
|
-
useLayoutEffect(() => {
|
|
11690
|
-
if (hydrationLayoutEffectHasRun)
|
|
11691
|
-
return;
|
|
11692
|
-
hydrationLayoutEffectHasRun = true;
|
|
11693
|
-
if (addHydrationMarkers) {
|
|
11694
|
-
performance.mark(hydrationLayoutEffectsEnd);
|
|
11695
|
-
measureSafe(`${hydrationMarkPrefix}layout-effects`, hydrationRenderEnd, hydrationLayoutEffectsEnd);
|
|
11696
|
-
}
|
|
11697
|
-
requestAnimationFrame(() => {
|
|
11698
|
-
var _a, _b, _c;
|
|
11699
|
-
const browserRenderStart = `${hydrationMarkPrefix}browser-render-start`;
|
|
11700
|
-
if (addHydrationMarkers) {
|
|
11701
|
-
performance.mark(browserRenderStart);
|
|
11702
|
-
measureSafe(`${hydrationMarkPrefix}uho`, (_b = (_a = performance.getEntriesByName(hydrationEffectsEnd)[0]) === null || _a === void 0 ? void 0 : _a.name) !== null &&
|
|
11703
|
-
_b !== void 0
|
|
11704
|
-
? _b
|
|
11705
|
-
: (_c = performance.getEntriesByName(hydrationLayoutEffectsEnd)[0]) === null || _c === void 0
|
|
11706
|
-
? void 0
|
|
11707
|
-
: _c.name, browserRenderStart);
|
|
11708
|
-
}
|
|
11709
|
-
setTimeout(() => {
|
|
11710
|
-
if (turnOffEventHandlerHack) {
|
|
11711
|
-
turnOnReactEventHandling();
|
|
11712
|
-
}
|
|
11713
|
-
if (addHydrationMarkers) {
|
|
11714
|
-
performance.mark(hydrationFP);
|
|
11715
|
-
measureSafe(`${hydrationMarkPrefix}time-to-first-paint`, hydrationStart, hydrationFP);
|
|
11716
|
-
measureSafe(`${hydrationMarkPrefix}browser-render`, browserRenderStart, hydrationFP);
|
|
11717
|
-
}
|
|
11718
|
-
}, 0);
|
|
11719
|
-
});
|
|
11720
|
-
}, []);
|
|
11721
|
-
useEffect(() => {
|
|
11722
|
-
var _a, _b, _c;
|
|
11723
|
-
if (hydrationEffectHasRun)
|
|
11930
|
+
function TurnOnReactEventHandling() {
|
|
11931
|
+
useAfterPaintEffect(() => {
|
|
11932
|
+
if (!shouldTurnOnEventHandling || !eventsToStop)
|
|
11724
11933
|
return;
|
|
11725
|
-
|
|
11726
|
-
|
|
11727
|
-
|
|
11728
|
-
|
|
11729
|
-
|
|
11730
|
-
|
|
11731
|
-
|
|
11732
|
-
|
|
11733
|
-
|
|
11734
|
-
|
|
11735
|
-
|
|
11736
|
-
}
|
|
11737
|
-
}, []);
|
|
11934
|
+
const options = {
|
|
11935
|
+
capture: true,
|
|
11936
|
+
};
|
|
11937
|
+
eventsToStop.forEach((event) => document.body.removeEventListener(event, stopFn, options));
|
|
11938
|
+
eventsToStop = void 0;
|
|
11939
|
+
performance.mark('framer-react-event-handling-end');
|
|
11940
|
+
}, [],
|
|
11941
|
+
// user-blocking ensures this runs right after the paint, so users can interact asap.
|
|
11942
|
+
{
|
|
11943
|
+
priority: 'user-blocking',
|
|
11944
|
+
});
|
|
11738
11945
|
return null;
|
|
11739
11946
|
}
|
|
11947
|
+
function isSamePage(a, b) {
|
|
11948
|
+
if (a.routeId !== b.routeId)
|
|
11949
|
+
return false;
|
|
11950
|
+
if (a.pathVariables === b.pathVariables)
|
|
11951
|
+
return true;
|
|
11952
|
+
const aPathVariables = a.pathVariables || {};
|
|
11953
|
+
const bPathVariables = b.pathVariables || {};
|
|
11954
|
+
return aPathVariables.length === bPathVariables.length &&
|
|
11955
|
+
Object.keys(aPathVariables).every((key7) => aPathVariables[key7] === bPathVariables[key7]);
|
|
11956
|
+
}
|
|
11740
11957
|
function useGetRouteCallback(routes) {
|
|
11741
11958
|
return React4.useCallback((routeId) => routes[routeId], [routes,]);
|
|
11742
11959
|
}
|
|
@@ -11836,25 +12053,31 @@ function useLocaleCode() {
|
|
|
11836
12053
|
function useLocale() {
|
|
11837
12054
|
return useLocaleCode();
|
|
11838
12055
|
}
|
|
11839
|
-
function
|
|
12056
|
+
function useMonitorNextPaintAfterRender(label) {
|
|
11840
12057
|
const startLabel = `start-${label}`;
|
|
11841
12058
|
const endLabel = `end-${label}`;
|
|
11842
12059
|
const resolveHasPainted = useRef(void 0);
|
|
11843
|
-
|
|
12060
|
+
useAfterPaintEffect(() => {
|
|
11844
12061
|
if (resolveHasPainted.current) {
|
|
11845
12062
|
resolveHasPainted.current();
|
|
11846
12063
|
resolveHasPainted.current = void 0;
|
|
11847
12064
|
}
|
|
12065
|
+
}, void 0,
|
|
12066
|
+
// user-blocking ensures we get the correct timings here. Other priorites might delay this effect a little bit.
|
|
12067
|
+
{
|
|
12068
|
+
priority: 'user-blocking',
|
|
11848
12069
|
});
|
|
11849
12070
|
return useCallback(() => {
|
|
11850
12071
|
const hasPainted = new Promise((resolve) => {
|
|
11851
12072
|
resolveHasPainted.current = resolve;
|
|
11852
12073
|
});
|
|
11853
12074
|
performance.mark(startLabel);
|
|
11854
|
-
hasPainted.
|
|
12075
|
+
return hasPainted.finally(() => {
|
|
11855
12076
|
performance.mark(endLabel);
|
|
11856
12077
|
performance.measure(label, startLabel, endLabel);
|
|
11857
|
-
}).catch(() => {
|
|
12078
|
+
}).catch((e) => {
|
|
12079
|
+
console.error(e);
|
|
12080
|
+
});
|
|
11858
12081
|
}, [label, startLabel, endLabel,]);
|
|
11859
12082
|
}
|
|
11860
12083
|
function updateScrollPosition(hash2, smoothScroll, isHistoryTransition) {
|
|
@@ -11868,19 +12091,67 @@ function updateScrollPosition(hash2, smoothScroll, isHistoryTransition) {
|
|
|
11868
12091
|
window.scrollTo(0, 0);
|
|
11869
12092
|
}
|
|
11870
12093
|
function useScheduleRenderSideEffects(dep) {
|
|
11871
|
-
const actions =
|
|
11872
|
-
|
|
12094
|
+
const actions = useRef([]);
|
|
12095
|
+
useLayoutEffect(() => {
|
|
11873
12096
|
var _a;
|
|
11874
12097
|
if (!((_a = actions.current) === null || _a === void 0 ? void 0 : _a.length))
|
|
11875
12098
|
return;
|
|
11876
12099
|
actions.current.forEach((action) => action());
|
|
11877
12100
|
actions.current = [];
|
|
11878
12101
|
}, [dep,]);
|
|
11879
|
-
return
|
|
12102
|
+
return useCallback((cb) => {
|
|
11880
12103
|
actions.current.push(cb);
|
|
11881
12104
|
}, []);
|
|
11882
12105
|
}
|
|
11883
|
-
function
|
|
12106
|
+
function useNavigationTransition(enableAsyncURLUpdates) {
|
|
12107
|
+
const startNativeSpinner = useNativeLoadingSpinner();
|
|
12108
|
+
const monitorNextPaintAfterRender = useMonitorNextPaintAfterRender('route-change');
|
|
12109
|
+
const navigationController = useRef(void 0);
|
|
12110
|
+
return useCallback((transitionFn_1, updateURL_1, ...args_1) => __awaiter(this, [transitionFn_1, updateURL_1, ...args_1], void 0, function* (transitionFn, updateURL, isAbortable = true) {
|
|
12111
|
+
var _a;
|
|
12112
|
+
if (!enableAsyncURLUpdates) {
|
|
12113
|
+
yield (updateURL === null || updateURL === void 0 ? void 0 : updateURL());
|
|
12114
|
+
transitionFn();
|
|
12115
|
+
void monitorNextPaintAfterRender();
|
|
12116
|
+
return new Promise((resolve) => {
|
|
12117
|
+
resolve();
|
|
12118
|
+
});
|
|
12119
|
+
}
|
|
12120
|
+
(_a = navigationController.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
12121
|
+
const controller = isAbortable ? new AbortController() : void 0;
|
|
12122
|
+
navigationController.current = controller;
|
|
12123
|
+
const signal = controller === null || controller === void 0 ? void 0 : controller.signal;
|
|
12124
|
+
const nextRender = monitorNextPaintAfterRender();
|
|
12125
|
+
if (!updateURL) {
|
|
12126
|
+
navigationController.current = void 0;
|
|
12127
|
+
transitionFn(signal);
|
|
12128
|
+
return nextRender;
|
|
12129
|
+
}
|
|
12130
|
+
transitionFn(signal);
|
|
12131
|
+
yield interactionResponse({
|
|
12132
|
+
priority: 'user-visible',
|
|
12133
|
+
signal,
|
|
12134
|
+
}).catch(noop2);
|
|
12135
|
+
yield interactionResponse({
|
|
12136
|
+
priority: 'user-visible',
|
|
12137
|
+
signal,
|
|
12138
|
+
}).catch(noop2);
|
|
12139
|
+
let resolveNavigationPromise;
|
|
12140
|
+
const navigationPromise = new Promise((resolve, reject) => {
|
|
12141
|
+
resolveNavigationPromise = resolve;
|
|
12142
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted)
|
|
12143
|
+
reject();
|
|
12144
|
+
else
|
|
12145
|
+
signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', reject);
|
|
12146
|
+
});
|
|
12147
|
+
startNativeSpinner(navigationPromise, updateURL, controller);
|
|
12148
|
+
return nextRender.then(() => {
|
|
12149
|
+
resolveNavigationPromise();
|
|
12150
|
+
});
|
|
12151
|
+
}), [enableAsyncURLUpdates, monitorNextPaintAfterRender, startNativeSpinner,]);
|
|
12152
|
+
}
|
|
12153
|
+
function Router({ defaultPageStyle, disableHistory, initialPathVariables, initialRoute, notFoundPage, collectionUtils, routes, initialLocaleId, locales = [], preserveQueryParams = false, enableAsyncURLUpdates = false, }) {
|
|
12154
|
+
useMarkRouterEffects();
|
|
11884
12155
|
useReplaceInitialState({
|
|
11885
12156
|
disabled: disableHistory,
|
|
11886
12157
|
routeId: initialRoute,
|
|
@@ -11888,12 +12159,14 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
|
|
|
11888
12159
|
initialLocaleId,
|
|
11889
12160
|
});
|
|
11890
12161
|
const startViewTransition2 = useViewTransition();
|
|
11891
|
-
const
|
|
11892
|
-
const
|
|
11893
|
-
const
|
|
11894
|
-
const
|
|
12162
|
+
const [dep, forceUpdate,] = useForceUpdate2();
|
|
12163
|
+
const scheduleSideEffect = useScheduleRenderSideEffects(dep);
|
|
12164
|
+
const startNavigation = useNavigationTransition(enableAsyncURLUpdates);
|
|
12165
|
+
const currentRouteRef = useRef(initialRoute);
|
|
12166
|
+
const currentPathVariablesRef = useRef(initialPathVariables);
|
|
12167
|
+
const currentLocaleIdRef = useRef(initialLocaleId);
|
|
11895
12168
|
const currentLocaleId = currentLocaleIdRef.current;
|
|
11896
|
-
const activeLocale =
|
|
12169
|
+
const activeLocale = useMemo(() => {
|
|
11897
12170
|
var _a;
|
|
11898
12171
|
return (_a = locales.find(({ id: id3, }) => {
|
|
11899
12172
|
if (!currentLocaleId)
|
|
@@ -11903,8 +12176,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
|
|
|
11903
12176
|
? _a
|
|
11904
12177
|
: null;
|
|
11905
12178
|
}, [currentLocaleId, locales,]);
|
|
11906
|
-
const
|
|
11907
|
-
const localeInfo = React4.useMemo(() => {
|
|
12179
|
+
const localeInfo = useMemo(() => {
|
|
11908
12180
|
return {
|
|
11909
12181
|
activeLocale,
|
|
11910
12182
|
locales,
|
|
@@ -11937,28 +12209,55 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
|
|
|
11937
12209
|
});
|
|
11938
12210
|
if (!localeResult)
|
|
11939
12211
|
return;
|
|
12212
|
+
const currentPathVariables2 = currentPathVariablesRef.current;
|
|
12213
|
+
const currentStatePaginationInfo = window.history.state.paginationInfo;
|
|
12214
|
+
const currentPath = localeResult.path;
|
|
11940
12215
|
currentPathVariablesRef.current = localeResult.pathVariables;
|
|
11941
12216
|
currentLocaleIdRef.current = nextLocale.id;
|
|
11942
|
-
|
|
11943
|
-
|
|
12217
|
+
const updateURL = (...args_1) => __awaiter(this, [...args_1], void 0, function* (ignorePushStateWrapper = false) {
|
|
12218
|
+
if (!currentPath)
|
|
12219
|
+
return;
|
|
12220
|
+
return pushHistoryState({
|
|
12221
|
+
routeId: currentRouteId2,
|
|
12222
|
+
pathVariables: currentPathVariables2,
|
|
12223
|
+
localeId: nextLocale.id,
|
|
12224
|
+
paginationInfo: currentStatePaginationInfo,
|
|
12225
|
+
}, currentPath,
|
|
12226
|
+
// we yield in startNavigation before updating the URL, so yielding again is not needed.
|
|
12227
|
+
false, ignorePushStateWrapper);
|
|
12228
|
+
});
|
|
12229
|
+
void startNavigation(() => {
|
|
12230
|
+
void startViewTransition2(currentRouteId2, currentRouteId2, () => startTransition2(forceUpdate), enableAsyncURLUpdates);
|
|
12231
|
+
}, updateURL, false);
|
|
11944
12232
|
}
|
|
11945
12233
|
catch (_j) { }
|
|
11946
12234
|
}),
|
|
11947
12235
|
};
|
|
11948
|
-
}, [
|
|
11949
|
-
|
|
11950
|
-
|
|
12236
|
+
}, [
|
|
12237
|
+
activeLocale,
|
|
12238
|
+
collectionUtils,
|
|
12239
|
+
enableAsyncURLUpdates,
|
|
12240
|
+
forceUpdate,
|
|
12241
|
+
locales,
|
|
12242
|
+
preserveQueryParams,
|
|
12243
|
+
routes,
|
|
12244
|
+
startNavigation,
|
|
12245
|
+
startViewTransition2,
|
|
12246
|
+
]);
|
|
12247
|
+
const setCurrentRouteId = useCallback((routeId, localeId, hash2, pathVariables, smoothScroll = false, isHistoryTransition = false, updateURL) => {
|
|
12248
|
+
const currentRouteId2 = currentRouteRef.current;
|
|
11951
12249
|
currentRouteRef.current = routeId;
|
|
11952
12250
|
currentPathVariablesRef.current = pathVariables;
|
|
11953
12251
|
currentLocaleIdRef.current = localeId;
|
|
11954
12252
|
scheduleSideEffect(() => {
|
|
11955
12253
|
updateScrollPosition(hash2, smoothScroll, isHistoryTransition);
|
|
11956
12254
|
});
|
|
11957
|
-
|
|
11958
|
-
|
|
11959
|
-
|
|
12255
|
+
void startNavigation((signal) => {
|
|
12256
|
+
void startViewTransition2(currentRouteId2, routeId, () => startTransition2(forceUpdate), enableAsyncURLUpdates, signal);
|
|
12257
|
+
}, updateURL);
|
|
12258
|
+
}, [enableAsyncURLUpdates, forceUpdate, scheduleSideEffect, startNavigation, startViewTransition2,]);
|
|
11960
12259
|
usePopStateHandler(currentRouteRef, setCurrentRouteId);
|
|
11961
|
-
const navigate =
|
|
12260
|
+
const navigate = useCallback((routeId, hash2, pathVariables, smoothScroll) => __awaiter(this, void 0, void 0, function* () {
|
|
11962
12261
|
var _a, _b;
|
|
11963
12262
|
const newRoute = routes[routeId];
|
|
11964
12263
|
if (pathVariables) {
|
|
@@ -11974,51 +12273,54 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
|
|
|
11974
12273
|
pathVariables = Object.fromEntries(Object.entries(pathVariables).filter(([key7,]) => inUse.has(key7)));
|
|
11975
12274
|
}
|
|
11976
12275
|
const routeElementId = getRouteElementId(newRoute, hash2);
|
|
12276
|
+
const currentPathVariables2 = currentPathVariablesRef.current;
|
|
12277
|
+
const currentRouteLocaleId = currentLocaleIdRef.current;
|
|
11977
12278
|
if (isSamePage({
|
|
11978
12279
|
routeId: currentRouteRef.current,
|
|
11979
|
-
pathVariables:
|
|
12280
|
+
pathVariables: currentPathVariables2,
|
|
11980
12281
|
}, {
|
|
11981
12282
|
routeId,
|
|
11982
12283
|
pathVariables,
|
|
11983
12284
|
})) {
|
|
11984
|
-
if (((_b = window.history.state) === null || _b === void 0 ? void 0 : _b.hash) !== hash2) {
|
|
11985
|
-
if (!disableHistory) {
|
|
11986
|
-
const route = routes[routeId];
|
|
11987
|
-
if (route) {
|
|
11988
|
-
pushRouteState(routeId, route, {
|
|
11989
|
-
currentRoutePath: route.path,
|
|
11990
|
-
currentPathVariables: currentPathVariablesRef.current,
|
|
11991
|
-
pathVariables,
|
|
11992
|
-
hash: hash2,
|
|
11993
|
-
localeId: currentLocaleIdRef.current,
|
|
11994
|
-
preserveQueryParams,
|
|
11995
|
-
});
|
|
11996
|
-
}
|
|
11997
|
-
}
|
|
11998
|
-
}
|
|
11999
12285
|
updateScrollPosition(routeElementId, smoothScroll, false);
|
|
12286
|
+
const route = routes[routeId];
|
|
12287
|
+
if (((_b = window.history.state) === null || _b === void 0 ? void 0 : _b.hash) === hash2 || disableHistory || !route)
|
|
12288
|
+
return;
|
|
12289
|
+
const updateURLPromise = pushRouteState(routeId, route, {
|
|
12290
|
+
currentRoutePath: route.path,
|
|
12291
|
+
currentPathVariables: currentPathVariables2,
|
|
12292
|
+
pathVariables,
|
|
12293
|
+
hash: hash2,
|
|
12294
|
+
localeId: currentRouteLocaleId,
|
|
12295
|
+
preserveQueryParams,
|
|
12296
|
+
},
|
|
12297
|
+
// we want to yield as this is called synchronusly from an user interaction.
|
|
12298
|
+
enableAsyncURLUpdates);
|
|
12299
|
+
if (!enableAsyncURLUpdates)
|
|
12300
|
+
return yield updateURLPromise;
|
|
12000
12301
|
return;
|
|
12001
12302
|
}
|
|
12002
12303
|
if (!newRoute)
|
|
12003
12304
|
return;
|
|
12004
|
-
|
|
12005
|
-
|
|
12006
|
-
pushRouteState(routeId, newRoute, {
|
|
12305
|
+
const currentRoute = routes[currentRouteRef.current];
|
|
12306
|
+
const updateURL = (...args_1) => __awaiter(this, [...args_1], void 0, function* (ignorePushStateWrapper = false) {
|
|
12307
|
+
return pushRouteState(routeId, newRoute, {
|
|
12007
12308
|
currentRoutePath: currentRoute === null || currentRoute === void 0 ? void 0 : currentRoute.path,
|
|
12008
|
-
currentPathVariables:
|
|
12309
|
+
currentPathVariables: currentPathVariables2,
|
|
12009
12310
|
hash: hash2,
|
|
12010
12311
|
pathVariables,
|
|
12011
|
-
localeId:
|
|
12312
|
+
localeId: currentRouteLocaleId,
|
|
12012
12313
|
preserveQueryParams,
|
|
12013
|
-
}
|
|
12014
|
-
|
|
12015
|
-
|
|
12016
|
-
|
|
12017
|
-
|
|
12314
|
+
},
|
|
12315
|
+
// we yield in startNavigation before updating the URL, so yielding again is not needed.
|
|
12316
|
+
false, ignorePushStateWrapper);
|
|
12317
|
+
});
|
|
12318
|
+
setCurrentRouteId(routeId, currentRouteLocaleId, routeElementId, pathVariables, smoothScroll, false, disableHistory ? void 0 : updateURL);
|
|
12319
|
+
}), [routes, setCurrentRouteId, disableHistory, preserveQueryParams, enableAsyncURLUpdates,]);
|
|
12018
12320
|
const getRoute = useGetRouteCallback(routes);
|
|
12019
12321
|
const currentRouteId = currentRouteRef.current;
|
|
12020
12322
|
const currentPathVariables = currentPathVariablesRef.current;
|
|
12021
|
-
const api =
|
|
12323
|
+
const api = useMemo(() => ({
|
|
12022
12324
|
navigate,
|
|
12023
12325
|
getRoute,
|
|
12024
12326
|
currentRouteId,
|
|
@@ -12046,16 +12348,17 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
|
|
|
12046
12348
|
notFoundPage,
|
|
12047
12349
|
defaultPageStyle,
|
|
12048
12350
|
forceUpdateKey: dep,
|
|
12049
|
-
children:
|
|
12050
|
-
children:
|
|
12051
|
-
|
|
12052
|
-
|
|
12351
|
+
children: jsxs(Fragment, {
|
|
12352
|
+
children: [
|
|
12353
|
+
jsx(MarkSuspenseEffects.Start, {}),
|
|
12354
|
+
pageExistsInCurrentLocale
|
|
12355
|
+
? renderPage(current.page, defaultPageStyle)
|
|
12356
|
+
: notFoundPage && renderPage(notFoundPage, defaultPageStyle),
|
|
12357
|
+
],
|
|
12053
12358
|
}, remountKey),
|
|
12054
12359
|
}),
|
|
12055
|
-
jsx(
|
|
12056
|
-
|
|
12057
|
-
turnOffEventHandlerHack: enableImproveInpDuringHydration,
|
|
12058
|
-
}),
|
|
12360
|
+
jsx(TurnOnReactEventHandling, {}),
|
|
12361
|
+
jsx(MarkSuspenseEffects.End, {}),
|
|
12059
12362
|
],
|
|
12060
12363
|
}),
|
|
12061
12364
|
}),
|
|
@@ -14226,8 +14529,8 @@ var ObjectInterpolation = (valueInterpolation) => {
|
|
|
14226
14529
|
difference(from, to) {
|
|
14227
14530
|
let sum = 0;
|
|
14228
14531
|
for (const key7 in from) {
|
|
14229
|
-
const
|
|
14230
|
-
sum += Math.pow(
|
|
14532
|
+
const difference2 = valueInterpolation.difference(from[key7], to[key7]);
|
|
14533
|
+
sum += Math.pow(difference2, 2);
|
|
14231
14534
|
}
|
|
14232
14535
|
return Math.sqrt(sum);
|
|
14233
14536
|
},
|
|
@@ -17212,6 +17515,7 @@ var richTextCSSRules = [
|
|
|
17212
17515
|
h6.framer-text:not(:first-child),
|
|
17213
17516
|
ol.framer-text:not(:first-child),
|
|
17214
17517
|
ul.framer-text:not(:first-child),
|
|
17518
|
+
blockquote.framer-text:not(:first-child),
|
|
17215
17519
|
.framer-image.framer-text:not(:first-child) {
|
|
17216
17520
|
margin-top: var(--framer-blockquote-paragraph-spacing, var(--framer-paragraph-spacing, 0));
|
|
17217
17521
|
}
|
|
@@ -17249,13 +17553,13 @@ var richTextCSSRules = [
|
|
|
17249
17553
|
`
|
|
17250
17554
|
code.framer-text,
|
|
17251
17555
|
code.framer-text span.framer-text:not([data-text-fill]) {
|
|
17252
|
-
font-family: var(--framer-code-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif));
|
|
17253
|
-
font-style: var(--framer-code-font-style, var(--framer-font-style, normal));
|
|
17254
|
-
font-weight: var(--framer-code-font-weight, var(--framer-font-weight, 400));
|
|
17255
|
-
color: var(--framer-code-text-color, var(--framer-text-color, #000));
|
|
17256
|
-
font-size: calc(var(--framer-font-size, 16px) * var(--framer-font-size-scale, 1));
|
|
17257
|
-
letter-spacing: var(--framer-letter-spacing, 0);
|
|
17258
|
-
line-height: var(--framer-line-height, 1.2em);
|
|
17556
|
+
font-family: var(--framer-blockquote-font-family, var(--framer-code-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)));
|
|
17557
|
+
font-style: var(--framer-blockquote-font-style, var(--framer-code-font-style, var(--framer-font-style, normal)));
|
|
17558
|
+
font-weight: var(--framer-blockquote-font-weight, var(--framer-code-font-weight, var(--framer-font-weight, 400)));
|
|
17559
|
+
color: var(--framer-blockquote-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)));
|
|
17560
|
+
font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
|
|
17561
|
+
letter-spacing: var(--framer-blockquote-letter-spacing, var(--framer-letter-spacing, 0));
|
|
17562
|
+
line-height: var(--framer-blockquote-line-height, var(--framer-line-height, 1.2em));
|
|
17259
17563
|
}
|
|
17260
17564
|
`, /* css */
|
|
17261
17565
|
`
|
|
@@ -17270,13 +17574,13 @@ var richTextCSSRules = [
|
|
|
17270
17574
|
`
|
|
17271
17575
|
a.framer-text,
|
|
17272
17576
|
a.framer-text span.framer-text:not([data-text-fill]) {
|
|
17273
|
-
font-family: var(--framer-link-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif));
|
|
17274
|
-
font-style: var(--framer-link-font-style, var(--framer-font-style, normal));
|
|
17275
|
-
font-weight: var(--framer-link-font-weight, var(--framer-font-weight, 400));
|
|
17276
|
-
color: var(--framer-link-text-color, var(--framer-text-color, #000));
|
|
17277
|
-
font-size: calc(var(--framer-
|
|
17278
|
-
text-transform: var(--framer-link-text-transform, var(--framer-text-transform, none));
|
|
17279
|
-
text-decoration: var(--framer-link-text-decoration, var(--framer-text-decoration, none));
|
|
17577
|
+
font-family: var(--framer-blockquote-font-family, var(--framer-link-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)));
|
|
17578
|
+
font-style: var(--framer-blockquote-font-style, var(--framer-link-font-style, var(--framer-font-style, normal)));
|
|
17579
|
+
font-weight: var(--framer-blockquote-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400)));
|
|
17580
|
+
color: var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
|
|
17581
|
+
font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
|
|
17582
|
+
text-transform: var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
|
|
17583
|
+
text-decoration: var(--framer-blockquote-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none)));
|
|
17280
17584
|
/* Cursor inherit to overwrite the user agent stylesheet on rich text links. */
|
|
17281
17585
|
cursor: var(--framer-custom-cursors, pointer);
|
|
17282
17586
|
}
|
|
@@ -17284,33 +17588,33 @@ var richTextCSSRules = [
|
|
|
17284
17588
|
`
|
|
17285
17589
|
code.framer-text a.framer-text,
|
|
17286
17590
|
code.framer-text a.framer-text span.framer-text:not([data-text-fill]) {
|
|
17287
|
-
font-family: var(--framer-code-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif));
|
|
17288
|
-
font-style: var(--framer-code-font-style, var(--framer-font-style, normal));
|
|
17289
|
-
font-weight: var(--framer-code-font-weight, var(--framer-font-weight, 400));
|
|
17290
|
-
color: var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)));
|
|
17291
|
-
font-size: calc(var(--framer-
|
|
17591
|
+
font-family: var(--framer-blockquote-font-family, var(--framer-code-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)));
|
|
17592
|
+
font-style: var(--framer-blockquote-font-style, var(--framer-code-font-style, var(--framer-font-style, normal)));
|
|
17593
|
+
font-weight: var(--framer-blockquote-font-weight, var(--framer-code-font-weight, var(--framer-font-weight, 400)));
|
|
17594
|
+
color: var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000))));
|
|
17595
|
+
font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
|
|
17292
17596
|
}
|
|
17293
17597
|
`, /* css */
|
|
17294
17598
|
`
|
|
17295
17599
|
a.framer-text:hover,
|
|
17296
17600
|
a.framer-text:hover span.framer-text:not([data-text-fill]) {
|
|
17297
|
-
font-family: var(--framer-link-hover-font-family, var(--framer-link-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)));
|
|
17298
|
-
font-style: var(--framer-link-hover-font-style, var(--framer-link-font-style, var(--framer-font-style, normal)));
|
|
17299
|
-
font-weight: var(--framer-link-hover-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400)));
|
|
17300
|
-
color: var(--framer-link-hover-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
|
|
17301
|
-
font-size: calc(var(--framer-link-hover-font-size, var(--framer-
|
|
17302
|
-
text-transform: var(--framer-link-hover-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
|
|
17303
|
-
text-decoration: var(--framer-link-hover-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none)));
|
|
17601
|
+
font-family: var(--framer-link-hover-font-family, var(--framer-blockquote-font-family, var(--framer-link-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif))));
|
|
17602
|
+
font-style: var(--framer-link-hover-font-style, var(--framer-blockquote-font-style, var(--framer-link-font-style, var(--framer-font-style, normal))));
|
|
17603
|
+
font-weight: var(--framer-link-hover-font-weight, var(--framer-blockquote-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400))));
|
|
17604
|
+
color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
|
|
17605
|
+
font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
|
|
17606
|
+
text-transform: var(--framer-link-hover-text-transform, var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
|
|
17607
|
+
text-decoration: var(--framer-link-hover-text-decoration, var(--framer-blockquote-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none))));
|
|
17304
17608
|
}
|
|
17305
17609
|
`, /* css */
|
|
17306
17610
|
`
|
|
17307
17611
|
code.framer-text a.framer-text:hover,
|
|
17308
17612
|
code.framer-text a.framer-text:hover span.framer-text:not([data-text-fill]) {
|
|
17309
|
-
font-family: var(--framer-code-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif));
|
|
17310
|
-
font-style: var(--framer-code-font-style, var(--framer-font-style, normal));
|
|
17311
|
-
font-weight: var(--framer-code-font-weight, var(--framer-font-weight, 400));
|
|
17312
|
-
color: var(--framer-link-hover-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000))));
|
|
17313
|
-
font-size: calc(var(--framer-link-hover-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
|
|
17613
|
+
font-family: var(--framer-blockquote-font-family, var(--framer-code-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)));
|
|
17614
|
+
font-style: var(--framer-blockquote-font-style, var(--framer-code-font-style, var(--framer-font-style, normal)));
|
|
17615
|
+
font-weight: var(--framer-blockquote-font-weight, var(--framer-code-font-weight, var(--framer-font-weight, 400)));
|
|
17616
|
+
color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)))));
|
|
17617
|
+
font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px)))) * var(--framer-font-size-scale, 1));
|
|
17314
17618
|
}
|
|
17315
17619
|
`, /* css */
|
|
17316
17620
|
`
|
|
@@ -17802,8 +18106,8 @@ function isUndefined(value) {
|
|
|
17802
18106
|
function isNull(value) {
|
|
17803
18107
|
return value === null;
|
|
17804
18108
|
}
|
|
17805
|
-
function
|
|
17806
|
-
return
|
|
18109
|
+
function isNullish2(value) {
|
|
18110
|
+
return value == null;
|
|
17807
18111
|
}
|
|
17808
18112
|
function isValidDate(value) {
|
|
17809
18113
|
return value instanceof Date && !isNaN(value.getTime());
|
|
@@ -19413,148 +19717,6 @@ var reactPropsRegex = /^(?:children|dangerouslySetInnerHTML|key|ref|autoFocus|de
|
|
|
19413
19717
|
var isPropValid = /* @__PURE__ */ memoize((prop) => reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 && prop.charCodeAt(1) === 110 && prop.charCodeAt(2) < 91
|
|
19414
19718
|
/* Z+1 */
|
|
19415
19719
|
);
|
|
19416
|
-
var LibraryFeaturesContext = /* @__PURE__ */ React4.createContext(void 0);
|
|
19417
|
-
var LibraryFeaturesProvider = /* @__PURE__ */ (() => LibraryFeaturesContext.Provider)();
|
|
19418
|
-
var useLibraryFeatures = () => {
|
|
19419
|
-
const context = React4.useContext(LibraryFeaturesContext);
|
|
19420
|
-
return context !== null && context !== void 0 ? context : {};
|
|
19421
|
-
};
|
|
19422
|
-
var import_process = __toESM(require_browser(), 1);
|
|
19423
|
-
var safeNavigator = typeof navigator !== 'undefined' ? navigator : void 0;
|
|
19424
|
-
var isBrowser2 = () => typeof document === 'object';
|
|
19425
|
-
var isWebKit = () => {
|
|
19426
|
-
var _a;
|
|
19427
|
-
return ((_a = safeNavigator) == null ? void 0 : _a.userAgent.includes('AppleWebKit/')) && !isChrome() && !isEdge();
|
|
19428
|
-
};
|
|
19429
|
-
var webkitVersion = () => {
|
|
19430
|
-
let version2 = -1;
|
|
19431
|
-
const regexp = /AppleWebKit\/([\d.]+)/;
|
|
19432
|
-
const result = safeNavigator && regexp.exec(safeNavigator.userAgent);
|
|
19433
|
-
if (result && result[1]) {
|
|
19434
|
-
version2 = parseFloat(result[1]);
|
|
19435
|
-
}
|
|
19436
|
-
return version2;
|
|
19437
|
-
};
|
|
19438
|
-
var safariVersion = () => {
|
|
19439
|
-
let version2 = -1;
|
|
19440
|
-
const regexp = /Version\/([\d.]+)/;
|
|
19441
|
-
const result = safeNavigator && regexp.exec(safeNavigator.userAgent);
|
|
19442
|
-
if (result && result[1]) {
|
|
19443
|
-
version2 = parseFloat(result[1]);
|
|
19444
|
-
}
|
|
19445
|
-
return version2;
|
|
19446
|
-
};
|
|
19447
|
-
var isChrome = () => safeNavigator && /Chrome/.test(safeNavigator.userAgent) && /Google Inc/.test(safeNavigator.vendor) && !isEdge();
|
|
19448
|
-
var isSafari = () => safeNavigator && /Safari/.test(safeNavigator.userAgent) && /Apple Computer/.test(safeNavigator.vendor);
|
|
19449
|
-
var isFirefox = () => safeNavigator && /Firefox\/\d+\.\d+$/.test(safeNavigator.userAgent);
|
|
19450
|
-
var isFramerX = () => safeNavigator && /FramerX/.test(safeNavigator.userAgent);
|
|
19451
|
-
var isEdge = () => safeNavigator && /Edg\//.test(safeNavigator.userAgent);
|
|
19452
|
-
var isAndroid = () => safeNavigator && /android/i.test(safeNavigator.userAgent);
|
|
19453
|
-
var isIOS = () => safeNavigator && /iPhone|iPod|iPad/i.test(safeNavigator.platform);
|
|
19454
|
-
var isMacOS = () => safeNavigator && /Mac/.test(safeNavigator.platform);
|
|
19455
|
-
var isWindows = () => safeNavigator && /Win/.test(safeNavigator.platform);
|
|
19456
|
-
var isTouch = () => safeWindow.ontouchstart === null && safeWindow.ontouchmove === null && safeWindow.ontouchend === null;
|
|
19457
|
-
var isDesktop = () => deviceType() === 'desktop';
|
|
19458
|
-
var isPhone = () => deviceType() === 'phone';
|
|
19459
|
-
var isTablet = () => deviceType() === 'tablet';
|
|
19460
|
-
var isMobile = () => isPhone() || isTablet();
|
|
19461
|
-
var isFileUrl = (url) => url.startsWith('file://');
|
|
19462
|
-
var isDataUrl = (url) => url.startsWith('data:');
|
|
19463
|
-
var isTest = () => import_process.default.env.NODE_ENV === 'test';
|
|
19464
|
-
var isRelativeUrl = (url) => !/^[a-z]{1,8}:\/\/.*$/i.test(url);
|
|
19465
|
-
var isLocalServerUrl = (url) => /[a-z]{1,8}:\/\/127\.0\.0\.1/i.test(url) || /[a-zA-Z]{1,8}:\/\/localhost/.test(url);
|
|
19466
|
-
var isLocalUrl = (url) => {
|
|
19467
|
-
if (isFileUrl(url))
|
|
19468
|
-
return true;
|
|
19469
|
-
if (isLocalServerUrl(url))
|
|
19470
|
-
return true;
|
|
19471
|
-
return false;
|
|
19472
|
-
};
|
|
19473
|
-
var isLocalAssetUrl = (url, baseUrl) => {
|
|
19474
|
-
if (baseUrl === null)
|
|
19475
|
-
baseUrl = safeWindow.location.href;
|
|
19476
|
-
if (isDataUrl(url))
|
|
19477
|
-
return false;
|
|
19478
|
-
if (isLocalUrl(url))
|
|
19479
|
-
return true;
|
|
19480
|
-
if (isRelativeUrl(url) && isLocalUrl(baseUrl))
|
|
19481
|
-
return true;
|
|
19482
|
-
return false;
|
|
19483
|
-
};
|
|
19484
|
-
var devicePixelRatio2 = () => safeWindow.devicePixelRatio;
|
|
19485
|
-
var isJP2Supported = function () {
|
|
19486
|
-
if (isFirefox())
|
|
19487
|
-
return false;
|
|
19488
|
-
return isWebKit();
|
|
19489
|
-
};
|
|
19490
|
-
var isWebPSupported = () => isChrome();
|
|
19491
|
-
var deviceType = () => {
|
|
19492
|
-
if (safeNavigator && /tablet|iPad|Nexus 9/i.test(safeNavigator.userAgent))
|
|
19493
|
-
return 'tablet';
|
|
19494
|
-
if (safeNavigator && /mobi/i.test(safeNavigator.userAgent))
|
|
19495
|
-
return 'phone';
|
|
19496
|
-
return 'desktop';
|
|
19497
|
-
};
|
|
19498
|
-
var deviceOS = () => {
|
|
19499
|
-
if (isMacOS())
|
|
19500
|
-
return 'macos';
|
|
19501
|
-
if (isIOS())
|
|
19502
|
-
return 'ios';
|
|
19503
|
-
if (isAndroid())
|
|
19504
|
-
return 'android';
|
|
19505
|
-
if (isWindows())
|
|
19506
|
-
return 'windows';
|
|
19507
|
-
};
|
|
19508
|
-
var deviceFont = (os) => {
|
|
19509
|
-
if (!os) {
|
|
19510
|
-
os = deviceOS();
|
|
19511
|
-
}
|
|
19512
|
-
const fonts = {
|
|
19513
|
-
apple: '-apple-system, BlinkMacSystemFont, SF Pro Text, SF UI Text, Helvetica Neue',
|
|
19514
|
-
google: 'Roboto, Helvetica Neue',
|
|
19515
|
-
microsoft: 'Segoe UI, Helvetica Neue',
|
|
19516
|
-
};
|
|
19517
|
-
if (os === 'macos')
|
|
19518
|
-
return fonts.apple;
|
|
19519
|
-
if (os === 'ios')
|
|
19520
|
-
return fonts.apple;
|
|
19521
|
-
if (os === 'android')
|
|
19522
|
-
return fonts.google;
|
|
19523
|
-
if (os === 'windows')
|
|
19524
|
-
return fonts.microsoft;
|
|
19525
|
-
return fonts.apple;
|
|
19526
|
-
};
|
|
19527
|
-
var environment = {
|
|
19528
|
-
isWebKit,
|
|
19529
|
-
webkitVersion,
|
|
19530
|
-
isChrome,
|
|
19531
|
-
isSafari,
|
|
19532
|
-
isFirefox,
|
|
19533
|
-
isFramerX,
|
|
19534
|
-
isEdge,
|
|
19535
|
-
isAndroid,
|
|
19536
|
-
isIOS,
|
|
19537
|
-
isMacOS,
|
|
19538
|
-
isWindows,
|
|
19539
|
-
isTouch,
|
|
19540
|
-
isDesktop,
|
|
19541
|
-
isPhone,
|
|
19542
|
-
isTablet,
|
|
19543
|
-
isMobile,
|
|
19544
|
-
isFileUrl,
|
|
19545
|
-
isDataUrl,
|
|
19546
|
-
isRelativeUrl,
|
|
19547
|
-
isLocalServerUrl,
|
|
19548
|
-
isLocalUrl,
|
|
19549
|
-
isLocalAssetUrl,
|
|
19550
|
-
devicePixelRatio: devicePixelRatio2,
|
|
19551
|
-
isJP2Supported,
|
|
19552
|
-
isWebPSupported,
|
|
19553
|
-
deviceType,
|
|
19554
|
-
deviceOS,
|
|
19555
|
-
deviceFont,
|
|
19556
|
-
safariVersion,
|
|
19557
|
-
};
|
|
19558
19720
|
var mockWithWarning = (message) => {
|
|
19559
19721
|
return () => {
|
|
19560
19722
|
warnOnce2(message);
|
|
@@ -19688,39 +19850,12 @@ function getImageStyle(image, containerSize) {
|
|
|
19688
19850
|
function StaticImage({ image, containerSize, nodeId, alt, }) {
|
|
19689
19851
|
const source = runtime.useImageSource(image, containerSize, nodeId);
|
|
19690
19852
|
const imageStyle = getImageStyle(image, containerSize);
|
|
19691
|
-
const [measuredSizes, setMeasuredSizes,] = React4.useState();
|
|
19692
19853
|
const imageRef = React4.useRef(null);
|
|
19693
|
-
const libraryFeatures = useLibraryFeatures();
|
|
19694
|
-
React4.useEffect(() => {
|
|
19695
|
-
if (!libraryFeatures.imgSizesWorkaroundEnabled)
|
|
19696
|
-
return;
|
|
19697
|
-
const imageElement = imageRef.current;
|
|
19698
|
-
if (!imageElement)
|
|
19699
|
-
return;
|
|
19700
|
-
if (isTest())
|
|
19701
|
-
return;
|
|
19702
|
-
if (!image.sizes)
|
|
19703
|
-
return;
|
|
19704
|
-
const smartComponentParent = imageElement.closest('[data-framer-name]');
|
|
19705
|
-
if (!smartComponentParent)
|
|
19706
|
-
return;
|
|
19707
|
-
const imageNodeWidth = imageElement.clientWidth;
|
|
19708
|
-
const currentSizes = Number(image.sizes.replace('px', ''));
|
|
19709
|
-
if (
|
|
19710
|
-
// If we successfully parsed `sizes`, and...
|
|
19711
|
-
!isNaN(currentSizes) &&
|
|
19712
|
-
// ...if the image node is smaller than the currently set `sizes`
|
|
19713
|
-
// attribute,..
|
|
19714
|
-
imageNodeWidth < currentSizes) {
|
|
19715
|
-
return;
|
|
19716
|
-
}
|
|
19717
|
-
setMeasuredSizes(imageNodeWidth + 'px');
|
|
19718
|
-
}, [image.sizes,]);
|
|
19719
19854
|
return /* @__PURE__ */ jsx('img', {
|
|
19720
19855
|
ref: imageRef,
|
|
19721
19856
|
decoding: 'async',
|
|
19722
19857
|
loading: image.loading,
|
|
19723
|
-
sizes:
|
|
19858
|
+
sizes: image.sizes,
|
|
19724
19859
|
srcSet: image.srcSet,
|
|
19725
19860
|
src: source,
|
|
19726
19861
|
alt: alt !== null && alt !== void 0 ? alt : image.alt,
|
|
@@ -19911,6 +20046,142 @@ function Border(props) {
|
|
|
19911
20046
|
function htmlElementAsMotionComponent(asElem) {
|
|
19912
20047
|
return asElem && asElem !== 'search' && asElem !== 'slot' && asElem !== 'template' ? motion[asElem] : motion['div'];
|
|
19913
20048
|
}
|
|
20049
|
+
var import_process = __toESM(require_browser(), 1);
|
|
20050
|
+
var safeNavigator = typeof navigator !== 'undefined' ? navigator : void 0;
|
|
20051
|
+
var isBrowser2 = () => typeof document === 'object';
|
|
20052
|
+
var isWebKit = () => {
|
|
20053
|
+
var _a;
|
|
20054
|
+
return ((_a = safeNavigator) == null ? void 0 : _a.userAgent.includes('AppleWebKit/')) && !isChrome() && !isEdge();
|
|
20055
|
+
};
|
|
20056
|
+
var webkitVersion = () => {
|
|
20057
|
+
let version2 = -1;
|
|
20058
|
+
const regexp = /AppleWebKit\/([\d.]+)/;
|
|
20059
|
+
const result = safeNavigator && regexp.exec(safeNavigator.userAgent);
|
|
20060
|
+
if (result && result[1]) {
|
|
20061
|
+
version2 = parseFloat(result[1]);
|
|
20062
|
+
}
|
|
20063
|
+
return version2;
|
|
20064
|
+
};
|
|
20065
|
+
var safariVersion = () => {
|
|
20066
|
+
let version2 = -1;
|
|
20067
|
+
const regexp = /Version\/([\d.]+)/;
|
|
20068
|
+
const result = safeNavigator && regexp.exec(safeNavigator.userAgent);
|
|
20069
|
+
if (result && result[1]) {
|
|
20070
|
+
version2 = parseFloat(result[1]);
|
|
20071
|
+
}
|
|
20072
|
+
return version2;
|
|
20073
|
+
};
|
|
20074
|
+
var isChrome = () => safeNavigator && /Chrome/.test(safeNavigator.userAgent) && /Google Inc/.test(safeNavigator.vendor) && !isEdge();
|
|
20075
|
+
var isSafari = () => safeNavigator && /Safari/.test(safeNavigator.userAgent) && /Apple Computer/.test(safeNavigator.vendor);
|
|
20076
|
+
var isFirefox = () => safeNavigator && /Firefox\/\d+\.\d+$/.test(safeNavigator.userAgent);
|
|
20077
|
+
var isFramerX = () => safeNavigator && /FramerX/.test(safeNavigator.userAgent);
|
|
20078
|
+
var isEdge = () => safeNavigator && /Edg\//.test(safeNavigator.userAgent);
|
|
20079
|
+
var isAndroid = () => safeNavigator && /android/i.test(safeNavigator.userAgent);
|
|
20080
|
+
var isIOS = () => safeNavigator && /iPhone|iPod|iPad/i.test(safeNavigator.platform);
|
|
20081
|
+
var isMacOS = () => safeNavigator && /Mac/.test(safeNavigator.platform);
|
|
20082
|
+
var isWindows = () => safeNavigator && /Win/.test(safeNavigator.platform);
|
|
20083
|
+
var isTouch = () => safeWindow.ontouchstart === null && safeWindow.ontouchmove === null && safeWindow.ontouchend === null;
|
|
20084
|
+
var isDesktop = () => deviceType() === 'desktop';
|
|
20085
|
+
var isPhone = () => deviceType() === 'phone';
|
|
20086
|
+
var isTablet = () => deviceType() === 'tablet';
|
|
20087
|
+
var isMobile = () => isPhone() || isTablet();
|
|
20088
|
+
var isFileUrl = (url) => url.startsWith('file://');
|
|
20089
|
+
var isDataUrl = (url) => url.startsWith('data:');
|
|
20090
|
+
var isTest = () => import_process.default.env.NODE_ENV === 'test';
|
|
20091
|
+
var isRelativeUrl = (url) => !/^[a-z]{1,8}:\/\/.*$/i.test(url);
|
|
20092
|
+
var isLocalServerUrl = (url) => /[a-z]{1,8}:\/\/127\.0\.0\.1/i.test(url) || /[a-zA-Z]{1,8}:\/\/localhost/.test(url);
|
|
20093
|
+
var isLocalUrl = (url) => {
|
|
20094
|
+
if (isFileUrl(url))
|
|
20095
|
+
return true;
|
|
20096
|
+
if (isLocalServerUrl(url))
|
|
20097
|
+
return true;
|
|
20098
|
+
return false;
|
|
20099
|
+
};
|
|
20100
|
+
var isLocalAssetUrl = (url, baseUrl) => {
|
|
20101
|
+
if (baseUrl === null)
|
|
20102
|
+
baseUrl = safeWindow.location.href;
|
|
20103
|
+
if (isDataUrl(url))
|
|
20104
|
+
return false;
|
|
20105
|
+
if (isLocalUrl(url))
|
|
20106
|
+
return true;
|
|
20107
|
+
if (isRelativeUrl(url) && isLocalUrl(baseUrl))
|
|
20108
|
+
return true;
|
|
20109
|
+
return false;
|
|
20110
|
+
};
|
|
20111
|
+
var devicePixelRatio2 = () => safeWindow.devicePixelRatio;
|
|
20112
|
+
var isJP2Supported = function () {
|
|
20113
|
+
if (isFirefox())
|
|
20114
|
+
return false;
|
|
20115
|
+
return isWebKit();
|
|
20116
|
+
};
|
|
20117
|
+
var isWebPSupported = () => isChrome();
|
|
20118
|
+
var deviceType = () => {
|
|
20119
|
+
if (safeNavigator && /tablet|iPad|Nexus 9/i.test(safeNavigator.userAgent))
|
|
20120
|
+
return 'tablet';
|
|
20121
|
+
if (safeNavigator && /mobi/i.test(safeNavigator.userAgent))
|
|
20122
|
+
return 'phone';
|
|
20123
|
+
return 'desktop';
|
|
20124
|
+
};
|
|
20125
|
+
var deviceOS = () => {
|
|
20126
|
+
if (isMacOS())
|
|
20127
|
+
return 'macos';
|
|
20128
|
+
if (isIOS())
|
|
20129
|
+
return 'ios';
|
|
20130
|
+
if (isAndroid())
|
|
20131
|
+
return 'android';
|
|
20132
|
+
if (isWindows())
|
|
20133
|
+
return 'windows';
|
|
20134
|
+
};
|
|
20135
|
+
var deviceFont = (os) => {
|
|
20136
|
+
if (!os) {
|
|
20137
|
+
os = deviceOS();
|
|
20138
|
+
}
|
|
20139
|
+
const fonts = {
|
|
20140
|
+
apple: '-apple-system, BlinkMacSystemFont, SF Pro Text, SF UI Text, Helvetica Neue',
|
|
20141
|
+
google: 'Roboto, Helvetica Neue',
|
|
20142
|
+
microsoft: 'Segoe UI, Helvetica Neue',
|
|
20143
|
+
};
|
|
20144
|
+
if (os === 'macos')
|
|
20145
|
+
return fonts.apple;
|
|
20146
|
+
if (os === 'ios')
|
|
20147
|
+
return fonts.apple;
|
|
20148
|
+
if (os === 'android')
|
|
20149
|
+
return fonts.google;
|
|
20150
|
+
if (os === 'windows')
|
|
20151
|
+
return fonts.microsoft;
|
|
20152
|
+
return fonts.apple;
|
|
20153
|
+
};
|
|
20154
|
+
var environment = {
|
|
20155
|
+
isWebKit,
|
|
20156
|
+
webkitVersion,
|
|
20157
|
+
isChrome,
|
|
20158
|
+
isSafari,
|
|
20159
|
+
isFirefox,
|
|
20160
|
+
isFramerX,
|
|
20161
|
+
isEdge,
|
|
20162
|
+
isAndroid,
|
|
20163
|
+
isIOS,
|
|
20164
|
+
isMacOS,
|
|
20165
|
+
isWindows,
|
|
20166
|
+
isTouch,
|
|
20167
|
+
isDesktop,
|
|
20168
|
+
isPhone,
|
|
20169
|
+
isTablet,
|
|
20170
|
+
isMobile,
|
|
20171
|
+
isFileUrl,
|
|
20172
|
+
isDataUrl,
|
|
20173
|
+
isRelativeUrl,
|
|
20174
|
+
isLocalServerUrl,
|
|
20175
|
+
isLocalUrl,
|
|
20176
|
+
isLocalAssetUrl,
|
|
20177
|
+
devicePixelRatio: devicePixelRatio2,
|
|
20178
|
+
isJP2Supported,
|
|
20179
|
+
isWebPSupported,
|
|
20180
|
+
deviceType,
|
|
20181
|
+
deviceOS,
|
|
20182
|
+
deviceFont,
|
|
20183
|
+
safariVersion,
|
|
20184
|
+
};
|
|
19914
20185
|
var isChrome2 = /* @__PURE__ */ isChrome();
|
|
19915
20186
|
function layoutHintDataPropsForCenter(center) {
|
|
19916
20187
|
const props = {};
|
|
@@ -29303,6 +29574,9 @@ var LazyValue = class {
|
|
|
29303
29574
|
};
|
|
29304
29575
|
return promise;
|
|
29305
29576
|
}
|
|
29577
|
+
waitFor() {
|
|
29578
|
+
return this.resolver();
|
|
29579
|
+
}
|
|
29306
29580
|
/** Synchronously read the value after calling preload() before. */
|
|
29307
29581
|
read() {
|
|
29308
29582
|
const status = this.status;
|
|
@@ -29321,6 +29595,12 @@ var LazyValue = class {
|
|
|
29321
29595
|
}
|
|
29322
29596
|
}
|
|
29323
29597
|
};
|
|
29598
|
+
var LibraryFeaturesContext = /* @__PURE__ */ React4.createContext(void 0);
|
|
29599
|
+
var LibraryFeaturesProvider = /* @__PURE__ */ (() => LibraryFeaturesContext.Provider)();
|
|
29600
|
+
var useLibraryFeatures = () => {
|
|
29601
|
+
const context = React4.useContext(LibraryFeaturesContext);
|
|
29602
|
+
return context !== null && context !== void 0 ? context : {};
|
|
29603
|
+
};
|
|
29324
29604
|
function findAnchorElement(target, withinElement) {
|
|
29325
29605
|
if (target instanceof HTMLAnchorElement) {
|
|
29326
29606
|
return target;
|
|
@@ -29661,7 +29941,7 @@ function createOnClickLinkHandler(router, routeId, elementId, combinedPathVariab
|
|
|
29661
29941
|
event.preventDefault();
|
|
29662
29942
|
const route = (_a = router.getRoute) == null ? void 0 : _a.call(router, routeId);
|
|
29663
29943
|
if (route && isLazyComponentType(route == null ? void 0 : route.page)) {
|
|
29664
|
-
|
|
29944
|
+
void route.page.preload();
|
|
29665
29945
|
}
|
|
29666
29946
|
(_b = router.navigate) == null ? void 0 : _b.call(router, routeId, elementId, combinedPathVariables, smoothScroll);
|
|
29667
29947
|
});
|
|
@@ -30103,7 +30383,300 @@ function responseHasError(response) {
|
|
|
30103
30383
|
return typeof response === 'object' && response !== null && 'error' in response && isObject2(response.error) &&
|
|
30104
30384
|
'message' in response.error && typeof response.error.message === 'string';
|
|
30105
30385
|
}
|
|
30106
|
-
|
|
30386
|
+
var loadingFetchResult = {
|
|
30387
|
+
status: 'loading',
|
|
30388
|
+
data: void 0,
|
|
30389
|
+
};
|
|
30390
|
+
function isValidURL2(href) {
|
|
30391
|
+
try {
|
|
30392
|
+
const url = new URL(href);
|
|
30393
|
+
return Boolean(url.protocol);
|
|
30394
|
+
}
|
|
30395
|
+
catch (_j) { }
|
|
30396
|
+
}
|
|
30397
|
+
function isCacheExpired(insertionTimestamp, cacheDuration) {
|
|
30398
|
+
const cacheDurationMs = cacheDuration * 1e3;
|
|
30399
|
+
const currentTimestamp = Date.now();
|
|
30400
|
+
const expirationTimestamp = insertionTimestamp + cacheDurationMs;
|
|
30401
|
+
return currentTimestamp >= expirationTimestamp;
|
|
30402
|
+
}
|
|
30403
|
+
var noop22 = () => { };
|
|
30404
|
+
var _responseValues;
|
|
30405
|
+
var _subscribers;
|
|
30406
|
+
var _cacheDurations;
|
|
30407
|
+
var _cachedAt;
|
|
30408
|
+
var _staleQueriesInterval;
|
|
30409
|
+
var _FetchClient = class {
|
|
30410
|
+
constructor() {
|
|
30411
|
+
__privateAdd(this, _responseValues, /* @__PURE__ */ new Map());
|
|
30412
|
+
__privateAdd(this, _subscribers, /* @__PURE__ */ new Map());
|
|
30413
|
+
__privateAdd(this, _cacheDurations, /* @__PURE__ */ new Map());
|
|
30414
|
+
__privateAdd(this, _cachedAt, /* @__PURE__ */ new Map());
|
|
30415
|
+
__privateAdd(this, _staleQueriesInterval, void 0);
|
|
30416
|
+
__publicField(this, 'checkForStaleQueries', () => {
|
|
30417
|
+
const activeURLS = __privateGet(this, _subscribers).keys();
|
|
30418
|
+
for (const url of activeURLS) {
|
|
30419
|
+
const cachedAt = __privateGet(this, _cachedAt).get(url);
|
|
30420
|
+
const cacheDuration = __privateGet(this, _cacheDurations).get(url);
|
|
30421
|
+
if (!cacheDuration || !cachedAt)
|
|
30422
|
+
continue;
|
|
30423
|
+
void this.fetchWithCache(url, cacheDuration);
|
|
30424
|
+
}
|
|
30425
|
+
});
|
|
30426
|
+
__publicField(this, 'persistCache', debounce(() => {
|
|
30427
|
+
const data2 = {};
|
|
30428
|
+
for (const [url, responseValue,] of __privateGet(this, _responseValues)) {
|
|
30429
|
+
if (!responseValue)
|
|
30430
|
+
continue;
|
|
30431
|
+
if (responseValue.status !== 'success')
|
|
30432
|
+
continue;
|
|
30433
|
+
const cacheConfig = __privateGet(this, _cacheDurations).get(url);
|
|
30434
|
+
if (!cacheConfig || cacheConfig === 0)
|
|
30435
|
+
continue;
|
|
30436
|
+
const storedAt = __privateGet(this, _cachedAt).get(url);
|
|
30437
|
+
if (!storedAt)
|
|
30438
|
+
continue;
|
|
30439
|
+
if (storedAt && isCacheExpired(storedAt, cacheConfig)) {
|
|
30440
|
+
continue;
|
|
30441
|
+
}
|
|
30442
|
+
data2[url] = [storedAt, cacheConfig, responseValue.data,];
|
|
30443
|
+
}
|
|
30444
|
+
localStorage.setItem(_FetchClient.cacheKey, JSON.stringify(data2));
|
|
30445
|
+
}, 500));
|
|
30446
|
+
this.hydrateCache();
|
|
30447
|
+
}
|
|
30448
|
+
hydrateCache() {
|
|
30449
|
+
try {
|
|
30450
|
+
const rawData = localStorage.getItem(_FetchClient.cacheKey);
|
|
30451
|
+
if (!rawData)
|
|
30452
|
+
return;
|
|
30453
|
+
const data2 = JSON.parse(rawData);
|
|
30454
|
+
if (typeof data2 !== 'object')
|
|
30455
|
+
throw new Error('Invalid cache data');
|
|
30456
|
+
for (const url in data2) {
|
|
30457
|
+
const cached = data2[url];
|
|
30458
|
+
if (!Array.isArray(cached) || cached.length !== 3)
|
|
30459
|
+
throw new Error('Invalid cache data');
|
|
30460
|
+
const [storedAt, cacheDuration, cachedData,] = cached;
|
|
30461
|
+
if (isCacheExpired(storedAt, cacheDuration))
|
|
30462
|
+
continue;
|
|
30463
|
+
__privateGet(this, _cachedAt).set(url, storedAt);
|
|
30464
|
+
__privateGet(this, _cacheDurations).set(url, cacheDuration);
|
|
30465
|
+
__privateGet(this, _responseValues).set(url, {
|
|
30466
|
+
status: 'success',
|
|
30467
|
+
data: cachedData,
|
|
30468
|
+
});
|
|
30469
|
+
}
|
|
30470
|
+
}
|
|
30471
|
+
catch (error) {
|
|
30472
|
+
localStorage.removeItem(_FetchClient.cacheKey);
|
|
30473
|
+
}
|
|
30474
|
+
}
|
|
30475
|
+
setResponseValue(url, value) {
|
|
30476
|
+
__privateGet(this, _responseValues).set(url, value);
|
|
30477
|
+
this.persistCache();
|
|
30478
|
+
const subscribers = __privateGet(this, _subscribers).get(url);
|
|
30479
|
+
if (!subscribers)
|
|
30480
|
+
return;
|
|
30481
|
+
for (const subscriber of subscribers) {
|
|
30482
|
+
subscriber();
|
|
30483
|
+
}
|
|
30484
|
+
}
|
|
30485
|
+
prefetch(url, cacheDuration) {
|
|
30486
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30487
|
+
if (!isValidURL2(url))
|
|
30488
|
+
return;
|
|
30489
|
+
return this.fetchWithCache(url, cacheDuration);
|
|
30490
|
+
});
|
|
30491
|
+
}
|
|
30492
|
+
fetchWithCache(url, cacheDuration) {
|
|
30493
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30494
|
+
try {
|
|
30495
|
+
const cachedAt = __privateGet(this, _cachedAt).get(url);
|
|
30496
|
+
const hasExpiredCache = cachedAt && isCacheExpired(cachedAt, cacheDuration);
|
|
30497
|
+
if (__privateGet(this, _responseValues).has(url) && !hasExpiredCache) {
|
|
30498
|
+
return;
|
|
30499
|
+
}
|
|
30500
|
+
const currentValue = __privateGet(this, _responseValues).get(url);
|
|
30501
|
+
if (!currentValue) {
|
|
30502
|
+
this.setResponseValue(url, loadingFetchResult);
|
|
30503
|
+
}
|
|
30504
|
+
const response = yield fetch(url, {
|
|
30505
|
+
method: 'GET',
|
|
30506
|
+
headers: {
|
|
30507
|
+
// Default to JSON always or no?
|
|
30508
|
+
'Content-Type': 'application/json',
|
|
30509
|
+
},
|
|
30510
|
+
});
|
|
30511
|
+
if (!response.ok) {
|
|
30512
|
+
this.setResponseValue(url, {
|
|
30513
|
+
status: 'error',
|
|
30514
|
+
error: new Error('Invalid Response Status'),
|
|
30515
|
+
data: void 0,
|
|
30516
|
+
});
|
|
30517
|
+
return;
|
|
30518
|
+
}
|
|
30519
|
+
const value = yield response.json();
|
|
30520
|
+
this.setResponseValue(url, {
|
|
30521
|
+
status: 'success',
|
|
30522
|
+
data: value,
|
|
30523
|
+
});
|
|
30524
|
+
__privateGet(this, _cachedAt).set(url, Date.now());
|
|
30525
|
+
}
|
|
30526
|
+
catch (error) {
|
|
30527
|
+
this.setResponseValue(url, {
|
|
30528
|
+
status: 'error',
|
|
30529
|
+
error,
|
|
30530
|
+
data: void 0,
|
|
30531
|
+
});
|
|
30532
|
+
}
|
|
30533
|
+
});
|
|
30534
|
+
}
|
|
30535
|
+
getValue(url) {
|
|
30536
|
+
return __privateGet(this, _responseValues).get(url);
|
|
30537
|
+
}
|
|
30538
|
+
subscribe(url, callback, cacheDuration) {
|
|
30539
|
+
var _j;
|
|
30540
|
+
if (!isValidURL2(url))
|
|
30541
|
+
return noop22;
|
|
30542
|
+
const cacheDurationForUrl = __privateGet(this, _cacheDurations).get(url);
|
|
30543
|
+
if (!cacheDurationForUrl || cacheDuration < cacheDurationForUrl) {
|
|
30544
|
+
__privateGet(this, _cacheDurations).set(url, cacheDuration);
|
|
30545
|
+
}
|
|
30546
|
+
if (!__privateGet(this, _staleQueriesInterval)) {
|
|
30547
|
+
__privateSet(this, _staleQueriesInterval, safeWindow.setInterval(this.checkForStaleQueries, 5e3));
|
|
30548
|
+
}
|
|
30549
|
+
void this.fetchWithCache(url, cacheDuration);
|
|
30550
|
+
const subscribers = (_j = __privateGet(this, _subscribers).get(url)) !== null && _j !== void 0 ? _j : new Set();
|
|
30551
|
+
subscribers.add(callback);
|
|
30552
|
+
__privateGet(this, _subscribers).set(url, subscribers);
|
|
30553
|
+
return () => {
|
|
30554
|
+
const nextSubscribers = __privateGet(this, _subscribers).get(url);
|
|
30555
|
+
if (!nextSubscribers)
|
|
30556
|
+
return;
|
|
30557
|
+
nextSubscribers.delete(callback);
|
|
30558
|
+
if (nextSubscribers.size === 0) {
|
|
30559
|
+
__privateGet(this, _subscribers).delete(url);
|
|
30560
|
+
}
|
|
30561
|
+
if (__privateGet(this, _subscribers).size === 0) {
|
|
30562
|
+
safeWindow.clearInterval(__privateGet(this, _staleQueriesInterval));
|
|
30563
|
+
__privateSet(this, _staleQueriesInterval, void 0);
|
|
30564
|
+
}
|
|
30565
|
+
};
|
|
30566
|
+
}
|
|
30567
|
+
};
|
|
30568
|
+
var FetchClient = _FetchClient;
|
|
30569
|
+
_responseValues = /* @__PURE__ */ new WeakMap();
|
|
30570
|
+
_subscribers = /* @__PURE__ */ new WeakMap();
|
|
30571
|
+
_cacheDurations = /* @__PURE__ */ new WeakMap();
|
|
30572
|
+
_cachedAt = /* @__PURE__ */ new WeakMap();
|
|
30573
|
+
_staleQueriesInterval = /* @__PURE__ */ new WeakMap();
|
|
30574
|
+
__publicField(FetchClient, 'cacheKey', 'framer-fetch-cache');
|
|
30575
|
+
var FetchClientContext = React2.createContext(void 0);
|
|
30576
|
+
var FetchClientProvider = ({ children, }) => {
|
|
30577
|
+
const [client,] = React2.useState(() => new FetchClient());
|
|
30578
|
+
return /* @__PURE__ */ jsx(FetchClientContext.Provider, {
|
|
30579
|
+
value: client,
|
|
30580
|
+
children,
|
|
30581
|
+
});
|
|
30582
|
+
};
|
|
30583
|
+
function difference(array1, array2) {
|
|
30584
|
+
return array1.filter((x) => !array2.includes(x));
|
|
30585
|
+
}
|
|
30586
|
+
var _subscriptions;
|
|
30587
|
+
var _subscribers2;
|
|
30588
|
+
var _cachedResults;
|
|
30589
|
+
var _queryResult;
|
|
30590
|
+
var RequestsObserver = class {
|
|
30591
|
+
constructor(client) {
|
|
30592
|
+
this.client = client;
|
|
30593
|
+
__privateAdd(this, _subscriptions, /* @__PURE__ */ new Map());
|
|
30594
|
+
__privateAdd(this, _subscribers2, /* @__PURE__ */ new Set());
|
|
30595
|
+
__privateAdd(this, _cachedResults, /* @__PURE__ */ new WeakSet());
|
|
30596
|
+
__privateAdd(this, _queryResult, /* @__PURE__ */ new Map());
|
|
30597
|
+
__publicField(this, 'onFetchResultUpdate', () => {
|
|
30598
|
+
const results = /* @__PURE__ */ new Map();
|
|
30599
|
+
let hasChange = false;
|
|
30600
|
+
const subscribedUrls = __privateGet(this, _subscriptions).keys();
|
|
30601
|
+
for (const url of subscribedUrls) {
|
|
30602
|
+
const result = this.client.getValue(url);
|
|
30603
|
+
if (!result)
|
|
30604
|
+
return;
|
|
30605
|
+
results.set(url, result);
|
|
30606
|
+
if (!__privateGet(this, _cachedResults).has(result)) {
|
|
30607
|
+
__privateGet(this, _cachedResults).add(result);
|
|
30608
|
+
hasChange = true;
|
|
30609
|
+
}
|
|
30610
|
+
}
|
|
30611
|
+
if (!hasChange) {
|
|
30612
|
+
return;
|
|
30613
|
+
}
|
|
30614
|
+
__privateSet(this, _queryResult, results);
|
|
30615
|
+
for (const subscriber of __privateGet(this, _subscribers2)) {
|
|
30616
|
+
subscriber();
|
|
30617
|
+
}
|
|
30618
|
+
});
|
|
30619
|
+
__publicField(this, 'subscribe', (callback) => {
|
|
30620
|
+
__privateGet(this, _subscribers2).add(callback);
|
|
30621
|
+
return () => {
|
|
30622
|
+
__privateGet(this, _subscribers2).delete(callback);
|
|
30623
|
+
};
|
|
30624
|
+
});
|
|
30625
|
+
__publicField(this, 'getResults', () => {
|
|
30626
|
+
return __privateGet(this, _queryResult);
|
|
30627
|
+
});
|
|
30628
|
+
}
|
|
30629
|
+
setRequests(requests) {
|
|
30630
|
+
var _j;
|
|
30631
|
+
var _a;
|
|
30632
|
+
const requestsByURL = new Map(requests.map((query) => [query.url, query,]));
|
|
30633
|
+
const nextSubscribedURLs = Array.from(requestsByURL.keys());
|
|
30634
|
+
const hasSubscriptionChange = nextSubscribedURLs.some((url) => !__privateGet(this, _subscriptions).has(url));
|
|
30635
|
+
if (nextSubscribedURLs.length !== __privateGet(this, _subscriptions).size && !hasSubscriptionChange) {
|
|
30636
|
+
return;
|
|
30637
|
+
}
|
|
30638
|
+
const currentSubscribedURLs = Array.from(__privateGet(this, _subscriptions).keys());
|
|
30639
|
+
const unsubscribeURLs = difference(currentSubscribedURLs, nextSubscribedURLs);
|
|
30640
|
+
for (const url of unsubscribeURLs) {
|
|
30641
|
+
(_a = __privateGet(this, _subscriptions).get(url)) == null ? void 0 : _a();
|
|
30642
|
+
__privateGet(this, _subscriptions).delete(url);
|
|
30643
|
+
}
|
|
30644
|
+
const toSubscribeURLs = difference(nextSubscribedURLs, currentSubscribedURLs);
|
|
30645
|
+
for (const url of toSubscribeURLs) {
|
|
30646
|
+
const requestConfig = requestsByURL.get(url);
|
|
30647
|
+
const unsubscribe = this.client.subscribe(url, this.onFetchResultUpdate, (_j = (requestConfig == null ? void 0 : requestConfig.cacheDuration)) !== null && _j !== void 0 ? _j : 0);
|
|
30648
|
+
__privateGet(this, _subscriptions).set(url, unsubscribe);
|
|
30649
|
+
}
|
|
30650
|
+
__privateSet(this, _cachedResults, /* @__PURE__ */ new WeakSet());
|
|
30651
|
+
this.onFetchResultUpdate();
|
|
30652
|
+
}
|
|
30653
|
+
};
|
|
30654
|
+
_subscriptions = /* @__PURE__ */ new WeakMap();
|
|
30655
|
+
_subscribers2 = /* @__PURE__ */ new WeakMap();
|
|
30656
|
+
_cachedResults = /* @__PURE__ */ new WeakMap();
|
|
30657
|
+
_queryResult = /* @__PURE__ */ new WeakMap();
|
|
30658
|
+
function useFetchRequests(requests, disabled) {
|
|
30659
|
+
const fetchClient = React2.useContext(FetchClientContext);
|
|
30660
|
+
if (!fetchClient) {
|
|
30661
|
+
throw new Error('useFetchRequest must be used within a FetchClientProvider');
|
|
30662
|
+
}
|
|
30663
|
+
const [observer2,] = React2.useState(() => new RequestsObserver(fetchClient));
|
|
30664
|
+
React2.useLayoutEffect(() => {
|
|
30665
|
+
if (disabled)
|
|
30666
|
+
return;
|
|
30667
|
+
observer2.setRequests(requests);
|
|
30668
|
+
}, [requests, observer2, disabled,]);
|
|
30669
|
+
return React2.useSyncExternalStore(observer2.subscribe, observer2.getResults, observer2.getResults);
|
|
30670
|
+
}
|
|
30671
|
+
function usePrefetch() {
|
|
30672
|
+
const fetchClient = React2.useContext(FetchClientContext);
|
|
30673
|
+
if (!fetchClient) {
|
|
30674
|
+
throw new Error('useFetchRequest must be used within a FetchClientProvider');
|
|
30675
|
+
}
|
|
30676
|
+
return React2.useCallback((url, cacheDuration) => fetchClient.prefetch(url, cacheDuration), [fetchClient,]);
|
|
30677
|
+
}
|
|
30678
|
+
function PageRoot({ RootComponent, isWebsite, routeId, framerSiteId, pathVariables, routes, collectionUtils, notFoundPage, isReducedMotion = false, includeDataObserver = false, localeId, locales, preserveQueryParams, }) {
|
|
30679
|
+
const { enableAsyncURLUpdates, } = useLibraryFeatures();
|
|
30107
30680
|
React4.useEffect(() => {
|
|
30108
30681
|
if (isWebsite)
|
|
30109
30682
|
return;
|
|
@@ -30115,21 +30688,22 @@ function PageRoot({ RootComponent, isWebsite, routeId, framerSiteId, pathVariabl
|
|
|
30115
30688
|
children: /* @__PURE__ */ jsx(CustomCursorHost, {
|
|
30116
30689
|
children: /* @__PURE__ */ jsx(FormContext.Provider, {
|
|
30117
30690
|
value: framerSiteId,
|
|
30118
|
-
children: /* @__PURE__ */ jsx(
|
|
30119
|
-
|
|
30120
|
-
|
|
30121
|
-
|
|
30122
|
-
|
|
30123
|
-
|
|
30124
|
-
|
|
30125
|
-
|
|
30126
|
-
|
|
30127
|
-
|
|
30128
|
-
|
|
30129
|
-
|
|
30130
|
-
|
|
30131
|
-
|
|
30132
|
-
|
|
30691
|
+
children: /* @__PURE__ */ jsx(FetchClientProvider, {
|
|
30692
|
+
children: /* @__PURE__ */ jsx(Router, {
|
|
30693
|
+
initialRoute: routeId,
|
|
30694
|
+
initialPathVariables: pathVariables,
|
|
30695
|
+
initialLocaleId: localeId,
|
|
30696
|
+
routes,
|
|
30697
|
+
collectionUtils,
|
|
30698
|
+
notFoundPage,
|
|
30699
|
+
locales,
|
|
30700
|
+
defaultPageStyle: {
|
|
30701
|
+
minHeight: '100vh',
|
|
30702
|
+
width: 'auto',
|
|
30703
|
+
},
|
|
30704
|
+
preserveQueryParams,
|
|
30705
|
+
enableAsyncURLUpdates,
|
|
30706
|
+
}),
|
|
30133
30707
|
}),
|
|
30134
30708
|
}),
|
|
30135
30709
|
}),
|
|
@@ -30360,6 +30934,84 @@ var ResolveLinks = /* @__PURE__ */ React2.forwardRef(function ResolveLinksInner(
|
|
|
30360
30934
|
const childrenWithLinks = children(resolvedLinks);
|
|
30361
30935
|
return cloneWithPropsAndRef(childrenWithLinks, rest);
|
|
30362
30936
|
});
|
|
30937
|
+
function isObjectOrArray(value) {
|
|
30938
|
+
return typeof value === 'object' && value !== null;
|
|
30939
|
+
}
|
|
30940
|
+
function getPropertyByPath(input, keyPath) {
|
|
30941
|
+
if (keyPath === '') {
|
|
30942
|
+
return input;
|
|
30943
|
+
}
|
|
30944
|
+
const keyParts = keyPath.split(/[.[\]]+/u).filter((part) => part.length > 0);
|
|
30945
|
+
let current = input;
|
|
30946
|
+
for (const part of keyParts) {
|
|
30947
|
+
if (!isObjectOrArray(current)) {
|
|
30948
|
+
return void 0;
|
|
30949
|
+
}
|
|
30950
|
+
current = current[part];
|
|
30951
|
+
}
|
|
30952
|
+
return current;
|
|
30953
|
+
}
|
|
30954
|
+
function isValidFetchDataValueResult(type, value) {
|
|
30955
|
+
switch (type) {
|
|
30956
|
+
case 'string':
|
|
30957
|
+
return isString22(value) || isNumber2(value);
|
|
30958
|
+
case 'boolean':
|
|
30959
|
+
return isBoolean(value);
|
|
30960
|
+
case 'number':
|
|
30961
|
+
return isNumber2(value);
|
|
30962
|
+
default: {
|
|
30963
|
+
const _ = type;
|
|
30964
|
+
return false;
|
|
30965
|
+
}
|
|
30966
|
+
}
|
|
30967
|
+
}
|
|
30968
|
+
function resolveFetchDataValue(result, request) {
|
|
30969
|
+
if (result.status === 'loading') {
|
|
30970
|
+
return request.fallbackValue;
|
|
30971
|
+
}
|
|
30972
|
+
if (result.status === 'error') {
|
|
30973
|
+
return request.fallbackValue;
|
|
30974
|
+
}
|
|
30975
|
+
const resolvedValue = getPropertyByPath(result.data, request.resultKeyPath);
|
|
30976
|
+
if (!isValidFetchDataValueResult(request.resultOutputType, resolvedValue)) {
|
|
30977
|
+
return request.fallbackValue;
|
|
30978
|
+
}
|
|
30979
|
+
return resolvedValue;
|
|
30980
|
+
}
|
|
30981
|
+
function useFetchDataValues(requests, disabled) {
|
|
30982
|
+
const fetchResults = useFetchRequests(requests, disabled);
|
|
30983
|
+
const data2 = React2.useMemo(() => {
|
|
30984
|
+
return requests.map((request) => {
|
|
30985
|
+
const fetchResult = fetchResults.get(request.url);
|
|
30986
|
+
if (!fetchResult) {
|
|
30987
|
+
return request.fallbackValue;
|
|
30988
|
+
}
|
|
30989
|
+
return resolveFetchDataValue(fetchResult, request);
|
|
30990
|
+
});
|
|
30991
|
+
}, [fetchResults, requests,]);
|
|
30992
|
+
const status = React2.useMemo(() => {
|
|
30993
|
+
const statuses = /* @__PURE__ */ new Set();
|
|
30994
|
+
for (const fetchResult of fetchResults.values()) {
|
|
30995
|
+
statuses.add(fetchResult.status);
|
|
30996
|
+
}
|
|
30997
|
+
if (statuses.has('error'))
|
|
30998
|
+
return 'error';
|
|
30999
|
+
if (statuses.has('loading'))
|
|
31000
|
+
return 'loading';
|
|
31001
|
+
return 'success';
|
|
31002
|
+
}, [fetchResults,]);
|
|
31003
|
+
return {
|
|
31004
|
+
status,
|
|
31005
|
+
data: data2,
|
|
31006
|
+
};
|
|
31007
|
+
}
|
|
31008
|
+
var Fetcher = /* @__PURE__ */ React2.forwardRef(function Fetcher2(_j, ref) {
|
|
31009
|
+
var { requests, disabled, children } = _j, rest = __rest(_j, ["requests", "disabled", "children"]);
|
|
31010
|
+
const cloneWithPropsAndRef = useCloneChildrenWithPropsAndRef(ref);
|
|
31011
|
+
const { data: data2, status, } = useFetchDataValues(requests, disabled);
|
|
31012
|
+
const childrenWithValues = children(data2, status);
|
|
31013
|
+
return cloneWithPropsAndRef(childrenWithValues, rest);
|
|
31014
|
+
});
|
|
30363
31015
|
var callEach = (...fns) => fns.forEach((fn) => fn && fn());
|
|
30364
31016
|
var import_archy = __toESM(require_archy(), 1);
|
|
30365
31017
|
function getLogger(name) {
|
|
@@ -30439,7 +31091,7 @@ var CompatibilityDatabaseCollection = class {
|
|
|
30439
31091
|
const data2 = {};
|
|
30440
31092
|
for (const key7 in this.schema) {
|
|
30441
31093
|
const value = item[key7];
|
|
30442
|
-
if (
|
|
31094
|
+
if (isNullish2(value))
|
|
30443
31095
|
continue;
|
|
30444
31096
|
const definition = this.schema[key7];
|
|
30445
31097
|
if (isUndefined(definition))
|
|
@@ -31994,10 +32646,10 @@ var SortItemsPlan = class extends QueryPlan {
|
|
|
31994
32646
|
if (DatabaseValue.equal(left, right, collation)) {
|
|
31995
32647
|
continue;
|
|
31996
32648
|
}
|
|
31997
|
-
if (DatabaseValue.lessThan(left, right, collation) ||
|
|
32649
|
+
if (DatabaseValue.lessThan(left, right, collation) || isNullish2(left)) {
|
|
31998
32650
|
return isAscending ? -1 : 1;
|
|
31999
32651
|
}
|
|
32000
|
-
if (DatabaseValue.greaterThan(left, right, collation) ||
|
|
32652
|
+
if (DatabaseValue.greaterThan(left, right, collation) || isNullish2(right)) {
|
|
32001
32653
|
return isAscending ? 1 : -1;
|
|
32002
32654
|
}
|
|
32003
32655
|
throw new Error('Invalid comparison result.');
|
|
@@ -32032,14 +32684,14 @@ var SliceItemsPlan = class extends QueryPlan {
|
|
|
32032
32684
|
getOffset() {
|
|
32033
32685
|
var _a;
|
|
32034
32686
|
const value = (_a = this.offsetExpression) == null ? void 0 : _a.evaluate();
|
|
32035
|
-
if (
|
|
32687
|
+
if (isNullish2(value) || value.type !== 'number')
|
|
32036
32688
|
return;
|
|
32037
32689
|
return value.value;
|
|
32038
32690
|
}
|
|
32039
32691
|
getLimit() {
|
|
32040
32692
|
var _a;
|
|
32041
32693
|
const value = (_a = this.limitExpression) == null ? void 0 : _a.evaluate();
|
|
32042
|
-
if (
|
|
32694
|
+
if (isNullish2(value) || value.type !== 'number')
|
|
32043
32695
|
return;
|
|
32044
32696
|
return value.value;
|
|
32045
32697
|
}
|
|
@@ -32311,7 +32963,7 @@ function getSelectKey(expression) {
|
|
|
32311
32963
|
}
|
|
32312
32964
|
function resolveValue(richTextResolver, value) {
|
|
32313
32965
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32314
|
-
if (
|
|
32966
|
+
if (isNullish2(value)) {
|
|
32315
32967
|
return null;
|
|
32316
32968
|
}
|
|
32317
32969
|
if (value.type === 'richtext') {
|
|
@@ -33148,6 +33800,12 @@ function useQueryCount(query) {
|
|
|
33148
33800
|
const collection = useQueryData(countQuery);
|
|
33149
33801
|
return collection.length;
|
|
33150
33802
|
}
|
|
33803
|
+
function usePreloadQuery() {
|
|
33804
|
+
const { activeLocale, } = useLocaleInfo();
|
|
33805
|
+
return useCallback((query) => __awaiter(this, void 0, void 0, function* () {
|
|
33806
|
+
return queryCache.get(query, activeLocale).waitFor();
|
|
33807
|
+
}), [activeLocale,]);
|
|
33808
|
+
}
|
|
33151
33809
|
function getWhereExpressionFromPathVariables(pathVariables) {
|
|
33152
33810
|
const entries = Object.entries(pathVariables).filter(([, value,]) => {
|
|
33153
33811
|
if (isUndefined(value))
|
|
@@ -33265,8 +33923,10 @@ var VariantSelector = /* @__PURE__ */ ((VariantSelector2) => {
|
|
|
33265
33923
|
VariantSelector2['Variant'] = 'v';
|
|
33266
33924
|
return VariantSelector2;
|
|
33267
33925
|
})(VariantSelector || {});
|
|
33268
|
-
function getGesture(enabledGestures, isHovered, isPressed) {
|
|
33269
|
-
const { hover, pressed, } = enabledGestures || {};
|
|
33926
|
+
function getGesture(enabledGestures, isHovered, isPressed, isLoading) {
|
|
33927
|
+
const { hover, pressed, loading, } = enabledGestures || {};
|
|
33928
|
+
if (loading && isLoading)
|
|
33929
|
+
return 'loading';
|
|
33270
33930
|
if (pressed && isPressed)
|
|
33271
33931
|
return 'pressed';
|
|
33272
33932
|
if (hover && isHovered)
|
|
@@ -33288,6 +33948,7 @@ function safeBaseVariant(targetVariant, fallbackVariant, validBaseVariants) {
|
|
|
33288
33948
|
var CycleVariantState = /* @__PURE__ */ Symbol('cycle');
|
|
33289
33949
|
function useVariantState({ variant, defaultVariant: externalDefaultVariant, transitions: externalTransitions, enabledGestures: externalEnabledGestures, cycleOrder: externalCycleOrder = [], variantProps: variantProps2 = {}, variantClassNames = {}, }) {
|
|
33290
33950
|
const forceUpdate = useForceUpdate3();
|
|
33951
|
+
const isCanvas = useIsOnFramerCanvas();
|
|
33291
33952
|
const validBaseVariants = useConstant2(() => new Set(externalCycleOrder));
|
|
33292
33953
|
const internalState = React4.useRef({
|
|
33293
33954
|
isHovered: false,
|
|
@@ -33296,6 +33957,7 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
|
|
|
33296
33957
|
baseVariant: safeBaseVariant(variant, externalDefaultVariant, validBaseVariants),
|
|
33297
33958
|
lastVariant: variant,
|
|
33298
33959
|
gestureVariant: void 0,
|
|
33960
|
+
loadedBaseVariant: {},
|
|
33299
33961
|
// When used in generated components, these are static values defined
|
|
33300
33962
|
// outside of the component function that also need to not result in
|
|
33301
33963
|
// memoized values being recalculated, so we dump them into the ref.
|
|
@@ -33307,11 +33969,11 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
|
|
|
33307
33969
|
const resolveNextVariant = React4.useCallback((targetBaseVariant) => {
|
|
33308
33970
|
const { isHovered: isHovered2, isPressed: isPressed2, enabledGestures: enabledGestures2, defaultVariant: defaultVariant2, } = internalState.current;
|
|
33309
33971
|
const nextBaseVariant = safeBaseVariant(targetBaseVariant, defaultVariant2, validBaseVariants);
|
|
33310
|
-
const gesture = getGesture(enabledGestures2 == null ? void 0 : enabledGestures2[nextBaseVariant], isHovered2, isPressed2);
|
|
33972
|
+
const gesture = getGesture(enabledGestures2 == null ? void 0 : enabledGestures2[nextBaseVariant], isHovered2, isPressed2, false);
|
|
33311
33973
|
const nextGestureVariant = gesture ? createGestureVariant(nextBaseVariant, gesture) : void 0;
|
|
33312
33974
|
return [nextBaseVariant, nextGestureVariant,];
|
|
33313
33975
|
}, [validBaseVariants,]);
|
|
33314
|
-
const setGestureState = React4.useCallback(({ isHovered: isHovered2, isPressed: isPressed2, }) => {
|
|
33976
|
+
const setGestureState = React4.useCallback(({ isHovered: isHovered2, isPressed: isPressed2, isLoading, }) => {
|
|
33315
33977
|
if (isHovered2 !== void 0)
|
|
33316
33978
|
internalState.current.isHovered = isHovered2;
|
|
33317
33979
|
if (isPressed2 !== void 0)
|
|
@@ -33336,6 +33998,11 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
|
|
|
33336
33998
|
forceUpdate();
|
|
33337
33999
|
}
|
|
33338
34000
|
}, [resolveNextVariant, forceUpdate,]);
|
|
34001
|
+
const clearLoadingGesture = React4.useCallback(() => {
|
|
34002
|
+
const { baseVariant: baseVariant2, } = internalState.current;
|
|
34003
|
+
internalState.current.loadedBaseVariant[baseVariant2] = true;
|
|
34004
|
+
forceUpdate();
|
|
34005
|
+
}, [forceUpdate,]);
|
|
33339
34006
|
if (variant !== internalState.current.lastVariant) {
|
|
33340
34007
|
const [nextBase, nextGesture,] = resolveNextVariant(variant);
|
|
33341
34008
|
internalState.current.lastVariant = nextBase;
|
|
@@ -33344,14 +34011,18 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
|
|
|
33344
34011
|
internalState.current.gestureVariant = nextGesture;
|
|
33345
34012
|
}
|
|
33346
34013
|
}
|
|
33347
|
-
const { baseVariant, gestureVariant, defaultVariant, enabledGestures, isHovered, isPressed, } = internalState.current;
|
|
34014
|
+
const { baseVariant, gestureVariant, defaultVariant, enabledGestures, isHovered, isPressed, loadedBaseVariant, } = internalState.current;
|
|
33348
34015
|
const addVariantProps = useAddVariantProps(internalState.current.baseVariant, internalState.current.gestureVariant, variantProps2);
|
|
33349
34016
|
return React4.useMemo(() => {
|
|
34017
|
+
var _a;
|
|
33350
34018
|
const variants = [];
|
|
33351
34019
|
if (baseVariant !== defaultVariant)
|
|
33352
34020
|
variants.push(baseVariant);
|
|
33353
|
-
|
|
33354
|
-
|
|
34021
|
+
const hasLoadingVariant = (_a = enabledGestures == null ? void 0 : enabledGestures[baseVariant]) == null ? void 0 : _a.loading;
|
|
34022
|
+
const isLoading = !isCanvas && !!hasLoadingVariant && !loadedBaseVariant[baseVariant];
|
|
34023
|
+
const gesture = isLoading ? createGestureVariant(baseVariant, 'loading') : gestureVariant;
|
|
34024
|
+
if (gesture)
|
|
34025
|
+
variants.push(gesture);
|
|
33355
34026
|
const gestures = enabledGestures == null ? void 0 : enabledGestures[baseVariant];
|
|
33356
34027
|
const gestureHandlers = {
|
|
33357
34028
|
onMouseEnter: () => setGestureState({
|
|
@@ -33377,24 +34048,28 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
|
|
|
33377
34048
|
return {
|
|
33378
34049
|
variants,
|
|
33379
34050
|
baseVariant,
|
|
33380
|
-
gestureVariant,
|
|
34051
|
+
gestureVariant: gesture,
|
|
34052
|
+
isLoading,
|
|
33381
34053
|
transition: activeTransition(internalState.current.transitions, baseVariant),
|
|
33382
34054
|
setVariant,
|
|
33383
34055
|
setGestureState,
|
|
34056
|
+
clearLoadingGesture,
|
|
33384
34057
|
addVariantProps,
|
|
33385
34058
|
gestureHandlers,
|
|
33386
|
-
classNames: cx(createVariantClassName(baseVariant, variantClassNames), getGesture(gestures, isHovered, isPressed)),
|
|
34059
|
+
classNames: cx(createVariantClassName(baseVariant, variantClassNames), getGesture(gestures, isHovered, isPressed, isLoading)),
|
|
33387
34060
|
};
|
|
33388
34061
|
}, [
|
|
33389
34062
|
baseVariant,
|
|
33390
34063
|
gestureVariant,
|
|
33391
34064
|
isHovered,
|
|
33392
34065
|
isPressed,
|
|
34066
|
+
loadedBaseVariant,
|
|
33393
34067
|
addVariantProps,
|
|
33394
34068
|
setVariant,
|
|
33395
34069
|
defaultVariant,
|
|
33396
34070
|
enabledGestures,
|
|
33397
34071
|
setGestureState,
|
|
34072
|
+
clearLoadingGesture,
|
|
33398
34073
|
variantClassNames,
|
|
33399
34074
|
]);
|
|
33400
34075
|
}
|
|
@@ -38272,6 +38947,14 @@ function upgradeComponentFontV1(font) {
|
|
|
38272
38947
|
}
|
|
38273
38948
|
return Object.assign(Object.assign({}, font), { source });
|
|
38274
38949
|
}
|
|
38950
|
+
function withPerformanceMarks(prefix2, callback) {
|
|
38951
|
+
const markStart = `${prefix2}-start`;
|
|
38952
|
+
performance.mark(markStart);
|
|
38953
|
+
callback();
|
|
38954
|
+
const markEnd = `${prefix2}-end`;
|
|
38955
|
+
performance.mark(markEnd);
|
|
38956
|
+
performance.measure(prefix2, markStart, markEnd);
|
|
38957
|
+
}
|
|
38275
38958
|
function loadJSON(url) {
|
|
38276
38959
|
return fetch(url, {
|
|
38277
38960
|
mode: 'cors',
|
|
@@ -38446,7 +39129,7 @@ var package_default = {
|
|
|
38446
39129
|
yargs: '^17.6.2',
|
|
38447
39130
|
},
|
|
38448
39131
|
peerDependencies: {
|
|
38449
|
-
'framer-motion': '11.2.
|
|
39132
|
+
'framer-motion': '11.2.13',
|
|
38450
39133
|
react: '^18.2.0',
|
|
38451
39134
|
'react-dom': '^18.2.0',
|
|
38452
39135
|
},
|
|
@@ -38477,7 +39160,7 @@ MotionValue.prototype.addChild = function ({ transformer = (v) => v, }) {
|
|
|
38477
39160
|
if (false) {
|
|
38478
39161
|
MainLoop.start();
|
|
38479
39162
|
}
|
|
38480
|
-
export { _injectRuntime, AcceleratedAnimation, addActionControls, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, AnchorLinkTarget, Animatable, animate2 as animate, AnimatePresence, AnimateSharedLayout, animateValue, animateVisualElement, animationControls, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform, calcLength, calculateRect, callEach, cancelFrame, cancelSync, circIn, circInOut, circOut, clamp, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertPresentationTree, convertPropsToDeviceOptions, createBox, createData, createDomMotionComponent, createFramerPageLink, createMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, domMax, DragControls, Draggable, easeIn, easeInOut, easeOut, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, filterProps, finiteNumber, FlatTree, Floating, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, FrameWithMotion, GamepadContext, GeneratedComponentContext, getComponentSize, getDevicePreset, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getMeasurableCodeComponentChildren, getMergedConstraintsProps, getPropertyControls, getWhereExpressionFromPathVariables, gradientForShape, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, InternalID, interpolate, invariant, inView, isAnimatable2 as isAnimatable, isBrowser, isDesignDefinition, isDragActive, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isMotionComponent, isMotionValue2 as isMotionValue, isOfAnnotatedType, isOverride, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStraightCurve, isValidMotionProp, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, memoize2 as memoize, mirrorEasing, mix, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, NotFoundError, ObservableObject, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseFramerPageLink, pathDefaults, PathSegment, PathVariablesContext, pipe, Point, Polygon, PresenceContext, print, progress, PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryEngine, RadialGradient, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, RenderTarget, Reorder, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, RichText, roundedNumber, roundedNumberString, roundWithOffset, Scroll, scroll, scrollInfo, setGlobalRenderEnvironment, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, spring, SpringAnimator, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, steps, StyleSheetContext, SVG, SwitchLayoutGroupContext, sync, systemFontFamilyName, Text2 as Text, throttle, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformString, transformTemplate, unwrapMotionComponent, useActiveTargetCallback, useActiveVariantCallback, useAddVariantProps, useAnimate, useAnimatedState, useAnimatedState as useDeprecatedAnimatedState, useAnimation, useAnimationControls, useAnimationFrame, useBreakpointVariants, useComponentViewport, useConstant2 as useConstant, useCurrentPathVariables, useCurrentRouteId, useCustomCursors, useCycle, useDataRecord, useDomEvent, useDragControls, useDynamicRefs, useElementScroll, useForceUpdate, useGamepad, useHotkey, useHydratedBreakpointVariants, useInitialRouteComponent, useInstantLayoutTransition, useInstantTransition, useInvertedScale, useInvertedScale as useDeprecatedInvertedScale, useInView, useIsInCurrentNavigationTarget, useIsomorphicLayoutEffect, useIsOnFramerCanvas, useIsPresent, useLoadMorePaginatedQuery, useLocale, useLocaleCode, useLocaleInfo, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePresence, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSpring, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, version, VisualElement, visualElementStore, warning, WindowContext, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, WithOverride, withParallaxTransform, withPath, withShape, withStyleAppearEffect, withVariantAppearEffect, withVariantFX, wrap, };
|
|
39163
|
+
export { _injectRuntime, AcceleratedAnimation, addActionControls, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, AnchorLinkTarget, Animatable, animate2 as animate, AnimatePresence, AnimateSharedLayout, animateValue, animateVisualElement, animationControls, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform, calcLength, calculateRect, callEach, cancelFrame, cancelSync, circIn, circInOut, circOut, clamp, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertPresentationTree, convertPropsToDeviceOptions, createBox, createData, createDomMotionComponent, createFramerPageLink, createMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, domMax, DragControls, Draggable, easeIn, easeInOut, easeOut, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, filterProps, finiteNumber, FlatTree, Floating, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, FrameWithMotion, GamepadContext, GeneratedComponentContext, getComponentSize, getDevicePreset, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getMeasurableCodeComponentChildren, getMergedConstraintsProps, getPropertyControls, getWhereExpressionFromPathVariables, gradientForShape, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, InternalID, interpolate, invariant, inView, isAnimatable2 as isAnimatable, isBrowser, isDesignDefinition, isDragActive, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isMotionComponent, isMotionValue2 as isMotionValue, isOfAnnotatedType, isOverride, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStraightCurve, isValidMotionProp, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, markHydrationStart, memoize2 as memoize, mirrorEasing, mix, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, NotFoundError, ObservableObject, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseFramerPageLink, pathDefaults, PathSegment, PathVariablesContext, pipe, Point, Polygon, PresenceContext, print, progress, PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryEngine, RadialGradient, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, RenderTarget, Reorder, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, RichText, roundedNumber, roundedNumberString, roundWithOffset, Scroll, scroll, scrollInfo, setGlobalRenderEnvironment, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, spring, SpringAnimator, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, steps, StyleSheetContext, SVG, SwitchLayoutGroupContext, sync, systemFontFamilyName, Text2 as Text, throttle, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformString, transformTemplate, turnOffReactEventHandling, unwrapMotionComponent, useActiveTargetCallback, useActiveVariantCallback, useAddVariantProps, useAnimate, useAnimatedState, useAnimatedState as useDeprecatedAnimatedState, useAnimation, useAnimationControls, useAnimationFrame, useBreakpointVariants, useComponentViewport, useConstant2 as useConstant, useCurrentPathVariables, useCurrentRouteId, useCustomCursors, useCycle, useDataRecord, useDomEvent, useDragControls, useDynamicRefs, useElementScroll, useForceUpdate, useGamepad, useHotkey, useHydratedBreakpointVariants, useInitialRouteComponent, useInstantLayoutTransition, useInstantTransition, useInvertedScale, useInvertedScale as useDeprecatedInvertedScale, useInView, useIsInCurrentNavigationTarget, useIsomorphicLayoutEffect, useIsOnFramerCanvas, useIsPresent, useLoadMorePaginatedQuery, useLocale, useLocaleCode, useLocaleInfo, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSpring, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, version, VisualElement, visualElementStore, warning, WindowContext, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withVariantAppearEffect, withVariantFX, wrap, };
|
|
38481
39164
|
/**
|
|
38482
39165
|
* @license Emotion v11.0.0
|
|
38483
39166
|
* MIT License
|