unframer 2.5.3 → 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
@@ -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();
@@ -1606,7 +1606,7 @@ function flushKeyframeResolvers() {
1606
1606
  readAllKeyframes();
1607
1607
  measureAllKeyframes();
1608
1608
  }
1609
- var KeyframeResolver = class {
1609
+ var KeyframeResolver = /*#__PURE__*/ class {
1610
1610
  constructor(unresolvedKeyframes, onComplete, name, motionValue2, element, isAsync = false,) {
1611
1611
  this.isComplete = false;
1612
1612
  this.isAsync = false;
@@ -1878,7 +1878,7 @@ function getFinalKeyframe(keyframes2, {
1878
1878
  const index = repeat && repeatType !== 'loop' && repeat % 2 === 1 ? 0 : resolvedKeyframes.length - 1;
1879
1879
  return !index || finalKeyframe === void 0 ? resolvedKeyframes[index] : finalKeyframe;
1880
1880
  }
1881
- var BaseAnimation = class {
1881
+ var BaseAnimation = /*#__PURE__*/ class {
1882
1882
  constructor({
1883
1883
  autoplay = true,
1884
1884
  delay: delay2 = 0,
@@ -2011,7 +2011,7 @@ var generators = {
2011
2011
  spring,
2012
2012
  };
2013
2013
  var percentToProgress = (percent2) => percent2 / 100;
2014
- var MainThreadAnimation = class extends BaseAnimation {
2014
+ var MainThreadAnimation = /*#__PURE__*/ class extends BaseAnimation {
2015
2015
  constructor({
2016
2016
  KeyframeResolver: KeyframeResolver$1 = KeyframeResolver,
2017
2017
  ...options
@@ -2491,7 +2491,7 @@ function makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, n
2491
2491
  }
2492
2492
  }
2493
2493
  }
2494
- var DOMKeyframesResolver = class extends KeyframeResolver {
2494
+ var DOMKeyframesResolver = /*#__PURE__*/ class extends KeyframeResolver {
2495
2495
  constructor(unresolvedKeyframes, onComplete, name, motionValue2,) {
2496
2496
  super(
2497
2497
  unresolvedKeyframes,
@@ -2702,7 +2702,7 @@ function pregenerateKeyframes(keyframes2, options,) {
2702
2702
  ease: 'linear',
2703
2703
  };
2704
2704
  }
2705
- var AcceleratedAnimation = class extends BaseAnimation {
2705
+ var AcceleratedAnimation = /*#__PURE__*/ class extends BaseAnimation {
2706
2706
  constructor(options,) {
2707
2707
  super(options,);
2708
2708
  const {
@@ -2974,7 +2974,7 @@ function moveItem([...arr], fromIndex, toIndex,) {
2974
2974
  }
2975
2975
  return arr;
2976
2976
  }
2977
- var SubscriptionManager = class {
2977
+ var SubscriptionManager = /*#__PURE__*/ class {
2978
2978
  constructor() {
2979
2979
  this.subscriptions = [];
2980
2980
  }
@@ -3008,7 +3008,7 @@ var isFloat = (value) => {
3008
3008
  var collectMotionValues = {
3009
3009
  current: void 0,
3010
3010
  };
3011
- var MotionValue = class {
3011
+ var MotionValue = /*#__PURE__*/ class {
3012
3012
  /**
3013
3013
  * @param init - The initiating value
3014
3014
  * @param config - Optional configuration options
@@ -3342,7 +3342,7 @@ function observeTimeline(update, timeline,) {
3342
3342
  return () => cancelFrame(onFrame,);
3343
3343
  }
3344
3344
  var supportsScrollTimeline = memo(() => window.ScrollTimeline !== void 0);
3345
- var GroupPlaybackControls = class {
3345
+ var GroupPlaybackControls = /*#__PURE__*/ class {
3346
3346
  constructor(animations2,) {
3347
3347
  this.stop = () => this.runAll('stop',);
3348
3348
  this.animations = animations2.filter(Boolean,);
@@ -3871,14 +3871,14 @@ function createState() {
3871
3871
  exit: createTypeState(),
3872
3872
  };
3873
3873
  }
3874
- var Feature = class {
3874
+ var Feature = /*#__PURE__*/ class {
3875
3875
  constructor(node,) {
3876
3876
  this.isMounted = false;
3877
3877
  this.node = node;
3878
3878
  }
3879
3879
  update() {}
3880
3880
  };
3881
- var AnimationFeature = class extends Feature {
3881
+ var AnimationFeature = /*#__PURE__*/ class extends Feature {
3882
3882
  /**
3883
3883
  * We dynamically generate the AnimationState manager as it contains a reference
3884
3884
  * to the underlying animation library. We only want to load that if we load this,
@@ -3917,7 +3917,7 @@ var AnimationFeature = class extends Feature {
3917
3917
  unmount() {}
3918
3918
  };
3919
3919
  var id = 0;
3920
- var ExitAnimationFeature = class extends Feature {
3920
+ var ExitAnimationFeature = /*#__PURE__*/ class extends Feature {
3921
3921
  constructor() {
3922
3922
  super(...arguments,);
3923
3923
  this.id = id++;
@@ -4035,7 +4035,7 @@ function isPresent(context,) {
4035
4035
  return context === null ? true : context.isPresent;
4036
4036
  }
4037
4037
  var compareByDepth = (a, b,) => a.depth - b.depth;
4038
- var FlatTree = class {
4038
+ var FlatTree = /*#__PURE__*/ class {
4039
4039
  constructor() {
4040
4040
  this.children = [];
4041
4041
  this.isDirty = false;
@@ -4157,7 +4157,7 @@ function getClosestProjectingNode(visualElement,) {
4157
4157
  if (!visualElement) return void 0;
4158
4158
  return visualElement.options.allowProjection !== false ? visualElement.projection : getClosestProjectingNode(visualElement.parent,);
4159
4159
  }
4160
- var VisualElement = class {
4160
+ var VisualElement = /*#__PURE__*/ class {
4161
4161
  /**
4162
4162
  * This method takes React props and returns found MotionValues. For example, HTML
4163
4163
  * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.
@@ -5053,13 +5053,13 @@ function addHoverEvent(node, isActive,) {
5053
5053
  passive: !node.getProps()[callbackName],
5054
5054
  },);
5055
5055
  }
5056
- var HoverGesture = class extends Feature {
5056
+ var HoverGesture = /*#__PURE__*/ class extends Feature {
5057
5057
  mount() {
5058
5058
  this.unmount = pipe(addHoverEvent(this.node, true,), addHoverEvent(this.node, false,),);
5059
5059
  }
5060
5060
  unmount() {}
5061
5061
  };
5062
- var FocusGesture = class extends Feature {
5062
+ var FocusGesture = /*#__PURE__*/ class extends Feature {
5063
5063
  constructor() {
5064
5064
  super(...arguments,);
5065
5065
  this.isActive = false;
@@ -5102,7 +5102,7 @@ function fireSyntheticPointerEvent(name, handler,) {
5102
5102
  const syntheticPointerEvent = new PointerEvent('pointer' + name,);
5103
5103
  handler(syntheticPointerEvent, extractEventInfo(syntheticPointerEvent,),);
5104
5104
  }
5105
- var PressGesture = class extends Feature {
5105
+ var PressGesture = /*#__PURE__*/ class extends Feature {
5106
5106
  constructor() {
5107
5107
  super(...arguments,);
5108
5108
  this.removeStartListeners = noop;
@@ -5257,7 +5257,7 @@ var thresholdNames = {
5257
5257
  some: 0,
5258
5258
  all: 1,
5259
5259
  };
5260
- var InViewFeature = class extends Feature {
5260
+ var InViewFeature = /*#__PURE__*/ class extends Feature {
5261
5261
  constructor() {
5262
5262
  super(...arguments,);
5263
5263
  this.hasEnteredView = false;
@@ -5339,7 +5339,7 @@ var gestureAnimations = {
5339
5339
  Feature: HoverGesture,
5340
5340
  },
5341
5341
  };
5342
- var PanSession = class {
5342
+ var PanSession = /*#__PURE__*/ class {
5343
5343
  constructor(event, handlers, {
5344
5344
  transformPagePoint,
5345
5345
  contextWindow,
@@ -5755,7 +5755,7 @@ var getContextWindow = ({
5755
5755
  return current ? current.ownerDocument.defaultView : null;
5756
5756
  };
5757
5757
  var elementDragControls = /* @__PURE__ */ new WeakMap();
5758
- var VisualElementDragControls = class {
5758
+ var VisualElementDragControls = /*#__PURE__*/ class {
5759
5759
  constructor(visualElement,) {
5760
5760
  this.openGlobalLock = null;
5761
5761
  this.isDragging = false;
@@ -6195,7 +6195,7 @@ function getCurrentDirection(offset, lockThreshold = 10,) {
6195
6195
  }
6196
6196
  return direction;
6197
6197
  }
6198
- var DragGesture = class extends Feature {
6198
+ var DragGesture = /*#__PURE__*/ class extends Feature {
6199
6199
  constructor(node,) {
6200
6200
  super(node,);
6201
6201
  this.removeGroupControls = noop;
@@ -6221,7 +6221,7 @@ var asyncHandler = (handler) => (event, info,) => {
6221
6221
  frame.postRender(() => handler(event, info,));
6222
6222
  }
6223
6223
  };
6224
- var PanGesture = class extends Feature {
6224
+ var PanGesture = /*#__PURE__*/ class extends Feature {
6225
6225
  constructor() {
6226
6226
  super(...arguments,);
6227
6227
  this.removePointerDownListener = noop;
@@ -6313,7 +6313,7 @@ var correctBoxShadow = {
6313
6313
  return template(shadow,);
6314
6314
  },
6315
6315
  };
6316
- var MeasureLayoutWithContext = class extends Component {
6316
+ var MeasureLayoutWithContext = /*#__PURE__*/ class extends Component {
6317
6317
  /**
6318
6318
  * This only mounts projection nodes for components that
6319
6319
  * need measuring, we might want to do it for all components
@@ -6537,7 +6537,7 @@ function boxEqualsRounded(a, b,) {
6537
6537
  function aspectRatio(box,) {
6538
6538
  return calcLength(box.x,) / calcLength(box.y,);
6539
6539
  }
6540
- var NodeStack = class {
6540
+ var NodeStack = /*#__PURE__*/ class {
6541
6541
  constructor() {
6542
6542
  this.members = [];
6543
6543
  }
@@ -7544,16 +7544,16 @@ function createProjectionNode({
7544
7544
  if (!this.isVisible) {
7545
7545
  return hiddenVisibility;
7546
7546
  }
7547
- const styles2 = {
7547
+ const styles4 = {
7548
7548
  visibility: '',
7549
7549
  };
7550
7550
  const transformTemplate2 = this.getTransformTemplate();
7551
7551
  if (this.needsReset) {
7552
7552
  this.needsReset = false;
7553
- styles2.opacity = '';
7554
- styles2.pointerEvents = resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents,) || '';
7555
- styles2.transform = transformTemplate2 ? transformTemplate2(this.latestValues, '',) : 'none';
7556
- return styles2;
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;
7557
7557
  }
7558
7558
  const lead = this.getLead();
7559
7559
  if (!this.projectionDelta || !this.layout || !lead.target) {
@@ -7571,17 +7571,17 @@ function createProjectionNode({
7571
7571
  }
7572
7572
  const valuesToRender = lead.animationValues || lead.latestValues;
7573
7573
  this.applyTransformsToTarget();
7574
- styles2.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender,);
7574
+ styles4.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender,);
7575
7575
  if (transformTemplate2) {
7576
- styles2.transform = transformTemplate2(valuesToRender, styles2.transform,);
7576
+ styles4.transform = transformTemplate2(valuesToRender, styles4.transform,);
7577
7577
  }
7578
7578
  const {
7579
7579
  x,
7580
7580
  y,
7581
7581
  } = this.projectionDelta;
7582
- styles2.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;
7582
+ styles4.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;
7583
7583
  if (lead.animationValues) {
7584
- styles2.opacity = lead === this
7584
+ styles4.opacity = lead === this
7585
7585
  ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0
7586
7586
  ? _b
7587
7587
  : 1
@@ -7589,7 +7589,7 @@ function createProjectionNode({
7589
7589
  ? this.latestValues.opacity
7590
7590
  : valuesToRender.opacityExit;
7591
7591
  } else {
7592
- styles2.opacity = lead === this
7592
+ styles4.opacity = lead === this
7593
7593
  ? valuesToRender.opacity !== void 0 ? valuesToRender.opacity : ''
7594
7594
  : valuesToRender.opacityExit !== void 0
7595
7595
  ? valuesToRender.opacityExit
@@ -7601,22 +7601,22 @@ function createProjectionNode({
7601
7601
  correct,
7602
7602
  applyTo,
7603
7603
  } = scaleCorrectors[key7];
7604
- const corrected = styles2.transform === 'none' ? valuesToRender[key7] : correct(valuesToRender[key7], lead,);
7604
+ const corrected = styles4.transform === 'none' ? valuesToRender[key7] : correct(valuesToRender[key7], lead,);
7605
7605
  if (applyTo) {
7606
7606
  const num = applyTo.length;
7607
7607
  for (let i = 0; i < num; i++) {
7608
- styles2[applyTo[i]] = corrected;
7608
+ styles4[applyTo[i]] = corrected;
7609
7609
  }
7610
7610
  } else {
7611
- styles2[key7] = corrected;
7611
+ styles4[key7] = corrected;
7612
7612
  }
7613
7613
  }
7614
7614
  if (this.options.layoutId) {
7615
- styles2.pointerEvents = lead === this
7615
+ styles4.pointerEvents = lead === this
7616
7616
  ? resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents,) || ''
7617
7617
  : 'none';
7618
7618
  }
7619
- return styles2;
7619
+ return styles4;
7620
7620
  }
7621
7621
  clearSnapshot() {
7622
7622
  this.resumeFrom = this.snapshot = void 0;
@@ -7842,7 +7842,7 @@ var drag = {
7842
7842
  MeasureLayout,
7843
7843
  },
7844
7844
  };
7845
- var DOMVisualElement = class extends VisualElement {
7845
+ var DOMVisualElement = /*#__PURE__*/ class extends VisualElement {
7846
7846
  constructor() {
7847
7847
  super(...arguments,);
7848
7848
  this.KeyframeResolver = DOMKeyframesResolver;
@@ -7864,7 +7864,7 @@ var DOMVisualElement = class extends VisualElement {
7864
7864
  function getComputedStyle2(element,) {
7865
7865
  return window.getComputedStyle(element,);
7866
7866
  }
7867
- var HTMLVisualElement = class extends DOMVisualElement {
7867
+ var HTMLVisualElement = /*#__PURE__*/ class extends DOMVisualElement {
7868
7868
  constructor() {
7869
7869
  super(...arguments,);
7870
7870
  this.type = 'html';
@@ -7908,7 +7908,7 @@ var HTMLVisualElement = class extends DOMVisualElement {
7908
7908
  renderHTML(instance, renderState, styleProp, projection,);
7909
7909
  }
7910
7910
  };
7911
- var SVGVisualElement = class extends DOMVisualElement {
7911
+ var SVGVisualElement = /*#__PURE__*/ class extends DOMVisualElement {
7912
7912
  constructor() {
7913
7913
  super(...arguments,);
7914
7914
  this.type = 'svg';
@@ -8000,7 +8000,7 @@ function useForceUpdate() {
8000
8000
  function useUnmountEffect(callback,) {
8001
8001
  return useEffect(() => () => callback(), [],);
8002
8002
  }
8003
- var PopChildMeasure = class extends React2.Component {
8003
+ var PopChildMeasure = /*#__PURE__*/ class extends React2.Component {
8004
8004
  getSnapshotBeforeUpdate(prevProps,) {
8005
8005
  const element = this.props.childRef.current;
8006
8006
  if (element && prevProps.isPresent && !this.props.isPresent) {
@@ -9115,7 +9115,7 @@ function useTime() {
9115
9115
  useAnimationFrame((t) => time2.set(t,));
9116
9116
  return time2;
9117
9117
  }
9118
- var WillChangeMotionValue = class extends MotionValue {
9118
+ var WillChangeMotionValue = /*#__PURE__*/ class extends MotionValue {
9119
9119
  constructor() {
9120
9120
  super(...arguments,);
9121
9121
  this.members = [];
@@ -9640,7 +9640,7 @@ function useInView(ref, {
9640
9640
  }, [root, ref, margin, once, amount,],);
9641
9641
  return isInView;
9642
9642
  }
9643
- var DragControls = class {
9643
+ var DragControls = /*#__PURE__*/ class {
9644
9644
  constructor() {
9645
9645
  this.componentControls = /* @__PURE__ */ new Set();
9646
9646
  }
@@ -9832,7 +9832,7 @@ function startOptimizedAppearAnimation(element, name, keyframes2, options, onRea
9832
9832
  }
9833
9833
  }
9834
9834
  var createObject = () => ({});
9835
- var StateVisualElement = class extends VisualElement {
9835
+ var StateVisualElement = /*#__PURE__*/ class extends VisualElement {
9836
9836
  build() {}
9837
9837
  measureInstanceViewportBox() {
9838
9838
  return createBox();
@@ -9996,7 +9996,7 @@ var cancelSync = stepsOrder.reduce((acc, key7,) => {
9996
9996
  return acc;
9997
9997
  }, {},);
9998
9998
 
9999
- // https :https://app.framerstatic.com/framer.IBCXHSKM.js
9999
+ // https :https://app.framerstatic.com/framer.VEJ3JK5Y.js
10000
10000
 
10001
10001
  import React4 from 'react';
10002
10002
  import { startTransition as startTransition2, } from 'react';
@@ -10011,7 +10011,7 @@ var require_hsluv = __commonJS({
10011
10011
  value: true,
10012
10012
  },);
10013
10013
  exports.Hsluv = void 0;
10014
- var Hsluv2 = class {
10014
+ var Hsluv2 = /*#__PURE__*/ class {
10015
10015
  constructor() {
10016
10016
  this.hex = '#000000';
10017
10017
  this.rgb_r = 0;
@@ -11686,9 +11686,9 @@ function renderPage(Page4, defaultPageStyle,) {
11686
11686
  };
11687
11687
  return React4.isValidElement(Page4,) ? React4.cloneElement(Page4, style,) : React4.createElement(Page4, style,);
11688
11688
  }
11689
- var NotFoundError = class extends Error {};
11690
- var ErrorBoundaryCaughtError = class extends Error {};
11691
- 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 {
11692
11692
  constructor(props,) {
11693
11693
  super(props,);
11694
11694
  this.state = {
@@ -12833,7 +12833,7 @@ function RoutesProvider({
12833
12833
  children,
12834
12834
  },);
12835
12835
  }
12836
- var SuspenseErrorBoundary = class extends Component {
12836
+ var SuspenseErrorBoundary = /*#__PURE__*/ class extends Component {
12837
12837
  constructor() {
12838
12838
  super(...arguments,);
12839
12839
  this.state = {
@@ -13435,7 +13435,7 @@ function deprecationWarning(removedItem, removalVersion, replacement,) {
13435
13435
  const warningText = `Deprecation warning: ${removedItem} will be removed in version ${removalVersion}${replacementText}.`;
13436
13436
  warnOnce2(warningText,);
13437
13437
  }
13438
- var Observers = class {
13438
+ var Observers = /*#__PURE__*/ class {
13439
13439
  constructor() {
13440
13440
  __publicField(this, 'observers', /* @__PURE__ */ new Set(),);
13441
13441
  __publicField(this, 'transactions', {},);
@@ -13555,7 +13555,7 @@ function animatableInterpolation(value, currentInterpolation,) {
13555
13555
  },
13556
13556
  };
13557
13557
  }
13558
- var AnimatableValue = class {
13558
+ var AnimatableValue = /*#__PURE__*/ class {
13559
13559
  constructor(value,) {
13560
13560
  this.value = value;
13561
13561
  __publicField(this, 'observers', new Observers(),);
@@ -13747,7 +13747,7 @@ function controlPointsForCurve(curve,) {
13747
13747
  return [0.42, 0, 0.58, 1,];
13748
13748
  }
13749
13749
  }
13750
- var BezierAnimator = class {
13750
+ var BezierAnimator = /*#__PURE__*/ class {
13751
13751
  constructor(options, interpolation,) {
13752
13752
  this.interpolation = interpolation;
13753
13753
  __publicField(this, 'unitBezier',);
@@ -13802,7 +13802,7 @@ var BezierAnimator = class {
13802
13802
  return 1 / (200 * duration);
13803
13803
  }
13804
13804
  };
13805
- var UnitBezier = class {
13805
+ var UnitBezier = /*#__PURE__*/ class {
13806
13806
  constructor(point1, point2,) {
13807
13807
  __publicField(this, 'a',);
13808
13808
  __publicField(this, 'b',);
@@ -13848,7 +13848,7 @@ var UnitBezier = class {
13848
13848
  return t2;
13849
13849
  }
13850
13850
  };
13851
- var Integrator = class {
13851
+ var Integrator = /*#__PURE__*/ class {
13852
13852
  constructor(accelerationFunction,) {
13853
13853
  __publicField(this, 'accelerationForState',);
13854
13854
  this.accelerationForState = accelerationFunction;
@@ -13883,7 +13883,7 @@ var Integrator = class {
13883
13883
  return output;
13884
13884
  }
13885
13885
  };
13886
- var FrictionAnimator = class {
13886
+ var FrictionAnimator = /*#__PURE__*/ class {
13887
13887
  constructor(options,) {
13888
13888
  __publicField(this, 'options',);
13889
13889
  __publicField(this, 'state',);
@@ -14061,7 +14061,7 @@ function isDampingDurationSpringOptions(options,) {
14061
14061
  }
14062
14062
  return typeof options.dampingRatio === 'number' || typeof options.duration === 'number' || typeof options.mass === 'number';
14063
14063
  }
14064
- var SpringAnimator = class {
14064
+ var SpringAnimator = /*#__PURE__*/ class {
14065
14065
  constructor(options, interpolation,) {
14066
14066
  this.interpolation = interpolation;
14067
14067
  __publicField(this, 'options',);
@@ -14148,7 +14148,7 @@ var Defaults = {
14148
14148
  tolerance: 1,
14149
14149
  },
14150
14150
  };
14151
- var InertialScrollAnimator = class {
14151
+ var InertialScrollAnimator = /*#__PURE__*/ class {
14152
14152
  constructor(options,) {
14153
14153
  __publicField(this, 'options',);
14154
14154
  __publicField(this, 'current',);
@@ -15390,7 +15390,7 @@ var DefaultInterpolationOptions = {
15390
15390
  colorModel: 'husl',
15391
15391
  /* HUSL */
15392
15392
  };
15393
- var ValueInterpolation = class {
15393
+ var ValueInterpolation = /*#__PURE__*/ class {
15394
15394
  /**
15395
15395
  * @internal
15396
15396
  */
@@ -15443,7 +15443,7 @@ var Defaults2 = /* @__PURE__ */ (() => ({
15443
15443
  delta: 1 / 60,
15444
15444
  maxValues: 1e4,
15445
15445
  }))();
15446
- var PrecalculatedAnimator = class {
15446
+ var PrecalculatedAnimator = /*#__PURE__*/ class {
15447
15447
  constructor(options,) {
15448
15448
  __publicField(this, 'animator',);
15449
15449
  __publicField(this, 'values',);
@@ -15510,7 +15510,7 @@ var PrecalculatedAnimator = class {
15510
15510
  }
15511
15511
  };
15512
15512
  var EventEmitter3 = /* @__PURE__ */ (() => require_eventemitter3().EventEmitter)();
15513
- var EventEmitter = class {
15513
+ var EventEmitter = /*#__PURE__*/ class {
15514
15514
  constructor() {
15515
15515
  __publicField(this, '_emitter', new EventEmitter3(),);
15516
15516
  }
@@ -15626,7 +15626,7 @@ var _raf = (f) => {
15626
15626
  var __raf = /* @__PURE__ */ (() => safeWindow['requestAnimationFrame'] || _raf)();
15627
15627
  var raf = (f) => __raf(f,);
15628
15628
  var LoopTimeStep = /* @__PURE__ */ (() => 1 / 60)();
15629
- var Loop = class extends EventEmitter {
15629
+ var Loop = /*#__PURE__*/ class extends EventEmitter {
15630
15630
  /**
15631
15631
  * @internal
15632
15632
  */
@@ -15833,7 +15833,7 @@ var RenderTarget = {
15833
15833
  return false;
15834
15834
  },
15835
15835
  };
15836
- var AnimationDriver = class {
15836
+ var AnimationDriver = /*#__PURE__*/ class {
15837
15837
  constructor(animator, updateCallback, finishedCallback,) {
15838
15838
  this.animator = animator;
15839
15839
  this.updateCallback = updateCallback;
@@ -15859,7 +15859,7 @@ var AnimationDriver = class {
15859
15859
  return this.animator.isFinished();
15860
15860
  }
15861
15861
  };
15862
- var MainLoopAnimationDriver = class extends AnimationDriver {
15862
+ var MainLoopAnimationDriver = /*#__PURE__*/ class extends AnimationDriver {
15863
15863
  play() {
15864
15864
  if (RenderEnvironment.target !== RenderTarget.preview) {
15865
15865
  this.finishedCallback && this.finishedCallback(false,);
@@ -15880,7 +15880,7 @@ var DefaultDeprecatedAnimationOptions = {
15880
15880
  colorModel: 'husl',
15881
15881
  /* HUSL */
15882
15882
  };
15883
- var FramerAnimation = class {
15883
+ var FramerAnimation = /*#__PURE__*/ class {
15884
15884
  /**
15885
15885
  * @internal
15886
15886
  */
@@ -16573,7 +16573,7 @@ function getColorsFromTheme(theme, type,) {
16573
16573
  screenColor: isDarkTheme ? '#333' : '#eee',
16574
16574
  };
16575
16575
  }
16576
- var ErrorBoundary2 = class extends Component {
16576
+ var ErrorBoundary2 = /*#__PURE__*/ class extends Component {
16577
16577
  constructor() {
16578
16578
  super(...arguments,);
16579
16579
  __publicField(this, 'state', {},);
@@ -18189,6 +18189,12 @@ function useConstraints(props,) {
18189
18189
  const calculatedRect = calculateRect(props, parentSize, true,);
18190
18190
  return calculatedRect;
18191
18191
  }
18192
+ function isAutoSized({
18193
+ width,
18194
+ height,
18195
+ },) {
18196
+ return width === 'auto' || width === 'min-content' || height === 'auto' || height === 'min-content';
18197
+ }
18192
18198
  var ControlType = /* @__PURE__ */ ((ControlType2) => {
18193
18199
  ControlType2['Boolean'] = 'boolean';
18194
18200
  ControlType2['Number'] = 'number';
@@ -18217,6 +18223,7 @@ var ControlType = /* @__PURE__ */ ((ControlType2) => {
18217
18223
  ControlType2['Cursor'] = 'cursor';
18218
18224
  ControlType2['Padding'] = 'padding';
18219
18225
  ControlType2['BorderRadius'] = 'borderradius';
18226
+ ControlType2['CollectionReference'] = 'collectionreference';
18220
18227
  return ControlType2;
18221
18228
  })(ControlType || {},);
18222
18229
  var isFlexboxGapSupportedCached;
@@ -19075,8 +19082,8 @@ var didInject = false;
19075
19082
  function injectComponentCSSRules() {
19076
19083
  if (didInject) return;
19077
19084
  didInject = true;
19078
- const styles2 = RenderTarget.current() === RenderTarget.preview ? combinedCSSRulesForPreview : combinedCSSRules;
19079
- for (const rule of styles2) {
19085
+ const styles4 = RenderTarget.current() === RenderTarget.preview ? combinedCSSRulesForPreview : combinedCSSRules;
19086
+ for (const rule of styles4) {
19080
19087
  injectCSSRule(rule, void 0, void 0,);
19081
19088
  }
19082
19089
  }
@@ -19122,6 +19129,7 @@ function getControlDefaultValue(control,) {
19122
19129
  try {
19123
19130
  switch (control.type) {
19124
19131
  case 'string':
19132
+ case 'collectionreference':
19125
19133
  case 'color':
19126
19134
  case 'date':
19127
19135
  case 'link':
@@ -21252,28 +21260,28 @@ function backgroundImageFromProps(props,) {
21252
21260
  }
21253
21261
  function collectBorderStyleForProps(props, style, collapseEqualBorders = true,) {
21254
21262
  const {
21255
- borderWidth: borderWidth2,
21263
+ borderWidth,
21256
21264
  borderStyle,
21257
21265
  borderColor,
21258
21266
  } = props;
21259
- if (!borderWidth2) {
21267
+ if (!borderWidth) {
21260
21268
  return;
21261
21269
  }
21262
21270
  let borderTop;
21263
21271
  let borderBottom;
21264
21272
  let borderLeft;
21265
21273
  let borderRight;
21266
- if (typeof borderWidth2 === 'number') {
21274
+ if (typeof borderWidth === 'number') {
21267
21275
  borderTop =
21268
21276
  borderBottom =
21269
21277
  borderLeft =
21270
21278
  borderRight =
21271
- borderWidth2;
21279
+ borderWidth;
21272
21280
  } else {
21273
- borderTop = borderWidth2.top || 0;
21274
- borderBottom = borderWidth2.bottom || 0;
21275
- borderLeft = borderWidth2.left || 0;
21276
- borderRight = borderWidth2.right || 0;
21281
+ borderTop = borderWidth.top || 0;
21282
+ borderBottom = borderWidth.bottom || 0;
21283
+ borderLeft = borderWidth.left || 0;
21284
+ borderRight = borderWidth.right || 0;
21277
21285
  }
21278
21286
  if (borderTop === 0 && borderBottom === 0 && borderLeft === 0 && borderRight === 0) {
21279
21287
  return;
@@ -21422,7 +21430,7 @@ function useForceUpdate3() {
21422
21430
  }
21423
21431
  var ResizeObserverPolyfill = /* @__PURE__ */ (() => require_resize_observer_umd().ResizeObserver)();
21424
21432
  var DEFAULT_SIZE = 200;
21425
- var SharedObserver = class {
21433
+ var SharedObserver = /*#__PURE__*/ class {
21426
21434
  constructor() {
21427
21435
  __publicField(this, 'sharedResizeObserver',);
21428
21436
  __publicField(this, 'callbacks', /* @__PURE__ */ new WeakMap(),);
@@ -21753,6 +21761,7 @@ function resetSetStyle(element, key7, toValue, microtask2 = true,) {
21753
21761
  }
21754
21762
  }
21755
21763
  var Layer = /* @__PURE__ */ (() => {
21764
+ /*#__PURE__*/
21756
21765
  class Layer2 extends Component {
21757
21766
  constructor() {
21758
21767
  super(...arguments,);
@@ -22483,12 +22492,6 @@ function resolveParentSize(props, unwrappedProps, rect, inCodeComponent,) {
22483
22492
  }
22484
22493
  return 0;
22485
22494
  }
22486
- function isAutoSized({
22487
- width,
22488
- height,
22489
- },) {
22490
- return width === 'auto' || width === 'min-content' || height === 'auto' || height === 'min-content';
22491
- }
22492
22495
  function EmptyState({
22493
22496
  title = '',
22494
22497
  description = 'Click and drag the connector to any frame on the canvas \u2192',
@@ -22590,7 +22593,7 @@ var SharedLayoutContext = /* @__PURE__ */ React4.createContext({
22590
22593
  scheduleProjectionDidUpdate: () => {},
22591
22594
  initLead: () => {},
22592
22595
  },);
22593
- var SharedLayoutRoot = class extends Component {
22596
+ var SharedLayoutRoot = /*#__PURE__*/ class extends Component {
22594
22597
  constructor() {
22595
22598
  super(...arguments,);
22596
22599
  __publicField(this, 'shouldAnimate', false,);
@@ -22673,7 +22676,7 @@ function MagicMotionCrossfadeRoot(props,) {
22673
22676
  children: props.children,
22674
22677
  },);
22675
22678
  }
22676
- var SharedIntersectionObserver = class {
22679
+ var SharedIntersectionObserver = /*#__PURE__*/ class {
22677
22680
  constructor(options,) {
22678
22681
  __publicField(this, 'sharedIntersectionObserver',);
22679
22682
  __publicField(this, 'callbacks', /* @__PURE__ */ new WeakMap(),);
@@ -22817,7 +22820,7 @@ function pointForEvent(event, customTarget = null,) {
22817
22820
  };
22818
22821
  return point2;
22819
22822
  }
22820
- var FramerEvent = class {
22823
+ var FramerEvent = /*#__PURE__*/ class {
22821
22824
  /**
22822
22825
  * @internal
22823
22826
  */
@@ -22924,7 +22927,7 @@ var DraggingContext = /* @__PURE__ */ React4.createContext({
22924
22927
  dragging: false,
22925
22928
  },);
22926
22929
  function WithDragging(Component15,) {
22927
- const _WithDraggingHOC = class extends React4.Component {
22930
+ const _WithDraggingHOC = /*#__PURE__*/ class extends React4.Component {
22928
22931
  constructor(props, defaultProps,) {
22929
22932
  super(props, defaultProps,);
22930
22933
  __publicField(this, 'state', {
@@ -23743,7 +23746,7 @@ var ObservableObject = /* @__PURE__ */ (() => {
23743
23746
  };
23744
23747
  return ObservableObject2;
23745
23748
  })();
23746
- var ObservableObjectProxyHandler = class {
23749
+ var ObservableObjectProxyHandler = /*#__PURE__*/ class {
23747
23750
  constructor() {
23748
23751
  __publicField(this, 'set', (target, key7, value, receiver,) => {
23749
23752
  if (key7 === $private) {
@@ -24419,7 +24422,7 @@ function applyLayoutProp(style, props, key7,) {
24419
24422
  }
24420
24423
  }
24421
24424
  var DeprecatedFrame = /* @__PURE__ */ (() => {
24422
- const _DeprecatedFrameInner = class extends Layer {
24425
+ const _DeprecatedFrameInner = /*#__PURE__*/ class extends Layer {
24423
24426
  constructor() {
24424
24427
  super(...arguments,);
24425
24428
  __publicField(this, 'element', null,);
@@ -24800,7 +24803,7 @@ var Frame = /* @__PURE__ */ (() => {
24800
24803
  FrameInner['displayName'] = 'Frame';
24801
24804
  return FrameInner;
24802
24805
  })();
24803
- var LayoutTree = class extends Component {
24806
+ var LayoutTree = /*#__PURE__*/ class extends Component {
24804
24807
  constructor() {
24805
24808
  super(...arguments,);
24806
24809
  __publicField(this, 'layoutMaybeMutated',);
@@ -25238,7 +25241,7 @@ var allAnimatableProperties = {
25238
25241
  originZ: 0,
25239
25242
  opacity: 1,
25240
25243
  };
25241
- var NavigatorMock = class {
25244
+ var NavigatorMock = /*#__PURE__*/ class {
25242
25245
  constructor() {
25243
25246
  __publicField(this, 'warning', () => {
25244
25247
  warnOnce2('The Navigator API is only available inside of Framer: https://www.framer.com/',);
@@ -26292,7 +26295,7 @@ var NavigationTransitionType = /* @__PURE__ */ ((NavigationTransitionType2) => {
26292
26295
  return NavigationTransitionType2;
26293
26296
  })(NavigationTransitionType || {},);
26294
26297
  function WithNavigator(BaseComponent, navigationTransition, navigationTransitionDirection, NavigationTarget, navigationTransitionOptions,) {
26295
- const InternalWithNavigator = class extends React4.Component {
26298
+ const InternalWithNavigator = /*#__PURE__*/ class extends React4.Component {
26296
26299
  render() {
26297
26300
  return /* @__PURE__ */ jsx(NavigationContext.Consumer, {
26298
26301
  children: (navigation) => {
@@ -27793,7 +27796,7 @@ function stateName(state,) {
27793
27796
  function containsBitmask(value, bitmask,) {
27794
27797
  return (value & bitmask) !== 0;
27795
27798
  }
27796
- var GestureRecognizer = class {
27799
+ var GestureRecognizer = /*#__PURE__*/ class {
27797
27800
  constructor() {
27798
27801
  __publicField(this, '_state', 2,/* Possible */
27799
27802
  );
@@ -27869,7 +27872,7 @@ var GestureRecognizer = class {
27869
27872
  }
27870
27873
  }
27871
27874
  };
27872
- var MouseWheelGestureRecognizer = class extends GestureRecognizer {
27875
+ var MouseWheelGestureRecognizer = /*#__PURE__*/ class extends GestureRecognizer {
27873
27876
  constructor() {
27874
27877
  super(...arguments,);
27875
27878
  __publicField(this, 'startEvent',);
@@ -27914,7 +27917,7 @@ var MouseWheelGestureRecognizer = class extends GestureRecognizer {
27914
27917
  this.onMouseWheelEnd(event,);
27915
27918
  }
27916
27919
  };
27917
- var PanGestureRecognizer = class extends GestureRecognizer {
27920
+ var PanGestureRecognizer = /*#__PURE__*/ class extends GestureRecognizer {
27918
27921
  constructor() {
27919
27922
  super(...arguments,);
27920
27923
  __publicField(this, 'startEvent',);
@@ -27989,7 +27992,7 @@ var PanGestureRecognizer = class extends GestureRecognizer {
27989
27992
  }
27990
27993
  }
27991
27994
  };
27992
- var TapGestureRecognizer = class extends GestureRecognizer {
27995
+ var TapGestureRecognizer = /*#__PURE__*/ class extends GestureRecognizer {
27993
27996
  constructor() {
27994
27997
  super(...arguments,);
27995
27998
  __publicField(this, 'eventType', 'tap',);
@@ -28019,7 +28022,7 @@ var TapGestureRecognizer = class extends GestureRecognizer {
28019
28022
  }
28020
28023
  }
28021
28024
  };
28022
- var FramerEventSession = class {
28025
+ var FramerEventSession = /*#__PURE__*/ class {
28023
28026
  constructor(dispatcher, customOrigin,) {
28024
28027
  __publicField(this, 'events', [],);
28025
28028
  __publicField(this, 'recognizers', [],);
@@ -28179,7 +28182,7 @@ var FramerEventSession = class {
28179
28182
  return subtract(event.devicePoint, this.startEvent.devicePoint,);
28180
28183
  }
28181
28184
  };
28182
- var MouseEventListener = class extends Component {
28185
+ var MouseEventListener = /*#__PURE__*/ class extends Component {
28183
28186
  constructor() {
28184
28187
  super(...arguments,);
28185
28188
  __publicField(this, 'domMouseDown', (originalEvent) => {
@@ -28231,7 +28234,7 @@ var MouseEventListener = class extends Component {
28231
28234
  safeWindow.removeEventListener('wheel', this.domMouseWheel,);
28232
28235
  }
28233
28236
  };
28234
- var TouchEventListener = class extends Component {
28237
+ var TouchEventListener = /*#__PURE__*/ class extends Component {
28235
28238
  constructor() {
28236
28239
  super(...arguments,);
28237
28240
  __publicField(this, 'domTouchStart', (originalEvent) => {
@@ -29278,7 +29281,7 @@ function useObserveData() {
29278
29281
  const context = React4.useContext(DataObserverContext,);
29279
29282
  return !isNaN(context.update,);
29280
29283
  }
29281
- var DataObserver = class extends Component {
29284
+ var DataObserver = /*#__PURE__*/ class extends Component {
29282
29285
  constructor() {
29283
29286
  super(...arguments,);
29284
29287
  __publicField(this, 'observers', [],);
@@ -29622,7 +29625,6 @@ function usePresenceAnimation(
29622
29625
  const [isPresent2, safeToRemove,] = usePresence();
29623
29626
  const lastPresence = useRef(false,);
29624
29627
  const effect = useConstant2(() => {
29625
- var _a;
29626
29628
  const base = initial ?? style;
29627
29629
  if (!isObject2(base,)) {
29628
29630
  return {
@@ -29631,7 +29633,7 @@ function usePresenceAnimation(
29631
29633
  }
29632
29634
  const defaults = {};
29633
29635
  for (const key7 in base) {
29634
- const value = isObject2(base,) ? (_a = asRecord(base,)) == null ? void 0 : _a[key7] : void 0;
29636
+ const value = isObject2(base,) ? base[key7] : void 0;
29635
29637
  if (!isNumber2(value,)) continue;
29636
29638
  defaults[key7] = value;
29637
29639
  }
@@ -29860,6 +29862,7 @@ function useStyleAppearEffect(options, ref,) {
29860
29862
  }
29861
29863
  return new Promise((resolve) => {
29862
29864
  if (shouldReduceMotion && key7 !== 'opacity') {
29865
+ if (isNumber2(toValue,)) effect.values[key7].set(toValue,);
29863
29866
  resolve();
29864
29867
  } else {
29865
29868
  const opts = {
@@ -30436,7 +30439,7 @@ var withGeneratedLayoutId = (Component15) =>
30436
30439
  ref,
30437
30440
  },);
30438
30441
  },);
30439
- var ContainerErrorBoundary = class extends Component {
30442
+ var ContainerErrorBoundary = /*#__PURE__*/ class extends Component {
30440
30443
  constructor() {
30441
30444
  super(...arguments,);
30442
30445
  __publicField(this, 'state', {
@@ -31408,7 +31411,7 @@ function Floating({
31408
31411
  );
31409
31412
  }
31410
31413
  var GeneratedComponentContext = /* @__PURE__ */ React4.createContext(void 0,);
31411
- var LazyValue = class {
31414
+ var LazyValue = /*#__PURE__*/ class {
31412
31415
  constructor(resolver,) {
31413
31416
  this.resolver = resolver;
31414
31417
  __publicField(this, 'status',);
@@ -32033,10 +32036,248 @@ function resolvePageScope(pageLink, router,) {
32033
32036
  preserveQueryParams: false,
32034
32037
  },);
32035
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
+ }
32036
32276
  function PageRoot({
32037
32277
  RootComponent,
32038
32278
  isWebsite,
32039
32279
  routeId,
32280
+ framerSiteId,
32040
32281
  pathVariables,
32041
32282
  routes,
32042
32283
  collectionUtils,
@@ -32057,21 +32298,24 @@ function PageRoot({
32057
32298
  return /* @__PURE__ */ jsx(MotionConfig, {
32058
32299
  reducedMotion: isReducedMotion ? 'user' : 'never',
32059
32300
  children: /* @__PURE__ */ jsx(CustomCursorHost, {
32060
- children: /* @__PURE__ */ jsx(Router, {
32061
- initialRoute: routeId,
32062
- initialPathVariables: pathVariables,
32063
- initialLocaleId: localeId,
32064
- routes,
32065
- collectionUtils,
32066
- notFoundPage,
32067
- locales,
32068
- defaultPageStyle: {
32069
- minHeight: '100vh',
32070
- width: 'auto',
32071
- },
32072
- preserveQueryParams,
32073
- enableImproveInpDuringHydration,
32074
- addHydrationMarkers,
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
+ },),
32075
32319
  },),
32076
32320
  },),
32077
32321
  },);
@@ -32401,7 +32645,7 @@ async function getCollection(collection, locale,) {
32401
32645
  }
32402
32646
  return collection;
32403
32647
  }
32404
- var CompatibilityDatabaseCollection = class {
32648
+ var CompatibilityDatabaseCollection = /*#__PURE__*/ class {
32405
32649
  constructor(collection, locale,) {
32406
32650
  this.collection = collection;
32407
32651
  this.locale = locale;
@@ -32636,12 +32880,12 @@ function compare(left, right, collation,) {
32636
32880
  }
32637
32881
  }
32638
32882
  var INDEX_IDENTIFIER = 'index';
32639
- var ScalarExpression = class {
32883
+ var ScalarExpression = /*#__PURE__*/ class {
32640
32884
  static from(expression, schema,) {
32641
32885
  return convertExpression(expression, schema, void 0,);
32642
32886
  }
32643
32887
  };
32644
- var ScalarIdentifier = class extends ScalarExpression {
32888
+ var ScalarIdentifier = /*#__PURE__*/ class extends ScalarExpression {
32645
32889
  constructor(schema, name,) {
32646
32890
  super();
32647
32891
  this.schema = schema;
@@ -32673,7 +32917,7 @@ var ScalarIdentifier = class extends ScalarExpression {
32673
32917
  return false;
32674
32918
  }
32675
32919
  };
32676
- var ScalarLiteralValue = class extends ScalarExpression {
32920
+ var ScalarLiteralValue = /*#__PURE__*/ class extends ScalarExpression {
32677
32921
  constructor(definition, value,) {
32678
32922
  super();
32679
32923
  this.definition = definition;
@@ -32755,7 +32999,7 @@ var ScalarLiteralValue = class extends ScalarExpression {
32755
32999
  return true;
32756
33000
  }
32757
33001
  };
32758
- var ScalarFunctionCall = class extends ScalarExpression {
33002
+ var ScalarFunctionCall = /*#__PURE__*/ class extends ScalarExpression {
32759
33003
  constructor(argumentExpressions,) {
32760
33004
  super();
32761
33005
  this.argumentExpressions = argumentExpressions;
@@ -32781,7 +33025,7 @@ var ScalarFunctionCall = class extends ScalarExpression {
32781
33025
  },);
32782
33026
  }
32783
33027
  };
32784
- var ScalarFunctionCallContains = class extends ScalarFunctionCall {
33028
+ var ScalarFunctionCallContains = /*#__PURE__*/ class extends ScalarFunctionCall {
32785
33029
  constructor() {
32786
33030
  super(...arguments,);
32787
33031
  __publicField(this, 'definition', ScalarFunctionCallContains.getDefinition(),);
@@ -32817,7 +33061,7 @@ var ScalarFunctionCallContains = class extends ScalarFunctionCall {
32817
33061
  };
32818
33062
  }
32819
33063
  };
32820
- var ScalarFunctionCallStartsWith = class extends ScalarFunctionCall {
33064
+ var ScalarFunctionCallStartsWith = /*#__PURE__*/ class extends ScalarFunctionCall {
32821
33065
  constructor() {
32822
33066
  super(...arguments,);
32823
33067
  __publicField(this, 'definition', ScalarFunctionCallStartsWith.getDefinition(),);
@@ -32853,7 +33097,7 @@ var ScalarFunctionCallStartsWith = class extends ScalarFunctionCall {
32853
33097
  };
32854
33098
  }
32855
33099
  };
32856
- var ScalarFunctionCallEndsWith = class extends ScalarFunctionCall {
33100
+ var ScalarFunctionCallEndsWith = /*#__PURE__*/ class extends ScalarFunctionCall {
32857
33101
  constructor() {
32858
33102
  super(...arguments,);
32859
33103
  __publicField(this, 'definition', ScalarFunctionCallEndsWith.getDefinition(),);
@@ -32889,7 +33133,7 @@ var ScalarFunctionCallEndsWith = class extends ScalarFunctionCall {
32889
33133
  };
32890
33134
  }
32891
33135
  };
32892
- var ScalarCase = class extends ScalarExpression {
33136
+ var ScalarCase = /*#__PURE__*/ class extends ScalarExpression {
32893
33137
  constructor(valueExpression, conditions, elseExpression,) {
32894
33138
  super();
32895
33139
  this.valueExpression = valueExpression;
@@ -32985,13 +33229,13 @@ var ScalarCase = class extends ScalarExpression {
32985
33229
  },);
32986
33230
  }
32987
33231
  };
32988
- var ScalarCaseCondition = class {
33232
+ var ScalarCaseCondition = /*#__PURE__*/ class {
32989
33233
  constructor(whenExpression, thenExpression,) {
32990
33234
  this.whenExpression = whenExpression;
32991
33235
  this.thenExpression = thenExpression;
32992
33236
  }
32993
33237
  };
32994
- var ScalarUnaryOperation = class extends ScalarExpression {
33238
+ var ScalarUnaryOperation = /*#__PURE__*/ class extends ScalarExpression {
32995
33239
  constructor(valueExpression,) {
32996
33240
  super();
32997
33241
  this.valueExpression = valueExpression;
@@ -33004,7 +33248,7 @@ var ScalarUnaryOperation = class extends ScalarExpression {
33004
33248
  return this.valueExpression.canEvaluate();
33005
33249
  }
33006
33250
  };
33007
- var ScalarUnaryOperationNot = class extends ScalarUnaryOperation {
33251
+ var ScalarUnaryOperationNot = /*#__PURE__*/ class extends ScalarUnaryOperation {
33008
33252
  constructor() {
33009
33253
  super(...arguments,);
33010
33254
  __publicField(this, 'definition', ScalarUnaryOperationNot.getDefinition(),);
@@ -33026,7 +33270,7 @@ var ScalarUnaryOperationNot = class extends ScalarUnaryOperation {
33026
33270
  };
33027
33271
  }
33028
33272
  };
33029
- var ScalarLogicalOperation = class extends ScalarExpression {
33273
+ var ScalarLogicalOperation = /*#__PURE__*/ class extends ScalarExpression {
33030
33274
  constructor(operandExpressions,) {
33031
33275
  super();
33032
33276
  this.operandExpressions = operandExpressions;
@@ -33051,7 +33295,7 @@ var ScalarLogicalOperation = class extends ScalarExpression {
33051
33295
  },);
33052
33296
  }
33053
33297
  };
33054
- var ScalarLogicalOperationAnd = class extends ScalarLogicalOperation {
33298
+ var ScalarLogicalOperationAnd = /*#__PURE__*/ class extends ScalarLogicalOperation {
33055
33299
  constructor() {
33056
33300
  super(...arguments,);
33057
33301
  __publicField(this, 'operator', 'AND',);
@@ -33067,7 +33311,7 @@ var ScalarLogicalOperationAnd = class extends ScalarLogicalOperation {
33067
33311
  };
33068
33312
  }
33069
33313
  };
33070
- var ScalarLogicalOperationOr = class extends ScalarLogicalOperation {
33314
+ var ScalarLogicalOperationOr = /*#__PURE__*/ class extends ScalarLogicalOperation {
33071
33315
  constructor() {
33072
33316
  super(...arguments,);
33073
33317
  __publicField(this, 'operator', 'OR',);
@@ -33083,7 +33327,7 @@ var ScalarLogicalOperationOr = class extends ScalarLogicalOperation {
33083
33327
  };
33084
33328
  }
33085
33329
  };
33086
- var ScalarComparison = class extends ScalarExpression {
33330
+ var ScalarComparison = /*#__PURE__*/ class extends ScalarExpression {
33087
33331
  constructor(leftExpression, rightExpression,) {
33088
33332
  super();
33089
33333
  this.leftExpression = leftExpression;
@@ -33111,7 +33355,7 @@ var ScalarComparison = class extends ScalarExpression {
33111
33355
  return this.leftExpression.canEvaluate() && this.rightExpression.canEvaluate();
33112
33356
  }
33113
33357
  };
33114
- var ScalarComparisonEquals = class extends ScalarComparison {
33358
+ var ScalarComparisonEquals = /*#__PURE__*/ class extends ScalarComparison {
33115
33359
  constructor() {
33116
33360
  super(...arguments,);
33117
33361
  __publicField(this, 'operator', '=',);
@@ -33125,7 +33369,7 @@ var ScalarComparisonEquals = class extends ScalarComparison {
33125
33369
  };
33126
33370
  }
33127
33371
  };
33128
- var ScalarComparisonNotEquals = class extends ScalarComparison {
33372
+ var ScalarComparisonNotEquals = /*#__PURE__*/ class extends ScalarComparison {
33129
33373
  constructor() {
33130
33374
  super(...arguments,);
33131
33375
  __publicField(this, 'operator', '!=',);
@@ -33139,7 +33383,7 @@ var ScalarComparisonNotEquals = class extends ScalarComparison {
33139
33383
  };
33140
33384
  }
33141
33385
  };
33142
- var ScalarComparisonLessThan = class extends ScalarComparison {
33386
+ var ScalarComparisonLessThan = /*#__PURE__*/ class extends ScalarComparison {
33143
33387
  constructor() {
33144
33388
  super(...arguments,);
33145
33389
  __publicField(this, 'operator', '<',);
@@ -33153,7 +33397,7 @@ var ScalarComparisonLessThan = class extends ScalarComparison {
33153
33397
  };
33154
33398
  }
33155
33399
  };
33156
- var ScalarComparisonLessThanOrEqual = class extends ScalarComparison {
33400
+ var ScalarComparisonLessThanOrEqual = /*#__PURE__*/ class extends ScalarComparison {
33157
33401
  constructor() {
33158
33402
  super(...arguments,);
33159
33403
  __publicField(this, 'operator', '<=',);
@@ -33167,7 +33411,7 @@ var ScalarComparisonLessThanOrEqual = class extends ScalarComparison {
33167
33411
  };
33168
33412
  }
33169
33413
  };
33170
- var ScalarComparisonGreaterThan = class extends ScalarComparison {
33414
+ var ScalarComparisonGreaterThan = /*#__PURE__*/ class extends ScalarComparison {
33171
33415
  constructor() {
33172
33416
  super(...arguments,);
33173
33417
  __publicField(this, 'operator', '>',);
@@ -33181,7 +33425,7 @@ var ScalarComparisonGreaterThan = class extends ScalarComparison {
33181
33425
  };
33182
33426
  }
33183
33427
  };
33184
- var ScalarComparisonGreaterThanOrEqual = class extends ScalarComparison {
33428
+ var ScalarComparisonGreaterThanOrEqual = /*#__PURE__*/ class extends ScalarComparison {
33185
33429
  constructor() {
33186
33430
  super(...arguments,);
33187
33431
  __publicField(this, 'operator', '>=',);
@@ -33195,7 +33439,7 @@ var ScalarComparisonGreaterThanOrEqual = class extends ScalarComparison {
33195
33439
  };
33196
33440
  }
33197
33441
  };
33198
- var ScalarTypeCast = class extends ScalarExpression {
33442
+ var ScalarTypeCast = /*#__PURE__*/ class extends ScalarExpression {
33199
33443
  constructor(valueExpression,) {
33200
33444
  super();
33201
33445
  this.valueExpression = valueExpression;
@@ -33211,7 +33455,7 @@ var ScalarTypeCast = class extends ScalarExpression {
33211
33455
  return this.valueExpression.canEvaluate();
33212
33456
  }
33213
33457
  };
33214
- var ScalarTypeCastBoolean = class extends ScalarTypeCast {
33458
+ var ScalarTypeCastBoolean = /*#__PURE__*/ class extends ScalarTypeCast {
33215
33459
  constructor() {
33216
33460
  super(...arguments,);
33217
33461
  __publicField(this, 'dataType', 'BOOLEAN',);
@@ -33241,7 +33485,7 @@ function convertToBoolean(value,) {
33241
33485
  }
33242
33486
  return false;
33243
33487
  }
33244
- var ScalarTypeCastDate = class extends ScalarTypeCast {
33488
+ var ScalarTypeCastDate = /*#__PURE__*/ class extends ScalarTypeCast {
33245
33489
  constructor() {
33246
33490
  super(...arguments,);
33247
33491
  __publicField(this, 'dataType', 'DATE',);
@@ -33279,7 +33523,7 @@ function convertToDate(value,) {
33279
33523
  }
33280
33524
  return null;
33281
33525
  }
33282
- var ScalarTypeCastNumber = class extends ScalarTypeCast {
33526
+ var ScalarTypeCastNumber = /*#__PURE__*/ class extends ScalarTypeCast {
33283
33527
  constructor() {
33284
33528
  super(...arguments,);
33285
33529
  __publicField(this, 'dataType', 'NUMBER',);
@@ -33316,7 +33560,7 @@ function convertToNumber(value,) {
33316
33560
  }
33317
33561
  return null;
33318
33562
  }
33319
- var ScalarTypeCastString = class extends ScalarTypeCast {
33563
+ var ScalarTypeCastString = /*#__PURE__*/ class extends ScalarTypeCast {
33320
33564
  constructor() {
33321
33565
  super(...arguments,);
33322
33566
  __publicField(this, 'dataType', 'STRING',);
@@ -33764,7 +34008,7 @@ function stringifyExecutionTime(self2, total,) {
33764
34008
  function stringifyItems(items,) {
33765
34009
  return `(items: ${items})`;
33766
34010
  }
33767
- var QueryPlan = class {
34011
+ var QueryPlan = /*#__PURE__*/ class {
33768
34012
  constructor() {
33769
34013
  __publicField(this, 'executionTime', 0,);
33770
34014
  __publicField(this, 'itemCount', 0,);
@@ -33777,7 +34021,7 @@ var QueryPlan = class {
33777
34021
  return result;
33778
34022
  }
33779
34023
  };
33780
- var ScanCollectionPlan = class extends QueryPlan {
34024
+ var ScanCollectionPlan = /*#__PURE__*/ class extends QueryPlan {
33781
34025
  constructor(collection,) {
33782
34026
  super();
33783
34027
  this.collection = collection;
@@ -33791,7 +34035,7 @@ var ScanCollectionPlan = class extends QueryPlan {
33791
34035
  return this.collection.scanItems();
33792
34036
  }
33793
34037
  };
33794
- var LookupIndexPlan = class extends QueryPlan {
34038
+ var LookupIndexPlan = /*#__PURE__*/ class extends QueryPlan {
33795
34039
  constructor(index, query,) {
33796
34040
  super();
33797
34041
  this.index = index;
@@ -33831,7 +34075,7 @@ var LookupIndexPlan = class extends QueryPlan {
33831
34075
  return this.index.lookupItems(this.query,);
33832
34076
  }
33833
34077
  };
33834
- var UnionPlan = class extends QueryPlan {
34078
+ var UnionPlan = /*#__PURE__*/ class extends QueryPlan {
33835
34079
  constructor(childPlans,) {
33836
34080
  super();
33837
34081
  this.childPlans = childPlans;
@@ -33861,7 +34105,7 @@ var UnionPlan = class extends QueryPlan {
33861
34105
  return (result == null ? void 0 : result.items()) ?? [];
33862
34106
  }
33863
34107
  };
33864
- var IntersectionPlan = class extends QueryPlan {
34108
+ var IntersectionPlan = /*#__PURE__*/ class extends QueryPlan {
33865
34109
  constructor(childPlans,) {
33866
34110
  super();
33867
34111
  this.childPlans = childPlans;
@@ -33891,7 +34135,7 @@ var IntersectionPlan = class extends QueryPlan {
33891
34135
  return (result == null ? void 0 : result.items()) ?? [];
33892
34136
  }
33893
34137
  };
33894
- var ResolveItemsPlan = class extends QueryPlan {
34138
+ var ResolveItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33895
34139
  constructor(childPlan, collection, richTextResolver, select,) {
33896
34140
  super();
33897
34141
  this.childPlan = childPlan;
@@ -33921,7 +34165,7 @@ var ResolveItemsPlan = class extends QueryPlan {
33921
34165
  return this.collection.resolveItems(childPointers,);
33922
34166
  }
33923
34167
  };
33924
- var FilterItemsPlan = class extends QueryPlan {
34168
+ var FilterItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33925
34169
  constructor(childPlan, filterExpression,) {
33926
34170
  super();
33927
34171
  this.childPlan = childPlan;
@@ -33943,7 +34187,7 @@ var FilterItemsPlan = class extends QueryPlan {
33943
34187
  },);
33944
34188
  }
33945
34189
  };
33946
- var SortItemsPlan = class extends QueryPlan {
34190
+ var SortItemsPlan = /*#__PURE__*/ class extends QueryPlan {
33947
34191
  constructor(childPlan, orderExpressions, collection,) {
33948
34192
  super();
33949
34193
  this.childPlan = childPlan;
@@ -33992,14 +34236,14 @@ var SortItemsPlan = class extends QueryPlan {
33992
34236
  },);
33993
34237
  }
33994
34238
  };
33995
- var ScalarOrderExpression = class {
34239
+ var ScalarOrderExpression = /*#__PURE__*/ class {
33996
34240
  constructor(expression, direction, collation,) {
33997
34241
  this.expression = expression;
33998
34242
  this.direction = direction;
33999
34243
  this.collation = collation;
34000
34244
  }
34001
34245
  };
34002
- var SliceItemsPlan = class extends QueryPlan {
34246
+ var SliceItemsPlan = /*#__PURE__*/ class extends QueryPlan {
34003
34247
  constructor(childPlan, offsetExpression, limitExpression,) {
34004
34248
  super();
34005
34249
  this.childPlan = childPlan;
@@ -34036,7 +34280,7 @@ var SliceItemsPlan = class extends QueryPlan {
34036
34280
  return childItems.slice(offset, offset + limit,);
34037
34281
  }
34038
34282
  };
34039
- var DatabaseItemMap = class extends Map {
34283
+ var DatabaseItemMap = /*#__PURE__*/ class extends Map {
34040
34284
  constructor(items = [],) {
34041
34285
  super();
34042
34286
  for (const item of items) {
@@ -34067,7 +34311,7 @@ var DatabaseItemMap = class extends Map {
34067
34311
  return [...values,];
34068
34312
  }
34069
34313
  };
34070
- var RichTextResolver = class {
34314
+ var RichTextResolver = /*#__PURE__*/ class {
34071
34315
  constructor(collection,) {
34072
34316
  this.collection = collection;
34073
34317
  __publicField(this, 'cache', /* @__PURE__ */ new Map(),);
@@ -34218,7 +34462,7 @@ function getDatabaseCollection({
34218
34462
  }
34219
34463
  assertNever(data2, 'Unsupported collection type',);
34220
34464
  }
34221
- var QueryEngine = class {
34465
+ var QueryEngine = /*#__PURE__*/ class {
34222
34466
  async query(query, locale,) {
34223
34467
  const collection = getDatabaseCollection(query.from, locale,);
34224
34468
  const richTextResolver = new RichTextResolver(collection,);
@@ -34449,7 +34693,7 @@ function createScanCollectionPlan(collection, expression,) {
34449
34693
  const plan = new ScanCollectionPlan(collection,);
34450
34694
  return new FilterItemsPlan(plan, expression,);
34451
34695
  }
34452
- var AnimationCollector = class {
34696
+ var AnimationCollector = /*#__PURE__*/ class {
34453
34697
  constructor() {
34454
34698
  __publicField(this, 'entries', /* @__PURE__ */ new Map(),);
34455
34699
  }
@@ -35074,7 +35318,7 @@ function usePrototypeNavigate({
35074
35318
  return false;
35075
35319
  };
35076
35320
  }
35077
- var QueryCache = class {
35321
+ var QueryCache = /*#__PURE__*/ class {
35078
35322
  constructor(queryEngine2,) {
35079
35323
  this.queryEngine = queryEngine2;
35080
35324
  __publicField(this, 'cache', /* @__PURE__ */ new Map(),);
@@ -36190,7 +36434,7 @@ var FontSourceNames = /* @__PURE__ */ ((FontSourceNames2) => {
36190
36434
  return FontSourceNames2;
36191
36435
  })(FontSourceNames || {},);
36192
36436
  var systemFontFamilyName = 'System Default';
36193
- var LocalFontSource = class {
36437
+ var LocalFontSource = /*#__PURE__*/ class {
36194
36438
  constructor() {
36195
36439
  __publicField(this, 'name', 'local',/* Local */
36196
36440
  );
@@ -36270,8 +36514,8 @@ var LocalFontSource = class {
36270
36514
  };
36271
36515
  const aliases = /* @__PURE__ */ new Map();
36272
36516
  const weights = [400, 100, 200, 300, 500, 600, 700, 800, 900,];
36273
- const styles2 = ['normal', 'italic',];
36274
- for (const style of styles2) {
36517
+ const styles4 = ['normal', 'italic',];
36518
+ for (const style of styles4) {
36275
36519
  for (const weight of weights) {
36276
36520
  const variant = createVariantName(weight, style,);
36277
36521
  const alias = `__SystemDefault-${weight}-${style}__`;
@@ -36332,7 +36576,7 @@ function getCustomFontName(fileName, properties,) {
36332
36576
  const variant = properties.font.preferredSubFamily === '' ? properties.font.fontSubFamily : properties.font.preferredSubFamily;
36333
36577
  return `${fontFamily} ${variant}`;
36334
36578
  }
36335
- var CustomFontSource = class {
36579
+ var CustomFontSource = /*#__PURE__*/ class {
36336
36580
  constructor() {
36337
36581
  __publicField(this, 'name', 'custom',/* Custom */
36338
36582
  );
@@ -36500,7 +36744,7 @@ var weightNameToNumber = {
36500
36744
  };
36501
36745
  var weightNames = /* @__PURE__ */ Object.keys(weightNameToNumber,);
36502
36746
  var allowedVariantsRegex = /* @__PURE__ */ (() => new RegExp(`^(?:${[...weightNames, 'italic',].join('|',)})`, 'u',))();
36503
- var FontshareSource = class {
36747
+ var FontshareSource = /*#__PURE__*/ class {
36504
36748
  constructor() {
36505
36749
  __publicField(this, 'name', 'fontshare',/* Fontshare */
36506
36750
  );
@@ -36638,7 +36882,7 @@ var weightNameToNumber2 = {
36638
36882
  ExtraBold: 800,
36639
36883
  Black: 900,
36640
36884
  };
36641
- var FramerFontSource = class {
36885
+ var FramerFontSource = /*#__PURE__*/ class {
36642
36886
  constructor() {
36643
36887
  __publicField(this, 'name', 'framer',/* Framer */
36644
36888
  );
@@ -36699,7 +36943,7 @@ var FramerFontSource = class {
36699
36943
  }
36700
36944
  };
36701
36945
  var googleFontSelectorPrefix = 'GF;';
36702
- var GoogleFontSource = class {
36946
+ var GoogleFontSource = /*#__PURE__*/ class {
36703
36947
  constructor() {
36704
36948
  __publicField(this, 'name', 'google',/* Google */
36705
36949
  );
@@ -36806,7 +37050,7 @@ function mapToKnownCategory2(category,) {
36806
37050
  var import_fontfaceobserver = __toESM(require_fontfaceobserver_standalone(), 1,);
36807
37051
  var FONT_LOADING_TIMEOUT = 5e3;
36808
37052
  var MAX_RETRIES = 3;
36809
- var FontLoadingError = class extends Error {
37053
+ var FontLoadingError = /*#__PURE__*/ class extends Error {
36810
37054
  constructor(message,) {
36811
37055
  super(message,);
36812
37056
  this.name = 'FontLoadingError';
@@ -36879,7 +37123,7 @@ async function isFontReady(family, style, weight,) {
36879
37123
  }`,);
36880
37124
  }
36881
37125
  }
36882
- var FontStore = class {
37126
+ var FontStore = /*#__PURE__*/ class {
36883
37127
  constructor() {
36884
37128
  __publicField(this, 'enabled', false,);
36885
37129
  __publicField(this, 'bySelector', /* @__PURE__ */ new Map(),);
@@ -37336,194 +37580,6 @@ function isPageOrScroll(identifier,) {
37336
37580
  if (identifier === 'framer/Scroll') return true;
37337
37581
  return false;
37338
37582
  }
37339
- var salt = 'framer';
37340
- var difficulty = 3;
37341
- var tokenLength = 30;
37342
- var maxTime = 3e3;
37343
- async function calculateProofOfWork() {
37344
- const target = '0'.repeat(difficulty,);
37345
- const startTime = Date.now();
37346
- let processing = true;
37347
- while (processing) {
37348
- const timestamp = Date.now();
37349
- if (timestamp - startTime > maxTime) {
37350
- processing = false;
37351
- return;
37352
- }
37353
- const nonce = randomCharacters(tokenLength,);
37354
- const secret = `${timestamp}:${nonce}`;
37355
- const hash2 = await sha256(salt + secret,);
37356
- if (hash2.startsWith(target,)) {
37357
- return {
37358
- secret,
37359
- hash: hash2,
37360
- };
37361
- }
37362
- }
37363
- return;
37364
- }
37365
- async function sha256(text,) {
37366
- const buffer = new TextEncoder().encode(text,);
37367
- const hashBuffer = await crypto.subtle.digest('SHA-256', buffer,);
37368
- return Array.from(new Uint8Array(hashBuffer,),).map((b) => b.toString(16,).padStart(2, '0',)).join('',);
37369
- }
37370
- function randomCharacters(count,) {
37371
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
37372
- let result = '';
37373
- const charactersLength = characters.length;
37374
- for (let i = 0; i < count; i++) {
37375
- result += characters.charAt(Math.floor(Math.random() * charactersLength,),);
37376
- }
37377
- return result;
37378
- }
37379
- function formReducer(_state, {
37380
- type,
37381
- },) {
37382
- switch (type) {
37383
- case 'submit':
37384
- return {
37385
- state: 'pending',
37386
- };
37387
- case 'success':
37388
- return {
37389
- state: 'success',
37390
- };
37391
- case 'error':
37392
- return {
37393
- state: 'error',
37394
- };
37395
- default:
37396
- assertNever(type,);
37397
- }
37398
- }
37399
- function preventDefault(e,) {
37400
- e.preventDefault();
37401
- }
37402
- var FormContainer = /* @__PURE__ */ React4.forwardRef(({
37403
- action,
37404
- formId,
37405
- disabled,
37406
- children,
37407
- redirectUrl,
37408
- onSuccess,
37409
- onError,
37410
- ...props
37411
- }, ref,) => {
37412
- const [state, dispatch,] = React4.useReducer(formReducer, {
37413
- state: disabled ? 'disabled' : void 0,
37414
- },);
37415
- const router = useRouter();
37416
- const {
37417
- activeLocale,
37418
- } = useLocaleInfo();
37419
- const isSubmitEnabled = state.state === void 0;
37420
- async function redirectTo(link,) {
37421
- var _a, _b;
37422
- if (isLinkToWebPage(link,)) {
37423
- if (!router) return;
37424
- const route = (_a = router.getRoute) == null ? void 0 : _a.call(router, link.webPageId,);
37425
- if (!route) return;
37426
- const {
37427
- unresolvedHashSlugs,
37428
- unresolvedPathSlugs,
37429
- } = link;
37430
- const resolvedSlugs = await resolveSlugs(unresolvedPathSlugs, unresolvedHashSlugs, router.collectionUtils, activeLocale,);
37431
- const combinedPathVariables = Object.assign(
37432
- {},
37433
- router.currentPathVariables,
37434
- link.pathVariables,
37435
- resolvedSlugs == null ? void 0 : resolvedSlugs.path,
37436
- );
37437
- const combinedHashVariables = Object.assign(
37438
- {},
37439
- router.currentPathVariables,
37440
- link.pathVariables,
37441
- link.hashVariables,
37442
- resolvedSlugs == null ? void 0 : resolvedSlugs.hash,
37443
- );
37444
- const element = getHashForRoute(link.hash, route, combinedHashVariables,);
37445
- (_b = router.navigate) == null ? void 0 : _b.call(router, link.webPageId, element, combinedPathVariables,);
37446
- return;
37447
- }
37448
- if (!safeWindow) return;
37449
- safeWindow.open(link, '_blank',);
37450
- }
37451
- const handleSubmit = async (event) => {
37452
- event.preventDefault();
37453
- if (!action) return;
37454
- const data2 = new FormData(event.currentTarget,);
37455
- for (const [key7, value,] of data2) {
37456
- if (value instanceof File) data2.delete(key7,);
37457
- }
37458
- try {
37459
- dispatch({
37460
- type: 'submit',
37461
- },);
37462
- await submitForm(action, data2,);
37463
- dispatch({
37464
- type: 'success',
37465
- },);
37466
- onSuccess == null ? void 0 : onSuccess();
37467
- if (redirectUrl) {
37468
- await redirectTo(redirectUrl,);
37469
- }
37470
- } catch (error) {
37471
- dispatch({
37472
- type: 'error',
37473
- },);
37474
- onError == null ? void 0 : onError();
37475
- }
37476
- };
37477
- const handleKeyDown = (event) => {
37478
- const {
37479
- target: input,
37480
- currentTarget: form,
37481
- key: key7,
37482
- } = event;
37483
- const isTextArea = input instanceof HTMLTextAreaElement;
37484
- if (isTextArea) return;
37485
- if (key7 === 'Enter' && form.checkValidity()) {
37486
- event.preventDefault();
37487
- void handleSubmit(event,);
37488
- }
37489
- };
37490
- return /* @__PURE__ */ jsx(motion.form, {
37491
- ...props,
37492
- 'data-formid': formId,
37493
- onSubmit: isSubmitEnabled ? handleSubmit : preventDefault,
37494
- onKeyDown: handleKeyDown,
37495
- ref,
37496
- children: children(state,),
37497
- },);
37498
- },);
37499
- async function submitForm(action, data2,) {
37500
- const proofOfWork = await calculateProofOfWork();
37501
- if (!proofOfWork) {
37502
- throw new Error('Failed to calculate proof of work',);
37503
- }
37504
- const response = await fetch(action, {
37505
- body: data2,
37506
- method: 'POST',
37507
- headers: {
37508
- 'Framer-POW': proofOfWork.secret,
37509
- 'Framer-POW-Enforce': 'true',
37510
- },
37511
- },);
37512
- if (response.ok) {
37513
- return response;
37514
- } else {
37515
- const body = await response.json();
37516
- const error = 'Failed to submit form';
37517
- if (responseHasError(body,)) {
37518
- throw new Error(`${error} - ${body.error.message}`,);
37519
- }
37520
- throw new Error(error,);
37521
- }
37522
- }
37523
- function responseHasError(response,) {
37524
- return typeof response === 'object' && response !== null && 'error' in response && isObject2(response.error,) &&
37525
- 'message' in response.error && typeof response.error.message === 'string';
37526
- }
37527
37583
  var FormInputStyleVariableNames = /* @__PURE__ */ ((FormInputStyleVariableNames2) => {
37528
37584
  FormInputStyleVariableNames2['Padding'] = '--framer-input-padding';
37529
37585
  FormInputStyleVariableNames2['BorderRadiusTopLeft'] = '--framer-input-border-radius-top-left';
@@ -37552,7 +37608,6 @@ var FormInputStyleVariableNames = /* @__PURE__ */ ((FormInputStyleVariableNames2
37552
37608
  FormInputStyleVariableNames2['FocusedBackground'] = '--framer-input-focused-background';
37553
37609
  FormInputStyleVariableNames2['FocusedBoxShadow'] = '--framer-input-focused-box-shadow';
37554
37610
  FormInputStyleVariableNames2['FocusedTransition'] = '--framer-input-focused-transition';
37555
- FormInputStyleVariableNames2['BooleanCheckedIconURL'] = '--framer-input-boolean-icon';
37556
37611
  FormInputStyleVariableNames2['BooleanCheckedBackground'] = '--framer-input-boolean-checked-background';
37557
37612
  FormInputStyleVariableNames2['BooleanCheckedBorderColor'] = '--framer-input-boolean-checked-border-color';
37558
37613
  FormInputStyleVariableNames2['BooleanCheckedBorderWidth'] = '--framer-input-boolean-checked-border-width';
@@ -37560,14 +37615,17 @@ var FormInputStyleVariableNames = /* @__PURE__ */ ((FormInputStyleVariableNames2
37560
37615
  FormInputStyleVariableNames2['BooleanCheckedBoxShadow'] = '--framer-input-boolean-checked-box-shadow';
37561
37616
  FormInputStyleVariableNames2['BooleanCheckedTransition'] = '--framer-input-boolean-checked-transition';
37562
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';
37563
37621
  return FormInputStyleVariableNames2;
37564
37622
  })(FormInputStyleVariableNames || {},);
37565
37623
  var Var = FormInputStyleVariableNames;
37566
- var inputClassName = /* @__PURE__ */ (() => 'framer-form-input')();
37567
- var inputWrapperClassName = /* @__PURE__ */ (() => 'framer-form-input-wrapper')();
37568
- var emptyValueClassName = /* @__PURE__ */ (() => 'framer-form-input-empty')();
37569
- var forcedFocusClassName = /* @__PURE__ */ (() => 'framer-form-input-forced-focus')();
37570
- var forcedCheckedClassName = /* @__PURE__ */ (() => 'framer-form-input-forced-checked')();
37624
+ var inputClassName = 'framer-form-input';
37625
+ var inputWrapperClassName = 'framer-form-input-wrapper';
37626
+ var emptyValueClassName = 'framer-form-input-empty';
37627
+ var forcedFocusClassName = 'framer-form-input-forced-focus';
37628
+ var forcedCheckedClassName = 'framer-form-input-forced-checked';
37571
37629
  function cssValue(value,) {
37572
37630
  if (typeof value === 'number') return value;
37573
37631
  if (value.startsWith('--',)) return css.variable(value,);
@@ -37577,7 +37635,8 @@ function cssValue(value,) {
37577
37635
  function css(selector, declaration,) {
37578
37636
  let output = ' ';
37579
37637
  for (const key7 in declaration) {
37580
- output += `${key7.replace(/([A-Z])/gu, '-$1',).toLowerCase()}: ${cssValue(declaration[key7],)}; `;
37638
+ const value = declaration[key7];
37639
+ output += `${key7.replace(/([A-Z])/gu, '-$1',).toLowerCase()}: ${cssValue(value,)}; `;
37581
37640
  }
37582
37641
  return selector + ' {' + output + '}';
37583
37642
  }
@@ -37593,51 +37652,34 @@ function css(selector, declaration,) {
37593
37652
  }
37594
37653
  css2.variable = variable;
37595
37654
  })(css || (css = {}),);
37596
- var sharedInputCSS = [`.${inputClassName} {
37597
- padding: var(${Var.Padding});
37598
- background: var(${Var.Background});
37599
- font-family: var(${Var.FontFamily});
37600
- font-weight: var(${Var.FontWeight});
37601
- font-size: var(${Var.FontSize});
37602
- color: var(${Var.FontColor});
37603
- box-shadow: var(${Var.BoxShadow});
37604
- border: none;
37605
- text-overflow: ellipsis;
37606
- white-space: nowrap;
37607
- overflow: hidden;
37608
- width: 100%;
37609
- height: 100%;
37610
- border-top-left-radius: var(${Var.BorderRadiusTopLeft});
37611
- border-top-right-radius: var(${Var.BorderRadiusTopRight});
37612
- border-bottom-right-radius: var(${Var.BorderRadiusBottomRight});
37613
- border-bottom-left-radius: var(${Var.BorderRadiusBottomLeft});
37614
- letter-spacing: var(${Var.FontLetterSpacing});
37615
- text-align: var(${Var.FontTextAlignment});
37616
- line-height: var(${Var.FontLineHeight});
37617
- transition: var(${Var.FocusedTransition});
37618
- transition-property: background, box-shadow;
37619
- }`,];
37620
- var focusInputCSS =
37621
- /* @__PURE__ */ (() => [
37622
- `.${inputClassName}:focus-visible { outline: none; }`,
37623
- `.${inputClassName}:focus, .${inputClassName}.${forcedFocusClassName} {
37624
- background: ${css.variable(Var.FocusedBackground, Var.Background,)};
37625
- box-shadow: ${css.variable(Var.FocusedBoxShadow, Var.BoxShadow,)};
37626
- }`,
37627
- `.${inputWrapperClassName}:focus-within::after, .${inputWrapperClassName}.${forcedFocusClassName}::after {
37628
- border-color: ${css.variable(Var.FocusedBorderColor, Var.BorderColor,)};
37629
- border-style: ${css.variable(Var.FocusedBorderStyle, Var.BorderStyle,)};
37630
- border-top-width: ${css.variable(Var.FocusedBorderWidth, Var.BorderTopWidth,)};
37631
- border-right-width: ${css.variable(Var.FocusedBorderWidth, Var.BorderRightWidth,)};
37632
- border-bottom-width: ${css.variable(Var.FocusedBorderWidth, Var.BorderBottomWidth,)};
37633
- border-left-width: ${css.variable(Var.FocusedBorderWidth, Var.BorderLeftWidth,)};
37634
- }`,
37635
- ])();
37636
- var inputBorderCSS = [
37637
- `.${inputWrapperClassName} {
37638
- position: relative;
37639
- }`,
37640
- `.${inputWrapperClassName}:after {
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
+ },),
37676
+ ];
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 {
37641
37683
  content: "";
37642
37684
  pointer-events: none;
37643
37685
  box-sizing: border-box;
@@ -37658,8 +37700,84 @@ var inputBorderCSS = [
37658
37700
  border-style: var(${Var.BorderStyle});
37659
37701
  transition: var(${Var.FocusedTransition});
37660
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;
37661
- }`,
37662
- ];
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
+ };
37663
37781
  var passwordManagerIgnoreDataProps = {
37664
37782
  // 1Password
37665
37783
  'data-1p-ignore': true,
@@ -37679,146 +37797,202 @@ var PlainTextInput = /* @__PURE__ */ React4.forwardRef(function FormPlainTextInp
37679
37797
  inputName,
37680
37798
  max,
37681
37799
  min,
37682
- onBlur,
37683
- onFocus,
37684
- onInvalid,
37685
37800
  placeholder,
37686
37801
  required,
37687
37802
  step: step2,
37688
37803
  style,
37689
37804
  type,
37690
- value,
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,
37691
37810
  autofillEnabled,
37692
- canvasPreviewClassName,
37693
- ...rest
37694
- } = props;
37695
- const [hasValue, setHasValue,] = React4.useState(!!value,);
37696
- const dataProps = autofillEnabled === false ? passwordManagerIgnoreDataProps : void 0;
37697
- const eventProps = {
37811
+ onChange,
37698
37812
  onBlur,
37699
- onFocus,
37700
37813
  onInvalid,
37701
- };
37702
- const onChange = React4.useCallback((e) => {
37814
+ onFocus,
37815
+ onValid,
37816
+ ...rest
37817
+ } = props;
37818
+ const [hasValue, setHasValue,] = React4.useState(!!defaultValue,);
37819
+ const handleChange = React4.useCallback((e) => {
37703
37820
  const newValue = e.target.value;
37821
+ onChange == null ? void 0 : onChange(e,);
37704
37822
  setHasValue(!!newValue,);
37705
- }, [],);
37706
- switch (type) {
37707
- case 'hidden':
37708
- return /* @__PURE__ */ jsx(motion.input, {
37709
- type: 'hidden',
37710
- name: inputName,
37711
- value,
37712
- },);
37713
- case 'textarea':
37714
- return /* @__PURE__ */ jsx(motion.div, {
37715
- ref,
37716
- style,
37717
- className: cx(inputWrapperClassName, canvasPreviewClassName, className2,),
37718
- ...rest,
37719
- children: /* @__PURE__ */ jsx(motion.textarea, {
37720
- id: inputName,
37721
- ...dataProps,
37722
- ...eventProps,
37723
- required,
37724
- autoFocus,
37725
- name: inputName,
37726
- placeholder,
37727
- className: cx(inputClassName, canvasPreviewClassName,),
37728
- value,
37729
- },),
37730
- },);
37731
- default:
37732
- return /* @__PURE__ */ jsx(motion.div, {
37733
- ref,
37734
- style,
37735
- className: cx(inputWrapperClassName, canvasPreviewClassName, className2,),
37736
- ...rest,
37737
- children: /* @__PURE__ */ jsx(motion.input, {
37738
- id: inputName,
37739
- ...dataProps,
37740
- ...eventProps,
37741
- type,
37742
- required,
37743
- autoFocus,
37744
- name: inputName,
37745
- placeholder,
37746
- className: cx(inputClassName, canvasPreviewClassName, !hasValue && emptyValueClassName,),
37747
- onChange,
37748
- value,
37749
- min,
37750
- max,
37751
- step: step2,
37752
- },),
37753
- },);
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
+ },);
37754
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
+ },);
37755
37869
  },);
37756
- var iconSpacing = /* @__PURE__ */ (() => 10)();
37757
- var iconSize = /* @__PURE__ */ (() => 14)();
37758
- var defaultDateIcon =
37759
- /* @__PURE__ */ (() =>
37760
- `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${iconSize}' height='${iconSize}'%3E%3Cpath d='M2 4a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v2H2Z' fill='currentColor' opacity='.3'/%3E%3Cpath d='M2.25 4.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-2ZM2 5.75h9.5' fill='transparent' stroke-width='1.5' stroke='currentColor'/%3E%3C/svg%3E`)();
37761
- var defaultTimeIcon =
37762
- /* @__PURE__ */ (() =>
37763
- `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${iconSize}' height='${iconSize}'%3E%3Cpath d='M1.5 7a5.5 5.5 0 1 1 11 0 5.5 5.5 0 1 1-11 0Z' fill='transparent' stroke-width='1.5' stroke='currentColor'/%3E%3Cpath d='M6.75 7.25v-3m0 3h2' fill='transparent' stroke-width='1.5' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E`)();
37764
- var FormPlainTextInput2 =
37765
- /* @__PURE__ */ (() =>
37766
- withCSS(PlainTextInput, [
37767
- ...sharedInputCSS,
37768
- ...focusInputCSS,
37769
- ...inputBorderCSS,
37770
- `.${inputClassName}::placeholder {
37771
- color: var(${'--framer-input-placeholder-color'});
37772
- }`,
37773
- `textarea.${inputClassName} {
37774
- resize: var(${'--framer-textarea-resize'});
37775
- min-height: var(${'--framer-textarea-min-height'});
37776
- }`,
37777
- `.${inputClassName}.${emptyValueClassName}::-webkit-datetime-edit {
37778
- color:var(${'--framer-input-placeholder-color'});
37779
- -webkit-text-fill-color: var(${'--framer-input-placeholder-color'});
37780
- }`,
37781
- `.${inputClassName}[type="date"]::before, .${inputClassName}[type="time"]::before {
37782
- content: "";
37783
- display: block;
37784
- position: absolute;
37785
- padding: var(${'--framer-input-padding'});
37786
- padding-left: ${iconSpacing}px;
37787
- right: 0;
37788
- top: 0;
37789
- bottom: 0;
37790
- width: ${iconSize}px;
37791
- box-sizing: content-box;
37792
-
37793
- pointer-events: none;
37794
- mask-repeat: no-repeat;
37795
- mask-position: ${iconSpacing}px center;
37796
- border: none;
37797
- background-color: #999;
37798
- }`,
37799
- `.${inputClassName}[type="date"]::before {
37800
- mask-image: url("${defaultDateIcon}");
37801
- }`,
37802
- `.${inputClassName}[type="time"]::before {
37803
- mask-image: url("${defaultTimeIcon}");
37804
- }`,
37805
- // Hide the native date picker icon, but still allow the user to click it.
37806
- `.${inputClassName}::-webkit-calendar-picker-indicator {
37807
- opacity: 0;
37808
- padding: var(${'--framer-input-padding'});
37809
- padding-right: 0;
37810
- padding-left: ${iconSpacing}px;
37811
- width: ${iconSize}px;
37812
- height: ${iconSize}px;
37813
- }`,
37814
- ],))();
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,);
37815
37989
  var className = 'framer-form-boolean-input';
37816
37990
  var BooleanInput = /* @__PURE__ */ React4.forwardRef(function FormPlainTextInput3(props, ref,) {
37817
37991
  const {
37818
37992
  inputName,
37819
37993
  type = 'checkbox',
37820
37994
  defaultChecked,
37821
- canvasPreviewClassName,
37995
+ onValid,
37822
37996
  ...rest
37823
37997
  } = props;
37824
37998
  const isCanvas = useIsOnFramerCanvas();
@@ -37829,24 +38003,23 @@ var BooleanInput = /* @__PURE__ */ React4.forwardRef(function FormPlainTextInput
37829
38003
  : {
37830
38004
  defaultChecked,
37831
38005
  };
38006
+ const eventHandlers = useCustomValidity(onValid, props.onInvalid, props.onChange, props.onBlur, props.onFocus,);
37832
38007
  return /* @__PURE__ */ jsx(motion.input, {
37833
38008
  ...rest,
37834
38009
  ...attributes,
38010
+ ...eventHandlers,
37835
38011
  readOnly: isCanvas,
37836
38012
  ref,
37837
- id: inputName,
37838
38013
  type,
37839
38014
  name: inputName,
37840
- className: cx(className, props.className, canvasPreviewClassName,),
38015
+ className: cx(className, props.className,),
37841
38016
  },);
37842
38017
  },);
37843
38018
  var defaultCheckedIcon =
37844
- `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>`;
37845
- var borderWidth =
37846
- `var(${'--framer-input-border-top-width'}) var(${'--framer-input-border-right-width'}) var(${'--framer-input-border-bottom-width'}) var(${'--framer-input-border-left-width'})`;
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>';
37847
38020
  var borderRadius =
37848
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'})`;
37849
- var styles = /* @__PURE__ */ (() => [
38022
+ var styles2 = /* @__PURE__ */ (() => [
37850
38023
  css(`.${className}`, {
37851
38024
  '-webkit-appearance': 'none',
37852
38025
  // background-color: #fff; fixes a bug on iOS where the checkbox shows
@@ -37872,7 +38045,7 @@ var styles = /* @__PURE__ */ (() => [
37872
38045
  borderColor: css.variable('--framer-input-border-color', 'transparent',),
37873
38046
  borderRadius,
37874
38047
  borderStyle: '--framer-input-border-style',
37875
- borderWidth,
38048
+ borderWidth: inputBorderAllSides,
37876
38049
  boxSizing: 'border-box',
37877
38050
  content: '',
37878
38051
  display: 'block',
@@ -37884,22 +38057,31 @@ var styles = /* @__PURE__ */ (() => [
37884
38057
  // The before element is used to display the check mark icon. It is
37885
38058
  // faded in when the input is checked.
37886
38059
  css(`.${className}::before`, {
37887
- // Use the icon url if it's provided, falling back to a default check
37888
- // mark. Radio inputs will be code-generated with a "none" value for the
37889
- // variable if an image isn't provided which will prevent this fallback
37890
- // in those cases.
37891
- backgroundImage: css.variable('--framer-input-boolean-icon', `url('${defaultCheckedIcon}')`,),
38060
+ ...inputIconCSSDeclaration,
37892
38061
  backgroundPosition: 'center',
37893
- backgroundRepeat: 'no-repeat',
37894
38062
  backgroundSize: 'contain',
37895
- content: '',
37896
- display: 'block',
38063
+ maskPosition: 'center',
38064
+ maskSize: 'contain',
37897
38065
  height: '100%',
37898
38066
  opacity: 0,
37899
38067
  transition: '--framer-input-boolean-checked-transition',
37900
38068
  transitionProperty: 'opacity',
37901
38069
  width: '100%',
37902
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
+ },),
37903
38085
  css(`.${className}:checked, .${className}.${forcedCheckedClassName}`, {
37904
38086
  // When not set, the styles when checked shouldn't clear the default
37905
38087
  // styles.
@@ -37916,7 +38098,7 @@ var styles = /* @__PURE__ */ (() => [
37916
38098
  // styles.
37917
38099
  borderColor: css.variable('--framer-input-boolean-checked-border-color', '--framer-input-border-color', 'transparent',),
37918
38100
  borderStyle: css.variable('--framer-input-boolean-checked-border-style', '--framer-input-border-style', 'solid',),
37919
- borderWidth: css.variable('--framer-input-boolean-checked-border-width', borderWidth,),
38101
+ borderWidth: css.variable('--framer-input-boolean-checked-border-width', inputBorderAllSides,),
37920
38102
  },),
37921
38103
  css(`.${className}:focus, .${className}.${forcedFocusClassName}`, {
37922
38104
  backgroundColor: css.variable('--framer-input-focused-background', '--framer-input-background',/* Background */
@@ -37932,7 +38114,7 @@ var styles = /* @__PURE__ */ (() => [
37932
38114
  // styles.
37933
38115
  borderColor: css.variable('--framer-input-focused-border-color', '--framer-input-border-color', 'transparent',),
37934
38116
  borderStyle: css.variable('--framer-input-focused-border-style', '--framer-input-border-style', 'solid',),
37935
- borderWidth: css.variable('--framer-input-focused-border-width', borderWidth,),
38117
+ borderWidth: css.variable('--framer-input-focused-border-width', inputBorderAllSides,),
37936
38118
  },),
37937
38119
  css(`.${className}:focus:checked`, {
37938
38120
  backgroundColor: css.variable(
@@ -37955,40 +38137,40 @@ var styles = /* @__PURE__ */ (() => [
37955
38137
  '--framer-input-border-style',
37956
38138
  'solid',
37957
38139
  ),
37958
- borderWidth: css.variable('--framer-input-focused-border-width', '--framer-input-boolean-checked-border-width', borderWidth,),
38140
+ borderWidth: css.variable('--framer-input-focused-border-width', '--framer-input-boolean-checked-border-width', inputBorderAllSides,),
37959
38141
  },),
37960
38142
  ])();
37961
- var FormBooleanInput = /* @__PURE__ */ withCSS(BooleanInput, styles,);
38143
+ var FormBooleanInput = /* @__PURE__ */ withCSS(BooleanInput, styles2,);
37962
38144
  var Select = /* @__PURE__ */ React4.forwardRef(function Select2(props, measureRef,) {
37963
38145
  const {
37964
38146
  autoFocus,
37965
38147
  className: className2,
37966
38148
  inputName,
37967
- onBlur,
37968
- onFocus,
37969
- onInvalid,
37970
38149
  required,
37971
- selectDefaultValue,
38150
+ defaultValue,
37972
38151
  selectOptions,
37973
38152
  style,
37974
- canvasPreviewClassName,
38153
+ onValid,
38154
+ onChange,
38155
+ onBlur,
38156
+ onInvalid,
38157
+ onFocus,
37975
38158
  ...rest
37976
38159
  } = props;
38160
+ const eventHandlers = useCustomValidity(onValid, onInvalid, onChange, onBlur, onFocus,);
38161
+ const key7 = Array.isArray(defaultValue,) ? defaultValue[0] : defaultValue;
37977
38162
  return /* @__PURE__ */ jsx(motion.div, {
37978
38163
  ref: measureRef,
37979
38164
  style,
37980
- className: cx(inputWrapperClassName, selectWrapperClassName, canvasPreviewClassName, className2,),
38165
+ className: cx(inputWrapperClassName, selectWrapperClassName, className2,),
37981
38166
  ...rest,
37982
38167
  children: /* @__PURE__ */ jsx(motion.select, {
37983
- id: inputName,
37984
38168
  name: inputName,
37985
38169
  autoFocus,
37986
38170
  required,
37987
- className: cx(inputClassName, canvasPreviewClassName,),
37988
- defaultValue: selectDefaultValue,
37989
- onBlur,
37990
- onFocus,
37991
- onInvalid,
38171
+ className: inputClassName,
38172
+ defaultValue,
38173
+ ...eventHandlers,
37992
38174
  children: selectOptions == null ? void 0 : selectOptions.map((option, index,) => {
37993
38175
  switch (option.type) {
37994
38176
  case 'divider':
@@ -38001,41 +38183,84 @@ var Select = /* @__PURE__ */ React4.forwardRef(function Select2(props, measureRe
38001
38183
  }, index,);
38002
38184
  }
38003
38185
  },),
38004
- }, selectDefaultValue,),
38186
+ }, key7,),
38005
38187
  },);
38006
38188
  },);
38007
38189
  var selectWrapperClassName = 'framer-form-select-wrapper';
38008
38190
  var selectArrowSize = 16;
38009
- var FormSelect = /* @__PURE__ */ (() =>
38010
- withCSS(Select, [
38011
- ...sharedInputCSS,
38012
- ...focusInputCSS,
38013
- ...inputBorderCSS,
38014
- `select.${inputClassName} {
38015
- appearance: none;
38016
- -webkit-appearance: none;
38017
- padding-right: calc(var(${'--framer-input-padding'}) * 2 + ${selectArrowSize}px);
38018
- }`,
38019
- `.${selectWrapperClassName}::before {
38020
- content: "";
38021
- display: block;
38022
- position: absolute;
38023
- right: 0;
38024
- height: 100%;
38025
- width: 16px;
38026
- box-sizing: content-box;
38027
- padding: 0 var(${'--framer-input-padding'});
38028
- position: absolute;
38029
- pointer-events: none;
38030
- 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>');
38031
- background-repeat: no-repeat;
38032
- background-position: center center;
38033
- border: none;
38034
- }`,
38035
- `select.${inputClassName}:required:invalid {
38036
- color: var(${'--framer-input-invalid-text-color'});
38037
- }`,
38038
- ],))();
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,);
38039
38264
  var Image2 = /* @__PURE__ */ React4.forwardRef(function Image3(props, ref,) {
38040
38265
  const {
38041
38266
  background,
@@ -38142,7 +38367,7 @@ function convertCodeComponentContainer(componentDefinitionProvider, node, conver
38142
38367
  ),
38143
38368
  ];
38144
38369
  }
38145
- var CodeComponentPresentation = class {
38370
+ var CodeComponentPresentation = /*#__PURE__*/ class {
38146
38371
  constructor(id3, componentIdentifier, packageVersion, props, children, codeOverrideIdentifier,) {
38147
38372
  this.id = id3;
38148
38373
  this.componentIdentifier = componentIdentifier;
@@ -38854,7 +39079,7 @@ var ImagePatternElement = ({
38854
39079
  },);
38855
39080
  };
38856
39081
  var useDOM = /* @__PURE__ */ isBrowser2();
38857
- var SharedSVGEntry = class {
39082
+ var SharedSVGEntry = /*#__PURE__*/ class {
38858
39083
  constructor(id3, svg, innerHTML, viewBox, count = 0,) {
38859
39084
  this.id = id3;
38860
39085
  this.svg = svg;
@@ -38863,7 +39088,7 @@ var SharedSVGEntry = class {
38863
39088
  this.count = count;
38864
39089
  }
38865
39090
  };
38866
- var SharedSVGManager = class {
39091
+ var SharedSVGManager = /*#__PURE__*/ class {
38867
39092
  constructor() {
38868
39093
  __publicField(this, 'entries', /* @__PURE__ */ new Map(),);
38869
39094
  }
@@ -39856,7 +40081,7 @@ function getTabIndexProps(tabIndex,) {
39856
40081
  };
39857
40082
  }
39858
40083
  var keys22 = /* @__PURE__ */ new Map();
39859
- var InternalID = class {
40084
+ var InternalID = /*#__PURE__*/ class {
39860
40085
  constructor(id3,) {
39861
40086
  this.id = id3;
39862
40087
  __publicField(this, '_link', null,);
@@ -39887,7 +40112,7 @@ var InternalID = class {
39887
40112
  }
39888
40113
  };
39889
40114
  var PathSegmentOuter = /* @__PURE__ */ (() => {
39890
- const _PathSegment = class {
40115
+ const _PathSegment = /*#__PURE__*/ class {
39891
40116
  constructor(value,) {
39892
40117
  __publicField(this, '__class', 'PathSegment',);
39893
40118
  __publicField(this, 'x', 0,);
@@ -40142,7 +40367,7 @@ function transformString(transform2,) {
40142
40367
  }
40143
40368
  return result;
40144
40369
  }
40145
- var LinearGradientElement = class extends Component {
40370
+ var LinearGradientElement = /*#__PURE__*/ class extends Component {
40146
40371
  render() {
40147
40372
  const {
40148
40373
  id: id3,
@@ -40168,7 +40393,7 @@ var LinearGradientElement = class extends Component {
40168
40393
  },);
40169
40394
  }
40170
40395
  };
40171
- var RadialGradientElement = class extends Component {
40396
+ var RadialGradientElement = /*#__PURE__*/ class extends Component {
40172
40397
  render() {
40173
40398
  const {
40174
40399
  centerAnchorX,
@@ -40196,7 +40421,7 @@ var RadialGradientElement = class extends Component {
40196
40421
  },);
40197
40422
  }
40198
40423
  };
40199
- var SVGRoot = class extends Component {
40424
+ var SVGRoot = /*#__PURE__*/ class extends Component {
40200
40425
  render() {
40201
40426
  const {
40202
40427
  children,