unframer 2.11.2 → 2.12.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 (47) hide show
  1. package/dist/exporter.d.ts +3 -0
  2. package/dist/exporter.d.ts.map +1 -1
  3. package/dist/exporter.js +54 -30
  4. package/dist/exporter.js.map +1 -1
  5. package/dist/exporter.test.js +3 -0
  6. package/dist/exporter.test.js.map +1 -1
  7. package/dist/framer.d.ts.map +1 -1
  8. package/dist/framer.js +840 -488
  9. package/dist/framer.js.map +1 -1
  10. package/dist/index.d.ts +3 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +9 -5
  13. package/dist/index.js.map +1 -1
  14. package/dist/react.d.ts +15 -6
  15. package/dist/react.d.ts.map +1 -1
  16. package/dist/react.js +66 -3
  17. package/dist/react.js.map +1 -1
  18. package/dist/utils.d.ts +1 -1
  19. package/dist/utils.d.ts.map +1 -1
  20. package/dist/utils.js.map +1 -1
  21. package/esm/exporter.d.ts +3 -0
  22. package/esm/exporter.d.ts.map +1 -1
  23. package/esm/exporter.js +55 -32
  24. package/esm/exporter.js.map +1 -1
  25. package/esm/exporter.test.js +4 -1
  26. package/esm/exporter.test.js.map +1 -1
  27. package/esm/framer.d.ts.map +1 -1
  28. package/esm/framer.js +837 -488
  29. package/esm/framer.js.map +1 -1
  30. package/esm/index.d.ts +3 -1
  31. package/esm/index.d.ts.map +1 -1
  32. package/esm/index.js +3 -1
  33. package/esm/index.js.map +1 -1
  34. package/esm/react.d.ts +15 -6
  35. package/esm/react.d.ts.map +1 -1
  36. package/esm/react.js +65 -5
  37. package/esm/react.js.map +1 -1
  38. package/esm/utils.d.ts +1 -1
  39. package/esm/utils.d.ts.map +1 -1
  40. package/esm/utils.js.map +1 -1
  41. package/package.json +3 -3
  42. package/src/exporter.test.ts +6 -1
  43. package/src/exporter.ts +68 -33
  44. package/src/framer.js +891 -494
  45. package/src/index.ts +7 -1
  46. package/src/react.tsx +98 -16
  47. package/src/utils.ts +1 -1
package/esm/framer.js CHANGED
@@ -14597,7 +14597,7 @@ function steps(numSteps, direction = 'end') {
14597
14597
  return clamp(0, 1, rounded / numSteps);
14598
14598
  };
14599
14599
  }
14600
- // https :https://app.framerstatic.com/framer.K3G2LCX5.mjs
14600
+ // https :https://app.framerstatic.com/framer.W2IMDDH5.mjs
14601
14601
  init_chunk_QLPHEVXG();
14602
14602
  import React4 from 'react';
14603
14603
  import { startTransition as startTransition2, } from 'react';
@@ -16264,9 +16264,9 @@ function renderPage(Page4, defaultPageStyle) {
16264
16264
  }
16265
16265
  var NotFoundError = class extends Error {
16266
16266
  };
16267
- var ErrorBoundaryCaughtError = class extends Error {
16267
+ var NotFoundErrorBoundaryCaughtError = class extends Error {
16268
16268
  };
16269
- var ErrorBoundary = class extends Component {
16269
+ var NotFoundErrorBoundary = class extends Component {
16270
16270
  constructor(props) {
16271
16271
  super(props);
16272
16272
  this.state = {
@@ -16297,7 +16297,7 @@ var ErrorBoundary = class extends Component {
16297
16297
  return this.props.children;
16298
16298
  }
16299
16299
  if (!(this.state.error instanceof NotFoundError)) {
16300
- const error = new ErrorBoundaryCaughtError();
16300
+ const error = new NotFoundErrorBoundaryCaughtError();
16301
16301
  error.cause = this.state.error;
16302
16302
  throw error;
16303
16303
  }
@@ -16308,6 +16308,159 @@ var ErrorBoundary = class extends Component {
16308
16308
  return renderPage(notFoundPage, defaultPageStyle);
16309
16309
  }
16310
16310
  };
16311
+ function isObject(value) {
16312
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
16313
+ }
16314
+ function isString(value) {
16315
+ return typeof value === 'string';
16316
+ }
16317
+ var preloadKey = 'preload';
16318
+ function isLazyComponentType(componentType) {
16319
+ return typeof componentType === 'object' && componentType !== null && !React4.isValidElement(componentType) &&
16320
+ preloadKey in componentType;
16321
+ }
16322
+ function lazy(factory) {
16323
+ const LazyComponent = React4.lazy(factory);
16324
+ let factoryPromise;
16325
+ let LoadedComponent;
16326
+ const Component18 = React4.forwardRef(function LazyWithPreload(props, ref) {
16327
+ return React4.createElement(LoadedComponent !== null && LoadedComponent !== void 0 ? LoadedComponent : LazyComponent, ref
16328
+ ? {
16329
+ ref,
16330
+ ...props,
16331
+ }
16332
+ : props);
16333
+ });
16334
+ Component18.preload = () => {
16335
+ if (!factoryPromise) {
16336
+ factoryPromise = factory().then((module) => {
16337
+ LoadedComponent = module.default;
16338
+ return LoadedComponent;
16339
+ });
16340
+ }
16341
+ return factoryPromise;
16342
+ };
16343
+ return Component18;
16344
+ }
16345
+ function getRouteElementId(route, hash2) {
16346
+ if (hash2 && route) {
16347
+ if (route.elements && hash2 in route.elements) {
16348
+ return route.elements[hash2];
16349
+ }
16350
+ else {
16351
+ return hash2;
16352
+ }
16353
+ }
16354
+ return void 0;
16355
+ }
16356
+ function isBot(userAgent) {
16357
+ return /bot|-google|google-|yandex|ia_archiver/iu.test(userAgent);
16358
+ }
16359
+ function yieldToMain(options) {
16360
+ if ('scheduler' in window) {
16361
+ if ('yield' in scheduler)
16362
+ return scheduler.yield(options);
16363
+ if ('postTask' in scheduler)
16364
+ return scheduler.postTask(() => { }, options);
16365
+ }
16366
+ if ((options === null || options === void 0 ? void 0 : options.priority) === 'user-blocking') {
16367
+ return Promise.resolve();
16368
+ }
16369
+ return new Promise((resolve) => {
16370
+ setTimeout(resolve);
16371
+ });
16372
+ }
16373
+ async function yieldBefore(fn, options) {
16374
+ await yieldToMain(options);
16375
+ return fn();
16376
+ }
16377
+ function interactionResponse(options) {
16378
+ return new Promise((resolve) => {
16379
+ setTimeout(resolve, 100);
16380
+ requestAnimationFrame(() => {
16381
+ void yieldBefore(resolve, options);
16382
+ });
16383
+ });
16384
+ }
16385
+ function useAfterPaintEffect(effectFn, deps, opts, useEffectFn = useLayoutEffect) {
16386
+ useEffectFn(() => {
16387
+ const runAfterPaint = async (fn) => {
16388
+ await interactionResponse(opts);
16389
+ return fn();
16390
+ };
16391
+ const runPromise = runAfterPaint(effectFn);
16392
+ return () => {
16393
+ void (async () => {
16394
+ const cleanup = await runPromise;
16395
+ if (!cleanup)
16396
+ return;
16397
+ void runAfterPaint(cleanup);
16398
+ })();
16399
+ };
16400
+ }, deps);
16401
+ }
16402
+ var noop2 = () => { };
16403
+ var EMPTY_ARRAY = [];
16404
+ var ErrorBoundaryCaughtError = class extends NotFoundErrorBoundaryCaughtError {
16405
+ constructor() {
16406
+ super(...arguments);
16407
+ this.caught = true;
16408
+ }
16409
+ };
16410
+ var GracefullyDegradingErrorBoundary = class extends Component {
16411
+ constructor() {
16412
+ super(...arguments);
16413
+ this.state = {
16414
+ error: void 0,
16415
+ };
16416
+ this.message = 'Made UI non-interactive due to the error above. We\'ve logged it, but also please report this to the Framer team.';
16417
+ }
16418
+ static getDerivedStateFromError(error) {
16419
+ return {
16420
+ error,
16421
+ };
16422
+ }
16423
+ componentDidCatch(error) {
16424
+ var _a;
16425
+ if ('cause' in error) {
16426
+ error = error.cause;
16427
+ }
16428
+ console.error(this.message);
16429
+ if (Math.random() > 0.01)
16430
+ return;
16431
+ const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : null;
16432
+ (_a = window.__framer_events) === null || _a === void 0 ? void 0 : _a.push(['published_site_load_error', {
16433
+ message: String(error),
16434
+ stack,
16435
+ },]);
16436
+ }
16437
+ render() {
16438
+ var _a;
16439
+ const error = this.state.error;
16440
+ if (!error)
16441
+ return this.props.children;
16442
+ if (!isBot(navigator.userAgent)) {
16443
+ const fatalError = new ErrorBoundaryCaughtError();
16444
+ fatalError.cause = 'cause' in error ? error.cause : error;
16445
+ console.error(this.message, fatalError.cause);
16446
+ throw fatalError;
16447
+ }
16448
+ return (
16449
+ // This has the caveat that we will slightly modify the DOM, but it appears to be fine in this case.
16450
+ // The alternative would be to queue a new task that runs after and then set the innerHTML (= avoids the dummy-div), but that means we'll have DOM -> no DOM -> DOM transitions. With the div, we have DOM -> DOM and remove possible race-conditions.
16451
+ jsx('div', {
16452
+ style: {
16453
+ display: 'contents',
16454
+ },
16455
+ suppressHydrationWarning: true,
16456
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: React would unmount the root on errors, but we must ensure that bots can still read the SSR'd content.
16457
+ dangerouslySetInnerHTML: {
16458
+ __html: '<!-- DOM replaced by GracefullyDegradingErrorBoundary -->' +
16459
+ (((_a = document.getElementById('main')) === null || _a === void 0 ? void 0 : _a.innerHTML) || ''),
16460
+ },
16461
+ }));
16462
+ }
16463
+ };
16311
16464
  var pathVariablesRegExpRaw = ':([a-z]\\w*)';
16312
16465
  var pathVariablesRegExp = /* @__PURE__ */ new RegExp(pathVariablesRegExpRaw, 'gi');
16313
16466
  function fillPathVariables(path, variables) {
@@ -16481,99 +16634,6 @@ function forwardQueryParams(queryParamsString, href) {
16481
16634
  }
16482
16635
  return hrefWithoutHash.substring(0, startOfSearch + 1) + newSearchParams.toString() + hash2;
16483
16636
  }
16484
- function isObject(value) {
16485
- return typeof value === 'object' && value !== null && !Array.isArray(value);
16486
- }
16487
- function isString(value) {
16488
- return typeof value === 'string';
16489
- }
16490
- var preloadKey = 'preload';
16491
- function isLazyComponentType(componentType) {
16492
- return typeof componentType === 'object' && componentType !== null && !React4.isValidElement(componentType) &&
16493
- preloadKey in componentType;
16494
- }
16495
- function lazy(factory) {
16496
- const LazyComponent = React4.lazy(factory);
16497
- let factoryPromise;
16498
- let LoadedComponent;
16499
- const Component16 = React4.forwardRef(function LazyWithPreload(props, ref) {
16500
- return React4.createElement(LoadedComponent !== null && LoadedComponent !== void 0 ? LoadedComponent : LazyComponent, ref
16501
- ? {
16502
- ref,
16503
- ...props,
16504
- }
16505
- : props);
16506
- });
16507
- Component16.preload = () => {
16508
- if (!factoryPromise) {
16509
- factoryPromise = factory().then((module) => {
16510
- LoadedComponent = module.default;
16511
- return LoadedComponent;
16512
- });
16513
- }
16514
- return factoryPromise;
16515
- };
16516
- return Component16;
16517
- }
16518
- function getRouteElementId(route, hash2) {
16519
- if (hash2 && route) {
16520
- if (route.elements && hash2 in route.elements) {
16521
- return route.elements[hash2];
16522
- }
16523
- else {
16524
- return hash2;
16525
- }
16526
- }
16527
- return void 0;
16528
- }
16529
- function isBot(userAgent) {
16530
- return /bot|-google|google-|yandex|ia_archiver/iu.test(userAgent);
16531
- }
16532
- function yieldToMain(options) {
16533
- if ('scheduler' in window) {
16534
- if ('yield' in scheduler)
16535
- return scheduler.yield(options);
16536
- if ('postTask' in scheduler)
16537
- return scheduler.postTask(() => { }, options);
16538
- }
16539
- if ((options === null || options === void 0 ? void 0 : options.priority) === 'user-blocking') {
16540
- return Promise.resolve();
16541
- }
16542
- return new Promise((resolve) => {
16543
- setTimeout(resolve);
16544
- });
16545
- }
16546
- async function yieldBefore(fn, options) {
16547
- await yieldToMain(options);
16548
- return fn();
16549
- }
16550
- function interactionResponse(options) {
16551
- return new Promise((resolve) => {
16552
- setTimeout(resolve, 100);
16553
- requestAnimationFrame(() => {
16554
- void yieldBefore(resolve, options);
16555
- });
16556
- });
16557
- }
16558
- function useAfterPaintEffect(effectFn, deps, opts, useEffectFn = useLayoutEffect) {
16559
- useEffectFn(() => {
16560
- const runAfterPaint = async (fn) => {
16561
- await interactionResponse(opts);
16562
- return fn();
16563
- };
16564
- const runPromise = runAfterPaint(effectFn);
16565
- return () => {
16566
- void (async () => {
16567
- const cleanup = await runPromise;
16568
- if (!cleanup)
16569
- return;
16570
- void runAfterPaint(cleanup);
16571
- })();
16572
- };
16573
- }, deps);
16574
- }
16575
- var noop2 = () => { };
16576
- var EMPTY_ARRAY = [];
16577
16637
  async function replacePathVariables(path, currentLocale, nextLocale, defaultLocale, collectionId, pathVariables, collectionUtils) {
16578
16638
  var _a, _b, _c;
16579
16639
  let resultPath = path;
@@ -17633,8 +17693,8 @@ var SuspenseErrorBoundary = class extends Component {
17633
17693
  };
17634
17694
  }
17635
17695
  static getDerivedStateFromError(error) {
17636
- if (!(error instanceof ErrorBoundaryCaughtError)) {
17637
- console.error('Derived error in SuspenseErrorBoundary', error);
17696
+ if (!(error instanceof NotFoundErrorBoundaryCaughtError)) {
17697
+ console.error('Derived error in SuspenseErrorBoundary:\n', error);
17638
17698
  }
17639
17699
  return {
17640
17700
  error,
@@ -17642,26 +17702,25 @@ var SuspenseErrorBoundary = class extends Component {
17642
17702
  }
17643
17703
  componentDidCatch(error, errorInfo) {
17644
17704
  var _a;
17645
- if (error instanceof ErrorBoundaryCaughtError) {
17705
+ if (error instanceof NotFoundErrorBoundaryCaughtError) {
17646
17706
  return;
17647
17707
  }
17648
17708
  const componentStack = errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.componentStack;
17649
- console.error('Caught error in SuspenseErrorBoundary', error, componentStack);
17650
- if (typeof window !== 'undefined') {
17651
- const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : null;
17652
- (_a = window.__framer_events) === null || _a === void 0 ? void 0 : _a.push(['published_site_load_recoverable_error', {
17653
- message: String(error),
17654
- stack,
17655
- // only log componentStack if we don't have a stack
17656
- componentStack: stack ? void 0 : componentStack,
17657
- },]);
17658
- }
17709
+ console.error('Caught error in SuspenseErrorBoundary:\n', error, componentStack);
17710
+ const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : null;
17711
+ (_a = window.__framer_events) === null || _a === void 0 ? void 0 : _a.push(['published_site_load_recoverable_error', {
17712
+ message: String(error),
17713
+ stack,
17714
+ // only log componentStack if we don't have a stack
17715
+ componentStack: stack ? void 0 : componentStack,
17716
+ },]);
17659
17717
  }
17660
17718
  render() {
17661
- if (this.state.error === void 0)
17719
+ const error = this.state.error;
17720
+ if (error === void 0)
17662
17721
  return this.props.children;
17663
- if (this.state.error instanceof ErrorBoundaryCaughtError) {
17664
- throw this.state.error.cause;
17722
+ if (error instanceof NotFoundErrorBoundaryCaughtError) {
17723
+ throw error.cause;
17665
17724
  }
17666
17725
  window.__framer_STPD_OPT_OUT__ = true;
17667
17726
  return jsx(Suspense2, {
@@ -17969,39 +18028,41 @@ function Router({ defaultPageStyle, disableHistory, initialPathVariables, initia
17969
18028
  ? fillPathVariables(current.path, currentPathVariables)
17970
18029
  : current.path;
17971
18030
  const remountKey = String(currentLocaleId) + pathWithFilledVariables;
17972
- return jsx(RouterAPIProvider, {
17973
- api,
17974
- children: jsx(LocaleInfoContext.Provider, {
17975
- value: localeInfo,
17976
- children: jsxs(SuspenseThatPreservesDom, {
17977
- children: [
17978
- jsx(ErrorBoundary, {
17979
- notFoundPage,
17980
- defaultPageStyle,
17981
- forceUpdateKey: dep,
17982
- children: jsx(WithLayoutTemplate, {
17983
- LayoutTemplate,
17984
- routeId: currentRouteId,
17985
- children: jsxs(Fragment, {
17986
- children: [
17987
- jsx(MarkSuspenseEffects.Start, {}),
17988
- pageExistsInCurrentLocale
17989
- ? renderPage(current.page, LayoutTemplate
17990
- ? {
17991
- ...defaultPageStyle,
17992
- display: 'content',
17993
- }
17994
- : defaultPageStyle)
17995
- : // LAYOUT_TEMPLATE @TODO: display: content for not found page?
17996
- notFoundPage && renderPage(notFoundPage, defaultPageStyle),
17997
- ],
17998
- }, remountKey),
18031
+ return jsx(GracefullyDegradingErrorBoundary, {
18032
+ children: jsx(RouterAPIProvider, {
18033
+ api,
18034
+ children: jsx(LocaleInfoContext.Provider, {
18035
+ value: localeInfo,
18036
+ children: jsxs(SuspenseThatPreservesDom, {
18037
+ children: [
18038
+ jsx(NotFoundErrorBoundary, {
18039
+ notFoundPage,
18040
+ defaultPageStyle,
18041
+ forceUpdateKey: dep,
18042
+ children: jsx(WithLayoutTemplate, {
18043
+ LayoutTemplate,
18044
+ routeId: currentRouteId,
18045
+ children: jsxs(Fragment, {
18046
+ children: [
18047
+ jsx(MarkSuspenseEffects.Start, {}),
18048
+ pageExistsInCurrentLocale
18049
+ ? renderPage(current.page, LayoutTemplate
18050
+ ? {
18051
+ ...defaultPageStyle,
18052
+ display: 'content',
18053
+ }
18054
+ : defaultPageStyle)
18055
+ : // LAYOUT_TEMPLATE @TODO: display: content for not found page?
18056
+ notFoundPage && renderPage(notFoundPage, defaultPageStyle),
18057
+ ],
18058
+ }, remountKey),
18059
+ }),
17999
18060
  }),
18000
- }),
18001
- jsx(TurnOnReactEventHandling, {}),
18002
- jsx(MarkSuspenseEffects.End, {}),
18003
- editorBar,
18004
- ],
18061
+ jsx(TurnOnReactEventHandling, {}),
18062
+ jsx(MarkSuspenseEffects.End, {}),
18063
+ editorBar,
18064
+ ],
18065
+ }),
18005
18066
  }),
18006
18067
  }),
18007
18068
  });
@@ -20435,6 +20496,7 @@ var mockWindow = {
20435
20496
  scrollY: 0,
20436
20497
  location: {
20437
20498
  href: '',
20499
+ pathname: '',
20438
20500
  },
20439
20501
  document: {
20440
20502
  cookie: '',
@@ -20463,6 +20525,7 @@ var mockWindow = {
20463
20525
  innerWidth: 0,
20464
20526
  SVGSVGElement: {},
20465
20527
  open: function (_url, _target, _features) { },
20528
+ __framer_events: [],
20466
20529
  };
20467
20530
  var safeWindow = typeof window === 'undefined' ? mockWindow : window;
20468
20531
  var _raf = (f) => {
@@ -21414,7 +21477,7 @@ function getColorsFromTheme(theme, type) {
21414
21477
  screenColor: isDarkTheme ? '#333' : '#eee',
21415
21478
  };
21416
21479
  }
21417
- var ErrorBoundary2 = class extends Component {
21480
+ var ErrorBoundary = class extends Component {
21418
21481
  constructor() {
21419
21482
  super(...arguments);
21420
21483
  __publicField(this, 'state', {});
@@ -21560,7 +21623,7 @@ function Device({ canResize = false, children, ResizeObserver: ResizeObserver2 =
21560
21623
  ref: screenRef,
21561
21624
  children: /* @__PURE__ */ jsx(MotionConfig, {
21562
21625
  transformPagePoint: invertScale2,
21563
- children: /* @__PURE__ */ jsx(ErrorBoundary2, {
21626
+ children: /* @__PURE__ */ jsx(ErrorBoundary, {
21564
21627
  children,
21565
21628
  }),
21566
21629
  }),
@@ -26250,7 +26313,7 @@ function useMeasuredSize(ref) {
26250
26313
  return size.current;
26251
26314
  }
26252
26315
  var SIZE_COMPATIBILITY_WRAPPER_ATTRIBUTE = 'data-framer-size-compatibility-wrapper';
26253
- var withMeasuredSize = (Component16) => (props) => {
26316
+ var withMeasuredSize = (Component18) => (props) => {
26254
26317
  const ref = React4.useRef(null);
26255
26318
  const size = useMeasuredSize(ref);
26256
26319
  const dataProps = {
@@ -26267,7 +26330,7 @@ var withMeasuredSize = (Component16) => (props) => {
26267
26330
  },
26268
26331
  ref,
26269
26332
  ...dataProps,
26270
- children: shouldRender && /* @__PURE__ */ jsx(Component16, {
26333
+ children: shouldRender && /* @__PURE__ */ jsx(Component18, {
26271
26334
  ...props,
26272
26335
  width: (size == null ? void 0 : size.width) ?? fallbackWidth,
26273
26336
  height: (size == null ? void 0 : size.height) ?? fallbackHeight,
@@ -27771,7 +27834,7 @@ var clamp2 = (value, a, b) => {
27771
27834
  var DraggingContext = /* @__PURE__ */ React4.createContext({
27772
27835
  dragging: false,
27773
27836
  });
27774
- function WithDragging(Component16) {
27837
+ function WithDragging(Component18) {
27775
27838
  const _WithDraggingHOC = class extends React4.Component {
27776
27839
  constructor(props, defaultProps) {
27777
27840
  super(props, defaultProps);
@@ -28340,7 +28403,7 @@ function WithDragging(Component16) {
28340
28403
  value: {
28341
28404
  dragging: this.state.isDragging,
28342
28405
  },
28343
- children: /* @__PURE__ */ jsx(Component16, {
28406
+ children: /* @__PURE__ */ jsx(Component18, {
28344
28407
  ...originalProps,
28345
28408
  }),
28346
28409
  });
@@ -28378,9 +28441,9 @@ function WithDragging(Component16) {
28378
28441
  constraints: {},
28379
28442
  mouseWheel: false,
28380
28443
  });
28381
- __publicField(WithDraggingHOC, 'defaultProps', Object.assign({}, Component16.defaultProps, _WithDraggingHOC.draggingDefaultProps));
28444
+ __publicField(WithDraggingHOC, 'defaultProps', Object.assign({}, Component18.defaultProps, _WithDraggingHOC.draggingDefaultProps));
28382
28445
  const withDragging = WithDraggingHOC;
28383
- (0, import_hoist_non_react_statics.default)(withDragging, Component16);
28446
+ (0, import_hoist_non_react_statics.default)(withDragging, Component18);
28384
28447
  return withDragging;
28385
28448
  }
28386
28449
  var hoverProps = {
@@ -31156,7 +31219,7 @@ function useInfiniteScroll({ ref: elementRef, loadMore, rootMargin = '0px', thre
31156
31219
  };
31157
31220
  }, [elementRef, callback, rootMargin, threshold, paginationInfo.currentPage,]);
31158
31221
  }
31159
- function withInfiniteScroll(Component16) {
31222
+ function withInfiniteScroll(Component18) {
31160
31223
  return React4.forwardRef(({ __paginationInfo, __loadMore, ...props }, ref) => {
31161
31224
  const backupRef = React4.useRef(null);
31162
31225
  const infiniteScrollRef = ref ?? backupRef;
@@ -31166,7 +31229,7 @@ function withInfiniteScroll(Component16) {
31166
31229
  ref: infiniteScrollRef,
31167
31230
  paginationInfo: __paginationInfo,
31168
31231
  });
31169
- return /* @__PURE__ */ jsx(Component16, {
31232
+ return /* @__PURE__ */ jsx(Component18, {
31170
31233
  ...props,
31171
31234
  ref: infiniteScrollRef,
31172
31235
  });
@@ -33943,20 +34006,20 @@ function convertColorProps(props) {
33943
34006
  }
33944
34007
  return props;
33945
34008
  }
33946
- function WithOverride(Component16, override) {
34009
+ function WithOverride(Component18, override) {
33947
34010
  const useOverride = typeof override === 'function' ? (props) => override(convertColorProps(props)) : () => convertColorProps(override);
33948
34011
  const ComponentWithOverride = function (props) {
33949
34012
  useContext(DataObserverContext);
33950
34013
  const overrideProps = useOverride(props);
33951
34014
  const { style, ...rest } = props;
33952
- return /* @__PURE__ */ jsx(Component16, {
34015
+ return /* @__PURE__ */ jsx(Component18, {
33953
34016
  ...rest,
33954
34017
  ...overrideProps,
33955
34018
  _initialStyle: style,
33956
34019
  });
33957
34020
  };
33958
- (0, import_hoist_non_react_statics4.default)(ComponentWithOverride, Component16);
33959
- ComponentWithOverride['displayName'] = `WithOverride(${Component16.displayName || Component16.name})`;
34021
+ (0, import_hoist_non_react_statics4.default)(ComponentWithOverride, Component18);
34022
+ ComponentWithOverride['displayName'] = `WithOverride(${Component18.displayName || Component18.name})`;
33960
34023
  return ComponentWithOverride;
33961
34024
  }
33962
34025
  var prefix = '__framer__';
@@ -34760,10 +34823,10 @@ function addMotionValueStyle(style, values) {
34760
34823
  function isVariantOrVariantList(value) {
34761
34824
  return isString2(value) || Array.isArray(value);
34762
34825
  }
34763
- var withFX = (Component16) => React4.forwardRef((props, forwardedRef) => {
34826
+ var withFX = (Component18) => React4.forwardRef((props, forwardedRef) => {
34764
34827
  var _a;
34765
34828
  if (props.__withFX) {
34766
- return /* @__PURE__ */ jsx(Component16, {
34829
+ return /* @__PURE__ */ jsx(Component18, {
34767
34830
  ...props,
34768
34831
  animate: void 0,
34769
34832
  initial: void 0,
@@ -34774,7 +34837,7 @@ var withFX = (Component16) => React4.forwardRef((props, forwardedRef) => {
34774
34837
  if (RenderTarget.current() === RenderTarget.canvas) {
34775
34838
  const animate4 = isVariantOrVariantList(props.animate) ? props.animate : void 0;
34776
34839
  const initial2 = isVariantOrVariantList(props.initial) ? props.initial : void 0;
34777
- return /* @__PURE__ */ jsx(Component16, {
34840
+ return /* @__PURE__ */ jsx(Component18, {
34778
34841
  ...props,
34779
34842
  animate: animate4,
34780
34843
  initial: initial2,
@@ -34852,7 +34915,7 @@ var withFX = (Component16) => React4.forwardRef((props, forwardedRef) => {
34852
34915
  exit,
34853
34916
  }
34854
34917
  : {};
34855
- return /* @__PURE__ */ jsx(Component16, {
34918
+ return /* @__PURE__ */ jsx(Component18, {
34856
34919
  ...forwardedProps,
34857
34920
  ...motionGestures,
34858
34921
  __withFX: true,
@@ -34975,7 +35038,7 @@ var ComponentViewportContext = /* @__PURE__ */ React4.createContext({});
34975
35038
  function useComponentViewport() {
34976
35039
  return React4.useContext(ComponentViewportContext);
34977
35040
  }
34978
- var ComponentViewportProvider = /* @__PURE__ */ React4.forwardRef(({ width, height, y, children, ...rest }, ref) => {
35041
+ var ComponentViewportProvider = /* @__PURE__ */ React4.forwardRef(function ComponentViewportProvider2({ width, height, y, children, ...rest }, ref) {
34979
35042
  const componentViewport = React4.useMemo(() => {
34980
35043
  return {
34981
35044
  width,
@@ -34989,9 +35052,9 @@ var ComponentViewportProvider = /* @__PURE__ */ React4.forwardRef(({ width, heig
34989
35052
  children: cloneWithPropsAndRef(children, rest),
34990
35053
  });
34991
35054
  });
34992
- var withGeneratedLayoutId = (Component16) => React4.forwardRef((props, ref) => {
35055
+ var withGeneratedLayoutId = (Component18) => React4.forwardRef((props, ref) => {
34993
35056
  const layoutId = useLayoutId2(props);
34994
- return /* @__PURE__ */ jsx(Component16, {
35057
+ return /* @__PURE__ */ jsx(Component18, {
34995
35058
  layoutId,
34996
35059
  ...props,
34997
35060
  layoutIdKey: void 0,
@@ -34999,7 +35062,84 @@ var withGeneratedLayoutId = (Component16) => React4.forwardRef((props, ref) => {
34999
35062
  ref,
35000
35063
  });
35001
35064
  });
35002
- var ContainerErrorBoundary = class extends Component {
35065
+ function collectErrorToAnalytics(error, errorInfo) {
35066
+ var _a;
35067
+ if (typeof window === 'undefined')
35068
+ return;
35069
+ if (Math.random() > 0.01)
35070
+ return;
35071
+ const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : null;
35072
+ const componentStack = errorInfo == null ? void 0 : errorInfo.componentStack;
35073
+ (_a = safeWindow.__framer_events) == null ? void 0 : _a.push(['published_site_load_recoverable_error', {
35074
+ message: String(error),
35075
+ stack,
35076
+ // only log componentStack if we don't have a stack
35077
+ componentStack: stack ? void 0 : componentStack,
35078
+ },]);
35079
+ }
35080
+ function logError(...args) {
35081
+ if (false)
35082
+ return;
35083
+ console.error(...args);
35084
+ }
35085
+ function shouldEnableCodeBoundaries() {
35086
+ return RenderTarget.current() !== RenderTarget.canvas;
35087
+ }
35088
+ function CodeComponentBoundary({ errorMessage, fallback, children, }) {
35089
+ if (!shouldEnableCodeBoundaries()) {
35090
+ return children;
35091
+ }
35092
+ return /* @__PURE__ */ jsx(ClientSideErrorBoundary, {
35093
+ fallback,
35094
+ errorMessage,
35095
+ children: /* @__PURE__ */ jsx(ServerSideErrorBoundary, {
35096
+ fallback,
35097
+ children,
35098
+ }),
35099
+ });
35100
+ }
35101
+ var ClientSideErrorBoundary = class extends Component {
35102
+ constructor() {
35103
+ super(...arguments);
35104
+ __publicField(this, 'state', {
35105
+ hasError: false,
35106
+ });
35107
+ }
35108
+ static getDerivedStateFromError() {
35109
+ return {
35110
+ hasError: true,
35111
+ };
35112
+ }
35113
+ componentDidCatch(error, errorInfo) {
35114
+ logError(this.props.errorMessage, errorInfo == null ? void 0 : errorInfo.componentStack);
35115
+ collectErrorToAnalytics(error, errorInfo);
35116
+ }
35117
+ render() {
35118
+ const { children, fallback = null, } = this.props;
35119
+ const { hasError, } = this.state;
35120
+ return hasError ? fallback : children;
35121
+ }
35122
+ };
35123
+ function ServerSideErrorBoundary({ children, fallback = null, }) {
35124
+ return typeof window === 'undefined'
35125
+ ? // On the server, Suspense fallback is activated by errors. So we use the actual Suspense,
35126
+ // and render the actual error fallback if Suspense activates.
35127
+ /* @__PURE__ */
35128
+ jsx(Suspense2, {
35129
+ fallback,
35130
+ children,
35131
+ })
35132
+ : // On the client, Suspense fallback is activated by data fetching. So we use SuspenseThatPreservesDom,
35133
+ // because we don’t want to render a fallback if the boundary gets inadvertently activated.
35134
+ //
35135
+ // “Why won’t you just render plain children without Suspense?” Because that would cause a hydration mismatch
35136
+ // (the server has Suspense, the client doesn’t).
35137
+ /* @__PURE__ */
35138
+ jsx(SuspenseThatPreservesDom, {
35139
+ children,
35140
+ });
35141
+ }
35142
+ var DeprecatedContainerErrorBoundary = class extends Component {
35003
35143
  constructor() {
35004
35144
  super(...arguments);
35005
35145
  __publicField(this, 'state', {
@@ -35009,21 +35149,12 @@ var ContainerErrorBoundary = class extends Component {
35009
35149
  // We use `componentDidCatch` instead of `static getDerivedStateFromError()` because the latter could also catch hydration errors.
35010
35150
  // Hydration errors are recoverable by React, so we don't want to hide the coponent in that case (since the tree will not unmount).
35011
35151
  componentDidCatch(error, errorInfo) {
35012
- var _a;
35013
35152
  const componentStack = errorInfo == null ? void 0 : errorInfo.componentStack;
35014
35153
  console.error('Error in component (see previous log). This component has been hidden. Please check any custom code or code overrides to fix.', componentStack);
35015
35154
  this.setState({
35016
35155
  hasError: true,
35017
35156
  });
35018
- if (typeof window !== 'undefined' && Math.random() <= 0.01) {
35019
- const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : null;
35020
- (_a = window.__framer_events) == null ? void 0 : _a.push(['published_site_load_recoverable_error', {
35021
- message: String(error),
35022
- stack,
35023
- // only log componentStack if we don't have a stack
35024
- componentStack: stack ? void 0 : componentStack,
35025
- },]);
35026
- }
35157
+ collectErrorToAnalytics(error, errorInfo);
35027
35158
  }
35028
35159
  render() {
35029
35160
  const { children, } = this.props;
@@ -35031,9 +35162,63 @@ var ContainerErrorBoundary = class extends Component {
35031
35162
  return hasError ? null : children;
35032
35163
  }
35033
35164
  };
35034
- var Providers = /* @__PURE__ */ React4.forwardRef(({ children, layoutId, as, ...props }, ref) => {
35165
+ var CRASH_ERROR_MESSAGE_PREFIX = 'code-crash:';
35166
+ function formatCodeCrashLocationFromSourceNode(scopeId, nodeId) {
35167
+ return `${CRASH_ERROR_MESSAGE_PREFIX}${scopeId}:${nodeId}`;
35168
+ }
35169
+ function getErrorMessageForComponent(scopeId, nodeId) {
35170
+ return getErrorMessageFor('component', scopeId, nodeId);
35171
+ }
35172
+ function getErrorMessageForOverride(scopeId, nodeId) {
35173
+ return getErrorMessageFor('override', scopeId, nodeId);
35174
+ }
35175
+ function getErrorMessageFor(element, scopeId, nodeId) {
35176
+ return `A code ${element} crashed while rendering due to the error above. To find and fix it, open the project in the editor \u2192 open Quick Actions (press Cmd+K or Ctrl+K) \u2192 paste this: ${formatCodeCrashLocationFromSourceNode(scopeId, nodeId)} \u2192 click \u201CShow Layer\u201D.`;
35177
+ }
35178
+ var IsInExternalComponentContext = /* @__PURE__ */ (() => React4.createContext(0))();
35179
+ function useExternalComponentNestingLevel() {
35180
+ return React4.useContext(IsInExternalComponentContext);
35181
+ }
35182
+ function IsExternalComponent({ children, }) {
35183
+ const count = React4.useContext(IsInExternalComponentContext);
35184
+ return /* @__PURE__ */ jsx(IsInExternalComponentContext.Provider, {
35185
+ value: count + 1,
35186
+ children,
35187
+ });
35188
+ }
35189
+ function shouldWrapComponentWithBoundary(externalModuleNestingLevel, isAuthoredByUser, isExternalComponent, inComponentSlot) {
35190
+ const isLocalComponentInstance =
35191
+ // We know a component instance is local when it’s not nested inside any external component...
35192
+ externalModuleNestingLevel === 0 ||
35193
+ // ...or – “Ticker edge case” – when it’s nested inside an external component during React rendering,
35194
+ // but is actually defined in a slot that’s passed into the component. (This is the “Ticker edge case”:
35195
+ // if a site has a Ticker (or any other component with slots), and something in a Ticker’s slot crashes,
35196
+ // we want to disable that something, not the whole ticker.)
35197
+ externalModuleNestingLevel === 1 && inComponentSlot;
35198
+ return (isAuthoredByUser || isExternalComponent) && isLocalComponentInstance;
35199
+ }
35200
+ function shouldWrapOverrideWithBoundary(externalModuleNestingLevel, inComponentSlot) {
35201
+ const isWrappingFrameLocalToProject =
35202
+ // We know a frame is local when it’s not nested inside any external component...
35203
+ externalModuleNestingLevel === 0 ||
35204
+ // ...or – “Ticker edge case” – when it’s nested inside an external component during React rendering,
35205
+ // but is actually defined in a slot that’s passed into the component. (This is the “Ticker edge case”:
35206
+ // if a site has a Ticker (or any other component with slots), and an override in a Ticker’s slot crashes,
35207
+ // we want to disable that override, not the whole ticker.)
35208
+ externalModuleNestingLevel === 1 && inComponentSlot;
35209
+ return isWrappingFrameLocalToProject;
35210
+ }
35211
+ var ContainerInner = /* @__PURE__ */ React4.forwardRef(({ children, layoutId, as, scopeId, nodeId, isAuthoredByUser, isModuleExternal, inComponentSlot, ...props }, ref) => {
35035
35212
  const outerLayoutId = useConstant2(() => layoutId ? `${layoutId}-container` : void 0);
35036
35213
  const MotionComponent = htmlElementAsMotionComponent(as);
35214
+ const clonedChildren = React4.Children.map(children, (child) => {
35215
+ return React4.isValidElement(child)
35216
+ ? React4.cloneElement(child, {
35217
+ layoutId,
35218
+ })
35219
+ : child;
35220
+ });
35221
+ const childrenWithCodeBoundary = useWrapWithCodeBoundary(clonedChildren, scopeId, nodeId, isAuthoredByUser, isModuleExternal, inComponentSlot);
35037
35222
  return /* @__PURE__ */ jsx(MotionComponent, {
35038
35223
  layoutId: outerLayoutId,
35039
35224
  ...props,
@@ -35045,21 +35230,62 @@ var Providers = /* @__PURE__ */ React4.forwardRef(({ children, layoutId, as, ...
35045
35230
  children: /* @__PURE__ */ jsx(LayoutGroup, {
35046
35231
  id: layoutId ?? '',
35047
35232
  inherit: 'id',
35048
- children: /* @__PURE__ */ jsx(ContainerErrorBoundary, {
35049
- children: React4.Children.map(children, (child) => {
35050
- return React4.isValidElement(child)
35051
- ? React4.cloneElement(child, {
35052
- layoutId,
35053
- })
35054
- : child;
35055
- }),
35056
- }),
35233
+ children: childrenWithCodeBoundary,
35057
35234
  }),
35058
35235
  }),
35059
35236
  }),
35060
35237
  });
35061
35238
  });
35062
- var Container = /* @__PURE__ */ withGeneratedLayoutId(Providers);
35239
+ var Container = /* @__PURE__ */ withGeneratedLayoutId(ContainerInner);
35240
+ var SmartComponentScopedContainer = /* @__PURE__ */ React4.forwardRef((props, ref) => {
35241
+ const { as, layoutId, scopeId, nodeId, isAuthoredByUser, rendersWithMotion, isModuleExternal, inComponentSlot, style, children, ...renderableProps } = props;
35242
+ const childrenWithCodeBoundary = useWrapWithCodeBoundary(children, scopeId, nodeId, isAuthoredByUser, isModuleExternal, inComponentSlot);
35243
+ const tagName = props.as ?? 'div';
35244
+ if (props.rendersWithMotion) {
35245
+ const Component18 = htmlElementAsMotionComponent(tagName);
35246
+ return /* @__PURE__ */ jsx(Component18, {
35247
+ ref,
35248
+ style: props.style,
35249
+ ...renderableProps,
35250
+ children: childrenWithCodeBoundary,
35251
+ });
35252
+ }
35253
+ else {
35254
+ const Component18 = tagName;
35255
+ return /* @__PURE__ */ jsx(Component18, {
35256
+ ref,
35257
+ style: props.style,
35258
+ ...renderableProps,
35259
+ children: childrenWithCodeBoundary,
35260
+ });
35261
+ }
35262
+ });
35263
+ function useWrapWithCodeBoundary(children, scopeId, nodeId, isAuthoredByUser, isExternalComponent, inComponentSlot) {
35264
+ const externalModuleNestingLevel = useExternalComponentNestingLevel();
35265
+ if (
35266
+ // Those props will either be all undefined, which means the Container wasn’t codegenned yet,
35267
+ // and we should use the old ContainerErrorBoundary –
35268
+ // or all defined, which means we have enough information to use the new boundary.
35269
+ isUndefined(scopeId) || isUndefined(nodeId)) {
35270
+ return /* @__PURE__ */ jsx(DeprecatedContainerErrorBoundary, {
35271
+ children,
35272
+ });
35273
+ }
35274
+ const shouldWrapWithBoundary = shouldWrapComponentWithBoundary(externalModuleNestingLevel, isAuthoredByUser ?? false, isExternalComponent ?? false, inComponentSlot ?? false);
35275
+ if (shouldWrapWithBoundary) {
35276
+ children = /* @__PURE__ */ jsx(CodeComponentBoundary, {
35277
+ errorMessage: getErrorMessageForComponent(scopeId, nodeId),
35278
+ fallback: null,
35279
+ children,
35280
+ });
35281
+ }
35282
+ if (isExternalComponent) {
35283
+ children = /* @__PURE__ */ jsx(IsExternalComponent, {
35284
+ children,
35285
+ });
35286
+ }
35287
+ return children;
35288
+ }
35063
35289
  var StyleSheetContext = /* @__PURE__ */ React4.createContext(void 0);
35064
35290
  var framerPostSSRCSSSelector = 'style[data-framer-css-ssr-minified]';
35065
35291
  var componentsWithServerRenderedStyles = /* @__PURE__ */ (() => {
@@ -35074,7 +35300,7 @@ var componentsWithServerRenderedStyles = /* @__PURE__ */ (() => {
35074
35300
  return new Set(componentsWithSSRStylesAttr.split(' '));
35075
35301
  })();
35076
35302
  var framerCSSMarker = 'data-framer-css-ssr';
35077
- var withCSS = (Component16, escapedCSS, componentSerializationId) => React4.forwardRef((props, ref) => {
35303
+ var withCSS = (Component18, escapedCSS, componentSerializationId) => React4.forwardRef((props, ref) => {
35078
35304
  const { sheet, cache: cache2, } = React4.useContext(StyleSheetContext) ?? {};
35079
35305
  if (!isBrowser2()) {
35080
35306
  if (isFunction(escapedCSS))
@@ -35091,7 +35317,7 @@ var withCSS = (Component16, escapedCSS, componentSerializationId) => React4.forw
35091
35317
  __html: concatenatedCSS,
35092
35318
  },
35093
35319
  }),
35094
- /* @__PURE__ */ jsx(Component16, {
35320
+ /* @__PURE__ */ jsx(Component18, {
35095
35321
  ...props,
35096
35322
  ref,
35097
35323
  }),
@@ -35108,7 +35334,7 @@ var withCSS = (Component16, escapedCSS, componentSerializationId) => React4.forw
35108
35334
  : escapedCSS.split('\n');
35109
35335
  css2.forEach((rule) => rule && injectCSSRule(rule, sheet, cache2));
35110
35336
  }, []);
35111
- return /* @__PURE__ */ jsx(Component16, {
35337
+ return /* @__PURE__ */ jsx(Component18, {
35112
35338
  ...props,
35113
35339
  ref,
35114
35340
  });
@@ -36080,10 +36306,10 @@ function ChildrenCanSuspend({ children, }) {
36080
36306
  children,
36081
36307
  });
36082
36308
  }
36083
- function withChildrenCanSuspend(Component16) {
36309
+ function withChildrenCanSuspend(Component18) {
36084
36310
  return forwardRef(function withChildrenCanSuspendInner(props, ref) {
36085
36311
  return /* @__PURE__ */ jsx(ChildrenCanSuspend, {
36086
- children: /* @__PURE__ */ jsx(Component16, {
36312
+ children: /* @__PURE__ */ jsx(Component18, {
36087
36313
  ...props,
36088
36314
  ref,
36089
36315
  }),
@@ -36634,7 +36860,7 @@ function getRouteFromPageLink(pageLink, router, currentRoute) {
36634
36860
  const { webPageId, } = pageLink;
36635
36861
  return (_a = router.getRoute) == null ? void 0 : _a.call(router, webPageId);
36636
36862
  }
36637
- var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(({ children, href, openInNewTab, smoothScroll, nodeId, ...restProps }, forwardedRef) => {
36863
+ var Link = /* @__PURE__ */ withChildrenCanSuspend(/* @__PURE__ */ forwardRef(function Link2({ children, href, openInNewTab, smoothScroll, nodeId, ...restProps }, forwardedRef) {
36638
36864
  const router = useRouter();
36639
36865
  const currentRoute = useCurrentRoute();
36640
36866
  const implicitPathVariables = useImplicitPathVariables();
@@ -37653,12 +37879,8 @@ function PageRoot({ RootComponent, isWebsite, routeId, framerSiteId, pathVariabl
37653
37879
  },
37654
37880
  preserveQueryParams,
37655
37881
  enableAsyncURLUpdates,
37656
- editorBar: EditorBar && framerSiteId && /* @__PURE__ */ jsx(IgnoreErrors, {
37657
- children: /* @__PURE__ */ jsx(Suspense2, {
37658
- children: /* @__PURE__ */ jsx(EditorBar, {
37659
- framerSiteId,
37660
- }),
37661
- }),
37882
+ editorBar: /* @__PURE__ */ jsx(EditorBarLauncher, {
37883
+ EditorBar,
37662
37884
  }),
37663
37885
  }),
37664
37886
  }),
@@ -37683,6 +37905,24 @@ function PageRoot({ RootComponent, isWebsite, routeId, framerSiteId, pathVariabl
37683
37905
  });
37684
37906
  }
37685
37907
  }
37908
+ function EditorBarLauncher({ EditorBar, }) {
37909
+ const [mounted, setMounted,] = useState(false);
37910
+ const framerSiteId = useContext(FormContext);
37911
+ useEffect(() => {
37912
+ startTransition2(() => {
37913
+ setMounted(true);
37914
+ });
37915
+ }, []);
37916
+ if (!EditorBar || !framerSiteId || !mounted)
37917
+ return null;
37918
+ return /* @__PURE__ */ jsx(IgnoreErrors, {
37919
+ children: /* @__PURE__ */ jsx(Suspense2, {
37920
+ children: /* @__PURE__ */ jsx(EditorBar, {
37921
+ framerSiteId,
37922
+ }),
37923
+ }),
37924
+ });
37925
+ }
37686
37926
  function cloneChildrenWithProps(children, props, asNode) {
37687
37927
  const cloned = React2.Children.map(children, (child) => {
37688
37928
  if (React2.isValidElement(child)) {
@@ -38276,61 +38516,61 @@ var DatabaseValue = {
38276
38516
  * Checks if the left value is equal to the right value. Returns false if
38277
38517
  * the values are not of the same type.
38278
38518
  */
38279
- equal(left, right, collation10) {
38519
+ equal(left, right, collation11) {
38280
38520
  if ((left == null ? void 0 : left.type) !== (right == null ? void 0 : right.type)) {
38281
38521
  return false;
38282
38522
  }
38283
- return compare(left, right, collation10) === 0;
38523
+ return compare(left, right, collation11) === 0;
38284
38524
  },
38285
38525
  /**
38286
38526
  * Checks if the left value is less than the right value. Returns false if
38287
38527
  * the values are not of the same type.
38288
38528
  */
38289
- lessThan(left, right, collation10) {
38529
+ lessThan(left, right, collation11) {
38290
38530
  if ((left == null ? void 0 : left.type) !== (right == null ? void 0 : right.type)) {
38291
38531
  return false;
38292
38532
  }
38293
- return compare(left, right, collation10) < 0;
38533
+ return compare(left, right, collation11) < 0;
38294
38534
  },
38295
38535
  /**
38296
38536
  * Checks if the left value is less than or equal to the right value.
38297
38537
  * Returns false if the values are not of the same type.
38298
38538
  */
38299
- lessThanOrEqual(left, right, collation10) {
38539
+ lessThanOrEqual(left, right, collation11) {
38300
38540
  if ((left == null ? void 0 : left.type) !== (right == null ? void 0 : right.type)) {
38301
38541
  return false;
38302
38542
  }
38303
- return compare(left, right, collation10) <= 0;
38543
+ return compare(left, right, collation11) <= 0;
38304
38544
  },
38305
38545
  /**
38306
38546
  * Checks if the left value is greater than the right value. Returns false
38307
38547
  * if the values are not of the same type.
38308
38548
  */
38309
- greaterThan(left, right, collation10) {
38549
+ greaterThan(left, right, collation11) {
38310
38550
  if ((left == null ? void 0 : left.type) !== (right == null ? void 0 : right.type)) {
38311
38551
  return false;
38312
38552
  }
38313
- return compare(left, right, collation10) > 0;
38553
+ return compare(left, right, collation11) > 0;
38314
38554
  },
38315
38555
  /**
38316
38556
  * Checks if the left value is greater than or equal to the right value.
38317
38557
  * Returns false if the values are not of the same type.
38318
38558
  */
38319
- greaterThanOrEqual(left, right, collation10) {
38559
+ greaterThanOrEqual(left, right, collation11) {
38320
38560
  if ((left == null ? void 0 : left.type) !== (right == null ? void 0 : right.type)) {
38321
38561
  return false;
38322
38562
  }
38323
- return compare(left, right, collation10) >= 0;
38563
+ return compare(left, right, collation11) >= 0;
38324
38564
  },
38325
38565
  /**
38326
38566
  * Checks if the left value is in the right value. Returns false if the
38327
38567
  * right value is not an array.
38328
38568
  */
38329
- in(left, right, collation10) {
38569
+ in(left, right, collation11) {
38330
38570
  if ((right == null ? void 0 : right.type) !== 'array')
38331
38571
  return false;
38332
38572
  return right.value.some((item) => {
38333
- return DatabaseValue.equal(item, left, collation10);
38573
+ return DatabaseValue.equal(item, left, collation11);
38334
38574
  });
38335
38575
  },
38336
38576
  /**
@@ -38338,47 +38578,47 @@ var DatabaseValue = {
38338
38578
  *
38339
38579
  * If source has duplicates, the index of the first occurrence is always returned.
38340
38580
  */
38341
- indexOf(source, target, collation10) {
38581
+ indexOf(source, target, collation11) {
38342
38582
  if ((source == null ? void 0 : source.type) !== 'array')
38343
38583
  return -1;
38344
38584
  return source.value.findIndex((item) => {
38345
- return DatabaseValue.equal(item, target, collation10);
38585
+ return DatabaseValue.equal(item, target, collation11);
38346
38586
  });
38347
38587
  },
38348
- contains(source, target, collation10) {
38588
+ contains(source, target, collation11) {
38349
38589
  let sourceValue = toString(source);
38350
38590
  let targetValue = toString(target);
38351
38591
  if (isNull(sourceValue))
38352
38592
  return false;
38353
38593
  if (isNull(targetValue))
38354
38594
  return false;
38355
- if (collation10.type === 0) {
38595
+ if (collation11.type === 0) {
38356
38596
  sourceValue = sourceValue.toLowerCase();
38357
38597
  targetValue = targetValue.toLowerCase();
38358
38598
  }
38359
38599
  return sourceValue.includes(targetValue);
38360
38600
  },
38361
- startsWith(source, target, collation10) {
38601
+ startsWith(source, target, collation11) {
38362
38602
  let sourceValue = toString(source);
38363
38603
  let targetValue = toString(target);
38364
38604
  if (isNull(sourceValue))
38365
38605
  return false;
38366
38606
  if (isNull(targetValue))
38367
38607
  return false;
38368
- if (collation10.type === 0) {
38608
+ if (collation11.type === 0) {
38369
38609
  sourceValue = sourceValue.toLowerCase();
38370
38610
  targetValue = targetValue.toLowerCase();
38371
38611
  }
38372
38612
  return sourceValue.startsWith(targetValue);
38373
38613
  },
38374
- endsWith(source, target, collation10) {
38614
+ endsWith(source, target, collation11) {
38375
38615
  let sourceValue = toString(source);
38376
38616
  let targetValue = toString(target);
38377
38617
  if (isNull(sourceValue))
38378
38618
  return false;
38379
38619
  if (isNull(targetValue))
38380
38620
  return false;
38381
- if (collation10.type === 0) {
38621
+ if (collation11.type === 0) {
38382
38622
  sourceValue = sourceValue.toLowerCase();
38383
38623
  targetValue = targetValue.toLowerCase();
38384
38624
  }
@@ -38424,7 +38664,7 @@ var DatabaseValue = {
38424
38664
  }
38425
38665
  },
38426
38666
  };
38427
- function compare(left, right, collation10) {
38667
+ function compare(left, right, collation11) {
38428
38668
  if (isNull(left) || isNull(right)) {
38429
38669
  assert(left === right);
38430
38670
  return 0;
@@ -38443,7 +38683,7 @@ function compare(left, right, collation10) {
38443
38683
  const rightItem = right.value[i];
38444
38684
  assert(!isUndefined(leftItem), 'Left item must exist');
38445
38685
  assert(!isUndefined(rightItem), 'Right item must exist');
38446
- const result = compare(leftItem, rightItem, collation10);
38686
+ const result = compare(leftItem, rightItem, collation11);
38447
38687
  if (result !== 0)
38448
38688
  return result;
38449
38689
  }
@@ -38530,7 +38770,7 @@ function compare(left, right, collation10) {
38530
38770
  const rightValue = right.value[rightKey];
38531
38771
  assert(!isUndefined(leftValue), 'Left value must exist');
38532
38772
  assert(!isUndefined(rightValue), 'Right value must exist');
38533
- const result = compare(leftValue, rightValue, collation10);
38773
+ const result = compare(leftValue, rightValue, collation11);
38534
38774
  if (result !== 0)
38535
38775
  return result;
38536
38776
  }
@@ -38560,7 +38800,7 @@ function compare(left, right, collation10) {
38560
38800
  assert(left.type === right.type);
38561
38801
  let leftValue = left.value;
38562
38802
  let rightValue = right.value;
38563
- if (collation10.type === 0) {
38803
+ if (collation11.type === 0) {
38564
38804
  leftValue = left.value.toLowerCase();
38565
38805
  rightValue = right.value.toLowerCase();
38566
38806
  }
@@ -38579,6 +38819,208 @@ var unknownDefinition = {
38579
38819
  type: 'unknown',
38580
38820
  isNullable: true,
38581
38821
  };
38822
+ function getNetworkLatency() {
38823
+ return 25;
38824
+ }
38825
+ function getNetworkSpeed() {
38826
+ return 100 * 125;
38827
+ }
38828
+ var KB = 1e3;
38829
+ var Cost = class {
38830
+ constructor(network) {
38831
+ this.network = network;
38832
+ }
38833
+ static estimate(totalRequests, transferredBytes) {
38834
+ const latency = getNetworkLatency();
38835
+ const speed = getNetworkSpeed();
38836
+ const network = totalRequests * latency + transferredBytes / speed;
38837
+ return new Cost(network);
38838
+ }
38839
+ static max(left, right) {
38840
+ const network = Math.max(left.network, right.network);
38841
+ return new Cost(network);
38842
+ }
38843
+ static compare(left, right) {
38844
+ if (left.network < right.network)
38845
+ return -1;
38846
+ if (left.network > right.network)
38847
+ return 1;
38848
+ return 0;
38849
+ }
38850
+ add(cost) {
38851
+ this.network += cost.network;
38852
+ return this;
38853
+ }
38854
+ toString() {
38855
+ return `${this.network}ms`;
38856
+ }
38857
+ };
38858
+ function GroupId(id3) {
38859
+ return id3;
38860
+ }
38861
+ var Group = class {
38862
+ constructor(id3, relational) {
38863
+ this.id = id3;
38864
+ this.relational = relational;
38865
+ __publicField(this, 'nodes', []);
38866
+ __publicField(this, 'winners', /* @__PURE__ */ new Map());
38867
+ }
38868
+ /**
38869
+ * Adds a node to the group. Throws an error if the node is already in a
38870
+ * group.
38871
+ */
38872
+ addNode(node) {
38873
+ this.nodes.push(node);
38874
+ node.setGroup(this);
38875
+ }
38876
+ /**
38877
+ * Returns the winner for the given required physical props. The winner
38878
+ * stores the best node and its cost. This is used to find the best node in
38879
+ * the group.
38880
+ */
38881
+ getWinner(required) {
38882
+ const hash2 = required.getHash();
38883
+ const existing = this.winners.get(hash2);
38884
+ if (existing)
38885
+ return existing;
38886
+ const winner = new Winner();
38887
+ this.winners.set(hash2, winner);
38888
+ return winner;
38889
+ }
38890
+ /**
38891
+ * Returns the optimized version of the node. The optimized version is the
38892
+ * node with the lowest cost with all children replaced with their optimized
38893
+ * versions. This is used to create the final optimized query plan.
38894
+ */
38895
+ getOptimized(required) {
38896
+ const winner = this.getWinner(required);
38897
+ assert(winner.node, 'Group not optimized');
38898
+ const optimizer = winner.node.getOptimized(required);
38899
+ optimizer.setGroup(this);
38900
+ return optimizer;
38901
+ }
38902
+ };
38903
+ var Winner = class {
38904
+ constructor() {
38905
+ __publicField(this, 'node');
38906
+ __publicField(this, 'cost', new Cost(Infinity));
38907
+ __publicField(this, 'nodes', []);
38908
+ }
38909
+ update(node, cost) {
38910
+ this.nodes.push(node);
38911
+ if (Cost.compare(cost, this.cost) < 0) {
38912
+ this.node = node;
38913
+ this.cost = cost;
38914
+ }
38915
+ }
38916
+ };
38917
+ function evaluateSync(generator) {
38918
+ const state2 = generator.next();
38919
+ assert(state2.done, 'Generator must not yield');
38920
+ return state2.value;
38921
+ }
38922
+ async function evaluateAsync(generator, state2 = generator.next()) {
38923
+ while (!state2.done) {
38924
+ const value = await state2.value;
38925
+ state2 = generator.next(value);
38926
+ }
38927
+ return state2.value;
38928
+ }
38929
+ function* evaluateObject(values) {
38930
+ const result = {};
38931
+ const keys3 = Object.keys(values);
38932
+ const promises = [];
38933
+ for (const key7 of keys3) {
38934
+ const generator = values[key7];
38935
+ if (isGenerator2(generator)) {
38936
+ const state2 = generator.next();
38937
+ if (state2.done) {
38938
+ result[key7] = state2.value;
38939
+ }
38940
+ else {
38941
+ promises.push(evaluateAsync(generator, state2).then((value) => {
38942
+ result[key7] = value;
38943
+ }));
38944
+ }
38945
+ }
38946
+ else {
38947
+ result[key7] = generator;
38948
+ }
38949
+ }
38950
+ if (promises.length > 0) {
38951
+ yield Promise.all(promises);
38952
+ }
38953
+ return result;
38954
+ }
38955
+ function* evaluateArray(values) {
38956
+ const result = [];
38957
+ const keys3 = values.keys();
38958
+ const promises = [];
38959
+ for (const key7 of keys3) {
38960
+ const generator = values[key7];
38961
+ if (isGenerator2(generator)) {
38962
+ const state2 = generator.next();
38963
+ if (state2.done) {
38964
+ result[key7] = state2.value;
38965
+ }
38966
+ else {
38967
+ promises.push(evaluateAsync(generator, state2).then((value) => {
38968
+ result[key7] = value;
38969
+ }));
38970
+ }
38971
+ }
38972
+ else {
38973
+ result[key7] = generator;
38974
+ }
38975
+ }
38976
+ if (promises.length > 0) {
38977
+ yield Promise.all(promises);
38978
+ }
38979
+ return result;
38980
+ }
38981
+ var AbstractNode = class {
38982
+ constructor(isSynchronous) {
38983
+ this.isSynchronous = isSynchronous;
38984
+ }
38985
+ };
38986
+ var RelationalNode = class extends AbstractNode {
38987
+ constructor() {
38988
+ super(...arguments);
38989
+ __publicField(this, 'group');
38990
+ }
38991
+ /**
38992
+ * Returns the group that the node belongs to. Throws an error if the node
38993
+ * is not in a group. This should only happen in the constructor because
38994
+ * every node is added to a group right after creation.
38995
+ */
38996
+ getGroup() {
38997
+ assert(this.group, 'Node must be in a group');
38998
+ return this.group;
38999
+ }
39000
+ /**
39001
+ * Adds the node to the given group. Throws an error if the node is already
39002
+ * in a group.
39003
+ */
39004
+ setGroup(group) {
39005
+ assert(!this.group, 'Node is already in a group');
39006
+ this.group = group;
39007
+ }
39008
+ /**
39009
+ * Evaluates the node and all children synchronously. Throws an error if the
39010
+ * node is not synchronous.
39011
+ */
39012
+ evaluateSync() {
39013
+ const generator = this.evaluate(void 0);
39014
+ return evaluateSync(generator);
39015
+ }
39016
+ /**
39017
+ * Evaluates the node and all children asynchronously.
39018
+ */
39019
+ evaluateAsync() {
39020
+ const generator = this.evaluate(void 0);
39021
+ return evaluateAsync(generator);
39022
+ }
39023
+ };
38582
39024
  function Hash(value) {
38583
39025
  return value;
38584
39026
  }
@@ -38587,6 +39029,16 @@ function isHashable(value) {
38587
39029
  }
38588
39030
  function calculateHash(name, ...values) {
38589
39031
  const hashes = values.map((value) => {
39032
+ const isCollectionMetadata = value instanceof CollectionMetadata;
39033
+ assert(!isCollectionMetadata, 'Pass CollectionMetadata.id instead');
39034
+ const isFieldMetadata = value instanceof FieldMetadata;
39035
+ assert(!isFieldMetadata, 'Pass FieldMetadata.id instead');
39036
+ const isIndexMetadata = value instanceof IndexMetadata;
39037
+ assert(!isIndexMetadata, 'Pass IndexMetadata.id instead');
39038
+ const isRelationalNode = value instanceof RelationalNode;
39039
+ assert(!isRelationalNode, 'Pass RelationalNode.group.id instead');
39040
+ const isGroup = value instanceof Group;
39041
+ assert(!isGroup, 'Pass Group.id instead');
38590
39042
  if (isHashable(value)) {
38591
39043
  return value.getHash();
38592
39044
  }
@@ -38711,106 +39163,6 @@ var Fields = class extends Metadata {
38711
39163
  __publicField(this, 'name', 'Fields');
38712
39164
  }
38713
39165
  };
38714
- function getNetworkLatency() {
38715
- return 25;
38716
- }
38717
- function getNetworkSpeed() {
38718
- return 100 * 125;
38719
- }
38720
- var KB = 1e3;
38721
- var Cost = class {
38722
- constructor(network) {
38723
- this.network = network;
38724
- }
38725
- static estimate(totalRequests, transferredBytes) {
38726
- const latency = getNetworkLatency();
38727
- const speed = getNetworkSpeed();
38728
- const network = totalRequests * latency + transferredBytes / speed;
38729
- return new Cost(network);
38730
- }
38731
- static max(left, right) {
38732
- const network = Math.max(left.network, right.network);
38733
- return new Cost(network);
38734
- }
38735
- static compare(left, right) {
38736
- if (left.network < right.network)
38737
- return -1;
38738
- if (left.network > right.network)
38739
- return 1;
38740
- return 0;
38741
- }
38742
- add(cost) {
38743
- this.network += cost.network;
38744
- return this;
38745
- }
38746
- toString() {
38747
- return `${this.network}ms`;
38748
- }
38749
- };
38750
- function evaluateSync(generator) {
38751
- const state2 = generator.next();
38752
- assert(state2.done, 'Generator must not yield');
38753
- return state2.value;
38754
- }
38755
- async function evaluateAsync(generator, state2 = generator.next()) {
38756
- while (!state2.done) {
38757
- const value = await state2.value;
38758
- state2 = generator.next(value);
38759
- }
38760
- return state2.value;
38761
- }
38762
- function* evaluateObject(values) {
38763
- const result = {};
38764
- const keys3 = Object.keys(values);
38765
- const promises = [];
38766
- for (const key7 of keys3) {
38767
- const generator = values[key7];
38768
- if (isGenerator2(generator)) {
38769
- const state2 = generator.next();
38770
- if (state2.done) {
38771
- result[key7] = state2.value;
38772
- }
38773
- else {
38774
- promises.push(evaluateAsync(generator, state2).then((value) => {
38775
- result[key7] = value;
38776
- }));
38777
- }
38778
- }
38779
- else {
38780
- result[key7] = generator;
38781
- }
38782
- }
38783
- if (promises.length > 0) {
38784
- yield Promise.all(promises);
38785
- }
38786
- return result;
38787
- }
38788
- function* evaluateArray(values) {
38789
- const result = [];
38790
- const keys3 = values.keys();
38791
- const promises = [];
38792
- for (const key7 of keys3) {
38793
- const generator = values[key7];
38794
- if (isGenerator2(generator)) {
38795
- const state2 = generator.next();
38796
- if (state2.done) {
38797
- result[key7] = state2.value;
38798
- }
38799
- else {
38800
- promises.push(evaluateAsync(generator, state2).then((value) => {
38801
- result[key7] = value;
38802
- }));
38803
- }
38804
- }
38805
- else {
38806
- result[key7] = generator;
38807
- }
38808
- }
38809
- if (promises.length > 0) {
38810
- yield Promise.all(promises);
38811
- }
38812
- return result;
38813
- }
38814
39166
  var RequiredProps = class {
38815
39167
  constructor(ordering, resolvedFields) {
38816
39168
  this.ordering = ordering;
@@ -38863,8 +39215,11 @@ var Tuple = class {
38863
39215
  __publicField(this, 'values', /* @__PURE__ */ new Map());
38864
39216
  }
38865
39217
  getKey() {
38866
- const pointers = this.pointers.values();
38867
- return Array.from(pointers).join('-');
39218
+ const result = [];
39219
+ for (const [collection, pointer,] of this.pointers) {
39220
+ result.push(`${collection.id}-${pointer}`);
39221
+ }
39222
+ return result.sort().join('-');
38868
39223
  }
38869
39224
  addValue(field, value) {
38870
39225
  this.values.set(field, value);
@@ -38961,49 +39316,6 @@ var Relation = class {
38961
39316
  return result;
38962
39317
  }
38963
39318
  };
38964
- var AbstractNode = class {
38965
- constructor(isSynchronous) {
38966
- this.isSynchronous = isSynchronous;
38967
- }
38968
- };
38969
- var RelationalNode = class extends AbstractNode {
38970
- constructor() {
38971
- super(...arguments);
38972
- __publicField(this, 'group');
38973
- }
38974
- /**
38975
- * Returns the group that the node belongs to. Throws an error if the node
38976
- * is not in a group. This should only happen in the constructor because
38977
- * every node is added to a group right after creation.
38978
- */
38979
- getGroup() {
38980
- assert(this.group, 'Node must be in a group');
38981
- return this.group;
38982
- }
38983
- /**
38984
- * Adds the node to the given group. Throws an error if the node is already
38985
- * in a group.
38986
- */
38987
- setGroup(group) {
38988
- assert(!this.group, 'Node is already in a group');
38989
- this.group = group;
38990
- }
38991
- /**
38992
- * Evaluates the node and all children synchronously. Throws an error if the
38993
- * node is not synchronous.
38994
- */
38995
- evaluateSync() {
38996
- const generator = this.evaluate(void 0);
38997
- return evaluateSync(generator);
38998
- }
38999
- /**
39000
- * Evaluates the node and all children asynchronously.
39001
- */
39002
- evaluateAsync() {
39003
- const generator = this.evaluate(void 0);
39004
- return evaluateAsync(generator);
39005
- }
39006
- };
39007
39319
  var ProjectionField = class {
39008
39320
  constructor(input, field) {
39009
39321
  this.input = input;
@@ -39036,7 +39348,16 @@ var RelationalProject = class extends RelationalNode {
39036
39348
  }
39037
39349
  return fields;
39038
39350
  }
39039
- canProvideOrdering() {
39351
+ canProvideOrdering(ordering) {
39352
+ const projectionFields = new Fields();
39353
+ for (const projection of this.projections) {
39354
+ projectionFields.add(projection.field);
39355
+ }
39356
+ for (const { field, } of ordering.fields) {
39357
+ if (projectionFields.has(field)) {
39358
+ return false;
39359
+ }
39360
+ }
39040
39361
  return true;
39041
39362
  }
39042
39363
  canProvideResolvedFields() {
@@ -40089,21 +40410,19 @@ var RelationalLeftJoin = class extends RelationalNode {
40089
40410
  return new RelationalLeftJoin(left, right, constraint);
40090
40411
  }
40091
40412
  /** Optimized path for equality constraints that runs in O(n + m) time. */
40092
- *evaluateScalarEquals(result, constraint, context) {
40093
- const { left, right, } = yield* evaluateObject({
40094
- left: this.left.evaluate(context),
40095
- right: this.right.evaluate(context),
40096
- });
40413
+ *evaluateScalarEquals(left, right, leftConstraint, rightConstraint, context) {
40097
40414
  const joinKeyMap = /* @__PURE__ */ new Map();
40098
40415
  for (const rightTuple of right.tuples) {
40099
- const rightValue = yield* constraint.right.evaluate(context, rightTuple);
40416
+ const rightValue = yield* rightConstraint.evaluate(context, rightTuple);
40100
40417
  const key7 = JSON.stringify((rightValue == null ? void 0 : rightValue.value) ?? null);
40101
40418
  const tuplesForKey = joinKeyMap.get(key7) ?? [];
40102
40419
  tuplesForKey.push(rightTuple);
40103
40420
  joinKeyMap.set(key7, tuplesForKey);
40104
40421
  }
40422
+ const outputFields = this.getOutputFields();
40423
+ const result = new Relation(outputFields);
40105
40424
  for (const leftTuple of left.tuples) {
40106
- const leftValue = yield* constraint.left.evaluate(context, leftTuple);
40425
+ const leftValue = yield* leftConstraint.evaluate(context, leftTuple);
40107
40426
  const key7 = JSON.stringify((leftValue == null ? void 0 : leftValue.value) ?? null);
40108
40427
  const matches = joinKeyMap.get(key7) ?? [];
40109
40428
  if (matches.length === 0) {
@@ -40121,16 +40440,22 @@ var RelationalLeftJoin = class extends RelationalNode {
40121
40440
  return result;
40122
40441
  }
40123
40442
  *evaluate(context) {
40124
- const outputFields = this.getOutputFields();
40125
- const result = new Relation(outputFields);
40126
- if (this.constraint instanceof ScalarEquals) {
40127
- yield* this.evaluateScalarEquals(result.tuples, this.constraint, context);
40128
- return result;
40129
- }
40130
40443
  const { left, right, } = yield* evaluateObject({
40131
40444
  left: this.left.evaluate(context),
40132
40445
  right: this.right.evaluate(context),
40133
40446
  });
40447
+ if (this.constraint instanceof ScalarEquals) {
40448
+ if (this.constraint.left.referencedFields.subsetOf(this.leftGroup.relational.outputFields) &&
40449
+ this.constraint.right.referencedFields.subsetOf(this.rightGroup.relational.outputFields)) {
40450
+ return yield* this.evaluateScalarEquals(left, right, this.constraint.left, this.constraint.right, context);
40451
+ }
40452
+ if (this.constraint.right.referencedFields.subsetOf(this.leftGroup.relational.outputFields) &&
40453
+ this.constraint.left.referencedFields.subsetOf(this.rightGroup.relational.outputFields)) {
40454
+ return yield* this.evaluateScalarEquals(left, right, this.constraint.right, this.constraint.left, context);
40455
+ }
40456
+ }
40457
+ const outputFields = this.getOutputFields();
40458
+ const result = new Relation(outputFields);
40134
40459
  for (const leftTuple of left.tuples) {
40135
40460
  let hasMatch = false;
40136
40461
  for (const rightTuple of right.tuples) {
@@ -40207,21 +40532,19 @@ var RelationalRightJoin = class extends RelationalNode {
40207
40532
  return new RelationalRightJoin(left, right, constraint);
40208
40533
  }
40209
40534
  /** Optimized path for equality constraints that runs in O(n + m) time. */
40210
- *evaluateScalarEquals(result, constraint, context) {
40211
- const { left, right, } = yield* evaluateObject({
40212
- left: this.left.evaluate(context),
40213
- right: this.right.evaluate(context),
40214
- });
40535
+ *evaluateScalarEquals(left, right, leftConstraint, rightConstraint, context) {
40215
40536
  const joinKeyMap = /* @__PURE__ */ new Map();
40216
40537
  for (const leftTuple of left.tuples) {
40217
- const leftValue = yield* constraint.left.evaluate(context, leftTuple);
40538
+ const leftValue = yield* leftConstraint.evaluate(context, leftTuple);
40218
40539
  const key7 = JSON.stringify((leftValue == null ? void 0 : leftValue.value) ?? null);
40219
40540
  const tuplesForKey = joinKeyMap.get(key7) ?? [];
40220
40541
  tuplesForKey.push(leftTuple);
40221
40542
  joinKeyMap.set(key7, tuplesForKey);
40222
40543
  }
40544
+ const outputFields = this.getOutputFields();
40545
+ const result = new Relation(outputFields);
40223
40546
  for (const rightTuple of right.tuples) {
40224
- const rightValue = yield* constraint.right.evaluate(context, rightTuple);
40547
+ const rightValue = yield* rightConstraint.evaluate(context, rightTuple);
40225
40548
  const key7 = JSON.stringify((rightValue == null ? void 0 : rightValue.value) ?? null);
40226
40549
  const matches = joinKeyMap.get(key7) ?? [];
40227
40550
  if (matches.length === 0) {
@@ -40239,16 +40562,22 @@ var RelationalRightJoin = class extends RelationalNode {
40239
40562
  return result;
40240
40563
  }
40241
40564
  *evaluate(context) {
40242
- const outputFields = this.getOutputFields();
40243
- const result = new Relation(outputFields);
40244
- if (this.constraint instanceof ScalarEquals) {
40245
- yield* this.evaluateScalarEquals(result.tuples, this.constraint, context);
40246
- return result;
40247
- }
40248
40565
  const { left, right, } = yield* evaluateObject({
40249
40566
  left: this.left.evaluate(context),
40250
40567
  right: this.right.evaluate(context),
40251
40568
  });
40569
+ if (this.constraint instanceof ScalarEquals) {
40570
+ if (this.constraint.left.referencedFields.subsetOf(this.leftGroup.relational.outputFields) &&
40571
+ this.constraint.right.referencedFields.subsetOf(this.rightGroup.relational.outputFields)) {
40572
+ return yield* this.evaluateScalarEquals(left, right, this.constraint.left, this.constraint.right, context);
40573
+ }
40574
+ if (this.constraint.right.referencedFields.subsetOf(this.leftGroup.relational.outputFields) &&
40575
+ this.constraint.left.referencedFields.subsetOf(this.rightGroup.relational.outputFields)) {
40576
+ return yield* this.evaluateScalarEquals(left, right, this.constraint.right, this.constraint.left, context);
40577
+ }
40578
+ }
40579
+ const outputFields = this.getOutputFields();
40580
+ const result = new Relation(outputFields);
40252
40581
  for (const rightTuple of right.tuples) {
40253
40582
  let hasMatch = false;
40254
40583
  for (const leftTuple of left.tuples) {
@@ -40846,7 +41175,7 @@ var Explorer = class {
40846
41175
  explore(before) {
40847
41176
  const group = before.getGroup();
40848
41177
  if (before instanceof RelationalLeftJoin) {
40849
- const after = new RelationalRightJoin(before.left, before.right, before.constraint);
41178
+ const after = new RelationalRightJoin(before.right, before.left, before.constraint);
40850
41179
  this.memo.addRelational(after, group);
40851
41180
  }
40852
41181
  if (before instanceof RelationalFilter) {
@@ -40983,63 +41312,6 @@ function createIndexQueryAll(length) {
40983
41312
  };
40984
41313
  return new Array(length).fill(lookup);
40985
41314
  }
40986
- function GroupId(id3) {
40987
- return id3;
40988
- }
40989
- var Group = class {
40990
- constructor(id3, relational) {
40991
- this.id = id3;
40992
- this.relational = relational;
40993
- __publicField(this, 'nodes', []);
40994
- __publicField(this, 'winners', /* @__PURE__ */ new Map());
40995
- }
40996
- /**
40997
- * Adds a node to the group. Throws an error if the node is already in a
40998
- * group.
40999
- */
41000
- addNode(node) {
41001
- this.nodes.push(node);
41002
- node.setGroup(this);
41003
- }
41004
- /**
41005
- * Returns the winner for the given required physical props. The winner
41006
- * stores the best node and its cost. This is used to find the best node in
41007
- * the group.
41008
- */
41009
- getWinner(required) {
41010
- const hash2 = required.getHash();
41011
- const existing = this.winners.get(hash2);
41012
- if (existing)
41013
- return existing;
41014
- const winner = new Winner();
41015
- this.winners.set(hash2, winner);
41016
- return winner;
41017
- }
41018
- /**
41019
- * Returns the optimized version of the node. The optimized version is the
41020
- * node with the lowest cost with all children replaced with their optimized
41021
- * versions. This is used to create the final optimized query plan.
41022
- */
41023
- getOptimized(required) {
41024
- const winner = this.getWinner(required);
41025
- assert(winner.node, 'Group not optimized');
41026
- const optimizer = winner.node.getOptimized(required);
41027
- optimizer.setGroup(this);
41028
- return optimizer;
41029
- }
41030
- };
41031
- var Winner = class {
41032
- constructor() {
41033
- __publicField(this, 'node');
41034
- __publicField(this, 'cost', new Cost(Infinity));
41035
- }
41036
- update(node, cost) {
41037
- if (Cost.compare(cost, this.cost) < 0) {
41038
- this.node = node;
41039
- this.cost = cost;
41040
- }
41041
- }
41042
- };
41043
41315
  var RelationalProps = class {
41044
41316
  constructor(outputFields) {
41045
41317
  this.outputFields = outputFields;
@@ -41206,9 +41478,11 @@ var EnforcerSort = class extends EnforcerNode {
41206
41478
  getInputRequiredProps(required) {
41207
41479
  const resolvedFields = new Fields(required.resolvedFields);
41208
41480
  for (const { field, } of this.ordering.fields) {
41209
- if (field.name !== VIRTUAL_INDEX_FIELD) {
41210
- resolvedFields.add(field);
41211
- }
41481
+ if (field.name === VIRTUAL_INDEX_FIELD)
41482
+ continue;
41483
+ if (isUndefined(field.collection))
41484
+ continue;
41485
+ resolvedFields.add(field);
41212
41486
  }
41213
41487
  const ordering = new Ordering();
41214
41488
  return new RequiredProps(ordering, resolvedFields);
@@ -41399,6 +41673,8 @@ var ScalarArray = class extends ScalarNode {
41399
41673
  const resolvedFields = new Fields();
41400
41674
  const fields = Object.values(this.namedFields);
41401
41675
  for (const field of fields) {
41676
+ if (isUndefined(field.collection))
41677
+ continue;
41402
41678
  resolvedFields.add(field);
41403
41679
  }
41404
41680
  return new RequiredProps(this.ordering, resolvedFields);
@@ -41485,7 +41761,9 @@ var ScalarFlatArray = class extends ScalarNode {
41485
41761
  }
41486
41762
  getInputRequiredProps() {
41487
41763
  const resolvedFields = new Fields();
41488
- resolvedFields.add(this.field);
41764
+ if (!isUndefined(this.field.collection)) {
41765
+ resolvedFields.add(this.field);
41766
+ }
41489
41767
  return new RequiredProps(this.ordering, resolvedFields);
41490
41768
  }
41491
41769
  optimize(optimizer) {
@@ -41513,7 +41791,7 @@ var ScalarFlatArray = class extends ScalarNode {
41513
41791
  };
41514
41792
  }
41515
41793
  };
41516
- var collation7 = {
41794
+ var collation8 = {
41517
41795
  type: 0,
41518
41796
  /* CaseInsensitive */
41519
41797
  };
@@ -41557,11 +41835,11 @@ var ScalarIn = class extends ScalarNode {
41557
41835
  });
41558
41836
  return {
41559
41837
  type: 'boolean',
41560
- value: DatabaseValue.in(left, right, collation7),
41838
+ value: DatabaseValue.in(left, right, collation8),
41561
41839
  };
41562
41840
  }
41563
41841
  };
41564
- var collation8 = {
41842
+ var collation9 = {
41565
41843
  type: 1,
41566
41844
  /* CaseSensitive */
41567
41845
  };
@@ -41605,7 +41883,7 @@ var ScalarIndexOf = class extends ScalarNode {
41605
41883
  });
41606
41884
  return {
41607
41885
  type: 'number',
41608
- value: DatabaseValue.indexOf(source, target, collation8),
41886
+ value: DatabaseValue.indexOf(source, target, collation9),
41609
41887
  };
41610
41888
  }
41611
41889
  };
@@ -41669,7 +41947,7 @@ var ScalarNot = class extends ScalarNode {
41669
41947
  };
41670
41948
  }
41671
41949
  };
41672
- var collation9 = {
41950
+ var collation10 = {
41673
41951
  type: 0,
41674
41952
  /* CaseInsensitive */
41675
41953
  };
@@ -41713,7 +41991,7 @@ var ScalarNotIn = class extends ScalarNode {
41713
41991
  });
41714
41992
  return {
41715
41993
  type: 'boolean',
41716
- value: !DatabaseValue.in(left, right, collation9),
41994
+ value: !DatabaseValue.in(left, right, collation10),
41717
41995
  };
41718
41996
  }
41719
41997
  };
@@ -42091,6 +42369,11 @@ var Optimizer = class {
42091
42369
  this.explorer.explore(node);
42092
42370
  }
42093
42371
  }
42372
+ if (false) {
42373
+ assert(winner.node, 'Group not optimized');
42374
+ const cache2 = /* @__PURE__ */ new Map();
42375
+ winner.node = new RelationalAssert(winner.node, required, cache2);
42376
+ }
42094
42377
  return winner.cost;
42095
42378
  }
42096
42379
  createEnforcer(winner, node, required) {
@@ -42366,7 +42649,7 @@ var AnimationCollector = class {
42366
42649
  };
42367
42650
  _variantHashes = /* @__PURE__ */ new WeakMap();
42368
42651
  var framerAppearEffects = /* @__PURE__ */ new AnimationCollector();
42369
- function withOptimizedAppearEffect(Component16) {
42652
+ function withOptimizedAppearEffect(Component18) {
42370
42653
  return React4.forwardRef(({ optimized, ...props }, ref) => {
42371
42654
  const generatedComponentContext = React4.useContext(GeneratedComponentContext);
42372
42655
  const variants = React4.useContext(SSRParentVariantsContext);
@@ -42380,7 +42663,7 @@ function withOptimizedAppearEffect(Component16) {
42380
42663
  // should not be optimized.
42381
42664
  optimized ? props : null, generatedComponentContext);
42382
42665
  }
42383
- return /* @__PURE__ */ jsx(Component16, {
42666
+ return /* @__PURE__ */ jsx(Component18, {
42384
42667
  ref,
42385
42668
  ...props,
42386
42669
  });
@@ -42941,49 +43224,49 @@ function usePrototypeNavigate({ preload, } = {}) {
42941
43224
  navigation.goBack();
42942
43225
  return false;
42943
43226
  }
42944
- const Component16 = typeof target === 'string'
43227
+ const Component18 = typeof target === 'string'
42945
43228
  ? await componentForRoute(getRoute == null ? void 0 : getRoute(target)).catch(() => { })
42946
43229
  : React4.isValidElement(target)
42947
43230
  ? target
42948
43231
  : null;
42949
- if (!Component16)
43232
+ if (!Component18)
42950
43233
  return;
42951
43234
  const { appearsFrom, backdropColor, animation, } = options;
42952
43235
  const transitionType = options.transition || 'instant';
42953
43236
  switch (transitionType) {
42954
43237
  case 'instant':
42955
- navigation.instant(Component16);
43238
+ navigation.instant(Component18);
42956
43239
  break;
42957
43240
  case 'fade':
42958
- navigation.fade(Component16, {
43241
+ navigation.fade(Component18, {
42959
43242
  animation,
42960
43243
  });
42961
43244
  break;
42962
43245
  case 'push':
42963
- navigation.push(Component16, {
43246
+ navigation.push(Component18, {
42964
43247
  appearsFrom,
42965
43248
  animation,
42966
43249
  });
42967
43250
  break;
42968
43251
  case 'flip':
42969
- navigation.flip(Component16, {
43252
+ navigation.flip(Component18, {
42970
43253
  appearsFrom,
42971
43254
  animation,
42972
43255
  });
42973
43256
  break;
42974
43257
  case 'magicMotion':
42975
- navigation.magicMotion(Component16, {
43258
+ navigation.magicMotion(Component18, {
42976
43259
  animation,
42977
43260
  });
42978
43261
  break;
42979
43262
  case 'modal':
42980
- navigation.modal(Component16, {
43263
+ navigation.modal(Component18, {
42981
43264
  backdropColor,
42982
43265
  animation,
42983
43266
  });
42984
43267
  break;
42985
43268
  case 'overlay':
42986
- navigation.overlay(Component16, {
43269
+ navigation.overlay(Component18, {
42987
43270
  appearsFrom,
42988
43271
  backdropColor,
42989
43272
  animation,
@@ -43355,6 +43638,71 @@ function useVariantState({ variant, defaultVariant: externalDefaultVariant, tran
43355
43638
  variantClassNames,
43356
43639
  ]);
43357
43640
  }
43641
+ function withCodeBoundaryForOverrides(Component18, { scopeId, nodeId, override, inComponentSlot, }) {
43642
+ if (!shouldEnableCodeBoundaries()) {
43643
+ return override(Component18);
43644
+ }
43645
+ const appliedOverride = tryToApplyOverride(Component18, override);
43646
+ let hasErrorBeenLogged = false;
43647
+ function CodeBoundaryForOverrides(props, ref) {
43648
+ const externalComponentNestingLevel = useExternalComponentNestingLevel();
43649
+ const shouldWrapWithBoundary = shouldWrapOverrideWithBoundary(externalComponentNestingLevel, inComponentSlot ?? false);
43650
+ if (shouldWrapWithBoundary) {
43651
+ if (appliedOverride.status === 'success') {
43652
+ return /* @__PURE__ */ jsx(CodeComponentBoundary, {
43653
+ errorMessage: getErrorMessageForOverride(scopeId, nodeId),
43654
+ fallback: /* @__PURE__ */ jsx(Component18, {
43655
+ ...props,
43656
+ ref,
43657
+ }),
43658
+ children: /* @__PURE__ */ jsx(appliedOverride.Component, {
43659
+ ...props,
43660
+ ref,
43661
+ }),
43662
+ });
43663
+ }
43664
+ else {
43665
+ if (!hasErrorBeenLogged) {
43666
+ logError(appliedOverride.error);
43667
+ logError(getErrorMessageForOverride(scopeId, nodeId));
43668
+ collectErrorToAnalytics(appliedOverride.error);
43669
+ hasErrorBeenLogged = true;
43670
+ }
43671
+ return /* @__PURE__ */ jsx(Component18, {
43672
+ ...props,
43673
+ ref,
43674
+ });
43675
+ }
43676
+ }
43677
+ else {
43678
+ if (appliedOverride.status === 'success') {
43679
+ return /* @__PURE__ */ jsx(appliedOverride.Component, {
43680
+ ...props,
43681
+ ref,
43682
+ });
43683
+ }
43684
+ else {
43685
+ throw appliedOverride.error;
43686
+ }
43687
+ }
43688
+ }
43689
+ return React4.forwardRef(CodeBoundaryForOverrides);
43690
+ }
43691
+ function tryToApplyOverride(Component18, override) {
43692
+ try {
43693
+ const ComponentWithOverrides = override(Component18);
43694
+ return {
43695
+ status: 'success',
43696
+ Component: ComponentWithOverrides,
43697
+ };
43698
+ }
43699
+ catch (error) {
43700
+ return {
43701
+ status: 'error',
43702
+ error,
43703
+ };
43704
+ }
43705
+ }
43358
43706
  function extractMappingFromInfo(info) {
43359
43707
  var _a;
43360
43708
  const json = (_a = info.__FramerMetadata__.exports.default.annotations) == null ? void 0 : _a.framerVariables;
@@ -43367,14 +43715,14 @@ function extractMappingFromInfo(info) {
43367
43715
  return void 0;
43368
43716
  }
43369
43717
  }
43370
- function withMappedReactProps(Component16, info) {
43718
+ function withMappedReactProps(Component18, info) {
43371
43719
  return (rawProps) => {
43372
43720
  const props = {};
43373
43721
  const mapping = extractMappingFromInfo(info);
43374
43722
  for (const key7 in rawProps) {
43375
43723
  asRecord(props)[(mapping == null ? void 0 : mapping[key7]) ?? key7] = rawProps[key7];
43376
43724
  }
43377
- return /* @__PURE__ */ jsx(Component16, {
43725
+ return /* @__PURE__ */ jsx(Component18, {
43378
43726
  ...props,
43379
43727
  });
43380
43728
  };
@@ -43417,9 +43765,9 @@ function createInputOutputRanges2(transformTargets, threshold, exitTarget) {
43417
43765
  outputRange: [-1, -1, ...outputRange,],
43418
43766
  };
43419
43767
  }
43420
- var withVariantAppearEffect = (Component16) => React4.forwardRef((props, forwardedRef) => {
43768
+ var withVariantAppearEffect = (Component18) => React4.forwardRef((props, forwardedRef) => {
43421
43769
  if (RenderTarget.current() === RenderTarget.canvas) {
43422
- return /* @__PURE__ */ jsx(Component16, {
43770
+ return /* @__PURE__ */ jsx(Component18, {
43423
43771
  ...props,
43424
43772
  ref: forwardedRef,
43425
43773
  });
@@ -43504,26 +43852,26 @@ var withVariantAppearEffect = (Component16) => React4.forwardRef((props, forward
43504
43852
  repeat: !animateOnce,
43505
43853
  });
43506
43854
  if (!('variantAppearEffectEnabled' in options) || variantAppearEffectEnabled === true) {
43507
- return /* @__PURE__ */ jsx(Component16, {
43855
+ return /* @__PURE__ */ jsx(Component18, {
43508
43856
  ...rest,
43509
43857
  variant: activeVariant ?? props.variant,
43510
43858
  ref: observerRef,
43511
43859
  });
43512
43860
  }
43513
43861
  else {
43514
- return /* @__PURE__ */ jsx(Component16, {
43862
+ return /* @__PURE__ */ jsx(Component18, {
43515
43863
  ...rest,
43516
43864
  });
43517
43865
  }
43518
43866
  });
43519
- var withVariantFX = (Component16) => React4.forwardRef(({ initial, animate: animate3, exit, ...props }, forwardedRef) => {
43867
+ var withVariantFX = (Component18) => React4.forwardRef(({ initial, animate: animate3, exit, ...props }, forwardedRef) => {
43520
43868
  const observerRef = useObserverRef(forwardedRef);
43521
43869
  const effect = usePresenceAnimation({
43522
43870
  initial,
43523
43871
  animate: animate3,
43524
43872
  exit,
43525
43873
  }, observerRef, true);
43526
- return /* @__PURE__ */ jsx(Component16, {
43874
+ return /* @__PURE__ */ jsx(Component18, {
43527
43875
  ...props,
43528
43876
  style: {
43529
43877
  ...(props == null ? void 0 : props.style),
@@ -46980,10 +47328,10 @@ var RichTextContainer = /* @__PURE__ */ forwardRef((props, ref) => {
46980
47328
  if (layoutId) {
46981
47329
  rest.layout = 'preserve-aspect';
46982
47330
  }
46983
- const Component16 = htmlElementAsMotionComponent(props.as);
47331
+ const Component18 = htmlElementAsMotionComponent(props.as);
46984
47332
  if (isString2(props.viewBox)) {
46985
47333
  if (props.as !== void 0) {
46986
- return /* @__PURE__ */ jsx(Component16, {
47334
+ return /* @__PURE__ */ jsx(Component18, {
46987
47335
  ...rest,
46988
47336
  ref: containerRef,
46989
47337
  style: containerStyle,
@@ -47017,7 +47365,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef((props, ref) => {
47017
47365
  });
47018
47366
  }
47019
47367
  }
47020
- return /* @__PURE__ */ jsx(Component16, {
47368
+ return /* @__PURE__ */ jsx(Component18, {
47021
47369
  ...rest,
47022
47370
  ref: containerRef,
47023
47371
  style: containerStyle,
@@ -49421,7 +49769,7 @@ MotionValue.prototype.addChild = function ({ transformer = (v) => v, }) {
49421
49769
  if (false) {
49422
49770
  MainLoop2.start();
49423
49771
  }
49424
- export { _injectRuntime, AcceleratedAnimation, addActionControls, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, AnchorLinkTarget, Animatable, animate2 as animate, animateMini, AnimatePresence, AnimateSharedLayout, animateValue, animateVisualElement, animationControls, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform, calcLength, calculateRect, callEach, cancelFrame, cancelSync, ChildrenCanSuspend, circIn, circInOut, circOut, clamp, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertPresentationTree, convertPropsToDeviceOptions, createBox, createData, createFramerPageLink, createRendererMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, domMax, domMin, DragControls, Draggable, easeIn, easeInOut, easeOut, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, filterProps, findSpring, finiteNumber, FlatTree, Floating, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, frameSteps, FrameWithMotion, GamepadContext, GeneratedComponentContext, getComponentSize, getDevicePreset, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getLoadingLazyAtYPosition, getMeasurableCodeComponentChildren, getPropertyControls, getWhereExpressionFromPathVariables, gradientForShape, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inertia, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, InternalID, interpolate, invariant, inView, isAnimatable2 as isAnimatable, isBrowser, isDesignDefinition, isDragActive, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isMotionComponent, isMotionValue2 as isMotionValue, isOfAnnotatedType, isOverride, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStraightCurve, isValidMotionProp, keyframes, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, markHydrationStart, memoize2 as memoize, mirrorEasing, mix, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, namespace_exports as Reorder, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, nestedLinksCollector, NotFoundError, ObservableObject, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseFramerPageLink, pathDefaults, PathSegment, PathVariablesContext, pipe, Point, Polygon, preloadImage, PresenceContext, print, progress, PropertyOverrides2 as PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryEngine, RadialGradient, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, RenderTarget, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, RichText2 as RichText, roundedNumber, roundedNumberString, roundWithOffset, Scroll, scroll, scrollInfo, setGlobalRenderEnvironment, setInitialHydrationState, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, spring, SpringAnimator, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, steps, StyleSheetContext, SVG, SwitchLayoutGroupContext, sync, systemFontFamilyName, Text2 as Text, throttle, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformString2 as transformString, transformTemplate, 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, useLoadMorePaginatedQuery, useLocale, useLocaleCode, useLocaleInfo, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSpring, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, version, VisualElement, visualElementStore, warning, WindowContext, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, withOptimizedAppearEffect, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withVariantAppearEffect, withVariantFX, wrap, };
49772
+ export { _injectRuntime, AcceleratedAnimation, addActionControls, addFonts, addPointerEvent, addPointerInfo, addPropertyControls, addScaleCorrector, AnchorLinkTarget, Animatable, animate2 as animate, animateMini, AnimatePresence, AnimateSharedLayout, animateValue, animateVisualElement, animationControls, animations, annotateTypeOnStringify, anticipate, AnyInterpolation, AutomaticLayoutIds, BackgroundImage, backgroundImageFromProps, backIn, backInOut, backOut, BezierAnimator, BoxShadow, buildTransform, calcLength, calculateRect, callEach, cancelFrame, cancelSync, ChildrenCanSuspend, circIn, circInOut, circOut, clamp, collectVisualStyleFromProps, Color, color, ColorFormat, ColorMixModelType, combinedCSSRulesForPreview, complex, ComponentContainerContext, ComponentPresetsConsumer, ComponentPresetsProvider, ComponentViewportProvider, ConstraintMask, constraintsEnabled, ConstraintValues, Container, ControlType, ConvertColor, convertPresentationTree, convertPropsToDeviceOptions, createBox, createData, createFramerPageLink, createRendererMotionComponent, createScopedAnimate, cssBackgroundSize, cubicBezier, CustomCursorHost, CustomProperties, cx, CycleVariantState, Data, DataContext, DataObserver, DataObserverContext, debounce, defaultDeviceProps, degreesToRadians, delay, DeprecatedComponentContainer, DeprecatedFrameWithEvents, DeprecatedLayoutGroupContext, DeprecatedLayoutGroupContext as LayoutGroupContext, Device, DeviceCodeComponent, devicePresets, DimensionType, disableInstantTransitions, dispatchKeyDownEvent, distance, distance2D, DOM, domAnimation, domMax, domMin, DragControls, Draggable, easeIn, easeInOut, easeOut, EmptyState, environment, ErrorPlaceholder, executeInRenderEnvironment, Fetcher, filterProps, findSpring, finiteNumber, FlatTree, Floating, FontSourceNames, fontStore, forceLayerBackingWithCSSProperties, FormBooleanInput, FormContainer, FormPlainTextInput2 as FormPlainTextInput, FormSelect, fraction, Frame, frame, frameData, frameFromElement, frameFromElements, FramerAnimation, framerAppearAnimationScriptKey, framerAppearEffects, framerAppearIdKey, framerAppearTransformTemplateToken, framerCSSMarker, FramerEvent, FramerEventListener, FramerEventSession, frameSteps, FrameWithMotion, GamepadContext, GeneratedComponentContext, getComponentSize, getDevicePreset, getFonts, getFontsFromComponentPreset, getFontsFromSharedStyle, getLoadingLazyAtYPosition, getMeasurableCodeComponentChildren, getPropertyControls, getWhereExpressionFromPathVariables, gradientForShape, Image2 as Image, imagePatternPropsForFill, imageUrlForAsset, inertia, inferInitialRouteFromPath, injectComponentCSSRules, installFlexboxGapWorkaroundIfNeeded, InternalID, interpolate, invariant, inView, isAnimatable2 as isAnimatable, isBrowser, isDesignDefinition, isDragActive, isEqual, isFiniteNumber, isFractionDimension, isFramerGamepadKeydownData, isFramerPageLink, isGapEnabled, isMotionComponent, isMotionValue2 as isMotionValue, isOfAnnotatedType, isOverride, isReactDefinition, isRelativeNumber, isShallowEqualArray, isStraightCurve, isValidMotionProp, keyframes, Layer, LayoutGroup, LayoutIdContext, lazy, LazyMotion, LazyValue, LibraryFeaturesProvider, Line, LinearGradient, Link, loadFont, loadJSON, localPackageFallbackIdentifier, localShadowFrame, m, MainLoop, makePaddingString, makeUseVisualState, markHydrationStart, memoize2 as memoize, mirrorEasing, mix, modulate, motion, MotionConfig, MotionConfigContext, MotionContext, MotionGlobalConfig, MotionSetup, MotionValue, motionValue, namespace_exports as Reorder, NavigateTo, NavigationCallbackProvider, NavigationConsumer, NavigationTransitionType, NavigationWrapper as Navigation, nestedLinksCollector, NotFoundError, ObservableObject, optimizeAppear, optimizeAppearTransformTemplate, optimizedAppearDataAttribute, paddingFromProps, Page3 as Page, PageEffectsProvider, PageRoot, ParentSizeState, parseFramerPageLink, pathDefaults, PathSegment, PathVariablesContext, pipe, Point, Polygon, preloadImage, PresenceContext, print, progress, PropertyOverrides2 as PropertyOverrides, PropertyStore, propsForLink, pushLoadMoreHistory, px, QueryEngine, RadialGradient, Rect, removeHiddenBreakpointLayers, removeHiddenBreakpointLayersV2, RenderTarget, resolveLink, ResolveLinks, resolveMotionValue, resolvePageScope, reverseEasing, RichText2 as RichText, roundedNumber, roundedNumberString, roundWithOffset, Scroll, scroll, scrollInfo, setGlobalRenderEnvironment, setInitialHydrationState, Shadow, sharedSVGManager, shouldOpenLinkInNewTab, Size, SmartComponentScopedContainer, spring, SpringAnimator, SSRVariants, Stack, stagger, startAnimation, startOptimizedAppearAnimation, steps, StyleSheetContext, SVG, SwitchLayoutGroupContext, sync, systemFontFamilyName, Text2 as Text, throttle, toFlexDirection, toJustifyOrAlignment, toSVGPath, transform, transformString2 as transformString, transformTemplate, 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, useLoadMorePaginatedQuery, useLocale, useLocaleCode, useLocaleInfo, useLocalizationInfo, useMeasureLayout, useMotionTemplate, useMotionValue, useMotionValueEvent, useNavigate, useNavigation, useObserveData, useOnAppear, useOnCurrentTargetChange, useOnVariantChange, useOverlayState, usePageEffects, usePrefetch, usePreloadQuery, usePresence, usePrototypeNavigate, useProvidedWindow, useQueryData, useReducedMotion, useReducedMotionConfig, useRenderEnvironment, useResetProjection, useRoute, useRouteAnchor, useRouteElementId, useRouteHandler, useRouter, useScroll, useSpring, useTime, useTransform, useUnmountEffect, useVariantState, useVelocity, useViewportScroll, useWillChange, ValueInterpolation, valueToDimensionType, VariantSelector, Vector, VectorGroup, version, VisualElement, visualElementStore, warning, WindowContext, withCodeBoundaryForOverrides, withCSS, withFX, withGeneratedLayoutId, withInfiniteScroll, withMappedReactProps, withMeasuredSize, WithNavigator, withOpacity, withOptimizedAppearEffect, WithOverride, withParallaxTransform, withPath, withPerformanceMarks, withShape, withStyleAppearEffect, withVariantAppearEffect, withVariantFX, wrap, };
49425
49773
  /**
49426
49774
  * @license Emotion v11.0.0
49427
49775
  * MIT License
@@ -49468,5 +49816,6 @@ if (typeof document !== 'undefined') {
49468
49816
  }
49469
49817
  document.head.appendChild(fragment);
49470
49818
  }
49471
- export { Router, FetchClientProvider, FormContext };
49819
+ export { Link as FramerLink };
49820
+ export { Router, FetchClientProvider, FormContext, LocaleInfoContext };
49472
49821
  //# sourceMappingURL=framer.js.map