unframer 2.5.2 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/framer.js CHANGED
@@ -1,4 +1,4 @@
1
- // https :https://app.framerstatic.com/chunk-AJGVEDRA.js
1
+ // https :https://app.framerstatic.com/chunk-DUHOOT7P.js
2
2
  import { createContext, } from 'react';
3
3
  import { useEffect, useLayoutEffect, } from 'react';
4
4
  import { jsx, jsxs, } from 'react/jsx-runtime';
@@ -146,7 +146,7 @@ var SwitchLayoutGroupContext = createContext({},);
146
146
  var LazyContext = createContext({
147
147
  strict: false,
148
148
  },);
149
- var Queue = class {
149
+ var Queue = /*#__PURE__*/ class {
150
150
  constructor() {
151
151
  this.order = [];
152
152
  this.scheduled = /* @__PURE__ */ new Set();
@@ -1305,6 +1305,9 @@ function hslaToRgba({
1305
1305
  alpha: alpha2,
1306
1306
  };
1307
1307
  }
1308
+ function mixImmediate(a, b,) {
1309
+ return (p) => p > 0 ? b : a;
1310
+ }
1308
1311
  var mixLinearColor = (from, to, v,) => {
1309
1312
  const fromExpo = from * from;
1310
1313
  const expo = v * (to * to - fromExpo) + fromExpo;
@@ -1314,7 +1317,8 @@ var colorTypes = [hex, rgba, hsla,];
1314
1317
  var getColorType = (v) => colorTypes.find((type) => type.test(v,));
1315
1318
  function asRGBA(color2,) {
1316
1319
  const type = getColorType(color2,);
1317
- invariant(Boolean(type,), `'${color2}' is not an animatable color. Use the equivalent color code instead.`,);
1320
+ warning(Boolean(type,), `'${color2}' is not an animatable color. Use the equivalent color code instead.`,);
1321
+ if (!Boolean(type,)) return false;
1318
1322
  let model = type.parse(color2,);
1319
1323
  if (type === hsla) {
1320
1324
  model = hslaToRgba(model,);
@@ -1324,6 +1328,9 @@ function asRGBA(color2,) {
1324
1328
  var mixColor = (from, to,) => {
1325
1329
  const fromRGBA = asRGBA(from,);
1326
1330
  const toRGBA = asRGBA(to,);
1331
+ if (!fromRGBA || !toRGBA) {
1332
+ return mixImmediate(from, to,);
1333
+ }
1327
1334
  const blended = {
1328
1335
  ...fromRGBA,
1329
1336
  };
@@ -1352,9 +1359,6 @@ function mixVisibility(origin, target,) {
1352
1359
  return (p) => p >= 1 ? target : origin;
1353
1360
  }
1354
1361
  }
1355
- function mixImmediate(a, b,) {
1356
- return (p) => p > 0 ? b : a;
1357
- }
1358
1362
  function mixNumber2(a, b,) {
1359
1363
  return (p) => mixNumber(a, b, p,);
1360
1364
  }
@@ -1602,7 +1606,7 @@ function flushKeyframeResolvers() {
1602
1606
  readAllKeyframes();
1603
1607
  measureAllKeyframes();
1604
1608
  }
1605
- var KeyframeResolver = class {
1609
+ var KeyframeResolver = /*#__PURE__*/ class {
1606
1610
  constructor(unresolvedKeyframes, onComplete, name, motionValue2, element, isAsync = false,) {
1607
1611
  this.isComplete = false;
1608
1612
  this.isAsync = false;
@@ -1874,7 +1878,7 @@ function getFinalKeyframe(keyframes2, {
1874
1878
  const index = repeat && repeatType !== 'loop' && repeat % 2 === 1 ? 0 : resolvedKeyframes.length - 1;
1875
1879
  return !index || finalKeyframe === void 0 ? resolvedKeyframes[index] : finalKeyframe;
1876
1880
  }
1877
- var BaseAnimation = class {
1881
+ var BaseAnimation = /*#__PURE__*/ class {
1878
1882
  constructor({
1879
1883
  autoplay = true,
1880
1884
  delay: delay2 = 0,
@@ -2007,7 +2011,7 @@ var generators = {
2007
2011
  spring,
2008
2012
  };
2009
2013
  var percentToProgress = (percent2) => percent2 / 100;
2010
- var MainThreadAnimation = class extends BaseAnimation {
2014
+ var MainThreadAnimation = /*#__PURE__*/ class extends BaseAnimation {
2011
2015
  constructor({
2012
2016
  KeyframeResolver: KeyframeResolver$1 = KeyframeResolver,
2013
2017
  ...options
@@ -2487,7 +2491,7 @@ function makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, n
2487
2491
  }
2488
2492
  }
2489
2493
  }
2490
- var DOMKeyframesResolver = class extends KeyframeResolver {
2494
+ var DOMKeyframesResolver = /*#__PURE__*/ class extends KeyframeResolver {
2491
2495
  constructor(unresolvedKeyframes, onComplete, name, motionValue2,) {
2492
2496
  super(
2493
2497
  unresolvedKeyframes,
@@ -2507,14 +2511,17 @@ var DOMKeyframesResolver = class extends KeyframeResolver {
2507
2511
  if (!element.current) return;
2508
2512
  super.readKeyframes();
2509
2513
  for (let i = 0; i < unresolvedKeyframes.length; i++) {
2510
- const keyframe = unresolvedKeyframes[i];
2511
- if (typeof keyframe === 'string' && isCSSVariableToken(keyframe,)) {
2512
- const resolved = getVariableValue(keyframe, element.current,);
2513
- if (resolved !== void 0) {
2514
- unresolvedKeyframes[i] = resolved;
2515
- }
2516
- if (i === unresolvedKeyframes.length - 1) {
2517
- this.finalKeyframe = keyframe;
2514
+ let keyframe = unresolvedKeyframes[i];
2515
+ if (typeof keyframe === 'string') {
2516
+ keyframe = keyframe.trim();
2517
+ if (isCSSVariableToken(keyframe,)) {
2518
+ const resolved = getVariableValue(keyframe, element.current,);
2519
+ if (resolved !== void 0) {
2520
+ unresolvedKeyframes[i] = resolved;
2521
+ }
2522
+ if (i === unresolvedKeyframes.length - 1) {
2523
+ this.finalKeyframe = keyframe;
2524
+ }
2518
2525
  }
2519
2526
  }
2520
2527
  }
@@ -2695,7 +2702,7 @@ function pregenerateKeyframes(keyframes2, options,) {
2695
2702
  ease: 'linear',
2696
2703
  };
2697
2704
  }
2698
- var AcceleratedAnimation = class extends BaseAnimation {
2705
+ var AcceleratedAnimation = /*#__PURE__*/ class extends BaseAnimation {
2699
2706
  constructor(options,) {
2700
2707
  super(options,);
2701
2708
  const {
@@ -2967,7 +2974,7 @@ function moveItem([...arr], fromIndex, toIndex,) {
2967
2974
  }
2968
2975
  return arr;
2969
2976
  }
2970
- var SubscriptionManager = class {
2977
+ var SubscriptionManager = /*#__PURE__*/ class {
2971
2978
  constructor() {
2972
2979
  this.subscriptions = [];
2973
2980
  }
@@ -3001,7 +3008,7 @@ var isFloat = (value) => {
3001
3008
  var collectMotionValues = {
3002
3009
  current: void 0,
3003
3010
  };
3004
- var MotionValue = class {
3011
+ var MotionValue = /*#__PURE__*/ class {
3005
3012
  /**
3006
3013
  * @param init - The initiating value
3007
3014
  * @param config - Optional configuration options
@@ -3011,7 +3018,7 @@ var MotionValue = class {
3011
3018
  * @internal
3012
3019
  */
3013
3020
  constructor(init, options = {},) {
3014
- this.version = '11.2.6';
3021
+ this.version = '11.2.10';
3015
3022
  this.canTrackVelocity = null;
3016
3023
  this.events = {};
3017
3024
  this.updateAndNotify = (v, render = true,) => {
@@ -3318,6 +3325,95 @@ function isTransitionDefined({
3318
3325
  function getValueTransition(transition, key7,) {
3319
3326
  return transition[key7] || transition['default'] || transition;
3320
3327
  }
3328
+ function observeTimeline(update, timeline,) {
3329
+ let prevProgress;
3330
+ const onFrame = () => {
3331
+ const {
3332
+ currentTime,
3333
+ } = timeline;
3334
+ const percentage = currentTime === null ? 0 : currentTime.value;
3335
+ const progress2 = percentage / 100;
3336
+ if (prevProgress !== progress2) {
3337
+ update(progress2,);
3338
+ }
3339
+ prevProgress = progress2;
3340
+ };
3341
+ frame.update(onFrame, true,);
3342
+ return () => cancelFrame(onFrame,);
3343
+ }
3344
+ var supportsScrollTimeline = memo(() => window.ScrollTimeline !== void 0);
3345
+ var GroupPlaybackControls = /*#__PURE__*/ class {
3346
+ constructor(animations2,) {
3347
+ this.stop = () => this.runAll('stop',);
3348
+ this.animations = animations2.filter(Boolean,);
3349
+ }
3350
+ then(onResolve, onReject,) {
3351
+ return Promise.all(this.animations,).then(onResolve,).catch(onReject,);
3352
+ }
3353
+ /**
3354
+ * TODO: Filter out cancelled or stopped animations before returning
3355
+ */
3356
+ getAll(propName,) {
3357
+ return this.animations[0][propName];
3358
+ }
3359
+ setAll(propName, newValue,) {
3360
+ for (let i = 0; i < this.animations.length; i++) {
3361
+ this.animations[i][propName] = newValue;
3362
+ }
3363
+ }
3364
+ attachTimeline(timeline,) {
3365
+ const cancelAll = this.animations.map((animation) => {
3366
+ if (supportsScrollTimeline() && animation.attachTimeline) {
3367
+ animation.attachTimeline(timeline,);
3368
+ } else {
3369
+ animation.pause();
3370
+ return observeTimeline((progress2) => {
3371
+ animation.time = animation.duration * progress2;
3372
+ }, timeline,);
3373
+ }
3374
+ },);
3375
+ return () => {
3376
+ cancelAll.forEach((cancelTimeline, i,) => {
3377
+ if (cancelTimeline) cancelTimeline();
3378
+ this.animations[i].stop();
3379
+ },);
3380
+ };
3381
+ }
3382
+ get time() {
3383
+ return this.getAll('time',);
3384
+ }
3385
+ set time(time2,) {
3386
+ this.setAll('time', time2,);
3387
+ }
3388
+ get speed() {
3389
+ return this.getAll('speed',);
3390
+ }
3391
+ set speed(speed,) {
3392
+ this.setAll('speed', speed,);
3393
+ }
3394
+ get duration() {
3395
+ let max = 0;
3396
+ for (let i = 0; i < this.animations.length; i++) {
3397
+ max = Math.max(max, this.animations[i].duration,);
3398
+ }
3399
+ return max;
3400
+ }
3401
+ runAll(methodName,) {
3402
+ this.animations.forEach((controls) => controls[methodName]());
3403
+ }
3404
+ play() {
3405
+ this.runAll('play',);
3406
+ }
3407
+ pause() {
3408
+ this.runAll('pause',);
3409
+ }
3410
+ cancel() {
3411
+ this.runAll('cancel',);
3412
+ }
3413
+ complete() {
3414
+ this.runAll('complete',);
3415
+ }
3416
+ };
3321
3417
  var animateMotionValue = (name, value, target, transition = {}, element, isHandoff,) => (onComplete) => {
3322
3418
  const valueTransition = getValueTransition(transition, name,) || {};
3323
3419
  const delay2 = valueTransition.delay || transition.delay || 0;
@@ -3377,7 +3473,7 @@ var animateMotionValue = (name, value, target, transition = {}, element, isHando
3377
3473
  options.onUpdate(finalKeyframe,);
3378
3474
  options.onComplete();
3379
3475
  },);
3380
- return;
3476
+ return new GroupPlaybackControls([],);
3381
3477
  }
3382
3478
  }
3383
3479
  if (!isHandoff && AcceleratedAnimation.supports(options,)) {
@@ -3412,6 +3508,9 @@ function setTarget(visualElement, definition,) {
3412
3508
  setMotionValue(visualElement, key7, value,);
3413
3509
  }
3414
3510
  }
3511
+ function getOptimisedAppearId(visualElement,) {
3512
+ return visualElement.getProps()[optimizedAppearDataAttribute];
3513
+ }
3415
3514
  function shouldBlockAnimation({
3416
3515
  protectedKeys,
3417
3516
  needsAnimating,
@@ -3448,8 +3547,7 @@ function animateTarget(visualElement, targetAndTransition, {
3448
3547
  };
3449
3548
  let isHandoff = false;
3450
3549
  if (window.HandoffAppearAnimations) {
3451
- const props = visualElement.getProps();
3452
- const appearId = props[optimizedAppearDataAttribute];
3550
+ const appearId = getOptimisedAppearId(visualElement,);
3453
3551
  if (appearId) {
3454
3552
  const elapsed = window.HandoffAppearAnimations(appearId, key7, value, frame,);
3455
3553
  if (elapsed !== null) {
@@ -3773,14 +3871,14 @@ function createState() {
3773
3871
  exit: createTypeState(),
3774
3872
  };
3775
3873
  }
3776
- var Feature = class {
3874
+ var Feature = /*#__PURE__*/ class {
3777
3875
  constructor(node,) {
3778
3876
  this.isMounted = false;
3779
3877
  this.node = node;
3780
3878
  }
3781
3879
  update() {}
3782
3880
  };
3783
- var AnimationFeature = class extends Feature {
3881
+ var AnimationFeature = /*#__PURE__*/ class extends Feature {
3784
3882
  /**
3785
3883
  * We dynamically generate the AnimationState manager as it contains a reference
3786
3884
  * to the underlying animation library. We only want to load that if we load this,
@@ -3819,7 +3917,7 @@ var AnimationFeature = class extends Feature {
3819
3917
  unmount() {}
3820
3918
  };
3821
3919
  var id = 0;
3822
- var ExitAnimationFeature = class extends Feature {
3920
+ var ExitAnimationFeature = /*#__PURE__*/ class extends Feature {
3823
3921
  constructor() {
3824
3922
  super(...arguments,);
3825
3923
  this.id = id++;
@@ -3937,7 +4035,7 @@ function isPresent(context,) {
3937
4035
  return context === null ? true : context.isPresent;
3938
4036
  }
3939
4037
  var compareByDepth = (a, b,) => a.depth - b.depth;
3940
- var FlatTree = class {
4038
+ var FlatTree = /*#__PURE__*/ class {
3941
4039
  constructor() {
3942
4040
  this.children = [];
3943
4041
  this.isDirty = false;
@@ -4003,8 +4101,8 @@ function updateMotionValuesFromProps(element, next, prev,) {
4003
4101
  }
4004
4102
  if (false) {
4005
4103
  warnOnce(
4006
- nextValue.version === '11.2.6',
4007
- `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.6 may not work as expected.`,
4104
+ nextValue.version === '11.2.10',
4105
+ `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.10 may not work as expected.`,
4008
4106
  );
4009
4107
  }
4010
4108
  } else if (isMotionValue(prevValue,)) {
@@ -4059,7 +4157,7 @@ function getClosestProjectingNode(visualElement,) {
4059
4157
  if (!visualElement) return void 0;
4060
4158
  return visualElement.options.allowProjection !== false ? visualElement.projection : getClosestProjectingNode(visualElement.parent,);
4061
4159
  }
4062
- var VisualElement = class {
4160
+ var VisualElement = /*#__PURE__*/ class {
4063
4161
  /**
4064
4162
  * This method takes React props and returns found MotionValues. For example, HTML
4065
4163
  * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.
@@ -4955,13 +5053,13 @@ function addHoverEvent(node, isActive,) {
4955
5053
  passive: !node.getProps()[callbackName],
4956
5054
  },);
4957
5055
  }
4958
- var HoverGesture = class extends Feature {
5056
+ var HoverGesture = /*#__PURE__*/ class extends Feature {
4959
5057
  mount() {
4960
5058
  this.unmount = pipe(addHoverEvent(this.node, true,), addHoverEvent(this.node, false,),);
4961
5059
  }
4962
5060
  unmount() {}
4963
5061
  };
4964
- var FocusGesture = class extends Feature {
5062
+ var FocusGesture = /*#__PURE__*/ class extends Feature {
4965
5063
  constructor() {
4966
5064
  super(...arguments,);
4967
5065
  this.isActive = false;
@@ -5004,7 +5102,7 @@ function fireSyntheticPointerEvent(name, handler,) {
5004
5102
  const syntheticPointerEvent = new PointerEvent('pointer' + name,);
5005
5103
  handler(syntheticPointerEvent, extractEventInfo(syntheticPointerEvent,),);
5006
5104
  }
5007
- var PressGesture = class extends Feature {
5105
+ var PressGesture = /*#__PURE__*/ class extends Feature {
5008
5106
  constructor() {
5009
5107
  super(...arguments,);
5010
5108
  this.removeStartListeners = noop;
@@ -5159,7 +5257,7 @@ var thresholdNames = {
5159
5257
  some: 0,
5160
5258
  all: 1,
5161
5259
  };
5162
- var InViewFeature = class extends Feature {
5260
+ var InViewFeature = /*#__PURE__*/ class extends Feature {
5163
5261
  constructor() {
5164
5262
  super(...arguments,);
5165
5263
  this.hasEnteredView = false;
@@ -5241,7 +5339,7 @@ var gestureAnimations = {
5241
5339
  Feature: HoverGesture,
5242
5340
  },
5243
5341
  };
5244
- var PanSession = class {
5342
+ var PanSession = /*#__PURE__*/ class {
5245
5343
  constructor(event, handlers, {
5246
5344
  transformPagePoint,
5247
5345
  contextWindow,
@@ -5657,7 +5755,7 @@ var getContextWindow = ({
5657
5755
  return current ? current.ownerDocument.defaultView : null;
5658
5756
  };
5659
5757
  var elementDragControls = /* @__PURE__ */ new WeakMap();
5660
- var VisualElementDragControls = class {
5758
+ var VisualElementDragControls = /*#__PURE__*/ class {
5661
5759
  constructor(visualElement,) {
5662
5760
  this.openGlobalLock = null;
5663
5761
  this.isDragging = false;
@@ -6097,7 +6195,7 @@ function getCurrentDirection(offset, lockThreshold = 10,) {
6097
6195
  }
6098
6196
  return direction;
6099
6197
  }
6100
- var DragGesture = class extends Feature {
6198
+ var DragGesture = /*#__PURE__*/ class extends Feature {
6101
6199
  constructor(node,) {
6102
6200
  super(node,);
6103
6201
  this.removeGroupControls = noop;
@@ -6123,7 +6221,7 @@ var asyncHandler = (handler) => (event, info,) => {
6123
6221
  frame.postRender(() => handler(event, info,));
6124
6222
  }
6125
6223
  };
6126
- var PanGesture = class extends Feature {
6224
+ var PanGesture = /*#__PURE__*/ class extends Feature {
6127
6225
  constructor() {
6128
6226
  super(...arguments,);
6129
6227
  this.removePointerDownListener = noop;
@@ -6215,7 +6313,7 @@ var correctBoxShadow = {
6215
6313
  return template(shadow,);
6216
6314
  },
6217
6315
  };
6218
- var MeasureLayoutWithContext = class extends Component {
6316
+ var MeasureLayoutWithContext = /*#__PURE__*/ class extends Component {
6219
6317
  /**
6220
6318
  * This only mounts projection nodes for components that
6221
6319
  * need measuring, we might want to do it for all components
@@ -6439,7 +6537,7 @@ function boxEqualsRounded(a, b,) {
6439
6537
  function aspectRatio(box,) {
6440
6538
  return calcLength(box.x,) / calcLength(box.y,);
6441
6539
  }
6442
- var NodeStack = class {
6540
+ var NodeStack = /*#__PURE__*/ class {
6443
6541
  constructor() {
6444
6542
  this.members = [];
6445
6543
  }
@@ -6603,6 +6701,22 @@ function resetDistortingTransform(key7, visualElement, values, sharedAnimationVa
6603
6701
  }
6604
6702
  }
6605
6703
  }
6704
+ function isOptimisedAppearTree(projectionNode,) {
6705
+ projectionNode.hasCheckedOptimisedAppear = true;
6706
+ if (projectionNode.root === projectionNode) return false;
6707
+ const {
6708
+ visualElement,
6709
+ } = projectionNode.options;
6710
+ if (!visualElement) {
6711
+ return false;
6712
+ } else if (getOptimisedAppearId(visualElement,)) {
6713
+ return true;
6714
+ } else if (projectionNode.parent && !projectionNode.parent.hasCheckedOptimisedAppear) {
6715
+ return isOptimisedAppearTree(projectionNode.parent,);
6716
+ } else {
6717
+ return false;
6718
+ }
6719
+ }
6606
6720
  function createProjectionNode({
6607
6721
  attachResizeListener,
6608
6722
  defaultParent,
@@ -6628,6 +6742,7 @@ function createProjectionNode({
6628
6742
  this.isSVG = false;
6629
6743
  this.needsReset = false;
6630
6744
  this.shouldResetTransform = false;
6745
+ this.hasCheckedOptimisedAppear = false;
6631
6746
  this.treeScale = {
6632
6747
  x: 1,
6633
6748
  y: 1,
@@ -6790,9 +6905,6 @@ function createProjectionNode({
6790
6905
  startUpdate() {
6791
6906
  if (this.isUpdateBlocked()) return;
6792
6907
  this.isUpdating = true;
6793
- if (window.HandoffCancelAllAnimations) {
6794
- window.HandoffCancelAllAnimations();
6795
- }
6796
6908
  this.nodes && this.nodes.forEach(resetSkewAndRotation,);
6797
6909
  this.animationId++;
6798
6910
  }
@@ -6808,6 +6920,9 @@ function createProjectionNode({
6808
6920
  this.options.onExitComplete && this.options.onExitComplete();
6809
6921
  return;
6810
6922
  }
6923
+ if (window.HandoffCancelAllAnimations && isOptimisedAppearTree(this,)) {
6924
+ window.HandoffCancelAllAnimations();
6925
+ }
6811
6926
  !this.root.isUpdating && this.root.startUpdate();
6812
6927
  if (this.isLayoutDirty) return;
6813
6928
  this.isLayoutDirty = true;
@@ -7429,16 +7544,16 @@ function createProjectionNode({
7429
7544
  if (!this.isVisible) {
7430
7545
  return hiddenVisibility;
7431
7546
  }
7432
- const styles = {
7547
+ const styles4 = {
7433
7548
  visibility: '',
7434
7549
  };
7435
7550
  const transformTemplate2 = this.getTransformTemplate();
7436
7551
  if (this.needsReset) {
7437
7552
  this.needsReset = false;
7438
- styles.opacity = '';
7439
- styles.pointerEvents = resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents,) || '';
7440
- styles.transform = transformTemplate2 ? transformTemplate2(this.latestValues, '',) : 'none';
7441
- return styles;
7553
+ styles4.opacity = '';
7554
+ styles4.pointerEvents = resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents,) || '';
7555
+ styles4.transform = transformTemplate2 ? transformTemplate2(this.latestValues, '',) : 'none';
7556
+ return styles4;
7442
7557
  }
7443
7558
  const lead = this.getLead();
7444
7559
  if (!this.projectionDelta || !this.layout || !lead.target) {
@@ -7456,17 +7571,17 @@ function createProjectionNode({
7456
7571
  }
7457
7572
  const valuesToRender = lead.animationValues || lead.latestValues;
7458
7573
  this.applyTransformsToTarget();
7459
- styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender,);
7574
+ styles4.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender,);
7460
7575
  if (transformTemplate2) {
7461
- styles.transform = transformTemplate2(valuesToRender, styles.transform,);
7576
+ styles4.transform = transformTemplate2(valuesToRender, styles4.transform,);
7462
7577
  }
7463
7578
  const {
7464
7579
  x,
7465
7580
  y,
7466
7581
  } = this.projectionDelta;
7467
- styles.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;
7582
+ styles4.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;
7468
7583
  if (lead.animationValues) {
7469
- styles.opacity = lead === this
7584
+ styles4.opacity = lead === this
7470
7585
  ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0
7471
7586
  ? _b
7472
7587
  : 1
@@ -7474,7 +7589,7 @@ function createProjectionNode({
7474
7589
  ? this.latestValues.opacity
7475
7590
  : valuesToRender.opacityExit;
7476
7591
  } else {
7477
- styles.opacity = lead === this
7592
+ styles4.opacity = lead === this
7478
7593
  ? valuesToRender.opacity !== void 0 ? valuesToRender.opacity : ''
7479
7594
  : valuesToRender.opacityExit !== void 0
7480
7595
  ? valuesToRender.opacityExit
@@ -7486,22 +7601,22 @@ function createProjectionNode({
7486
7601
  correct,
7487
7602
  applyTo,
7488
7603
  } = scaleCorrectors[key7];
7489
- const corrected = styles.transform === 'none' ? valuesToRender[key7] : correct(valuesToRender[key7], lead,);
7604
+ const corrected = styles4.transform === 'none' ? valuesToRender[key7] : correct(valuesToRender[key7], lead,);
7490
7605
  if (applyTo) {
7491
7606
  const num = applyTo.length;
7492
7607
  for (let i = 0; i < num; i++) {
7493
- styles[applyTo[i]] = corrected;
7608
+ styles4[applyTo[i]] = corrected;
7494
7609
  }
7495
7610
  } else {
7496
- styles[key7] = corrected;
7611
+ styles4[key7] = corrected;
7497
7612
  }
7498
7613
  }
7499
7614
  if (this.options.layoutId) {
7500
- styles.pointerEvents = lead === this
7615
+ styles4.pointerEvents = lead === this
7501
7616
  ? resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents,) || ''
7502
7617
  : 'none';
7503
7618
  }
7504
- return styles;
7619
+ return styles4;
7505
7620
  }
7506
7621
  clearSnapshot() {
7507
7622
  this.resumeFrom = this.snapshot = void 0;
@@ -7727,7 +7842,7 @@ var drag = {
7727
7842
  MeasureLayout,
7728
7843
  },
7729
7844
  };
7730
- var DOMVisualElement = class extends VisualElement {
7845
+ var DOMVisualElement = /*#__PURE__*/ class extends VisualElement {
7731
7846
  constructor() {
7732
7847
  super(...arguments,);
7733
7848
  this.KeyframeResolver = DOMKeyframesResolver;
@@ -7749,7 +7864,7 @@ var DOMVisualElement = class extends VisualElement {
7749
7864
  function getComputedStyle2(element,) {
7750
7865
  return window.getComputedStyle(element,);
7751
7866
  }
7752
- var HTMLVisualElement = class extends DOMVisualElement {
7867
+ var HTMLVisualElement = /*#__PURE__*/ class extends DOMVisualElement {
7753
7868
  constructor() {
7754
7869
  super(...arguments,);
7755
7870
  this.type = 'html';
@@ -7793,7 +7908,7 @@ var HTMLVisualElement = class extends DOMVisualElement {
7793
7908
  renderHTML(instance, renderState, styleProp, projection,);
7794
7909
  }
7795
7910
  };
7796
- var SVGVisualElement = class extends DOMVisualElement {
7911
+ var SVGVisualElement = /*#__PURE__*/ class extends DOMVisualElement {
7797
7912
  constructor() {
7798
7913
  super(...arguments,);
7799
7914
  this.type = 'svg';
@@ -7885,7 +8000,7 @@ function useForceUpdate() {
7885
8000
  function useUnmountEffect(callback,) {
7886
8001
  return useEffect(() => () => callback(), [],);
7887
8002
  }
7888
- var PopChildMeasure = class extends React2.Component {
8003
+ var PopChildMeasure = /*#__PURE__*/ class extends React2.Component {
7889
8004
  getSnapshotBeforeUpdate(prevProps,) {
7890
8005
  const element = this.props.childRef.current;
7891
8006
  if (element && prevProps.isPresent && !this.props.isPresent) {
@@ -9000,7 +9115,7 @@ function useTime() {
9000
9115
  useAnimationFrame((t) => time2.set(t,));
9001
9116
  return time2;
9002
9117
  }
9003
- var WillChangeMotionValue = class extends MotionValue {
9118
+ var WillChangeMotionValue = /*#__PURE__*/ class extends MotionValue {
9004
9119
  constructor() {
9005
9120
  super(...arguments,);
9006
9121
  this.members = [];
@@ -9131,97 +9246,6 @@ var wrap = (min, max, v,) => {
9131
9246
  const rangeSize = max - min;
9132
9247
  return ((v - min) % rangeSize + rangeSize) % rangeSize + min;
9133
9248
  };
9134
- function observeTimeline(update, timeline,) {
9135
- let prevProgress;
9136
- const onFrame = () => {
9137
- const {
9138
- currentTime,
9139
- } = timeline;
9140
- const percentage = currentTime === null ? 0 : currentTime.value;
9141
- const progress2 = percentage / 100;
9142
- if (prevProgress !== progress2) {
9143
- update(progress2,);
9144
- }
9145
- prevProgress = progress2;
9146
- };
9147
- frame.update(onFrame, true,);
9148
- return () => cancelFrame(onFrame,);
9149
- }
9150
- var supportsScrollTimeline = memo(() => window.ScrollTimeline !== void 0);
9151
- var GroupPlaybackControls = class {
9152
- constructor(animations2,) {
9153
- this.animations = animations2.filter(Boolean,);
9154
- }
9155
- then(onResolve, onReject,) {
9156
- return Promise.all(this.animations,).then(onResolve,).catch(onReject,);
9157
- }
9158
- /**
9159
- * TODO: Filter out cancelled or stopped animations before returning
9160
- */
9161
- getAll(propName,) {
9162
- return this.animations[0][propName];
9163
- }
9164
- setAll(propName, newValue,) {
9165
- for (let i = 0; i < this.animations.length; i++) {
9166
- this.animations[i][propName] = newValue;
9167
- }
9168
- }
9169
- attachTimeline(timeline,) {
9170
- const cancelAll = this.animations.map((animation) => {
9171
- if (supportsScrollTimeline() && animation.attachTimeline) {
9172
- animation.attachTimeline(timeline,);
9173
- } else {
9174
- animation.pause();
9175
- return observeTimeline((progress2) => {
9176
- animation.time = animation.duration * progress2;
9177
- }, timeline,);
9178
- }
9179
- },);
9180
- return () => {
9181
- cancelAll.forEach((cancelTimeline, i,) => {
9182
- if (cancelTimeline) cancelTimeline();
9183
- this.animations[i].stop();
9184
- },);
9185
- };
9186
- }
9187
- get time() {
9188
- return this.getAll('time',);
9189
- }
9190
- set time(time2,) {
9191
- this.setAll('time', time2,);
9192
- }
9193
- get speed() {
9194
- return this.getAll('speed',);
9195
- }
9196
- set speed(speed,) {
9197
- this.setAll('speed', speed,);
9198
- }
9199
- get duration() {
9200
- let max = 0;
9201
- for (let i = 0; i < this.animations.length; i++) {
9202
- max = Math.max(max, this.animations[i].duration,);
9203
- }
9204
- return max;
9205
- }
9206
- runAll(methodName,) {
9207
- this.animations.forEach((controls) => controls[methodName]());
9208
- }
9209
- play() {
9210
- this.runAll('play',);
9211
- }
9212
- pause() {
9213
- this.runAll('pause',);
9214
- }
9215
- stop() {
9216
- this.runAll('stop',);
9217
- }
9218
- cancel() {
9219
- this.runAll('cancel',);
9220
- }
9221
- complete() {
9222
- this.runAll('complete',);
9223
- }
9224
- };
9225
9249
  function isDOMKeyframes(keyframes2,) {
9226
9250
  return typeof keyframes2 === 'object' && !Array.isArray(keyframes2,);
9227
9251
  }
@@ -9616,7 +9640,7 @@ function useInView(ref, {
9616
9640
  }, [root, ref, margin, once, amount,],);
9617
9641
  return isInView;
9618
9642
  }
9619
- var DragControls = class {
9643
+ var DragControls = /*#__PURE__*/ class {
9620
9644
  constructor() {
9621
9645
  this.componentControls = /* @__PURE__ */ new Set();
9622
9646
  }
@@ -9808,7 +9832,7 @@ function startOptimizedAppearAnimation(element, name, keyframes2, options, onRea
9808
9832
  }
9809
9833
  }
9810
9834
  var createObject = () => ({});
9811
- var StateVisualElement = class extends VisualElement {
9835
+ var StateVisualElement = /*#__PURE__*/ class extends VisualElement {
9812
9836
  build() {}
9813
9837
  measureInstanceViewportBox() {
9814
9838
  return createBox();
@@ -9972,7 +9996,7 @@ var cancelSync = stepsOrder.reduce((acc, key7,) => {
9972
9996
  return acc;
9973
9997
  }, {},);
9974
9998
 
9975
- // https :https://app.framerstatic.com/framer.W4GEXVYP.js
9999
+ // https :https://app.framerstatic.com/framer.VEJ3JK5Y.js
9976
10000
 
9977
10001
  import React4 from 'react';
9978
10002
  import { startTransition as startTransition2, } from 'react';
@@ -9987,7 +10011,7 @@ var require_hsluv = __commonJS({
9987
10011
  value: true,
9988
10012
  },);
9989
10013
  exports.Hsluv = void 0;
9990
- var Hsluv2 = class {
10014
+ var Hsluv2 = /*#__PURE__*/ class {
9991
10015
  constructor() {
9992
10016
  this.hex = '#000000';
9993
10017
  this.rgb_r = 0;
@@ -11083,11 +11107,11 @@ var require_resize_observer_umd = __commonJS({
11083
11107
  };
11084
11108
  return Scheduler2;
11085
11109
  }();
11086
- var scheduler = new Scheduler();
11110
+ var scheduler2 = new Scheduler();
11087
11111
  var updateCount = function (n,) {
11088
- !watching && n > 0 && scheduler.start();
11112
+ !watching && n > 0 && scheduler2.start();
11089
11113
  watching += n;
11090
- !watching && scheduler.stop();
11114
+ !watching && scheduler2.stop();
11091
11115
  };
11092
11116
  var skipNotifyOnElement = function (target,) {
11093
11117
  return !isSVG(target,) && !isReplacedElement(target,) && getComputedStyle(target,).display === 'inline';
@@ -11145,7 +11169,7 @@ var require_resize_observer_umd = __commonJS({
11145
11169
  firstObservation && resizeObservers.push(detail,);
11146
11170
  detail.observationTargets.push(new ResizeObservation(target, options && options.box,),);
11147
11171
  updateCount(1,);
11148
- scheduler.schedule();
11172
+ scheduler2.schedule();
11149
11173
  }
11150
11174
  };
11151
11175
  ResizeObserverController2.unobserve = function (resizeObserver, target,) {
@@ -11662,9 +11686,9 @@ function renderPage(Page4, defaultPageStyle,) {
11662
11686
  };
11663
11687
  return React4.isValidElement(Page4,) ? React4.cloneElement(Page4, style,) : React4.createElement(Page4, style,);
11664
11688
  }
11665
- var NotFoundError = class extends Error {};
11666
- var ErrorBoundaryCaughtError = class extends Error {};
11667
- var ErrorBoundary = class extends Component {
11689
+ var NotFoundError = /*#__PURE__*/ class extends Error {};
11690
+ var ErrorBoundaryCaughtError = /*#__PURE__*/ class extends Error {};
11691
+ var ErrorBoundary = /*#__PURE__*/ class extends Component {
11668
11692
  constructor(props,) {
11669
11693
  super(props,);
11670
11694
  this.state = {
@@ -11884,14 +11908,12 @@ function lazy(factory,) {
11884
11908
  const Component15 = React4.forwardRef(function LazyWithPreload(props, ref,) {
11885
11909
  return React4.createElement(
11886
11910
  LoadedComponent !== null && LoadedComponent !== void 0 ? LoadedComponent : LazyComponent,
11887
- Object.assign(
11888
- ref
11889
- ? {
11890
- ref,
11891
- }
11892
- : {},
11893
- props,
11894
- ),
11911
+ ref
11912
+ ? {
11913
+ ref,
11914
+ ...props,
11915
+ }
11916
+ : props,
11895
11917
  );
11896
11918
  },);
11897
11919
  Component15.preload = () => {
@@ -11916,7 +11938,22 @@ function getRouteElementId(route, hash2,) {
11916
11938
  return void 0;
11917
11939
  }
11918
11940
  function isBot(userAgent,) {
11919
- return /bot|Mediapartners-Google|Google-PageRenderer|yandex|ia_archiver/i.test(userAgent,);
11941
+ return /bot|Mediapartners-Google|Google-PageRenderer|yandex|ia_archiver/iu.test(userAgent,);
11942
+ }
11943
+ function yieldToMain(isHighPriority,) {
11944
+ if ('scheduler' in window) {
11945
+ const options = {
11946
+ priority: isHighPriority ? 'user-blocking' : 'user-visible',
11947
+ };
11948
+ if ('yield' in scheduler) return scheduler.yield(options,);
11949
+ if ('postTask' in scheduler) return scheduler.postTask(() => {}, options,);
11950
+ }
11951
+ if (isHighPriority) {
11952
+ return Promise.resolve();
11953
+ }
11954
+ return new Promise((resolve) => {
11955
+ setTimeout(resolve, 0,);
11956
+ },);
11920
11957
  }
11921
11958
  async function replacePathVariables(path, currentLocale, nextLocale, defaultLocale, collectionId, pathVariables, collectionUtils,) {
11922
11959
  var _a, _b, _c;
@@ -12600,18 +12637,22 @@ async function switchLocale(options,) {
12600
12637
  routeId: options.routeId,
12601
12638
  pathVariables: result.pathVariables,
12602
12639
  localeId: options.nextLocale.id,
12603
- paginationInfo: options.paginationInfo,
12640
+ paginationInfo: window.history.state.paginationInfo,
12604
12641
  }, result.path,);
12605
12642
  } catch {}
12606
12643
  return result;
12607
12644
  }
12608
- function pushLoadMoreHistory(paginationInfo,) {
12645
+ function pushLoadMoreHistory(hash2, paginationInfo,) {
12609
12646
  try {
12610
12647
  const currentHistoryState = window.history.state;
12611
12648
  if (!isHistoryState(currentHistoryState,)) return;
12649
+ const newPaginationInfo = {
12650
+ ...currentHistoryState.paginationInfo,
12651
+ [hash2]: paginationInfo,
12652
+ };
12612
12653
  replaceHistoryState({
12613
12654
  ...currentHistoryState,
12614
- paginationInfo,
12655
+ paginationInfo: newPaginationInfo,
12615
12656
  },);
12616
12657
  } catch {}
12617
12658
  }
@@ -12679,18 +12720,87 @@ function turnOnReactEventHandling() {
12679
12720
  eventsToStop.forEach((event) => document.body.removeEventListener(event, stopFn, options,));
12680
12721
  eventsToStop = void 0;
12681
12722
  }
12682
- var hydrated = false;
12723
+ function measureSafe(name, start, end,) {
12724
+ try {
12725
+ performance.measure(name, start, end,);
12726
+ } catch (e) {
12727
+ console.warn(`Could not measure ${name}`, e,);
12728
+ }
12729
+ }
12730
+ var hydrationEffectHasRun = false;
12731
+ var hydrationInsertionEffectHasRun = false;
12732
+ var hydrationLayoutEffectHasRun = false;
12683
12733
  function OnHydrationEnd({
12684
- addHydrationEndMarker,
12734
+ addHydrationMarkers,
12685
12735
  turnOffEventHandlerHack,
12686
12736
  },) {
12737
+ const hydrationMarkPrefix = 'framer-hydration-';
12738
+ const hydrationStart = `${hydrationMarkPrefix}start`;
12739
+ const hydrationRenderEnd = `${hydrationMarkPrefix}render-end`;
12740
+ const hydrationLayoutEffectsEnd = `${hydrationMarkPrefix}layout-effects-end`;
12741
+ const hydrationEffectsEnd = `${hydrationMarkPrefix}effects-end`;
12742
+ const hydrationFP = `${hydrationMarkPrefix}first-paint`;
12743
+ useInsertionEffect(() => {
12744
+ if (hydrationInsertionEffectHasRun) return;
12745
+ hydrationInsertionEffectHasRun = true;
12746
+ if (addHydrationMarkers) {
12747
+ performance.mark(hydrationRenderEnd,);
12748
+ measureSafe(`${hydrationMarkPrefix}render`, hydrationStart, hydrationRenderEnd,);
12749
+ }
12750
+ }, [],);
12687
12751
  useLayoutEffect(() => {
12688
- if (hydrated) return;
12689
- hydrated = true;
12690
- if (turnOffEventHandlerHack) turnOnReactEventHandling();
12691
- if (addHydrationEndMarker) {
12692
- performance.mark('framer-hydration-end',);
12693
- performance.measure('framer-hydration', 'framer-hydration-start', 'framer-hydration-end',);
12752
+ if (hydrationLayoutEffectHasRun) return;
12753
+ hydrationLayoutEffectHasRun = true;
12754
+ if (addHydrationMarkers) {
12755
+ performance.mark(hydrationLayoutEffectsEnd,);
12756
+ measureSafe(`${hydrationMarkPrefix}layout-effects`, hydrationRenderEnd, hydrationLayoutEffectsEnd,);
12757
+ }
12758
+ requestAnimationFrame(() => {
12759
+ var _a, _b, _c;
12760
+ const browserRenderStart = `${hydrationMarkPrefix}browser-render-start`;
12761
+ if (addHydrationMarkers) {
12762
+ performance.mark(browserRenderStart,);
12763
+ measureSafe(
12764
+ `${hydrationMarkPrefix}uho`,
12765
+ (_b = (_a = performance.getEntriesByName(hydrationEffectsEnd,)[0]) === null || _a === void 0 ? void 0 : _a.name) !== null &&
12766
+ _b !== void 0
12767
+ ? _b
12768
+ : (_c = performance.getEntriesByName(hydrationLayoutEffectsEnd,)[0]) === null || _c === void 0
12769
+ ? void 0
12770
+ : _c.name,
12771
+ browserRenderStart,
12772
+ );
12773
+ }
12774
+ setTimeout(() => {
12775
+ if (turnOffEventHandlerHack) {
12776
+ turnOnReactEventHandling();
12777
+ }
12778
+ if (addHydrationMarkers) {
12779
+ performance.mark(hydrationFP,);
12780
+ measureSafe(`${hydrationMarkPrefix}time-to-first-paint`, hydrationStart, hydrationFP,);
12781
+ measureSafe(`${hydrationMarkPrefix}browser-render`, browserRenderStart, hydrationFP,);
12782
+ }
12783
+ }, 0,);
12784
+ },);
12785
+ }, [],);
12786
+ useEffect(() => {
12787
+ var _a, _b, _c;
12788
+ if (hydrationEffectHasRun) return;
12789
+ hydrationEffectHasRun = true;
12790
+ if (turnOffEventHandlerHack) {
12791
+ turnOnReactEventHandling();
12792
+ }
12793
+ if (addHydrationMarkers) {
12794
+ performance.mark(hydrationEffectsEnd,);
12795
+ measureSafe(
12796
+ `${hydrationMarkPrefix}effects`,
12797
+ (_b = (_a = performance.getEntriesByName(hydrationFP,)[0]) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0
12798
+ ? _b
12799
+ : (_c = performance.getEntriesByName(hydrationLayoutEffectsEnd,)[0]) === null || _c === void 0
12800
+ ? void 0
12801
+ : _c.name,
12802
+ hydrationEffectsEnd,
12803
+ );
12694
12804
  }
12695
12805
  }, [],);
12696
12806
  return null;
@@ -12723,7 +12833,7 @@ function RoutesProvider({
12723
12833
  children,
12724
12834
  },);
12725
12835
  }
12726
- var SuspenseErrorBoundary = class extends Component {
12836
+ var SuspenseErrorBoundary = /*#__PURE__*/ class extends Component {
12727
12837
  constructor() {
12728
12838
  super(...arguments,);
12729
12839
  this.state = {
@@ -12771,25 +12881,15 @@ function SuspenseThatPreservesDom({
12771
12881
  },);
12772
12882
  }
12773
12883
  var defaultLocaleId = 'default';
12774
- var noopAsync = async () => {};
12775
- var defaultCollectionListPaginationInfo = {
12776
- paginationInfo: void 0,
12777
- setPaginationInfo: noopAsync,
12778
- loadMore: noopAsync,
12779
- };
12780
- var CollectionListPaginationInfoContext = /* @__PURE__ */ React4.createContext(defaultCollectionListPaginationInfo,);
12781
- function useCollectionListPaginationInfo() {
12782
- return React4.useContext(CollectionListPaginationInfoContext,);
12783
- }
12784
12884
  function useForceUpdate2() {
12785
12885
  const [_, setForcedRenderCount,] = React4.useState(0,);
12786
12886
  return [_, React4.useCallback(() => setForcedRenderCount((v) => v + 1), [],),];
12787
12887
  }
12788
- var noopAsync2 = async () => {};
12888
+ var noopAsync = async () => {};
12789
12889
  var defaultLocaleInfo = {
12790
12890
  activeLocale: null,
12791
12891
  locales: [],
12792
- setLocale: noopAsync2,
12892
+ setLocale: noopAsync,
12793
12893
  };
12794
12894
  var LocaleInfoContext = /* @__PURE__ */ React4.createContext(defaultLocaleInfo,);
12795
12895
  function useLocaleInfo() {
@@ -12868,9 +12968,8 @@ function Router({
12868
12968
  locales = [],
12869
12969
  preserveQueryParams = false,
12870
12970
  enableImproveInpDuringHydration = false,
12871
- shouldMarkHydrationEnd = false,
12971
+ addHydrationMarkers = false,
12872
12972
  },) {
12873
- var _a, _b;
12874
12973
  useReplaceInitialState({
12875
12974
  disabled: disableHistory,
12876
12975
  routeId: initialRoute,
@@ -12884,46 +12983,17 @@ function Router({
12884
12983
  const currentLocaleIdRef = React4.useRef(initialLocaleId,);
12885
12984
  const currentLocaleId = currentLocaleIdRef.current;
12886
12985
  const activeLocale = React4.useMemo(() => {
12887
- var _a2;
12888
- return (_a2 = locales.find(({
12986
+ var _a;
12987
+ return (_a = locales.find(({
12889
12988
  id: id3,
12890
12989
  },) => {
12891
12990
  if (!currentLocaleId) return id3 === defaultLocaleId;
12892
12991
  return id3 === currentLocaleId;
12893
- },)) !== null && _a2 !== void 0
12894
- ? _a2
12992
+ },)) !== null && _a !== void 0
12993
+ ? _a
12895
12994
  : null;
12896
12995
  }, [currentLocaleId, locales,],);
12897
12996
  const [dep, forceUpdate,] = useForceUpdate2();
12898
- const [paginationInfo, setPaginationInfo,] = React4.useState(
12899
- typeof window !== 'undefined'
12900
- ? (_b = (_a = window === null || window === void 0 ? void 0 : window.history) === null || _a === void 0 ? void 0 : _a.state) ===
12901
- null || _b === void 0
12902
- ? void 0
12903
- : _b.pagination
12904
- : void 0,
12905
- );
12906
- const collectionListPaginationInfo = React4.useMemo(() => {
12907
- return {
12908
- paginationInfo,
12909
- setPaginationInfo: async (newPaginationInfo) => {
12910
- startTransition2(() => {
12911
- setPaginationInfo(newPaginationInfo,);
12912
- },);
12913
- },
12914
- loadMore: async () => {
12915
- if ((paginationInfo === null || paginationInfo === void 0 ? void 0 : paginationInfo.type) !== 'loadMore') return;
12916
- const newPaginationInfo = {
12917
- ...paginationInfo,
12918
- currentPage: paginationInfo.currentPage + 1,
12919
- };
12920
- pushLoadMoreHistory(newPaginationInfo,);
12921
- startTransition2(() => {
12922
- setPaginationInfo(newPaginationInfo,);
12923
- },);
12924
- },
12925
- };
12926
- }, [paginationInfo,],);
12927
12997
  const localeInfo = React4.useMemo(() => {
12928
12998
  return {
12929
12999
  activeLocale,
@@ -12955,7 +13025,6 @@ function Router({
12955
13025
  pathVariables: currentPathVariablesRef.current,
12956
13026
  collectionUtils,
12957
13027
  preserveQueryParams,
12958
- paginationInfo,
12959
13028
  },);
12960
13029
  if (!localeResult) return;
12961
13030
  currentPathVariablesRef.current = localeResult.pathVariables;
@@ -12965,17 +13034,7 @@ function Router({
12965
13034
  } catch {}
12966
13035
  },
12967
13036
  };
12968
- }, [
12969
- activeLocale,
12970
- collectionUtils,
12971
- forceUpdate,
12972
- locales,
12973
- monitorNextRender,
12974
- paginationInfo,
12975
- preserveQueryParams,
12976
- routes,
12977
- startViewTransition2,
12978
- ],);
13037
+ }, [activeLocale, collectionUtils, forceUpdate, locales, monitorNextRender, preserveQueryParams, routes, startViewTransition2,],);
12979
13038
  const scheduleSideEffect = useScheduleRenderSideEffects(dep,);
12980
13039
  const setCurrentRouteId = React4.useCallback(
12981
13040
  (routeId, localeId, hash2, pathVariables, smoothScroll = false, isHistoryTransition = false,) => {
@@ -12992,11 +13051,11 @@ function Router({
12992
13051
  );
12993
13052
  usePopStateHandler(currentRouteRef, setCurrentRouteId,);
12994
13053
  const navigate = React4.useCallback((routeId, hash2, pathVariables, smoothScroll,) => {
12995
- var _a2, _b2;
13054
+ var _a, _b;
12996
13055
  const newRoute = routes[routeId];
12997
13056
  if (pathVariables) {
12998
13057
  const inUse = /* @__PURE__ */ new Set();
12999
- const path = (_a2 = newRoute === null || newRoute === void 0 ? void 0 : newRoute.path) !== null && _a2 !== void 0 ? _a2 : '/';
13058
+ const path = (_a = newRoute === null || newRoute === void 0 ? void 0 : newRoute.path) !== null && _a !== void 0 ? _a : '/';
13000
13059
  for (const match of path.matchAll(pathVariablesRegExp,)) {
13001
13060
  const usedVariable = match[1];
13002
13061
  if (usedVariable === void 0) {
@@ -13016,7 +13075,7 @@ function Router({
13016
13075
  pathVariables,
13017
13076
  },)
13018
13077
  ) {
13019
- if (((_b2 = window.history.state) === null || _b2 === void 0 ? void 0 : _b2.hash) !== hash2) {
13078
+ if (((_b = window.history.state) === null || _b === void 0 ? void 0 : _b.hash) !== hash2) {
13020
13079
  if (!disableHistory) {
13021
13080
  const route = routes[routeId];
13022
13081
  if (route) {
@@ -13074,26 +13133,23 @@ function Router({
13074
13133
  api,
13075
13134
  children: jsx(LocaleInfoContext.Provider, {
13076
13135
  value: localeInfo,
13077
- children: jsx(CollectionListPaginationInfoContext.Provider, {
13078
- value: collectionListPaginationInfo,
13079
- children: jsxs(SuspenseThatPreservesDom, {
13080
- children: [
13081
- jsx(ErrorBoundary, {
13082
- notFoundPage,
13083
- defaultPageStyle,
13084
- forceUpdateKey: dep,
13085
- children: jsx(React4.Fragment, {
13086
- children: pageExistsInCurrentLocale
13087
- ? renderPage(current.page, defaultPageStyle,)
13088
- : notFoundPage && renderPage(notFoundPage, defaultPageStyle,),
13089
- }, remountKey,),
13090
- },),
13091
- jsx(OnHydrationEnd, {
13092
- addHydrationEndMarker: shouldMarkHydrationEnd,
13093
- turnOffEventHandlerHack: enableImproveInpDuringHydration,
13094
- },),
13095
- ],
13096
- },),
13136
+ children: jsxs(SuspenseThatPreservesDom, {
13137
+ children: [
13138
+ jsx(ErrorBoundary, {
13139
+ notFoundPage,
13140
+ defaultPageStyle,
13141
+ forceUpdateKey: dep,
13142
+ children: jsx(React4.Fragment, {
13143
+ children: pageExistsInCurrentLocale
13144
+ ? renderPage(current.page, defaultPageStyle,)
13145
+ : notFoundPage && renderPage(notFoundPage, defaultPageStyle,),
13146
+ }, remountKey,),
13147
+ },),
13148
+ jsx(OnHydrationEnd, {
13149
+ addHydrationMarkers,
13150
+ turnOffEventHandlerHack: enableImproveInpDuringHydration,
13151
+ },),
13152
+ ],
13097
13153
  },),
13098
13154
  },),
13099
13155
  },);
@@ -13294,18 +13350,22 @@ function useRoutePreloader(routeIds, enabled = true,) {
13294
13350
  const {
13295
13351
  getRoute,
13296
13352
  } = useRouter();
13297
- React4.useEffect(() => {
13353
+ useEffect(() => {
13298
13354
  if (!getRoute || !enabled || !shouldPreloadBasedOnUA) return;
13299
13355
  for (const routeId of routeIds) {
13300
- const route = getRoute(routeId,);
13301
- if (route === null || route === void 0 ? void 0 : route.page) preloadComponent(route.page,);
13356
+ void preloadRoute(getRoute(routeId,),);
13302
13357
  }
13303
13358
  }, [routeIds, getRoute, enabled,],);
13304
13359
  }
13305
- function preloadComponent(component,) {
13306
- if (!shouldPreloadBasedOnUA) return;
13307
- if (isLazyComponentType(component,)) {
13308
- void component.preload();
13360
+ async function preloadRoute(route,) {
13361
+ if (!shouldPreloadBasedOnUA || !route) return;
13362
+ const component = route.page;
13363
+ if (!component || !isLazyComponentType(component,)) return;
13364
+ await yieldToMain();
13365
+ try {
13366
+ await component.preload();
13367
+ } catch (e) {
13368
+ if (false) console.warn('Preload failed', route, e,);
13309
13369
  }
13310
13370
  }
13311
13371
  function useRouteAnchor(routeId, {
@@ -13375,7 +13435,7 @@ function deprecationWarning(removedItem, removalVersion, replacement,) {
13375
13435
  const warningText = `Deprecation warning: ${removedItem} will be removed in version ${removalVersion}${replacementText}.`;
13376
13436
  warnOnce2(warningText,);
13377
13437
  }
13378
- var Observers = class {
13438
+ var Observers = /*#__PURE__*/ class {
13379
13439
  constructor() {
13380
13440
  __publicField(this, 'observers', /* @__PURE__ */ new Set(),);
13381
13441
  __publicField(this, 'transactions', {},);
@@ -13495,7 +13555,7 @@ function animatableInterpolation(value, currentInterpolation,) {
13495
13555
  },
13496
13556
  };
13497
13557
  }
13498
- var AnimatableValue = class {
13558
+ var AnimatableValue = /*#__PURE__*/ class {
13499
13559
  constructor(value,) {
13500
13560
  this.value = value;
13501
13561
  __publicField(this, 'observers', new Observers(),);
@@ -13687,7 +13747,7 @@ function controlPointsForCurve(curve,) {
13687
13747
  return [0.42, 0, 0.58, 1,];
13688
13748
  }
13689
13749
  }
13690
- var BezierAnimator = class {
13750
+ var BezierAnimator = /*#__PURE__*/ class {
13691
13751
  constructor(options, interpolation,) {
13692
13752
  this.interpolation = interpolation;
13693
13753
  __publicField(this, 'unitBezier',);
@@ -13742,7 +13802,7 @@ var BezierAnimator = class {
13742
13802
  return 1 / (200 * duration);
13743
13803
  }
13744
13804
  };
13745
- var UnitBezier = class {
13805
+ var UnitBezier = /*#__PURE__*/ class {
13746
13806
  constructor(point1, point2,) {
13747
13807
  __publicField(this, 'a',);
13748
13808
  __publicField(this, 'b',);
@@ -13788,7 +13848,7 @@ var UnitBezier = class {
13788
13848
  return t2;
13789
13849
  }
13790
13850
  };
13791
- var Integrator = class {
13851
+ var Integrator = /*#__PURE__*/ class {
13792
13852
  constructor(accelerationFunction,) {
13793
13853
  __publicField(this, 'accelerationForState',);
13794
13854
  this.accelerationForState = accelerationFunction;
@@ -13823,7 +13883,7 @@ var Integrator = class {
13823
13883
  return output;
13824
13884
  }
13825
13885
  };
13826
- var FrictionAnimator = class {
13886
+ var FrictionAnimator = /*#__PURE__*/ class {
13827
13887
  constructor(options,) {
13828
13888
  __publicField(this, 'options',);
13829
13889
  __publicField(this, 'state',);
@@ -14001,7 +14061,7 @@ function isDampingDurationSpringOptions(options,) {
14001
14061
  }
14002
14062
  return typeof options.dampingRatio === 'number' || typeof options.duration === 'number' || typeof options.mass === 'number';
14003
14063
  }
14004
- var SpringAnimator = class {
14064
+ var SpringAnimator = /*#__PURE__*/ class {
14005
14065
  constructor(options, interpolation,) {
14006
14066
  this.interpolation = interpolation;
14007
14067
  __publicField(this, 'options',);
@@ -14088,7 +14148,7 @@ var Defaults = {
14088
14148
  tolerance: 1,
14089
14149
  },
14090
14150
  };
14091
- var InertialScrollAnimator = class {
14151
+ var InertialScrollAnimator = /*#__PURE__*/ class {
14092
14152
  constructor(options,) {
14093
14153
  __publicField(this, 'options',);
14094
14154
  __publicField(this, 'current',);
@@ -15330,7 +15390,7 @@ var DefaultInterpolationOptions = {
15330
15390
  colorModel: 'husl',
15331
15391
  /* HUSL */
15332
15392
  };
15333
- var ValueInterpolation = class {
15393
+ var ValueInterpolation = /*#__PURE__*/ class {
15334
15394
  /**
15335
15395
  * @internal
15336
15396
  */
@@ -15383,7 +15443,7 @@ var Defaults2 = /* @__PURE__ */ (() => ({
15383
15443
  delta: 1 / 60,
15384
15444
  maxValues: 1e4,
15385
15445
  }))();
15386
- var PrecalculatedAnimator = class {
15446
+ var PrecalculatedAnimator = /*#__PURE__*/ class {
15387
15447
  constructor(options,) {
15388
15448
  __publicField(this, 'animator',);
15389
15449
  __publicField(this, 'values',);
@@ -15450,7 +15510,7 @@ var PrecalculatedAnimator = class {
15450
15510
  }
15451
15511
  };
15452
15512
  var EventEmitter3 = /* @__PURE__ */ (() => require_eventemitter3().EventEmitter)();
15453
- var EventEmitter = class {
15513
+ var EventEmitter = /*#__PURE__*/ class {
15454
15514
  constructor() {
15455
15515
  __publicField(this, '_emitter', new EventEmitter3(),);
15456
15516
  }
@@ -15566,7 +15626,7 @@ var _raf = (f) => {
15566
15626
  var __raf = /* @__PURE__ */ (() => safeWindow['requestAnimationFrame'] || _raf)();
15567
15627
  var raf = (f) => __raf(f,);
15568
15628
  var LoopTimeStep = /* @__PURE__ */ (() => 1 / 60)();
15569
- var Loop = class extends EventEmitter {
15629
+ var Loop = /*#__PURE__*/ class extends EventEmitter {
15570
15630
  /**
15571
15631
  * @internal
15572
15632
  */
@@ -15773,7 +15833,7 @@ var RenderTarget = {
15773
15833
  return false;
15774
15834
  },
15775
15835
  };
15776
- var AnimationDriver = class {
15836
+ var AnimationDriver = /*#__PURE__*/ class {
15777
15837
  constructor(animator, updateCallback, finishedCallback,) {
15778
15838
  this.animator = animator;
15779
15839
  this.updateCallback = updateCallback;
@@ -15799,7 +15859,7 @@ var AnimationDriver = class {
15799
15859
  return this.animator.isFinished();
15800
15860
  }
15801
15861
  };
15802
- var MainLoopAnimationDriver = class extends AnimationDriver {
15862
+ var MainLoopAnimationDriver = /*#__PURE__*/ class extends AnimationDriver {
15803
15863
  play() {
15804
15864
  if (RenderEnvironment.target !== RenderTarget.preview) {
15805
15865
  this.finishedCallback && this.finishedCallback(false,);
@@ -15820,7 +15880,7 @@ var DefaultDeprecatedAnimationOptions = {
15820
15880
  colorModel: 'husl',
15821
15881
  /* HUSL */
15822
15882
  };
15823
- var FramerAnimation = class {
15883
+ var FramerAnimation = /*#__PURE__*/ class {
15824
15884
  /**
15825
15885
  * @internal
15826
15886
  */
@@ -16513,7 +16573,7 @@ function getColorsFromTheme(theme, type,) {
16513
16573
  screenColor: isDarkTheme ? '#333' : '#eee',
16514
16574
  };
16515
16575
  }
16516
- var ErrorBoundary2 = class extends Component {
16576
+ var ErrorBoundary2 = /*#__PURE__*/ class extends Component {
16517
16577
  constructor() {
16518
16578
  super(...arguments,);
16519
16579
  __publicField(this, 'state', {},);
@@ -18129,6 +18189,12 @@ function useConstraints(props,) {
18129
18189
  const calculatedRect = calculateRect(props, parentSize, true,);
18130
18190
  return calculatedRect;
18131
18191
  }
18192
+ function isAutoSized({
18193
+ width,
18194
+ height,
18195
+ },) {
18196
+ return width === 'auto' || width === 'min-content' || height === 'auto' || height === 'min-content';
18197
+ }
18132
18198
  var ControlType = /* @__PURE__ */ ((ControlType2) => {
18133
18199
  ControlType2['Boolean'] = 'boolean';
18134
18200
  ControlType2['Number'] = 'number';
@@ -18157,6 +18223,7 @@ var ControlType = /* @__PURE__ */ ((ControlType2) => {
18157
18223
  ControlType2['Cursor'] = 'cursor';
18158
18224
  ControlType2['Padding'] = 'padding';
18159
18225
  ControlType2['BorderRadius'] = 'borderradius';
18226
+ ControlType2['CollectionReference'] = 'collectionreference';
18160
18227
  return ControlType2;
18161
18228
  })(ControlType || {},);
18162
18229
  var isFlexboxGapSupportedCached;
@@ -19015,8 +19082,8 @@ var didInject = false;
19015
19082
  function injectComponentCSSRules() {
19016
19083
  if (didInject) return;
19017
19084
  didInject = true;
19018
- const styles = RenderTarget.current() === RenderTarget.preview ? combinedCSSRulesForPreview : combinedCSSRules;
19019
- for (const rule of styles) {
19085
+ const styles4 = RenderTarget.current() === RenderTarget.preview ? combinedCSSRulesForPreview : combinedCSSRules;
19086
+ for (const rule of styles4) {
19020
19087
  injectCSSRule(rule, void 0, void 0,);
19021
19088
  }
19022
19089
  }
@@ -19062,6 +19129,7 @@ function getControlDefaultValue(control,) {
19062
19129
  try {
19063
19130
  switch (control.type) {
19064
19131
  case 'string':
19132
+ case 'collectionreference':
19065
19133
  case 'color':
19066
19134
  case 'date':
19067
19135
  case 'link':
@@ -21257,7 +21325,7 @@ function Border(props,) {
21257
21325
  },);
21258
21326
  }
21259
21327
  function htmlElementAsMotionComponent(asElem,) {
21260
- return asElem && asElem !== 'search' && asElem !== 'slot' && asElem !== 'template' ? motion(asElem,) : motion['div'];
21328
+ return asElem && asElem !== 'search' && asElem !== 'slot' && asElem !== 'template' ? motion[asElem] : motion['div'];
21261
21329
  }
21262
21330
  var isChrome2 = /* @__PURE__ */ isChrome();
21263
21331
  function layoutHintDataPropsForCenter(center,) {
@@ -21292,25 +21360,7 @@ function processOverrideForwarding(props, children,) {
21292
21360
  };
21293
21361
  }
21294
21362
  }
21295
- let _forwardedOverrides = props._forwardedOverrides;
21296
- const extractions = props._overrideForwardingDescription;
21297
- if (extractions) {
21298
- _forwardedOverrides = void 0;
21299
- for (const key7 in extractions) {
21300
- const propName = extractions[key7];
21301
- const value = props[propName];
21302
- if (value !== void 0) {
21303
- if (!_forwardedOverrides) {
21304
- _forwardedOverrides = {};
21305
- props = {
21306
- ...props,
21307
- };
21308
- }
21309
- _forwardedOverrides[key7] = props[propName];
21310
- delete props[propName];
21311
- }
21312
- }
21313
- }
21363
+ const _forwardedOverrides = props._forwardedOverrides;
21314
21364
  if (!_forwardedOverrides) {
21315
21365
  return {
21316
21366
  props,
@@ -21380,7 +21430,7 @@ function useForceUpdate3() {
21380
21430
  }
21381
21431
  var ResizeObserverPolyfill = /* @__PURE__ */ (() => require_resize_observer_umd().ResizeObserver)();
21382
21432
  var DEFAULT_SIZE = 200;
21383
- var SharedObserver = class {
21433
+ var SharedObserver = /*#__PURE__*/ class {
21384
21434
  constructor() {
21385
21435
  __publicField(this, 'sharedResizeObserver',);
21386
21436
  __publicField(this, 'callbacks', /* @__PURE__ */ new WeakMap(),);
@@ -21711,6 +21761,7 @@ function resetSetStyle(element, key7, toValue, microtask2 = true,) {
21711
21761
  }
21712
21762
  }
21713
21763
  var Layer = /* @__PURE__ */ (() => {
21764
+ /*#__PURE__*/
21714
21765
  class Layer2 extends Component {
21715
21766
  constructor() {
21716
21767
  super(...arguments,);
@@ -22441,12 +22492,6 @@ function resolveParentSize(props, unwrappedProps, rect, inCodeComponent,) {
22441
22492
  }
22442
22493
  return 0;
22443
22494
  }
22444
- function isAutoSized({
22445
- width,
22446
- height,
22447
- },) {
22448
- return width === 'auto' || width === 'min-content' || height === 'auto' || height === 'min-content';
22449
- }
22450
22495
  function EmptyState({
22451
22496
  title = '',
22452
22497
  description = 'Click and drag the connector to any frame on the canvas \u2192',
@@ -22548,7 +22593,7 @@ var SharedLayoutContext = /* @__PURE__ */ React4.createContext({
22548
22593
  scheduleProjectionDidUpdate: () => {},
22549
22594
  initLead: () => {},
22550
22595
  },);
22551
- var SharedLayoutRoot = class extends Component {
22596
+ var SharedLayoutRoot = /*#__PURE__*/ class extends Component {
22552
22597
  constructor() {
22553
22598
  super(...arguments,);
22554
22599
  __publicField(this, 'shouldAnimate', false,);
@@ -22631,7 +22676,7 @@ function MagicMotionCrossfadeRoot(props,) {
22631
22676
  children: props.children,
22632
22677
  },);
22633
22678
  }
22634
- var SharedIntersectionObserver = class {
22679
+ var SharedIntersectionObserver = /*#__PURE__*/ class {
22635
22680
  constructor(options,) {
22636
22681
  __publicField(this, 'sharedIntersectionObserver',);
22637
22682
  __publicField(this, 'callbacks', /* @__PURE__ */ new WeakMap(),);
@@ -22775,7 +22820,7 @@ function pointForEvent(event, customTarget = null,) {
22775
22820
  };
22776
22821
  return point2;
22777
22822
  }
22778
- var FramerEvent = class {
22823
+ var FramerEvent = /*#__PURE__*/ class {
22779
22824
  /**
22780
22825
  * @internal
22781
22826
  */
@@ -22882,7 +22927,7 @@ var DraggingContext = /* @__PURE__ */ React4.createContext({
22882
22927
  dragging: false,
22883
22928
  },);
22884
22929
  function WithDragging(Component15,) {
22885
- const _WithDraggingHOC = class extends React4.Component {
22930
+ const _WithDraggingHOC = /*#__PURE__*/ class extends React4.Component {
22886
22931
  constructor(props, defaultProps,) {
22887
22932
  super(props, defaultProps,);
22888
22933
  __publicField(this, 'state', {
@@ -23701,7 +23746,7 @@ var ObservableObject = /* @__PURE__ */ (() => {
23701
23746
  };
23702
23747
  return ObservableObject2;
23703
23748
  })();
23704
- var ObservableObjectProxyHandler = class {
23749
+ var ObservableObjectProxyHandler = /*#__PURE__*/ class {
23705
23750
  constructor() {
23706
23751
  __publicField(this, 'set', (target, key7, value, receiver,) => {
23707
23752
  if (key7 === $private) {
@@ -24377,7 +24422,7 @@ function applyLayoutProp(style, props, key7,) {
24377
24422
  }
24378
24423
  }
24379
24424
  var DeprecatedFrame = /* @__PURE__ */ (() => {
24380
- const _DeprecatedFrameInner = class extends Layer {
24425
+ const _DeprecatedFrameInner = /*#__PURE__*/ class extends Layer {
24381
24426
  constructor() {
24382
24427
  super(...arguments,);
24383
24428
  __publicField(this, 'element', null,);
@@ -24596,7 +24641,7 @@ var DeprecatedFrame = /* @__PURE__ */ (() => {
24596
24641
  const {
24597
24642
  visible,
24598
24643
  id: id3,
24599
- className,
24644
+ className: className2,
24600
24645
  } = this.props;
24601
24646
  if (!visible) {
24602
24647
  return null;
@@ -24611,7 +24656,7 @@ var DeprecatedFrame = /* @__PURE__ */ (() => {
24611
24656
  id: id3,
24612
24657
  style,
24613
24658
  ref: this.setElement,
24614
- className,
24659
+ className: className2,
24615
24660
  children: [
24616
24661
  /* @__PURE__ */ jsx(ProvideParentSize, {
24617
24662
  parentSize,
@@ -24624,19 +24669,7 @@ var DeprecatedFrame = /* @__PURE__ */ (() => {
24624
24669
  },);
24625
24670
  }
24626
24671
  layoutChildren() {
24627
- let _forwardedOverrides = this.props._forwardedOverrides;
24628
- const extractions = this.props._overrideForwardingDescription;
24629
- if (extractions) {
24630
- let added = false;
24631
- _forwardedOverrides = {};
24632
- for (const [key7, value,] of Object.entries(extractions,)) {
24633
- added = true;
24634
- _forwardedOverrides[key7] = asRecord(this.props,)[value];
24635
- }
24636
- if (!added) {
24637
- _forwardedOverrides = void 0;
24638
- }
24639
- }
24672
+ const _forwardedOverrides = this.props._forwardedOverrides;
24640
24673
  let children = React4.Children.map(this.props.children, (child) => {
24641
24674
  if (isConstraintSupportingChild(child,)) {
24642
24675
  return React4.cloneElement(child, {
@@ -24770,7 +24803,7 @@ var Frame = /* @__PURE__ */ (() => {
24770
24803
  FrameInner['displayName'] = 'Frame';
24771
24804
  return FrameInner;
24772
24805
  })();
24773
- var LayoutTree = class extends Component {
24806
+ var LayoutTree = /*#__PURE__*/ class extends Component {
24774
24807
  constructor() {
24775
24808
  super(...arguments,);
24776
24809
  __publicField(this, 'layoutMaybeMutated',);
@@ -25208,7 +25241,7 @@ var allAnimatableProperties = {
25208
25241
  originZ: 0,
25209
25242
  opacity: 1,
25210
25243
  };
25211
- var NavigatorMock = class {
25244
+ var NavigatorMock = /*#__PURE__*/ class {
25212
25245
  constructor() {
25213
25246
  __publicField(this, 'warning', () => {
25214
25247
  warnOnce2('The Navigator API is only available inside of Framer: https://www.framer.com/',);
@@ -26233,20 +26266,17 @@ function containerContent(item,) {
26233
26266
  function backdropTapAction(transition, goBackAction,) {
26234
26267
  if (transition.goBackOnTapOutside !== false) return goBackAction;
26235
26268
  }
26236
- function NavigationStyleSheet() {
26237
- React4.useInsertionEffect(() => {
26238
- injectComponentCSSRules();
26239
- }, [],);
26240
- return null;
26241
- }
26242
26269
  function NavigationWrapper(props,) {
26243
26270
  const resetProjection = useResetProjection();
26244
26271
  const skipLayoutAnimation = useInstantLayoutTransition();
26245
- return /* @__PURE__ */ jsxs(Navigation, {
26272
+ React4.useInsertionEffect(() => {
26273
+ injectComponentCSSRules();
26274
+ }, [],);
26275
+ return /* @__PURE__ */ jsx(Navigation, {
26246
26276
  ...props,
26247
26277
  resetProjection,
26248
26278
  skipLayoutAnimation,
26249
- children: [props.children, /* @__PURE__ */ jsx(NavigationStyleSheet, {},),],
26279
+ children: props.children,
26250
26280
  },);
26251
26281
  }
26252
26282
  var import_hoist_non_react_statics3 = __toESM(require_hoist_non_react_statics_cjs(), 1,);
@@ -26265,7 +26295,7 @@ var NavigationTransitionType = /* @__PURE__ */ ((NavigationTransitionType2) => {
26265
26295
  return NavigationTransitionType2;
26266
26296
  })(NavigationTransitionType || {},);
26267
26297
  function WithNavigator(BaseComponent, navigationTransition, navigationTransitionDirection, NavigationTarget, navigationTransitionOptions,) {
26268
- const InternalWithNavigator = class extends React4.Component {
26298
+ const InternalWithNavigator = /*#__PURE__*/ class extends React4.Component {
26269
26299
  render() {
26270
26300
  return /* @__PURE__ */ jsx(NavigationContext.Consumer, {
26271
26301
  children: (navigation) => {
@@ -26344,6 +26374,50 @@ function transitionDirectionToSide(direction,) {
26344
26374
  }
26345
26375
  var AnimateSharedLayout = (props) => props.children;
26346
26376
  var Draggable = /* @__PURE__ */ WithDragging(DeprecatedFrameWithEvents,);
26377
+ function useInfiniteScroll({
26378
+ ref: elementRef,
26379
+ loadMore,
26380
+ rootMargin = '0px',
26381
+ threshold,
26382
+ paginationInfo,
26383
+ },) {
26384
+ const callback = React4.useCallback((entries) => {
26385
+ const entry = entries[0];
26386
+ const isIntersecting = entry == null ? void 0 : entry.isIntersecting;
26387
+ if (isIntersecting) loadMore();
26388
+ }, [loadMore,],);
26389
+ React4.useEffect(() => {
26390
+ if (!elementRef.current) return;
26391
+ const observer2 = new IntersectionObserver(callback, {
26392
+ rootMargin,
26393
+ threshold,
26394
+ },);
26395
+ observer2.observe(elementRef.current,);
26396
+ return () => {
26397
+ observer2.disconnect();
26398
+ };
26399
+ }, [elementRef, callback, rootMargin, threshold, paginationInfo.currentPage,],);
26400
+ }
26401
+ function withInfiniteScroll(Component15,) {
26402
+ return React4.forwardRef(({
26403
+ __paginationInfo,
26404
+ __loadMore,
26405
+ ...props
26406
+ }, ref,) => {
26407
+ const backupRef = React4.useRef(null,);
26408
+ const infiniteScrollRef = ref ?? backupRef;
26409
+ useInfiniteScroll({
26410
+ rootMargin: '500px',
26411
+ loadMore: __loadMore,
26412
+ ref: infiniteScrollRef,
26413
+ paginationInfo: __paginationInfo,
26414
+ },);
26415
+ return /* @__PURE__ */ jsx(Component15, {
26416
+ ...props,
26417
+ ref: infiniteScrollRef,
26418
+ },);
26419
+ },);
26420
+ }
26347
26421
  var import_process2 = __toESM(require_browser(), 1,);
26348
26422
  function debounce(fn, time2,) {
26349
26423
  let timeout;
@@ -26535,7 +26609,7 @@ var Stack = /* @__PURE__ */ (() => {
26535
26609
  useFlexboxGap: externalUseFlexboxGap = true,
26536
26610
  children,
26537
26611
  style: styleProp,
26538
- className,
26612
+ className: className2,
26539
26613
  willChangeTransform,
26540
26614
  __fromCodeComponentNode,
26541
26615
  parentSize,
@@ -26623,7 +26697,7 @@ var Stack = /* @__PURE__ */ (() => {
26623
26697
  ref: useForwardedRef(forwardedRef, stackRef,),
26624
26698
  ...attributes,
26625
26699
  style,
26626
- className,
26700
+ className: className2,
26627
26701
  layoutScroll: true,
26628
26702
  children: /* @__PURE__ */ jsx(motion.div, {
26629
26703
  'data-framer-stack-content-wrapper': true,
@@ -27722,7 +27796,7 @@ function stateName(state,) {
27722
27796
  function containsBitmask(value, bitmask,) {
27723
27797
  return (value & bitmask) !== 0;
27724
27798
  }
27725
- var GestureRecognizer = class {
27799
+ var GestureRecognizer = /*#__PURE__*/ class {
27726
27800
  constructor() {
27727
27801
  __publicField(this, '_state', 2,/* Possible */
27728
27802
  );
@@ -27798,7 +27872,7 @@ var GestureRecognizer = class {
27798
27872
  }
27799
27873
  }
27800
27874
  };
27801
- var MouseWheelGestureRecognizer = class extends GestureRecognizer {
27875
+ var MouseWheelGestureRecognizer = /*#__PURE__*/ class extends GestureRecognizer {
27802
27876
  constructor() {
27803
27877
  super(...arguments,);
27804
27878
  __publicField(this, 'startEvent',);
@@ -27843,7 +27917,7 @@ var MouseWheelGestureRecognizer = class extends GestureRecognizer {
27843
27917
  this.onMouseWheelEnd(event,);
27844
27918
  }
27845
27919
  };
27846
- var PanGestureRecognizer = class extends GestureRecognizer {
27920
+ var PanGestureRecognizer = /*#__PURE__*/ class extends GestureRecognizer {
27847
27921
  constructor() {
27848
27922
  super(...arguments,);
27849
27923
  __publicField(this, 'startEvent',);
@@ -27918,7 +27992,7 @@ var PanGestureRecognizer = class extends GestureRecognizer {
27918
27992
  }
27919
27993
  }
27920
27994
  };
27921
- var TapGestureRecognizer = class extends GestureRecognizer {
27995
+ var TapGestureRecognizer = /*#__PURE__*/ class extends GestureRecognizer {
27922
27996
  constructor() {
27923
27997
  super(...arguments,);
27924
27998
  __publicField(this, 'eventType', 'tap',);
@@ -27948,7 +28022,7 @@ var TapGestureRecognizer = class extends GestureRecognizer {
27948
28022
  }
27949
28023
  }
27950
28024
  };
27951
- var FramerEventSession = class {
28025
+ var FramerEventSession = /*#__PURE__*/ class {
27952
28026
  constructor(dispatcher, customOrigin,) {
27953
28027
  __publicField(this, 'events', [],);
27954
28028
  __publicField(this, 'recognizers', [],);
@@ -28108,7 +28182,7 @@ var FramerEventSession = class {
28108
28182
  return subtract(event.devicePoint, this.startEvent.devicePoint,);
28109
28183
  }
28110
28184
  };
28111
- var MouseEventListener = class extends Component {
28185
+ var MouseEventListener = /*#__PURE__*/ class extends Component {
28112
28186
  constructor() {
28113
28187
  super(...arguments,);
28114
28188
  __publicField(this, 'domMouseDown', (originalEvent) => {
@@ -28160,7 +28234,7 @@ var MouseEventListener = class extends Component {
28160
28234
  safeWindow.removeEventListener('wheel', this.domMouseWheel,);
28161
28235
  }
28162
28236
  };
28163
- var TouchEventListener = class extends Component {
28237
+ var TouchEventListener = /*#__PURE__*/ class extends Component {
28164
28238
  constructor() {
28165
28239
  super(...arguments,);
28166
28240
  __publicField(this, 'domTouchStart', (originalEvent) => {
@@ -28916,7 +28990,7 @@ var NativeScroll = /* @__PURE__ */ React4.forwardRef(function NativeScroll2(prop
28916
28990
  children,
28917
28991
  resetOffset,
28918
28992
  onScroll,
28919
- className,
28993
+ className: className2,
28920
28994
  // Not (yet) supported
28921
28995
  directionLock: _directionLock = false,
28922
28996
  wheelEnabled: _wheelEnabled = true,
@@ -28987,7 +29061,7 @@ var NativeScroll = /* @__PURE__ */ React4.forwardRef(function NativeScroll2(prop
28987
29061
  layoutId,
28988
29062
  onBeforeLayoutMeasure: updateScrollOffsetHandler,
28989
29063
  layoutScroll: true,
28990
- className: cx(className, `direction-${direction}`, !scrollBarVisible && 'scrollbar-hidden',),
29064
+ className: cx(className2, `direction-${direction}`, !scrollBarVisible && 'scrollbar-hidden',),
28991
29065
  children: [
28992
29066
  /* @__PURE__ */ jsx(EmptyState, {
28993
29067
  children,
@@ -29207,7 +29281,7 @@ function useObserveData() {
29207
29281
  const context = React4.useContext(DataObserverContext,);
29208
29282
  return !isNaN(context.update,);
29209
29283
  }
29210
- var DataObserver = class extends Component {
29284
+ var DataObserver = /*#__PURE__*/ class extends Component {
29211
29285
  constructor() {
29212
29286
  super(...arguments,);
29213
29287
  __publicField(this, 'observers', [],);
@@ -29551,7 +29625,6 @@ function usePresenceAnimation(
29551
29625
  const [isPresent2, safeToRemove,] = usePresence();
29552
29626
  const lastPresence = useRef(false,);
29553
29627
  const effect = useConstant2(() => {
29554
- var _a;
29555
29628
  const base = initial ?? style;
29556
29629
  if (!isObject2(base,)) {
29557
29630
  return {
@@ -29560,7 +29633,7 @@ function usePresenceAnimation(
29560
29633
  }
29561
29634
  const defaults = {};
29562
29635
  for (const key7 in base) {
29563
- const value = isObject2(base,) ? (_a = asRecord(base,)) == null ? void 0 : _a[key7] : void 0;
29636
+ const value = isObject2(base,) ? base[key7] : void 0;
29564
29637
  if (!isNumber2(value,)) continue;
29565
29638
  defaults[key7] = value;
29566
29639
  }
@@ -29789,6 +29862,7 @@ function useStyleAppearEffect(options, ref,) {
29789
29862
  }
29790
29863
  return new Promise((resolve) => {
29791
29864
  if (shouldReduceMotion && key7 !== 'opacity') {
29865
+ if (isNumber2(toValue,)) effect.values[key7].set(toValue,);
29792
29866
  resolve();
29793
29867
  } else {
29794
29868
  const opts = {
@@ -30221,6 +30295,30 @@ function ComponentPresetsConsumer({
30221
30295
  const presetProps = componentPresets[componentIdentifier] ?? {};
30222
30296
  return children(presetProps,);
30223
30297
  }
30298
+ function setRef(ref, value,) {
30299
+ if (isFunction(ref,)) {
30300
+ ref(value,);
30301
+ } else if (isMutableRef(ref,)) {
30302
+ ref.current = value;
30303
+ }
30304
+ }
30305
+ function isMutableRef(ref,) {
30306
+ return isObject2(ref,) && 'current' in ref;
30307
+ }
30308
+ function createRefWithCallback(ref, callback,) {
30309
+ return {
30310
+ get current() {
30311
+ return ref.current;
30312
+ },
30313
+ set current(value,) {
30314
+ ref.current = value;
30315
+ callback(value,);
30316
+ },
30317
+ };
30318
+ }
30319
+ function mergeRefs(...refs) {
30320
+ return (value) => refs.forEach((ref) => setRef(ref, value,));
30321
+ }
30224
30322
  function useCloneChildrenWithPropsAndRef(forwardedRef,) {
30225
30323
  const hook = useConstant2(() => createHook(forwardedRef,));
30226
30324
  hook.useSetup(forwardedRef,);
@@ -30310,16 +30408,6 @@ function createRefFunction(state,) {
30310
30408
  setRef(prevForwardedRef, value,);
30311
30409
  };
30312
30410
  }
30313
- function setRef(ref, value,) {
30314
- if (isFunction(ref,)) {
30315
- ref(value,);
30316
- } else if (isMutableRef(ref,)) {
30317
- ref.current = value;
30318
- }
30319
- }
30320
- function isMutableRef(ref,) {
30321
- return isObject2(ref,) && 'current' in ref;
30322
- }
30323
30411
  var ComponentViewportContext = /* @__PURE__ */ React4.createContext({},);
30324
30412
  function useComponentViewport() {
30325
30413
  return React4.useContext(ComponentViewportContext,);
@@ -30351,7 +30439,7 @@ var withGeneratedLayoutId = (Component15) =>
30351
30439
  ref,
30352
30440
  },);
30353
30441
  },);
30354
- var ContainerErrorBoundary = class extends Component {
30442
+ var ContainerErrorBoundary = /*#__PURE__*/ class extends Component {
30355
30443
  constructor() {
30356
30444
  super(...arguments,);
30357
30445
  __publicField(this, 'state', {
@@ -30445,8 +30533,8 @@ var withCSS = (Component15, escapedCSS, componentSerializationId,) =>
30445
30533
  }
30446
30534
  React4.useInsertionEffect(() => {
30447
30535
  if (componentSerializationId && componentsWithServerRenderedStyles.has(componentSerializationId,)) return;
30448
- const css = Array.isArray(escapedCSS,) ? escapedCSS : escapedCSS.split('\n',);
30449
- css.forEach((rule) => rule && injectCSSRule(rule, sheet, cache2,));
30536
+ const css2 = Array.isArray(escapedCSS,) ? escapedCSS : escapedCSS.split('\n',);
30537
+ css2.forEach((rule) => rule && injectCSSRule(rule, sheet, cache2,));
30450
30538
  }, [],);
30451
30539
  return /* @__PURE__ */ jsx(Component15, {
30452
30540
  ...props,
@@ -31204,7 +31292,7 @@ function Floating({
31204
31292
  offsetX,
31205
31293
  offsetY,
31206
31294
  anchorRef,
31207
- className,
31295
+ className: className2,
31208
31296
  children,
31209
31297
  portalSelector,
31210
31298
  zIndex,
@@ -31282,7 +31370,7 @@ function Floating({
31282
31370
  return ReactDOM.createPortal(
31283
31371
  /* @__PURE__ */ jsxs('div', {
31284
31372
  ref: floatingPositionRef,
31285
- className,
31373
+ className: className2,
31286
31374
  style: {
31287
31375
  // Initially rendered as hidden, but the layout effect will set
31288
31376
  // to visible when the position is calculated.
@@ -31323,7 +31411,7 @@ function Floating({
31323
31411
  );
31324
31412
  }
31325
31413
  var GeneratedComponentContext = /* @__PURE__ */ React4.createContext(void 0,);
31326
- var LazyValue = class {
31414
+ var LazyValue = /*#__PURE__*/ class {
31327
31415
  constructor(resolver,) {
31328
31416
  this.resolver = resolver;
31329
31417
  __publicField(this, 'status',);
@@ -31469,6 +31557,92 @@ function navigateFromAttributes(navigate, element, implicitPathVariables,) {
31469
31557
  navigate(routeId, elementId, Object.assign({}, implicitPathVariables, pathVariables,), smoothScroll,);
31470
31558
  return true;
31471
31559
  }
31560
+ var PRELOAD_AFTER_MS = 500;
31561
+ var OBSERVER_THRESHOLD = 0.9;
31562
+ var LOW_MEMORY_THRESHOLD = 1.7;
31563
+ var MAX_CONCURRENT_PRELOADS_SLOW_NETWORK = 4;
31564
+ var MAX_CONCURRENT_PRELOADS_FAST_NETWORK = Infinity;
31565
+ var nodeToRoute = /* @__PURE__ */ new WeakMap();
31566
+ var preloadedRoutes = /* @__PURE__ */ new Set();
31567
+ var routeToNodesInViewport = /* @__PURE__ */ new Map();
31568
+ function getObserveRouteForPreloadingFn() {
31569
+ var _a;
31570
+ const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {};
31571
+ const lowDeviceMemory = navigator.deviceMemory && navigator.deviceMemory > LOW_MEMORY_THRESHOLD;
31572
+ let effectiveType, preloadDisabled, maxPreloadAmount;
31573
+ function updateConnection() {
31574
+ effectiveType = connection.effectiveType || '';
31575
+ preloadDisabled = connection.saveData || effectiveType.includes('2g',);
31576
+ maxPreloadAmount = effectiveType === '3g' || lowDeviceMemory
31577
+ ? MAX_CONCURRENT_PRELOADS_SLOW_NETWORK
31578
+ : MAX_CONCURRENT_PRELOADS_FAST_NETWORK;
31579
+ }
31580
+ (_a = connection.addEventListener) == null ? void 0 : _a.call(connection, 'change', updateConnection,);
31581
+ updateConnection();
31582
+ const observer2 = new IntersectionObserver(onPreloadIntersectionChange, {
31583
+ threshold: OBSERVER_THRESHOLD,
31584
+ },);
31585
+ let activePreloadsAmount = 0;
31586
+ async function preloadTimeout(route, target,) {
31587
+ if (preloadDisabled) return;
31588
+ const nodesInViewport = routeToNodesInViewport.get(route,);
31589
+ if (!(nodesInViewport == null ? void 0 : nodesInViewport.size) || preloadedRoutes.has(route,)) return;
31590
+ ++activePreloadsAmount;
31591
+ preloadedRoutes.add(route,);
31592
+ const preloadDone = preloadRoute(route,).catch(() => {
31593
+ if (false) {
31594
+ throw new Error(
31595
+ 'Error in preloadRoute during preloadTimeout. This should never happen as it introduces bugs. Please make sure preloadRoute does not throw.',
31596
+ );
31597
+ }
31598
+ },);
31599
+ observer2.unobserve(target,);
31600
+ nodeToRoute.delete(target,);
31601
+ for (const node of nodesInViewport) {
31602
+ observer2.unobserve(node,);
31603
+ nodeToRoute.delete(node,);
31604
+ }
31605
+ nodesInViewport.clear();
31606
+ routeToNodesInViewport.delete(route,);
31607
+ await preloadDone;
31608
+ --activePreloadsAmount;
31609
+ }
31610
+ function onPreloadIntersectionChange(entries,) {
31611
+ var _a2;
31612
+ for (const entry of entries) {
31613
+ const target = entry.target;
31614
+ const route = nodeToRoute.get(target,);
31615
+ if (!route || preloadedRoutes.has(route,)) {
31616
+ observer2.unobserve(target,);
31617
+ nodeToRoute.delete(target,);
31618
+ continue;
31619
+ }
31620
+ const nodes = routeToNodesInViewport.get(route,);
31621
+ const amountOfNodesInViewport = ((_a2 = routeToNodesInViewport.get(route,)) == null ? void 0 : _a2.size) ?? 0;
31622
+ if (entry.isIntersecting) {
31623
+ if (activePreloadsAmount >= maxPreloadAmount) continue;
31624
+ if (nodes) nodes.add(target,);
31625
+ else routeToNodesInViewport.set(route, /* @__PURE__ */ new Set([target,],),);
31626
+ setTimeout(preloadTimeout.bind(void 0, route, target,), PRELOAD_AFTER_MS,);
31627
+ } else {
31628
+ if (nodes) nodes.delete(target,);
31629
+ if (amountOfNodesInViewport <= 1) routeToNodesInViewport.delete(route,);
31630
+ }
31631
+ }
31632
+ }
31633
+ return (route, node,) => {
31634
+ if (preloadedRoutes.has(route,)) return;
31635
+ nodeToRoute.set(node, route,);
31636
+ observer2.observe(node,);
31637
+ return () => {
31638
+ nodeToRoute.delete(node,);
31639
+ observer2.unobserve(node,);
31640
+ };
31641
+ };
31642
+ }
31643
+ var observeRouteForPreloading =
31644
+ // this also guards `window`
31645
+ !shouldPreloadBasedOnUA || typeof IntersectionObserver === 'undefined' ? null : /* @__PURE__ */ getObserveRouteForPreloadingFn();
31472
31646
  var noLocale = {};
31473
31647
  var resolveSlugCache = /* @__PURE__ */ new WeakMap();
31474
31648
  function resolveSlug(unresolvedSlug, utilsByCollectionId, activeLocale,) {
@@ -31530,10 +31704,10 @@ function linkFromFramerPageLink(link,) {
31530
31704
  };
31531
31705
  }
31532
31706
  var pathVariablesRegExp2 = /:([a-z]\w*)/gi;
31533
- var PathVariablesContext = /* @__PURE__ */ React4.createContext(void 0,);
31707
+ var PathVariablesContext = /* @__PURE__ */ createContext(void 0,);
31534
31708
  function useImplicitPathVariables() {
31535
31709
  var _a;
31536
- const contextPathVariables = React4.useContext(PathVariablesContext,);
31710
+ const contextPathVariables = useContext3(PathVariablesContext,);
31537
31711
  const currentPathVariables = (_a = useCurrentRoute()) == null ? void 0 : _a.pathVariables;
31538
31712
  const pathVariables = contextPathVariables || currentPathVariables;
31539
31713
  return pathVariables;
@@ -31558,7 +31732,7 @@ function linkMatchesRoute(route, {
31558
31732
  }
31559
31733
  function useLinkMatchesRoute(link,) {
31560
31734
  const route = useCurrentRoute();
31561
- const contextPathVariables = React4.useContext(PathVariablesContext,);
31735
+ const contextPathVariables = useContext3(PathVariablesContext,);
31562
31736
  if (!route) return false;
31563
31737
  const pageLink = isString22(link,) ? linkFromFramerPageLink(link,) : link;
31564
31738
  return isLinkToWebPage(pageLink,) ? linkMatchesRoute(route, pageLink, contextPathVariables,) : false;
@@ -31609,43 +31783,6 @@ function createOnClickLinkHandler(router, routeId, elementId, combinedPathVariab
31609
31783
  (_b = router.navigate) == null ? void 0 : _b.call(router, routeId, elementId, combinedPathVariables, smoothScroll,);
31610
31784
  };
31611
31785
  }
31612
- function propsForRoutePath(href, openInNewTab, router, currentRoute, implicitPathVariables, smoothScroll,) {
31613
- const isInternal = isInternalURL(href,);
31614
- if (!router.routes || !router.getRoute || !currentRoute || !isInternal) {
31615
- return propsForLink(href, openInNewTab,);
31616
- }
31617
- try {
31618
- const [pathnameWithQueryParams, hash2,] = href.split('#', 2,);
31619
- assert(pathnameWithQueryParams !== void 0, 'A href must have a defined pathname.',);
31620
- const [pathname,] = pathnameWithQueryParams.split('?', 2,);
31621
- assert(pathname !== void 0, 'A href must have a defined pathname.',);
31622
- const {
31623
- routeId,
31624
- pathVariables,
31625
- } = inferInitialRouteFromPath(router.routes, pathname,);
31626
- const route = router.getRoute(routeId,);
31627
- if (route) {
31628
- preloadComponent(route.page,);
31629
- const combinedPathVariables = Object.assign({}, implicitPathVariables, pathVariables,);
31630
- const path = getPathForRoute(route, {
31631
- currentRoutePath: currentRoute.path,
31632
- currentPathVariables: currentRoute.pathVariables,
31633
- // The hash value is already fully resolved so we don't need to
31634
- // provide any hashVariables.
31635
- hash: hash2 || void 0,
31636
- pathVariables: combinedPathVariables,
31637
- preserveQueryParams: router.preserveQueryParams,
31638
- },);
31639
- const anchorTarget = getTargetAttrValue(openInNewTab, true,);
31640
- return {
31641
- href: path,
31642
- target: anchorTarget,
31643
- onClick: createOnClickLinkHandler(router, routeId, hash2 || void 0, combinedPathVariables, smoothScroll,),
31644
- };
31645
- }
31646
- } catch {}
31647
- return propsForLink(href, openInNewTab,);
31648
- }
31649
31786
  async function resolveSlugs(unresolvedPathSlugs, unresolvedHashSlugs, collectionUtils, activeLocale,) {
31650
31787
  async function handleSlugs(unresolvedSlugs,) {
31651
31788
  if (!unresolvedSlugs || !collectionUtils) return {};
@@ -31698,7 +31835,64 @@ function resolveSlugsWithSuspense(unresolvedPathSlugs, unresolvedHashSlugs, coll
31698
31835
  }
31699
31836
  return result;
31700
31837
  }
31701
- var Link = /* @__PURE__ */ React4.forwardRef(({
31838
+ function propsForRoutePath(href, openInNewTab, router, currentRoute, implicitPathVariables, smoothScroll,) {
31839
+ const isInternal = isInternalURL(href,);
31840
+ if (!router.routes || !router.getRoute || !currentRoute || !isInternal) {
31841
+ return propsForLink(href, openInNewTab,);
31842
+ }
31843
+ try {
31844
+ const [pathnameWithQueryParams, hash2,] = href.split('#', 2,);
31845
+ assert(pathnameWithQueryParams !== void 0, 'A href must have a defined pathname.',);
31846
+ const [pathname,] = pathnameWithQueryParams.split('?', 2,);
31847
+ assert(pathname !== void 0, 'A href must have a defined pathname.',);
31848
+ const {
31849
+ routeId,
31850
+ pathVariables,
31851
+ } = inferInitialRouteFromPath(router.routes, pathname,);
31852
+ const route = router.getRoute(routeId,);
31853
+ if (route) {
31854
+ const combinedPathVariables = Object.assign({}, implicitPathVariables, pathVariables,);
31855
+ const path = getPathForRoute(route, {
31856
+ currentRoutePath: currentRoute.path,
31857
+ currentPathVariables: currentRoute.pathVariables,
31858
+ // The hash value is already fully resolved so we don't need to
31859
+ // provide any hashVariables.
31860
+ hash: hash2 || void 0,
31861
+ pathVariables: combinedPathVariables,
31862
+ preserveQueryParams: router.preserveQueryParams,
31863
+ },);
31864
+ const anchorTarget = getTargetAttrValue(openInNewTab, true,);
31865
+ return {
31866
+ href: path,
31867
+ target: anchorTarget,
31868
+ onClick: createOnClickLinkHandler(router, routeId, hash2 || void 0, combinedPathVariables, smoothScroll,),
31869
+ };
31870
+ }
31871
+ } catch {}
31872
+ return propsForLink(href, openInNewTab,);
31873
+ }
31874
+ function getRouteFromPageLink(pageLink, router, currentRoute,) {
31875
+ var _a;
31876
+ if (isString22(pageLink,)) {
31877
+ const isInternal = isInternalURL(pageLink,);
31878
+ if (!router.routes || !router.getRoute || !currentRoute || !isInternal) {
31879
+ return;
31880
+ }
31881
+ const [pathnameWithQueryParams,] = pageLink.split('#', 2,);
31882
+ if (pathnameWithQueryParams === void 0) return;
31883
+ const [pathname,] = pathnameWithQueryParams.split('?', 2,);
31884
+ if (pathname === void 0) return;
31885
+ const {
31886
+ routeId,
31887
+ } = inferInitialRouteFromPath(router.routes, pathname,);
31888
+ return router.getRoute(routeId,);
31889
+ }
31890
+ const {
31891
+ webPageId,
31892
+ } = pageLink;
31893
+ return (_a = router.getRoute) == null ? void 0 : _a.call(router, webPageId,);
31894
+ }
31895
+ var Link = /* @__PURE__ */ forwardRef(({
31702
31896
  children,
31703
31897
  href,
31704
31898
  openInNewTab,
@@ -31711,8 +31905,29 @@ var Link = /* @__PURE__ */ React4.forwardRef(({
31711
31905
  const {
31712
31906
  activeLocale,
31713
31907
  } = useLocaleInfo();
31908
+ const fallbackRef = useRef(null,);
31909
+ const stableObserverChildRef = useMemo(() => {
31910
+ let cleanupFn;
31911
+ const observerCallback = (node) => {
31912
+ var _a;
31913
+ if (node === null) {
31914
+ cleanupFn == null ? void 0 : cleanupFn();
31915
+ cleanupFn = void 0;
31916
+ return;
31917
+ }
31918
+ const pageLink = isLinkToWebPage(href,) ? href : linkFromFramerPageLink(href,);
31919
+ if (!pageLink) return;
31920
+ const route = getRouteFromPageLink(pageLink, router, currentRoute,);
31921
+ if (!route) return;
31922
+ cleanupFn = (_a = observeRouteForPreloading) == null ? void 0 : _a(route, node,);
31923
+ };
31924
+ const hasRef = isValidElement(children,) && 'ref' in children;
31925
+ if (hasRef && isMutableRef(children.ref,)) return createRefWithCallback(children.ref, observerCallback,);
31926
+ if (hasRef && isFunction(children.ref,)) return mergeRefs(children.ref, observerCallback,);
31927
+ return createRefWithCallback(fallbackRef, observerCallback,);
31928
+ }, [href, router, currentRoute, children,],);
31714
31929
  const clone = useCloneChildrenWithPropsAndRef(forwardedRef,);
31715
- const props = React4.useMemo(() => {
31930
+ const props = useMemo(() => {
31716
31931
  var _a;
31717
31932
  if (!href) return {};
31718
31933
  const pageLink = isLinkToWebPage(href,) ? href : linkFromFramerPageLink(href,);
@@ -31728,22 +31943,19 @@ var Link = /* @__PURE__ */ React4.forwardRef(({
31728
31943
  unresolvedHashSlugs,
31729
31944
  unresolvedPathSlugs,
31730
31945
  } = pageLink;
31731
- const route = (_a = router.getRoute) == null ? void 0 : _a.call(router, webPageId,);
31732
31946
  const resolvedSlugs = resolveSlugsWithSuspense(unresolvedPathSlugs, unresolvedHashSlugs, router.collectionUtils, activeLocale,);
31733
- if (route) preloadComponent(route.page,);
31734
- const combinedPathVariable = Object.assign(
31735
- {},
31736
- implicitPathVariables,
31737
- pathVariables,
31738
- resolvedSlugs == null ? void 0 : resolvedSlugs.path,
31739
- );
31740
- const combinedHashVariable = Object.assign(
31741
- {},
31742
- implicitPathVariables,
31743
- hashVariables,
31744
- resolvedSlugs == null ? void 0 : resolvedSlugs.hash,
31745
- );
31947
+ const combinedPathVariable = {
31948
+ ...implicitPathVariables,
31949
+ ...pathVariables,
31950
+ ...(resolvedSlugs == null ? void 0 : resolvedSlugs.path),
31951
+ };
31952
+ const combinedHashVariable = {
31953
+ ...implicitPathVariables,
31954
+ ...hashVariables,
31955
+ ...(resolvedSlugs == null ? void 0 : resolvedSlugs.hash),
31956
+ };
31746
31957
  const anchorTarget = getTargetAttrValue(openInNewTab, true,);
31958
+ const route = (_a = router.getRoute) == null ? void 0 : _a.call(router, webPageId,);
31747
31959
  const resolvedHref = getPathForRoute(route, {
31748
31960
  currentRoutePath: currentRoute == null ? void 0 : currentRoute.path,
31749
31961
  currentPathVariables: currentRoute == null ? void 0 : currentRoute.pathVariables,
@@ -31763,6 +31975,7 @@ var Link = /* @__PURE__ */ React4.forwardRef(({
31763
31975
  return clone(children, {
31764
31976
  ...restProps,
31765
31977
  ...props,
31978
+ ref: stableObserverChildRef,
31766
31979
  },);
31767
31980
  },);
31768
31981
  function resolveLink(href, router, implicitPathVariables,) {
@@ -31823,10 +32036,248 @@ function resolvePageScope(pageLink, router,) {
31823
32036
  preserveQueryParams: false,
31824
32037
  },);
31825
32038
  }
32039
+ var salt = 'framer';
32040
+ var difficulty = 3;
32041
+ var tokenLength = 30;
32042
+ var maxTime = 3e3;
32043
+ async function calculateProofOfWork() {
32044
+ const target = '0'.repeat(difficulty,);
32045
+ const startTime = Date.now();
32046
+ let processing = true;
32047
+ while (processing) {
32048
+ const timestamp = Date.now();
32049
+ if (timestamp - startTime > maxTime) {
32050
+ processing = false;
32051
+ return;
32052
+ }
32053
+ const nonce = randomCharacters(tokenLength,);
32054
+ const secret = `${timestamp}:${nonce}`;
32055
+ const hash2 = await sha256(salt + secret,);
32056
+ if (hash2.startsWith(target,)) {
32057
+ return {
32058
+ secret,
32059
+ hash: hash2,
32060
+ };
32061
+ }
32062
+ }
32063
+ return;
32064
+ }
32065
+ async function sha256(text,) {
32066
+ const buffer = new TextEncoder().encode(text,);
32067
+ const hashBuffer = await crypto.subtle.digest('SHA-256', buffer,);
32068
+ return Array.from(new Uint8Array(hashBuffer,),).map((b) => b.toString(16,).padStart(2, '0',)).join('',);
32069
+ }
32070
+ function randomCharacters(count,) {
32071
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
32072
+ let result = '';
32073
+ const charactersLength = characters.length;
32074
+ for (let i = 0; i < count; i++) {
32075
+ result += characters.charAt(Math.floor(Math.random() * charactersLength,),);
32076
+ }
32077
+ return result;
32078
+ }
32079
+ function getEncodedFormFieldsHeader(data2,) {
32080
+ return Array.from(data2.keys(),).map(encodeURIComponent,).join(',',);
32081
+ }
32082
+ function formReducer({
32083
+ state,
32084
+ }, {
32085
+ type,
32086
+ },) {
32087
+ switch (type) {
32088
+ case 'complete':
32089
+ case 'incomplete':
32090
+ if (state === 'error') {
32091
+ return {
32092
+ state: 'error',
32093
+ };
32094
+ }
32095
+ return {
32096
+ state: type,
32097
+ };
32098
+ case 'submit':
32099
+ return {
32100
+ state: 'pending',
32101
+ };
32102
+ case 'success':
32103
+ return {
32104
+ state: 'success',
32105
+ };
32106
+ case 'error':
32107
+ return {
32108
+ state: 'error',
32109
+ };
32110
+ default:
32111
+ assertNever(type,);
32112
+ }
32113
+ }
32114
+ function stateCanSubmitForm(state,) {
32115
+ return state.state === 'incomplete' || state.state === 'complete';
32116
+ }
32117
+ function preventDefault(e,) {
32118
+ e.preventDefault();
32119
+ }
32120
+ var FormContext = React4.createContext(void 0,);
32121
+ var FormContainer = /* @__PURE__ */ React4.forwardRef(({
32122
+ action,
32123
+ children,
32124
+ redirectUrl,
32125
+ onSuccess,
32126
+ onError,
32127
+ onLoading,
32128
+ ...props
32129
+ }, ref,) => {
32130
+ const router = useRouter();
32131
+ const [state, dispatch,] = React4.useReducer(formReducer, {
32132
+ state: 'incomplete',
32133
+ },);
32134
+ const {
32135
+ activeLocale,
32136
+ } = useLocaleInfo();
32137
+ const projectHash = useContext3(FormContext,);
32138
+ const callbacks = React4.useRef({
32139
+ onSuccess,
32140
+ onError,
32141
+ onLoading,
32142
+ },);
32143
+ callbacks.current = {
32144
+ onSuccess,
32145
+ onError,
32146
+ onLoading,
32147
+ };
32148
+ async function redirectTo(link,) {
32149
+ var _a, _b;
32150
+ if (isLinkToWebPage(link,)) {
32151
+ if (!router) return;
32152
+ const route = (_a = router.getRoute) == null ? void 0 : _a.call(router, link.webPageId,);
32153
+ if (!route) return;
32154
+ const {
32155
+ unresolvedHashSlugs,
32156
+ unresolvedPathSlugs,
32157
+ } = link;
32158
+ const resolvedSlugs = await resolveSlugs(unresolvedPathSlugs, unresolvedHashSlugs, router.collectionUtils, activeLocale,);
32159
+ const combinedPathVariables = Object.assign(
32160
+ {},
32161
+ router.currentPathVariables,
32162
+ link.pathVariables,
32163
+ resolvedSlugs == null ? void 0 : resolvedSlugs.path,
32164
+ );
32165
+ const combinedHashVariables = Object.assign(
32166
+ {},
32167
+ router.currentPathVariables,
32168
+ link.pathVariables,
32169
+ link.hashVariables,
32170
+ resolvedSlugs == null ? void 0 : resolvedSlugs.hash,
32171
+ );
32172
+ const element = getHashForRoute(link.hash, route, combinedHashVariables,);
32173
+ (_b = router.navigate) == null ? void 0 : _b.call(router, link.webPageId, element, combinedPathVariables,);
32174
+ return;
32175
+ }
32176
+ if (!safeWindow) return;
32177
+ safeWindow.open(link, '_blank',);
32178
+ }
32179
+ const handleSubmit = async (event) => {
32180
+ var _a, _b, _c, _d, _e, _f;
32181
+ event.preventDefault();
32182
+ if (!action || !projectHash) return;
32183
+ const data2 = new FormData(event.currentTarget,);
32184
+ for (const [key7, value,] of data2) {
32185
+ if (value instanceof File) data2.delete(key7,);
32186
+ }
32187
+ try {
32188
+ dispatch({
32189
+ type: 'submit',
32190
+ },);
32191
+ (_b = (_a = callbacks.current).onLoading) == null ? void 0 : _b.call(_a,);
32192
+ await submitForm(action, data2, projectHash,);
32193
+ dispatch({
32194
+ type: 'success',
32195
+ },);
32196
+ (_d = (_c = callbacks.current).onSuccess) == null ? void 0 : _d.call(_c,);
32197
+ if (redirectUrl) {
32198
+ await redirectTo(redirectUrl,);
32199
+ }
32200
+ } catch (error) {
32201
+ dispatch({
32202
+ type: 'error',
32203
+ },);
32204
+ (_f = (_e = callbacks.current).onError) == null ? void 0 : _f.call(_e,);
32205
+ console.error(error,);
32206
+ }
32207
+ };
32208
+ const handleKeyDown = (event) => {
32209
+ const {
32210
+ target: input,
32211
+ currentTarget: form,
32212
+ key: key7,
32213
+ } = event;
32214
+ const isTextArea = input instanceof HTMLTextAreaElement;
32215
+ if (isTextArea) return;
32216
+ if (key7 === 'Enter' && form.checkValidity()) {
32217
+ event.preventDefault();
32218
+ void handleSubmit(event,);
32219
+ }
32220
+ };
32221
+ const checkValidity = (e) => {
32222
+ dispatch({
32223
+ type: anyEmptyRequiredFields(e.currentTarget,) ? 'incomplete' : 'complete',
32224
+ },);
32225
+ };
32226
+ return /* @__PURE__ */ jsx(motion.form, {
32227
+ ...props,
32228
+ onSubmit: stateCanSubmitForm(state,) ? handleSubmit : preventDefault,
32229
+ onKeyDown: handleKeyDown,
32230
+ onChange: checkValidity,
32231
+ ref,
32232
+ children: children(state,),
32233
+ },);
32234
+ },);
32235
+ function anyEmptyRequiredFields(element,) {
32236
+ if (element.children.length === 0) return false;
32237
+ for (const child of element.children) {
32238
+ if (child instanceof HTMLInputElement || child instanceof HTMLTextAreaElement || child instanceof HTMLSelectElement) {
32239
+ if (child.required && child.value === '') return true;
32240
+ } else {
32241
+ const result = anyEmptyRequiredFields(child,);
32242
+ if (result) return true;
32243
+ }
32244
+ }
32245
+ return false;
32246
+ }
32247
+ async function submitForm(action, data2, projectHash,) {
32248
+ const proofOfWork = await calculateProofOfWork();
32249
+ if (!proofOfWork) {
32250
+ throw new Error('Failed to calculate proof of work',);
32251
+ }
32252
+ const response = await fetch(action, {
32253
+ body: data2,
32254
+ method: 'POST',
32255
+ headers: {
32256
+ 'Framer-Site-Id': projectHash,
32257
+ 'Framer-POW': proofOfWork.secret,
32258
+ 'Framer-Form-Fields': getEncodedFormFieldsHeader(data2,),
32259
+ },
32260
+ },);
32261
+ if (response.ok) {
32262
+ return response;
32263
+ } else {
32264
+ const body = await response.json();
32265
+ const error = 'Failed to submit form';
32266
+ if (responseHasError(body,)) {
32267
+ throw new Error(`${error} - ${body.error.message}`,);
32268
+ }
32269
+ throw new Error(error,);
32270
+ }
32271
+ }
32272
+ function responseHasError(response,) {
32273
+ return typeof response === 'object' && response !== null && 'error' in response && isObject2(response.error,) &&
32274
+ 'message' in response.error && typeof response.error.message === 'string';
32275
+ }
31826
32276
  function PageRoot({
31827
32277
  RootComponent,
31828
32278
  isWebsite,
31829
32279
  routeId,
32280
+ framerSiteId,
31830
32281
  pathVariables,
31831
32282
  routes,
31832
32283
  collectionUtils,
@@ -31837,7 +32288,7 @@ function PageRoot({
31837
32288
  locales,
31838
32289
  preserveQueryParams,
31839
32290
  enableImproveInpDuringHydration,
31840
- shouldMarkHydrationEnd = false,
32291
+ addHydrationMarkers = false,
31841
32292
  },) {
31842
32293
  React4.useEffect(() => {
31843
32294
  if (isWebsite) return;
@@ -31847,21 +32298,24 @@ function PageRoot({
31847
32298
  return /* @__PURE__ */ jsx(MotionConfig, {
31848
32299
  reducedMotion: isReducedMotion ? 'user' : 'never',
31849
32300
  children: /* @__PURE__ */ jsx(CustomCursorHost, {
31850
- children: /* @__PURE__ */ jsx(Router, {
31851
- initialRoute: routeId,
31852
- initialPathVariables: pathVariables,
31853
- initialLocaleId: localeId,
31854
- routes,
31855
- collectionUtils,
31856
- notFoundPage,
31857
- locales,
31858
- defaultPageStyle: {
31859
- minHeight: '100vh',
31860
- width: 'auto',
31861
- },
31862
- preserveQueryParams,
31863
- enableImproveInpDuringHydration,
31864
- shouldMarkHydrationEnd,
32301
+ children: /* @__PURE__ */ jsx(FormContext.Provider, {
32302
+ value: framerSiteId,
32303
+ children: /* @__PURE__ */ jsx(Router, {
32304
+ initialRoute: routeId,
32305
+ initialPathVariables: pathVariables,
32306
+ initialLocaleId: localeId,
32307
+ routes,
32308
+ collectionUtils,
32309
+ notFoundPage,
32310
+ locales,
32311
+ defaultPageStyle: {
32312
+ minHeight: '100vh',
32313
+ width: 'auto',
32314
+ },
32315
+ preserveQueryParams,
32316
+ enableImproveInpDuringHydration,
32317
+ addHydrationMarkers,
32318
+ },),
31865
32319
  },),
31866
32320
  },),
31867
32321
  },);
@@ -32191,7 +32645,7 @@ async function getCollection(collection, locale,) {
32191
32645
  }
32192
32646
  return collection;
32193
32647
  }
32194
- var CompatibilityDatabaseCollection = class {
32648
+ var CompatibilityDatabaseCollection = /*#__PURE__*/ class {
32195
32649
  constructor(collection, locale,) {
32196
32650
  this.collection = collection;
32197
32651
  this.locale = locale;
@@ -32426,12 +32880,12 @@ function compare(left, right, collation,) {
32426
32880
  }
32427
32881
  }
32428
32882
  var INDEX_IDENTIFIER = 'index';
32429
- var ScalarExpression = class {
32883
+ var ScalarExpression = /*#__PURE__*/ class {
32430
32884
  static from(expression, schema,) {
32431
32885
  return convertExpression(expression, schema, void 0,);
32432
32886
  }
32433
32887
  };
32434
- var ScalarIdentifier = class extends ScalarExpression {
32888
+ var ScalarIdentifier = /*#__PURE__*/ class extends ScalarExpression {
32435
32889
  constructor(schema, name,) {
32436
32890
  super();
32437
32891
  this.schema = schema;
@@ -32463,7 +32917,7 @@ var ScalarIdentifier = class extends ScalarExpression {
32463
32917
  return false;
32464
32918
  }
32465
32919
  };
32466
- var ScalarLiteralValue = class extends ScalarExpression {
32920
+ var ScalarLiteralValue = /*#__PURE__*/ class extends ScalarExpression {
32467
32921
  constructor(definition, value,) {
32468
32922
  super();
32469
32923
  this.definition = definition;
@@ -32545,7 +32999,7 @@ var ScalarLiteralValue = class extends ScalarExpression {
32545
32999
  return true;
32546
33000
  }
32547
33001
  };
32548
- var ScalarFunctionCall = class extends ScalarExpression {
33002
+ var ScalarFunctionCall = /*#__PURE__*/ class extends ScalarExpression {
32549
33003
  constructor(argumentExpressions,) {
32550
33004
  super();
32551
33005
  this.argumentExpressions = argumentExpressions;
@@ -32571,7 +33025,7 @@ var ScalarFunctionCall = class extends ScalarExpression {
32571
33025
  },);
32572
33026
  }
32573
33027
  };
32574
- var ScalarFunctionCallContains = class extends ScalarFunctionCall {
33028
+ var ScalarFunctionCallContains = /*#__PURE__*/ class extends ScalarFunctionCall {
32575
33029
  constructor() {
32576
33030
  super(...arguments,);
32577
33031
  __publicField(this, 'definition', ScalarFunctionCallContains.getDefinition(),);
@@ -32607,7 +33061,7 @@ var ScalarFunctionCallContains = class extends ScalarFunctionCall {
32607
33061
  };
32608
33062
  }
32609
33063
  };
32610
- var ScalarFunctionCallStartsWith = class extends ScalarFunctionCall {
33064
+ var ScalarFunctionCallStartsWith = /*#__PURE__*/ class extends ScalarFunctionCall {
32611
33065
  constructor() {
32612
33066
  super(...arguments,);
32613
33067
  __publicField(this, 'definition', ScalarFunctionCallStartsWith.getDefinition(),);
@@ -32643,7 +33097,7 @@ var ScalarFunctionCallStartsWith = class extends ScalarFunctionCall {
32643
33097
  };
32644
33098
  }
32645
33099
  };
32646
- var ScalarFunctionCallEndsWith = class extends ScalarFunctionCall {
33100
+ var ScalarFunctionCallEndsWith = /*#__PURE__*/ class extends ScalarFunctionCall {
32647
33101
  constructor() {
32648
33102
  super(...arguments,);
32649
33103
  __publicField(this, 'definition', ScalarFunctionCallEndsWith.getDefinition(),);
@@ -32679,7 +33133,7 @@ var ScalarFunctionCallEndsWith = class extends ScalarFunctionCall {
32679
33133
  };
32680
33134
  }
32681
33135
  };
32682
- var ScalarCase = class extends ScalarExpression {
33136
+ var ScalarCase = /*#__PURE__*/ class extends ScalarExpression {
32683
33137
  constructor(valueExpression, conditions, elseExpression,) {
32684
33138
  super();
32685
33139
  this.valueExpression = valueExpression;
@@ -32775,13 +33229,13 @@ var ScalarCase = class extends ScalarExpression {
32775
33229
  },);
32776
33230
  }
32777
33231
  };
32778
- var ScalarCaseCondition = class {
33232
+ var ScalarCaseCondition = /*#__PURE__*/ class {
32779
33233
  constructor(whenExpression, thenExpression,) {
32780
33234
  this.whenExpression = whenExpression;
32781
33235
  this.thenExpression = thenExpression;
32782
33236
  }
32783
33237
  };
32784
- var ScalarUnaryOperation = class extends ScalarExpression {
33238
+ var ScalarUnaryOperation = /*#__PURE__*/ class extends ScalarExpression {
32785
33239
  constructor(valueExpression,) {
32786
33240
  super();
32787
33241
  this.valueExpression = valueExpression;
@@ -32794,7 +33248,7 @@ var ScalarUnaryOperation = class extends ScalarExpression {
32794
33248
  return this.valueExpression.canEvaluate();
32795
33249
  }
32796
33250
  };
32797
- var ScalarUnaryOperationNot = class extends ScalarUnaryOperation {
33251
+ var ScalarUnaryOperationNot = /*#__PURE__*/ class extends ScalarUnaryOperation {
32798
33252
  constructor() {
32799
33253
  super(...arguments,);
32800
33254
  __publicField(this, 'definition', ScalarUnaryOperationNot.getDefinition(),);
@@ -32816,7 +33270,7 @@ var ScalarUnaryOperationNot = class extends ScalarUnaryOperation {
32816
33270
  };
32817
33271
  }
32818
33272
  };
32819
- var ScalarLogicalOperation = class extends ScalarExpression {
33273
+ var ScalarLogicalOperation = /*#__PURE__*/ class extends ScalarExpression {
32820
33274
  constructor(operandExpressions,) {
32821
33275
  super();
32822
33276
  this.operandExpressions = operandExpressions;
@@ -32841,7 +33295,7 @@ var ScalarLogicalOperation = class extends ScalarExpression {
32841
33295
  },);
32842
33296
  }
32843
33297
  };
32844
- var ScalarLogicalOperationAnd = class extends ScalarLogicalOperation {
33298
+ var ScalarLogicalOperationAnd = /*#__PURE__*/ class extends ScalarLogicalOperation {
32845
33299
  constructor() {
32846
33300
  super(...arguments,);
32847
33301
  __publicField(this, 'operator', 'AND',);
@@ -32857,7 +33311,7 @@ var ScalarLogicalOperationAnd = class extends ScalarLogicalOperation {
32857
33311
  };
32858
33312
  }
32859
33313
  };
32860
- var ScalarLogicalOperationOr = class extends ScalarLogicalOperation {
33314
+ var ScalarLogicalOperationOr = /*#__PURE__*/ class extends ScalarLogicalOperation {
32861
33315
  constructor() {
32862
33316
  super(...arguments,);
32863
33317
  __publicField(this, 'operator', 'OR',);
@@ -32873,7 +33327,7 @@ var ScalarLogicalOperationOr = class extends ScalarLogicalOperation {
32873
33327
  };
32874
33328
  }
32875
33329
  };
32876
- var ScalarComparison = class extends ScalarExpression {
33330
+ var ScalarComparison = /*#__PURE__*/ class extends ScalarExpression {
32877
33331
  constructor(leftExpression, rightExpression,) {
32878
33332
  super();
32879
33333
  this.leftExpression = leftExpression;
@@ -32901,7 +33355,7 @@ var ScalarComparison = class extends ScalarExpression {
32901
33355
  return this.leftExpression.canEvaluate() && this.rightExpression.canEvaluate();
32902
33356
  }
32903
33357
  };
32904
- var ScalarComparisonEquals = class extends ScalarComparison {
33358
+ var ScalarComparisonEquals = /*#__PURE__*/ class extends ScalarComparison {
32905
33359
  constructor() {
32906
33360
  super(...arguments,);
32907
33361
  __publicField(this, 'operator', '=',);
@@ -32915,7 +33369,7 @@ var ScalarComparisonEquals = class extends ScalarComparison {
32915
33369
  };
32916
33370
  }
32917
33371
  };
32918
- var ScalarComparisonNotEquals = class extends ScalarComparison {
33372
+ var ScalarComparisonNotEquals = /*#__PURE__*/ class extends ScalarComparison {
32919
33373
  constructor() {
32920
33374
  super(...arguments,);
32921
33375
  __publicField(this, 'operator', '!=',);
@@ -32929,7 +33383,7 @@ var ScalarComparisonNotEquals = class extends ScalarComparison {
32929
33383
  };
32930
33384
  }
32931
33385
  };
32932
- var ScalarComparisonLessThan = class extends ScalarComparison {
33386
+ var ScalarComparisonLessThan = /*#__PURE__*/ class extends ScalarComparison {
32933
33387
  constructor() {
32934
33388
  super(...arguments,);
32935
33389
  __publicField(this, 'operator', '<',);
@@ -32943,7 +33397,7 @@ var ScalarComparisonLessThan = class extends ScalarComparison {
32943
33397
  };
32944
33398
  }
32945
33399
  };
32946
- var ScalarComparisonLessThanOrEqual = class extends ScalarComparison {
33400
+ var ScalarComparisonLessThanOrEqual = /*#__PURE__*/ class extends ScalarComparison {
32947
33401
  constructor() {
32948
33402
  super(...arguments,);
32949
33403
  __publicField(this, 'operator', '<=',);
@@ -32957,7 +33411,7 @@ var ScalarComparisonLessThanOrEqual = class extends ScalarComparison {
32957
33411
  };
32958
33412
  }
32959
33413
  };
32960
- var ScalarComparisonGreaterThan = class extends ScalarComparison {
33414
+ var ScalarComparisonGreaterThan = /*#__PURE__*/ class extends ScalarComparison {
32961
33415
  constructor() {
32962
33416
  super(...arguments,);
32963
33417
  __publicField(this, 'operator', '>',);
@@ -32971,7 +33425,7 @@ var ScalarComparisonGreaterThan = class extends ScalarComparison {
32971
33425
  };
32972
33426
  }
32973
33427
  };
32974
- var ScalarComparisonGreaterThanOrEqual = class extends ScalarComparison {
33428
+ var ScalarComparisonGreaterThanOrEqual = /*#__PURE__*/ class extends ScalarComparison {
32975
33429
  constructor() {
32976
33430
  super(...arguments,);
32977
33431
  __publicField(this, 'operator', '>=',);
@@ -32985,7 +33439,7 @@ var ScalarComparisonGreaterThanOrEqual = class extends ScalarComparison {
32985
33439
  };
32986
33440
  }
32987
33441
  };
32988
- var ScalarTypeCast = class extends ScalarExpression {
33442
+ var ScalarTypeCast = /*#__PURE__*/ class extends ScalarExpression {
32989
33443
  constructor(valueExpression,) {
32990
33444
  super();
32991
33445
  this.valueExpression = valueExpression;
@@ -33001,7 +33455,7 @@ var ScalarTypeCast = class extends ScalarExpression {
33001
33455
  return this.valueExpression.canEvaluate();
33002
33456
  }
33003
33457
  };
33004
- var ScalarTypeCastBoolean = class extends ScalarTypeCast {
33458
+ var ScalarTypeCastBoolean = /*#__PURE__*/ class extends ScalarTypeCast {
33005
33459
  constructor() {
33006
33460
  super(...arguments,);
33007
33461
  __publicField(this, 'dataType', 'BOOLEAN',);
@@ -33031,7 +33485,7 @@ function convertToBoolean(value,) {
33031
33485
  }
33032
33486
  return false;
33033
33487
  }
33034
- var ScalarTypeCastDate = class extends ScalarTypeCast {
33488
+ var ScalarTypeCastDate = /*#__PURE__*/ class extends ScalarTypeCast {
33035
33489
  constructor() {
33036
33490
  super(...arguments,);
33037
33491
  __publicField(this, 'dataType', 'DATE',);
@@ -33069,7 +33523,7 @@ function convertToDate(value,) {
33069
33523
  }
33070
33524
  return null;
33071
33525
  }
33072
- var ScalarTypeCastNumber = class extends ScalarTypeCast {
33526
+ var ScalarTypeCastNumber = /*#__PURE__*/ class extends ScalarTypeCast {
33073
33527
  constructor() {
33074
33528
  super(...arguments,);
33075
33529
  __publicField(this, 'dataType', 'NUMBER',);
@@ -33106,7 +33560,7 @@ function convertToNumber(value,) {
33106
33560
  }
33107
33561
  return null;
33108
33562
  }
33109
- var ScalarTypeCastString = class extends ScalarTypeCast {
33563
+ var ScalarTypeCastString = /*#__PURE__*/ class extends ScalarTypeCast {
33110
33564
  constructor() {
33111
33565
  super(...arguments,);
33112
33566
  __publicField(this, 'dataType', 'STRING',);
@@ -33554,7 +34008,7 @@ function stringifyExecutionTime(self2, total,) {
33554
34008
  function stringifyItems(items,) {
33555
34009
  return `(items: ${items})`;
33556
34010
  }
33557
- var QueryPlan = class {
34011
+ var QueryPlan = /*#__PURE__*/ class {
33558
34012
  constructor() {
33559
34013
  __publicField(this, 'executionTime', 0,);
33560
34014
  __publicField(this, 'itemCount', 0,);
@@ -33567,7 +34021,7 @@ var QueryPlan = class {
33567
34021
  return result;
33568
34022
  }
33569
34023
  };
33570
- var ScanCollectionPlan = class extends QueryPlan {
34024
+ var ScanCollectionPlan = /*#__PURE__*/ class extends QueryPlan {
33571
34025
  constructor(collection,) {
33572
34026
  super();
33573
34027
  this.collection = collection;
@@ -33581,7 +34035,7 @@ var ScanCollectionPlan = class extends QueryPlan {
33581
34035
  return this.collection.scanItems();
33582
34036
  }
33583
34037
  };
33584
- var LookupIndexPlan = class extends QueryPlan {
34038
+ var LookupIndexPlan = /*#__PURE__*/ class extends QueryPlan {
33585
34039
  constructor(index, query,) {
33586
34040
  super();
33587
34041
  this.index = index;
@@ -33621,7 +34075,7 @@ var LookupIndexPlan = class extends QueryPlan {
33621
34075
  return this.index.lookupItems(this.query,);
33622
34076
  }
33623
34077
  };
33624
- var UnionPlan = class extends QueryPlan {
34078
+ var UnionPlan = /*#__PURE__*/ class extends QueryPlan {
33625
34079
  constructor(childPlans,) {
33626
34080
  super();
33627
34081
  this.childPlans = childPlans;
@@ -33651,7 +34105,7 @@ var UnionPlan = class extends QueryPlan {
33651
34105
  return (result == null ? void 0 : result.items()) ?? [];
33652
34106
  }
33653
34107
  };
33654
- var IntersectionPlan = class extends QueryPlan {
34108
+ var IntersectionPlan = /*#__PURE__*/ class extends QueryPlan {
33655
34109
  constructor(childPlans,) {
33656
34110
  super();
33657
34111
  this.childPlans = childPlans;
@@ -33681,7 +34135,7 @@ var IntersectionPlan = class extends QueryPlan {
33681
34135
  return (result == null ? void 0 : result.items()) ?? [];
33682
34136
  }
33683
34137
  };
33684
- var ResolveItemsPlan = class extends QueryPlan {
34138
+ var ResolveItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33685
34139
  constructor(childPlan, collection, richTextResolver, select,) {
33686
34140
  super();
33687
34141
  this.childPlan = childPlan;
@@ -33711,7 +34165,7 @@ var ResolveItemsPlan = class extends QueryPlan {
33711
34165
  return this.collection.resolveItems(childPointers,);
33712
34166
  }
33713
34167
  };
33714
- var FilterItemsPlan = class extends QueryPlan {
34168
+ var FilterItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33715
34169
  constructor(childPlan, filterExpression,) {
33716
34170
  super();
33717
34171
  this.childPlan = childPlan;
@@ -33733,7 +34187,7 @@ var FilterItemsPlan = class extends QueryPlan {
33733
34187
  },);
33734
34188
  }
33735
34189
  };
33736
- var SortItemsPlan = class extends QueryPlan {
34190
+ var SortItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33737
34191
  constructor(childPlan, orderExpressions, collection,) {
33738
34192
  super();
33739
34193
  this.childPlan = childPlan;
@@ -33782,14 +34236,14 @@ var SortItemsPlan = class extends QueryPlan {
33782
34236
  },);
33783
34237
  }
33784
34238
  };
33785
- var ScalarOrderExpression = class {
34239
+ var ScalarOrderExpression = /*#__PURE__*/ class {
33786
34240
  constructor(expression, direction, collation,) {
33787
34241
  this.expression = expression;
33788
34242
  this.direction = direction;
33789
34243
  this.collation = collation;
33790
34244
  }
33791
34245
  };
33792
- var SliceItemsPlan = class extends QueryPlan {
34246
+ var SliceItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33793
34247
  constructor(childPlan, offsetExpression, limitExpression,) {
33794
34248
  super();
33795
34249
  this.childPlan = childPlan;
@@ -33826,7 +34280,7 @@ var SliceItemsPlan = class extends QueryPlan {
33826
34280
  return childItems.slice(offset, offset + limit,);
33827
34281
  }
33828
34282
  };
33829
- var DatabaseItemMap = class extends Map {
34283
+ var DatabaseItemMap = /*#__PURE__*/ class extends Map {
33830
34284
  constructor(items = [],) {
33831
34285
  super();
33832
34286
  for (const item of items) {
@@ -33857,7 +34311,7 @@ var DatabaseItemMap = class extends Map {
33857
34311
  return [...values,];
33858
34312
  }
33859
34313
  };
33860
- var RichTextResolver = class {
34314
+ var RichTextResolver = /*#__PURE__*/ class {
33861
34315
  constructor(collection,) {
33862
34316
  this.collection = collection;
33863
34317
  __publicField(this, 'cache', /* @__PURE__ */ new Map(),);
@@ -34008,7 +34462,7 @@ function getDatabaseCollection({
34008
34462
  }
34009
34463
  assertNever(data2, 'Unsupported collection type',);
34010
34464
  }
34011
- var QueryEngine = class {
34465
+ var QueryEngine = /*#__PURE__*/ class {
34012
34466
  async query(query, locale,) {
34013
34467
  const collection = getDatabaseCollection(query.from, locale,);
34014
34468
  const richTextResolver = new RichTextResolver(collection,);
@@ -34239,7 +34693,7 @@ function createScanCollectionPlan(collection, expression,) {
34239
34693
  const plan = new ScanCollectionPlan(collection,);
34240
34694
  return new FilterItemsPlan(plan, expression,);
34241
34695
  }
34242
- var AnimationCollector = class {
34696
+ var AnimationCollector = /*#__PURE__*/ class {
34243
34697
  constructor() {
34244
34698
  __publicField(this, 'entries', /* @__PURE__ */ new Map(),);
34245
34699
  }
@@ -34864,7 +35318,7 @@ function usePrototypeNavigate({
34864
35318
  return false;
34865
35319
  };
34866
35320
  }
34867
- var QueryCache = class {
35321
+ var QueryCache = /*#__PURE__*/ class {
34868
35322
  constructor(queryEngine2,) {
34869
35323
  this.queryEngine = queryEngine2;
34870
35324
  __publicField(this, 'cache', /* @__PURE__ */ new Map(),);
@@ -34910,7 +35364,11 @@ function useQueryData(query,) {
34910
35364
  return cached.read();
34911
35365
  }
34912
35366
  function useQueryCount(query,) {
34913
- const collection = useQueryData(query,);
35367
+ const countQuery = {
35368
+ ...query,
35369
+ select: [],
35370
+ };
35371
+ const collection = useQueryData(countQuery,);
34914
35372
  return collection.length;
34915
35373
  }
34916
35374
  function getWhereExpressionFromPathVariables(pathVariables,) {
@@ -34949,28 +35407,29 @@ function getWhereExpressionFromPathVariables(pathVariables,) {
34949
35407
  right: expression,
34950
35408
  }));
34951
35409
  }
34952
- function useLoadMorePaginatedQuery(query, pageSize,) {
34953
- const {
34954
- paginationInfo,
34955
- setPaginationInfo,
34956
- } = useCollectionListPaginationInfo();
35410
+ function useLoadMorePaginatedQuery(query, pageSize, hash2,) {
34957
35411
  const count = useQueryCount(query,);
34958
- const initialPaginationInfo = useMemo(() => {
35412
+ const [paginationInfo, setPaginationInfo,] = useState(() => {
35413
+ var _a, _b, _c, _d;
34959
35414
  const totalPages = Math.ceil(count / pageSize,);
35415
+ const currentPage = ((_d = (_c = (_b = (_a = globalThis == null ? void 0 : globalThis.history) == null ? void 0 : _a.state) == null
35416
+ ? void 0
35417
+ : _b.paginationInfo) == null
35418
+ ? void 0
35419
+ : _c[hash2]) == null
35420
+ ? void 0
35421
+ : _d.currentPage) ?? 1;
34960
35422
  return {
34961
- currentPage: 1,
35423
+ currentPage,
34962
35424
  totalPages,
34963
- type: 'loadMore',
35425
+ isLoading: false,
34964
35426
  };
34965
- }, [count, pageSize,],);
35427
+ },);
34966
35428
  useEffect(() => {
34967
- if (!paginationInfo) {
34968
- setPaginationInfo(initialPaginationInfo,);
34969
- }
34970
- }, [count, initialPaginationInfo, paginationInfo, setPaginationInfo,],);
35429
+ pushLoadMoreHistory(hash2, paginationInfo,);
35430
+ }, [hash2, paginationInfo,],);
34971
35431
  const paginatedQuery = useMemo(() => {
34972
- const currentPaginationInfo = paginationInfo ?? initialPaginationInfo;
34973
- let limit = pageSize * currentPaginationInfo.currentPage;
35432
+ let limit = pageSize * paginationInfo.currentPage;
34974
35433
  if (query.limit) {
34975
35434
  if (query.limit.type !== 'LiteralValue' || typeof query.limit.value !== 'number') {
34976
35435
  throw new Error('Unexpected type for query limit',);
@@ -34984,8 +35443,28 @@ function useLoadMorePaginatedQuery(query, pageSize,) {
34984
35443
  value: limit,
34985
35444
  },
34986
35445
  };
34987
- }, [initialPaginationInfo, query, pageSize, paginationInfo,],);
34988
- return paginatedQuery;
35446
+ }, [query, pageSize, paginationInfo,],);
35447
+ const onCanvas = useIsOnFramerCanvas();
35448
+ const loadMore = useCallback(() => {
35449
+ if (onCanvas) return;
35450
+ if (paginationInfo.currentPage >= paginationInfo.totalPages) return;
35451
+ setPaginationInfo((info) => ({
35452
+ ...info,
35453
+ isLoading: true,
35454
+ }));
35455
+ requestAnimationFrame(() => {
35456
+ setPaginationInfo((info) => ({
35457
+ ...info,
35458
+ currentPage: Math.min(info.currentPage + 1, info.totalPages,),
35459
+ isLoading: false,
35460
+ }));
35461
+ },);
35462
+ }, [onCanvas, paginationInfo.currentPage, paginationInfo.totalPages,],);
35463
+ return {
35464
+ paginatedQuery,
35465
+ paginationInfo,
35466
+ loadMore,
35467
+ };
34989
35468
  }
34990
35469
  function createGestureVariant(variant, type,) {
34991
35470
  return `${variant}-${type}`;
@@ -35042,9 +35521,10 @@ function useVariantState({
35042
35521
  },) {
35043
35522
  const forceUpdate = useForceUpdate3();
35044
35523
  const validBaseVariants = useConstant2(() => new Set(externalCycleOrder,));
35045
- const internalState = useRef({
35524
+ const internalState = React4.useRef({
35046
35525
  isHovered: false,
35047
35526
  isPressed: false,
35527
+ hasPressedVariants: true,
35048
35528
  baseVariant: safeBaseVariant(variant, externalDefaultVariant, validBaseVariants,),
35049
35529
  lastVariant: variant,
35050
35530
  gestureVariant: void 0,
@@ -35056,7 +35536,7 @@ function useVariantState({
35056
35536
  cycleOrder: externalCycleOrder,
35057
35537
  transitions: externalTransitions,
35058
35538
  },);
35059
- const resolveNextVariant = useCallback((targetBaseVariant) => {
35539
+ const resolveNextVariant = React4.useCallback((targetBaseVariant) => {
35060
35540
  const {
35061
35541
  isHovered: isHovered2,
35062
35542
  isPressed: isPressed2,
@@ -35068,7 +35548,7 @@ function useVariantState({
35068
35548
  const nextGestureVariant = gesture ? createGestureVariant(nextBaseVariant, gesture,) : void 0;
35069
35549
  return [nextBaseVariant, nextGestureVariant,];
35070
35550
  }, [validBaseVariants,],);
35071
- const setGestureState = useCallback(({
35551
+ const setGestureState = React4.useCallback(({
35072
35552
  isHovered: isHovered2,
35073
35553
  isPressed: isPressed2,
35074
35554
  },) => {
@@ -35083,10 +35563,10 @@ function useVariantState({
35083
35563
  if (nextBase !== baseVariant2 || nextGesture !== gestureVariant2) {
35084
35564
  internalState.current.baseVariant = nextBase || defaultVariant2;
35085
35565
  internalState.current.gestureVariant = nextGesture;
35086
- startTransition2(forceUpdate,);
35566
+ forceUpdate();
35087
35567
  }
35088
35568
  }, [resolveNextVariant, forceUpdate,],);
35089
- const setVariant = useCallback((proposedVariant) => {
35569
+ const setVariant = React4.useCallback((proposedVariant) => {
35090
35570
  const {
35091
35571
  defaultVariant: defaultVariant2,
35092
35572
  cycleOrder,
@@ -35100,7 +35580,7 @@ function useVariantState({
35100
35580
  if (nextBase !== baseVariant2 || nextGesture !== gestureVariant2) {
35101
35581
  internalState.current.baseVariant = nextBase || defaultVariant2;
35102
35582
  internalState.current.gestureVariant = nextGesture;
35103
- startTransition2(forceUpdate,);
35583
+ forceUpdate();
35104
35584
  }
35105
35585
  }, [resolveNextVariant, forceUpdate,],);
35106
35586
  if (variant !== internalState.current.lastVariant) {
@@ -35120,10 +35600,40 @@ function useVariantState({
35120
35600
  isPressed,
35121
35601
  } = internalState.current;
35122
35602
  const addVariantProps = useAddVariantProps(internalState.current.baseVariant, internalState.current.gestureVariant, variantProps2,);
35123
- return useMemo(() => {
35603
+ return React4.useMemo(() => {
35124
35604
  const variants = [];
35125
35605
  if (baseVariant !== defaultVariant) variants.push(baseVariant,);
35126
35606
  if (gestureVariant) variants.push(gestureVariant,);
35607
+ const gestures = enabledGestures == null ? void 0 : enabledGestures[baseVariant];
35608
+ const gestureHandlers = {};
35609
+ if (gestures == null ? void 0 : gestures.hover) {
35610
+ Object.assign(gestureHandlers, {
35611
+ onMouseEnter: () =>
35612
+ setGestureState({
35613
+ isHovered: true,
35614
+ },),
35615
+ onMouseLeave: () =>
35616
+ setGestureState({
35617
+ isHovered: false,
35618
+ },),
35619
+ },);
35620
+ }
35621
+ if (gestures == null ? void 0 : gestures.pressed) {
35622
+ Object.assign(gestureHandlers, {
35623
+ onTapStart: () =>
35624
+ setGestureState({
35625
+ isPressed: true,
35626
+ },),
35627
+ onTapCancel: () =>
35628
+ setGestureState({
35629
+ isPressed: false,
35630
+ },),
35631
+ onTap: () =>
35632
+ setGestureState({
35633
+ isPressed: false,
35634
+ },),
35635
+ },);
35636
+ }
35127
35637
  return {
35128
35638
  variants,
35129
35639
  baseVariant,
@@ -35132,10 +35642,8 @@ function useVariantState({
35132
35642
  setVariant,
35133
35643
  setGestureState,
35134
35644
  addVariantProps,
35135
- classNames: cx(
35136
- createVariantClassName(baseVariant, variantClassNames,),
35137
- getGesture(enabledGestures == null ? void 0 : enabledGestures[baseVariant], isHovered, isPressed,),
35138
- ),
35645
+ gestureHandlers,
35646
+ classNames: cx(createVariantClassName(baseVariant, variantClassNames,), getGesture(gestures, isHovered, isPressed,),),
35139
35647
  };
35140
35648
  }, [
35141
35649
  baseVariant,
@@ -35926,7 +36434,7 @@ var FontSourceNames = /* @__PURE__ */ ((FontSourceNames2) => {
35926
36434
  return FontSourceNames2;
35927
36435
  })(FontSourceNames || {},);
35928
36436
  var systemFontFamilyName = 'System Default';
35929
- var LocalFontSource = class {
36437
+ var LocalFontSource = /*#__PURE__*/ class {
35930
36438
  constructor() {
35931
36439
  __publicField(this, 'name', 'local',/* Local */
35932
36440
  );
@@ -36006,8 +36514,8 @@ var LocalFontSource = class {
36006
36514
  };
36007
36515
  const aliases = /* @__PURE__ */ new Map();
36008
36516
  const weights = [400, 100, 200, 300, 500, 600, 700, 800, 900,];
36009
- const styles = ['normal', 'italic',];
36010
- for (const style of styles) {
36517
+ const styles4 = ['normal', 'italic',];
36518
+ for (const style of styles4) {
36011
36519
  for (const weight of weights) {
36012
36520
  const variant = createVariantName(weight, style,);
36013
36521
  const alias = `__SystemDefault-${weight}-${style}__`;
@@ -36068,7 +36576,7 @@ function getCustomFontName(fileName, properties,) {
36068
36576
  const variant = properties.font.preferredSubFamily === '' ? properties.font.fontSubFamily : properties.font.preferredSubFamily;
36069
36577
  return `${fontFamily} ${variant}`;
36070
36578
  }
36071
- var CustomFontSource = class {
36579
+ var CustomFontSource = /*#__PURE__*/ class {
36072
36580
  constructor() {
36073
36581
  __publicField(this, 'name', 'custom',/* Custom */
36074
36582
  );
@@ -36236,7 +36744,7 @@ var weightNameToNumber = {
36236
36744
  };
36237
36745
  var weightNames = /* @__PURE__ */ Object.keys(weightNameToNumber,);
36238
36746
  var allowedVariantsRegex = /* @__PURE__ */ (() => new RegExp(`^(?:${[...weightNames, 'italic',].join('|',)})`, 'u',))();
36239
- var FontshareSource = class {
36747
+ var FontshareSource = /*#__PURE__*/ class {
36240
36748
  constructor() {
36241
36749
  __publicField(this, 'name', 'fontshare',/* Fontshare */
36242
36750
  );
@@ -36374,7 +36882,7 @@ var weightNameToNumber2 = {
36374
36882
  ExtraBold: 800,
36375
36883
  Black: 900,
36376
36884
  };
36377
- var FramerFontSource = class {
36885
+ var FramerFontSource = /*#__PURE__*/ class {
36378
36886
  constructor() {
36379
36887
  __publicField(this, 'name', 'framer',/* Framer */
36380
36888
  );
@@ -36435,7 +36943,7 @@ var FramerFontSource = class {
36435
36943
  }
36436
36944
  };
36437
36945
  var googleFontSelectorPrefix = 'GF;';
36438
- var GoogleFontSource = class {
36946
+ var GoogleFontSource = /*#__PURE__*/ class {
36439
36947
  constructor() {
36440
36948
  __publicField(this, 'name', 'google',/* Google */
36441
36949
  );
@@ -36542,7 +37050,7 @@ function mapToKnownCategory2(category,) {
36542
37050
  var import_fontfaceobserver = __toESM(require_fontfaceobserver_standalone(), 1,);
36543
37051
  var FONT_LOADING_TIMEOUT = 5e3;
36544
37052
  var MAX_RETRIES = 3;
36545
- var FontLoadingError = class extends Error {
37053
+ var FontLoadingError = /*#__PURE__*/ class extends Error {
36546
37054
  constructor(message,) {
36547
37055
  super(message,);
36548
37056
  this.name = 'FontLoadingError';
@@ -36615,7 +37123,7 @@ async function isFontReady(family, style, weight,) {
36615
37123
  }`,);
36616
37124
  }
36617
37125
  }
36618
- var FontStore = class {
37126
+ var FontStore = /*#__PURE__*/ class {
36619
37127
  constructor() {
36620
37128
  __publicField(this, 'enabled', false,);
36621
37129
  __publicField(this, 'bySelector', /* @__PURE__ */ new Map(),);
@@ -36904,7 +37412,7 @@ var DeprecatedComponentContainer = /* @__PURE__ */ (() => {
36904
37412
  },
36905
37413
  },);
36906
37414
  }
36907
- renderErrorPlaceholder(file, error,) {
37415
+ renderErrorPlaceholder(error,) {
36908
37416
  const {
36909
37417
  RenderPlaceholder,
36910
37418
  } = runtime;
@@ -36912,10 +37420,7 @@ var DeprecatedComponentContainer = /* @__PURE__ */ (() => {
36912
37420
  ...this.props,
36913
37421
  background: null,
36914
37422
  children: /* @__PURE__ */ jsx(RenderPlaceholder, {
36915
- error: {
36916
- error,
36917
- file,
36918
- },
37423
+ error,
36919
37424
  },),
36920
37425
  },);
36921
37426
  }
@@ -36935,13 +37440,23 @@ var DeprecatedComponentContainer = /* @__PURE__ */ (() => {
36935
37440
  if (noChildren) {
36936
37441
  const errorComponent = runtime.componentLoader.errorForIdentifier(componentIdentifier,);
36937
37442
  if (errorComponent) {
36938
- return this.renderErrorPlaceholder(errorComponent.file, errorComponent.error,);
37443
+ const title = `Error in ${errorComponent.file}`;
37444
+ const message = errorComponent.error;
37445
+ return this.renderErrorPlaceholder({
37446
+ title,
37447
+ message,
37448
+ },);
36939
37449
  }
36940
37450
  }
36941
37451
  if (error && error.children === children) {
36942
37452
  const component = runtime.componentLoader.componentForIdentifier(componentIdentifier,);
36943
37453
  const file = component ? component.file : '???';
36944
- return this.renderErrorPlaceholder(file, error.message,);
37454
+ const title = `Error in ${file}`;
37455
+ const message = error.message;
37456
+ return this.renderErrorPlaceholder({
37457
+ title,
37458
+ message,
37459
+ },);
36945
37460
  }
36946
37461
 
36947
37462
  (_b = (_a2 = asRecord(safeWindow,))['__checkComponentBudget__']) == null ? void 0 : _b.call(_a2,);
@@ -37065,189 +37580,6 @@ function isPageOrScroll(identifier,) {
37065
37580
  if (identifier === 'framer/Scroll') return true;
37066
37581
  return false;
37067
37582
  }
37068
- var salt = 'framer';
37069
- var difficulty = 3;
37070
- var tokenLength = 30;
37071
- var maxTime = 3e3;
37072
- async function calculateProofOfWork() {
37073
- const target = '0'.repeat(difficulty,);
37074
- const startTime = Date.now();
37075
- let processing = true;
37076
- while (processing) {
37077
- const timestamp = Date.now();
37078
- if (timestamp - startTime > maxTime) {
37079
- processing = false;
37080
- return;
37081
- }
37082
- const nonce = randomCharacters(tokenLength,);
37083
- const secret = `${timestamp}:${nonce}`;
37084
- const hash2 = await sha256(salt + secret,);
37085
- if (hash2.startsWith(target,)) {
37086
- return {
37087
- secret,
37088
- hash: hash2,
37089
- };
37090
- }
37091
- }
37092
- return;
37093
- }
37094
- async function sha256(text,) {
37095
- const buffer = new TextEncoder().encode(text,);
37096
- const hashBuffer = await crypto.subtle.digest('SHA-256', buffer,);
37097
- return Array.from(new Uint8Array(hashBuffer,),).map((b) => b.toString(16,).padStart(2, '0',)).join('',);
37098
- }
37099
- function randomCharacters(count,) {
37100
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
37101
- let result = '';
37102
- const charactersLength = characters.length;
37103
- for (let i = 0; i < count; i++) {
37104
- result += characters.charAt(Math.floor(Math.random() * charactersLength,),);
37105
- }
37106
- return result;
37107
- }
37108
- function formReducer(_state, {
37109
- type,
37110
- },) {
37111
- switch (type) {
37112
- case 'submit':
37113
- return {
37114
- state: 'pending',
37115
- };
37116
- case 'success':
37117
- return {
37118
- state: 'success',
37119
- };
37120
- case 'error':
37121
- return {
37122
- state: 'error',
37123
- };
37124
- default:
37125
- assertNever(type,);
37126
- }
37127
- }
37128
- function preventDefault(e,) {
37129
- e.preventDefault();
37130
- }
37131
- var FormContainer = ({
37132
- action,
37133
- formId,
37134
- disabled,
37135
- children,
37136
- redirectUrl,
37137
- ...props
37138
- },) => {
37139
- const [state, dispatch,] = React4.useReducer(formReducer, {
37140
- state: disabled ? 'disabled' : void 0,
37141
- },);
37142
- const router = useRouter();
37143
- const {
37144
- activeLocale,
37145
- } = useLocaleInfo();
37146
- const isSubmitEnabled = state.state === void 0;
37147
- async function redirectTo(link,) {
37148
- var _a, _b;
37149
- if (isLinkToWebPage(link,)) {
37150
- if (!router) return;
37151
- const route = (_a = router.getRoute) == null ? void 0 : _a.call(router, link.webPageId,);
37152
- if (!route) return;
37153
- const {
37154
- unresolvedHashSlugs,
37155
- unresolvedPathSlugs,
37156
- } = link;
37157
- const resolvedSlugs = await resolveSlugs(unresolvedPathSlugs, unresolvedHashSlugs, router.collectionUtils, activeLocale,);
37158
- const combinedPathVariables = Object.assign(
37159
- {},
37160
- router.currentPathVariables,
37161
- link.pathVariables,
37162
- resolvedSlugs == null ? void 0 : resolvedSlugs.path,
37163
- );
37164
- const combinedHashVariables = Object.assign(
37165
- {},
37166
- router.currentPathVariables,
37167
- link.pathVariables,
37168
- link.hashVariables,
37169
- resolvedSlugs == null ? void 0 : resolvedSlugs.hash,
37170
- );
37171
- const element = getHashForRoute(link.hash, route, combinedHashVariables,);
37172
- (_b = router.navigate) == null ? void 0 : _b.call(router, link.webPageId, element, combinedPathVariables,);
37173
- return;
37174
- }
37175
- if (!safeWindow) return;
37176
- safeWindow.open(link, '_blank',);
37177
- }
37178
- const handleSubmit = async (event) => {
37179
- event.preventDefault();
37180
- if (!action) return;
37181
- const data2 = new FormData(event.currentTarget,);
37182
- for (const [key7, value,] of data2) {
37183
- if (value instanceof File) data2.delete(key7,);
37184
- }
37185
- try {
37186
- dispatch({
37187
- type: 'submit',
37188
- },);
37189
- await submitForm(action, data2,);
37190
- dispatch({
37191
- type: 'success',
37192
- },);
37193
- if (redirectUrl) {
37194
- await redirectTo(redirectUrl,);
37195
- }
37196
- } catch (error) {
37197
- dispatch({
37198
- type: 'error',
37199
- },);
37200
- }
37201
- };
37202
- const handleKeyDown = (event) => {
37203
- const {
37204
- target: input,
37205
- currentTarget: form,
37206
- key: key7,
37207
- } = event;
37208
- const isTextArea = input instanceof HTMLTextAreaElement;
37209
- if (isTextArea) return;
37210
- if (key7 === 'Enter' && form.checkValidity()) {
37211
- event.preventDefault();
37212
- void handleSubmit(event,);
37213
- }
37214
- };
37215
- return /* @__PURE__ */ jsx(motion.form, {
37216
- ...props,
37217
- 'data-formid': formId,
37218
- onSubmit: isSubmitEnabled ? handleSubmit : preventDefault,
37219
- onKeyDown: handleKeyDown,
37220
- children: children(state,),
37221
- },);
37222
- };
37223
- async function submitForm(action, data2,) {
37224
- const proofOfWork = await calculateProofOfWork();
37225
- if (!proofOfWork) {
37226
- throw new Error('Failed to calculate proof of work',);
37227
- }
37228
- const response = await fetch(action, {
37229
- body: data2,
37230
- method: 'POST',
37231
- headers: {
37232
- 'Framer-POW': proofOfWork.secret,
37233
- 'Framer-POW-Enforce': 'true',
37234
- },
37235
- },);
37236
- if (response.ok) {
37237
- return response;
37238
- } else {
37239
- const body = await response.json();
37240
- const error = 'Failed to submit form';
37241
- if (responseHasError(body,)) {
37242
- throw new Error(`${error} - ${body.error.message}`,);
37243
- }
37244
- throw new Error(error,);
37245
- }
37246
- }
37247
- function responseHasError(response,) {
37248
- return typeof response === 'object' && response !== null && 'error' in response && isObject2(response.error,) &&
37249
- 'message' in response.error && typeof response.error.message === 'string';
37250
- }
37251
37583
  var FormInputStyleVariableNames = /* @__PURE__ */ ((FormInputStyleVariableNames2) => {
37252
37584
  FormInputStyleVariableNames2['Padding'] = '--framer-input-padding';
37253
37585
  FormInputStyleVariableNames2['BorderRadiusTopLeft'] = '--framer-input-border-radius-top-left';
@@ -37270,66 +37602,84 @@ var FormInputStyleVariableNames = /* @__PURE__ */ ((FormInputStyleVariableNames2
37270
37602
  FormInputStyleVariableNames2['FontLineHeight'] = '--framer-input-font-line-height';
37271
37603
  FormInputStyleVariableNames2['PlaceholderColor'] = '--framer-input-placeholder-color';
37272
37604
  FormInputStyleVariableNames2['BoxShadow'] = '--framer-input-box-shadow';
37273
- FormInputStyleVariableNames2['ZIndex'] = '--framer-input-z-index';
37274
37605
  FormInputStyleVariableNames2['FocusedBorderColor'] = '--framer-input-focused-border-color';
37275
37606
  FormInputStyleVariableNames2['FocusedBorderWidth'] = '--framer-input-focused-border-width';
37276
37607
  FormInputStyleVariableNames2['FocusedBorderStyle'] = '--framer-input-focused-border-style';
37277
37608
  FormInputStyleVariableNames2['FocusedBackground'] = '--framer-input-focused-background';
37278
37609
  FormInputStyleVariableNames2['FocusedBoxShadow'] = '--framer-input-focused-box-shadow';
37279
37610
  FormInputStyleVariableNames2['FocusedTransition'] = '--framer-input-focused-transition';
37611
+ FormInputStyleVariableNames2['BooleanCheckedBackground'] = '--framer-input-boolean-checked-background';
37612
+ FormInputStyleVariableNames2['BooleanCheckedBorderColor'] = '--framer-input-boolean-checked-border-color';
37613
+ FormInputStyleVariableNames2['BooleanCheckedBorderWidth'] = '--framer-input-boolean-checked-border-width';
37614
+ FormInputStyleVariableNames2['BooleanCheckedBorderStyle'] = '--framer-input-boolean-checked-border-style';
37615
+ FormInputStyleVariableNames2['BooleanCheckedBoxShadow'] = '--framer-input-boolean-checked-box-shadow';
37616
+ FormInputStyleVariableNames2['BooleanCheckedTransition'] = '--framer-input-boolean-checked-transition';
37617
+ FormInputStyleVariableNames2['InvalidTextColor'] = '--framer-input-invalid-text-color';
37618
+ FormInputStyleVariableNames2['IconBackgroundImage'] = '--framer-input-icon-image';
37619
+ FormInputStyleVariableNames2['IconMaskImage'] = '--framer-input-icon-mask-image';
37620
+ FormInputStyleVariableNames2['IconColor'] = '--framer-input-icon-color';
37280
37621
  return FormInputStyleVariableNames2;
37281
37622
  })(FormInputStyleVariableNames || {},);
37282
37623
  var Var = FormInputStyleVariableNames;
37283
37624
  var inputClassName = 'framer-form-input';
37284
37625
  var inputWrapperClassName = 'framer-form-input-wrapper';
37285
- function cssVar(a, b,) {
37286
- return `var(${a}, var(${b}))`;
37287
- }
37288
- var sharedInputCSS = [`.${inputClassName} {
37289
- padding: var(${Var.Padding});
37290
- background: var(${Var.Background});
37291
- font-family: var(${Var.FontFamily});
37292
- font-weight: var(${Var.FontWeight});
37293
- font-size: var(${Var.FontSize});
37294
- color: var(${Var.FontColor});
37295
- box-shadow: var(${Var.BoxShadow});
37296
- border: none;
37297
- text-overflow: ellipsis;
37298
- white-space: nowrap;
37299
- overflow: hidden;
37300
- width: 100%;
37301
- height: 100%;
37302
- border-top-left-radius: var(${Var.BorderRadiusTopLeft});
37303
- border-top-right-radius: var(${Var.BorderRadiusTopRight});
37304
- border-bottom-right-radius: var(${Var.BorderRadiusBottomRight});
37305
- border-bottom-left-radius: var(${Var.BorderRadiusBottomLeft});
37306
- z-index: var(${Var.ZIndex});
37307
- letter-spacing: var(${Var.FontLetterSpacing});
37308
- text-align: var(${Var.FontTextAlignment});
37309
- line-height: var(${Var.FontLineHeight});
37310
- transition: var(${Var.FocusedTransition});
37311
- transition-property: background, box-shadow;
37312
- }`,];
37313
- var focusInputCSS = [
37314
- `.${inputClassName}:focus-visible { outline: none; }`,
37315
- `.${inputClassName}:focus {
37316
- background: ${cssVar(Var.FocusedBackground, Var.Background,)};
37317
- box-shadow: ${cssVar(Var.FocusedBoxShadow, Var.BoxShadow,)};
37318
- }`,
37319
- `.${inputWrapperClassName}:focus-within::after {
37320
- border-color: ${cssVar(Var.FocusedBorderColor, Var.BorderColor,)};
37321
- border-style: ${cssVar(Var.FocusedBorderStyle, Var.BorderStyle,)};
37322
- border-top-width: ${cssVar(Var.FocusedBorderWidth, Var.BorderTopWidth,)};
37323
- border-right-width: ${cssVar(Var.FocusedBorderWidth, Var.BorderRightWidth,)};
37324
- border-bottom-width: ${cssVar(Var.FocusedBorderWidth, Var.BorderBottomWidth,)};
37325
- border-left-width: ${cssVar(Var.FocusedBorderWidth, Var.BorderLeftWidth,)};
37326
- }`,
37626
+ var emptyValueClassName = 'framer-form-input-empty';
37627
+ var forcedFocusClassName = 'framer-form-input-forced-focus';
37628
+ var forcedCheckedClassName = 'framer-form-input-forced-checked';
37629
+ function cssValue(value,) {
37630
+ if (typeof value === 'number') return value;
37631
+ if (value.startsWith('--',)) return css.variable(value,);
37632
+ if (value === '') return '""';
37633
+ return value;
37634
+ }
37635
+ function css(selector, declaration,) {
37636
+ let output = ' ';
37637
+ for (const key7 in declaration) {
37638
+ const value = declaration[key7];
37639
+ output += `${key7.replace(/([A-Z])/gu, '-$1',).toLowerCase()}: ${cssValue(value,)}; `;
37640
+ }
37641
+ return selector + ' {' + output + '}';
37642
+ }
37643
+ ((css2) => {
37644
+ function variable(...variables) {
37645
+ const lastItem = variables[variables.length - 1];
37646
+ let value = lastItem.startsWith('--',) ? `var(${lastItem})` : lastItem;
37647
+ for (let index = variables.length - 2; index >= 0; index--) {
37648
+ const element = variables[index];
37649
+ value = `var(${element}, ${value})`;
37650
+ }
37651
+ return value;
37652
+ }
37653
+ css2.variable = variable;
37654
+ })(css || (css = {}),);
37655
+ var sharedInputCSS = [
37656
+ css(`.${inputClassName}`, {
37657
+ padding: css.variable(Var.Padding,),
37658
+ background: 'transparent',
37659
+ fontFamily: css.variable(Var.FontFamily,),
37660
+ fontWeight: css.variable(Var.FontWeight,),
37661
+ fontSize: css.variable(Var.FontSize,),
37662
+ color: css.variable(Var.FontColor,),
37663
+ border: 'none',
37664
+ textOverflow: 'ellipsis',
37665
+ whiteSpace: 'nowrap',
37666
+ overflow: 'hidden',
37667
+ width: '100%',
37668
+ height: '100%',
37669
+ letterSpacing: css.variable(Var.FontLetterSpacing,),
37670
+ textAlign: css.variable(Var.FontTextAlignment,),
37671
+ lineHeight: css.variable(Var.FontLineHeight,),
37672
+ },),
37673
+ css(`.${inputClassName}:focus-visible`, {
37674
+ outline: 'none',
37675
+ },),
37327
37676
  ];
37328
- var inputBorderCSS = [
37329
- `.${inputWrapperClassName} {
37330
- position: relative;
37331
- }`,
37332
- `.${inputWrapperClassName}:after {
37677
+ var inputWrapperCSS = /* @__PURE__ */ (() => [css(`.${inputWrapperClassName}`, {
37678
+ overflow: 'hidden',
37679
+ },),])();
37680
+ var inputBorderAllSides =
37681
+ `var(${Var.BorderTopWidth}) var(${Var.BorderRightWidth}) var(${Var.BorderBottomWidth}) var(${Var.BorderLeftWidth})`;
37682
+ var inputBorderCSS = [`.${inputWrapperClassName}:after {
37333
37683
  content: "";
37334
37684
  pointer-events: none;
37335
37685
  box-sizing: border-box;
@@ -37350,116 +37700,477 @@ var inputBorderCSS = [
37350
37700
  border-style: var(${Var.BorderStyle});
37351
37701
  transition: var(${Var.FocusedTransition});
37352
37702
  transition-property: border-color, border-width, border-style, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius;
37353
- }`,
37354
- ];
37703
+ }`,];
37704
+ var customValidityKey = 'customError';
37705
+ var validKey = 'valid';
37706
+ function isRelevantValidityStateKey(key7,) {
37707
+ return key7 !== customValidityKey && key7 !== validKey;
37708
+ }
37709
+ function isInvalid(validity,) {
37710
+ for (const key7 in validity) {
37711
+ if (!isRelevantValidityStateKey(key7,)) continue;
37712
+ if ((validity == null ? void 0 : validity[key7]) === true) return true;
37713
+ }
37714
+ return false;
37715
+ }
37716
+ function useCustomValidity(onValid, onInvalid, onChange, onBlur, onFocus,) {
37717
+ const isValidRef = React4.useRef(null,);
37718
+ const handleInvalid = React4.useCallback((e) => {
37719
+ if (!onInvalid) return;
37720
+ if (isValidRef.current === false) return;
37721
+ isValidRef.current = false;
37722
+ e.currentTarget.setCustomValidity(' ',);
37723
+ e.currentTarget.reportValidity();
37724
+ onInvalid(e,);
37725
+ }, [onInvalid,],);
37726
+ const handleChange = React4.useCallback((e) => {
37727
+ onChange == null ? void 0 : onChange(e,);
37728
+ if (!onInvalid && !onValid) return;
37729
+ const validity = e.target.validity;
37730
+ if (isValidRef.current === false && !isInvalid(validity,)) {
37731
+ e.currentTarget.setCustomValidity('',);
37732
+ e.target.reportValidity();
37733
+ isValidRef.current = true;
37734
+ onValid == null ? void 0 : onValid();
37735
+ }
37736
+ }, [onInvalid, onValid, onChange,],);
37737
+ const handleBlur = React4.useCallback((e) => {
37738
+ if (!onInvalid) {
37739
+ onBlur == null ? void 0 : onBlur(e,);
37740
+ return;
37741
+ }
37742
+ if (isValidRef.current === false) return;
37743
+ const validity = e.currentTarget.validity;
37744
+ if (isInvalid(validity,)) {
37745
+ handleInvalid(e,);
37746
+ return;
37747
+ }
37748
+ onBlur == null ? void 0 : onBlur(e,);
37749
+ }, [handleInvalid, onBlur, onInvalid,],);
37750
+ return React4.useMemo(() => {
37751
+ return {
37752
+ onInvalid: handleInvalid,
37753
+ onChange: handleChange,
37754
+ onBlur: handleBlur,
37755
+ onFocus,
37756
+ };
37757
+ }, [handleInvalid, handleChange, handleBlur, onFocus,],);
37758
+ }
37759
+ var iconSpacing = 10;
37760
+ var iconSize = 16;
37761
+ var inputIconCSSDeclaration = {
37762
+ content: '',
37763
+ display: 'block',
37764
+ position: 'absolute',
37765
+ right: 0,
37766
+ top: 0,
37767
+ bottom: 0,
37768
+ width: `${iconSize}px`,
37769
+ boxSizing: 'content-box',
37770
+ // Offset the icon inwards by the padding.
37771
+ margin: css.variable(Var.Padding,),
37772
+ marginLeft: 0,
37773
+ border: 'none',
37774
+ pointerEvents: 'none',
37775
+ backgroundRepeat: 'no-repeat',
37776
+ backgroundSize: `${iconSize}px`,
37777
+ maskRepeat: 'no-repeat',
37778
+ maskSize: `${iconSize}px`,
37779
+ backgroundColor: css.variable(Var.IconColor,),
37780
+ };
37355
37781
  var passwordManagerIgnoreDataProps = {
37356
37782
  // 1Password
37357
37783
  'data-1p-ignore': true,
37358
37784
  // LastPass
37359
37785
  'data-lpignore': true,
37360
- };
37361
- var sensibleInputDefaults = {
37786
+ // Dashlane
37787
+ // https://support.dashlane.com/hc/en-us/articles/4420122792594-Optimize-your-web-forms-for-Dashlane-Autofill
37788
+ 'data-form-type': 'other',
37789
+ // autocomplete="off" is a generic property that disables autofilling. It
37790
+ // is not always respected by some browsers or password managers.
37362
37791
  autocomplete: 'off',
37363
37792
  };
37364
37793
  var PlainTextInput = /* @__PURE__ */ React4.forwardRef(function FormPlainTextInput(props, ref,) {
37365
37794
  const {
37366
- style,
37367
- inputName,
37368
- type,
37369
- required,
37370
37795
  autoFocus,
37371
- placeholder,
37372
- value,
37373
- min,
37796
+ className: className2,
37797
+ inputName,
37374
37798
  max,
37799
+ min,
37800
+ placeholder,
37801
+ required,
37375
37802
  step: step2,
37803
+ style,
37804
+ type,
37805
+ // We use a defaultValue instead of a value so that the input remains
37806
+ // uncontrolled by React. This is important because we want the user
37807
+ // to be able to provide an initial value in the property panel, and for
37808
+ // the value to be editable by the user in the preview.
37809
+ defaultValue,
37810
+ autofillEnabled,
37811
+ onChange,
37812
+ onBlur,
37813
+ onInvalid,
37814
+ onFocus,
37815
+ onValid,
37376
37816
  ...rest
37377
37817
  } = props;
37378
- const dataProps = {
37379
- ...sensibleInputDefaults,
37380
- ...passwordManagerIgnoreDataProps,
37381
- };
37382
- switch (type) {
37383
- case 'hidden':
37384
- return /* @__PURE__ */ jsx(motion.input, {
37385
- type: 'hidden',
37386
- name: inputName,
37387
- value,
37388
- },);
37389
- case 'textarea':
37390
- return /* @__PURE__ */ jsx(motion.div, {
37391
- ref,
37392
- style,
37393
- ...rest,
37394
- className: cx(inputWrapperClassName, props.className,),
37395
- children: /* @__PURE__ */ jsx(motion.textarea, {
37396
- id: inputName,
37397
- ...dataProps,
37398
- required,
37399
- autoFocus,
37400
- name: inputName,
37401
- placeholder,
37402
- className: inputClassName,
37403
- value,
37404
- },),
37405
- },);
37406
- default:
37407
- return /* @__PURE__ */ jsx(motion.div, {
37408
- ref,
37409
- style,
37410
- ...rest,
37411
- className: cx(inputWrapperClassName, props.className,),
37412
- children: /* @__PURE__ */ jsx(motion.input, {
37413
- id: inputName,
37414
- ...dataProps,
37415
- type,
37416
- required,
37417
- autoFocus,
37418
- name: inputName,
37419
- placeholder,
37420
- className: inputClassName,
37421
- value,
37422
- min,
37423
- max,
37424
- step: step2,
37425
- },),
37426
- },);
37818
+ const [hasValue, setHasValue,] = React4.useState(!!defaultValue,);
37819
+ const handleChange = React4.useCallback((e) => {
37820
+ const newValue = e.target.value;
37821
+ onChange == null ? void 0 : onChange(e,);
37822
+ setHasValue(!!newValue,);
37823
+ }, [onChange,],);
37824
+ const eventHandlers = useCustomValidity(onValid, onInvalid, handleChange, onBlur, onFocus,);
37825
+ useEffect(() => {
37826
+ setHasValue(!!defaultValue,);
37827
+ }, [defaultValue,],);
37828
+ const dataProps = autofillEnabled === false ? passwordManagerIgnoreDataProps : void 0;
37829
+ if (type === 'hidden') {
37830
+ return /* @__PURE__ */ jsx(motion.input, {
37831
+ type: 'hidden',
37832
+ name: inputName,
37833
+ defaultValue,
37834
+ },);
37427
37835
  }
37836
+ return /* @__PURE__ */ jsx(motion.div, {
37837
+ ref,
37838
+ style,
37839
+ className: cx(textInputWrapperClassName, inputWrapperClassName, className2,),
37840
+ ...rest,
37841
+ children: type === 'textarea'
37842
+ ? /* @__PURE__ */ createElement(motion.textarea, {
37843
+ ...dataProps,
37844
+ ...eventHandlers,
37845
+ key: defaultValue,
37846
+ required,
37847
+ autoFocus,
37848
+ name: inputName,
37849
+ placeholder,
37850
+ className: inputClassName,
37851
+ defaultValue,
37852
+ },)
37853
+ : /* @__PURE__ */ createElement(motion.input, {
37854
+ ...dataProps,
37855
+ ...eventHandlers,
37856
+ key: defaultValue,
37857
+ type,
37858
+ required,
37859
+ autoFocus,
37860
+ name: inputName,
37861
+ placeholder,
37862
+ className: cx(inputClassName, !hasValue && emptyValueClassName,),
37863
+ defaultValue,
37864
+ min,
37865
+ max,
37866
+ step: step2,
37867
+ },),
37868
+ },);
37428
37869
  },);
37429
- var FormPlainTextInput2 =
37430
- /* @__PURE__ */ (() =>
37431
- withCSS(PlainTextInput, [
37432
- ...sharedInputCSS,
37433
- ...focusInputCSS,
37434
- ...inputBorderCSS,
37435
- `.${inputClassName}::placeholder {
37436
- color: var(${'--framer-input-placeholder-color'});
37437
- }`,
37438
- `textarea.${inputClassName} {
37439
- resize: var(${'--framer-textarea-resize'});
37440
- min-height: var(${'--framer-textarea-min-height'});
37441
- }`,
37442
- ],))();
37870
+ var iconSize2 = 16;
37871
+ var textInputWrapperClassName = 'framer-form-text-input';
37872
+ var defaultTextareaResizerIcon =
37873
+ 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path d="m1.5 8 7-7M9 5.5l-3 3" stroke="%23999" stroke-width="1.5" stroke-linecap="round"></path></svg>';
37874
+ var defaultDateIconMaskImage =
37875
+ 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="rgb(153, 153, 153)" d="M3 5a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v2H3Z" opacity=".3"/><path fill="transparent" stroke="rgb(153, 153, 153)" stroke-width="1.5" d="M3.25 5.25a2 2 0 0 1 2-2h5.5a2 2 0 0 1 2 2v5.5a2 2 0 0 1-2 2h-5.5a2 2 0 0 1-2-2ZM3 6.75h9.5"/></svg>';
37876
+ var defaultTimeIconMaskImage =
37877
+ 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="transparent" stroke="rgb(153, 153, 153)" stroke-width="1.5" d="M2.5 8a5.5 5.5 0 1 1 11 0 5.5 5.5 0 1 1-11 0Z"/><path fill="transparent" stroke="rgb(153, 153, 153)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M7.75 8.25v-3m0 3h2"/></svg>';
37878
+ var styles = /* @__PURE__ */ (() => [
37879
+ ...sharedInputCSS,
37880
+ ...inputBorderCSS,
37881
+ ...inputWrapperCSS,
37882
+ css(`.${inputWrapperClassName}`, {
37883
+ boxShadow: css.variable('--framer-input-box-shadow',/* BoxShadow */
37884
+ ),
37885
+ borderTopLeftRadius: css.variable('--framer-input-border-radius-top-left',/* BorderRadiusTopLeft */
37886
+ ),
37887
+ borderTopRightRadius: css.variable('--framer-input-border-radius-top-right',/* BorderRadiusTopRight */
37888
+ ),
37889
+ borderBottomRightRadius: css.variable('--framer-input-border-radius-bottom-right',/* BorderRadiusBottomRight */
37890
+ ),
37891
+ borderBottomLeftRadius: css.variable('--framer-input-border-radius-bottom-left',/* BorderRadiusBottomLeft */
37892
+ ),
37893
+ background: css.variable('--framer-input-background',/* Background */
37894
+ ),
37895
+ transition: css.variable('--framer-input-focused-transition',/* FocusedTransition */
37896
+ ),
37897
+ transitionProperty: 'background, box-shadow',
37898
+ },),
37899
+ css(`.${textInputWrapperClassName} .${inputClassName}::placeholder`, {
37900
+ color: css.variable('--framer-input-placeholder-color',/* PlaceholderColor */
37901
+ ),
37902
+ },),
37903
+ css(`.${textInputWrapperClassName} .${inputClassName}[type="date"], .${textInputWrapperClassName} .${inputClassName}[type="time"]`, {
37904
+ '-webkit-appearance': 'none',
37905
+ appearance: 'none',
37906
+ },),
37907
+ // iOS only fix for centered date & time inputs: https://github.com/tailwindlabs/tailwindcss-forms/pull/144
37908
+ css(`.${textInputWrapperClassName} .${inputClassName}::-webkit-date-and-time-value`, {
37909
+ textAlign: 'start',
37910
+ },),
37911
+ css(`.${textInputWrapperClassName} textarea`, {
37912
+ display: 'flex',
37913
+ resize: css.variable('--framer-textarea-resize',/* Resize */
37914
+ ),
37915
+ overflowY: 'scroll',
37916
+ minHeight: 'inherit',
37917
+ maxHeight: 'inherit',
37918
+ whiteSpace: 'break-spaces',
37919
+ },),
37920
+ // This targets the resize handle in WebKit browsers. Unfortunately, it is not
37921
+ // possible in CSS to target the resize handle in Firefox, so FF will always
37922
+ // show the native resize handle.
37923
+ css(`.${textInputWrapperClassName} textarea::-webkit-resizer`, {
37924
+ background: `no-repeat url('${defaultTextareaResizerIcon}')`,
37925
+ },),
37926
+ css(`.${textInputWrapperClassName} textarea::-webkit-scrollbar`, {
37927
+ cursor: 'pointer',
37928
+ background: 'transparent',
37929
+ },),
37930
+ css(`.${textInputWrapperClassName} textarea::-webkit-scrollbar-thumb:window-inactive`, {
37931
+ opacity: 0,
37932
+ },),
37933
+ css(`.${textInputWrapperClassName} textarea::-webkit-scrollbar-corner`, {
37934
+ background: 'none',
37935
+ backgroundColor: 'transparent',
37936
+ outline: 'none',
37937
+ },),
37938
+ css(`.${textInputWrapperClassName} .${inputClassName}.${emptyValueClassName}::-webkit-datetime-edit`, {
37939
+ color: css.variable('--framer-input-placeholder-color',/* PlaceholderColor */
37940
+ ),
37941
+ // This tells safari to use the color for the shadow dom elements.
37942
+ '-webkit-text-fill-color': css.variable('--framer-input-placeholder-color',/* PlaceholderColor */
37943
+ ),
37944
+ },),
37945
+ css(
37946
+ `.${textInputWrapperClassName} .${inputClassName}[type="date"]::before, .${textInputWrapperClassName} .${inputClassName}[type="time"]::before`,
37947
+ {
37948
+ ...inputIconCSSDeclaration,
37949
+ paddingLeft: `${iconSpacing}px`,
37950
+ maskPosition: `${iconSpacing}px center`,
37951
+ backgroundPosition: `${iconSpacing}px center`,
37952
+ },
37953
+ ),
37954
+ css(`.${textInputWrapperClassName} .${inputClassName}[type="date"]::before`, {
37955
+ maskImage: css.variable('--framer-input-icon-mask-image', `url('${defaultDateIconMaskImage}')`,),
37956
+ backgroundImage: css.variable('--framer-input-icon-image',/* IconBackgroundImage */
37957
+ ),
37958
+ },),
37959
+ css(`.${textInputWrapperClassName} .${inputClassName}[type="time"]::before`, {
37960
+ maskImage: css.variable('--framer-input-icon-mask-image', `url('${defaultTimeIconMaskImage}')`,),
37961
+ backgroundImage: css.variable('--framer-input-icon-image',/* IconBackgroundImage */
37962
+ ),
37963
+ },),
37964
+ // Hide the native date picker icon, but still allow the user to click it.
37965
+ css(`.${textInputWrapperClassName} .${inputClassName}::-webkit-calendar-picker-indicator`, {
37966
+ opacity: 0,
37967
+ padding: css.variable('--framer-input-padding',/* Padding */
37968
+ ),
37969
+ paddingRight: 0,
37970
+ paddingLeft: `${iconSpacing}px`,
37971
+ width: `${iconSize2}px`,
37972
+ height: `${iconSize2}px`,
37973
+ },),
37974
+ css(`.${textInputWrapperClassName}:focus-within, .${textInputWrapperClassName}.${forcedFocusClassName}`, {
37975
+ boxShadow: css.variable('--framer-input-focused-box-shadow', '--framer-input-box-shadow',/* BoxShadow */
37976
+ ),
37977
+ background: css.variable('--framer-input-focused-background', '--framer-input-background',/* Background */
37978
+ ),
37979
+ },),
37980
+ css(`.${textInputWrapperClassName}:focus-within::after, .${textInputWrapperClassName}.${forcedFocusClassName}::after`, {
37981
+ borderColor: css.variable('--framer-input-focused-border-color', '--framer-input-border-color',/* BorderColor */
37982
+ ),
37983
+ borderStyle: css.variable('--framer-input-focused-border-style', '--framer-input-border-style',/* BorderStyle */
37984
+ ),
37985
+ borderWidth: css.variable('--framer-input-focused-border-width', inputBorderAllSides,),
37986
+ },),
37987
+ ])();
37988
+ var FormPlainTextInput2 = /* @__PURE__ */ withCSS(PlainTextInput, styles,);
37989
+ var className = 'framer-form-boolean-input';
37990
+ var BooleanInput = /* @__PURE__ */ React4.forwardRef(function FormPlainTextInput3(props, ref,) {
37991
+ const {
37992
+ inputName,
37993
+ type = 'checkbox',
37994
+ defaultChecked,
37995
+ onValid,
37996
+ ...rest
37997
+ } = props;
37998
+ const isCanvas = useIsOnFramerCanvas();
37999
+ const attributes = isCanvas
38000
+ ? {
38001
+ checked: defaultChecked,
38002
+ }
38003
+ : {
38004
+ defaultChecked,
38005
+ };
38006
+ const eventHandlers = useCustomValidity(onValid, props.onInvalid, props.onChange, props.onBlur, props.onFocus,);
38007
+ return /* @__PURE__ */ jsx(motion.input, {
38008
+ ...rest,
38009
+ ...attributes,
38010
+ ...eventHandlers,
38011
+ readOnly: isCanvas,
38012
+ ref,
38013
+ type,
38014
+ name: inputName,
38015
+ className: cx(className, props.className,),
38016
+ },);
38017
+ },);
38018
+ var defaultCheckedIcon =
38019
+ 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M 4 8 L 6.5 10.5 L 11.5 5.5" fill="transparent" stroke-width="2" stroke="rgb(255, 255, 255)" stroke-linecap="round" stroke-linejoin="round"></path></svg>';
38020
+ var borderRadius =
38021
+ `var(${'--framer-input-border-radius-top-left'}) var(${'--framer-input-border-radius-top-right'}) var(${'--framer-input-border-radius-bottom-right'}) var(${'--framer-input-border-radius-bottom-left'})`;
38022
+ var styles2 = /* @__PURE__ */ (() => [
38023
+ css(`.${className}`, {
38024
+ '-webkit-appearance': 'none',
38025
+ // background-color: #fff; fixes a bug on iOS where the checkbox shows
38026
+ // through the appearance: none;
38027
+ alignItems: 'center',
38028
+ appearance: 'none',
38029
+ backgroundColor: '#fff',
38030
+ background: '--framer-input-background',
38031
+ borderRadius,
38032
+ boxShadow: '--framer-input-box-shadow',
38033
+ display: 'flex',
38034
+ justifyContent: 'center',
38035
+ margin: 0,
38036
+ overflow: 'hidden',
38037
+ position: 'relative',
38038
+ transition: '--framer-input-boolean-checked-transition',
38039
+ transitionProperty: 'box-shadow, background',
38040
+ },),
38041
+ // The after element styles the border of the checkbox to conform to
38042
+ // framer's inset border model.
38043
+ css(`.${className}::after`, {
38044
+ background: 'transparent',
38045
+ borderColor: css.variable('--framer-input-border-color', 'transparent',),
38046
+ borderRadius,
38047
+ borderStyle: '--framer-input-border-style',
38048
+ borderWidth: inputBorderAllSides,
38049
+ boxSizing: 'border-box',
38050
+ content: '',
38051
+ display: 'block',
38052
+ inset: 0,
38053
+ position: 'absolute',
38054
+ transition: '--framer-input-boolean-checked-transition',
38055
+ transitionProperty: 'border-color, border-width, border-style',
38056
+ },),
38057
+ // The before element is used to display the check mark icon. It is
38058
+ // faded in when the input is checked.
38059
+ css(`.${className}::before`, {
38060
+ ...inputIconCSSDeclaration,
38061
+ backgroundPosition: 'center',
38062
+ backgroundSize: 'contain',
38063
+ maskPosition: 'center',
38064
+ maskSize: 'contain',
38065
+ height: '100%',
38066
+ opacity: 0,
38067
+ transition: '--framer-input-boolean-checked-transition',
38068
+ transitionProperty: 'opacity',
38069
+ width: '100%',
38070
+ },),
38071
+ // The BooleanInput component shows an svg check mark icon whenever an
38072
+ // image url isn't provided. That's not an intuitive system for radios
38073
+ // however, where we never want to show the default check mark.
38074
+ css(`.${className}[type="checkbox"]::before`, {
38075
+ backgroundImage: css.variable('--framer-input-icon-image',/* IconBackgroundImage */
38076
+ ),
38077
+ maskImage: css.variable('--framer-input-icon-mask-image', `url('${defaultCheckedIcon}')`,),
38078
+ },),
38079
+ css(`.${className}[type="radio"]::before`, {
38080
+ backgroundImage: css.variable('--framer-input-icon-image',/* IconBackgroundImage */
38081
+ ),
38082
+ maskImage: css.variable('--framer-input-icon-mask-image',/* IconMaskImage */
38083
+ ),
38084
+ },),
38085
+ css(`.${className}:checked, .${className}.${forcedCheckedClassName}`, {
38086
+ // When not set, the styles when checked shouldn't clear the default
38087
+ // styles.
38088
+ backgroundColor: css.variable('--framer-input-boolean-checked-background', '--framer-input-background',/* Background */
38089
+ ),
38090
+ boxShadow: css.variable('--framer-input-boolean-checked-box-shadow', '--framer-input-box-shadow',/* BoxShadow */
38091
+ ),
38092
+ },),
38093
+ css(`.${className}:checked::before, .${className}.${forcedCheckedClassName}::before`, {
38094
+ opacity: 1,
38095
+ },),
38096
+ css(`.${className}:checked::after, .${className}.${forcedCheckedClassName}::after`, {
38097
+ // When not set, the styles when checked shouldn't clear the default
38098
+ // styles.
38099
+ borderColor: css.variable('--framer-input-boolean-checked-border-color', '--framer-input-border-color', 'transparent',),
38100
+ borderStyle: css.variable('--framer-input-boolean-checked-border-style', '--framer-input-border-style', 'solid',),
38101
+ borderWidth: css.variable('--framer-input-boolean-checked-border-width', inputBorderAllSides,),
38102
+ },),
38103
+ css(`.${className}:focus, .${className}.${forcedFocusClassName}`, {
38104
+ backgroundColor: css.variable('--framer-input-focused-background', '--framer-input-background',/* Background */
38105
+ ),
38106
+ boxShadow: css.variable('--framer-input-focused-box-shadow', '--framer-input-box-shadow',/* BoxShadow */
38107
+ ),
38108
+ },),
38109
+ css(`.${className}:focus-visible`, {
38110
+ outline: 'none',
38111
+ },),
38112
+ css(`.${className}:focus::after, .${className}.${forcedFocusClassName}::after`, {
38113
+ // When not set, the styles when focused shouldn't clear the checked
38114
+ // styles.
38115
+ borderColor: css.variable('--framer-input-focused-border-color', '--framer-input-border-color', 'transparent',),
38116
+ borderStyle: css.variable('--framer-input-focused-border-style', '--framer-input-border-style', 'solid',),
38117
+ borderWidth: css.variable('--framer-input-focused-border-width', inputBorderAllSides,),
38118
+ },),
38119
+ css(`.${className}:focus:checked`, {
38120
+ backgroundColor: css.variable(
38121
+ '--framer-input-focused-background',
38122
+ '--framer-input-boolean-checked-background',
38123
+ '--framer-input-background',
38124
+ /* Background */
38125
+ ),
38126
+ boxShadow: css.variable(
38127
+ '--framer-input-focused-box-shadow',
38128
+ '--framer-input-boolean-checked-box-shadow',
38129
+ '--framer-input-box-shadow',
38130
+ /* BoxShadow */
38131
+ ),
38132
+ },),
38133
+ css(`.${className}:focus:checked::after`, {
38134
+ borderStyle: css.variable(
38135
+ '--framer-input-focused-border-style',
38136
+ '--framer-input-boolean-checked-border-style',
38137
+ '--framer-input-border-style',
38138
+ 'solid',
38139
+ ),
38140
+ borderWidth: css.variable('--framer-input-focused-border-width', '--framer-input-boolean-checked-border-width', inputBorderAllSides,),
38141
+ },),
38142
+ ])();
38143
+ var FormBooleanInput = /* @__PURE__ */ withCSS(BooleanInput, styles2,);
37443
38144
  var Select = /* @__PURE__ */ React4.forwardRef(function Select2(props, measureRef,) {
37444
38145
  const {
37445
- style,
38146
+ autoFocus,
38147
+ className: className2,
37446
38148
  inputName,
37447
38149
  required,
37448
- autoFocus,
38150
+ defaultValue,
37449
38151
  selectOptions,
37450
- selectDefaultValue,
38152
+ style,
38153
+ onValid,
38154
+ onChange,
38155
+ onBlur,
38156
+ onInvalid,
38157
+ onFocus,
38158
+ ...rest
37451
38159
  } = props;
38160
+ const eventHandlers = useCustomValidity(onValid, onInvalid, onChange, onBlur, onFocus,);
38161
+ const key7 = Array.isArray(defaultValue,) ? defaultValue[0] : defaultValue;
37452
38162
  return /* @__PURE__ */ jsx(motion.div, {
37453
38163
  ref: measureRef,
37454
38164
  style,
37455
- className: cx(inputWrapperClassName, selectWrapperClassName, props.className,),
38165
+ className: cx(inputWrapperClassName, selectWrapperClassName, className2,),
38166
+ ...rest,
37456
38167
  children: /* @__PURE__ */ jsx(motion.select, {
37457
- id: inputName,
37458
38168
  name: inputName,
37459
38169
  autoFocus,
37460
38170
  required,
37461
38171
  className: inputClassName,
37462
- defaultValue: selectDefaultValue,
38172
+ defaultValue,
38173
+ ...eventHandlers,
37463
38174
  children: selectOptions == null ? void 0 : selectOptions.map((option, index,) => {
37464
38175
  switch (option.type) {
37465
38176
  case 'divider':
@@ -37472,38 +38183,84 @@ var Select = /* @__PURE__ */ React4.forwardRef(function Select2(props, measureRe
37472
38183
  }, index,);
37473
38184
  }
37474
38185
  },),
37475
- }, selectDefaultValue,),
38186
+ }, key7,),
37476
38187
  },);
37477
38188
  },);
37478
38189
  var selectWrapperClassName = 'framer-form-select-wrapper';
37479
38190
  var selectArrowSize = 16;
37480
- var FormSelect = /* @__PURE__ */ (() =>
37481
- withCSS(Select, [
37482
- ...sharedInputCSS,
37483
- ...focusInputCSS,
37484
- ...inputBorderCSS,
37485
- `select.${inputClassName} {
37486
- appearance: none;
37487
- -webkit-appearance: none;
37488
- padding-right: calc(var(${'--framer-input-padding'}) * 2 + ${selectArrowSize}px);
37489
- }`,
37490
- `.${selectWrapperClassName}::before {
37491
- content: "";
37492
- display: block;
37493
- position: absolute;
37494
- right: 0;
37495
- height: 100%;
37496
- width: 16px;
37497
- box-sizing: content-box;
37498
- padding: 0 var(${'--framer-input-padding'});
37499
- position: absolute;
37500
- pointer-events: none;
37501
- background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="${selectArrowSize}" height="${selectArrowSize}"><path d="M 3.5 6 L 8 10.5 L 12.5 6" fill="transparent" stroke-width="1.5" stroke="rgb(153, 153, 153)" stroke-linecap="round" stroke-linejoin="round"></path></svg>');
37502
- background-repeat: no-repeat;
37503
- background-position: center center;
37504
- border: none;
37505
- }`,
37506
- ],))();
38191
+ var defaultSelectCaretMaskImage =
38192
+ /* @__PURE__ */ (() =>
38193
+ `data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="${selectArrowSize}" height="${selectArrowSize}"><path d="M 3.5 6 L 8 10.5 L 12.5 6" fill="transparent" stroke-width="1.5" stroke="rgb(153, 153, 153)" stroke-linecap="round" stroke-linejoin="round"></path></svg>`)();
38194
+ var styles3 = /* @__PURE__ */ (() => [
38195
+ ...sharedInputCSS,
38196
+ ...inputBorderCSS,
38197
+ ...inputWrapperCSS,
38198
+ css(`.${selectWrapperClassName}`, {
38199
+ // First we use the complete padding string, which may be any valid
38200
+ // padding string (10px, 10px 10px, 10px 10px 10px, or 10px 10px
38201
+ // 10px 10px), and use it to set only the right padding. This pushes
38202
+ // the actual select away from the arrow by 1x.
38203
+ padding: css.variable('--framer-input-padding',/* Padding */
38204
+ ),
38205
+ paddingTop: 0,
38206
+ paddingBottom: 0,
38207
+ paddingLeft: 0,
38208
+ background: css.variable('--framer-input-background',/* Background */
38209
+ ),
38210
+ borderTopLeftRadius: css.variable('--framer-input-border-radius-top-left',/* BorderRadiusTopLeft */
38211
+ ),
38212
+ borderTopRightRadius: css.variable('--framer-input-border-radius-top-right',/* BorderRadiusTopRight */
38213
+ ),
38214
+ borderBottomRightRadius: css.variable('--framer-input-border-radius-bottom-right',/* BorderRadiusBottomRight */
38215
+ ),
38216
+ borderBottomLeftRadius: css.variable('--framer-input-border-radius-bottom-left',/* BorderRadiusBottomLeft */
38217
+ ),
38218
+ boxShadow: css.variable('--framer-input-box-shadow',/* BoxShadow */
38219
+ ),
38220
+ transition: css.variable('--framer-input-focused-transition',/* FocusedTransition */
38221
+ ),
38222
+ transitionProperty: 'background, box-shadow',
38223
+ },),
38224
+ css(`.${selectWrapperClassName} select`, {
38225
+ appearance: 'none',
38226
+ '-webkit-appearance': 'none',
38227
+ // Then we use the complete padding string again as the margin for
38228
+ // the select. This moves the select 2x the padding right away from
38229
+ // the arrow.
38230
+ padding: css.variable('--framer-input-padding',/* Padding */
38231
+ ),
38232
+ // Overwrite the values inherited from .${inputClassName}. On a
38233
+ // select, these values are on the wrapper.
38234
+ background: 'transparent',
38235
+ },),
38236
+ css(`.${selectWrapperClassName}::before`, {
38237
+ ...inputIconCSSDeclaration,
38238
+ paddingLeft: `${iconSpacing}px`,
38239
+ backgroundPosition: `${iconSpacing}px center`,
38240
+ maskPosition: `${iconSpacing}px center`,
38241
+ backgroundImage: css.variable('--framer-input-icon-image',/* IconBackgroundImage */
38242
+ ),
38243
+ maskImage: css.variable('--framer-input-icon-mask-image', `url('${defaultSelectCaretMaskImage}')`,),
38244
+ },),
38245
+ css(`.${selectWrapperClassName} select:required:invalid`, {
38246
+ color: css.variable('--framer-input-invalid-text-color',/* InvalidTextColor */
38247
+ ),
38248
+ },),
38249
+ css(`.${selectWrapperClassName}:focus-within, .${selectWrapperClassName}.${forcedFocusClassName}`, {
38250
+ background: css.variable('--framer-input-focused-background', '--framer-input-background',/* Background */
38251
+ ),
38252
+ boxShadow: css.variable('--framer-input-focused-box-shadow', '--framer-input-box-shadow',/* BoxShadow */
38253
+ ),
38254
+ },),
38255
+ css(`.${selectWrapperClassName}:focus-within::after, .${selectWrapperClassName}.${forcedFocusClassName}::after`, {
38256
+ borderColor: css.variable('--framer-input-focused-border-color', '--framer-input-border-color',/* BorderColor */
38257
+ ),
38258
+ borderStyle: css.variable('--framer-input-focused-border-style', '--framer-input-border-style',/* BorderStyle */
38259
+ ),
38260
+ borderWidth: css.variable('--framer-input-focused-border-width', inputBorderAllSides,),
38261
+ },),
38262
+ ])();
38263
+ var FormSelect = /* @__PURE__ */ withCSS(Select, styles3,);
37507
38264
  var Image2 = /* @__PURE__ */ React4.forwardRef(function Image3(props, ref,) {
37508
38265
  const {
37509
38266
  background,
@@ -37610,7 +38367,7 @@ function convertCodeComponentContainer(componentDefinitionProvider, node, conver
37610
38367
  ),
37611
38368
  ];
37612
38369
  }
37613
- var CodeComponentPresentation = class {
38370
+ var CodeComponentPresentation = /*#__PURE__*/ class {
37614
38371
  constructor(id3, componentIdentifier, packageVersion, props, children, codeOverrideIdentifier,) {
37615
38372
  this.id = id3;
37616
38373
  this.componentIdentifier = componentIdentifier;
@@ -37713,7 +38470,7 @@ var DeprecatedRichText = /* @__PURE__ */ React2.forwardRef(function Text(props,
37713
38470
  top,
37714
38471
  bottom,
37715
38472
  center,
37716
- className,
38473
+ className: className2,
37717
38474
  stylesPresetsClassName,
37718
38475
  visible = true,
37719
38476
  opacity,
@@ -37854,7 +38611,7 @@ var DeprecatedRichText = /* @__PURE__ */ React2.forwardRef(function Text(props,
37854
38611
  'data-framer-name': name,
37855
38612
  'data-framer-component-type': 'DeprecatedRichText',
37856
38613
  'data-center': center,
37857
- className: cx(className, stylesPresetsClassName, richTextWrapperClassName,),
38614
+ className: cx(className2, stylesPresetsClassName, richTextWrapperClassName,),
37858
38615
  transformTemplate: template,
37859
38616
  dangerouslySetInnerHTML: {
37860
38617
  __html: innerHTMLWithReplacedFramerPageLinks,
@@ -38322,7 +39079,7 @@ var ImagePatternElement = ({
38322
39079
  },);
38323
39080
  };
38324
39081
  var useDOM = /* @__PURE__ */ isBrowser2();
38325
- var SharedSVGEntry = class {
39082
+ var SharedSVGEntry = /*#__PURE__*/ class {
38326
39083
  constructor(id3, svg, innerHTML, viewBox, count = 0,) {
38327
39084
  this.id = id3;
38328
39085
  this.svg = svg;
@@ -38331,7 +39088,7 @@ var SharedSVGEntry = class {
38331
39088
  this.count = count;
38332
39089
  }
38333
39090
  };
38334
- var SharedSVGManager = class {
39091
+ var SharedSVGManager = /*#__PURE__*/ class {
38335
39092
  constructor() {
38336
39093
  __publicField(this, 'entries', /* @__PURE__ */ new Map(),);
38337
39094
  }
@@ -38730,7 +39487,7 @@ var SVGComponent = /* @__PURE__ */ (() => {
38730
39487
  title,
38731
39488
  description,
38732
39489
  layoutId,
38733
- className,
39490
+ className: className2,
38734
39491
  variants,
38735
39492
  withExternalLayout,
38736
39493
  innerRef,
@@ -38896,7 +39653,7 @@ var SVGComponent = /* @__PURE__ */ (() => {
38896
39653
  id: id3,
38897
39654
  ref: innerRef,
38898
39655
  style: outerStyle,
38899
- className,
39656
+ className: className2,
38900
39657
  variants,
38901
39658
  tabIndex: this.props.tabIndex,
38902
39659
  role: title || description ? 'img' : void 0,
@@ -39040,7 +39797,7 @@ var TextComponent = /* @__PURE__ */ (() => {
39040
39797
  opacity,
39041
39798
  id: id3,
39042
39799
  layoutId,
39043
- className,
39800
+ className: className2,
39044
39801
  transition,
39045
39802
  variants,
39046
39803
  name,
@@ -39131,7 +39888,7 @@ var TextComponent = /* @__PURE__ */ (() => {
39131
39888
  __html: rawHTML,
39132
39889
  },
39133
39890
  'data-center': this.props.center,
39134
- className: cx(className, matchesCurrentRoute && 'isCurrent',),
39891
+ className: cx(className2, matchesCurrentRoute && 'isCurrent',),
39135
39892
  transition,
39136
39893
  variants,
39137
39894
  ref: this.setElement,
@@ -39324,7 +40081,7 @@ function getTabIndexProps(tabIndex,) {
39324
40081
  };
39325
40082
  }
39326
40083
  var keys22 = /* @__PURE__ */ new Map();
39327
- var InternalID = class {
40084
+ var InternalID = /*#__PURE__*/ class {
39328
40085
  constructor(id3,) {
39329
40086
  this.id = id3;
39330
40087
  __publicField(this, '_link', null,);
@@ -39355,7 +40112,7 @@ var InternalID = class {
39355
40112
  }
39356
40113
  };
39357
40114
  var PathSegmentOuter = /* @__PURE__ */ (() => {
39358
- const _PathSegment = class {
40115
+ const _PathSegment = /*#__PURE__*/ class {
39359
40116
  constructor(value,) {
39360
40117
  __publicField(this, '__class', 'PathSegment',);
39361
40118
  __publicField(this, 'x', 0,);
@@ -39610,7 +40367,7 @@ function transformString(transform2,) {
39610
40367
  }
39611
40368
  return result;
39612
40369
  }
39613
- var LinearGradientElement = class extends Component {
40370
+ var LinearGradientElement = /*#__PURE__*/ class extends Component {
39614
40371
  render() {
39615
40372
  const {
39616
40373
  id: id3,
@@ -39636,7 +40393,7 @@ var LinearGradientElement = class extends Component {
39636
40393
  },);
39637
40394
  }
39638
40395
  };
39639
- var RadialGradientElement = class extends Component {
40396
+ var RadialGradientElement = /*#__PURE__*/ class extends Component {
39640
40397
  render() {
39641
40398
  const {
39642
40399
  centerAnchorX,
@@ -39664,7 +40421,7 @@ var RadialGradientElement = class extends Component {
39664
40421
  },);
39665
40422
  }
39666
40423
  };
39667
- var SVGRoot = class extends Component {
40424
+ var SVGRoot = /*#__PURE__*/ class extends Component {
39668
40425
  render() {
39669
40426
  const {
39670
40427
  children,
@@ -40359,7 +41116,7 @@ function loadJSON(url,) {
40359
41116
  },).then((res) => res.json());
40360
41117
  }
40361
41118
  function inspectObjectType(item,) {
40362
- let className;
41119
+ let className2;
40363
41120
  if (
40364
41121
  (item.constructor !== null ? item.constructor.name : void 0) !== null &&
40365
41122
  (item.constructor !== null ? item.constructor.name : void 0) !== 'Object'
@@ -40378,15 +41135,15 @@ function inspectObjectType(item,) {
40378
41135
  return null;
40379
41136
  };
40380
41137
  if (item.toString) {
40381
- className = extract(item.toString(),);
40382
- if (className) {
40383
- return className;
41138
+ className2 = extract(item.toString(),);
41139
+ if (className2) {
41140
+ return className2;
40384
41141
  }
40385
41142
  }
40386
41143
  if (item.constructor !== null ? item.constructor.toString : void 0) {
40387
- className = extract(item.constructor !== null ? item.constructor.toString() : void 0,);
40388
- if (className) {
40389
- return className.replace('Constructor', '',);
41144
+ className2 = extract(item.constructor !== null ? item.constructor.toString() : void 0,);
41145
+ if (className2) {
41146
+ return className2.replace('Constructor', '',);
40390
41147
  }
40391
41148
  }
40392
41149
  return 'Object';
@@ -40526,7 +41283,7 @@ var package_default = {
40526
41283
  yargs: '^17.6.2',
40527
41284
  },
40528
41285
  peerDependencies: {
40529
- 'framer-motion': '11.2.6',
41286
+ 'framer-motion': '11.2.10',
40530
41287
  react: '^18.2.0',
40531
41288
  'react-dom': '^18.2.0',
40532
41289
  },
@@ -40668,6 +41425,7 @@ export {
40668
41425
  FontSourceNames,
40669
41426
  fontStore,
40670
41427
  forceLayerBackingWithCSSProperties,
41428
+ FormBooleanInput,
40671
41429
  FormContainer,
40672
41430
  FormPlainTextInput2 as FormPlainTextInput,
40673
41431
  FormSelect,
@@ -40786,6 +41544,7 @@ export {
40786
41544
  PropertyOverrides,
40787
41545
  PropertyStore,
40788
41546
  propsForLink,
41547
+ pushLoadMoreHistory,
40789
41548
  px,
40790
41549
  QueryEngine,
40791
41550
  RadialGradient,
@@ -40843,7 +41602,6 @@ export {
40843
41602
  useAnimationControls,
40844
41603
  useAnimationFrame,
40845
41604
  useBreakpointVariants,
40846
- useCollectionListPaginationInfo,
40847
41605
  useComponentViewport,
40848
41606
  useConstant2 as useConstant,
40849
41607
  useCurrentPathVariables,
@@ -40921,6 +41679,7 @@ export {
40921
41679
  withCSS,
40922
41680
  withFX,
40923
41681
  withGeneratedLayoutId,
41682
+ withInfiniteScroll,
40924
41683
  withMappedReactProps,
40925
41684
  withMeasuredSize,
40926
41685
  WithNavigator,