unframer 2.25.4 → 2.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/babel-jsx.d.ts +15 -0
  2. package/dist/babel-jsx.d.ts.map +1 -0
  3. package/dist/babel-jsx.js +223 -0
  4. package/dist/babel-jsx.js.map +1 -0
  5. package/dist/babel-plugin-imports.d.ts +0 -6
  6. package/dist/babel-plugin-imports.d.ts.map +1 -1
  7. package/dist/babel-plugin-imports.js +2 -135
  8. package/dist/babel-plugin-imports.js.map +1 -1
  9. package/dist/cli.d.ts +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +31 -6
  12. package/dist/cli.js.map +1 -1
  13. package/dist/css.js +13 -13
  14. package/dist/esbuild.d.ts.map +1 -1
  15. package/dist/esbuild.js +82 -66
  16. package/dist/esbuild.js.map +1 -1
  17. package/dist/example-code.test.js +39 -39
  18. package/dist/example-code.test.js.map +1 -1
  19. package/dist/exporter.d.ts.map +1 -1
  20. package/dist/exporter.js +137 -87
  21. package/dist/exporter.js.map +1 -1
  22. package/dist/flat-cache-interceptor.d.ts +27 -0
  23. package/dist/flat-cache-interceptor.d.ts.map +1 -0
  24. package/dist/flat-cache-interceptor.js +99 -0
  25. package/dist/flat-cache-interceptor.js.map +1 -0
  26. package/dist/framer.d.ts.map +1 -1
  27. package/dist/framer.js +895 -741
  28. package/dist/framer.js.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/react.d.ts.map +1 -1
  32. package/dist/react.js +15 -3
  33. package/dist/react.js.map +1 -1
  34. package/dist/sentry.d.ts +1 -1
  35. package/dist/sentry.d.ts.map +1 -1
  36. package/dist/sentry.js +2 -17
  37. package/dist/sentry.js.map +1 -1
  38. package/dist/undici-dispatcher.d.ts +2 -0
  39. package/dist/undici-dispatcher.d.ts.map +1 -0
  40. package/dist/undici-dispatcher.js +13 -0
  41. package/dist/undici-dispatcher.js.map +1 -0
  42. package/dist/utils.d.ts +3 -3
  43. package/dist/utils.d.ts.map +1 -1
  44. package/dist/utils.js +4 -10
  45. package/dist/utils.js.map +1 -1
  46. package/dist/utils.test.d.ts +2 -0
  47. package/dist/utils.test.d.ts.map +1 -0
  48. package/dist/utils.test.js +143 -0
  49. package/dist/utils.test.js.map +1 -0
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.js +1 -1
  52. package/esm/babel-jsx.d.ts +15 -0
  53. package/esm/babel-jsx.d.ts.map +1 -0
  54. package/esm/babel-jsx.js +219 -0
  55. package/esm/babel-jsx.js.map +1 -0
  56. package/esm/babel-plugin-imports.d.ts +0 -6
  57. package/esm/babel-plugin-imports.d.ts.map +1 -1
  58. package/esm/babel-plugin-imports.js +2 -134
  59. package/esm/babel-plugin-imports.js.map +1 -1
  60. package/esm/cli.d.ts +1 -0
  61. package/esm/cli.d.ts.map +1 -1
  62. package/esm/cli.js +31 -6
  63. package/esm/cli.js.map +1 -1
  64. package/esm/css.js +13 -13
  65. package/esm/esbuild.d.ts.map +1 -1
  66. package/esm/esbuild.js +82 -66
  67. package/esm/esbuild.js.map +1 -1
  68. package/esm/example-code.test.js +40 -40
  69. package/esm/example-code.test.js.map +1 -1
  70. package/esm/exporter.d.ts.map +1 -1
  71. package/esm/exporter.js +100 -50
  72. package/esm/exporter.js.map +1 -1
  73. package/esm/flat-cache-interceptor.d.ts +27 -0
  74. package/esm/flat-cache-interceptor.d.ts.map +1 -0
  75. package/esm/flat-cache-interceptor.js +95 -0
  76. package/esm/flat-cache-interceptor.js.map +1 -0
  77. package/esm/framer.d.ts.map +1 -1
  78. package/esm/framer.js +871 -729
  79. package/esm/framer.js.map +1 -1
  80. package/esm/index.d.ts +1 -1
  81. package/esm/index.d.ts.map +1 -1
  82. package/esm/react.d.ts.map +1 -1
  83. package/esm/react.js +15 -3
  84. package/esm/react.js.map +1 -1
  85. package/esm/sentry.d.ts +1 -1
  86. package/esm/sentry.d.ts.map +1 -1
  87. package/esm/sentry.js +2 -17
  88. package/esm/sentry.js.map +1 -1
  89. package/esm/undici-dispatcher.d.ts +2 -0
  90. package/esm/undici-dispatcher.d.ts.map +1 -0
  91. package/esm/undici-dispatcher.js +10 -0
  92. package/esm/undici-dispatcher.js.map +1 -0
  93. package/esm/utils.d.ts +3 -3
  94. package/esm/utils.d.ts.map +1 -1
  95. package/esm/utils.js +3 -9
  96. package/esm/utils.js.map +1 -1
  97. package/esm/utils.test.d.ts +2 -0
  98. package/esm/utils.test.d.ts.map +1 -0
  99. package/esm/utils.test.js +141 -0
  100. package/esm/utils.test.js.map +1 -0
  101. package/esm/version.d.ts +1 -1
  102. package/esm/version.js +1 -1
  103. package/package.json +8 -10
  104. package/src/babel-jsx.ts +277 -0
  105. package/src/babel-plugin-imports.ts +6 -169
  106. package/src/cli.ts +45 -6
  107. package/src/css.ts +13 -13
  108. package/src/esbuild.ts +93 -74
  109. package/src/example-code.test.ts +40 -41
  110. package/src/exporter.ts +124 -54
  111. package/src/flat-cache-interceptor.ts +114 -0
  112. package/src/framer.js +921 -764
  113. package/src/index.ts +1 -1
  114. package/src/react.tsx +15 -1
  115. package/src/sentry.ts +3 -22
  116. package/src/undici-dispatcher.ts +13 -0
  117. package/src/utils.test.ts +148 -0
  118. package/src/utils.ts +4 -17
  119. package/src/version.ts +1 -1
package/esm/framer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __commonJS, __decorateElement, __decoratorMetadata, __decoratorStart, __export, __privateAdd, __privateGet, __privateMethod, __privateSet, __publicField, __runInitializers, __toESM, } from './framer-chunks/chunk-A2PMVMFI.js';
2
- // /:https://app.framerstatic.com/chunk-IGW3TQSG.mjs
2
+ // /:https://app.framerstatic.com/chunk-A6RUM2JZ.mjs
3
3
  import { createContext, } from 'react';
4
4
  import { useEffect, useLayoutEffect, } from 'react';
5
5
  import { useCallback, useContext, useId, } from 'react';
@@ -51,251 +51,6 @@ var LayoutGroupContext = createContext({});
51
51
  var isBrowser = typeof window !== 'undefined';
52
52
  var useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
53
53
  var PresenceContext = /* @__PURE__ */ createContext(null);
54
- var MotionConfigContext = createContext({
55
- transformPagePoint: (p) => p,
56
- isStatic: false,
57
- reducedMotion: 'never',
58
- });
59
- function usePresence(subscribe = true) {
60
- const context = useContext(PresenceContext);
61
- if (context === null)
62
- return [true, null,];
63
- const { isPresent: isPresent2, onExitComplete, register, } = context;
64
- const id4 = useId();
65
- useEffect(() => {
66
- if (subscribe) {
67
- return register(id4);
68
- }
69
- }, [subscribe,]);
70
- const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id4), [id4, onExitComplete, subscribe,]);
71
- return !isPresent2 && onExitComplete ? [false, safeToRemove,] : [true,];
72
- }
73
- function useIsPresent() {
74
- return isPresent(useContext(PresenceContext));
75
- }
76
- function isPresent(context) {
77
- return context === null ? true : context.isPresent;
78
- }
79
- function useConstant(init) {
80
- const ref = useRef3(null);
81
- if (ref.current === null) {
82
- ref.current = init();
83
- }
84
- return ref.current;
85
- }
86
- var PopChildMeasure = class extends React2.Component {
87
- getSnapshotBeforeUpdate(prevProps) {
88
- const element = this.props.childRef.current;
89
- if (element && prevProps.isPresent && !this.props.isPresent) {
90
- const parent = element.offsetParent;
91
- const parentWidth = parent instanceof HTMLElement ? parent.offsetWidth || 0 : 0;
92
- const size = this.props.sizeRef.current;
93
- size.height = element.offsetHeight || 0;
94
- size.width = element.offsetWidth || 0;
95
- size.top = element.offsetTop;
96
- size.left = element.offsetLeft;
97
- size.right = parentWidth - size.width - size.left;
98
- }
99
- return null;
100
- }
101
- /**
102
- * Required with getSnapshotBeforeUpdate to stop React complaining.
103
- */
104
- componentDidUpdate() { }
105
- render() {
106
- return this.props.children;
107
- }
108
- };
109
- function PopChild({ children, isPresent: isPresent2, anchorX, }) {
110
- const id4 = useId();
111
- const ref = useRef3(null);
112
- const size = useRef3({
113
- width: 0,
114
- height: 0,
115
- top: 0,
116
- left: 0,
117
- right: 0,
118
- });
119
- const { nonce, } = useContext(MotionConfigContext);
120
- useInsertionEffect(() => {
121
- const { width, height, top, left, right, } = size.current;
122
- if (isPresent2 || !ref.current || !width || !height)
123
- return;
124
- const x = anchorX === 'left' ? `left: ${left}` : `right: ${right}`;
125
- ref.current.dataset.motionPopId = id4;
126
- const style2 = document.createElement('style');
127
- if (nonce)
128
- style2.nonce = nonce;
129
- document.head.appendChild(style2);
130
- if (style2.sheet) {
131
- style2.sheet.insertRule(`
132
- [data-motion-pop-id="${id4}"] {
133
- position: absolute !important;
134
- width: ${width}px !important;
135
- height: ${height}px !important;
136
- ${x}px !important;
137
- top: ${top}px !important;
138
- }
139
- `);
140
- }
141
- return () => {
142
- if (document.head.contains(style2)) {
143
- document.head.removeChild(style2);
144
- }
145
- };
146
- }, [isPresent2,]);
147
- return jsx3(PopChildMeasure, {
148
- isPresent: isPresent2,
149
- childRef: ref,
150
- sizeRef: size,
151
- children: React2.cloneElement(children, {
152
- ref,
153
- }),
154
- });
155
- }
156
- var PresenceChild = ({ children, initial, isPresent: isPresent2, onExitComplete, custom, presenceAffectsLayout, mode, anchorX, }) => {
157
- const presenceChildren = useConstant(newChildrenMap);
158
- const id4 = useId();
159
- let isReusedContext = true;
160
- let context = useMemo2(() => {
161
- isReusedContext = false;
162
- return {
163
- id: id4,
164
- initial,
165
- isPresent: isPresent2,
166
- custom,
167
- onExitComplete: (childId) => {
168
- presenceChildren.set(childId, true);
169
- for (const isComplete of presenceChildren.values()) {
170
- if (!isComplete)
171
- return;
172
- }
173
- onExitComplete && onExitComplete();
174
- },
175
- register: (childId) => {
176
- presenceChildren.set(childId, false);
177
- return () => presenceChildren.delete(childId);
178
- },
179
- };
180
- }, [isPresent2, presenceChildren, onExitComplete,]);
181
- if (presenceAffectsLayout && isReusedContext) {
182
- context = {
183
- ...context,
184
- };
185
- }
186
- useMemo2(() => {
187
- presenceChildren.forEach((_, key7) => presenceChildren.set(key7, false));
188
- }, [isPresent2,]);
189
- React2.useEffect(() => {
190
- !isPresent2 && !presenceChildren.size && onExitComplete && onExitComplete();
191
- }, [isPresent2,]);
192
- if (mode === 'popLayout') {
193
- children = jsx3(PopChild, {
194
- isPresent: isPresent2,
195
- anchorX,
196
- children,
197
- });
198
- }
199
- return jsx3(PresenceContext.Provider, {
200
- value: context,
201
- children,
202
- });
203
- };
204
- function newChildrenMap() {
205
- return /* @__PURE__ */ new Map();
206
- }
207
- var getChildKey = (child) => child.key || '';
208
- function onlyElements(children) {
209
- const filtered = [];
210
- Children.forEach(children, (child) => {
211
- if (isValidElement(child))
212
- filtered.push(child);
213
- });
214
- return filtered;
215
- }
216
- var AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = 'sync', propagate = false, anchorX = 'left', }) => {
217
- const [isParentPresent, safeToRemove,] = usePresence(propagate);
218
- const presentChildren = useMemo2(() => onlyElements(children), [children,]);
219
- const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);
220
- const isInitialRender = useRef3(true);
221
- const pendingPresentChildren = useRef3(presentChildren);
222
- const exitComplete = useConstant(() => /* @__PURE__ */ new Map());
223
- const [diffedChildren, setDiffedChildren,] = useState(presentChildren);
224
- const [renderedChildren, setRenderedChildren,] = useState(presentChildren);
225
- useIsomorphicLayoutEffect(() => {
226
- isInitialRender.current = false;
227
- pendingPresentChildren.current = presentChildren;
228
- for (let i = 0; i < renderedChildren.length; i++) {
229
- const key7 = getChildKey(renderedChildren[i]);
230
- if (!presentKeys.includes(key7)) {
231
- if (exitComplete.get(key7) !== true) {
232
- exitComplete.set(key7, false);
233
- }
234
- }
235
- else {
236
- exitComplete.delete(key7);
237
- }
238
- }
239
- }, [renderedChildren, presentKeys.length, presentKeys.join('-'),]);
240
- const exitingChildren = [];
241
- if (presentChildren !== diffedChildren) {
242
- let nextChildren = [...presentChildren,];
243
- for (let i = 0; i < renderedChildren.length; i++) {
244
- const child = renderedChildren[i];
245
- const key7 = getChildKey(child);
246
- if (!presentKeys.includes(key7)) {
247
- nextChildren.splice(i, 0, child);
248
- exitingChildren.push(child);
249
- }
250
- }
251
- if (mode === 'wait' && exitingChildren.length) {
252
- nextChildren = exitingChildren;
253
- }
254
- setRenderedChildren(onlyElements(nextChildren));
255
- setDiffedChildren(presentChildren);
256
- return null;
257
- }
258
- if (false) {
259
- console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to "wait". This will lead to odd visual behaviour.`);
260
- }
261
- const { forceRender, } = useContext(LayoutGroupContext);
262
- return jsx3(Fragment, {
263
- children: renderedChildren.map((child) => {
264
- const key7 = getChildKey(child);
265
- const isPresent2 = propagate && !isParentPresent ? false : presentChildren === renderedChildren || presentKeys.includes(key7);
266
- const onExit = () => {
267
- if (exitComplete.has(key7)) {
268
- exitComplete.set(key7, true);
269
- }
270
- else {
271
- return;
272
- }
273
- let isEveryExitComplete = true;
274
- exitComplete.forEach((isExitComplete) => {
275
- if (!isExitComplete)
276
- isEveryExitComplete = false;
277
- });
278
- if (isEveryExitComplete) {
279
- forceRender == null ? void 0 : forceRender();
280
- setRenderedChildren(pendingPresentChildren.current);
281
- propagate && (safeToRemove == null ? void 0 : safeToRemove());
282
- onExitComplete && onExitComplete();
283
- }
284
- };
285
- return jsx3(PresenceChild, {
286
- isPresent: isPresent2,
287
- initial: !isInitialRender.current || initial ? void 0 : false,
288
- custom,
289
- presenceAffectsLayout,
290
- mode,
291
- onExitComplete: isPresent2 ? void 0 : onExit,
292
- anchorX,
293
- children: child,
294
- }, key7);
295
- }),
296
- });
297
- };
298
- var DeprecatedLayoutGroupContext = createContext(null);
299
54
  function addUniqueItem(arr, item) {
300
55
  if (arr.indexOf(item) === -1)
301
56
  arr.push(item);
@@ -337,6 +92,9 @@ if (false) {
337
92
  }
338
93
  var MotionGlobalConfig = {};
339
94
  var isNumericalString = (v) => /^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(v);
95
+ function isObject(value) {
96
+ return typeof value === 'object' && value !== null;
97
+ }
340
98
  var isZeroValueString = (v) => /^0[^.\s]+$/u.test(v);
341
99
  // @__NO_SIDE_EFFECTS__
342
100
  function memo(callback) {
@@ -1524,13 +1282,11 @@ var JSAnimation = class extends WithPromise {
1524
1282
  this.currentTime = 0;
1525
1283
  this.holdTime = null;
1526
1284
  this.playbackSpeed = 1;
1527
- this.stop = (sync2 = true) => {
1285
+ this.stop = () => {
1528
1286
  var _a, _b;
1529
- if (sync2) {
1530
- const { motionValue: motionValue2, } = this.options;
1531
- if (motionValue2 && motionValue2.updatedAt !== time.now()) {
1532
- this.tick(time.now());
1533
- }
1287
+ const { motionValue: motionValue2, } = this.options;
1288
+ if (motionValue2 && motionValue2.updatedAt !== time.now()) {
1289
+ this.tick(time.now());
1534
1290
  }
1535
1291
  this.isStopped = true;
1536
1292
  if (this.state === 'idle')
@@ -2322,14 +2078,17 @@ var NativeAnimationExtended = class extends NativeAnimation {
2322
2078
  sampleAnimation.stop();
2323
2079
  }
2324
2080
  };
2325
- var acceleratedValues = /* @__PURE__ */ new Set(['opacity', 'clipPath', 'filter', 'transform', // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved
2326
- // or until we implement support for linear() easing.
2081
+ function isHTMLElement(element) {
2082
+ return isObject(element) && 'offsetHeight' in element;
2083
+ }
2084
+ var acceleratedValues = /* @__PURE__ */ new Set(['opacity', 'clipPath', 'filter', 'transform', // TODO: Could be re-enabled now we have support for linear() easing
2327
2085
  // "background-color"
2328
2086
  ]);
2329
2087
  var supportsWaapi = /* @__PURE__ */ memo(() => Object.hasOwnProperty.call(Element.prototype, 'animate'));
2330
2088
  function supportsBrowserAnimation(options) {
2089
+ var _a;
2331
2090
  const { motionValue: motionValue2, name, repeatDelay, repeatType, damping, type, } = options;
2332
- if (!motionValue2 || !motionValue2.owner || !(motionValue2.owner.current instanceof HTMLElement)) {
2091
+ if (!isHTMLElement((_a = motionValue2 == null ? void 0 : motionValue2.owner) == null ? void 0 : _a.current)) {
2333
2092
  return false;
2334
2093
  }
2335
2094
  const { onUpdate, transformTemplate: transformTemplate2, } = motionValue2.owner.getProps();
@@ -2950,6 +2709,119 @@ function resolveElements(elementOrSelector, scope, selectorCache) {
2950
2709
  }
2951
2710
  return Array.from(elementOrSelector);
2952
2711
  }
2712
+ var getValueAsType = (value, type) => {
2713
+ return type && typeof value === 'number' ? type.transform(value) : value;
2714
+ };
2715
+ function camelToDash(str) {
2716
+ return str.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);
2717
+ }
2718
+ function createSelectorEffect(subjectEffect) {
2719
+ return (subject, values) => {
2720
+ const elements = resolveElements(subject);
2721
+ const subscriptions = [];
2722
+ for (const element of elements) {
2723
+ const remove2 = subjectEffect(element, values);
2724
+ subscriptions.push(remove2);
2725
+ }
2726
+ return () => {
2727
+ for (const remove2 of subscriptions)
2728
+ remove2();
2729
+ };
2730
+ };
2731
+ }
2732
+ var MotionValueState = class {
2733
+ constructor() {
2734
+ this.latest = {};
2735
+ this.values = /* @__PURE__ */ new Map();
2736
+ }
2737
+ set(name, value, render, computed, useDefaultValueType = true) {
2738
+ const existingValue = this.values.get(name);
2739
+ if (existingValue) {
2740
+ existingValue.onRemove();
2741
+ }
2742
+ const onChange = () => {
2743
+ const v = value.get();
2744
+ if (useDefaultValueType) {
2745
+ this.latest[name] = getValueAsType(v, numberValueTypes[name]);
2746
+ }
2747
+ else {
2748
+ this.latest[name] = v;
2749
+ }
2750
+ render && frame.render(render);
2751
+ };
2752
+ onChange();
2753
+ const cancelOnChange = value.on('change', onChange);
2754
+ computed && value.addDependent(computed);
2755
+ const remove2 = () => {
2756
+ cancelOnChange();
2757
+ render && cancelFrame(render);
2758
+ this.values.delete(name);
2759
+ computed && value.removeDependent(computed);
2760
+ };
2761
+ this.values.set(name, {
2762
+ value,
2763
+ onRemove: remove2,
2764
+ });
2765
+ return remove2;
2766
+ }
2767
+ get(name) {
2768
+ var _a;
2769
+ return (_a = this.values.get(name)) == null ? void 0 : _a.value;
2770
+ }
2771
+ destroy() {
2772
+ for (const value of this.values.values()) {
2773
+ value.onRemove();
2774
+ }
2775
+ }
2776
+ };
2777
+ function createEffect(addValue) {
2778
+ const stateCache = /* @__PURE__ */ new WeakMap();
2779
+ const subscriptions = [];
2780
+ return (subject, values) => {
2781
+ const state = stateCache.get(subject) ?? new MotionValueState();
2782
+ stateCache.set(subject, state);
2783
+ for (const key7 in values) {
2784
+ const value = values[key7];
2785
+ const remove2 = addValue(subject, state, key7, value);
2786
+ subscriptions.push(remove2);
2787
+ }
2788
+ return () => {
2789
+ for (const cancel of subscriptions)
2790
+ cancel();
2791
+ };
2792
+ };
2793
+ }
2794
+ function canSetAsProperty(element, name) {
2795
+ if (!(name in element))
2796
+ return false;
2797
+ const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(element), name) ||
2798
+ Object.getOwnPropertyDescriptor(element, name);
2799
+ return descriptor && typeof descriptor.set === 'function';
2800
+ }
2801
+ var addAttrValue = (element, state, key7, value) => {
2802
+ const isProp = canSetAsProperty(element, key7);
2803
+ const name = isProp ? key7 : key7.startsWith('data') || key7.startsWith('aria') ? camelToDash(key7) : key7;
2804
+ const render = isProp
2805
+ ? () => {
2806
+ element[name] = state.latest[key7];
2807
+ }
2808
+ : () => {
2809
+ const v = state.latest[key7];
2810
+ if (v === null || v === void 0) {
2811
+ element.removeAttribute(name);
2812
+ }
2813
+ else {
2814
+ element.setAttribute(name, String(v));
2815
+ }
2816
+ };
2817
+ return state.set(key7, value, render);
2818
+ };
2819
+ var attrEffect = /* @__PURE__ */ createSelectorEffect(/* @__PURE__ */ createEffect(addAttrValue));
2820
+ var propEffect = /* @__PURE__ */ createEffect((subject, state, key7, value) => {
2821
+ return state.set(key7, value, () => {
2822
+ subject[key7] = state.latest[key7];
2823
+ }, void 0, false);
2824
+ });
2953
2825
  var MAX_VELOCITY_DELTA = 30;
2954
2826
  var isFloat = (value) => {
2955
2827
  return !isNaN(parseFloat(value));
@@ -3240,48 +3112,6 @@ var MotionValue = class {
3240
3112
  function motionValue(init, options) {
3241
3113
  return new MotionValue(init, options);
3242
3114
  }
3243
- var getValueAsType = (value, type) => {
3244
- return type && typeof value === 'number' ? type.transform(value) : value;
3245
- };
3246
- var MotionValueState = class {
3247
- constructor() {
3248
- this.latest = {};
3249
- this.values = /* @__PURE__ */ new Map();
3250
- }
3251
- set(name, value, render, computed) {
3252
- const existingValue = this.values.get(name);
3253
- if (existingValue) {
3254
- existingValue.onRemove();
3255
- }
3256
- const onChange = () => {
3257
- this.latest[name] = getValueAsType(value.get(), numberValueTypes[name]);
3258
- render && frame.render(render);
3259
- };
3260
- onChange();
3261
- const cancelOnChange = value.on('change', onChange);
3262
- computed && value.addDependent(computed);
3263
- const remove2 = () => {
3264
- cancelOnChange();
3265
- render && cancelFrame(render);
3266
- this.values.delete(name);
3267
- computed && value.removeDependent(computed);
3268
- };
3269
- this.values.set(name, {
3270
- value,
3271
- onRemove: remove2,
3272
- });
3273
- return remove2;
3274
- }
3275
- get(name) {
3276
- var _a;
3277
- return (_a = this.values.get(name)) == null ? void 0 : _a.value;
3278
- }
3279
- destroy() {
3280
- for (const value of this.values.values()) {
3281
- value.onRemove();
3282
- }
3283
- }
3284
- };
3285
3115
  var translateAlias = {
3286
3116
  x: 'translateX',
3287
3117
  y: 'translateY',
@@ -3312,36 +3142,32 @@ function buildTransform(state) {
3312
3142
  }
3313
3143
  return transformIsDefault ? 'none' : transform2.trim();
3314
3144
  }
3315
- var stateMap = /* @__PURE__ */ new WeakMap();
3316
- function styleEffect(subject, values) {
3317
- const elements = resolveElements(subject);
3318
- const subscriptions = [];
3319
- for (let i = 0; i < elements.length; i++) {
3320
- const element = elements[i];
3321
- const state = stateMap.get(element) ?? new MotionValueState();
3322
- stateMap.set(element, state);
3323
- for (const key7 in values) {
3324
- const value = values[key7];
3325
- const remove2 = addValue(element, state, key7, value);
3326
- subscriptions.push(remove2);
3327
- }
3328
- }
3329
- return () => {
3330
- for (const cancel of subscriptions)
3331
- cancel();
3332
- };
3333
- }
3334
- function addValue(element, state, key7, value) {
3145
+ var originProps = /* @__PURE__ */ new Set(['originX', 'originY', 'originZ',]);
3146
+ var addStyleValue = (element, state, key7, value) => {
3335
3147
  let render = void 0;
3336
3148
  let computed = void 0;
3337
3149
  if (transformProps.has(key7)) {
3338
3150
  if (!state.get('transform')) {
3151
+ if (!isHTMLElement(element) && !state.get('transformBox')) {
3152
+ addStyleValue(element, state, 'transformBox', new MotionValue('fill-box'));
3153
+ }
3339
3154
  state.set('transform', new MotionValue('none'), () => {
3340
3155
  element.style.transform = buildTransform(state);
3341
3156
  });
3342
3157
  }
3343
3158
  computed = state.get('transform');
3344
3159
  }
3160
+ else if (originProps.has(key7)) {
3161
+ if (!state.get('transformOrigin')) {
3162
+ state.set('transformOrigin', new MotionValue(''), () => {
3163
+ const originX = state.latest.originX ?? '50%';
3164
+ const originY = state.latest.originY ?? '50%';
3165
+ const originZ = state.latest.originZ ?? 0;
3166
+ element.style.transformOrigin = `${originX} ${originY} ${originZ}`;
3167
+ });
3168
+ }
3169
+ computed = state.get('transformOrigin');
3170
+ }
3345
3171
  else if (isCSSVar(key7)) {
3346
3172
  render = () => {
3347
3173
  element.style.setProperty(key7, state.latest[key7]);
@@ -3353,6 +3179,37 @@ function addValue(element, state, key7, value) {
3353
3179
  };
3354
3180
  }
3355
3181
  return state.set(key7, value, render, computed);
3182
+ };
3183
+ var styleEffect = /* @__PURE__ */ createSelectorEffect(/* @__PURE__ */ createEffect(addStyleValue));
3184
+ var toPx = px.transform;
3185
+ function addSVGPathValue(element, state, key7, value) {
3186
+ frame.render(() => element.setAttribute('pathLength', '1'));
3187
+ if (key7 === 'pathOffset') {
3188
+ return state.set(key7, value, () => element.setAttribute('stroke-dashoffset', toPx(-state.latest[key7])));
3189
+ }
3190
+ else {
3191
+ if (!state.get('stroke-dasharray')) {
3192
+ state.set('stroke-dasharray', new MotionValue('1 1'), () => {
3193
+ const { pathLength = 1, pathSpacing, } = state.latest;
3194
+ element.setAttribute('stroke-dasharray', `${toPx(pathLength)} ${toPx(pathSpacing ?? 1 - Number(pathLength))}`);
3195
+ });
3196
+ }
3197
+ return state.set(key7, value, void 0, state.get('stroke-dasharray'));
3198
+ }
3199
+ }
3200
+ var addSVGValue = (element, state, key7, value) => {
3201
+ if (key7.startsWith('path')) {
3202
+ return addSVGPathValue(element, state, key7, value);
3203
+ }
3204
+ else if (key7.startsWith('attr')) {
3205
+ return addAttrValue(element, state, convertAttrKey(key7), value);
3206
+ }
3207
+ const handler = key7 in element.style ? addStyleValue : addAttrValue;
3208
+ return handler(element, state, key7, value);
3209
+ };
3210
+ var svgEffect = /* @__PURE__ */ createSelectorEffect(/* @__PURE__ */ createEffect(addSVGValue));
3211
+ function convertAttrKey(key7) {
3212
+ return key7.replace(/^attr([A-Z])/, (_, firstChar) => firstChar.toLowerCase());
3356
3213
  }
3357
3214
  var { schedule: microtask, cancel: cancelMicrotask, } = /* @__PURE__ */ createRenderBatcher(queueMicrotask, false);
3358
3215
  var isDragging = {
@@ -3515,7 +3372,7 @@ function press(targetOrSelector, onPressStart, options = {}) {
3515
3372
  targets.forEach((target) => {
3516
3373
  const pointerDownTarget = options.useGlobalTarget ? window : target;
3517
3374
  pointerDownTarget.addEventListener('pointerdown', startPress, eventOptions);
3518
- if (target instanceof HTMLElement) {
3375
+ if (isHTMLElement(target)) {
3519
3376
  target.addEventListener('focus', (event) => enableKeyboardPress(event, eventOptions));
3520
3377
  if (!isElementKeyboardAccessible(target) && !target.hasAttribute('tabindex')) {
3521
3378
  target.tabIndex = 0;
@@ -3650,6 +3507,12 @@ function recordStats() {
3650
3507
  frame.postRender(record, true);
3651
3508
  return reportStats;
3652
3509
  }
3510
+ function isSVGElement(element) {
3511
+ return isObject(element) && 'ownerSVGElement' in element;
3512
+ }
3513
+ function isSVGSVGElement(element) {
3514
+ return isSVGElement(element) && element.tagName === 'svg';
3515
+ }
3653
3516
  function transform(...args) {
3654
3517
  const useImmediate = !Array.isArray(args[0]);
3655
3518
  const argOffset = useImmediate ? 0 : -1;
@@ -3682,6 +3545,56 @@ function mapValue(inputValue, inputRange, outputRange, options) {
3682
3545
  const map2 = transform(inputRange, outputRange, options);
3683
3546
  return transformValue(() => map2(inputValue.get()));
3684
3547
  }
3548
+ var isMotionValue = (value) => Boolean(value && value.getVelocity);
3549
+ function springValue(source, options) {
3550
+ const initialValue = isMotionValue(source) ? source.get() : source;
3551
+ const value = motionValue(initialValue);
3552
+ attachSpring(value, source, options);
3553
+ return value;
3554
+ }
3555
+ function attachSpring(value, source, options) {
3556
+ const initialValue = value.get();
3557
+ let activeAnimation = null;
3558
+ let latestValue = initialValue;
3559
+ let latestSetter;
3560
+ const unit = typeof initialValue === 'string' ? initialValue.replace(/[\d.-]/g, '') : void 0;
3561
+ const stopAnimation2 = () => {
3562
+ if (activeAnimation) {
3563
+ activeAnimation.stop();
3564
+ activeAnimation = null;
3565
+ }
3566
+ };
3567
+ const startAnimation2 = () => {
3568
+ stopAnimation2();
3569
+ activeAnimation = new JSAnimation({
3570
+ keyframes: [asNumber(value.get()), asNumber(latestValue),],
3571
+ velocity: value.getVelocity(),
3572
+ type: 'spring',
3573
+ restDelta: 1e-3,
3574
+ restSpeed: 0.01,
3575
+ ...options,
3576
+ onUpdate: latestSetter,
3577
+ });
3578
+ };
3579
+ value.attach((v, set) => {
3580
+ latestValue = v;
3581
+ latestSetter = (latest) => set(parseValue(latest, unit));
3582
+ frame.postRender(startAnimation2);
3583
+ return value.get();
3584
+ }, stopAnimation2);
3585
+ let unsubscribe = void 0;
3586
+ if (isMotionValue(source)) {
3587
+ unsubscribe = source.on('change', (v) => value.set(parseValue(v, unit)));
3588
+ value.on('destroy', unsubscribe);
3589
+ }
3590
+ return unsubscribe;
3591
+ }
3592
+ function parseValue(v, unit) {
3593
+ return unit ? v + unit : v;
3594
+ }
3595
+ function asNumber(v) {
3596
+ return typeof v === 'number' ? v : parseFloat(v);
3597
+ }
3685
3598
  var valueTypes = [...dimensionValueTypes, color, complex,];
3686
3599
  var findValueType = (v) => valueTypes.find(testValueType(v));
3687
3600
  function chooseLayerType(valueName) {
@@ -3962,6 +3875,251 @@ var cancelSync = stepsOrder.reduce((acc, key7) => {
3962
3875
  acc[key7] = (process2) => cancelFrame(process2);
3963
3876
  return acc;
3964
3877
  }, {});
3878
+ var MotionConfigContext = createContext({
3879
+ transformPagePoint: (p) => p,
3880
+ isStatic: false,
3881
+ reducedMotion: 'never',
3882
+ });
3883
+ function usePresence(subscribe = true) {
3884
+ const context = useContext(PresenceContext);
3885
+ if (context === null)
3886
+ return [true, null,];
3887
+ const { isPresent: isPresent2, onExitComplete, register, } = context;
3888
+ const id4 = useId();
3889
+ useEffect(() => {
3890
+ if (subscribe) {
3891
+ return register(id4);
3892
+ }
3893
+ }, [subscribe,]);
3894
+ const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id4), [id4, onExitComplete, subscribe,]);
3895
+ return !isPresent2 && onExitComplete ? [false, safeToRemove,] : [true,];
3896
+ }
3897
+ function useIsPresent() {
3898
+ return isPresent(useContext(PresenceContext));
3899
+ }
3900
+ function isPresent(context) {
3901
+ return context === null ? true : context.isPresent;
3902
+ }
3903
+ function useConstant(init) {
3904
+ const ref = useRef3(null);
3905
+ if (ref.current === null) {
3906
+ ref.current = init();
3907
+ }
3908
+ return ref.current;
3909
+ }
3910
+ var PopChildMeasure = class extends React2.Component {
3911
+ getSnapshotBeforeUpdate(prevProps) {
3912
+ const element = this.props.childRef.current;
3913
+ if (element && prevProps.isPresent && !this.props.isPresent) {
3914
+ const parent = element.offsetParent;
3915
+ const parentWidth = isHTMLElement(parent) ? parent.offsetWidth || 0 : 0;
3916
+ const size = this.props.sizeRef.current;
3917
+ size.height = element.offsetHeight || 0;
3918
+ size.width = element.offsetWidth || 0;
3919
+ size.top = element.offsetTop;
3920
+ size.left = element.offsetLeft;
3921
+ size.right = parentWidth - size.width - size.left;
3922
+ }
3923
+ return null;
3924
+ }
3925
+ /**
3926
+ * Required with getSnapshotBeforeUpdate to stop React complaining.
3927
+ */
3928
+ componentDidUpdate() { }
3929
+ render() {
3930
+ return this.props.children;
3931
+ }
3932
+ };
3933
+ function PopChild({ children, isPresent: isPresent2, anchorX, }) {
3934
+ const id4 = useId();
3935
+ const ref = useRef3(null);
3936
+ const size = useRef3({
3937
+ width: 0,
3938
+ height: 0,
3939
+ top: 0,
3940
+ left: 0,
3941
+ right: 0,
3942
+ });
3943
+ const { nonce, } = useContext(MotionConfigContext);
3944
+ useInsertionEffect(() => {
3945
+ const { width, height, top, left, right, } = size.current;
3946
+ if (isPresent2 || !ref.current || !width || !height)
3947
+ return;
3948
+ const x = anchorX === 'left' ? `left: ${left}` : `right: ${right}`;
3949
+ ref.current.dataset.motionPopId = id4;
3950
+ const style2 = document.createElement('style');
3951
+ if (nonce)
3952
+ style2.nonce = nonce;
3953
+ document.head.appendChild(style2);
3954
+ if (style2.sheet) {
3955
+ style2.sheet.insertRule(`
3956
+ [data-motion-pop-id="${id4}"] {
3957
+ position: absolute !important;
3958
+ width: ${width}px !important;
3959
+ height: ${height}px !important;
3960
+ ${x}px !important;
3961
+ top: ${top}px !important;
3962
+ }
3963
+ `);
3964
+ }
3965
+ return () => {
3966
+ if (document.head.contains(style2)) {
3967
+ document.head.removeChild(style2);
3968
+ }
3969
+ };
3970
+ }, [isPresent2,]);
3971
+ return jsx3(PopChildMeasure, {
3972
+ isPresent: isPresent2,
3973
+ childRef: ref,
3974
+ sizeRef: size,
3975
+ children: React2.cloneElement(children, {
3976
+ ref,
3977
+ }),
3978
+ });
3979
+ }
3980
+ var PresenceChild = ({ children, initial, isPresent: isPresent2, onExitComplete, custom, presenceAffectsLayout, mode, anchorX, }) => {
3981
+ const presenceChildren = useConstant(newChildrenMap);
3982
+ const id4 = useId();
3983
+ let isReusedContext = true;
3984
+ let context = useMemo2(() => {
3985
+ isReusedContext = false;
3986
+ return {
3987
+ id: id4,
3988
+ initial,
3989
+ isPresent: isPresent2,
3990
+ custom,
3991
+ onExitComplete: (childId) => {
3992
+ presenceChildren.set(childId, true);
3993
+ for (const isComplete of presenceChildren.values()) {
3994
+ if (!isComplete)
3995
+ return;
3996
+ }
3997
+ onExitComplete && onExitComplete();
3998
+ },
3999
+ register: (childId) => {
4000
+ presenceChildren.set(childId, false);
4001
+ return () => presenceChildren.delete(childId);
4002
+ },
4003
+ };
4004
+ }, [isPresent2, presenceChildren, onExitComplete,]);
4005
+ if (presenceAffectsLayout && isReusedContext) {
4006
+ context = {
4007
+ ...context,
4008
+ };
4009
+ }
4010
+ useMemo2(() => {
4011
+ presenceChildren.forEach((_, key7) => presenceChildren.set(key7, false));
4012
+ }, [isPresent2,]);
4013
+ React2.useEffect(() => {
4014
+ !isPresent2 && !presenceChildren.size && onExitComplete && onExitComplete();
4015
+ }, [isPresent2,]);
4016
+ if (mode === 'popLayout') {
4017
+ children = jsx3(PopChild, {
4018
+ isPresent: isPresent2,
4019
+ anchorX,
4020
+ children,
4021
+ });
4022
+ }
4023
+ return jsx3(PresenceContext.Provider, {
4024
+ value: context,
4025
+ children,
4026
+ });
4027
+ };
4028
+ function newChildrenMap() {
4029
+ return /* @__PURE__ */ new Map();
4030
+ }
4031
+ var getChildKey = (child) => child.key || '';
4032
+ function onlyElements(children) {
4033
+ const filtered = [];
4034
+ Children.forEach(children, (child) => {
4035
+ if (isValidElement(child))
4036
+ filtered.push(child);
4037
+ });
4038
+ return filtered;
4039
+ }
4040
+ var AnimatePresence = ({ children, custom, initial = true, onExitComplete, presenceAffectsLayout = true, mode = 'sync', propagate = false, anchorX = 'left', }) => {
4041
+ const [isParentPresent, safeToRemove,] = usePresence(propagate);
4042
+ const presentChildren = useMemo2(() => onlyElements(children), [children,]);
4043
+ const presentKeys = propagate && !isParentPresent ? [] : presentChildren.map(getChildKey);
4044
+ const isInitialRender = useRef3(true);
4045
+ const pendingPresentChildren = useRef3(presentChildren);
4046
+ const exitComplete = useConstant(() => /* @__PURE__ */ new Map());
4047
+ const [diffedChildren, setDiffedChildren,] = useState(presentChildren);
4048
+ const [renderedChildren, setRenderedChildren,] = useState(presentChildren);
4049
+ useIsomorphicLayoutEffect(() => {
4050
+ isInitialRender.current = false;
4051
+ pendingPresentChildren.current = presentChildren;
4052
+ for (let i = 0; i < renderedChildren.length; i++) {
4053
+ const key7 = getChildKey(renderedChildren[i]);
4054
+ if (!presentKeys.includes(key7)) {
4055
+ if (exitComplete.get(key7) !== true) {
4056
+ exitComplete.set(key7, false);
4057
+ }
4058
+ }
4059
+ else {
4060
+ exitComplete.delete(key7);
4061
+ }
4062
+ }
4063
+ }, [renderedChildren, presentKeys.length, presentKeys.join('-'),]);
4064
+ const exitingChildren = [];
4065
+ if (presentChildren !== diffedChildren) {
4066
+ let nextChildren = [...presentChildren,];
4067
+ for (let i = 0; i < renderedChildren.length; i++) {
4068
+ const child = renderedChildren[i];
4069
+ const key7 = getChildKey(child);
4070
+ if (!presentKeys.includes(key7)) {
4071
+ nextChildren.splice(i, 0, child);
4072
+ exitingChildren.push(child);
4073
+ }
4074
+ }
4075
+ if (mode === 'wait' && exitingChildren.length) {
4076
+ nextChildren = exitingChildren;
4077
+ }
4078
+ setRenderedChildren(onlyElements(nextChildren));
4079
+ setDiffedChildren(presentChildren);
4080
+ return null;
4081
+ }
4082
+ if (false) {
4083
+ console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to "wait". This will lead to odd visual behaviour.`);
4084
+ }
4085
+ const { forceRender, } = useContext(LayoutGroupContext);
4086
+ return jsx3(Fragment, {
4087
+ children: renderedChildren.map((child) => {
4088
+ const key7 = getChildKey(child);
4089
+ const isPresent2 = propagate && !isParentPresent ? false : presentChildren === renderedChildren || presentKeys.includes(key7);
4090
+ const onExit = () => {
4091
+ if (exitComplete.has(key7)) {
4092
+ exitComplete.set(key7, true);
4093
+ }
4094
+ else {
4095
+ return;
4096
+ }
4097
+ let isEveryExitComplete = true;
4098
+ exitComplete.forEach((isExitComplete) => {
4099
+ if (!isExitComplete)
4100
+ isEveryExitComplete = false;
4101
+ });
4102
+ if (isEveryExitComplete) {
4103
+ forceRender == null ? void 0 : forceRender();
4104
+ setRenderedChildren(pendingPresentChildren.current);
4105
+ propagate && (safeToRemove == null ? void 0 : safeToRemove());
4106
+ onExitComplete && onExitComplete();
4107
+ }
4108
+ };
4109
+ return jsx3(PresenceChild, {
4110
+ isPresent: isPresent2,
4111
+ initial: !isInitialRender.current || initial ? void 0 : false,
4112
+ custom,
4113
+ presenceAffectsLayout,
4114
+ mode,
4115
+ onExitComplete: isPresent2 ? void 0 : onExit,
4116
+ anchorX,
4117
+ children: child,
4118
+ }, key7);
4119
+ }),
4120
+ });
4121
+ };
4122
+ var DeprecatedLayoutGroupContext = createContext(null);
3965
4123
  function useIsMounted() {
3966
4124
  const isMounted = useRef3(false);
3967
4125
  useIsomorphicLayoutEffect(() => {
@@ -4158,9 +4316,9 @@ function MotionConfig({ children, isValidProp, ...config }) {
4158
4316
  });
4159
4317
  }
4160
4318
  var MotionContext = /* @__PURE__ */ createContext({});
4161
- var camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, '$1-$2').toLowerCase();
4319
+ var camelToDash2 = (str) => str.replace(/([a-z])([A-Z])/gu, '$1-$2').toLowerCase();
4162
4320
  var optimizedAppearDataId = 'framerAppearId';
4163
- var optimizedAppearDataAttribute = 'data-' + camelToDash(optimizedAppearDataId);
4321
+ var optimizedAppearDataAttribute = 'data-' + camelToDash2(optimizedAppearDataId);
4164
4322
  var SwitchLayoutGroupContext = createContext({});
4165
4323
  function isAnimationControls(v) {
4166
4324
  return v !== null && typeof v === 'object' && typeof v.start === 'function';
@@ -4384,7 +4542,6 @@ function addScaleCorrector(correctors) {
4384
4542
  }
4385
4543
  }
4386
4544
  }
4387
- var isMotionValue = (value) => Boolean(value && value.getVelocity);
4388
4545
  var translateAlias2 = {
4389
4546
  x: 'translateX',
4390
4547
  y: 'translateY',
@@ -4618,59 +4775,6 @@ function useHTMLProps(props, visualState) {
4618
4775
  htmlProps.style = style2;
4619
4776
  return htmlProps;
4620
4777
  }
4621
- var lowercaseSVGElements = [
4622
- 'animate',
4623
- 'circle',
4624
- 'defs',
4625
- 'desc',
4626
- 'ellipse',
4627
- 'g',
4628
- 'image',
4629
- 'line',
4630
- 'filter',
4631
- 'marker',
4632
- 'mask',
4633
- 'metadata',
4634
- 'path',
4635
- 'pattern',
4636
- 'polygon',
4637
- 'polyline',
4638
- 'rect',
4639
- 'stop',
4640
- 'switch',
4641
- 'symbol',
4642
- 'svg',
4643
- 'text',
4644
- 'tspan',
4645
- 'use',
4646
- 'view',
4647
- ];
4648
- function isSVGComponent(Component33) {
4649
- if (
4650
- /**
4651
- * If it's not a string, it's a custom React component. Currently we only support
4652
- * HTML custom React components.
4653
- */
4654
- typeof Component33 !== 'string' ||
4655
- /**
4656
- * If it contains a dash, the element is a custom HTML webcomponent.
4657
- */
4658
- Component33.includes('-')) {
4659
- return false;
4660
- }
4661
- else if (
4662
- /**
4663
- * If it's in our list of lowercase SVG tags, it's an SVG component
4664
- */
4665
- lowercaseSVGElements.indexOf(Component33) > -1 ||
4666
- /**
4667
- * If it contains a capital letter, it's an SVG component
4668
- */
4669
- /[A-Z]/u.test(Component33)) {
4670
- return true;
4671
- }
4672
- return false;
4673
- }
4674
4778
  var dashKeys = {
4675
4779
  offset: 'stroke-dashoffset',
4676
4780
  array: 'stroke-dasharray',
@@ -4748,6 +4852,59 @@ function useSVGProps(props, visualState, _isStatic, Component33) {
4748
4852
  }
4749
4853
  return visualProps;
4750
4854
  }
4855
+ var lowercaseSVGElements = [
4856
+ 'animate',
4857
+ 'circle',
4858
+ 'defs',
4859
+ 'desc',
4860
+ 'ellipse',
4861
+ 'g',
4862
+ 'image',
4863
+ 'line',
4864
+ 'filter',
4865
+ 'marker',
4866
+ 'mask',
4867
+ 'metadata',
4868
+ 'path',
4869
+ 'pattern',
4870
+ 'polygon',
4871
+ 'polyline',
4872
+ 'rect',
4873
+ 'stop',
4874
+ 'switch',
4875
+ 'symbol',
4876
+ 'svg',
4877
+ 'text',
4878
+ 'tspan',
4879
+ 'use',
4880
+ 'view',
4881
+ ];
4882
+ function isSVGComponent(Component33) {
4883
+ if (
4884
+ /**
4885
+ * If it's not a string, it's a custom React component. Currently we only support
4886
+ * HTML custom React components.
4887
+ */
4888
+ typeof Component33 !== 'string' ||
4889
+ /**
4890
+ * If it contains a dash, the element is a custom HTML webcomponent.
4891
+ */
4892
+ Component33.includes('-')) {
4893
+ return false;
4894
+ }
4895
+ else if (
4896
+ /**
4897
+ * If it's in our list of lowercase SVG tags, it's an SVG component
4898
+ */
4899
+ lowercaseSVGElements.indexOf(Component33) > -1 ||
4900
+ /**
4901
+ * If it contains a capital letter, it's an SVG component
4902
+ */
4903
+ /[A-Z]/u.test(Component33)) {
4904
+ return true;
4905
+ }
4906
+ return false;
4907
+ }
4751
4908
  function createUseRender(forwardMotionProps = false) {
4752
4909
  const useRender = (Component33, props, ref, { latestValues, }, isStatic) => {
4753
4910
  const useVisualProps = isSVGComponent(Component33) ? useSVGProps : useHTMLProps;
@@ -6911,12 +7068,9 @@ function animateSingleValue(value, keyframes2, options) {
6911
7068
  motionValue$1.start(animateMotionValue('', motionValue$1, keyframes2, options));
6912
7069
  return motionValue$1.animation;
6913
7070
  }
6914
- function isSVGElement(element) {
6915
- return element instanceof SVGElement && element.tagName !== 'svg';
6916
- }
6917
7071
  var borders = ['TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',];
6918
7072
  var numBorders = borders.length;
6919
- var asNumber = (value) => typeof value === 'string' ? parseFloat(value) : value;
7073
+ var asNumber2 = (value) => typeof value === 'string' ? parseFloat(value) : value;
6920
7074
  var isPx = (value) => typeof value === 'number' || px.test(value);
6921
7075
  function mixValues(target, follow, lead, progress2, shouldCrossfadeOpacity, isOnlyMember) {
6922
7076
  if (shouldCrossfadeOpacity) {
@@ -6936,7 +7090,7 @@ function mixValues(target, follow, lead, progress2, shouldCrossfadeOpacity, isOn
6936
7090
  leadRadius || (leadRadius = 0);
6937
7091
  const canMix = followRadius === 0 || leadRadius === 0 || isPx(followRadius) === isPx(leadRadius);
6938
7092
  if (canMix) {
6939
- target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress2), 0);
7093
+ target[borderLabel] = Math.max(mixNumber(asNumber2(followRadius), asNumber2(leadRadius), progress2), 0);
6940
7094
  if (percent.test(leadRadius) || percent.test(followRadius)) {
6941
7095
  target[borderLabel] += '%';
6942
7096
  }
@@ -7277,7 +7431,7 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
7277
7431
  mount(instance) {
7278
7432
  if (this.instance)
7279
7433
  return;
7280
- this.isSVG = isSVGElement(instance);
7434
+ this.isSVG = isSVGElement(instance) && !isSVGSVGElement(instance);
7281
7435
  this.instance = instance;
7282
7436
  const { layoutId, layout: layout2, visualElement, } = this.options;
7283
7437
  if (visualElement && !visualElement.current) {
@@ -7321,7 +7475,6 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
7321
7475
  this.resumingFrom = this.resumeFrom;
7322
7476
  this.resumingFrom.resumingFrom = void 0;
7323
7477
  }
7324
- this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);
7325
7478
  const animationOptions = {
7326
7479
  ...getValueTransition(layoutTransition, 'layout'),
7327
7480
  onPlay: onLayoutAnimationStart,
@@ -7332,6 +7485,7 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
7332
7485
  animationOptions.type = false;
7333
7486
  }
7334
7487
  this.startAnimation(animationOptions);
7488
+ this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);
7335
7489
  }
7336
7490
  else {
7337
7491
  if (!hasLayoutChanged) {
@@ -7857,8 +8011,8 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
7857
8011
  startAnimation(options) {
7858
8012
  var _a, _b, _c;
7859
8013
  this.notifyListeners('animationStart');
7860
- (_a = this.currentAnimation) == null ? void 0 : _a.stop(false);
7861
- (_c = (_b = this.resumingFrom) == null ? void 0 : _b.currentAnimation) == null ? void 0 : _c.stop(false);
8014
+ (_a = this.currentAnimation) == null ? void 0 : _a.stop();
8015
+ (_c = (_b = this.resumingFrom) == null ? void 0 : _b.currentAnimation) == null ? void 0 : _c.stop();
7862
8016
  if (this.pendingAnimation) {
7863
8017
  cancelFrame(this.pendingAnimation);
7864
8018
  this.pendingAnimation = void 0;
@@ -7902,7 +8056,7 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
7902
8056
  finishAnimation() {
7903
8057
  if (this.currentAnimation) {
7904
8058
  this.mixTargetDelta && this.mixTargetDelta(animationTarget);
7905
- this.currentAnimation.stop(false);
8059
+ this.currentAnimation.stop();
7906
8060
  }
7907
8061
  this.completeAnimation();
7908
8062
  }
@@ -8092,7 +8246,7 @@ function createProjectionNode2({ attachResizeListener, defaultParent, measureScr
8092
8246
  resetTree() {
8093
8247
  this.root.nodes.forEach((node) => {
8094
8248
  var _a;
8095
- return (_a = node.currentAnimation) == null ? void 0 : _a.stop(false);
8249
+ return (_a = node.currentAnimation) == null ? void 0 : _a.stop();
8096
8250
  });
8097
8251
  this.root.nodes.forEach(clearMeasurements);
8098
8252
  this.root.sharedNodes.clear();
@@ -8590,7 +8744,7 @@ var camelCaseAttributes = /* @__PURE__ */ new Set([
8590
8744
  function renderSVG(element, renderState, _styleProp, projection) {
8591
8745
  renderHTML(element, renderState, void 0, projection);
8592
8746
  for (const key7 in renderState.attrs) {
8593
- element.setAttribute(!camelCaseAttributes.has(key7) ? camelToDash(key7) : key7, renderState.attrs[key7]);
8747
+ element.setAttribute(!camelCaseAttributes.has(key7) ? camelToDash2(key7) : key7, renderState.attrs[key7]);
8594
8748
  }
8595
8749
  }
8596
8750
  var SVGVisualElement = class extends DOMVisualElement {
@@ -8608,7 +8762,7 @@ var SVGVisualElement = class extends DOMVisualElement {
8608
8762
  const defaultType = getDefaultValueType(key7);
8609
8763
  return defaultType ? defaultType.default || 0 : 0;
8610
8764
  }
8611
- key7 = !camelCaseAttributes.has(key7) ? camelToDash(key7) : key7;
8765
+ key7 = !camelCaseAttributes.has(key7) ? camelToDash2(key7) : key7;
8612
8766
  return instance.getAttribute(key7);
8613
8767
  }
8614
8768
  scrapeMotionValuesFromProps(props, prevProps, visualElement) {
@@ -8667,7 +8821,7 @@ function getElementSize(target, borderBoxSize) {
8667
8821
  height: blockSize,
8668
8822
  };
8669
8823
  }
8670
- else if (target instanceof SVGElement && 'getBBox' in target) {
8824
+ else if (isSVGElement(target) && 'getBBox' in target) {
8671
8825
  return target.getBBox();
8672
8826
  }
8673
8827
  else {
@@ -8803,7 +8957,7 @@ function calcInset(element, container) {
8803
8957
  };
8804
8958
  let current2 = element;
8805
8959
  while (current2 && current2 !== container) {
8806
- if (current2 instanceof HTMLElement) {
8960
+ if (isHTMLElement(current2)) {
8807
8961
  inset2.x += current2.offsetLeft;
8808
8962
  inset2.y += current2.offsetTop;
8809
8963
  current2 = current2.offsetParent;
@@ -8961,8 +9115,8 @@ function measure(container, target = container, info) {
8961
9115
  }
8962
9116
  function createOnScrollHandler(element, onScroll, info, options = {}) {
8963
9117
  return {
8964
- measure: () => measure(element, options.target, info),
8965
- update: (time2) => {
9118
+ measure: (time2) => {
9119
+ measure(element, options.target, info);
8966
9120
  updateScrollInfo(element, info, time2);
8967
9121
  if (options.offset || options.target) {
8968
9122
  resolveOffsets(element, info, options);
@@ -8988,23 +9142,17 @@ function scrollInfo(onScroll, { container = document.scrollingElement, ...option
8988
9142
  containerHandlers.add(containerHandler);
8989
9143
  if (!scrollListeners.has(container)) {
8990
9144
  const measureAll = () => {
8991
- for (const handler of containerHandlers)
8992
- handler.measure();
8993
- };
8994
- const updateAll = () => {
8995
9145
  for (const handler of containerHandlers) {
8996
- handler.update(frameData.timestamp);
9146
+ handler.measure(frameData.timestamp);
8997
9147
  }
9148
+ frame.preUpdate(notifyAll2);
8998
9149
  };
8999
9150
  const notifyAll2 = () => {
9000
- for (const handler of containerHandlers)
9151
+ for (const handler of containerHandlers) {
9001
9152
  handler.notify();
9153
+ }
9002
9154
  };
9003
- const listener2 = () => {
9004
- frame.read(measureAll);
9005
- frame.read(updateAll);
9006
- frame.preUpdate(notifyAll2);
9007
- };
9155
+ const listener2 = () => frame.read(measureAll);
9008
9156
  scrollListeners.set(container, listener2);
9009
9157
  const target = getEventTarget(container);
9010
9158
  window.addEventListener('resize', listener2, {
@@ -9190,74 +9338,6 @@ function useMotionTemplate(fragments, ...values) {
9190
9338
  }
9191
9339
  return useCombineMotionValues(values.filter(isMotionValue), buildValue);
9192
9340
  }
9193
- function useSpring(source, config = {}) {
9194
- const { isStatic, } = useContext(MotionConfigContext);
9195
- const activeSpringAnimation = useRef3(null);
9196
- const initialValue = useConstant(() => isMotionValue(source) ? source.get() : source);
9197
- const unit = useConstant(() => typeof initialValue === 'string' ? initialValue.replace(/[\d.-]/g, '') : void 0);
9198
- const value = useMotionValue(initialValue);
9199
- const latestValue = useRef3(initialValue);
9200
- const latestSetter = useRef3(noop);
9201
- const startAnimation2 = () => {
9202
- stopAnimation2();
9203
- activeSpringAnimation.current = new JSAnimation({
9204
- keyframes: [asNumber2(value.get()), asNumber2(latestValue.current),],
9205
- velocity: value.getVelocity(),
9206
- type: 'spring',
9207
- restDelta: 1e-3,
9208
- restSpeed: 0.01,
9209
- ...config,
9210
- onUpdate: latestSetter.current,
9211
- });
9212
- };
9213
- const stopAnimation2 = () => {
9214
- if (activeSpringAnimation.current) {
9215
- activeSpringAnimation.current.stop();
9216
- }
9217
- };
9218
- useInsertionEffect(() => {
9219
- return value.attach((v, set) => {
9220
- if (isStatic)
9221
- return set(v);
9222
- latestValue.current = v;
9223
- latestSetter.current = (latest) => set(parseValue(latest, unit));
9224
- frame.postRender(startAnimation2);
9225
- return value.get();
9226
- }, stopAnimation2);
9227
- }, [JSON.stringify(config),]);
9228
- useIsomorphicLayoutEffect(() => {
9229
- if (isMotionValue(source)) {
9230
- return source.on('change', (v) => value.set(parseValue(v, unit)));
9231
- }
9232
- }, [value, unit,]);
9233
- return value;
9234
- }
9235
- function parseValue(v, unit) {
9236
- return unit ? v + unit : v;
9237
- }
9238
- function asNumber2(v) {
9239
- return typeof v === 'number' ? v : parseFloat(v);
9240
- }
9241
- function useAnimationFrame(callback) {
9242
- const initialTimestamp = useRef3(0);
9243
- const { isStatic, } = useContext(MotionConfigContext);
9244
- useEffect(() => {
9245
- if (isStatic)
9246
- return;
9247
- const provideTimeSinceStart = ({ timestamp, delta, }) => {
9248
- if (!initialTimestamp.current)
9249
- initialTimestamp.current = timestamp;
9250
- callback(timestamp - initialTimestamp.current, delta);
9251
- };
9252
- frame.update(provideTimeSinceStart, true);
9253
- return () => cancelFrame(provideTimeSinceStart);
9254
- }, [callback,]);
9255
- }
9256
- function useTime() {
9257
- const time2 = useMotionValue(0);
9258
- useAnimationFrame((t) => time2.set(t));
9259
- return time2;
9260
- }
9261
9341
  function useComputed(compute) {
9262
9342
  collectMotionValues.current = [];
9263
9343
  compute();
@@ -9285,6 +9365,38 @@ function useListTransform(values, transformer) {
9285
9365
  return transformer(latest);
9286
9366
  });
9287
9367
  }
9368
+ function useSpring(source, options = {}) {
9369
+ const { isStatic, } = useContext(MotionConfigContext);
9370
+ const getFromSource = () => isMotionValue(source) ? source.get() : source;
9371
+ if (isStatic) {
9372
+ return useTransform(getFromSource);
9373
+ }
9374
+ const value = useMotionValue(getFromSource());
9375
+ useInsertionEffect(() => {
9376
+ return attachSpring(value, source, options);
9377
+ }, [value, JSON.stringify(options),]);
9378
+ return value;
9379
+ }
9380
+ function useAnimationFrame(callback) {
9381
+ const initialTimestamp = useRef3(0);
9382
+ const { isStatic, } = useContext(MotionConfigContext);
9383
+ useEffect(() => {
9384
+ if (isStatic)
9385
+ return;
9386
+ const provideTimeSinceStart = ({ timestamp, delta, }) => {
9387
+ if (!initialTimestamp.current)
9388
+ initialTimestamp.current = timestamp;
9389
+ callback(timestamp - initialTimestamp.current, delta);
9390
+ };
9391
+ frame.update(provideTimeSinceStart, true);
9392
+ return () => cancelFrame(provideTimeSinceStart);
9393
+ }, [callback,]);
9394
+ }
9395
+ function useTime() {
9396
+ const time2 = useMotionValue(0);
9397
+ useAnimationFrame((t) => time2.set(t));
9398
+ return time2;
9399
+ }
9288
9400
  function useVelocity(value) {
9289
9401
  const velocity = useMotionValue(value.getVelocity());
9290
9402
  const updateVelocity = () => {
@@ -9686,7 +9798,7 @@ function createDOMVisualElement(element) {
9686
9798
  latestValues: {},
9687
9799
  },
9688
9800
  };
9689
- const node = isSVGElement(element) ? new SVGVisualElement(options) : new HTMLVisualElement(options);
9801
+ const node = isSVGElement(element) && !isSVGSVGElement(element) ? new SVGVisualElement(options) : new HTMLVisualElement(options);
9690
9802
  node.mount(element);
9691
9803
  visualElementStore.set(element, node);
9692
9804
  }
@@ -10390,7 +10502,7 @@ function stagger(duration = 0.1, { startDelay = 0, from = 0, ease: ease2, } = {}
10390
10502
  return startDelay + delay2;
10391
10503
  };
10392
10504
  }
10393
- // /:https://app.framerstatic.com/framer.4LIH3HZD.mjs
10505
+ // /:https://app.framerstatic.com/framer.C2MZBAEL.mjs
10394
10506
  import { lazy as ReactLazy, } from 'react';
10395
10507
  import React4 from 'react';
10396
10508
  import { startTransition as startTransition2, } from 'react';
@@ -10398,6 +10510,7 @@ import { Suspense as Suspense2, } from 'react';
10398
10510
  import { memo as memo2, } from 'react';
10399
10511
  import ReactDOM from 'react-dom';
10400
10512
  import { createRef, } from 'react';
10513
+ import { useTransition, } from 'react';
10401
10514
  import { cloneElement as cloneElement32, } from 'react';
10402
10515
  var __unframerNavigator2 = typeof window !== 'undefined' ? navigator : void 0;
10403
10516
  var require_hsluv = __commonJS({
@@ -11595,10 +11708,10 @@ function useCurrentRouteId() {
11595
11708
  }
11596
11709
  function useOnRouteChange(cb) {
11597
11710
  const currentRoute = useCurrentRoute();
11598
- const [lastRoute, setLastRoute,] = React4.useState(currentRoute);
11599
- if (isEqual(lastRoute, currentRoute) || !currentRoute)
11711
+ const lastRoute = React4.useRef(currentRoute);
11712
+ if (isEqual(lastRoute.current, currentRoute) || !currentRoute)
11600
11713
  return;
11601
- setLastRoute(currentRoute);
11714
+ lastRoute.current = currentRoute;
11602
11715
  cb(currentRoute);
11603
11716
  }
11604
11717
  function useRoute(routeId) {
@@ -11671,7 +11784,7 @@ function isNumber2(value) {
11671
11784
  function isArray(value) {
11672
11785
  return Array.isArray(value);
11673
11786
  }
11674
- function isObject(value) {
11787
+ function isObject2(value) {
11675
11788
  return value !== null && typeof value === 'object' && !isArray(value);
11676
11789
  }
11677
11790
  function isUndefined(value) {
@@ -11687,7 +11800,7 @@ function isValidDate(value) {
11687
11800
  return value instanceof Date && !Number.isNaN(value.getTime());
11688
11801
  }
11689
11802
  function isGenerator2(value) {
11690
- return isObject(value) && isFunction(value.return);
11803
+ return isObject2(value) && isFunction(value.return);
11691
11804
  }
11692
11805
  var noop2 = () => { };
11693
11806
  var isWindow = typeof window !== 'undefined';
@@ -11793,7 +11906,9 @@ function interactionResponse(options) {
11793
11906
  setTimeout(resolve, 100);
11794
11907
  frame.read(() => {
11795
11908
  void schedulerYield(options).then(resolve);
11796
- });
11909
+ }, false,
11910
+ // In some cases, interactionResponse might be called in a rAF. This means, we should right away call `schedulerYield`, as the next paint follows immediately.
11911
+ true);
11797
11912
  });
11798
11913
  }
11799
11914
  function schedulerYield(options) {
@@ -12698,7 +12813,7 @@ async function pushRouteState(routeId, route, { currentRoutePath, currentPathVar
12698
12813
  }
12699
12814
  function isHistoryState(data2) {
12700
12815
  const routeIdKey = 'routeId';
12701
- return isObject(data2) && isString(data2[routeIdKey]);
12816
+ return isObject2(data2) && isString(data2[routeIdKey]);
12702
12817
  }
12703
12818
  function replaceHistoryState(data2, url, ignoreReplaceStateWrapper = false) {
12704
12819
  performance.mark('framer-history-replace');
@@ -12778,7 +12893,7 @@ function usePopStateHandler(currentRouteId, setCurrentRouteId) {
12778
12893
  if (((_a = window.navigation) == null ? void 0 : _a.transition) &&
12779
12894
  ((_c = (_b = window.navigation) == null ? void 0 : _b.transition) == null ? void 0 : _c.navigationType) !== 'traverse')
12780
12895
  return;
12781
- if (!isObject(state))
12896
+ if (!isObject2(state))
12782
12897
  return;
12783
12898
  const { routeId, hash: hash2, pathVariables, localeId, } = state;
12784
12899
  if (!isString(routeId))
@@ -12789,7 +12904,7 @@ function usePopStateHandler(currentRouteId, setCurrentRouteId) {
12789
12904
  const stopMonitoringINPRelatedInputs = monitorINPRelatedInputs();
12790
12905
  void nextRender.promise.finally(stopMonitoringINPRelatedInputs);
12791
12906
  const changeRoute = () => {
12792
- setCurrentRouteId(routeId, isString(localeId) ? localeId : void 0, isString(hash2) ? hash2 : void 0, isObject(pathVariables) ? pathVariables : void 0, true, nextRender, false);
12907
+ setCurrentRouteId(routeId, isString(localeId) ? localeId : void 0, isString(hash2) ? hash2 : void 0, isObject2(pathVariables) ? pathVariables : void 0, true, nextRender, false);
12793
12908
  };
12794
12909
  const viewTransition = await startViewTransition2(currentRouteId.current, routeId, changeRoute);
12795
12910
  const navigationTransition = (_d = window.navigation) == null ? void 0 : _d.transition;
@@ -12836,7 +12951,7 @@ function getHashForRoute(hash2, route, hashVariables) {
12836
12951
  if (!resolvedHash)
12837
12952
  return void 0;
12838
12953
  const variables = Object.assign({}, route == null ? void 0 : route.elements, hashVariables);
12839
- return resolvedHash.replace(pathVariablesRegExp, (m2, p1) => String(variables[p1] ?? m2));
12954
+ return resolvedHash.replace(pathVariablesRegExp, (m2, p1) => variables[p1] ?? m2);
12840
12955
  }
12841
12956
  function getPathForRoute(route, { currentRoutePath, currentPathVariables, hash: hash2, pathVariables, hashVariables, relative: relative2 = true, preserveQueryParams, onlyHash = false, siteCanonicalURL, }) {
12842
12957
  const resolvedHash = getHashForRoute(hash2, route, hashVariables);
@@ -13605,17 +13720,6 @@ function getVariantsFromServerTiming() {
13605
13720
  }
13606
13721
  return new URLSearchParams();
13607
13722
  }
13608
- var cookieValueRegex = /[^|; ]?framerAbTestingOverrides=(?<value>[^;]*)[;|$]?/u;
13609
- function getVariantsFromCookie() {
13610
- var _a;
13611
- let value = '';
13612
- try {
13613
- const matches = cookieValueRegex.exec(document.cookie);
13614
- value = ((_a = matches == null ? void 0 : matches.groups) == null ? void 0 : _a.value) ?? '';
13615
- }
13616
- catch { }
13617
- return new URLSearchParams(value);
13618
- }
13619
13723
  function patchRoute(routes, abTestId, abTestingVariantId) {
13620
13724
  const route = routes[abTestingVariantId];
13621
13725
  if (!route)
@@ -13683,7 +13787,6 @@ function patchRoutesForABTesting(routes, initialRouteId) {
13683
13787
  }
13684
13788
  }
13685
13789
  patchRoutesFromSearchParams(routes, getVariantsFromServerTiming());
13686
- patchRoutesFromSearchParams(routes, getVariantsFromCookie());
13687
13790
  removeRoutesVariants(routes);
13688
13791
  return resolvedInitialRouteId;
13689
13792
  }
@@ -14001,6 +14104,30 @@ function Point(x, y) {
14001
14104
  }
14002
14105
  Point2.sortClockwise = sortClockwise;
14003
14106
  })(Point || (Point = {}));
14107
+ function assert(condition, ...msg) {
14108
+ var _a, _b;
14109
+ if (condition)
14110
+ return;
14111
+ const e = Error('Assertion Error' + (msg.length > 0 ? ': ' + msg.join(' ') : ''));
14112
+ if (e.stack) {
14113
+ try {
14114
+ const lines = e.stack.split('\n');
14115
+ if ((_a = lines[1]) == null ? void 0 : _a.includes('assert')) {
14116
+ lines.splice(1, 1);
14117
+ e.stack = lines.join('\n');
14118
+ }
14119
+ else if ((_b = lines[0]) == null ? void 0 : _b.includes('assert')) {
14120
+ lines.splice(0, 1);
14121
+ e.stack = lines.join('\n');
14122
+ }
14123
+ }
14124
+ catch { }
14125
+ }
14126
+ throw e;
14127
+ }
14128
+ function assertNever(x, error) {
14129
+ throw error || new Error(x ? `Unexpected value: ${x}` : 'Application entered invalid state');
14130
+ }
14004
14131
  var BezierDefaults = {
14005
14132
  curve: 'ease',
14006
14133
  duration: 1,
@@ -14032,6 +14159,7 @@ var BezierAnimator = class {
14032
14159
  const { duration, } = this.options;
14033
14160
  this.progress += delta / duration;
14034
14161
  const value = this.unitBezier.solve(this.progress, this.solveEpsilon(duration));
14162
+ assert(this.interpolator !== void 0, 'setFrom() or setTo() must be called before next()');
14035
14163
  this.current = this.interpolator(value);
14036
14164
  return this.current;
14037
14165
  });
@@ -14221,7 +14349,7 @@ var Interpolation = {
14221
14349
  var NumberInterpolation = {
14222
14350
  interpolate(from, to) {
14223
14351
  [from, to,] = Interpolation.handleUndefined(from, to);
14224
- const a1 = +from;
14352
+ const a1 = from;
14225
14353
  const b1 = to - a1;
14226
14354
  return (progress2) => {
14227
14355
  const value = a1 + b1 * progress2;
@@ -14377,6 +14505,7 @@ var SpringAnimator = class {
14377
14505
  }
14378
14506
  next(delta) {
14379
14507
  this.state = this.integrator.integrateState(this.state, delta);
14508
+ assert(this.interpolator !== void 0, 'setFrom() or setTo() must be called before next()');
14380
14509
  const value = this.interpolator(this.progress());
14381
14510
  return value;
14382
14511
  }
@@ -14393,12 +14522,14 @@ var SpringAnimator = class {
14393
14522
  this.state.v = velocity;
14394
14523
  }
14395
14524
  progress() {
14525
+ assert(this.difference !== void 0, 'setTo() must be called before progress()');
14396
14526
  return 1 - this.state.x / this.difference;
14397
14527
  }
14398
14528
  // The spring always settles to 0, so we create an interpolation to the destination
14399
14529
  // And calculate the progress based on the current state and the span of the interpolation
14400
14530
  // This lets us integrate over state.x, even though Value is generic
14401
14531
  setTo(value) {
14532
+ assert(this.current !== void 0, 'setFrom() must be called before setTo()');
14402
14533
  this.destination = value;
14403
14534
  this.difference = this.interpolation.difference(this.destination, this.current);
14404
14535
  this.state.x = this.difference;
@@ -14894,7 +15025,7 @@ function rgbToHsv(r, g, b) {
14894
15025
  const max = Math.max(r, g, b);
14895
15026
  const min = Math.min(r, g, b);
14896
15027
  const d = max - min;
14897
- let h;
15028
+ let h = 0;
14898
15029
  const s = max === 0 ? 0 : d / max;
14899
15030
  const v = max;
14900
15031
  if (max === min) {
@@ -15283,7 +15414,7 @@ function convertP3ToRgb(color2) {
15283
15414
  }
15284
15415
  var P3Color = class _P3Color {
15285
15416
  constructor(color2) {
15286
- __publicField(this, 'format');
15417
+ __publicField(this, 'format', 'p3');
15287
15418
  __publicField(this, 'r');
15288
15419
  __publicField(this, 'g');
15289
15420
  __publicField(this, 'b');
@@ -15457,7 +15588,7 @@ var Color = /* @__PURE__ */ (() => {
15457
15588
  return false;
15458
15589
  };
15459
15590
  Color2.isColorObject = (color2) => {
15460
- return isObject(color2) && typeof color2.r === 'number' && typeof color2.g === 'number' && typeof color2.b === 'number' &&
15591
+ return isObject2(color2) && typeof color2.r === 'number' && typeof color2.g === 'number' && typeof color2.b === 'number' &&
15461
15592
  typeof color2.h === 'number' && typeof color2.s === 'number' && typeof color2.l === 'number' && typeof color2.a === 'number' &&
15462
15593
  typeof color2.roundA === 'number' && typeof color2.format === 'string';
15463
15594
  };
@@ -15990,9 +16121,12 @@ var PrecalculatedAnimator = class {
15990
16121
  this.totalTime = this.values.length * delta;
15991
16122
  }
15992
16123
  indexForTime(time2) {
16124
+ assert(this.values !== void 0, 'values must be set before calling indexForTime()');
16125
+ assert(this.totalTime !== void 0, 'totalTime must be set before calling indexForTime()');
15993
16126
  return Math.max(0, Math.min(this.values.length - 1, Math.round(this.values.length * (time2 / this.totalTime)) - 1));
15994
16127
  }
15995
16128
  valueForTime(time2) {
16129
+ assert(this.values !== void 0, 'values must be set before calling valueForTime()');
15996
16130
  const index = this.indexForTime(time2);
15997
16131
  const value = this.values[index];
15998
16132
  return value;
@@ -16006,6 +16140,7 @@ var PrecalculatedAnimator = class {
16006
16140
  this.preCalculate();
16007
16141
  }
16008
16142
  isReady() {
16143
+ assert(this.totalTime !== void 0, 'totalTime must be set before calling isReady()');
16009
16144
  return this.values !== void 0 && this.values.length > 0 && this.totalTime > 0;
16010
16145
  }
16011
16146
  next(delta) {
@@ -16013,11 +16148,14 @@ var PrecalculatedAnimator = class {
16013
16148
  return this.valueForTime(this.currentTime);
16014
16149
  }
16015
16150
  isFinished() {
16151
+ assert(this.totalTime !== void 0, 'totalTime must be set before calling isFinished()');
16016
16152
  return this.totalTime === 0 || this.currentTime >= this.totalTime;
16017
16153
  }
16018
16154
  get endValue() {
16019
16155
  this.preCalculate();
16156
+ assert(this.totalTime !== void 0, 'expecting totalTime to be set after calling preCalculate()');
16020
16157
  const value = this.valueForTime(this.totalTime);
16158
+ assert(this.values !== void 0, 'expecting values to be set after calling preCalculate()');
16021
16159
  return this.values.length > 0 ? value : this.animator.next(0);
16022
16160
  }
16023
16161
  };
@@ -16366,10 +16504,10 @@ var FramerAnimation = class _FramerAnimation {
16366
16504
  __publicField(this, 'onfinish');
16367
16505
  __publicField(this, 'oncancel');
16368
16506
  __publicField(this, 'readyPromise', Promise.resolve());
16369
- __publicField(this, 'readyResolve');
16370
- __publicField(this, 'finishedPromise');
16371
- __publicField(this, 'finishedResolve');
16372
- __publicField(this, 'finishedReject');
16507
+ __publicField(this, 'readyResolve', null);
16508
+ __publicField(this, 'finishedPromise', Promise.resolve());
16509
+ __publicField(this, 'finishedResolve', null);
16510
+ __publicField(this, 'finishedReject', null);
16373
16511
  this.resetFinishedPromise();
16374
16512
  const deprecatedAnimationOptions = {
16375
16513
  ...DefaultDeprecatedAnimationOptions,
@@ -16681,30 +16819,6 @@ var animate2 = /* @__PURE__ */ (() => {
16681
16819
  };
16682
16820
  return animate3;
16683
16821
  })();
16684
- function assert(condition, ...msg) {
16685
- var _a, _b;
16686
- if (condition)
16687
- return;
16688
- const e = Error('Assertion Error' + (msg.length > 0 ? ': ' + msg.join(' ') : ''));
16689
- if (e.stack) {
16690
- try {
16691
- const lines = e.stack.split('\n');
16692
- if ((_a = lines[1]) == null ? void 0 : _a.includes('assert')) {
16693
- lines.splice(1, 1);
16694
- e.stack = lines.join('\n');
16695
- }
16696
- else if ((_b = lines[0]) == null ? void 0 : _b.includes('assert')) {
16697
- lines.splice(0, 1);
16698
- e.stack = lines.join('\n');
16699
- }
16700
- }
16701
- catch { }
16702
- }
16703
- throw e;
16704
- }
16705
- function assertNever(x, error) {
16706
- throw error || new Error(x ? `Unexpected value: ${x}` : 'Application entered invalid state');
16707
- }
16708
16822
  var LayoutIdContext = /* @__PURE__ */ React4.createContext({
16709
16823
  getLayoutId: (args) => null,
16710
16824
  persistLayoutIdCache: () => { },
@@ -19968,7 +20082,7 @@ function injectComponentCSSRules() {
19968
20082
  }
19969
20083
  }
19970
20084
  function isReactComponent(component) {
19971
- return isObject(component) || isFunction(component);
20085
+ return isObject2(component) || isFunction(component);
19972
20086
  }
19973
20087
  var optionalKey = 'optional';
19974
20088
  function controlIsOptional(control) {
@@ -19999,14 +20113,14 @@ function getControlDefaultValue(control) {
19999
20113
  case 'number':
20000
20114
  return isNumber2(control.defaultValue) ? control.defaultValue : void 0;
20001
20115
  case 'transition':
20002
- return isObject(control.defaultValue) ? control.defaultValue : void 0;
20116
+ return isObject2(control.defaultValue) ? control.defaultValue : void 0;
20003
20117
  case 'border':
20004
- return isObject(control.defaultValue) ? control.defaultValue : void 0;
20118
+ return isObject2(control.defaultValue) ? control.defaultValue : void 0;
20005
20119
  case 'font':
20006
- return isObject(control.defaultValue) ? control.defaultValue : void 0;
20120
+ return isObject2(control.defaultValue) ? control.defaultValue : void 0;
20007
20121
  case 'object': {
20008
- const value = isObject(control.defaultValue) ? control.defaultValue : {};
20009
- if (isObject(control.controls)) {
20122
+ const value = isObject2(control.defaultValue) ? control.defaultValue : {};
20123
+ if (isObject2(control.controls)) {
20010
20124
  applyControlDefaultsToDefaultProps(value, control.controls);
20011
20125
  }
20012
20126
  return value;
@@ -20055,7 +20169,7 @@ function applyControlDefaultsToDefaultProps(defaultProps, controls) {
20055
20169
  }
20056
20170
  }
20057
20171
  function getDefaultProps(component) {
20058
- if (isObject(component.defaultProps)) {
20172
+ if (isObject2(component.defaultProps)) {
20059
20173
  return component.defaultProps;
20060
20174
  }
20061
20175
  const defaultProps = {};
@@ -22357,7 +22471,7 @@ function unwrapInlinedDisplayContents(element) {
22357
22471
  function useMeasureLayout(props, ref, getChildren = () => [], options = {}) {
22358
22472
  const { id: id3, visible, _needsMeasure, } = props;
22359
22473
  const { skipHook = false, } = options;
22360
- const inCodeComponent = Boolean(useContext(ComponentContainerContext));
22474
+ const inCodeComponent = useContext(ComponentContainerContext);
22361
22475
  const onCanvas = RenderTarget.current() === RenderTarget.canvas;
22362
22476
  useIsomorphicLayoutEffect2(() => {
22363
22477
  if (!onCanvas || inCodeComponent || skipHook) {
@@ -22657,7 +22771,7 @@ var LinearGradient = {
22657
22771
  * @param value -
22658
22772
  */
22659
22773
  isLinearGradient: (value) => {
22660
- return isObject(value) && linearGradientKeys.every((key7) => key7 in value) &&
22774
+ return isObject2(value) && linearGradientKeys.every((key7) => key7 in value) &&
22661
22775
  (isSimpleGradient(value) || isMultiStopGradient(value));
22662
22776
  },
22663
22777
  /** @internal */
@@ -22679,7 +22793,7 @@ var RadialGradient = {
22679
22793
  * @public
22680
22794
  */
22681
22795
  isRadialGradient: (value) => {
22682
- return isObject(value) && radialGradientKeys.every((key7) => key7 in value) &&
22796
+ return isObject2(value) && radialGradientKeys.every((key7) => key7 in value) &&
22683
22797
  (isSimpleGradient(value) || isMultiStopGradient(value));
22684
22798
  },
22685
22799
  /** @internal */
@@ -22908,7 +23022,7 @@ function useStyleAndRect(props) {
22908
23022
  React4.useInsertionEffect(() => {
22909
23023
  injectComponentCSSRules();
22910
23024
  }, []);
22911
- const inCodeComponent = Boolean(useContext(ComponentContainerContext));
23025
+ const inCodeComponent = useContext(ComponentContainerContext);
22912
23026
  const { style: style2, _initialStyle, __fromCanvasComponent, size, } = props;
22913
23027
  const unwrappedProps = unwrapFrameProps(props);
22914
23028
  const constraintsRect = useConstraints(unwrappedProps);
@@ -23072,7 +23186,7 @@ var VisibleFrame = /* @__PURE__ */ forwardRef(function VisibleFrame2(props, forw
23072
23186
  }
23073
23187
  useMeasureLayout(props, ref);
23074
23188
  const backgroundImage = backgroundImageFromProps(props);
23075
- const inCodeComponent = Boolean(useContext(ComponentContainerContext));
23189
+ const inCodeComponent = useContext(ComponentContainerContext);
23076
23190
  const parentSize = resolveParentSize(propsWithOverrides, unwrappedProps, rect, inCodeComponent);
23077
23191
  const wrappedContent = useProvideParentSize(
23078
23192
  /* @__PURE__ */ jsxs(Fragment, {
@@ -23268,7 +23382,7 @@ var SharedLayoutRoot = class extends Component2 {
23268
23382
  var _a;
23269
23383
  if (!this.scheduledPromotion || !this.lead || !this.follow)
23270
23384
  return null;
23271
- const needsReset = !!((_a = this.lead) == null ? void 0 : _a.layoutMaybeMutated) && !this.shouldAnimate;
23385
+ const needsReset = ((_a = this.lead) == null ? void 0 : _a.layoutMaybeMutated) && !this.shouldAnimate;
23272
23386
  this.lead.projectionNodes.forEach((projectionNode) => {
23273
23387
  var _a2;
23274
23388
  projectionNode == null ? void 0 : projectionNode.promote({
@@ -23343,7 +23457,7 @@ function setRef(ref, value) {
23343
23457
  }
23344
23458
  }
23345
23459
  function isMutableRef(ref) {
23346
- return isObject(ref) && 'current' in ref;
23460
+ return isObject2(ref) && 'current' in ref;
23347
23461
  }
23348
23462
  function refHasValue(ref) {
23349
23463
  return isMutableRef(ref) && ref.current !== null;
@@ -23464,6 +23578,21 @@ var SharedIntersectionObserver = class {
23464
23578
  }
23465
23579
  };
23466
23580
  var SharedIntersectionObserverContext = /* @__PURE__ */ createContext(/* @__PURE__ */ new Map());
23581
+ function observeElement(observers2, key7, element, root, callback, rootMargin, threshold) {
23582
+ let observer2 = observers2.get(key7);
23583
+ if (!observer2 || observer2.root !== (root == null ? void 0 : root.current)) {
23584
+ observer2 = new SharedIntersectionObserver({
23585
+ root: root == null ? void 0 : root.current,
23586
+ rootMargin,
23587
+ threshold,
23588
+ });
23589
+ observers2.set(key7, observer2);
23590
+ }
23591
+ observer2.observeElementWithCallback(element, callback);
23592
+ return () => {
23593
+ observer2.unobserve(element);
23594
+ };
23595
+ }
23467
23596
  function _useSharedIntersectionObserver(ref, callback, options) {
23468
23597
  const key7 = useConstant2(() => `${options.rootMargin}`);
23469
23598
  const observers2 = useContext(SharedIntersectionObserverContext);
@@ -23473,19 +23602,7 @@ function _useSharedIntersectionObserver(ref, callback, options) {
23473
23602
  return;
23474
23603
  if (element === null)
23475
23604
  return;
23476
- let observer2 = observers2.get(key7);
23477
- if (!observer2 || observer2.root !== (root == null ? void 0 : root.current)) {
23478
- observer2 = new SharedIntersectionObserver({
23479
- root: root == null ? void 0 : root.current,
23480
- rootMargin,
23481
- threshold,
23482
- });
23483
- observers2.set(key7, observer2);
23484
- }
23485
- observer2.observeElementWithCallback(element, callback);
23486
- return () => {
23487
- observer2 == null ? void 0 : observer2.unobserve(element);
23488
- };
23605
+ return observeElement(observers2, key7, element, root, callback, rootMargin, threshold);
23489
23606
  }, [enabled, callback, root, rootMargin, threshold,]);
23490
23607
  }
23491
23608
  var useSharedIntersectionObserver = typeof IntersectionObserver === 'undefined' ? noop2 : _useSharedIntersectionObserver;
@@ -23535,7 +23652,7 @@ function isIntersectingWithThreshold({ boundingClientRect, intersectionRect, isI
23535
23652
  var LayoutTree = class extends Component2 {
23536
23653
  constructor() {
23537
23654
  super(...arguments);
23538
- __publicField(this, 'layoutMaybeMutated');
23655
+ __publicField(this, 'layoutMaybeMutated', false);
23539
23656
  __publicField(this, 'projectionNodes', /* @__PURE__ */ new Map());
23540
23657
  __publicField(this, 'rootProjectionNode');
23541
23658
  __publicField(this, 'isExiting');
@@ -23560,7 +23677,7 @@ var LayoutTree = class extends Component2 {
23560
23677
  this.isExiting = isExiting;
23561
23678
  if (isLead === void 0)
23562
23679
  return true;
23563
- const hasBecomeLead = !this.props.isLead && !!isLead;
23680
+ const hasBecomeLead = !this.props.isLead && isLead;
23564
23681
  const hasExitBeenCancelled = this.props.isExiting && !isExiting;
23565
23682
  const shouldPromote = hasBecomeLead || hasExitBeenCancelled;
23566
23683
  const shouldDemote = !!this.props.isLead && !isLead;
@@ -24944,7 +25061,7 @@ function containerContent(item) {
24944
25061
  const position = (_a = item == null ? void 0 : item.transition) == null ? void 0 : _a.position;
24945
25062
  const shouldStretchWidth = !position || position.left !== void 0 && position.right !== void 0;
24946
25063
  const shouldStretchHeight = !position || position.top !== void 0 && position.bottom !== void 0;
24947
- const canStretchStyle = 'style' in child.props ? isObject(child.props.style) : true;
25064
+ const canStretchStyle = 'style' in child.props ? isObject2(child.props.style) : true;
24948
25065
  if (shouldStretchWidth) {
24949
25066
  const canStretchWidth = 'width' in child.props;
24950
25067
  if (canStretchWidth)
@@ -25237,11 +25354,11 @@ function WithDragging(Component17) {
25237
25354
  __publicField(this, 'isMoving', false);
25238
25355
  __publicField(this, 'isAnimating', false);
25239
25356
  __publicField(this, 'directionLockAxis', null);
25240
- __publicField(this, 'layerStartPoint');
25241
- __publicField(this, 'correctedLayerStartPoint');
25242
- __publicField(this, 'previousPoint');
25357
+ __publicField(this, 'layerStartPoint', null);
25358
+ __publicField(this, 'correctedLayerStartPoint', null);
25359
+ __publicField(this, 'previousPoint', null);
25243
25360
  __publicField(this, '_constraints', null);
25244
- __publicField(this, 'animation');
25361
+ __publicField(this, 'animation', null);
25245
25362
  __publicField(this, 'panStart', (event) => {
25246
25363
  if (!this.props.enabled) {
25247
25364
  return;
@@ -25269,6 +25386,7 @@ function WithDragging(Component17) {
25269
25386
  if (!enabled) {
25270
25387
  return;
25271
25388
  }
25389
+ assert(this.previousPoint !== null, 'previousPoint must be set in panStart()');
25272
25390
  let point2 = {
25273
25391
  ...this.previousPoint,
25274
25392
  };
@@ -25289,6 +25407,7 @@ function WithDragging(Component17) {
25289
25407
  return;
25290
25408
  }
25291
25409
  else {
25410
+ assert(this.layerStartPoint !== null, 'layerStartPoint must be set in panStart()');
25292
25411
  if (this.directionLockAxis === 'y') {
25293
25412
  point2.x = this.layerStartPoint.x;
25294
25413
  }
@@ -25767,19 +25886,18 @@ function WithDragging(Component17) {
25767
25886
  };
25768
25887
  }
25769
25888
  render() {
25770
- const { onPanStart, onPan, onPanEnd, onMouseWheelStart, onMouseWheel, onMouseWheelEnd, ...attributes } = this.props;
25771
25889
  const originalProps = {
25772
- ...attributes,
25890
+ ...this.props,
25773
25891
  };
25774
25892
  Object.keys(_WithDraggingHOC2.draggingDefaultProps).forEach((key7) => {
25775
25893
  delete asRecord(originalProps)[key7];
25776
25894
  });
25777
- originalProps.onPanStart = this.wrapHandler(this.panStart, onPanStart);
25778
- originalProps.onPan = this.wrapHandler(this.pan, onPan);
25779
- originalProps.onPanEnd = this.wrapHandler(this.panEnd, onPanEnd);
25780
- originalProps.onMouseWheelStart = this.wrapHandler(this.mouseWheelStart, onMouseWheelStart);
25781
- originalProps.onMouseWheel = this.wrapHandler(this.mouseWheel, onMouseWheel);
25782
- originalProps.onMouseWheelEnd = this.wrapHandler(this.mouseWheelEnd, onMouseWheelEnd);
25895
+ originalProps.onPanStart = this.wrapHandler(this.panStart, originalProps.onPanStart);
25896
+ originalProps.onPan = this.wrapHandler(this.pan, originalProps.onPan);
25897
+ originalProps.onPanEnd = this.wrapHandler(this.panEnd, originalProps.onPanEnd);
25898
+ originalProps.onMouseWheelStart = this.wrapHandler(this.mouseWheelStart, originalProps.onMouseWheelStart);
25899
+ originalProps.onMouseWheel = this.wrapHandler(this.mouseWheel, originalProps.onMouseWheel);
25900
+ originalProps.onMouseWheelEnd = this.wrapHandler(this.mouseWheelEnd, originalProps.onMouseWheelEnd);
25783
25901
  originalProps.left = this.x;
25784
25902
  originalProps.top = this.y;
25785
25903
  return /* @__PURE__ */ jsx3(DraggingContext.Provider, {
@@ -26106,7 +26224,7 @@ function hasRadius(props) {
26106
26224
  }
26107
26225
  function getRadiusValue(value) {
26108
26226
  let num = Number(value);
26109
- if (typeof value === 'string' && Number.isNaN(Number(num))) {
26227
+ if (typeof value === 'string' && Number.isNaN(num)) {
26110
26228
  return value;
26111
26229
  }
26112
26230
  else if (isAnimatable2(value)) {
@@ -26930,6 +27048,7 @@ var DeprecatedFrame = /* @__PURE__ */ (() => {
26930
27048
  return React4.cloneElement(child, {
26931
27049
  parentSize: this.state.size,
26932
27050
  _forwardedOverrides,
27051
+ // biome-ignore lint/suspicious/noExplicitAny: deprecated code
26933
27052
  });
26934
27053
  }
26935
27054
  else if (_forwardedOverrides && child) {
@@ -27224,7 +27343,7 @@ function makePaddingString({ top, left, bottom, right, }) {
27224
27343
  var Stack = /* @__PURE__ */ (() => {
27225
27344
  const StackInner = React4.forwardRef(function StackInner2(stackProps, forwardedRef) {
27226
27345
  const { as = 'div', direction = 'vertical', distribution = 'start', alignment = 'center', gap = 10, wrap: wrap2 = false, useFlexboxGap: externalUseFlexboxGap = true, children, style: styleProp, className: className2, willChangeTransform, __fromCodeComponentNode, parentSize, __contentWrapperStyle, ...containerProps } = stackProps;
27227
- const useFlexboxGap = Boolean(externalUseFlexboxGap || wrap2);
27346
+ const useFlexboxGap = externalUseFlexboxGap || wrap2;
27228
27347
  const stackRef = React4.useRef(null);
27229
27348
  const flexDirection = toFlexDirection(direction);
27230
27349
  const isReverse = isReverseDirection(flexDirection);
@@ -27634,7 +27753,7 @@ var Page = /* @__PURE__ */ React4.forwardRef(function Page2(props, forwardedRef)
27634
27753
  }
27635
27754
  const updateOnResize = React4.useCallback(() => {
27636
27755
  if (!hasFixedSize)
27637
- setForceUpdateCount((v) => v + 1);
27756
+ startTransition2(() => setForceUpdateCount((v) => v + 1));
27638
27757
  }, [hasFixedSize,]);
27639
27758
  React4.useEffect(() => {
27640
27759
  if (RenderTarget.current() !== RenderTarget.preview)
@@ -28361,7 +28480,7 @@ function containsBitmask(value, bitmask) {
28361
28480
  var GestureRecognizer = class {
28362
28481
  constructor() {
28363
28482
  __publicField(this, '_state', 2);
28364
- __publicField(this, 'handler');
28483
+ __publicField(this, 'handler', null);
28365
28484
  __publicField(this, 'preventers', []);
28366
28485
  }
28367
28486
  get state() {
@@ -28428,7 +28547,7 @@ var GestureRecognizer = class {
28428
28547
  var MouseWheelGestureRecognizer = class extends GestureRecognizer {
28429
28548
  constructor() {
28430
28549
  super(...arguments);
28431
- __publicField(this, 'startEvent');
28550
+ __publicField(this, 'startEvent', null);
28432
28551
  __publicField(this, 'eventType', 'mousewheel');
28433
28552
  __publicField(this, 'onMouseWheelEnd', debounce((event) => {
28434
28553
  if (this.handler && this.startEvent) {
@@ -28461,7 +28580,7 @@ var MouseWheelGestureRecognizer = class extends GestureRecognizer {
28461
28580
  var PanGestureRecognizer = class extends GestureRecognizer {
28462
28581
  constructor() {
28463
28582
  super(...arguments);
28464
- __publicField(this, 'startEvent');
28583
+ __publicField(this, 'startEvent', null);
28465
28584
  __publicField(this, 'eventType', 'pan');
28466
28585
  }
28467
28586
  pointerSessionBegan(session, event) {
@@ -28838,7 +28957,7 @@ var useUpdateChildSize = ({ dragDirection, children, fromCanvasComponent, }) =>
28838
28957
  : updatedSize;
28839
28958
  return React4.cloneElement(child, update);
28840
28959
  });
28841
- }, [dragDirection, children,]);
28960
+ }, [dragDirection, children, fromCanvasComponent,]);
28842
28961
  };
28843
28962
  var numberFromOptionalMotionValue = (value) => {
28844
28963
  return typeof value === 'number' ? value : value.get();
@@ -29119,7 +29238,6 @@ var EmulatedScroll = /* @__PURE__ */ React4.forwardRef(function EmulatedScroll2(
29119
29238
  preserve3d: containerProps.preserve3d,
29120
29239
  children: [
29121
29240
  /* @__PURE__ */ jsx3(EmptyState, {
29122
- children,
29123
29241
  size: {
29124
29242
  width: isFiniteNumber(containerProps.width) ? containerProps.width : '100%',
29125
29243
  height: isFiniteNumber(containerProps.height) ? containerProps.height : '100%',
@@ -29127,6 +29245,7 @@ var EmulatedScroll = /* @__PURE__ */ React4.forwardRef(function EmulatedScroll2(
29127
29245
  insideUserCodeComponent: !containerProps.__fromCodeComponentNode,
29128
29246
  title: 'Scroll',
29129
29247
  description: 'Click and drag the connector to any frame on the canvas \u2192',
29248
+ children,
29130
29249
  }),
29131
29250
  useUpdateChildSize({
29132
29251
  dragDirection: direction,
@@ -30258,8 +30377,8 @@ var AnimationCollector = class {
30258
30377
  const initial = props.__framer__presenceInitial ?? props.initial;
30259
30378
  const animate3 = props.__framer__presenceAnimate ?? props.animate;
30260
30379
  const config = {
30261
- initial: isObject(initial) ? initial : void 0,
30262
- animate: isObject(animate3) ? animate3 : void 0,
30380
+ initial: isObject2(initial) ? initial : void 0,
30381
+ animate: isObject2(animate3) ? animate3 : void 0,
30263
30382
  transformTemplate: isString(transformTemplate2) ? transformTemplate2 : void 0,
30264
30383
  };
30265
30384
  for (const variantId of variants)
@@ -30419,6 +30538,7 @@ function useLoop({ loopEffectEnabled, loopRepeatDelay, loopTransition, loopRepea
30419
30538
  const values = useConstant2(makeFXValues);
30420
30539
  const mirrorStateRef = useRef3(false);
30421
30540
  const delay2 = useDelay();
30541
+ const animationPromiseRef = useRef3(null);
30422
30542
  const animateValues = useCallback(async () => {
30423
30543
  if (!loop)
30424
30544
  return;
@@ -30427,10 +30547,10 @@ function useLoop({ loopEffectEnabled, loopRepeatDelay, loopTransition, loopRepea
30427
30547
  const to = mirror ? defaultFXValues : loop;
30428
30548
  const from = mirror ? loop : defaultFXValues;
30429
30549
  mirrorStateRef.current = !mirrorStateRef.current;
30430
- return Promise.all(effectValuesKeys.map((key7) => {
30550
+ animationPromiseRef.current = Promise.all(effectValuesKeys.map((key7) => {
30431
30551
  if (shouldReduceMotion && key7 !== 'opacity')
30432
30552
  return;
30433
- values[key7].set(from[key7] ?? defaultFXValues[key7]);
30553
+ values[key7].jump(from[key7] ?? defaultFXValues[key7]);
30434
30554
  return new Promise((resolve) => {
30435
30555
  const opts = {
30436
30556
  ...transition,
@@ -30442,6 +30562,7 @@ function useLoop({ loopEffectEnabled, loopRepeatDelay, loopTransition, loopRepea
30442
30562
  }
30443
30563
  });
30444
30564
  }));
30565
+ return animationPromiseRef.current;
30445
30566
  }, [loop, loopRepeatType, loopTransition, shouldReduceMotion,]);
30446
30567
  const [isRunning, setIsRunning,] = useState(false);
30447
30568
  const shouldRunRef = useRef3(false);
@@ -30450,7 +30571,7 @@ function useLoop({ loopEffectEnabled, loopRepeatDelay, loopTransition, loopRepea
30450
30571
  return;
30451
30572
  await animateValues();
30452
30573
  await delay2(loopRepeatDelay ?? 0);
30453
- await animateLoop();
30574
+ void animateLoop();
30454
30575
  }, [animateValues, delay2, loopEffectEnabled, loopRepeatDelay,]);
30455
30576
  const start2 = useCallback(() => {
30456
30577
  if (shouldRunRef.current)
@@ -30502,15 +30623,26 @@ function useLoop({ loopEffectEnabled, loopRepeatDelay, loopTransition, loopRepea
30502
30623
  }, [start2, stop, loopPauseOffscreen, hasLoop,]);
30503
30624
  useEffect(() => {
30504
30625
  return () => stop();
30505
- }, []);
30626
+ }, [stop,]);
30627
+ const isIntersectingRef = useRef3(false);
30628
+ const stopAfterAnimationEnds = useCallback(async () => {
30629
+ if (!animationPromiseRef.current)
30630
+ return;
30631
+ await animationPromiseRef.current;
30632
+ if (isIntersectingRef.current)
30633
+ return;
30634
+ stop();
30635
+ }, [stop,]);
30506
30636
  const startAndStopBasedOnIntersection = useCallback((entry) => {
30507
30637
  if (entry.isIntersecting) {
30638
+ isIntersectingRef.current = true;
30508
30639
  start2();
30509
30640
  }
30510
30641
  else {
30511
- stop();
30642
+ isIntersectingRef.current = false;
30643
+ void stopAfterAnimationEnds();
30512
30644
  }
30513
- }, [start2, stop,]);
30645
+ }, [start2, stopAfterAnimationEnds,]);
30514
30646
  useSharedIntersectionObserver(ref, startAndStopBasedOnIntersection, {
30515
30647
  enabled: hasLoop && loopPauseOffscreen,
30516
30648
  });
@@ -30572,7 +30704,7 @@ function useParallax(options, ref, visibilityStyle) {
30572
30704
  };
30573
30705
  }
30574
30706
  function getTransition(value) {
30575
- if (isString(value) || !isObject(value))
30707
+ if (isString(value) || !isObject2(value))
30576
30708
  return void 0;
30577
30709
  return value == null ? void 0 : value.transition;
30578
30710
  }
@@ -30584,7 +30716,7 @@ function runEffectAnimation(target, effect, shouldReduceMotion, ref, appearId, i
30584
30716
  return resolve();
30585
30717
  const motionValue2 = effect.values[key7];
30586
30718
  motionValue2.stop();
30587
- let value = !isObject(target) ? defaultFXValues[key7] : (target == null ? void 0 : target[key7]) ?? defaultFXValues[key7];
30719
+ let value = !isObject2(target) ? defaultFXValues[key7] : (target == null ? void 0 : target[key7]) ?? defaultFXValues[key7];
30588
30720
  if (isMotionValue(value))
30589
30721
  value = value.get();
30590
30722
  if (!isNumber2(value))
@@ -30627,14 +30759,14 @@ function usePresenceAnimation({ initial: motionInitial, animate: motionAnimate,
30627
30759
  });
30628
30760
  const effect = useConstant2(() => {
30629
30761
  const base = initial ?? style2;
30630
- if (!isObject(base)) {
30762
+ if (!isObject2(base)) {
30631
30763
  return {
30632
30764
  values: makeFXValues(),
30633
30765
  };
30634
30766
  }
30635
30767
  const defaults = {};
30636
30768
  for (const key7 in base) {
30637
- const value = isObject(base) ? base[key7] : void 0;
30769
+ const value = isObject2(base) ? base[key7] : void 0;
30638
30770
  if (!isNumber2(value))
30639
30771
  continue;
30640
30772
  defaults[key7] = value;
@@ -31180,10 +31312,10 @@ var add2 = (values) => values.reduce((sum, value) => sum += value, 0);
31180
31312
  var multiply = (values) => values.reduce((sum, value) => sum = sum * value, 1);
31181
31313
  var reactRefObjectKey = 'current';
31182
31314
  function isReactRefObject(value) {
31183
- return isObject(value) && reactRefObjectKey in value;
31315
+ return isObject2(value) && reactRefObjectKey in value;
31184
31316
  }
31185
31317
  function addMotionValueStyle(style2, values) {
31186
- if (!style2 || !isObject(style2))
31318
+ if (!style2 || !isObject2(style2))
31187
31319
  return values;
31188
31320
  for (const key7 in style2) {
31189
31321
  const value = style2[key7];
@@ -31371,7 +31503,7 @@ var SynchronousSuspenseErrorBoundary = class extends Component2 {
31371
31503
  if (!isSuspense426Error(error))
31372
31504
  return;
31373
31505
  const componentStack = errorInfo == null ? void 0 : errorInfo.componentStack;
31374
- console.error('Caught an error in SynchronousSuspenseErrorBoundary:\n\n', error, '\n\nComponent stack:\n', componentStack, '\n\nThis error indicates a state update wasn\u2019t wrapped with startTransition. Some of the UI might flash as a result. If you are the author of this website, check recently added custom code, and if the issue persists, report it to the Framer team via https://www.framer.community/.');
31506
+ console.error('Caught an error in SynchronousSuspenseErrorBoundary:\n\n', error, '\n\nComponent stack:\n', componentStack, '\n\nThis error indicates a state update wasn\u2019t wrapped with startTransition. Some of the UI might flash as a result. If you are the author of this website, check recently added custom code, and if the issue persists, report it to the Framer team via https://www.framer.com/contact/.');
31375
31507
  const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : void 0;
31376
31508
  sendTrackingEvent('published_site_load_recoverable_error', {
31377
31509
  message: String(error),
@@ -31445,7 +31577,7 @@ function logError(...args) {
31445
31577
  function shouldEnableCodeBoundaries() {
31446
31578
  return RenderTarget.current() !== RenderTarget.canvas;
31447
31579
  }
31448
- function CodeComponentBoundary({ errorMessage, fallback, children, }) {
31580
+ function CodeComponentBoundary({ getErrorMessage, fallback, children, }) {
31449
31581
  if (!shouldEnableCodeBoundaries()) {
31450
31582
  return children;
31451
31583
  }
@@ -31453,7 +31585,7 @@ function CodeComponentBoundary({ errorMessage, fallback, children, }) {
31453
31585
  fallback,
31454
31586
  children: /* @__PURE__ */ jsx3(ClientSideErrorBoundary, {
31455
31587
  fallback,
31456
- errorMessage,
31588
+ getErrorMessage,
31457
31589
  children,
31458
31590
  }),
31459
31591
  });
@@ -31471,7 +31603,7 @@ var ClientSideErrorBoundary = class extends Component2 {
31471
31603
  };
31472
31604
  }
31473
31605
  componentDidCatch(error, errorInfo) {
31474
- logError(this.props.errorMessage, errorInfo == null ? void 0 : errorInfo.componentStack);
31606
+ logError(this.props.getErrorMessage(), errorInfo == null ? void 0 : errorInfo.componentStack);
31475
31607
  collectErrorToAnalytics(error, errorInfo);
31476
31608
  }
31477
31609
  render() {
@@ -31607,7 +31739,7 @@ function useMaybeWrapComponentWithCodeBoundary(children, scopeId, nodeId, isAuth
31607
31739
  const shouldWrapWithBoundary = shouldWrapComponentWithBoundary(scopeId, nearestExternalComponent == null ? void 0 : nearestExternalComponent.scopeId, nearestExternalComponent == null ? void 0 : nearestExternalComponent.level, isAuthoredByUser ?? false, isModuleExternal ?? false, inComponentSlot ?? false);
31608
31740
  if (shouldWrapWithBoundary) {
31609
31741
  children = /* @__PURE__ */ jsx3(CodeComponentBoundary, {
31610
- errorMessage: getErrorMessageForComponent(scopeId, nodeId),
31742
+ getErrorMessage: getErrorMessageForComponent.bind(null, scopeId, nodeId),
31611
31743
  fallback: null,
31612
31744
  children,
31613
31745
  });
@@ -32440,7 +32572,7 @@ function useDynamicMotionOrigin(initialPlacement, alignment) {
32440
32572
  function childrenWithOrigin(child, { x, y, }) {
32441
32573
  if (!child || !isReactChild(child) || !isReactElement(child))
32442
32574
  return null;
32443
- if (!isObject(child.props.style) && !isUndefined(child.props.style))
32575
+ if (!isObject2(child.props.style) && !isUndefined(child.props.style))
32444
32576
  return null;
32445
32577
  const style2 = {
32446
32578
  ...child.props.style,
@@ -32589,6 +32721,14 @@ function Floating({ alignment, placement, safeArea, offsetX, offsetY, anchorRef,
32589
32721
  ],
32590
32722
  }), getPortalContainer(portalSelector, inComponent));
32591
32723
  }
32724
+ var Instance = /* @__PURE__ */ React4.forwardRef(function Instance2({ Component: Component17, ...props }, ref) {
32725
+ return Component17
32726
+ ? /* @__PURE__ */ jsx3(Component17, {
32727
+ ...props,
32728
+ ref,
32729
+ })
32730
+ : null;
32731
+ });
32592
32732
  var GracefullyDegradingErrorBoundary = class extends Component2 {
32593
32733
  constructor() {
32594
32734
  super(...arguments);
@@ -32597,7 +32737,7 @@ var GracefullyDegradingErrorBoundary = class extends Component2 {
32597
32737
  });
32598
32738
  __publicField(this, 'message', 'Made UI non-interactive due to an error');
32599
32739
  __publicField(this, 'messageFatal', 'Fatal error');
32600
- __publicField(this, 'messageReport', 'If you are the author of this website, please report this issue to the Framer team via https://www.framer.community/');
32740
+ __publicField(this, 'messageReport', 'If you are the author of this website, please report this issue to the Framer team via https://www.framer.com/contact/');
32601
32741
  }
32602
32742
  static getDerivedStateFromError(error) {
32603
32743
  return {
@@ -32613,7 +32753,7 @@ var GracefullyDegradingErrorBoundary = class extends Component2 {
32613
32753
 
32614
32754
  `, error);
32615
32755
  const sampleRate = Math.random();
32616
- if (sampleRate > 0.25)
32756
+ if (sampleRate > 0.5)
32617
32757
  return;
32618
32758
  const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : null;
32619
32759
  sendTrackingEvent('published_site_load_error', {
@@ -33948,7 +34088,7 @@ async function submitForm(action, data2, projectHash) {
33948
34088
  }
33949
34089
  }
33950
34090
  function responseHasError(response) {
33951
- return typeof response === 'object' && response !== null && 'error' in response && isObject(response.error) &&
34091
+ return typeof response === 'object' && response !== null && 'error' in response && isObject2(response.error) &&
33952
34092
  'message' in response.error && typeof response.error.message === 'string';
33953
34093
  }
33954
34094
  function isSamePage(a, b) {
@@ -34136,7 +34276,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34136
34276
  if (isString(localeOrLocaleId)) {
34137
34277
  localeId = localeOrLocaleId;
34138
34278
  }
34139
- else if (isObject(localeOrLocaleId)) {
34279
+ else if (isObject2(localeOrLocaleId)) {
34140
34280
  localeId = localeOrLocaleId.id;
34141
34281
  }
34142
34282
  const defaultLocale = locales.find(({ id: id3, }) => id3 === defaultLocaleId);
@@ -34160,7 +34300,6 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34160
34300
  });
34161
34301
  if (!localeResult)
34162
34302
  return;
34163
- const currentPathVariables2 = currentPathVariablesRef.current;
34164
34303
  const currentStatePaginationInfo = isHistoryState(window.history.state) ? window.history.state.paginationInfo : void 0;
34165
34304
  const currentPath = localeResult.path;
34166
34305
  currentPathVariablesRef.current = localeResult.pathVariables;
@@ -34170,7 +34309,7 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
34170
34309
  return;
34171
34310
  return pushHistoryState({
34172
34311
  routeId: currentRouteId2,
34173
- pathVariables: currentPathVariables2,
34312
+ pathVariables: localeResult.pathVariables,
34174
34313
  localeId: nextLocale.id,
34175
34314
  paginationInfo: currentStatePaginationInfo,
34176
34315
  }, currentPath, ignorePushStateWrapper);
@@ -34850,14 +34989,13 @@ _subscribers2 = /* @__PURE__ */ new WeakMap();
34850
34989
  _results = /* @__PURE__ */ new WeakMap();
34851
34990
  _SSRResults = /* @__PURE__ */ new WeakMap();
34852
34991
  _onlyPrefetched = /* @__PURE__ */ new WeakMap();
34853
- function useFetchRequests(requests, disabled) {
34992
+ function useFetchRequestsForChildren(requests, disabled, children) {
34854
34993
  const fetchClient = React2.useContext(FetchClientContext);
34855
34994
  if (!fetchClient) {
34856
34995
  throw new Error('useFetchRequest must be used within a FetchClientProvider');
34857
34996
  }
34858
34997
  const isRestoringCache = React2.useContext(IsRestoringCacheContext);
34859
34998
  const [observer2,] = React2.useState(() => new RequestsObserver(fetchClient, requests));
34860
- const [result, setResult,] = React2.useState(() => observer2.getServerResults());
34861
34999
  React2.useLayoutEffect(() => {
34862
35000
  if (disabled)
34863
35001
  return;
@@ -34866,19 +35004,16 @@ function useFetchRequests(requests, disabled) {
34866
35004
  });
34867
35005
  }, [requests, observer2, disabled,]);
34868
35006
  React2.useEffect(() => {
35007
+ return () => observer2.unmount();
35008
+ }, [observer2,]);
35009
+ const subscribe = React2.useCallback((onChange) => {
34869
35010
  if (isRestoringCache || disabled)
34870
- return;
34871
- const unsubscribe = observer2.subscribe(() => {
34872
- React2.startTransition(() => {
34873
- setResult(observer2.getResults());
34874
- });
34875
- });
34876
- return () => {
34877
- unsubscribe();
34878
- observer2.unmount();
34879
- };
34880
- }, [observer2, disabled, isRestoringCache,]);
34881
- return result;
35011
+ return noop4;
35012
+ return observer2.subscribe(onChange);
35013
+ }, [disabled, observer2, isRestoringCache,]);
35014
+ const synchronousData = React2.useSyncExternalStore(subscribe, observer2.getResults, observer2.getServerResults);
35015
+ const deferredData = React2.useDeferredValue(synchronousData);
35016
+ return useMemoOne(() => children(deferredData.data, deferredData.status), [deferredData, children,]);
34882
35017
  }
34883
35018
  function usePrefetch() {
34884
35019
  const fetchClient = React2.useContext(FetchClientContext);
@@ -35018,8 +35153,7 @@ var ResolveLinks = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwar
35018
35153
  }));
35019
35154
  var Fetcher = /* @__PURE__ */ React2.forwardRef(function Fetcher2({ requests, disabled, children, ...rest }, ref) {
35020
35155
  const cloneWithPropsAndRef = useCloneChildrenWithPropsAndRef(ref);
35021
- const { data: data2, status, } = useFetchRequests(requests, disabled);
35022
- const childrenWithValues = children(data2, status);
35156
+ const childrenWithValues = useFetchRequestsForChildren(requests, disabled, children);
35023
35157
  return cloneWithPropsAndRef(childrenWithValues, rest);
35024
35158
  });
35025
35159
  var callEach = (...fns) => fns.forEach((fn) => fn && fn());
@@ -35051,19 +35185,19 @@ function isAnyCollection(value) {
35051
35185
  return isAnyLegacyCollection(value) || isAnyDatabaseCollection(value);
35052
35186
  }
35053
35187
  function isLegacyCollection(value) {
35054
- return isArray(value) && value.every(isObject);
35188
+ return isArray(value) && value.every(isObject2);
35055
35189
  }
35056
35190
  function isLegacyLocalizedCollection(value) {
35057
- return isObject(value) && isFunction(value.read) && isFunction(value.preload);
35191
+ return isObject2(value) && isFunction(value.read) && isFunction(value.preload);
35058
35192
  }
35059
35193
  function isAnyLegacyCollection(value) {
35060
35194
  return isLegacyCollection(value) || isLegacyLocalizedCollection(value);
35061
35195
  }
35062
35196
  function isDatabaseCollection(value) {
35063
- return isObject(value) && isObject(value.schema);
35197
+ return isObject2(value) && isObject2(value.schema);
35064
35198
  }
35065
35199
  function isLocalizedDatabaseCollection(value) {
35066
- return isObject(value) && isObject(value.collectionByLocaleId);
35200
+ return isObject2(value) && isObject2(value.collectionByLocaleId);
35067
35201
  }
35068
35202
  function isAnyDatabaseCollection(value) {
35069
35203
  return isDatabaseCollection(value) || isLocalizedDatabaseCollection(value);
@@ -35943,7 +36077,7 @@ function Hash(value) {
35943
36077
  return value;
35944
36078
  }
35945
36079
  function isHashable(value) {
35946
- return isObject(value) && isFunction(value.getHash);
36080
+ return isObject2(value) && isFunction(value.getHash);
35947
36081
  }
35948
36082
  function calculateHash(name, ...values) {
35949
36083
  const hashes = values.map((value) => {
@@ -39454,7 +39588,7 @@ function getCollectionId(collection) {
39454
39588
  return id3;
39455
39589
  }
39456
39590
  function replaceCollection(_, value) {
39457
- if (isObject(value) && value.type === 'Collection' && isAnyCollection(value.data)) {
39591
+ if (isObject2(value) && value.type === 'Collection' && isAnyCollection(value.data)) {
39458
39592
  return getCollectionId(value.data);
39459
39593
  }
39460
39594
  return value;
@@ -39692,7 +39826,7 @@ function useDataRecord(collection, variables) {
39692
39826
  const pageRecord = collection.find((record2) => {
39693
39827
  return Object.entries(variables).every(([key7, value,]) => {
39694
39828
  const recordValue = record2[key7];
39695
- if (value === void 0 || recordValue === void 0 || isObject(value) || isObject(recordValue)) {
39829
+ if (value === void 0 || recordValue === void 0 || isObject2(value) || isObject2(recordValue)) {
39696
39830
  return false;
39697
39831
  }
39698
39832
  return String(value) === String(recordValue);
@@ -39737,7 +39871,7 @@ function useSiteRefs() {
39737
39871
  }, [path,]);
39738
39872
  }
39739
39873
  function isFramerGamepadKeydownData(value) {
39740
- return isObject(value) && value.mapping !== void 0;
39874
+ return isObject2(value) && value.mapping !== void 0;
39741
39875
  }
39742
39876
  function gamepadInputsHaveChanged(previous, current2) {
39743
39877
  if (previous.length !== current2.length)
@@ -39994,14 +40128,9 @@ function useOnAppear(callback) {
39994
40128
  default: callback,
39995
40129
  });
39996
40130
  }
39997
- async function setOverflow(blockDocumentScrolling, show, yieldBefore = true) {
40131
+ function setOverflow(blockDocumentScrolling, show) {
39998
40132
  if (blockDocumentScrolling === false)
39999
40133
  return;
40000
- if (yieldBefore) {
40001
- await yieldToMain({
40002
- continueAfter: 'paint',
40003
- });
40004
- }
40005
40134
  frame.render(() => {
40006
40135
  const htmlStyle = document.documentElement.style;
40007
40136
  if (show) {
@@ -40014,18 +40143,27 @@ async function setOverflow(blockDocumentScrolling, show, yieldBefore = true) {
40014
40143
  }
40015
40144
  function useOverlayState({ blockDocumentScrolling = true, } = {}) {
40016
40145
  const [showOverlay, setShowOverlay,] = React4.useState(false);
40017
- const callback = React4.useCallback((show) => {
40018
- setShowOverlay(show);
40019
- void setOverflow(blockDocumentScrolling, show);
40146
+ const callback = React4.useCallback(async (show) => {
40147
+ await yieldToMain({
40148
+ priority: 'user-blocking',
40149
+ continueAfter: 'paint',
40150
+ });
40151
+ startTransition2(() => setShowOverlay(show));
40152
+ setOverflow(blockDocumentScrolling, show);
40020
40153
  }, [blockDocumentScrolling,]);
40021
40154
  React4.useEffect(() => () => {
40022
- void setOverflow(blockDocumentScrolling, false, false);
40155
+ void yieldToMain({
40156
+ priority: 'user-blocking',
40157
+ continueAfter: 'paint',
40158
+ }).then(() => {
40159
+ setOverflow(blockDocumentScrolling, false);
40160
+ });
40023
40161
  }, [blockDocumentScrolling,]);
40024
40162
  return [showOverlay, callback,];
40025
40163
  }
40026
40164
  var key4 = 'page';
40027
40165
  function isRoute(route) {
40028
- return isObject(route) && key4 in route && route.page !== void 0;
40166
+ return isObject2(route) && key4 in route && route.page !== void 0;
40029
40167
  }
40030
40168
  async function componentForRoute(route) {
40031
40169
  if (!isRoute(route))
@@ -40043,7 +40181,7 @@ async function componentForRoute(route) {
40043
40181
  }
40044
40182
  var preloadKey2 = 'preload';
40045
40183
  function withPreload(component) {
40046
- return !!component && isObject(component) && preloadKey2 in component;
40184
+ return !!component && isObject2(component) && preloadKey2 in component;
40047
40185
  }
40048
40186
  function usePrototypeNavigate({ preload, } = {}) {
40049
40187
  const navigation = useNavigation();
@@ -40161,7 +40299,7 @@ function getWhereExpressionFromPathVariables(pathVariables, collection) {
40161
40299
  const entries = Object.entries(pathVariables ?? {}).filter(([, value,]) => {
40162
40300
  if (isUndefined(value))
40163
40301
  return false;
40164
- if (isObject(value))
40302
+ if (isObject2(value))
40165
40303
  return false;
40166
40304
  return true;
40167
40305
  });
@@ -40197,65 +40335,45 @@ function getWhereExpressionFromPathVariables(pathVariables, collection) {
40197
40335
  }));
40198
40336
  }
40199
40337
  function useLoadMorePagination(totalSize, pageSize, hash2, paginateWithSuspendedLoadingState = false) {
40338
+ var _a, _b, _c, _d;
40339
+ const [isPending, startLoadingTransition,] = useTransition();
40200
40340
  const totalPages = Math.ceil(totalSize / pageSize);
40201
- const [paginationInfo, setPaginationInfo,] = useState(() => {
40202
- var _a, _b, _c, _d;
40203
- const currentPage = ((_d = (_c = (_b = (_a = globalThis == null ? void 0 : globalThis.history) == null ? void 0 : _a.state) == null
40204
- ? void 0
40205
- : _b.paginationInfo) == null
40206
- ? void 0
40207
- : _c[hash2]) == null
40208
- ? void 0
40209
- : _d.currentPage) ?? 1;
40341
+ const [currentPage, setCurrentPage,] = useState(((_d = (_c = (_b = (_a = globalThis == null ? void 0 : globalThis.history) == null ? void 0 : _a.state) == null
40342
+ ? void 0
40343
+ : _b.paginationInfo) == null
40344
+ ? void 0
40345
+ : _c[hash2]) == null
40346
+ ? void 0
40347
+ : _d.currentPage) ?? 1);
40348
+ const paginationInfo = useMemo2(() => {
40210
40349
  return {
40211
40350
  currentPage,
40212
40351
  totalPages,
40213
- isLoading: false,
40352
+ isLoading: isPending,
40214
40353
  };
40215
- });
40216
- useEffect(() => {
40217
- startTransition2(() => {
40218
- setPaginationInfo((current2) => {
40219
- if (current2.totalPages === totalPages)
40220
- return current2;
40221
- return {
40222
- ...current2,
40223
- totalPages,
40224
- };
40225
- });
40226
- });
40227
- }, [totalPages,]);
40354
+ }, [currentPage, totalPages, isPending,]);
40228
40355
  useEffect(() => {
40229
40356
  pushLoadMoreHistory(hash2, paginationInfo);
40230
40357
  }, [hash2, paginationInfo,]);
40231
40358
  const onCanvas = useIsOnFramerCanvas();
40232
- const loadMore = useCallback(() => {
40359
+ const loadMore = useCallback(async () => {
40233
40360
  if (onCanvas)
40234
40361
  return;
40235
- if (paginationInfo.currentPage >= paginationInfo.totalPages)
40362
+ if (currentPage >= totalPages)
40236
40363
  return;
40237
- if (!paginateWithSuspendedLoadingState) {
40238
- startTransition2(() => {
40239
- setPaginationInfo((info) => ({
40240
- ...info,
40241
- currentPage: Math.min(info.currentPage + 1, info.totalPages),
40242
- isLoading: false,
40243
- }));
40244
- });
40245
- return;
40246
- }
40247
- setPaginationInfo((info) => ({
40248
- ...info,
40249
- isLoading: true,
40250
- }));
40251
- requestAnimationFrame(() => {
40252
- setPaginationInfo((info) => ({
40253
- ...info,
40254
- currentPage: Math.min(info.currentPage + 1, info.totalPages),
40255
- isLoading: false,
40256
- }));
40364
+ await yieldToMain({
40365
+ priority: 'user-blocking',
40366
+ continueAfter: 'paint',
40257
40367
  });
40258
- }, [onCanvas, paginationInfo.currentPage, paginationInfo.totalPages, paginateWithSuspendedLoadingState,]);
40368
+ const renderNextPage = (startTransition14) => {
40369
+ startTransition14(() => {
40370
+ setCurrentPage((_currentPage) => Math.min(_currentPage + 1, totalPages));
40371
+ });
40372
+ };
40373
+ if (!paginateWithSuspendedLoadingState)
40374
+ return renderNextPage(startTransition2);
40375
+ return renderNextPage(startLoadingTransition);
40376
+ }, [currentPage, totalPages, paginateWithSuspendedLoadingState,]);
40259
40377
  return {
40260
40378
  paginationInfo,
40261
40379
  loadMore,
@@ -40374,15 +40492,16 @@ function useRunCallbackIfPageIsVisible() {
40374
40492
  }, [clean,]);
40375
40493
  }
40376
40494
  function useRunCallbackIfElementIsInView() {
40377
- const observerRef = useRef3(null);
40495
+ const observerRefCleanup = useRef3();
40378
40496
  const isInViewRef = useRef3(false);
40379
40497
  const callbackRef = useRef3();
40498
+ const observers2 = useContext(SharedIntersectionObserverContext);
40380
40499
  useEffect(() => {
40381
40500
  return () => {
40382
40501
  var _a;
40383
- (_a = observerRef.current) == null ? void 0 : _a.disconnect();
40502
+ (_a = observerRefCleanup.current) == null ? void 0 : _a.call(observerRefCleanup);
40384
40503
  callbackRef.current = void 0;
40385
- observerRef.current = null;
40504
+ observerRefCleanup.current = void 0;
40386
40505
  };
40387
40506
  }, []);
40388
40507
  return useCallback((callback, ref) => {
@@ -40391,23 +40510,24 @@ function useRunCallbackIfElementIsInView() {
40391
40510
  return;
40392
40511
  }
40393
40512
  callbackRef.current = callback;
40394
- if (observerRef.current)
40513
+ if (observerRefCleanup.current)
40395
40514
  return;
40396
- const observer2 = new IntersectionObserver((entries) => {
40397
- var _a;
40398
- let isIntersecting = false;
40399
- for (let i = 0; i < entries.length; ++i) {
40400
- const entry = entries[i];
40401
- isIntersecting = entry.isIntersecting;
40402
- }
40403
- isInViewRef.current = isIntersecting;
40404
- if (!isIntersecting)
40515
+ let queuedMicrotask = false;
40516
+ const observerCallback = (entry) => {
40517
+ isInViewRef.current = entry.isIntersecting;
40518
+ if (queuedMicrotask)
40405
40519
  return;
40406
- (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef);
40407
- });
40408
- observerRef.current = observer2;
40409
- observer2.observe(ref.current);
40410
- }, []);
40520
+ queuedMicrotask = true;
40521
+ queueMicrotask(() => {
40522
+ var _a;
40523
+ if (!isInViewRef.current)
40524
+ return;
40525
+ queuedMicrotask = false;
40526
+ (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef);
40527
+ });
40528
+ };
40529
+ observerRefCleanup.current = observeElement(observers2, 'undefined', ref.current, null, observerCallback);
40530
+ }, [observers2,]);
40411
40531
  }
40412
40532
  function useUpdateIfVisible(ref) {
40413
40533
  const runUpdateIfPageIsVisible = useRunCallbackIfPageIsVisible();
@@ -40425,20 +40545,27 @@ var globalWaitingForClickPromise;
40425
40545
  var globalWaitingForClickResolve;
40426
40546
  async function getPromiseWithFallback() {
40427
40547
  return new Promise((resolve) => {
40428
- const resolveFn = () => {
40548
+ let resolveFn = resolve;
40549
+ setTimeout(() => {
40550
+ if (!resolveFn)
40551
+ return;
40552
+ performance.mark('wait-for-click-fallback');
40553
+ resolveFn();
40554
+ }, 150);
40555
+ globalWaitingForClickResolve = () => {
40429
40556
  resolve();
40430
- clearTimeout(timeout);
40557
+ resolveFn = void 0;
40431
40558
  };
40432
- const timeout = setTimeout(resolveFn, 150);
40433
- globalWaitingForClickResolve = resolveFn;
40434
40559
  });
40435
40560
  }
40436
40561
  function globalWaitForClickListener(event) {
40437
40562
  if (event.button === 0) {
40563
+ performance.mark('pointerdown-listener');
40438
40564
  globalWaitingForClickPromise = getPromiseWithFallback();
40439
40565
  }
40440
40566
  }
40441
40567
  function globalClickReceivedListener() {
40568
+ performance.mark('click-received-listener');
40442
40569
  globalWaitingForClickPromise = void 0;
40443
40570
  globalWaitingForClickResolve == null ? void 0 : globalWaitingForClickResolve();
40444
40571
  globalWaitingForClickResolve = void 0;
@@ -40494,13 +40621,17 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
40494
40621
  internalState.current.gestureVariant = nextGesture;
40495
40622
  const yieldOnTap = yieldOnTapFeatureOn && internalState.current.isPressedHasUpdated;
40496
40623
  if (yieldOnTap && globalWaitingForClickPromise) {
40624
+ performance.mark('wait-for-tap-start');
40497
40625
  await globalWaitingForClickPromise;
40626
+ performance.measure('wait-for-tap', 'wait-for-tap-start');
40498
40627
  }
40499
40628
  if (yieldOnTap) {
40629
+ performance.mark('yield-on-tap-start');
40500
40630
  await yieldToMain({
40501
40631
  priority: 'user-blocking',
40502
40632
  continueAfter: 'paint',
40503
40633
  });
40634
+ performance.measure('yield-on-tap', 'yield-on-tap-start');
40504
40635
  }
40505
40636
  const { isHovered: isHovered2, isPressed: isPressed2, isHoveredHasUpdated, isPressedHasUpdated, } = internalState.current;
40506
40637
  if (isHovered2 || isHoveredHasUpdated || isPressed2 || isPressedHasUpdated) {
@@ -40625,7 +40756,7 @@ function withCodeBoundaryForOverrides(Component17, { scopeId, nodeId, override,
40625
40756
  if (shouldWrapWithBoundary) {
40626
40757
  if (appliedOverride.status === 'success') {
40627
40758
  return /* @__PURE__ */ jsx3(CodeComponentBoundary, {
40628
- errorMessage: getErrorMessageForOverride(scopeId, nodeId),
40759
+ getErrorMessage: getErrorMessageForOverride.bind(null, scopeId, nodeId),
40629
40760
  fallback: /* @__PURE__ */ jsx3(Component17, {
40630
40761
  ...props,
40631
40762
  ref,
@@ -40852,7 +40983,7 @@ var withVariantAppearEffect = (Component17) => React4.forwardRef((props, forward
40852
40983
  });
40853
40984
  });
40854
40985
  }, [animateOnce, threshold, targets, props.variant, scrollDirection, exitTarget,]);
40855
- useScrollDirectionChange(scrollDirection, setVariant, {
40986
+ useScrollDirectionChange(scrollDirection, (variant) => React4.startTransition(() => setVariant(variant)), {
40856
40987
  enabled: variantAppearEffectEnabled,
40857
40988
  repeat: !animateOnce,
40858
40989
  });
@@ -40861,7 +40992,7 @@ var withVariantAppearEffect = (Component17) => React4.forwardRef((props, forward
40861
40992
  return;
40862
40993
  const useObscuredVariant = !options.targets && !options.scrollDirection;
40863
40994
  const target = useObscuredVariant ? options.obscuredVariantId : void 0;
40864
- React4.startTransition(() => setVariant(target));
40995
+ startTransition2(() => setVariant(target));
40865
40996
  });
40866
40997
  if (!('variantAppearEffectEnabled' in options) || variantAppearEffectEnabled === true) {
40867
40998
  return /* @__PURE__ */ jsx3(Component17, {
@@ -42697,10 +42828,10 @@ function loadVariationAxes(source) {
42697
42828
  }
42698
42829
  }
42699
42830
  function isValidVariationAxesData(data2) {
42700
- return isObject(data2) && Object.values(data2).every(isValidVariationAxes);
42831
+ return isObject2(data2) && Object.values(data2).every(isValidVariationAxes);
42701
42832
  }
42702
42833
  function isVariationAxis2(data2) {
42703
- return isObject(data2) && isString(data2.tag);
42834
+ return isObject2(data2) && isString(data2.tag);
42704
42835
  }
42705
42836
  function isValidVariationAxes(data2) {
42706
42837
  return Array.isArray(data2) && data2.every(isVariationAxis2);
@@ -42709,10 +42840,13 @@ var FontStore = class {
42709
42840
  constructor() {
42710
42841
  __publicField(this, 'enabled', false);
42711
42842
  __publicField(this, 'bySelector', /* @__PURE__ */ new Map());
42843
+ __publicField(this, 'loadedSelectors', /* @__PURE__ */ new Set());
42712
42844
  __publicField(this, 'getGoogleFontsListPromise');
42713
42845
  __publicField(this, 'getFontshareFontsListPromise');
42714
42846
  __publicField(this, 'getBuiltInFontsListPromise');
42715
- __publicField(this, 'loadedSelectors', /* @__PURE__ */ new Set());
42847
+ __publicField(this, 'customFontsImportPromise', new Promise((resolve) => {
42848
+ this.resolveCustomFontsImportPromise = resolve;
42849
+ }));
42716
42850
  __publicField(this, 'local');
42717
42851
  __publicField(this, 'google');
42718
42852
  __publicField(this, 'fontshare');
@@ -42789,9 +42923,13 @@ var FontStore = class {
42789
42923
  this.bySelector.delete(key7);
42790
42924
  }
42791
42925
  });
42792
- for (const font of this.custom.importFonts(assets)) {
42926
+ const importedFonts = this.custom.importFonts(assets);
42927
+ for (const font of importedFonts) {
42793
42928
  this.addFont(font);
42794
42929
  }
42930
+ if (importedFonts.length > 0) {
42931
+ this.resolveCustomFontsImportPromise();
42932
+ }
42795
42933
  }
42796
42934
  getFontFamily(info) {
42797
42935
  const fontFamily = this[info.source].getFontFamilyByName(info.name);
@@ -42947,6 +43085,12 @@ var FontStore = class {
42947
43085
  warnOnce2('Failed to load built-in fonts:', error);
42948
43086
  }));
42949
43087
  }
43088
+ const shouldImportCustomFonts = selectors.some((selector) => selector.startsWith(customFontSelectorPrefix));
43089
+ if (shouldImportCustomFonts) {
43090
+ importPromises.push(this.customFontsImportPromise.catch((error) => {
43091
+ warnOnce2('Failed to load custom fonts:', error);
43092
+ }));
43093
+ }
42950
43094
  if (importPromises.length > 0) {
42951
43095
  await Promise.all(importPromises);
42952
43096
  }
@@ -43221,10 +43365,9 @@ var PlainTextInput = /* @__PURE__ */ forwardRef(function FormPlainTextInput(prop
43221
43365
  className: cx(textInputWrapperClassName, inputWrapperClassName, className2),
43222
43366
  ...rest,
43223
43367
  children: type === 'textarea'
43224
- ? /* @__PURE__ */ createElement(motion.textarea, {
43368
+ ? /* @__PURE__ */ jsx3(motion.textarea, {
43225
43369
  ...dataProps,
43226
43370
  ...eventHandlers,
43227
- key: defaultValue,
43228
43371
  required,
43229
43372
  autoFocus,
43230
43373
  name: inputName,
@@ -43232,11 +43375,10 @@ var PlainTextInput = /* @__PURE__ */ forwardRef(function FormPlainTextInput(prop
43232
43375
  className: inputClassName,
43233
43376
  defaultValue,
43234
43377
  maxLength,
43235
- })
43236
- : /* @__PURE__ */ createElement(motion.input, {
43378
+ }, defaultValue)
43379
+ : /* @__PURE__ */ jsx3(motion.input, {
43237
43380
  ...dataProps,
43238
43381
  ...eventHandlers,
43239
- key: defaultValue,
43240
43382
  type,
43241
43383
  required,
43242
43384
  autoFocus,
@@ -43248,7 +43390,7 @@ var PlainTextInput = /* @__PURE__ */ forwardRef(function FormPlainTextInput(prop
43248
43390
  max,
43249
43391
  step: step2,
43250
43392
  maxLength,
43251
- }),
43393
+ }, defaultValue),
43252
43394
  });
43253
43395
  });
43254
43396
  var iconSize2 = 16;
@@ -44498,7 +44640,7 @@ function extractTextFromReactNode(node) {
44498
44640
  var RichText2 = /* @__PURE__ */ forwardRef(function RichText3({ children, html, htmlFromDesign, ...props }, ref) {
44499
44641
  const content = html || children || htmlFromDesign;
44500
44642
  if (isString(content)) {
44501
- if (!props.stylesPresetsClassName && isObject(props.stylesPresetsClassNames)) {
44643
+ if (!props.stylesPresetsClassName && isObject2(props.stylesPresetsClassNames)) {
44502
44644
  props.stylesPresetsClassName = Object.values(props.stylesPresetsClassNames).join(' ');
44503
44645
  }
44504
44646
  const contentProp = {
@@ -46536,7 +46678,7 @@ var VectorGroup = /* @__PURE__ */ (() => {
46536
46678
  })();
46537
46679
  var key6 = 'calculatedPaths';
46538
46680
  function withShape(target) {
46539
- if (!isObject(target))
46681
+ if (!isObject2(target))
46540
46682
  return false;
46541
46683
  return key6 in target;
46542
46684
  }
@@ -46774,7 +46916,7 @@ function inspect(item, max, l) {
46774
46916
  if (item === void 0) {
46775
46917
  return 'undefined';
46776
46918
  }
46777
- if (isObject(item) && isFunction(item.toInspect)) {
46919
+ if (isObject2(item) && isFunction(item.toInspect)) {
46778
46920
  return item.toInspect();
46779
46921
  }
46780
46922
  if (isString(item)) {
@@ -46787,7 +46929,7 @@ function inspect(item, max, l) {
46787
46929
  let code = item.toString().slice('function '.length).replace(/\n/gu, '').replace(/\s+/gu, ' ');
46788
46930
  const limit = 50;
46789
46931
  if (code.length > limit && l > 0) {
46790
- code = `${code.slice(0, +limit + 1 || void 0).trim()}\u2026 }`;
46932
+ code = `${code.slice(0, limit + 1).trim()}\u2026 }`;
46791
46933
  }
46792
46934
  return `<Function ${code}>`;
46793
46935
  }
@@ -46797,7 +46939,7 @@ function inspect(item, max, l) {
46797
46939
  }
46798
46940
  return `[${item.map((i) => inspect(i, max, (l || 0) + 1)).join(', ')}]`;
46799
46941
  }
46800
- if (isObject(item)) {
46942
+ if (isObject2(item)) {
46801
46943
  let objectInfo;
46802
46944
  const objectType = inspectObjectType(item);
46803
46945
  if (/HTML\w+?Element/u.test(objectType)) {
@@ -46876,8 +47018,8 @@ var package_default = {
46876
47018
  '@types/react': '^18.2.67',
46877
47019
  '@types/react-dom': '^18.2.22',
46878
47020
  '@types/yargs': '^17.0.33',
46879
- '@typescript-eslint/eslint-plugin': '^8.29.1',
46880
- '@typescript-eslint/parser': '^8.29.1',
47021
+ '@typescript-eslint/eslint-plugin': '^8.32.1',
47022
+ '@typescript-eslint/parser': '^8.32.1',
46881
47023
  chalk: '^4.1.2',
46882
47024
  eslint: '^8.57.1',
46883
47025
  'eslint-plugin-framer-studio': 'workspace:*',
@@ -46893,7 +47035,7 @@ var package_default = {
46893
47035
  yargs: '^17.7.2',
46894
47036
  },
46895
47037
  peerDependencies: {
46896
- 'framer-motion': '12.11.4',
47038
+ 'framer-motion': '12.14.0',
46897
47039
  react: '^18.2.0',
46898
47040
  'react-dom': '^18.2.0',
46899
47041
  },
@@ -46911,7 +47053,7 @@ MotionValue.prototype.addChild = function ({ transformer = (v) => v, }) {
46911
47053
  if (false) {
46912
47054
  MainLoop2.start();
46913
47055
  }
46914
- export { _injectRuntime, acceleratedValues2 as acceleratedValues, activeAnimations, addActionControls, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, addUniqueItem, alpha, analyseComplexValue, AnchorLinkTarget, Animatable, animate2 as animate, animateMini, AnimatePresence, AnimateSharedLayout, animateValue, animateView, animateVisualElement, animationControls, animationMapKey, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, applyPxDefaults, AsyncMotionValueAnimation, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform2 as buildTransform, calcGeneratorDuration, calcLength, calculateRect, callEach, cancelFrame, cancelMicrotask, cancelSync, ChildrenCanSuspend, circIn, circInOut, circOut, clamp, clampRGB, collectMotionValues, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertOffsetToTimes, convertPropsToDeviceOptions, createBox, createData, createFramerPageLink, createGeneratorEasing, createRenderBatcher, createRendererMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, cubicBezierAsString, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, defaultEasing, defaultOffset, defaultTransformValue, defaultValueTypes, degrees, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, dimensionValueTypes, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, DOMKeyframesResolver, domMax, domMin, DragControls, Draggable, easeIn, easeInOut, easeOut, easingDefinitionToFunction, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, fillOffset, fillWildcards, filterProps, findDimensionValueType, findValueType, finiteNumber, FlatTree, Floating, flushKeyframeResolvers, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, frameSteps, FrameWithMotion, GamepadContext, GeneratedComponentContext, generateLinearEasing, getAnimatableNone2 as getAnimatableNone, getAnimationMap, getComponentSize, getComputedStyle2 as getComputedStyle, getDefaultValueType, getDevicePreset, getEasingForSegment, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getLoadingLazyAtYPosition, getMeasurableCodeComponentChildren, getMixer, getPropertyControls, getValueAsType, getValueTransition, getVariableValue, getWhereExpressionFromPathVariables, GracefullyDegradingErrorBoundary, gradientForShape, GroupAnimation, GroupAnimationWithThen, hasWarned, hex, hover, hsla, hslaToRgba, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inertia, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, InternalID, interpolate, invariant, inView, invisibleValues, isAnimatable2 as isAnimatable, isBezierDefinition, isBrowser, isCSSVariableName, isCSSVariableToken, isDesignDefinition, isDragActive, isDragging, isEasingArray, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isGenerator, isMotionComponent, isMotionValue2 as isMotionValue, isNodeOrChild, isNumericalString, isOfAnnotatedType, isOverride, isPrimaryPointer, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStaticRenderer, isStraightCurve, isValidMotionProp, isWaapiSupportedEasing, isZeroValueString, JSAnimation, KeyframeResolver, keyframes, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, mapEasingToNativeEasing, mapValue, markHydrationStart, maxGeneratorDuration, memo, memoize2 as memoize, microtask, millisecondsToSeconds, mirrorEasing, mix, mixArray, mixColor, mixComplex, mixImmediate, mixLinearColor, mixNumber, mixObject, mixVisibility, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, moveItem, namespace_exports as Reorder, NativeAnimation, NativeAnimationExtended, NativeAnimationWrapper, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, nestedLinksCollector, noop, NotFoundError, number, numberValueTypes, ObservableObject, observeTimeline, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseCSSVariable, parseFramerPageLink, parseValueFromTransform, patchRoutesForABTesting, pathDefaults, PathSegment, PathVariablesContext, percent, pipe, Point, Polygon, positionalKeys, preloadImage, PresenceContext, press, print, progress, progressPercentage, PropertyOverrides2 as PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryCache, QueryEngine, RadialGradient, readTransformValue, recordStats, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, removeItem, RenderTarget, resolveElements, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, rgba, rgbUnit, RichText2 as RichText, roundedNumber, roundedNumberString, roundWithOffset, safeCSSValue, scale, Scroll, scroll, scrollInfo, secondsToMilliseconds, setDragLock, setGlobalRenderEnvironment, setStyle, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, SmartComponentScopedContainer, spring, SpringAnimator, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, startWaapiAnimation, statsBuffer, steps, styleEffect, StyleSheetContext, SubscriptionManager, supportedWaapiEasing, supportsBrowserAnimation, supportsFlags, supportsLinearEasing, supportsPartialKeyframes, supportsScrollTimeline, SVG, SwitchLayoutGroupContext, sync, systemFontFamilyName, testValueType, Text2 as Text, throttle, time, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformPropOrder, transformProps, transformString2 as transformString, transformTemplate, transformValue, transformValueTypes, turnOffReactEventHandling, unwrapMotionComponent, useActiveTargetCallback, useActiveVariantCallback, useAddVariantProps, useAnimate, useAnimatedState, useAnimatedState as useDeprecatedAnimatedState, useAnimateMini, useAnimation, useAnimationControls, useAnimationFrame, useBreakpointVariants, useComponentViewport, useConstant2 as useConstant, useCurrentPathVariables, useCurrentRoute, useCurrentRouteId, useCustomCursors, useCycle, useDataRecord, useDomEvent, useDragControls, useDynamicRefs, useElementScroll, useForceUpdate, useGamepad, useHotkey, useHydratedBreakpointVariants, useInitialRouteComponent, useInstantLayoutTransition, useInstantTransition, useInvertedScale, useInvertedScale as useDeprecatedInvertedScale, useInView, useIsInCurrentNavigationTarget, useIsomorphicLayoutEffect, useIsOnFramerCanvas, useIsPresent, useIsStaticRenderer, useLoadMorePaginatedQuery, useLoadMorePagination, useLocale, useLocaleCode, useLocaleInfo, useLocalesForCurrentRoute, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePresenceData, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSiteRefs, useSpring, useSVGTemplate, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, velocityPerSecond, version, vh, ViewTransitionBuilder, VisualElement, visualElementStore, vw, warning, warnOnce, WillChangeMotionValue, WindowContext, withCodeBoundaryForOverrides, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, withOptimizedAppearEffect, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withV1StrokeFX, withVariantAppearEffect, withVariantFX, wrap, yieldToMain, };
47056
+ export { _injectRuntime, acceleratedValues2 as acceleratedValues, activeAnimations, addActionControls, addAttrValue, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, addStyleValue, addUniqueItem, alpha, analyseComplexValue, AnchorLinkTarget, Animatable, animate2 as animate, animateMini, AnimatePresence, AnimateSharedLayout, animateValue, animateView, animateVisualElement, animationControls, animationMapKey, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, applyPxDefaults, AsyncMotionValueAnimation, attachSpring, attrEffect, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform2 as buildTransform, calcGeneratorDuration, calcLength, calculateRect, callEach, cancelFrame, cancelMicrotask, cancelSync, ChildrenCanSuspend, circIn, circInOut, circOut, clamp, clampRGB, collectMotionValues, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertOffsetToTimes, convertPropsToDeviceOptions, createBox, createData, createFramerPageLink, createGeneratorEasing, createRenderBatcher, createRendererMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, cubicBezierAsString, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, defaultEasing, defaultOffset, defaultTransformValue, defaultValueTypes, degrees, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, dimensionValueTypes, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, DOMKeyframesResolver, domMax, domMin, DragControls, Draggable, easeIn, easeInOut, easeOut, easingDefinitionToFunction, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, fillOffset, fillWildcards, filterProps, findDimensionValueType, findValueType, finiteNumber, FlatTree, Floating, flushKeyframeResolvers, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, frameSteps, FrameWithMotion, GamepadContext, GeneratedComponentContext, generateLinearEasing, getAnimatableNone2 as getAnimatableNone, getAnimationMap, getComponentSize, getComputedStyle2 as getComputedStyle, getDefaultValueType, getDevicePreset, getEasingForSegment, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getLoadingLazyAtYPosition, getMeasurableCodeComponentChildren, getMixer, getPropertyControls, getValueAsType, getValueTransition, getVariableValue, getWhereExpressionFromPathVariables, GracefullyDegradingErrorBoundary, gradientForShape, GroupAnimation, GroupAnimationWithThen, hasWarned, hex, hover, hsla, hslaToRgba, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inertia, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, Instance, InternalID, interpolate, invariant, inView, invisibleValues, isAnimatable2 as isAnimatable, isBezierDefinition, isBrowser, isCSSVariableName, isCSSVariableToken, isDesignDefinition, isDragActive, isDragging, isEasingArray, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isGenerator, isHTMLElement, isMotionComponent, isMotionValue2 as isMotionValue, isNodeOrChild, isNumericalString, isObject, isOfAnnotatedType, isOverride, isPrimaryPointer, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStaticRenderer, isStraightCurve, isSVGElement, isSVGSVGElement, isValidMotionProp, isWaapiSupportedEasing, isZeroValueString, JSAnimation, KeyframeResolver, keyframes, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, mapEasingToNativeEasing, mapValue, markHydrationStart, maxGeneratorDuration, memo, memoize2 as memoize, microtask, millisecondsToSeconds, mirrorEasing, mix, mixArray, mixColor, mixComplex, mixImmediate, mixLinearColor, mixNumber, mixObject, mixVisibility, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, moveItem, namespace_exports as Reorder, NativeAnimation, NativeAnimationExtended, NativeAnimationWrapper, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, nestedLinksCollector, noop, NotFoundError, number, numberValueTypes, ObservableObject, observeTimeline, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseCSSVariable, parseFramerPageLink, parseValueFromTransform, patchRoutesForABTesting, pathDefaults, PathSegment, PathVariablesContext, percent, pipe, Point, Polygon, positionalKeys, preloadImage, PresenceContext, press, print, progress, progressPercentage, propEffect, PropertyOverrides2 as PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryCache, QueryEngine, RadialGradient, readTransformValue, recordStats, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, removeItem, RenderTarget, resolveElements, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, rgba, rgbUnit, RichText2 as RichText, roundedNumber, roundedNumberString, roundWithOffset, safeCSSValue, scale, Scroll, scroll, scrollInfo, secondsToMilliseconds, setDragLock, setGlobalRenderEnvironment, setStyle, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, SmartComponentScopedContainer, spring, SpringAnimator, springValue, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, startWaapiAnimation, statsBuffer, steps, styleEffect, StyleSheetContext, SubscriptionManager, supportedWaapiEasing, supportsBrowserAnimation, supportsFlags, supportsLinearEasing, supportsPartialKeyframes, supportsScrollTimeline, SVG, svgEffect, SwitchLayoutGroupContext, sync, systemFontFamilyName, testValueType, Text2 as Text, throttle, time, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformPropOrder, transformProps, transformString2 as transformString, transformTemplate, transformValue, transformValueTypes, turnOffReactEventHandling, unwrapMotionComponent, useActiveTargetCallback, useActiveVariantCallback, useAddVariantProps, useAnimate, useAnimatedState, useAnimatedState as useDeprecatedAnimatedState, useAnimateMini, useAnimation, useAnimationControls, useAnimationFrame, useBreakpointVariants, useComponentViewport, useConstant2 as useConstant, useCurrentPathVariables, useCurrentRoute, useCurrentRouteId, useCustomCursors, useCycle, useDataRecord, useDomEvent, useDragControls, useDynamicRefs, useElementScroll, useForceUpdate, useGamepad, useHotkey, useHydratedBreakpointVariants, useInitialRouteComponent, useInstantLayoutTransition, useInstantTransition, useInvertedScale, useInvertedScale as useDeprecatedInvertedScale, useInView, useIsInCurrentNavigationTarget, useIsomorphicLayoutEffect, useIsOnFramerCanvas, useIsPresent, useIsStaticRenderer, useLoadMorePaginatedQuery, useLoadMorePagination, useLocale, useLocaleCode, useLocaleInfo, useLocalesForCurrentRoute, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePresenceData, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSiteRefs, useSpring, useSVGTemplate, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, velocityPerSecond, version, vh, ViewTransitionBuilder, VisualElement, visualElementStore, vw, warning, warnOnce, WillChangeMotionValue, WindowContext, withCodeBoundaryForOverrides, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, withOptimizedAppearEffect, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withV1StrokeFX, withVariantAppearEffect, withVariantFX, wrap, yieldToMain, };
46915
47057
  //! Credit to Astro | MIT License
46916
47058
  /**
46917
47059
  * @license Emotion v11.0.0