unframer 4.1.9 → 4.2.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 (85) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +238 -15
  4. package/dist/cli.js.map +1 -1
  5. package/dist/exporter.d.ts.map +1 -1
  6. package/dist/exporter.js +29 -5
  7. package/dist/exporter.js.map +1 -1
  8. package/dist/framer-chunks/{SqliteDatabase-VAKIICSG-W43ZSXBO.js → SqliteDatabase-VAKIICSG-OPV4MG3Y.js} +5 -4
  9. package/dist/framer-chunks/{chunk-WYG6DFEF.js → chunk-7ZLQTYXQ.js} +4 -23
  10. package/dist/framer-chunks/chunk-IKQSD2QC.js +10 -0
  11. package/dist/framer-chunks/default-blog-sqlite-7ZHEY3GT-TVGUYU6H.js +7 -0
  12. package/dist/framer-chunks/fontshare-4THNDPMZ-FLLTWCDO.js +7 -0
  13. package/dist/framer-chunks/fontshare-B2QLD7YB-5V3XZJAH.js +7 -0
  14. package/dist/framer-chunks/fontshare-O22OBJ3D-FIG3CRN3.js +7 -0
  15. package/dist/framer-chunks/framer-font-45AI7UCZ-CKGC4MJC.js +7 -0
  16. package/dist/framer-chunks/google-3FCAKCAC-AM34UPJK.js +7 -0
  17. package/dist/framer-chunks/google-3SZHWBC6-2VTQEQ7J.js +7 -0
  18. package/dist/framer-chunks/google-GXDJLGJB-JNEJGCGD.js +7 -0
  19. package/dist/framer-chunks/sqlite-wasm-FGP37EAY-NO5QVZDI.js +7 -0
  20. package/dist/framer-chunks/sqlite3-SISQ6ENZ-5WRKGWTY.js +7 -0
  21. package/dist/framer.d.ts +128 -0
  22. package/dist/framer.js +395 -393
  23. package/dist/plugin-mcp-dist/lib/framer.d.ts.map +1 -1
  24. package/dist/plugin-mcp-dist/lib/framer.js +30 -14
  25. package/dist/plugin-mcp-dist/lib/framer.js.map +1 -1
  26. package/dist/plugin-mcp-dist/lib/framer.test.js +34 -64
  27. package/dist/plugin-mcp-dist/lib/framer.test.js.map +1 -1
  28. package/dist/plugin-mcp-dist/lib/mcp-handlers.d.ts.map +1 -1
  29. package/dist/plugin-mcp-dist/lib/mcp-handlers.js +59 -0
  30. package/dist/plugin-mcp-dist/lib/mcp-handlers.js.map +1 -1
  31. package/dist/plugin-mcp-dist/lib/react-export.d.ts.map +1 -1
  32. package/dist/plugin-mcp-dist/lib/react-export.js +79 -61
  33. package/dist/plugin-mcp-dist/lib/react-export.js.map +1 -1
  34. package/dist/plugin-mcp-dist/lib/schema.d.ts +8 -0
  35. package/dist/plugin-mcp-dist/lib/schema.d.ts.map +1 -1
  36. package/dist/plugin-mcp-dist/lib/schema.js +18 -1
  37. package/dist/plugin-mcp-dist/lib/schema.js.map +1 -1
  38. package/dist/plugin-mcp-dist/lib/store.d.ts +1 -1
  39. package/dist/plugin-mcp-dist/lib/store.d.ts.map +1 -1
  40. package/dist/plugin-mcp-dist/lib/utils.d.ts.map +1 -1
  41. package/dist/plugin-mcp-dist/lib/utils.js +11 -7
  42. package/dist/plugin-mcp-dist/lib/utils.js.map +1 -1
  43. package/dist/react.d.ts.map +1 -1
  44. package/dist/react.js +0 -2
  45. package/dist/react.js.map +1 -1
  46. package/dist/version.d.ts +1 -1
  47. package/dist/version.js +1 -1
  48. package/package.json +4 -5
  49. package/src/cli.ts +265 -14
  50. package/src/exporter.ts +39 -6
  51. package/src/framer.d.ts +128 -0
  52. package/src/framer.js +395 -393
  53. package/src/plugin-mcp-dist/lib/framer.d.ts.map +1 -1
  54. package/src/plugin-mcp-dist/lib/framer.js +30 -14
  55. package/src/plugin-mcp-dist/lib/framer.js.map +1 -1
  56. package/src/plugin-mcp-dist/lib/framer.test.js +34 -64
  57. package/src/plugin-mcp-dist/lib/framer.test.js.map +1 -1
  58. package/src/plugin-mcp-dist/lib/mcp-handlers.d.ts +2 -2
  59. package/src/plugin-mcp-dist/lib/mcp-handlers.d.ts.map +1 -1
  60. package/src/plugin-mcp-dist/lib/mcp-handlers.js +59 -0
  61. package/src/plugin-mcp-dist/lib/mcp-handlers.js.map +1 -1
  62. package/src/plugin-mcp-dist/lib/react-export.d.ts +1 -1
  63. package/src/plugin-mcp-dist/lib/react-export.d.ts.map +1 -1
  64. package/src/plugin-mcp-dist/lib/react-export.js +79 -61
  65. package/src/plugin-mcp-dist/lib/react-export.js.map +1 -1
  66. package/src/plugin-mcp-dist/lib/schema.d.ts +11 -3
  67. package/src/plugin-mcp-dist/lib/schema.d.ts.map +1 -1
  68. package/src/plugin-mcp-dist/lib/schema.js +18 -1
  69. package/src/plugin-mcp-dist/lib/schema.js.map +1 -1
  70. package/src/plugin-mcp-dist/lib/utils.d.ts.map +1 -1
  71. package/src/plugin-mcp-dist/lib/utils.js +11 -7
  72. package/src/plugin-mcp-dist/lib/utils.js.map +1 -1
  73. package/src/react.tsx +0 -3
  74. package/src/styles/framer.css +34 -64
  75. package/src/version.ts +1 -1
  76. package/dist/framer-chunks/default-blog-sqlite-7ZHEY3GT-DXFOTMBP.js +0 -9
  77. package/dist/framer-chunks/fontshare-4THNDPMZ-L3NZDIOE.js +0 -27099
  78. package/dist/framer-chunks/fontshare-B2QLD7YB-ZLNQ44LW.js +0 -119
  79. package/dist/framer-chunks/fontshare-O22OBJ3D-VY7WF3BB.js +0 -825
  80. package/dist/framer-chunks/framer-font-45AI7UCZ-Z3XHDH5K.js +0 -7
  81. package/dist/framer-chunks/google-3FCAKCAC-K2ZVMKHN.js +0 -623876
  82. package/dist/framer-chunks/google-3SZHWBC6-MIC5SCB4.js +0 -1627
  83. package/dist/framer-chunks/google-GXDJLGJB-356NWSZ7.js +0 -6885
  84. package/dist/framer-chunks/sqlite-wasm-FGP37EAY-MBPG3MPB.js +0 -11479
  85. package/dist/framer-chunks/sqlite3-SISQ6ENZ-RRHGROT5.js +0 -9
package/src/framer.js CHANGED
@@ -12,7 +12,8 @@ import {
12
12
  __require,
13
13
  __runInitializers,
14
14
  __toESM,
15
- } from './framer-chunks/chunk-WYG6DFEF.js';
15
+ } from './framer-chunks/chunk-7ZLQTYXQ.js';
16
+ import './framer-chunks/chunk-IKQSD2QC.js';
16
17
 
17
18
  // /:https://app.framerstatic.com/chunk-7KEO2DXG.mjs
18
19
  import { createContext, } from 'react';
@@ -12752,7 +12753,7 @@ function ReorderItemComponent({
12752
12753
  }
12753
12754
  var ReorderItem = /* @__PURE__ */ forwardRef(ReorderItemComponent,);
12754
12755
 
12755
- // /:https://app.framerstatic.com/framer.7GWEWZBL.mjs
12756
+ // /:https://app.framerstatic.com/framer.SZORHXMV.mjs
12756
12757
 
12757
12758
  import React42 from 'react';
12758
12759
  import { startTransition as startTransition2, useDeferredValue, useSyncExternalStore, } from 'react';
@@ -14252,6 +14253,15 @@ var LazyValue = class _LazyValue {
14252
14253
  return this.read();
14253
14254
  }
14254
14255
  };
14256
+ var UNDEFINED = -1;
14257
+ var HOLE = -2;
14258
+ var NAN = -3;
14259
+ var POSITIVE_INFINITY = -4;
14260
+ var NEGATIVE_INFINITY = -5;
14261
+ var NEGATIVE_ZERO = -6;
14262
+ var SPARSE = -7;
14263
+ var MAX_ARRAY_LEN = 2 ** 32 - 1;
14264
+ var MAX_ARRAY_INDEX = MAX_ARRAY_LEN - 1;
14255
14265
  var DevalueError = class extends Error {
14256
14266
  /**
14257
14267
  * @param {string} message
@@ -14268,7 +14278,7 @@ var DevalueError = class extends Error {
14268
14278
  }
14269
14279
  };
14270
14280
  function is_primitive(thing,) {
14271
- return Object(thing,) !== thing;
14281
+ return thing === null || typeof thing !== 'object' && typeof thing !== 'function';
14272
14282
  }
14273
14283
  var object_proto_names = /* @__PURE__ */ Object.getOwnPropertyNames(Object.prototype,).sort().join('\0',);
14274
14284
  function is_plain_object(thing,) {
@@ -14326,105 +14336,72 @@ var is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
14326
14336
  function stringify_key(key7,) {
14327
14337
  return is_identifier.test(key7,) ? '.' + key7 : '[' + JSON.stringify(key7,) + ']';
14328
14338
  }
14329
- function is_valid_array_index(s,) {
14339
+ function is_valid_array_index(n,) {
14340
+ if (!Number.isInteger(n,)) return false;
14341
+ if (n < 0) return false;
14342
+ if (n > MAX_ARRAY_INDEX) return false;
14343
+ return true;
14344
+ }
14345
+ function is_valid_array_len(n,) {
14346
+ if (!Number.isInteger(n,)) return false;
14347
+ if (n < 0) return false;
14348
+ if (n > MAX_ARRAY_LEN) return false;
14349
+ return true;
14350
+ }
14351
+ function is_valid_array_index_string(s,) {
14330
14352
  if (s.length === 0) return false;
14331
14353
  if (s.length > 1 && s.charCodeAt(0,) === 48) return false;
14332
14354
  for (let i = 0; i < s.length; i++) {
14333
14355
  const c = s.charCodeAt(i,);
14334
14356
  if (c < 48 || c > 57) return false;
14335
14357
  }
14336
- const n = +s;
14337
- if (n >= 2 ** 32 - 1) return false;
14338
- if (n < 0) return false;
14339
- return true;
14358
+ return is_valid_array_index(+s,);
14340
14359
  }
14341
14360
  function valid_array_indices(array,) {
14342
14361
  const keys3 = Object.keys(array,);
14343
14362
  for (var i = keys3.length - 1; i >= 0; i--) {
14344
- if (is_valid_array_index(keys3[i],)) {
14363
+ if (is_valid_array_index_string(keys3[i],)) {
14345
14364
  break;
14346
14365
  }
14347
14366
  }
14348
14367
  keys3.length = i + 1;
14349
14368
  return keys3;
14350
14369
  }
14351
- function encode64(arraybuffer,) {
14352
- const dv = new DataView(arraybuffer,);
14353
- let binaryString = '';
14354
- for (let i = 0; i < arraybuffer.byteLength; i++) {
14355
- binaryString += String.fromCharCode(dv.getUint8(i,),);
14356
- }
14357
- return binaryToAscii(binaryString,);
14358
- }
14359
- function decode64(string,) {
14360
- const binaryString = asciiToBinary(string,);
14361
- const arraybuffer = new ArrayBuffer(binaryString.length,);
14362
- const dv = new DataView(arraybuffer,);
14363
- for (let i = 0; i < arraybuffer.byteLength; i++) {
14364
- dv.setUint8(i, binaryString.charCodeAt(i,),);
14365
- }
14366
- return arraybuffer;
14367
- }
14368
- var KEY_STRING = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
14369
- function asciiToBinary(data2,) {
14370
- if (data2.length % 4 === 0) {
14371
- data2 = data2.replace(/==?$/, '',);
14372
- }
14373
- let output = '';
14374
- let buffer = 0;
14375
- let accumulatedBits = 0;
14376
- for (let i = 0; i < data2.length; i++) {
14377
- buffer <<= 6;
14378
- buffer |= KEY_STRING.indexOf(data2[i],);
14379
- accumulatedBits += 6;
14380
- if (accumulatedBits === 24) {
14381
- output += String.fromCharCode((buffer & 16711680) >> 16,);
14382
- output += String.fromCharCode((buffer & 65280) >> 8,);
14383
- output += String.fromCharCode(buffer & 255,);
14384
- buffer = accumulatedBits = 0;
14385
- }
14386
- }
14387
- if (accumulatedBits === 12) {
14388
- buffer >>= 4;
14389
- output += String.fromCharCode(buffer,);
14390
- } else if (accumulatedBits === 18) {
14391
- buffer >>= 2;
14392
- output += String.fromCharCode((buffer & 65280) >> 8,);
14393
- output += String.fromCharCode(buffer & 255,);
14370
+ function encode_native(array_buffer,) {
14371
+ return new Uint8Array(array_buffer,).toBase64();
14372
+ }
14373
+ function decode_native(base64,) {
14374
+ return Uint8Array.fromBase64(base64,).buffer;
14375
+ }
14376
+ function encode_buffer(array_buffer,) {
14377
+ return Buffer.from(array_buffer,).toString('base64',);
14378
+ }
14379
+ function decode_buffer(base64,) {
14380
+ return Uint8Array.from(Buffer.from(base64, 'base64',),).buffer;
14381
+ }
14382
+ function encode_legacy(array_buffer,) {
14383
+ const array = new Uint8Array(array_buffer,);
14384
+ let binary = '';
14385
+ const chunk_size = 32768;
14386
+ for (let i = 0; i < array.length; i += chunk_size) {
14387
+ const chunk = array.subarray(i, i + chunk_size,);
14388
+ binary += String.fromCharCode.apply(null, chunk,);
14394
14389
  }
14395
- return output;
14390
+ return btoa(binary,);
14396
14391
  }
14397
- function binaryToAscii(str,) {
14398
- let out = '';
14399
- for (let i = 0; i < str.length; i += 3) {
14400
- const groupsOfSix = [void 0, void 0, void 0, void 0,];
14401
- groupsOfSix[0] = str.charCodeAt(i,) >> 2;
14402
- groupsOfSix[1] = (str.charCodeAt(i,) & 3) << 4;
14403
- if (str.length > i + 1) {
14404
- groupsOfSix[1] |= str.charCodeAt(i + 1,) >> 4;
14405
- groupsOfSix[2] = (str.charCodeAt(i + 1,) & 15) << 2;
14406
- }
14407
- if (str.length > i + 2) {
14408
- groupsOfSix[2] |= str.charCodeAt(i + 2,) >> 6;
14409
- groupsOfSix[3] = str.charCodeAt(i + 2,) & 63;
14410
- }
14411
- for (let j = 0; j < groupsOfSix.length; j++) {
14412
- if (typeof groupsOfSix[j] === 'undefined') {
14413
- out += '=';
14414
- } else {
14415
- out += KEY_STRING[groupsOfSix[j]];
14416
- }
14417
- }
14392
+ function decode_legacy(base64,) {
14393
+ const binary_string = atob(base64,);
14394
+ const len = binary_string.length;
14395
+ const array = new Uint8Array(len,);
14396
+ for (let i = 0; i < len; i++) {
14397
+ array[i] = binary_string.charCodeAt(i,);
14418
14398
  }
14419
- return out;
14399
+ return array.buffer;
14420
14400
  }
14421
- var UNDEFINED = -1;
14422
- var HOLE = -2;
14423
- var NAN = -3;
14424
- var POSITIVE_INFINITY = -4;
14425
- var NEGATIVE_INFINITY = -5;
14426
- var NEGATIVE_ZERO = -6;
14427
- var SPARSE = -7;
14401
+ var native = typeof Uint8Array.fromBase64 === 'function';
14402
+ var buffer = typeof process === 'object' && process.versions?.node !== void 0;
14403
+ var encode64 = native ? encode_native : buffer ? encode_buffer : encode_legacy;
14404
+ var decode64 = native ? decode_native : buffer ? decode_buffer : decode_legacy;
14428
14405
  function parse(serialized, revivers,) {
14429
14406
  return unflatten(JSON.parse(serialized,), revivers,);
14430
14407
  }
@@ -14489,13 +14466,14 @@ function unflatten(parsed, revivers,) {
14489
14466
  case 'RegExp':
14490
14467
  hydrated[index] = new RegExp(value[1], value[2],);
14491
14468
  break;
14492
- case 'Object':
14493
- const object = Object(value[1],);
14494
- if (Object.hasOwn(object, '__proto__',)) {
14495
- throw new Error('Cannot parse an object with a `__proto__` property',);
14469
+ case 'Object': {
14470
+ const wrapped_index = value[1];
14471
+ if (typeof values[wrapped_index] === 'object' && values[wrapped_index][0] !== 'BigInt') {
14472
+ throw new Error('Invalid input',);
14496
14473
  }
14497
- hydrated[index] = object;
14474
+ hydrated[index] = Object(hydrate(wrapped_index,),);
14498
14475
  break;
14476
+ }
14499
14477
  case 'BigInt':
14500
14478
  hydrated[index] = BigInt(value[1],);
14501
14479
  break;
@@ -14514,19 +14492,22 @@ function unflatten(parsed, revivers,) {
14514
14492
  case 'Uint8ClampedArray':
14515
14493
  case 'Int16Array':
14516
14494
  case 'Uint16Array':
14495
+ case 'Float16Array':
14517
14496
  case 'Int32Array':
14518
14497
  case 'Uint32Array':
14519
14498
  case 'Float32Array':
14520
14499
  case 'Float64Array':
14521
14500
  case 'BigInt64Array':
14522
- case 'BigUint64Array': {
14501
+ case 'BigUint64Array':
14502
+ case 'DataView': {
14523
14503
  if (values[value[1]][0] !== 'ArrayBuffer') {
14524
14504
  throw new Error('Invalid data',);
14525
14505
  }
14526
14506
  const TypedArrayConstructor = globalThis[type];
14527
- const buffer = hydrate(value[1],);
14528
- const typedArray = new TypedArrayConstructor(buffer,);
14529
- hydrated[index] = value[2] !== void 0 ? typedArray.subarray(value[2], value[3],) : typedArray;
14507
+ const buffer2 = hydrate(value[1],);
14508
+ hydrated[index] = value[2] !== void 0
14509
+ ? new TypedArrayConstructor(buffer2, value[2], value[3],)
14510
+ : new TypedArrayConstructor(buffer2,);
14530
14511
  break;
14531
14512
  }
14532
14513
  case 'ArrayBuffer': {
@@ -14565,18 +14546,21 @@ function unflatten(parsed, revivers,) {
14565
14546
  }
14566
14547
  } else if (value[0] === SPARSE) {
14567
14548
  const len = value[1];
14568
- if (!Number.isInteger(len,) || len < 0) {
14549
+ if (!is_valid_array_len(len,)) {
14569
14550
  throw new Error('Invalid input',);
14570
14551
  }
14571
- const array = new Array(len,);
14552
+ const array = [];
14572
14553
  hydrated[index] = array;
14554
+ array[MAX_ARRAY_INDEX] = void 0;
14555
+ delete array[MAX_ARRAY_INDEX];
14573
14556
  for (let i = 2; i < value.length; i += 2) {
14574
14557
  const idx = value[i];
14575
- if (!Number.isInteger(idx,) || idx < 0 || idx >= len) {
14558
+ if (!is_valid_array_index(idx,) || idx >= len) {
14576
14559
  throw new Error('Invalid input',);
14577
14560
  }
14578
14561
  array[idx] = hydrate(value[i + 1],);
14579
14562
  }
14563
+ array.length = len;
14580
14564
  } else {
14581
14565
  const array = new Array(value.length,);
14582
14566
  hydrated[index] = array;
@@ -14602,6 +14586,10 @@ function unflatten(parsed, revivers,) {
14602
14586
  return hydrate(0,);
14603
14587
  }
14604
14588
  function stringify(value, reducers,) {
14589
+ const stringified = run(false, value, reducers,);
14590
+ return typeof stringified === 'string' ? stringified : `[${stringified.join(',',)}]`;
14591
+ }
14592
+ function run(async, value, reducers,) {
14605
14593
  const stringified = [];
14606
14594
  const indexes = /* @__PURE__ */ new Map();
14607
14595
  const custom = [];
@@ -14615,14 +14603,14 @@ function stringify(value, reducers,) {
14615
14603
  }
14616
14604
  const keys3 = [];
14617
14605
  let p = 0;
14618
- function flatten(thing,) {
14606
+ function flatten(thing, index2,) {
14619
14607
  if (thing === void 0) return UNDEFINED;
14620
14608
  if (Number.isNaN(thing,)) return NAN;
14621
14609
  if (thing === Infinity) return POSITIVE_INFINITY;
14622
14610
  if (thing === -Infinity) return NEGATIVE_INFINITY;
14623
14611
  if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO;
14624
- if (indexes.has(thing,)) return indexes.get(thing,);
14625
- const index2 = p++;
14612
+ if (indexes.has(thing,)) return /** @type {number} */ indexes.get(thing,);
14613
+ index2 ??= p++;
14626
14614
  indexes.set(thing, index2,);
14627
14615
  for (
14628
14616
  const {
@@ -14638,20 +14626,28 @@ function stringify(value, reducers,) {
14638
14626
  }
14639
14627
  if (typeof thing === 'function') {
14640
14628
  throw new DevalueError(`Cannot stringify a function`, keys3, thing, value,);
14629
+ } else if (typeof thing === 'symbol') {
14630
+ throw new DevalueError(`Cannot stringify a Symbol primitive`, keys3, thing, value,);
14641
14631
  }
14642
14632
  let str = '';
14643
14633
  if (is_primitive(thing,)) {
14644
14634
  str = stringify_primitive(thing,);
14635
+ } else if (typeof thing.then === 'function') {
14636
+ if (!async) {
14637
+ throw new DevalueError(`Cannot stringify a Promise or thenable \u2014 use stringifyAsync instead`, keys3, thing, value,);
14638
+ }
14639
+ str = Promise.resolve(thing,).then((value2) => {
14640
+ const i = flatten(value2, index2,);
14641
+ if (i < 0) stringified[index2] = i;
14642
+ },);
14645
14643
  } else {
14646
14644
  const type = get_type(thing,);
14647
14645
  switch (type) {
14648
14646
  case 'Number':
14649
14647
  case 'String':
14650
14648
  case 'Boolean':
14651
- str = `["Object",${stringify_primitive(thing,)}]`;
14652
- break;
14653
14649
  case 'BigInt':
14654
- str = `["BigInt",${thing}]`;
14650
+ str = `["Object",${flatten(thing.valueOf(),)}]`;
14655
14651
  break;
14656
14652
  case 'Date':
14657
14653
  const valid = !isNaN(thing.getDate(),);
@@ -14729,19 +14725,18 @@ function stringify(value, reducers,) {
14729
14725
  case 'Uint8ClampedArray':
14730
14726
  case 'Int16Array':
14731
14727
  case 'Uint16Array':
14728
+ case 'Float16Array':
14732
14729
  case 'Int32Array':
14733
14730
  case 'Uint32Array':
14734
14731
  case 'Float32Array':
14735
14732
  case 'Float64Array':
14736
14733
  case 'BigInt64Array':
14737
- case 'BigUint64Array': {
14734
+ case 'BigUint64Array':
14735
+ case 'DataView': {
14738
14736
  const typedArray = thing;
14739
14737
  str = '["' + type + '",' + flatten(typedArray.buffer,);
14740
- const a = thing.byteOffset;
14741
- const b = a + thing.byteLength;
14742
- if (a > 0 || b !== typedArray.buffer.byteLength) {
14743
- const m2 = +/(\d+)/.exec(type,)[1] / 8;
14744
- str += `,${a / m2},${b / m2}`;
14738
+ if (typedArray.byteLength !== typedArray.buffer.byteLength) {
14739
+ str += `,${typedArray.byteOffset},${typedArray.length}`;
14745
14740
  }
14746
14741
  str += ']';
14747
14742
  break;
@@ -14802,12 +14797,11 @@ function stringify(value, reducers,) {
14802
14797
  }
14803
14798
  const index = flatten(value,);
14804
14799
  if (index < 0) return `${index}`;
14805
- return `[${stringified.join(',',)}]`;
14800
+ return stringified;
14806
14801
  }
14807
14802
  function stringify_primitive(thing,) {
14808
14803
  const type = typeof thing;
14809
14804
  if (type === 'string') return stringify_string(thing,);
14810
- if (thing instanceof String) return stringify_string(thing.toString(),);
14811
14805
  if (thing === void 0) return UNDEFINED.toString();
14812
14806
  if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO.toString();
14813
14807
  if (type === 'bigint') return `["BigInt","${thing}"]`;
@@ -14866,7 +14860,6 @@ var mockWindow = {
14866
14860
  innerHeight: 0,
14867
14861
  innerWidth: 0,
14868
14862
  SVGSVGElement: {},
14869
- scheduler: void 0,
14870
14863
  open: function (_url, _target, _features,) {},
14871
14864
  __framer_events: [],
14872
14865
  };
@@ -15153,8 +15146,12 @@ var CollectionUtilsCache = class {
15153
15146
  return this.callUtilsMethod('getRecordIdBySlug', slug, locale,);
15154
15147
  }
15155
15148
  };
15156
- var canUseYield = /* @__PURE__ */ (() => safeWindow.scheduler && 'yield' in safeWindow.scheduler)();
15157
- var canUsePostTask = /* @__PURE__ */ (() => safeWindow.scheduler && 'postTask' in safeWindow.scheduler)();
15149
+ function hasScheduler(value,) {
15150
+ return 'scheduler' in value;
15151
+ }
15152
+ var safeWindowScheduler = /* @__PURE__ */ (() => hasScheduler(safeWindow,) ? safeWindow.scheduler : void 0)();
15153
+ var canUseYield = /* @__PURE__ */ (() => safeWindowScheduler && 'yield' in safeWindowScheduler)();
15154
+ var canUsePostTask = /* @__PURE__ */ (() => safeWindowScheduler && 'postTask' in safeWindowScheduler)();
15158
15155
  var pendingResolvers = /* @__PURE__ */ new Set();
15159
15156
  function resolvePendingPromises() {
15160
15157
  for (const resolve of pendingResolvers) resolve();
@@ -15210,9 +15207,9 @@ function schedulerYield(options,) {
15210
15207
  },);
15211
15208
  }
15212
15209
  if (canUseYield) {
15213
- return safeWindow.scheduler.yield(options,).catch(noop22,);
15210
+ return safeWindowScheduler.yield(options,).catch(noop22,);
15214
15211
  }
15215
- return safeWindow.scheduler.postTask(() => {}, options,).catch(noop22,);
15212
+ return safeWindowScheduler.postTask(() => {}, options,).catch(noop22,);
15216
15213
  }
15217
15214
  function yieldToMain(options,) {
15218
15215
  const {
@@ -23286,6 +23283,10 @@ var componentsWithServerRenderedStyles = /* @__PURE__ */ (() => {
23286
23283
  return new Set(componentsWithSSRStylesAttr.split(' ',),);
23287
23284
  })();
23288
23285
  var framerCSSMarker = 'data-framer-css-ssr';
23286
+ function currentCSSRenderTarget() {
23287
+ if (isScreenshotFramerHost()) return RenderTarget.preview;
23288
+ return RenderTarget.current();
23289
+ }
23289
23290
  var withCSS = (Component18, escapedCSS, componentSerializationId,) =>
23290
23291
  React42.forwardRef((props, ref,) => {
23291
23292
  const {
@@ -23294,14 +23295,14 @@ var withCSS = (Component18, escapedCSS, componentSerializationId,) =>
23294
23295
  } = React42.useContext(StyleSheetContext,) ?? {};
23295
23296
  const id3 = componentSerializationId;
23296
23297
  if (!isBrowser22()) {
23297
- if (isFunction(escapedCSS,)) escapedCSS = escapedCSS(RenderTarget.current(), props,);
23298
+ if (isFunction(escapedCSS,)) escapedCSS = escapedCSS(currentCSSRenderTarget(), props,);
23298
23299
  const concatenatedCSS = Array.isArray(escapedCSS,) ? escapedCSS.join('\n',) : escapedCSS;
23299
23300
  cssCollector.add(concatenatedCSS, id3,);
23300
23301
  }
23301
23302
  useInsertionEffect(() => {
23302
23303
  if (id3 && componentsWithServerRenderedStyles.has(id3,)) return;
23303
23304
  const css22 = isFunction(escapedCSS,)
23304
- ? escapedCSS(RenderTarget.current(), props,)
23305
+ ? escapedCSS(currentCSSRenderTarget(), props,)
23305
23306
  : Array.isArray(escapedCSS,)
23306
23307
  ? escapedCSS
23307
23308
  : escapedCSS.split('\n',);
@@ -23773,6 +23774,55 @@ var inputIconCSSDeclaration = /* @__PURE__ */ (() => ({
23773
23774
  pointerEvents: 'none',
23774
23775
  ...iconImageCSS,
23775
23776
  }))();
23777
+ var listStyleTypeProperty = '--list-style-type';
23778
+ var maxListDigitsProperty = '--max-list-digits';
23779
+ function getMaxListDigits(start2, itemCount, listStyleType,) {
23780
+ const lastListNumber = start2 + Math.max(itemCount, 1,) - 1;
23781
+ switch (listStyleType) {
23782
+ case 'decimal':
23783
+ return decimalMaxListDigits(lastListNumber,);
23784
+ case 'lower-alpha':
23785
+ case 'upper-alpha':
23786
+ case 'lower-latin':
23787
+ case 'upper-latin':
23788
+ return alphaMaxListDigits(lastListNumber,);
23789
+ case 'lower-roman':
23790
+ case 'upper-roman':
23791
+ return romanMaxListDigits(lastListNumber,);
23792
+ default:
23793
+ return decimalMaxListDigits(lastListNumber,);
23794
+ }
23795
+ }
23796
+ function decimalMaxListDigits(lastListNumber,) {
23797
+ return String(lastListNumber,).length;
23798
+ }
23799
+ function alphaMaxListDigits(lastListNumber,) {
23800
+ let nextCharacters = 1;
23801
+ while (letterPermutations(nextCharacters,) < lastListNumber) {
23802
+ nextCharacters++;
23803
+ }
23804
+ return nextCharacters;
23805
+ }
23806
+ function letterPermutations(characters,) {
23807
+ let permutations = 0;
23808
+ for (let i = 0; i < characters; i++) {
23809
+ permutations += 26 ** (i + 1);
23810
+ }
23811
+ return permutations;
23812
+ }
23813
+ var romanNumeralLengthThresholds = [1, 2, 3, 8, 18, 28, 38, 88, 188, 288, 388, 888,];
23814
+ function romanMaxListDigits(lastListNumber,) {
23815
+ let maxLength = 0;
23816
+ for (const threshold2 of romanNumeralLengthThresholds) {
23817
+ if (lastListNumber < threshold2) return maxLength;
23818
+ maxLength++;
23819
+ }
23820
+ const thousands = Math.floor((lastListNumber - 888) / 1e3,);
23821
+ if (thousands >= 1) {
23822
+ return Math.max(maxLength, thousands + 12,);
23823
+ }
23824
+ return maxLength;
23825
+ }
23776
23826
  function createRGBVariableFallbacks(variables, fallback,) {
23777
23827
  return css2.variable(...variables.flatMap((variable) => [`${variable}-rgb`, variable,]), fallback,);
23778
23828
  }
@@ -24025,11 +24075,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24025
24075
  span.framer-text[data-nested-link] span.framer-text:not([data-text-fill]) {
24026
24076
  /* Ensure the color is inherited from the link style rather than the parent text for nested spans */
24027
24077
  color: inherit;
24028
- font-family: var(--framer-font-family-preview, var(--framer-blockquote-font-family, var(--framer-link-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif))));
24029
- font-style: var(--framer-font-style-preview, var(--framer-blockquote-font-style, var(--framer-link-font-style, var(--framer-font-style, normal))));
24030
- font-weight: var(--framer-font-weight-preview, var(--framer-blockquote-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400))));
24078
+ font-family: var(--framer-font-family-preview, var(--framer-link-font-family, var(--framer-blockquote-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif))));
24079
+ font-style: var(--framer-font-style-preview, var(--framer-link-font-style, var(--framer-blockquote-font-style, var(--framer-font-style, normal))));
24080
+ font-weight: var(--framer-font-weight-preview, var(--framer-link-font-weight, var(--framer-blockquote-font-weight, var(--framer-font-weight, 400))));
24031
24081
  font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
24032
- text-transform: var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
24082
+ text-transform: var(--framer-link-text-transform, var(--framer-blockquote-text-transform, var(--framer-text-transform, none)));
24033
24083
  /* Cursor inherit to overwrite the user agent stylesheet on rich text links. */
24034
24084
  cursor: var(--framer-custom-cursors, pointer);
24035
24085
  /* Don't inherit background styles from any parent text style. */
@@ -24044,13 +24094,13 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24044
24094
  `
24045
24095
  a.framer-text,
24046
24096
  span.framer-text[data-nested-link] {
24047
- color: var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
24048
- text-decoration-line: var(--framer-blockquote-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, initial)));
24049
- text-decoration-style: var(--framer-blockquote-text-decoration-style, var(--framer-link-text-decoration-style, var(--framer-text-decoration-style, initial)));
24050
- text-decoration-color: var(--framer-blockquote-text-decoration-color, var(--framer-link-text-decoration-color, var(--framer-text-decoration-color, initial)));
24051
- text-decoration-thickness: var(--framer-blockquote-text-decoration-thickness, var(--framer-link-text-decoration-thickness, var(--framer-text-decoration-thickness, initial)));
24052
- text-decoration-skip-ink: var(--framer-blockquote-text-decoration-skip-ink, var(--framer-link-text-decoration-skip-ink, var(--framer-text-decoration-skip-ink, initial)));
24053
- text-underline-offset: var(--framer-blockquote-text-decoration-offset, var(--framer-link-text-decoration-offset, var(--framer-text-decoration-offset, initial)));
24097
+ color: var(--framer-link-text-color, var(--framer-blockquote-text-color, var(--framer-text-color, #000)));
24098
+ text-decoration-line: var(--framer-link-text-decoration, var(--framer-blockquote-text-decoration, var(--framer-text-decoration, initial)));
24099
+ text-decoration-style: var(--framer-link-text-decoration-style, var(--framer-blockquote-text-decoration-style, var(--framer-text-decoration-style, initial)));
24100
+ text-decoration-color: var(--framer-link-text-decoration-color, var(--framer-blockquote-text-decoration-color, var(--framer-text-decoration-color, initial)));
24101
+ text-decoration-thickness: var(--framer-link-text-decoration-thickness, var(--framer-blockquote-text-decoration-thickness, var(--framer-text-decoration-thickness, initial)));
24102
+ text-decoration-skip-ink: var(--framer-link-text-decoration-skip-ink, var(--framer-blockquote-text-decoration-skip-ink, var(--framer-text-decoration-skip-ink, initial)));
24103
+ text-underline-offset: var(--framer-link-text-decoration-offset, var(--framer-blockquote-text-decoration-offset, var(--framer-text-decoration-offset, initial)));
24054
24104
  /* Don't inherit background styles from any parent text style. */
24055
24105
  background-color: var(--framer-link-text-background-color, initial);
24056
24106
  }
@@ -24060,7 +24110,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24060
24110
  a.framer-text,
24061
24111
  span.framer-text[data-nested-link] {
24062
24112
  color: ${
24063
- createRGBVariableFallbacks(['--framer-blockquote-text-color', '--framer-link-text-color', '--framer-text-color',], '#000',)
24113
+ createRGBVariableFallbacks(['--framer-link-text-color', '--framer-blockquote-text-color', '--framer-text-color',], '#000',)
24064
24114
  };
24065
24115
  background-color: ${createRGBVariableFallbacks(['--framer-link-text-background-color',], 'initial',)};
24066
24116
  text-decoration-color: ${
@@ -24084,7 +24134,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24084
24134
  `
24085
24135
  code.framer-text a.framer-text,
24086
24136
  code.framer-text span.framer-text[data-nested-link] {
24087
- color: var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000))));
24137
+ color: var(--framer-link-text-color, var(--framer-blockquote-text-color, var(--framer-code-text-color, var(--framer-text-color, #000))));
24088
24138
  }
24089
24139
  `, /* css */
24090
24140
  `
@@ -24095,8 +24145,8 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24095
24145
  code.framer-text span.framer-text[data-nested-link] span.framer-text:not([data-text-fill]) {
24096
24146
  color: ${
24097
24147
  createRGBVariableFallbacks([
24098
- '--framer-blockquote-text-color',
24099
24148
  '--framer-link-text-color',
24149
+ '--framer-blockquote-text-color',
24100
24150
  '--framer-code-text-color',
24101
24151
  '--framer-text-color',
24102
24152
  ], '#000',)
@@ -24109,11 +24159,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24109
24159
  a.framer-text:hover span.framer-text:not([data-text-fill]),
24110
24160
  span.framer-text[data-nested-link]:hover,
24111
24161
  span.framer-text[data-nested-link]:hover span.framer-text:not([data-text-fill]) {
24112
- font-family: var(--framer-font-family-preview, var(--framer-link-hover-font-family, var(--framer-blockquote-font-family, var(--framer-link-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)))));
24113
- font-style: var(--framer-font-style-preview, var(--framer-link-hover-font-style, var(--framer-blockquote-font-style, var(--framer-link-font-style, var(--framer-font-style, normal)))));
24114
- font-weight: var(--framer-font-weight-preview, var(--framer-link-hover-font-weight, var(--framer-blockquote-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400)))));
24162
+ font-family: var(--framer-font-family-preview, var(--framer-link-hover-font-family, var(--framer-link-font-family, var(--framer-blockquote-font-family, var(--framer-font-family, Inter, Inter Placeholder, sans-serif)))));
24163
+ font-style: var(--framer-font-style-preview, var(--framer-link-hover-font-style, var(--framer-link-font-style, var(--framer-blockquote-font-style, var(--framer-font-style, normal)))));
24164
+ font-weight: var(--framer-font-weight-preview, var(--framer-link-hover-font-weight, var(--framer-link-font-weight, var(--framer-blockquote-font-weight, var(--framer-font-weight, 400)))));
24115
24165
  font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
24116
- text-transform: var(--framer-link-hover-text-transform, var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
24166
+ text-transform: var(--framer-link-hover-text-transform, var(--framer-link-text-transform, var(--framer-blockquote-text-transform, var(--framer-text-transform, none))));
24117
24167
  border-radius: var(--framer-link-hover-text-background-radius, var(--framer-link-text-background-radius, var(--framer-text-background-radius, initial)));
24118
24168
  corner-shape: var(--framer-link-hover-text-background-corner-shape, var(--framer-link-text-background-corner-shape, var(--framer-text-background-corner-shape, initial)));
24119
24169
  padding: var(--framer-link-hover-text-background-padding, var(--framer-link-text-background-padding, var(--framer-text-background-padding, initial)));
@@ -24122,13 +24172,13 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24122
24172
  `
24123
24173
  a.framer-text:hover,
24124
24174
  span.framer-text[data-nested-link]:hover {
24125
- color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
24126
- text-decoration-line: var(--framer-link-hover-text-decoration, var(--framer-blockquote-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, initial))));
24127
- text-decoration-style: var(--framer-link-hover-text-decoration-style, var(--framer-blockquote-text-decoration-style, var(--framer-link-text-decoration-style, var(--framer-text-decoration-style, initial))));
24128
- text-decoration-color: var(--framer-link-hover-text-decoration-color, var(--framer-blockquote-text-decoration-color, var(--framer-link-text-decoration-color, var(--framer-text-decoration-color, initial))));
24129
- text-decoration-thickness: var(--framer-link-hover-text-decoration-thickness, var(--framer-blockquote-text-decoration-thickness, var(--framer-link-text-decoration-thickness, var(--framer-text-decoration-thickness, initial))));
24130
- text-decoration-skip-ink: var(--framer-link-hover-text-decoration-skip-ink, var(--framer-blockquote-text-decoration-skip-ink, var(--framer-link-text-decoration-skip-ink, var(--framer-text-decoration-skip-ink, initial))));
24131
- text-underline-offset: var(--framer-link-hover-text-decoration-offset, var(--framer-blockquote-text-decoration-offset, var(--framer-link-text-decoration-offset, var(--framer-text-decoration-offset, initial))));
24175
+ color: var(--framer-link-hover-text-color, var(--framer-link-text-color, var(--framer-blockquote-text-color, var(--framer-text-color, #000))));
24176
+ text-decoration-line: var(--framer-link-hover-text-decoration, var(--framer-link-text-decoration, var(--framer-blockquote-text-decoration, var(--framer-text-decoration, initial))));
24177
+ text-decoration-style: var(--framer-link-hover-text-decoration-style, var(--framer-link-text-decoration-style, var(--framer-blockquote-text-decoration-style, var(--framer-text-decoration-style, initial))));
24178
+ text-decoration-color: var(--framer-link-hover-text-decoration-color, var(--framer-link-text-decoration-color, var(--framer-blockquote-text-decoration-color, var(--framer-text-decoration-color, initial))));
24179
+ text-decoration-thickness: var(--framer-link-hover-text-decoration-thickness, var(--framer-link-text-decoration-thickness, var(--framer-blockquote-text-decoration-thickness, var(--framer-text-decoration-thickness, initial))));
24180
+ text-decoration-skip-ink: var(--framer-link-hover-text-decoration-skip-ink, var(--framer-link-text-decoration-skip-ink, var(--framer-blockquote-text-decoration-skip-ink, var(--framer-text-decoration-skip-ink, initial))));
24181
+ text-underline-offset: var(--framer-link-hover-text-decoration-offset, var(--framer-link-text-decoration-offset, var(--framer-blockquote-text-decoration-offset, var(--framer-text-decoration-offset, initial))));
24132
24182
  background-color: var(--framer-link-hover-text-background-color, var(--framer-link-text-background-color, var(--framer-text-background-color, initial)));
24133
24183
  }
24134
24184
  `, /* css */
@@ -24139,8 +24189,8 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24139
24189
  color: ${
24140
24190
  createRGBVariableFallbacks([
24141
24191
  '--framer-link-hover-text-color',
24142
- '--framer-blockquote-text-color',
24143
24192
  '--framer-link-text-color',
24193
+ '--framer-blockquote-text-color',
24144
24194
  '--framer-text-color',
24145
24195
  ], '#000',)
24146
24196
  };
@@ -24164,7 +24214,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24164
24214
  `
24165
24215
  code.framer-text a.framer-text:hover,
24166
24216
  code.framer-text span.framer-text[data-nested-link]:hover {
24167
- color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)))));
24217
+ color: var(--framer-link-hover-text-color, var(--framer-link-text-color, var(--framer-blockquote-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)))));
24168
24218
  }
24169
24219
  `, /* css */
24170
24220
  `
@@ -24174,8 +24224,8 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24174
24224
  color: ${
24175
24225
  createRGBVariableFallbacks([
24176
24226
  '--framer-link-hover-text-color',
24177
- '--framer-blockquote-text-color',
24178
24227
  '--framer-link-text-color',
24228
+ '--framer-blockquote-text-color',
24179
24229
  '--framer-code-text-color',
24180
24230
  '--framer-text-color',
24181
24231
  ], '#000',)
@@ -24421,6 +24471,11 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24421
24471
  list-style: none;
24422
24472
  padding-inline-start: 2ch;
24423
24473
  }
24474
+ `, /* css */
24475
+ `
24476
+ ol.framer-text > li.framer-text {
24477
+ padding-inline-start: calc(calc(var(${maxListDigitsProperty}, 1) + 1) * 1ch);
24478
+ }
24424
24479
  `,
24425
24480
  // font-variant-numeric: tabular-nums enables monospaced numbers (which is neat in a vertical list of numbers)
24426
24481
  // and makes `li`s match the default browser styles better.
@@ -24432,48 +24487,6 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24432
24487
  content: counter(list-item, var(--list-style-type)) ".";
24433
24488
  font-variant-numeric: tabular-nums;
24434
24489
  }
24435
- `,
24436
- // Why this? Due to `position: absolute` (see above), if a list has a lot of items, the numbers
24437
- // might start overlapping the text content. This compensates for that. The trick is based on
24438
- // https://alistapart.com/article/quantity-queries-for-css/#section6. The trick doesn’t account
24439
- // for lists longer than 1,000,000 items, but if you have a list of 1,000,000 items, you’ll have
24440
- // other problems ¯\_(ツ)_/¯
24441
- /* css */
24442
- `
24443
- ol.framer-text > li.framer-text:nth-last-child(n + 10),
24444
- ol.framer-text > li.framer-text:nth-last-child(n + 10) ~ li {
24445
- padding-inline-start: 3ch;
24446
- }
24447
- `, /* css */
24448
- `
24449
- ol.framer-text > li.framer-text:nth-last-child(n + 100),
24450
- ol.framer-text > li.framer-text:nth-last-child(n + 100) ~ li {
24451
- padding-inline-start: 4ch;
24452
- }
24453
- `, /* css */
24454
- `
24455
- ol.framer-text > li.framer-text:nth-last-child(n + 1000),
24456
- ol.framer-text > li.framer-text:nth-last-child(n + 1000) ~ li {
24457
- padding-inline-start: 5ch;
24458
- }
24459
- `, /* css */
24460
- `
24461
- ol.framer-text > li.framer-text:nth-last-child(n + 10000),
24462
- ol.framer-text > li.framer-text:nth-last-child(n + 10000) ~ li {
24463
- padding-inline-start: 6ch;
24464
- }
24465
- `, /* css */
24466
- `
24467
- ol.framer-text > li.framer-text:nth-last-child(n + 100000),
24468
- ol.framer-text > li.framer-text:nth-last-child(n + 100000) ~ li {
24469
- padding-inline-start: 7ch;
24470
- }
24471
- `, /* css */
24472
- `
24473
- ol.framer-text > li.framer-text:nth-last-child(n + 1000000),
24474
- ol.framer-text > li.framer-text:nth-last-child(n + 1000000) ~ li {
24475
- padding-inline-start: 8ch;
24476
- }
24477
24490
  `, /* css */
24478
24491
  `
24479
24492
  ul.framer-text > li.framer-text::before {
@@ -24501,6 +24514,7 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
24501
24514
  td.framer-text,
24502
24515
  th.framer-text {
24503
24516
  min-width: 16ch;
24517
+ overflow-wrap: anywhere;
24504
24518
  vertical-align: top;
24505
24519
  }
24506
24520
  `,
@@ -34992,8 +35006,8 @@ var Scroll = /* @__PURE__ */ (() => {
34992
35006
  disabledTitle: 'Off',
34993
35007
  defaultValue: true,
34994
35008
  hidden: ({
34995
- native,
34996
- },) => native === true,
35009
+ native: native2,
35010
+ },) => native2 === true,
34997
35011
  },
34998
35012
  dragEnabled: {
34999
35013
  type: 'boolean',
@@ -35009,8 +35023,8 @@ var Scroll = /* @__PURE__ */ (() => {
35009
35023
  disabledTitle: 'Off',
35010
35024
  defaultValue: true,
35011
35025
  hidden: ({
35012
- native,
35013
- },) => native === true,
35026
+ native: native2,
35027
+ },) => native2 === true,
35014
35028
  },
35015
35029
  wheelEnabled: {
35016
35030
  type: 'boolean',
@@ -35019,8 +35033,8 @@ var Scroll = /* @__PURE__ */ (() => {
35019
35033
  disabledTitle: 'Off',
35020
35034
  defaultValue: true,
35021
35035
  hidden: ({
35022
- native,
35023
- },) => native === true,
35036
+ native: native2,
35037
+ },) => native2 === true,
35024
35038
  },
35025
35039
  scrollBarVisible: {
35026
35040
  type: 'boolean',
@@ -35029,8 +35043,8 @@ var Scroll = /* @__PURE__ */ (() => {
35029
35043
  disabledTitle: 'Hidden',
35030
35044
  defaultValue: false,
35031
35045
  hidden: ({
35032
- native,
35033
- },) => native === false,
35046
+ native: native2,
35047
+ },) => native2 === false,
35034
35048
  },
35035
35049
  resetOffset: {
35036
35050
  type: 'boolean',
@@ -39498,8 +39512,8 @@ var maxTime = 1e4;
39498
39512
  function createWorkerTask() {
39499
39513
  return function () {
39500
39514
  async function sha256(text,) {
39501
- const buffer = new TextEncoder().encode(text,);
39502
- const hashBuffer = await crypto.subtle.digest('SHA-256', buffer,);
39515
+ const buffer2 = new TextEncoder().encode(text,);
39516
+ const hashBuffer = await crypto.subtle.digest('SHA-256', buffer2,);
39503
39517
  return Array.from(new Uint8Array(hashBuffer,),).map((b) => b.toString(16,).padStart(2, '0',)).join('',);
39504
39518
  }
39505
39519
  function randomCharacters(count,) {
@@ -39704,21 +39718,17 @@ var HoneypotInput = ({
39704
39718
  'data-bwignore': true,
39705
39719
  },);
39706
39720
  };
39707
- function useHoneypotFields(isEnabled,) {
39721
+ function useHoneypotFields() {
39708
39722
  const framerSiteId = React42.useContext(FormContext,);
39709
39723
  const states = React42.useMemo(() =>
39710
- isEnabled
39711
- ? COMMON_FIELD_NAMES.map((fieldName) => {
39712
- return {
39713
- inputRef: React42.createRef(),
39714
- originalName: fieldName,
39715
- methodsUsed: {
39716
- setAttribute: false,
39717
- valueProperty: false,
39718
- },
39719
- };
39720
- },)
39721
- : [], [isEnabled,],);
39724
+ COMMON_FIELD_NAMES.map((fieldName) => ({
39725
+ inputRef: React42.createRef(),
39726
+ originalName: fieldName,
39727
+ methodsUsed: {
39728
+ setAttribute: false,
39729
+ valueProperty: false,
39730
+ },
39731
+ })), [],);
39722
39732
  const convertHoneypotFieldsForSubmission = React42.useCallback(() => {
39723
39733
  states.forEach((state) => {
39724
39734
  const currentHoneypotInput = state.inputRef.current;
@@ -39728,7 +39738,6 @@ function useHoneypotFields(isEnabled,) {
39728
39738
  },);
39729
39739
  }, [states,],);
39730
39740
  const replaceHoneypotWithMetadata = React42.useCallback((formData) => {
39731
- if (!isEnabled) return;
39732
39741
  const honeypotCount = states.length;
39733
39742
  let honeypotFilled = 0;
39734
39743
  const filledFieldsData = [];
@@ -39760,7 +39769,7 @@ function useHoneypotFields(isEnabled,) {
39760
39769
  formData.append(`${HONEYPOT_FIELD_NAME}_${METADATA_KEYS_ENUM.hpVersion}`, HONEYPOT_VERSION,);
39761
39770
  formData.append(`${HONEYPOT_FIELD_NAME}_${METADATA_KEYS_ENUM.siteId}`, framerSiteId || '',);
39762
39771
  formData.append(`${HONEYPOT_FIELD_NAME}_${METADATA_KEYS_ENUM.timeToSubmissionSinceModuleLoad}`, getTimeSinceModuleLoadInSeconds(),);
39763
- }, [isEnabled, states, framerSiteId,],);
39772
+ }, [states, framerSiteId,],);
39764
39773
  return {
39765
39774
  states,
39766
39775
  convertHoneypotFieldsForSubmission,
@@ -39802,68 +39811,6 @@ function sendFormSubmitTrackingEvent(pageviewEventData, nodeId, trackingId,) {
39802
39811
  trackingId: trackingId || null,
39803
39812
  }, 'eager',);
39804
39813
  }
39805
- var RECAPTCHA_SCRIPT_URL = 'https://www.google.com/recaptcha/api.js';
39806
- function getRecaptchaScriptUrl(siteKey,) {
39807
- return `${RECAPTCHA_SCRIPT_URL}?render=${encodeURIComponent(siteKey,)}&badge=bottomleft`;
39808
- }
39809
- var captchaScriptPromises = /* @__PURE__ */ new Map();
39810
- function loadRecaptchaScript(siteKey,) {
39811
- const existing = captchaScriptPromises.get(siteKey,);
39812
- if (existing) return existing;
39813
- const scriptUrl = getRecaptchaScriptUrl(siteKey,);
39814
- if (document.querySelector(`script[src="${scriptUrl}"]`,)) {
39815
- const resolved = Promise.resolve();
39816
- captchaScriptPromises.set(siteKey, resolved,);
39817
- return resolved;
39818
- }
39819
- const promise = new Promise((resolve, reject,) => {
39820
- const script = document.createElement('script',);
39821
- script.src = scriptUrl;
39822
- script.onload = () => resolve();
39823
- script.onerror = () => {
39824
- captchaScriptPromises.delete(siteKey,);
39825
- script.remove();
39826
- reject(new Error('Failed to load captcha script',),);
39827
- };
39828
- document.head.appendChild(script,);
39829
- },);
39830
- captchaScriptPromises.set(siteKey, promise,);
39831
- return promise;
39832
- }
39833
- function executeRecaptcha(siteKey, _action,) {
39834
- return new Promise((resolve, reject,) => {
39835
- const {
39836
- grecaptcha,
39837
- } = __unframerWindow2;
39838
- if (!grecaptcha) {
39839
- reject(new Error('Captcha script not available',),);
39840
- return;
39841
- }
39842
- grecaptcha.ready(() => {
39843
- grecaptcha.execute(siteKey,).then(resolve, reject,);
39844
- },);
39845
- },);
39846
- }
39847
- function useCaptcha({
39848
- provider,
39849
- siteKey,
39850
- },) {
39851
- React42.useEffect(() => {
39852
- if (provider === 'recaptcha_v3' && siteKey) {
39853
- requestIdleCallback(() => {
39854
- loadRecaptchaScript(siteKey,).catch(() => {},);
39855
- },);
39856
- }
39857
- }, [provider, siteKey,],);
39858
- const executeChallenge = React42.useCallback(async (action) => {
39859
- if (provider !== 'recaptcha_v3' || !siteKey) return void 0;
39860
- await loadRecaptchaScript(siteKey,);
39861
- return executeRecaptcha(siteKey, action,);
39862
- }, [provider, siteKey,],);
39863
- return {
39864
- executeChallenge,
39865
- };
39866
- }
39867
39814
  var pendingState = {
39868
39815
  state: 'pending',
39869
39816
  };
@@ -39930,28 +39877,19 @@ var FormContainer = /* @__PURE__ */ React42.forwardRef(function FormContainer2({
39930
39877
  onLoading,
39931
39878
  submitTrackingId,
39932
39879
  nodeId,
39933
- formCaptchaProvider,
39934
- formCaptchaSiteKey,
39935
39880
  ...props
39936
39881
  }, forwardedRef,) {
39937
39882
  const fallbackRef = React42.useRef(null,);
39938
39883
  const ref = forwardedRef ?? fallbackRef;
39939
- const shouldUseHoneypot = !(formCaptchaProvider && formCaptchaSiteKey);
39940
39884
  const {
39941
39885
  states: honeypotStateRefs,
39942
39886
  convertHoneypotFieldsForSubmission,
39943
39887
  replaceHoneypotWithMetadata,
39944
- } = useHoneypotFields(shouldUseHoneypot,);
39888
+ } = useHoneypotFields();
39945
39889
  const router = useRouter();
39946
39890
  const currentRoute = useCurrentRoute();
39947
39891
  const implicitPathVariables = useImplicitPathVariables();
39948
39892
  const collectionUtils = useCollectionUtils();
39949
- const {
39950
- executeChallenge,
39951
- } = useCaptcha({
39952
- provider: formCaptchaProvider,
39953
- siteKey: formCaptchaSiteKey,
39954
- },);
39955
39893
  const [state, dispatch,] = React42.useReducer(formReducer, incompleteState,);
39956
39894
  const {
39957
39895
  activeLocale,
@@ -40029,7 +39967,7 @@ var FormContainer = /* @__PURE__ */ React42.forwardRef(function FormContainer2({
40029
39967
  submitTrackingId,
40030
39968
  activeLocale,
40031
39969
  },);
40032
- await submitForm(action, data2, projectHash, executeChallenge,);
39970
+ await submitForm(action, data2, projectHash,);
40033
39971
  startTransition2(() =>
40034
39972
  dispatch({
40035
39973
  type: 'success',
@@ -40084,7 +40022,7 @@ var FormContainer = /* @__PURE__ */ React42.forwardRef(function FormContainer2({
40084
40022
  ref,
40085
40023
  children: [
40086
40024
  children(state,),
40087
- shouldUseHoneypot && /* @__PURE__ */ jsx(HoneypotFields, {
40025
+ /* @__PURE__ */ jsx(HoneypotFields, {
40088
40026
  suppressHydrationWarning: true,
40089
40027
  states: honeypotStateRefs,
40090
40028
  },),
@@ -40103,20 +40041,16 @@ function anyEmptyRequiredFields(element,) {
40103
40041
  }
40104
40042
  return false;
40105
40043
  }
40106
- async function submitForm(action, data2, projectHash, executeChallenge,) {
40044
+ async function submitForm(action, data2, projectHash,) {
40107
40045
  const proofOfWork = await calculateProofOfWork();
40108
40046
  if (!proofOfWork) {
40109
40047
  throw new Error('Failed to calculate proof of work',);
40110
40048
  }
40111
- const captchaToken = await executeChallenge('submit',);
40112
40049
  const headers = {
40113
40050
  'Framer-Site-Id': projectHash,
40114
40051
  'Framer-POW': proofOfWork.secret,
40115
40052
  'Framer-Form-Fields': getEncodedFormFieldsHeader(data2,),
40116
40053
  };
40117
- if (captchaToken) {
40118
- headers['Framer-Captcha-Response'] = captchaToken;
40119
- }
40120
40054
  const response = await fetch(action, {
40121
40055
  body: data2,
40122
40056
  method: 'POST',
@@ -46873,6 +46807,10 @@ var QueryCache = class {
46873
46807
  __publicField(this, 'cache', /* @__PURE__ */ new Map(),);
46874
46808
  __publicField(this, 'serializedCache', handoverCollector !== void 0 ? /* @__PURE__ */ new Map() : void 0,);
46875
46809
  }
46810
+ clear() {
46811
+ this.cache.clear();
46812
+ this.serializedCache?.clear();
46813
+ }
46876
46814
  prune() {
46877
46815
  if (this.cache.size <= this.maxSize) return;
46878
46816
  for (const [key7, value,] of this.cache) {
@@ -46934,7 +46872,7 @@ function getCacheKey(query, locale,) {
46934
46872
  async function executeServerDatabaseQuery(sql,) {
46935
46873
  const {
46936
46874
  executeServerDatabaseQuery: executeServerDatabaseQueryWithSqlite,
46937
- } = await import('./framer-chunks/SqliteDatabase-VAKIICSG-W43ZSXBO.js');
46875
+ } = await import('./framer-chunks/SqliteDatabase-VAKIICSG-OPV4MG3Y.js');
46938
46876
  return executeServerDatabaseQueryWithSqlite(sql,);
46939
46877
  }
46940
46878
  var queryEngine = /* @__PURE__ */ new QueryEngine();
@@ -48536,7 +48474,7 @@ function flattenChildrenToTickerItems(children,) {
48536
48474
  Children.forEach(children, (child) => {
48537
48475
  if (isValidElement(child,) && child.type === Fragment) {
48538
48476
  result.push(...flattenChildrenToTickerItems(child.props.children,),);
48539
- } else {
48477
+ } else if (child) {
48540
48478
  result.push(child,);
48541
48479
  }
48542
48480
  },);
@@ -48623,7 +48561,7 @@ var TickerContext = /* @__PURE__ */ (() => {
48623
48561
  })();
48624
48562
  function useTicker() {
48625
48563
  const context = useContext(TickerContext,);
48626
- invariant(Boolean(context,), 'useTicker must be used within a Ticker component',);
48564
+ invariant2(Boolean(context,), 'useTicker must be used within a Ticker component',);
48627
48565
  return context;
48628
48566
  }
48629
48567
  var TickerItemContext = /* @__PURE__ */ (() => {
@@ -48633,7 +48571,7 @@ var TickerItemContext = /* @__PURE__ */ (() => {
48633
48571
  })();
48634
48572
  function useTickerItem() {
48635
48573
  const itemContext = useContext(TickerItemContext,);
48636
- invariant(Boolean(itemContext,), 'useTickerItem must be used within a TickerItem',);
48574
+ invariant2(Boolean(itemContext,), 'useTickerItem must be used within a TickerItem',);
48637
48575
  return itemContext;
48638
48576
  }
48639
48577
  var ltrStrategy = (insetProp, lengthProp, viewportLengthProp, paddingStartProp, direction,) => {
@@ -48726,7 +48664,7 @@ function TickerItemWrapper({
48726
48664
  return listSize * sign;
48727
48665
  }
48728
48666
  if (safeMargin > 0) {
48729
- const rightBoundary = visibleLength - inset2 + safeMargin;
48667
+ const rightBoundary = visibleLength - safeMargin - inset2;
48730
48668
  if (currentOffset * sign + bounds.start >= rightBoundary) {
48731
48669
  return -listSize * sign;
48732
48670
  }
@@ -48739,7 +48677,6 @@ function TickerItemWrapper({
48739
48677
  if (!start2 && !end || !listSize) return 0;
48740
48678
  return currentOffset * sign + start2 + currentTransform * sign;
48741
48679
  },);
48742
- const offAxisSize = alignItems === 'stretch' ? '100%' : 'fit-content';
48743
48680
  const ariaProps = cloneIndex === void 0
48744
48681
  ? {
48745
48682
  ['aria-hidden']: false,
@@ -48749,6 +48686,8 @@ function TickerItemWrapper({
48749
48686
  : {
48750
48687
  ['aria-hidden']: true,
48751
48688
  };
48689
+ const isFill = size === 'fill';
48690
+ const offAxisSize = alignItems === 'stretch' ? '100%' : 'fit-content';
48752
48691
  const props = {
48753
48692
  className: cloneIndex === void 0 ? 'ticker-item' : 'clone-item',
48754
48693
  style: {
@@ -48756,7 +48695,11 @@ function TickerItemWrapper({
48756
48695
  flexShrink: 0,
48757
48696
  position: 'relative',
48758
48697
  flexBasis: size === 'fill' ? '100%' : void 0,
48759
- display: size === 'fill' ? 'flex' : void 0,
48698
+ display: isFill ? 'grid' : void 0,
48699
+ gridTemplateColumns: isFill ? '1fr' : void 0,
48700
+ gridTemplateRows: isFill ? '1fr' : void 0,
48701
+ minWidth: isFill ? 0 : void 0,
48702
+ minHeight: isFill ? 0 : void 0,
48760
48703
  height: axis === 'x' ? offAxisSize : void 0,
48761
48704
  width: axis === 'y' ? offAxisSize : void 0,
48762
48705
  x: axis === 'x' ? projection : 0,
@@ -48816,7 +48759,9 @@ function useFocusNavigation(containerRef, axis, focusOffset, offset, setHasFocus
48816
48759
  const applyFocusOffset = () => {
48817
48760
  const nextFocusableElement = focusableElements[focusIndex];
48818
48761
  if (!nextFocusableElement) return;
48819
- nextFocusableElement.focus();
48762
+ nextFocusableElement.focus({
48763
+ preventScroll: true,
48764
+ },);
48820
48765
  focusOffset.set(-nextFocusableElement[offsetProp],);
48821
48766
  container[scrollProp] = 0;
48822
48767
  frame.render(() => {
@@ -48829,7 +48774,7 @@ function useFocusNavigation(containerRef, axis, focusOffset, offset, setHasFocus
48829
48774
  endFocusTrap();
48830
48775
  const allFocusableElements = Array.from(
48831
48776
  document.querySelectorAll('a, button, input, textarea, select, [tabindex]:not([tabindex="-1"]), [contenteditable="true"]',),
48832
- ).filter(isHTMLElement,);
48777
+ ).filter(isHTMLElement2,);
48833
48778
  allFocusableElements.sort(compareTabIndexes,);
48834
48779
  const lastFocusableElement = allFocusableElements[event.shiftKey ? 0 : allFocusableElements.length - 1];
48835
48780
  const initialIndex = event.shiftKey ? allFocusableElements.length - 1 : 0;
@@ -48862,7 +48807,7 @@ function useFocusNavigation(containerRef, axis, focusOffset, offset, setHasFocus
48862
48807
  container.querySelectorAll(
48863
48808
  '.ticker-item a, .ticker-item button, .ticker-item input, .ticker-item textarea, .ticker-item select, .ticker-item [tabindex]:not([tabindex="-1"]), .ticker-item [contenteditable="true"]',
48864
48809
  ),
48865
- ).filter(isHTMLElement,);
48810
+ ).filter(isHTMLElement2,);
48866
48811
  focusIndex = 0;
48867
48812
  if (!focusableElements.length) return;
48868
48813
  setHasFocus(true,);
@@ -48890,7 +48835,7 @@ function useFocusNavigation(containerRef, axis, focusOffset, offset, setHasFocus
48890
48835
  const {
48891
48836
  target,
48892
48837
  } = event;
48893
- if (!isHTMLElement(target,)) return;
48838
+ if (!isHTMLElement2(target,)) return;
48894
48839
  if (!isFocusTrapped.current) {
48895
48840
  startFocusTrap();
48896
48841
  }
@@ -48909,13 +48854,18 @@ function useFocusNavigation(containerRef, axis, focusOffset, offset, setHasFocus
48909
48854
  };
48910
48855
  const handleAriaHiddenClicks = (event) => {
48911
48856
  const target = event.target;
48912
- let ariaHiddenAncestor = target.closest('[aria-hidden="true"]',);
48857
+ const ariaHiddenAncestor = target.closest('[aria-hidden="true"]',);
48913
48858
  if (ariaHiddenAncestor) {
48914
48859
  ariaHiddenAncestor.removeAttribute('aria-hidden',);
48915
48860
  }
48916
48861
  };
48862
+ const resetScroll = () => {
48863
+ container.scrollLeft = 0;
48864
+ container.scrollTop = 0;
48865
+ };
48917
48866
  __unframerWindow2.addEventListener('keydown', detectFocusTrapEnable, eventOptions,);
48918
48867
  container.addEventListener('pointerdown', handleAriaHiddenClicks, eventOptions,);
48868
+ container.addEventListener('scroll', resetScroll, eventOptions,);
48919
48869
  return () => {
48920
48870
  abortController.abort();
48921
48871
  endFocusTrap();
@@ -48934,6 +48884,9 @@ function compareTabIndexes(a, b,) {
48934
48884
  }
48935
48885
  return 0;
48936
48886
  }
48887
+ function isHTMLElement2(element,) {
48888
+ return element instanceof HTMLElement;
48889
+ }
48937
48890
  function calcItemLength(itemPosition,) {
48938
48891
  return itemPosition.end - itemPosition.start;
48939
48892
  }
@@ -48972,6 +48925,8 @@ function TickerComponent({
48972
48925
  snap,
48973
48926
  safeMargin = 0,
48974
48927
  fade = 0,
48928
+ fadeTransition,
48929
+ pageTransition,
48975
48930
  ...props
48976
48931
  }, ref,) {
48977
48932
  const internalContainerRef = useRef(null,);
@@ -48988,6 +48943,9 @@ function TickerComponent({
48988
48943
  maxInset: null,
48989
48944
  },);
48990
48945
  const alignItems = alignAlias[align] || align;
48946
+ const {
48947
+ sign,
48948
+ } = getLayoutStrategy(axis, state.direction,);
48991
48949
  if (isStatic) {
48992
48950
  const renderedOffset2 = useMotionValue(0,);
48993
48951
  return /* @__PURE__ */ jsx(TickerContext.Provider, {
@@ -48996,6 +48954,7 @@ function TickerComponent({
48996
48954
  ...state,
48997
48955
  gap,
48998
48956
  clampOffset: noop,
48957
+ offset: renderedOffset2,
48999
48958
  renderedOffset: renderedOffset2,
49000
48959
  },
49001
48960
  children: /* @__PURE__ */ jsx(ListView, {
@@ -49016,13 +48975,14 @@ function TickerComponent({
49016
48975
  isStatic: true,
49017
48976
  as,
49018
48977
  fade,
48978
+ sign,
49019
48979
  },),
49020
48980
  },);
49021
48981
  }
49022
48982
  const [hasFocus, setHasFocus,] = useState(false,);
49023
48983
  const velocityFactor = useMotionValue(1,);
49024
48984
  const defaultOffset22 = useMotionValue(0,);
49025
- offset ?? (offset = defaultOffset22);
48985
+ offset ??= defaultOffset22;
49026
48986
  const wrappedOffset = useTransform(() => {
49027
48987
  if (state.direction === 'rtl' && axis === 'x') {
49028
48988
  return wrap(state.totalItemLength + gap + state.inset, state.inset, offset.get(),);
@@ -49100,12 +49060,9 @@ function TickerComponent({
49100
49060
  };
49101
49061
  }, [items, isInView, overflow,],);
49102
49062
  const isMeasured = state.totalItemLength > 0;
49103
- const {
49104
- sign,
49105
- } = getLayoutStrategy(axis, state.direction,);
49106
49063
  useAnimationFrame(
49107
49064
  isMeasured && isInView && offset === defaultOffset22 && !isReducedMotion
49108
- ? (_, delta,) => {
49065
+ ? (_time, delta,) => {
49109
49066
  const frameOffset = delta / 1e3 * (velocity * sign * velocityFactor.get());
49110
49067
  offset.set(offset.get() - frameOffset,);
49111
49068
  }
@@ -49153,15 +49110,16 @@ function TickerComponent({
49153
49110
  }
49154
49111
  }
49155
49112
  useFocusNavigation(internalContainerRef, axis, focusOffset, offset, setHasFocus,);
49156
- const clampOffset = useCallback2((newOffset) => state.maxInset !== null ? clamp(-state.maxInset, 0, newOffset,) : newOffset, [
49157
- state.maxInset,
49158
- ],);
49113
+ const clampOffset = useCallback2((offset2) => {
49114
+ return state.maxInset !== null ? clamp(-state.maxInset, 0, offset2,) : offset2;
49115
+ }, [state.maxInset,],);
49159
49116
  return /* @__PURE__ */ jsx(TickerContext.Provider, {
49160
49117
  suppressHydrationWarning: true,
49161
49118
  value: {
49162
49119
  ...state,
49163
49120
  gap,
49164
49121
  clampOffset,
49122
+ offset,
49165
49123
  renderedOffset,
49166
49124
  },
49167
49125
  children: /* @__PURE__ */ jsx(ListView, {
@@ -49195,6 +49153,9 @@ function TickerComponent({
49195
49153
  loop,
49196
49154
  as,
49197
49155
  fade,
49156
+ sign,
49157
+ fadeTransition,
49158
+ pageTransition,
49198
49159
  },),
49199
49160
  },);
49200
49161
  }
@@ -49226,6 +49187,9 @@ function ListView({
49226
49187
  loop,
49227
49188
  as,
49228
49189
  fade,
49190
+ sign,
49191
+ fadeTransition = defaultFadeTransition,
49192
+ pageTransition,
49229
49193
  },) {
49230
49194
  const MotionComponent = useMemo(() => motion.create(as,), [as,],);
49231
49195
  let dragConstraints = {};
@@ -49234,10 +49198,15 @@ function ListView({
49234
49198
  } = state;
49235
49199
  if (maxInset !== null) {
49236
49200
  if (axis === 'x') {
49237
- dragConstraints = {
49238
- left: maxInset * -1,
49239
- right: 0,
49240
- };
49201
+ dragConstraints = sign > 0
49202
+ ? {
49203
+ left: maxInset * -1,
49204
+ right: 0,
49205
+ }
49206
+ : {
49207
+ right: maxInset,
49208
+ left: 0,
49209
+ };
49241
49210
  } else {
49242
49211
  dragConstraints = {
49243
49212
  top: maxInset * -1,
@@ -49250,7 +49219,6 @@ function ListView({
49250
49219
  _dragX,
49251
49220
  _dragY,
49252
49221
  dragMomentum = false,
49253
- onDragStart,
49254
49222
  onDragEnd,
49255
49223
  onPointerDown,
49256
49224
  ...remainingProps
@@ -49285,13 +49253,18 @@ function ListView({
49285
49253
  target = Math.abs(current2 - closestNext,) < Math.abs(current2 - closestPrev,) ? closestNext : closestPrev;
49286
49254
  }
49287
49255
  }
49288
- const constraints = loop ? {} : {
49289
- max: 0,
49290
- min: dragConstraints[axis === 'x' ? 'left' : 'top'],
49291
- };
49256
+ const constraints = loop ? {} : sign > 0
49257
+ ? {
49258
+ max: 0,
49259
+ min: dragConstraints[axis === 'x' ? 'left' : 'top'],
49260
+ }
49261
+ : {
49262
+ min: 0,
49263
+ max: dragConstraints.right,
49264
+ };
49292
49265
  dragMomentumAnimation.current = animate(
49293
49266
  dragMotionValue,
49294
- clampOffset?.(target,),
49267
+ clampOffset(target * sign,) * sign,
49295
49268
  snap ? pageTransition : {
49296
49269
  type: 'inertia',
49297
49270
  velocity: velocity[axis],
@@ -49323,27 +49296,29 @@ function ListView({
49323
49296
  },);
49324
49297
  useMotionValueEvent(renderedOffset, 'change', (value) => {
49325
49298
  if (maxInset === null) return;
49326
- if (value <= maxInset) {
49327
- if (!isAtLimits.current.start) {
49328
- animate(fadeStartOpacity, 1, fadeTransition,);
49329
- isAtLimits.current.start = true;
49330
- }
49331
- } else {
49299
+ const maxOffset = maxInset * -1;
49300
+ value *= sign;
49301
+ if (value < 0) {
49332
49302
  if (isAtLimits.current.start) {
49333
49303
  animate(fadeStartOpacity, 0, fadeTransition,);
49334
49304
  isAtLimits.current.start = false;
49335
49305
  }
49336
- }
49337
- if (value >= 0) {
49338
- if (!isAtLimits.current.end) {
49339
- animate(fadeEndOpacity, 1, fadeTransition,);
49340
- isAtLimits.current.end = true;
49341
- }
49342
49306
  } else {
49307
+ if (!isAtLimits.current.start) {
49308
+ animate(fadeStartOpacity, 1, fadeTransition,);
49309
+ isAtLimits.current.start = true;
49310
+ }
49311
+ }
49312
+ if (value > maxOffset) {
49343
49313
  if (isAtLimits.current.end) {
49344
49314
  animate(fadeEndOpacity, 0, fadeTransition,);
49345
49315
  isAtLimits.current.end = false;
49346
49316
  }
49317
+ } else {
49318
+ if (!isAtLimits.current.end) {
49319
+ animate(fadeEndOpacity, 1, fadeTransition,);
49320
+ isAtLimits.current.end = true;
49321
+ }
49347
49322
  }
49348
49323
  },);
49349
49324
  return /* @__PURE__ */ jsxs(Fragment, {
@@ -49361,10 +49336,16 @@ function ListView({
49361
49336
  },
49362
49337
  onPointerEnter,
49363
49338
  onPointerLeave,
49339
+ drag: drag2,
49340
+ _dragX,
49341
+ _dragY,
49342
+ dragConstraints,
49343
+ dragMomentum,
49344
+ onPointerDown,
49345
+ onDragEnd,
49364
49346
  children: /* @__PURE__ */ jsxs(motion.ul, {
49365
49347
  suppressHydrationWarning: true,
49366
49348
  ref: listRef,
49367
- role: 'group',
49368
49349
  style: {
49369
49350
  ...listStyle,
49370
49351
  flexDirection: axis === 'x' ? 'row' : 'column',
@@ -49379,14 +49360,6 @@ function ListView({
49379
49360
  maxHeight: '100%',
49380
49361
  maxWidth: '100%',
49381
49362
  },
49382
- drag: drag2,
49383
- _dragX,
49384
- _dragY,
49385
- dragConstraints,
49386
- dragMomentum,
49387
- onPointerDown,
49388
- onDragStart,
49389
- onDragEnd,
49390
49363
  children: [
49391
49364
  items.map((item, index,) =>
49392
49365
  /* @__PURE__ */ jsx(TickerItemWrapper, {
@@ -49413,6 +49386,11 @@ function ListView({
49413
49386
  ],
49414
49387
  },);
49415
49388
  }
49389
+ function invariant2(condition, message,) {
49390
+ if (!condition) {
49391
+ throw new Error(message,);
49392
+ }
49393
+ }
49416
49394
  var defaultBounds = {
49417
49395
  start: 0,
49418
49396
  end: 0,
@@ -49430,12 +49408,7 @@ var listStyle = {
49430
49408
  margin: 0,
49431
49409
  justifyContent: 'flex-start',
49432
49410
  };
49433
- var pageTransition = {
49434
- type: 'spring',
49435
- stiffness: 400,
49436
- damping: 40,
49437
- };
49438
- var fadeTransition = {
49411
+ var defaultFadeTransition = {
49439
49412
  duration: 0.2,
49440
49413
  ease: 'linear',
49441
49414
  };
@@ -50372,11 +50345,11 @@ var WebGL2ShaderRenderer = class {
50372
50345
  }
50373
50346
  };
50374
50347
  function createStaticArrayBuffer(gl, data2,) {
50375
- const buffer = gl.createBuffer();
50376
- if (!buffer) throw new Error('Failed to create buffer',);
50377
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer,);
50348
+ const buffer2 = gl.createBuffer();
50349
+ if (!buffer2) throw new Error('Failed to create buffer',);
50350
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer2,);
50378
50351
  gl.bufferData(gl.ARRAY_BUFFER, data2, gl.STATIC_DRAW,);
50379
- return buffer;
50352
+ return buffer2;
50380
50353
  }
50381
50354
  function bindFullScreenQuadAttribs(gl, program, positionBuffer, texCoordBuffer,) {
50382
50355
  const positionLocation = gl.getAttribLocation(program, 'a_position',);
@@ -50582,11 +50555,11 @@ var defaultBufferResolutionScale = 0.5;
50582
50555
  var defaultBufferFormat = 'rgba8';
50583
50556
  function resolveBufferDescriptors(buffers, common, headOptions,) {
50584
50557
  if (!buffers) return void 0;
50585
- return buffers.map((buffer) => ({
50586
- uniformName: toBufferUniformName(buffer.name,),
50587
- fragment: prepareFragmentShader(buffer.fragment, common, headOptions,),
50588
- resolutionScale: buffer.resolutionScale ?? defaultBufferResolutionScale,
50589
- format: buffer.format ?? defaultBufferFormat,
50558
+ return buffers.map((buffer2) => ({
50559
+ uniformName: toBufferUniformName(buffer2.name,),
50560
+ fragment: prepareFragmentShader(buffer2.fragment, common, headOptions,),
50561
+ resolutionScale: buffer2.resolutionScale ?? defaultBufferResolutionScale,
50562
+ format: buffer2.format ?? defaultBufferFormat,
50590
50563
  }));
50591
50564
  }
50592
50565
  var shaderConfigBrand = '__framer_shaderConfig__';
@@ -50644,30 +50617,32 @@ function validateShaderInputs(shaderConfig,) {
50644
50617
  }
50645
50618
  }
50646
50619
  if (shaderConfig.buffers) {
50647
- for (const buffer of shaderConfig.buffers) {
50648
- if (isUniformName(buffer.name,)) {
50649
- throw new Error(`Shader buffer name "${buffer.name}" must not start with "${uniformPrefix}".`,);
50620
+ for (const buffer2 of shaderConfig.buffers) {
50621
+ if (isUniformName(buffer2.name,)) {
50622
+ throw new Error(`Shader buffer name "${buffer2.name}" must not start with "${uniformPrefix}".`,);
50650
50623
  }
50651
- const derivedName = toBufferUniformName(buffer.name,);
50624
+ const derivedName = toBufferUniformName(buffer2.name,);
50652
50625
  const collidingName = seenDerivedNames.get(derivedName,);
50653
50626
  if (collidingName !== void 0) {
50654
50627
  throw new Error(
50655
- collidingName === buffer.name
50656
- ? `Duplicate shader buffer name "${buffer.name}".`
50657
- : `Shader buffer names "${collidingName}" and "${buffer.name}" both resolve to the same uniform "${derivedName}".`,
50628
+ collidingName === buffer2.name
50629
+ ? `Duplicate shader buffer name "${buffer2.name}".`
50630
+ : `Shader buffer names "${collidingName}" and "${buffer2.name}" both resolve to the same uniform "${derivedName}".`,
50658
50631
  );
50659
50632
  }
50660
- seenDerivedNames.set(derivedName, buffer.name,);
50661
- if (buffer.resolutionScale !== void 0) {
50662
- if (!isNumber2(buffer.resolutionScale,) || buffer.resolutionScale <= 0 || buffer.resolutionScale > 1) {
50633
+ seenDerivedNames.set(derivedName, buffer2.name,);
50634
+ if (buffer2.resolutionScale !== void 0) {
50635
+ if (!isNumber2(buffer2.resolutionScale,) || buffer2.resolutionScale <= 0 || buffer2.resolutionScale > 1) {
50663
50636
  throw new Error(
50664
- `Shader buffer "${buffer.name}" has invalid resolutionScale ${buffer.resolutionScale}. Must be in the range (0, 1].`,
50637
+ `Shader buffer "${buffer2.name}" has invalid resolutionScale ${buffer2.resolutionScale}. Must be in the range (0, 1].`,
50665
50638
  );
50666
50639
  }
50667
50640
  }
50668
- if (buffer.format !== void 0 && !shaderBufferFormats.has(buffer.format,)) {
50641
+ if (buffer2.format !== void 0 && !shaderBufferFormats.has(buffer2.format,)) {
50669
50642
  throw new Error(
50670
- `Shader buffer "${buffer.name}" has invalid format "${buffer.format}". Must be one of: ${[...shaderBufferFormats,].join(', ',)}.`,
50643
+ `Shader buffer "${buffer2.name}" has invalid format "${buffer2.format}". Must be one of: ${
50644
+ [...shaderBufferFormats,].join(', ',)
50645
+ }.`,
50671
50646
  );
50672
50647
  }
50673
50648
  }
@@ -51802,8 +51777,10 @@ function useShaderMouse(containerRef, mouseConfig,) {
51802
51777
  passive: true,
51803
51778
  capture: true,
51804
51779
  },);
51780
+ const cleanupWindowResize = resize(updateRect,);
51805
51781
  const cleanupResize = resize(el, updateRect,);
51806
51782
  const cleanupHover = hover(el, () => {
51783
+ updateRect();
51807
51784
  if (!hasEnteredOnce) {
51808
51785
  hasEnteredOnce = true;
51809
51786
  smoothX.jump(rawX.get(),);
@@ -51820,6 +51797,7 @@ function useShaderMouse(containerRef, mouseConfig,) {
51820
51797
  __unframerWindow2.removeEventListener('scroll', updateRect, {
51821
51798
  capture: true,
51822
51799
  },);
51800
+ cleanupWindowResize();
51823
51801
  cleanupResize();
51824
51802
  cleanupHover();
51825
51803
  cleanupPress();
@@ -51850,18 +51828,12 @@ function useConditionalAnimationFrame(enabled, callback,) {
51850
51828
  return () => cancelAnimationFrame(rafId,);
51851
51829
  }, [enabled, callback,],);
51852
51830
  }
51853
- var shaderPriority = {
51854
- low: 0,
51855
- medium: 1,
51856
- high: 2,
51857
- };
51858
51831
  function useShaderPoolSlot(id3, isSelected, isVisible,) {
51859
51832
  const pool = useShaderPoolContext();
51860
- const priority = isSelected ? shaderPriority.high : isVisible ? shaderPriority.medium : shaderPriority.low;
51861
51833
  const [status, setStatus,] = useState(slotStatus.noSlot,);
51862
51834
  useEffect(() => {
51863
51835
  if (!pool || !id3) return;
51864
- pool.register(id3, priority,);
51836
+ pool.register(id3, isSelected, isVisible,);
51865
51837
  startTransition2(() => setStatus(pool.getSlotStatus(id3,),));
51866
51838
  const unsub = pool.subscribe(id3, () => {
51867
51839
  startTransition2(() => setStatus(pool.getSlotStatus(id3,),));
@@ -51869,7 +51841,7 @@ function useShaderPoolSlot(id3, isSelected, isVisible,) {
51869
51841
  return () => {
51870
51842
  unsub();
51871
51843
  };
51872
- }, [pool, id3, priority,],);
51844
+ }, [pool, id3, isSelected, isVisible,],);
51873
51845
  useEffect(() => {
51874
51846
  if (!pool || !id3) return;
51875
51847
  return () => {
@@ -53089,6 +53061,7 @@ var BuiltInFontSource = class {
53089
53061
  const isVariableFont2 = Array.isArray(variationAxesData,);
53090
53062
  const variant = isVariableFont2 ? 'variable' : properties.font.fontSubFamily || 'regular';
53091
53063
  const url = createAbsoluteAssetURLFromAsset(asset,);
53064
+ const validatedVariationAxes = validateVariationAxes(variationAxesData,);
53092
53065
  const font = {
53093
53066
  assetKey: asset.key,
53094
53067
  family: fontFamily,
@@ -53096,9 +53069,11 @@ var BuiltInFontSource = class {
53096
53069
  variant,
53097
53070
  file: url,
53098
53071
  hasOpenTypeFeatures: supportsOpenType(openTypeData,),
53099
- variationAxes: validateVariationAxes(variationAxesData,),
53072
+ variationAxes: validatedVariationAxes,
53100
53073
  category: properties.font.fontCategory,
53101
- weight: variantNameToWeight(variant,),
53074
+ weight: isVariableFont2
53075
+ ? getWeightFromVariationAxes(validatedVariationAxes, properties.font.faceDescriptors?.weight,)
53076
+ : variantNameToWeight(variant,),
53102
53077
  style: getFontStyle(variant,),
53103
53078
  cssFamilyName: createCSSFamilyName(fontName, isVariableFont2,),
53104
53079
  };
@@ -53118,7 +53093,8 @@ var BuiltInFontSource = class {
53118
53093
  }
53119
53094
  static parseVariant(variant,) {
53120
53095
  const kebabCaseVariant = variantToKebabCase(variant,);
53121
- const weight = variantsNameToWeight[kebabCaseVariant];
53096
+ const isVariable = kebabCaseVariant === 'variable' || kebabCaseVariant === 'variable-italic';
53097
+ const weight = isVariable ? 400 : variantsNameToWeight[kebabCaseVariant];
53122
53098
  const style2 = getFontStyle(variant,);
53123
53099
  return {
53124
53100
  weight,
@@ -53268,6 +53244,13 @@ function variantNameToWeight(variant,) {
53268
53244
  const kebabCaseVariant = variantToKebabCase(variant,);
53269
53245
  return variantsNameToWeight[kebabCaseVariant];
53270
53246
  }
53247
+ function getWeightFromVariationAxes(variationAxes, faceWeight,) {
53248
+ const axisDefault = variationAxes?.find((axis) => axis.tag === 'wght')?.defaultValue;
53249
+ if (axisDefault !== void 0 && axisDefault >= 1 && axisDefault <= 1e3) {
53250
+ return axisDefault;
53251
+ }
53252
+ return faceWeight ?? variantNameToWeight('variable',) ?? 500;
53253
+ }
53271
53254
  function variantToKebabCase(variant,) {
53272
53255
  return variant.toLowerCase().replace(/\s+/gu, '-',);
53273
53256
  }
@@ -53655,11 +53638,11 @@ function getAssetOwnerType(asset,) {
53655
53638
  async function loadFontsWithOpenType(source,) {
53656
53639
  switch (source) {
53657
53640
  case 'google': {
53658
- const supportedFonts = await import('./framer-chunks/google-3SZHWBC6-MIC5SCB4.js');
53641
+ const supportedFonts = await import('./framer-chunks/google-3SZHWBC6-2VTQEQ7J.js');
53659
53642
  return supportedFonts.default;
53660
53643
  }
53661
53644
  case 'fontshare': {
53662
- const supportedFonts = await import('./framer-chunks/fontshare-B2QLD7YB-ZLNQ44LW.js');
53645
+ const supportedFonts = await import('./framer-chunks/fontshare-B2QLD7YB-5V3XZJAH.js');
53663
53646
  return supportedFonts.default;
53664
53647
  }
53665
53648
  default:
@@ -53669,15 +53652,15 @@ async function loadFontsWithOpenType(source,) {
53669
53652
  async function loadFontToOpenTypeFeatures(source,) {
53670
53653
  switch (source) {
53671
53654
  case 'google': {
53672
- const features = await import('./framer-chunks/google-3FCAKCAC-K2ZVMKHN.js');
53655
+ const features = await import('./framer-chunks/google-3FCAKCAC-AM34UPJK.js');
53673
53656
  return features.default;
53674
53657
  }
53675
53658
  case 'fontshare': {
53676
- const features = await import('./framer-chunks/fontshare-4THNDPMZ-L3NZDIOE.js');
53659
+ const features = await import('./framer-chunks/fontshare-4THNDPMZ-FLLTWCDO.js');
53677
53660
  return features.default;
53678
53661
  }
53679
53662
  case 'framer': {
53680
- const features = await import('./framer-chunks/framer-font-45AI7UCZ-Z3XHDH5K.js');
53663
+ const features = await import('./framer-chunks/framer-font-45AI7UCZ-CKGC4MJC.js');
53681
53664
  return features.default;
53682
53665
  }
53683
53666
  default:
@@ -54221,10 +54204,10 @@ function loadVariationAxes(source,) {
54221
54204
  const axes = (async () => {
54222
54205
  switch (source) {
54223
54206
  case 'google': {
54224
- return (await import('./framer-chunks/google-GXDJLGJB-356NWSZ7.js')).default;
54207
+ return (await import('./framer-chunks/google-GXDJLGJB-JNEJGCGD.js')).default;
54225
54208
  }
54226
54209
  case 'fontshare': {
54227
- return (await import('./framer-chunks/fontshare-O22OBJ3D-VY7WF3BB.js')).default;
54210
+ return (await import('./framer-chunks/fontshare-O22OBJ3D-FIG3CRN3.js')).default;
54228
54211
  }
54229
54212
  default:
54230
54213
  assertNever(source,);
@@ -56921,7 +56904,9 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
56921
56904
  ...rest
56922
56905
  } = props;
56923
56906
  const parentSize = useParentSize();
56924
- const isOnCanvas = environment2() === RenderTarget.canvas;
56907
+ const renderTarget = environment2();
56908
+ const isOnCanvas = renderTarget === RenderTarget.canvas;
56909
+ const isRenderingStaticContent = isOnCanvas || renderTarget === RenderTarget.export;
56925
56910
  const inCodeComponent = useContext(ComponentContainerContext,);
56926
56911
  const layoutId = useLayoutId2(props,);
56927
56912
  const fallbackRef = useRef(null,);
@@ -56968,7 +56953,7 @@ var RichTextContainer = /* @__PURE__ */ forwardRef(function RichTextContainer2(p
56968
56953
  containerStyle2.rotate = rotation;
56969
56954
  }
56970
56955
  if (positionSticky) {
56971
- if (!isOnCanvas || inCodeComponent) {
56956
+ if (!isRenderingStaticContent || inCodeComponent) {
56972
56957
  containerStyle2.position = 'sticky';
56973
56958
  containerStyle2.willChange = 'transform';
56974
56959
  containerStyle2.top = positionStickyTop;
@@ -57096,6 +57081,16 @@ function processRichTextChildren(
57096
57081
  };
57097
57082
  children = [anchorLink,];
57098
57083
  }
57084
+ if (tag === 'ol') {
57085
+ props.style = {
57086
+ ...(props.style ?? {}),
57087
+ [maxListDigitsProperty]: safeGetMaxListDigits(
57088
+ props.start ?? 1,
57089
+ Children.count(props.children,),
57090
+ props.style?.[listStyleTypeProperty] ?? '',
57091
+ ),
57092
+ };
57093
+ }
57099
57094
  }
57100
57095
  return cloneElement32(element, props, ...children,);
57101
57096
  }
@@ -57121,6 +57116,10 @@ function extractTextFromReactNode(node,) {
57121
57116
  }
57122
57117
  return '';
57123
57118
  }
57119
+ function safeGetMaxListDigits(start2, itemCount, listStyleType,) {
57120
+ const startNumber = Number(start2,) || 1;
57121
+ return getMaxListDigits(startNumber, itemCount, listStyleType,);
57122
+ }
57124
57123
  var RichTextInner = /* @__PURE__ */ forwardRef(function RichText({
57125
57124
  children,
57126
57125
  html,
@@ -57510,7 +57509,10 @@ var SharedSVGManager = class {
57510
57509
  const output = [];
57511
57510
  output.push(`<div id="svg-templates" style="${visuallyHiddenStyle}" aria-hidden="true">`,);
57512
57511
  this.entries.forEach((value) => output.push(value.svg,));
57513
- this.vectorSetItems.forEach((value) => output.push(value.svg,));
57512
+ this.vectorSetItems.forEach((value, revision,) => {
57513
+ const svg = value.svg;
57514
+ output.push(svg.includes(`id="${revision}"`,) ? svg : svg.replace(/^<svg/, `<svg id="${revision}"`,),);
57515
+ },);
57514
57516
  output.push('</div>',);
57515
57517
  return output.join('\n',);
57516
57518
  }
@@ -58296,9 +58298,9 @@ var TextComponent = /* @__PURE__ */ (() => {
58296
58298
  rotate: rotate2,
58297
58299
  },);
58298
58300
  }
58299
- const onCanvas = RenderTarget.current() === RenderTarget.canvas;
58301
+ const isRenderingStaticContent = isStaticRenderer();
58300
58302
  if (positionSticky) {
58301
- if (!onCanvas || inCodeComponent) {
58303
+ if (!isRenderingStaticContent || inCodeComponent) {
58302
58304
  style2.position = 'sticky';
58303
58305
  style2.willChange = 'transform';
58304
58306
  style2.top = positionStickyTop;
@@ -58306,7 +58308,7 @@ var TextComponent = /* @__PURE__ */ (() => {
58306
58308
  style2.bottom = positionStickyBottom;
58307
58309
  style2.left = positionStickyLeft;
58308
58310
  }
58309
- } else if (onCanvas && (positionFixed || positionAbsolute)) {
58311
+ } else if (RenderTarget.current() === RenderTarget.canvas && (positionFixed || positionAbsolute)) {
58310
58312
  style2.position = 'absolute';
58311
58313
  }
58312
58314
  }
@@ -59710,7 +59712,7 @@ var package_default = {
59710
59712
  },
59711
59713
  dependencies: {
59712
59714
  '@sqlite.org/sqlite-wasm': '^3.50.4-build1',
59713
- devalue: '^5.6.4',
59715
+ devalue: '^5.8.1',
59714
59716
  eventemitter3: '^5.0.1',
59715
59717
  fontfaceobserver: '2.2.0',
59716
59718
  'hoist-non-react-statics': '^3.3.2',